From 76c1a8668f492708b1626529e17eddb840ee95c0 Mon Sep 17 00:00:00 2001 From: zhenhui <1276357500@qq.com> Date: Tue, 3 Mar 2026 09:36:51 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitmodules | 3 + LICENSE | 21 + README.md | 120 + saiadmin-vue/.env | 5 + saiadmin-vue/.env.development | 7 + saiadmin-vue/.env.production | 7 + saiadmin-vue/.gitignore | 7 + saiadmin-vue/.vscode/settings.json | 54 + saiadmin-vue/LICENSE | 21 + saiadmin-vue/README.md | 49 + saiadmin-vue/index.html | 166 + saiadmin-vue/jsconfig.json | 12 + saiadmin-vue/package.json | 54 + saiadmin-vue/postcss.config.cjs | 6 + saiadmin-vue/public/favicon.ico | Bin 0 -> 119742 bytes saiadmin-vue/src/App.vue | 15 + saiadmin-vue/src/api/common.js | 220 + saiadmin-vue/src/api/login.js | 54 + saiadmin-vue/src/api/system/attachment.js | 27 + saiadmin-vue/src/api/system/config.js | 138 + saiadmin-vue/src/api/system/database.js | 99 + saiadmin-vue/src/api/system/dept.js | 110 + saiadmin-vue/src/api/system/dict.js | 137 + saiadmin-vue/src/api/system/emailLog.js | 30 + saiadmin-vue/src/api/system/loginLog.js | 30 + saiadmin-vue/src/api/system/menu.js | 63 + saiadmin-vue/src/api/system/monitor.js | 17 + saiadmin-vue/src/api/system/notice.js | 77 + saiadmin-vue/src/api/system/operLog.js | 30 + saiadmin-vue/src/api/system/post.js | 77 + saiadmin-vue/src/api/system/role.js | 109 + saiadmin-vue/src/api/system/user.js | 134 + saiadmin-vue/src/api/tool/crontab.js | 113 + saiadmin-vue/src/api/tool/generate.js | 135 + saiadmin-vue/src/api/tool/saipackage.js | 66 + saiadmin-vue/src/assets/404.svg | 176 + saiadmin-vue/src/assets/avatar.jpg | Bin 0 -> 36362 bytes saiadmin-vue/src/assets/image/action.svg | 1 + saiadmin-vue/src/assets/image/attach.svg | 1 + saiadmin-vue/src/assets/image/login.svg | 1 + saiadmin-vue/src/assets/image/user.svg | 1 + saiadmin-vue/src/assets/login_picture.svg | 1 + saiadmin-vue/src/assets/logo.png | Bin 0 -> 18787 bytes saiadmin-vue/src/assets/not-image.png | Bin 0 -> 2527 bytes .../assets/skins-thumb/businessGray/thumb.jpg | Bin 0 -> 1871 bytes .../src/assets/skins-thumb/city/thumb.jpg | Bin 0 -> 6664 bytes .../src/assets/skins-thumb/classics/thumb.jpg | Bin 0 -> 2210 bytes .../src/assets/skins-thumb/mine/thumb.jpg | Bin 0 -> 2010 bytes saiadmin-vue/src/assets/userBanner.jpg | Bin 0 -> 76835 bytes saiadmin-vue/src/components/index.js | 78 + .../src/components/ma-cityLinkage/index.vue | 179 + .../components/ma-cityLinkage/lib/city.json | 1 + .../src/components/ma-codeEditor/index.vue | 108 + .../src/components/ma-colorPicker/index.vue | 77 + .../src/components/ma-verifyCode/index.vue | 110 + .../src/components/ma-wangEditor/index.vue | 194 + .../src/components/sa-chart/index.vue | 38 + .../src/components/sa-checkbox/index.vue | 41 + saiadmin-vue/src/components/sa-dict/index.vue | 62 + .../components/sa-icon-picker/iconify/bi.json | 1 + .../src/components/sa-icon-picker/index.vue | 121 + saiadmin-vue/src/components/sa-icon/index.vue | 29 + .../src/components/sa-pick-image/index.vue | 414 ++ .../src/components/sa-radio/index.vue | 56 + .../src/components/sa-resource/button.vue | 82 + .../src/components/sa-resource/index.vue | 253 ++ .../src/components/sa-select/index.vue | 55 + .../src/components/sa-switch/index.vue | 60 + .../src/components/sa-table/defaultOptions.js | 132 + .../src/components/sa-table/import.vue | 72 + .../src/components/sa-table/index.vue | 778 ++++ .../src/components/sa-treeSlider/index.vue | 120 + .../src/components/sa-upload-chunk/index.vue | 298 ++ .../src/components/sa-upload-file/index.vue | 206 + .../src/components/sa-upload-image/index.vue | 234 ++ saiadmin-vue/src/components/sa-user/index.vue | 159 + saiadmin-vue/src/config/skins.js | 23 + saiadmin-vue/src/directives/auth/auth.js | 8 + saiadmin-vue/src/directives/auth/index.js | 29 + saiadmin-vue/src/directives/copy/index.js | 46 + saiadmin-vue/src/directives/index.js | 12 + saiadmin-vue/src/directives/role/index.js | 32 + saiadmin-vue/src/directives/role/role.js | 8 + saiadmin-vue/src/i18n/en/crud.js | 3 + saiadmin-vue/src/i18n/en/maResource.js | 8 + saiadmin-vue/src/i18n/en/menus.js | 53 + saiadmin-vue/src/i18n/en/skin.js | 14 + saiadmin-vue/src/i18n/en/sys.js | 92 + saiadmin-vue/src/i18n/en/upload.js | 8 + saiadmin-vue/src/i18n/en/user.js | 0 saiadmin-vue/src/i18n/index.js | 50 + saiadmin-vue/src/i18n/zh_CN/crud.js | 3 + saiadmin-vue/src/i18n/zh_CN/maResource.js | 8 + saiadmin-vue/src/i18n/zh_CN/menus.js | 53 + saiadmin-vue/src/i18n/zh_CN/skin.js | 14 + saiadmin-vue/src/i18n/zh_CN/sys.js | 92 + saiadmin-vue/src/i18n/zh_CN/upload.js | 8 + saiadmin-vue/src/i18n/zh_CN/user.js | 4 + saiadmin-vue/src/layout/404.vue | 19 + .../src/layout/components/banner/index.vue | 68 + .../src/layout/components/classic/index.vue | 21 + .../components/classic/ma-classic-header.vue | 18 + .../components/classic/ma-classic-slider.vue | 36 + .../src/layout/components/columns/index.vue | 39 + .../components/columns/ma-columns-header.vue | 18 + .../components/columns/ma-columns-menu.vue | 120 + .../components/components/children-banner.vue | 64 + .../components/components/children-menu.vue | 59 + .../components/components/iframe-view.vue | 38 + .../components/message-notification.vue | 91 + .../layout/components/components/search.vue | 4 + .../src/layout/components/components/skin.vue | 52 + .../layout/components/components/sub-menu.vue | 49 + .../src/layout/components/ma-breadcrumb.vue | 34 + .../src/layout/components/ma-buttonMenu.vue | 35 + .../src/layout/components/ma-menu.vue | 102 + .../src/layout/components/ma-operation.vue | 173 + .../src/layout/components/ma-tags.vue | 478 +++ .../src/layout/components/ma-workerArea.vue | 23 + .../src/layout/components/mixed/index.vue | 132 + .../src/layout/components/mixed/top-menu.vue | 52 + saiadmin-vue/src/layout/empty.vue | 3 + saiadmin-vue/src/layout/index.vue | 66 + saiadmin-vue/src/layout/search.vue | 241 ++ saiadmin-vue/src/layout/setting.vue | 204 + saiadmin-vue/src/main.js | 46 + saiadmin-vue/src/plugin/index.js | 8 + saiadmin-vue/src/router/homePageRoutes.js | 40 + saiadmin-vue/src/router/index.js | 57 + saiadmin-vue/src/router/webRouter.js | 25 + saiadmin-vue/src/store/index.js | 25 + saiadmin-vue/src/store/modules/app.js | 160 + saiadmin-vue/src/store/modules/config.js | 30 + saiadmin-vue/src/store/modules/dict.js | 27 + saiadmin-vue/src/store/modules/iframe.js | 41 + saiadmin-vue/src/store/modules/keepAlive.js | 46 + saiadmin-vue/src/store/modules/message.js | 24 + saiadmin-vue/src/store/modules/tag.js | 71 + saiadmin-vue/src/store/modules/terminal.js | 216 + saiadmin-vue/src/store/modules/user.js | 199 + saiadmin-vue/src/style/animation.less | 56 + saiadmin-vue/src/style/dark.less | 14 + saiadmin-vue/src/style/global.less | 243 ++ saiadmin-vue/src/style/index.css | 4 + saiadmin-vue/src/style/skin.less | 4 + .../src/style/skins/businessGray/index.less | 148 + .../src/style/skins/city/background.jpg | Bin 0 -> 643590 bytes saiadmin-vue/src/style/skins/city/index.less | 146 + .../src/style/skins/classics/index.less | 93 + saiadmin-vue/src/style/skins/mine/index.less | 56 + saiadmin-vue/src/utils/common.js | 261 ++ saiadmin-vue/src/utils/print.js | 135 + saiadmin-vue/src/utils/push-vue.js | 732 ++++ saiadmin-vue/src/utils/request.js | 192 + saiadmin-vue/src/utils/tool.js | 525 +++ .../components/components/st-announced.vue | 56 + .../components/components/st-count.vue | 90 + .../components/components/st-loginChart.vue | 184 + .../components/components/st-saiadmin.vue | 34 + .../components/components/st-welcome.vue | 58 + .../views/dashboard/components/statistics.vue | 18 + .../views/dashboard/components/work-panel.vue | 3 + saiadmin-vue/src/views/dashboard/index.vue | 16 + .../userCenter/components/modifyPassword.vue | 128 + .../userCenter/components/userInfomation.vue | 45 + .../src/views/dashboard/userCenter/index.vue | 113 + saiadmin-vue/src/views/login.vue | 297 ++ .../src/views/system/attachment/index.vue | 285 ++ .../system/config/components/add-group.vue | 95 + .../views/system/config/components/edit.vue | 152 + .../system/config/components/js/inputType.js | 9 + .../config/components/manage-config.vue | 112 + .../src/views/system/config/index.vue | 338 ++ .../src/views/system/database/index.vue | 128 + .../src/views/system/database/recycle.vue | 132 + .../src/views/system/database/struct.vue | 60 + saiadmin-vue/src/views/system/dept/edit.vue | 145 + saiadmin-vue/src/views/system/dept/index.vue | 126 + saiadmin-vue/src/views/system/dept/leader.vue | 105 + .../src/views/system/dict/dataList.vue | 133 + .../src/views/system/dict/edit-data.vue | 130 + saiadmin-vue/src/views/system/dict/edit.vue | 120 + saiadmin-vue/src/views/system/dict/index.vue | 135 + .../src/views/system/logs/emailLog.vue | 110 + .../src/views/system/logs/loginLog.vue | 102 + .../src/views/system/logs/operLog.vue | 89 + saiadmin-vue/src/views/system/menu/edit.vue | 175 + saiadmin-vue/src/views/system/menu/index.vue | 131 + .../src/views/system/monitor/server/index.vue | 126 + saiadmin-vue/src/views/system/notice/edit.vue | 122 + .../src/views/system/notice/index.vue | 98 + saiadmin-vue/src/views/system/post/edit.vue | 124 + saiadmin-vue/src/views/system/post/index.vue | 136 + saiadmin-vue/src/views/system/post/view.vue | 67 + .../system/role/components/menuPermission.vue | 119 + saiadmin-vue/src/views/system/role/edit.vue | 141 + saiadmin-vue/src/views/system/role/index.vue | 132 + saiadmin-vue/src/views/system/user/edit.vue | 229 + saiadmin-vue/src/views/system/user/index.vue | 246 ++ .../views/tool/code/components/editInfo.vue | 704 ++++ .../views/tool/code/components/loadTable.vue | 128 + .../views/tool/code/components/preview.vue | 48 + .../tool/code/components/settingComponent.vue | 120 + saiadmin-vue/src/views/tool/code/index.vue | 178 + saiadmin-vue/src/views/tool/code/js/vars.js | 50 + saiadmin-vue/src/views/tool/crontab/edit.vue | 201 + saiadmin-vue/src/views/tool/crontab/index.vue | 156 + .../src/views/tool/crontab/logList.vue | 89 + saiadmin-vue/src/views/tool/crontab/view.vue | 57 + saiadmin-vue/src/views/tool/install/index.vue | 1013 +++++ .../src/views/tool/install/install-box.vue | 105 + .../src/views/tool/install/terminal.vue | 302 ++ saiadmin-vue/tailwind.config.cjs | 28 + saiadmin-vue/tsconfig.json | 36 + saiadmin-vue/vite.config.js | 60 + saiadmin-vue/yarn.lock | 3734 +++++++++++++++++ webman/.env.example | 23 + webman/.gitignore | 7 + webman/LICENSE | 21 + webman/app/controller/IndexController.php | 13 + webman/app/functions.php | 4 + webman/app/middleware/StaticFile.php | 42 + webman/app/process/Http.php | 10 + webman/app/process/Monitor.php | 305 ++ webman/app/view/index/view.html | 14 + webman/composer.json | 57 + webman/config/app.php | 26 + webman/config/autoload.php | 21 + webman/config/bootstrap.php | 17 + webman/config/cache.php | 18 + webman/config/container.php | 15 + webman/config/dependence.php | 15 + webman/config/exception.php | 17 + webman/config/log.php | 32 + webman/config/middleware.php | 15 + webman/config/process.php | 62 + webman/config/redis.php | 17 + webman/config/route.php | 21 + webman/config/server.php | 23 + webman/config/session.php | 65 + webman/config/static.php | 23 + webman/config/think-orm.php | 42 + webman/config/translation.php | 25 + webman/config/view.php | 22 + webman/public/assets/404-C84wjUkK.js | 1 + webman/public/assets/404-C8qIY0DY.js | 1 + webman/public/assets/404-D3qmwmJf.svg | 176 + webman/public/assets/404-D4vdWXN8.css | 1 + .../public/assets/@arco-design-BiEPdq2w.css | 1 + webman/public/assets/@arco-design-uttiljWv.js | 4 + webman/public/assets/@iconify-BfRLEUc9.js | 1 + webman/public/assets/@intlify-CJ2pDqUV.js | 16 + webman/public/assets/@vue-9ZIPiVZG.js | 18 + webman/public/assets/@wangeditor-Bg8kJaak.js | 186 + webman/public/assets/@wangeditor-nHDhGvq6.css | 1 + webman/public/assets/add-group-B6RsDY0n.js | 1 + webman/public/assets/add-group-D5MnfTKt.js | 1 + webman/public/assets/avatar-DJF9etZw.jpg | Bin 0 -> 36362 bytes webman/public/assets/avatar-DvSZjoFF.js | 1 + webman/public/assets/axios-BOAqGR8s.js | 2 + webman/public/assets/b-tween-BtQQsX34.js | 1 + webman/public/assets/b-validate-DHOn5MGm.js | 1 + webman/public/assets/background-W5wCjb__.jpg | Bin 0 -> 643590 bytes .../call-bind-apply-helpers-CXPkwEps.js | 1 + .../call-bind-apply-helpers-DFdvRtIg.js | 1 + webman/public/assets/call-bound-B36HnitE.js | 1 + webman/public/assets/call-bound-BMZ_xw6V.js | 1 + webman/public/assets/clipboard-ehac6u_s.js | 6 + webman/public/assets/codicon-DcSIACem.ttf | Bin 0 -> 70776 bytes webman/public/assets/color-JIMhKyf3.js | 1 + webman/public/assets/color-name-BQ5IbGbl.js | 1 + webman/public/assets/color-string-Ckj7g19G.js | 1 + .../compute-scroll-into-view-1gs_hJI2.js | 1 + webman/public/assets/config-CFOHD7nk.js | 1 + webman/public/assets/config-ZWMRzLkl.js | 1 + webman/public/assets/crontab-D2UudUxl.js | 1 + webman/public/assets/crontab-DHsN78bF.js | 1 + webman/public/assets/crypto-js-B6um_4t4.js | 14 + webman/public/assets/dataList-BdaY1nZd.js | 1 + webman/public/assets/dataList-tp5sU58K.js | 1 + webman/public/assets/database-C9oinknn.js | 1 + webman/public/assets/database-CTMAb1z4.js | 1 + webman/public/assets/dayjs-DUkVwsK-.js | 1 + webman/public/assets/dept-B7mu9jEv.js | 1 + webman/public/assets/dept-BazEhZT0.js | 1 + webman/public/assets/dict-C6FxRZf9.js | 1 + webman/public/assets/dict-Di-hEQDg.js | 1 + webman/public/assets/dunder-proto-BvNz4iDg.js | 1 + webman/public/assets/dunder-proto-CiSsr-aM.js | 1 + webman/public/assets/echarts-Cz-L25MO.js | 30 + webman/public/assets/edit--su55P8f.js | 1 + webman/public/assets/edit-B2-MKvH2.js | 1 + webman/public/assets/edit-BT4iQK1s.js | 1 + webman/public/assets/edit-BYRBvBoh.js | 1 + webman/public/assets/edit-C410mWZI.js | 1 + webman/public/assets/edit-C4LjrAZO.js | 1 + webman/public/assets/edit-CqvT7GJF.js | 2 + webman/public/assets/edit-CyUWeZne.js | 1 + webman/public/assets/edit-D3WKGVOx.js | 1 + webman/public/assets/edit-D9KKKNcV.js | 1 + webman/public/assets/edit-D_EZLa8V.js | 1 + webman/public/assets/edit-Dj6-BOG2.js | 2 + webman/public/assets/edit-DjscfkpF.js | 1 + webman/public/assets/edit-DyIQuM4D.js | 1 + webman/public/assets/edit-KUYyIVcu.js | 1 + webman/public/assets/edit-a5eHS414.js | 1 + webman/public/assets/edit-data-BixJMCQA.js | 1 + webman/public/assets/edit-data-D-Kheltb.js | 1 + webman/public/assets/edit-l4j53F48.js | 1 + webman/public/assets/edit-xZRcGvRF.js | 1 + webman/public/assets/editInfo-6g9YpDTS.css | 1 + webman/public/assets/editInfo-ChAN-DIk.js | 1 + webman/public/assets/editInfo-DXBGScbZ.js | 1 + webman/public/assets/editInfo-NjiBc5a6.js | 1 + webman/public/assets/editInfo-Y-e0zUFW.css | 1 + webman/public/assets/emailLog-C2m1eBdk.js | 1 + webman/public/assets/emailLog-CBkhYq_H.js | 1 + .../assets/es-define-property-bDCdrV83.js | 1 + webman/public/assets/es-errors-CFxpeikN.js | 1 + .../public/assets/es-object-atoms-Ditt1eQ6.js | 1 + webman/public/assets/file2md5-B4-SI92N.js | 1 + webman/public/assets/formDesign-BDBYukjt.js | 1 + webman/public/assets/formDesign-BSnEilW5.css | 1 + .../public/assets/function-bind-BbkWVFrm.js | 1 + .../public/assets/function-bind-CHqF18-c.js | 1 + webman/public/assets/generate-CUmP6rhy.js | 1 + webman/public/assets/generate-CvHPqnHt.js | 1 + .../public/assets/get-intrinsic-CCph2EoF.js | 1 + .../public/assets/get-intrinsic-CdQ0j820.js | 1 + webman/public/assets/get-proto-CEhLFpt-.js | 1 + webman/public/assets/get-proto-cKMTtFGz.js | 1 + webman/public/assets/gopd-fcd2-aIC.js | 1 + webman/public/assets/has-symbols-BaUvM3gb.js | 1 + webman/public/assets/hasown-C2NEVhna.js | 1 + webman/public/assets/hasown-DwiY0sux.js | 1 + webman/public/assets/index-9ajc8XCP.js | 1 + webman/public/assets/index-B9HpnnY2.js | 1 + webman/public/assets/index-BFIUdcGG.js | 1 + webman/public/assets/index-BZxaLGo4.css | 1 + webman/public/assets/index-B_9N8_8i.js | 1 + webman/public/assets/index-BbRNy9mZ.js | 1 + webman/public/assets/index-Bfucj2gf.css | 1 + webman/public/assets/index-BhCz8zJ3.css | 1 + webman/public/assets/index-Bl1y9N2j.js | 1 + webman/public/assets/index-BlmJTHZZ.js | 1 + webman/public/assets/index-BqLpuig7.js | 1 + webman/public/assets/index-BskNDCu3.js | 1 + webman/public/assets/index-C2WOaPMB.js | 1 + webman/public/assets/index-C4UnJrYE.css | 1 + webman/public/assets/index-C6WqqdCm.js | 1 + webman/public/assets/index-CC62xq0j.css | 1 + webman/public/assets/index-CNx4HHXc.js | 1 + webman/public/assets/index-CYLgbsWO.js | 1 + webman/public/assets/index-CYYsyvFj.css | 1 + webman/public/assets/index-CaZcXSlq.js | 1 + webman/public/assets/index-CgeF7ukd.js | 2 + webman/public/assets/index-ChWaTs2V.js | 1 + webman/public/assets/index-CioU6uju.js | 1 + webman/public/assets/index-CjSAeS3E.js | 1 + webman/public/assets/index-Cjh1bGmI.js | 1 + webman/public/assets/index-D4ERJytk.js | 1 + webman/public/assets/index-D5MGc_nr.css | 1 + webman/public/assets/index-D8t8-Vcv.js | 1 + webman/public/assets/index-DDnFF-c6.js | 1 + webman/public/assets/index-DL3BjnsO.js | 2 + webman/public/assets/index-DM0TYnz_.js | 1 + webman/public/assets/index-DRV136vu.js | 1 + webman/public/assets/index-DYT0L2ga.js | 1 + webman/public/assets/index-DZpgLrrT.js | 1 + webman/public/assets/index-DaXTbXVv.js | 1 + webman/public/assets/index-Dh0mztjy.js | 1 + webman/public/assets/index-DkGLNqVb.js | 12 + webman/public/assets/index-Dp4EISnj.css | 1 + webman/public/assets/index-DpRapO2z.js | 1 + webman/public/assets/index-DqWV4YeH.js | 1 + webman/public/assets/index-DzkS705W.js | 1 + webman/public/assets/index-FIDUFMiE.css | 1 + webman/public/assets/index-SzGozy2_.js | 1 + webman/public/assets/index-XqCN5tvw.js | 1 + webman/public/assets/index-Ymm_9TE1.js | 1 + webman/public/assets/index-i94lRRfC.js | 1 + webman/public/assets/index-kafhfDIe.css | 1 + webman/public/assets/index-lkcZwK3M.js | 1 + webman/public/assets/index-ybrmzYq5.js | 12 + webman/public/assets/install-box-CBgEvQY9.js | 1 + webman/public/assets/install-box-UcToEVc_.js | 1 + webman/public/assets/is-arrayish-BII_q15j.js | 1 + webman/public/assets/leader-CBXB0tWK.js | 1 + webman/public/assets/leader-hmQzSqrT.js | 1 + webman/public/assets/loadTable-BDVe-iv3.js | 1 + webman/public/assets/loadTable-BFTONwXN.js | 1 + webman/public/assets/loadTable-hzlR-U5D.js | 1 + webman/public/assets/lodash-fWIJiXPB.js | 27 + webman/public/assets/lodash.noop-BeiKyXVG.js | 1 + webman/public/assets/logList-DmhpOLmd.js | 1 + webman/public/assets/logList-uYU5rm9Q.js | 1 + webman/public/assets/login-45LPtqKq.css | 1 + webman/public/assets/login-BS9dzljk.js | 1 + webman/public/assets/login-BtLUskZ_.js | 1 + webman/public/assets/loginLog-B1b2avGQ.js | 1 + webman/public/assets/loginLog-BblWFeAK.js | 1 + .../public/assets/login_picture-C4j-88yw.svg | 1 + webman/public/assets/logo-5EOo6F45.png | Bin 0 -> 18787 bytes webman/public/assets/logo-B7uA2Tfd.js | 1 + .../public/assets/manage-config-B0P_8HfQ.js | 1 + .../public/assets/manage-config-DHBeLiDi.js | 1 + .../public/assets/math-intrinsics-Cv-yPkyD.js | 1 + webman/public/assets/menu-CBqt8CnT.js | 1 + webman/public/assets/menu-CgiEA4rB.js | 1 + .../public/assets/menuPermission-0cOEYOYw.js | 1 + .../public/assets/menuPermission-B9LCPnXg.js | 1 + .../public/assets/menuPermission-Dvq43lIN.css | 1 + .../public/assets/modifyPassword-CrighWRv.js | 1 + .../public/assets/modifyPassword-ISylktRO.js | 1 + .../public/assets/monaco-editor-DLvI6UQ2.css | 1 + .../public/assets/monaco-editor-nMXQdunA.js | 657 +++ webman/public/assets/nprogress-CSXic_Zd.css | 1 + webman/public/assets/nprogress-DxiOKil-.js | 2 + .../assets/number-precision-BW_FzNZC.js | 1 + .../public/assets/object-inspect-Pz2pmunN.js | 4 + webman/public/assets/operLog-Ba1fhCTF.js | 1 + webman/public/assets/operLog-CpGgCm9d.js | 1 + webman/public/assets/pinia-CtMvrpix.js | 5 + webman/public/assets/post-CmCXCNyH.js | 1 + webman/public/assets/post-DszuaI2s.js | 1 + webman/public/assets/preview-7AX_8-q4.js | 1 + webman/public/assets/preview-Bqm1bMFJ.js | 1 + webman/public/assets/preview-F38rEx2-.js | 1 + webman/public/assets/preview-R7hQO_hS.css | 1 + webman/public/assets/preview-vHikicIV.css | 1 + webman/public/assets/qs-CGfOb-kZ.js | 1 + webman/public/assets/qs-DkPR50Nj.js | 1 + webman/public/assets/recycle-08ccYGa5.js | 1 + webman/public/assets/recycle-CsDo7zQj.js | 1 + .../public/assets/resize-detector-G6vbKCU7.js | 1 + .../resize-observer-polyfill-B1PUzC5B.js | 1 + webman/public/assets/role-C_2eDkr0.js | 1 + webman/public/assets/role-CkU346eF.js | 1 + .../scroll-into-view-if-needed-SxpMpKWN.js | 1 + .../assets/settingComponent-BZ1sm0m2.js | 1 + .../assets/settingComponent-BvoGVFoj.js | 1 + .../assets/settingComponent-C9EG_z5A.js | 1 + .../assets/settingComponent-CO66zv16.css | 1 + .../assets/settingComponent-jp-QAGGD.css | 1 + webman/public/assets/side-channel-0xN0c_x9.js | 1 + webman/public/assets/side-channel-DLYplXY8.js | 1 + .../assets/side-channel-list-asz5kCf8.js | 1 + .../assets/side-channel-map-Cq5rP8eY.js | 1 + .../assets/side-channel-map-DBz1yoQn.js | 1 + .../assets/side-channel-weakmap-B70DURAT.js | 1 + .../assets/side-channel-weakmap-CMrfu08b.js | 1 + .../public/assets/simple-swizzle-BUB9Iq-C.js | 1 + webman/public/assets/sortablejs-C83syoBY.js | 6 + webman/public/assets/spark-md5-D8tidE2e.js | 1 + webman/public/assets/st-announced-CLQoQ4wT.js | 1 + webman/public/assets/st-announced-DrJqprDO.js | 1 + webman/public/assets/st-count-9mj4Scq-.js | 1 + webman/public/assets/st-count-BYk9DI1y.css | 1 + webman/public/assets/st-count-DHnX2X1-.js | 1 + .../public/assets/st-loginChart-2_NUfV4F.css | 1 + .../public/assets/st-loginChart-Ce9YXVXR.js | 4 + .../public/assets/st-loginChart-DW20RySP.js | 4 + webman/public/assets/st-saiadmin-75xpyoM0.js | 1 + webman/public/assets/st-saiadmin-wsMYFz7O.js | 1 + webman/public/assets/st-welcome-CzRY8ecE.js | 1 + webman/public/assets/st-welcome-DlDaAGsu.css | 1 + webman/public/assets/st-welcome-qOYCIGst.js | 1 + webman/public/assets/statistics-B5GKQmFw.js | 1 + webman/public/assets/statistics-C7hjx8ku.js | 1 + webman/public/assets/struct-BuDD2Spc.js | 1 + webman/public/assets/struct-CEzpDVcZ.js | 1 + webman/public/assets/table-BHRaYvrI.js | 1 + webman/public/assets/table-BjY8BMqW.js | 1 + webman/public/assets/table-CVTajxM4.css | 1 + webman/public/assets/terminal-BsIK5D1b.css | 1 + webman/public/assets/terminal-C7g1OY6E.js | 1 + webman/public/assets/terminal-CmQREFQF.js | 1 + webman/public/assets/terminal-ovG3j2Rs.css | 1 + webman/public/assets/thumb-DX6EaRRA.jpg | Bin 0 -> 6664 bytes webman/public/assets/tslib-BDyQ-Jie.js | 14 + webman/public/assets/user-BW-rYcwt.js | 1 + webman/public/assets/user-pcE09jl3.js | 1 + webman/public/assets/userBanner-CTBkQiTM.jpg | Bin 0 -> 76835 bytes .../public/assets/userInfomation-BuBbQVpX.js | 1 + .../public/assets/userInfomation-DALxJbDz.js | 1 + webman/public/assets/vars-CZGqfX5Y.js | 1 + webman/public/assets/view-CHRVpyaZ.js | 1 + webman/public/assets/view-Df7wOQNg.js | 1 + webman/public/assets/view-DkYlBne4.js | 1 + webman/public/assets/view-JzXCzoqh.js | 1 + webman/public/assets/vue-QIJ1KGct.js | 5 + .../public/assets/vue-clipboard3-DpvFlCWw.js | 1 + .../public/assets/vue-color-kit-dVVLog6c.css | 1 + .../public/assets/vue-color-kit-w75Wyu4C.js | 5 + webman/public/assets/vue-demi-l0sNRNKZ.js | 1 + webman/public/assets/vue-echarts-B-rvonkO.js | 17 + webman/public/assets/vue-i18n-PeqK6azz.js | 5 + webman/public/assets/vue-router-DXldG2q0.js | 5 + webman/public/assets/work-panel-BO2MRm6y.js | 1 + webman/public/assets/work-panel-Bf8dYDN6.js | 1 + webman/public/assets/zrender-xbpiMqDc.js | 18 + webman/public/favicon.ico | Bin 0 -> 119742 bytes webman/public/index.html | 229 + webman/public/npm-install-test/package.json | 16 + webman/start.php | 5 + webman/support/Request.php | 48 + webman/support/Response.php | 24 + webman/support/bootstrap.php | 139 + webman/windows.bat | 3 + webman/windows.php | 136 + 510 files changed, 28241 insertions(+) create mode 100644 .gitmodules create mode 100644 LICENSE create mode 100644 README.md create mode 100644 saiadmin-vue/.env create mode 100644 saiadmin-vue/.env.development create mode 100644 saiadmin-vue/.env.production create mode 100644 saiadmin-vue/.gitignore create mode 100644 saiadmin-vue/.vscode/settings.json create mode 100644 saiadmin-vue/LICENSE create mode 100644 saiadmin-vue/README.md create mode 100644 saiadmin-vue/index.html create mode 100644 saiadmin-vue/jsconfig.json create mode 100644 saiadmin-vue/package.json create mode 100644 saiadmin-vue/postcss.config.cjs create mode 100644 saiadmin-vue/public/favicon.ico create mode 100644 saiadmin-vue/src/App.vue create mode 100644 saiadmin-vue/src/api/common.js create mode 100644 saiadmin-vue/src/api/login.js create mode 100644 saiadmin-vue/src/api/system/attachment.js create mode 100644 saiadmin-vue/src/api/system/config.js create mode 100644 saiadmin-vue/src/api/system/database.js create mode 100644 saiadmin-vue/src/api/system/dept.js create mode 100644 saiadmin-vue/src/api/system/dict.js create mode 100644 saiadmin-vue/src/api/system/emailLog.js create mode 100644 saiadmin-vue/src/api/system/loginLog.js create mode 100644 saiadmin-vue/src/api/system/menu.js create mode 100644 saiadmin-vue/src/api/system/monitor.js create mode 100644 saiadmin-vue/src/api/system/notice.js create mode 100644 saiadmin-vue/src/api/system/operLog.js create mode 100644 saiadmin-vue/src/api/system/post.js create mode 100644 saiadmin-vue/src/api/system/role.js create mode 100644 saiadmin-vue/src/api/system/user.js create mode 100644 saiadmin-vue/src/api/tool/crontab.js create mode 100644 saiadmin-vue/src/api/tool/generate.js create mode 100644 saiadmin-vue/src/api/tool/saipackage.js create mode 100644 saiadmin-vue/src/assets/404.svg create mode 100644 saiadmin-vue/src/assets/avatar.jpg create mode 100644 saiadmin-vue/src/assets/image/action.svg create mode 100644 saiadmin-vue/src/assets/image/attach.svg create mode 100644 saiadmin-vue/src/assets/image/login.svg create mode 100644 saiadmin-vue/src/assets/image/user.svg create mode 100644 saiadmin-vue/src/assets/login_picture.svg create mode 100644 saiadmin-vue/src/assets/logo.png create mode 100644 saiadmin-vue/src/assets/not-image.png create mode 100644 saiadmin-vue/src/assets/skins-thumb/businessGray/thumb.jpg create mode 100644 saiadmin-vue/src/assets/skins-thumb/city/thumb.jpg create mode 100644 saiadmin-vue/src/assets/skins-thumb/classics/thumb.jpg create mode 100644 saiadmin-vue/src/assets/skins-thumb/mine/thumb.jpg create mode 100644 saiadmin-vue/src/assets/userBanner.jpg create mode 100644 saiadmin-vue/src/components/index.js create mode 100644 saiadmin-vue/src/components/ma-cityLinkage/index.vue create mode 100644 saiadmin-vue/src/components/ma-cityLinkage/lib/city.json create mode 100644 saiadmin-vue/src/components/ma-codeEditor/index.vue create mode 100644 saiadmin-vue/src/components/ma-colorPicker/index.vue create mode 100644 saiadmin-vue/src/components/ma-verifyCode/index.vue create mode 100644 saiadmin-vue/src/components/ma-wangEditor/index.vue create mode 100644 saiadmin-vue/src/components/sa-chart/index.vue create mode 100644 saiadmin-vue/src/components/sa-checkbox/index.vue create mode 100644 saiadmin-vue/src/components/sa-dict/index.vue create mode 100644 saiadmin-vue/src/components/sa-icon-picker/iconify/bi.json create mode 100644 saiadmin-vue/src/components/sa-icon-picker/index.vue create mode 100644 saiadmin-vue/src/components/sa-icon/index.vue create mode 100644 saiadmin-vue/src/components/sa-pick-image/index.vue create mode 100644 saiadmin-vue/src/components/sa-radio/index.vue create mode 100644 saiadmin-vue/src/components/sa-resource/button.vue create mode 100644 saiadmin-vue/src/components/sa-resource/index.vue create mode 100644 saiadmin-vue/src/components/sa-select/index.vue create mode 100644 saiadmin-vue/src/components/sa-switch/index.vue create mode 100644 saiadmin-vue/src/components/sa-table/defaultOptions.js create mode 100644 saiadmin-vue/src/components/sa-table/import.vue create mode 100644 saiadmin-vue/src/components/sa-table/index.vue create mode 100644 saiadmin-vue/src/components/sa-treeSlider/index.vue create mode 100644 saiadmin-vue/src/components/sa-upload-chunk/index.vue create mode 100644 saiadmin-vue/src/components/sa-upload-file/index.vue create mode 100644 saiadmin-vue/src/components/sa-upload-image/index.vue create mode 100644 saiadmin-vue/src/components/sa-user/index.vue create mode 100644 saiadmin-vue/src/config/skins.js create mode 100644 saiadmin-vue/src/directives/auth/auth.js create mode 100644 saiadmin-vue/src/directives/auth/index.js create mode 100644 saiadmin-vue/src/directives/copy/index.js create mode 100644 saiadmin-vue/src/directives/index.js create mode 100644 saiadmin-vue/src/directives/role/index.js create mode 100644 saiadmin-vue/src/directives/role/role.js create mode 100644 saiadmin-vue/src/i18n/en/crud.js create mode 100644 saiadmin-vue/src/i18n/en/maResource.js create mode 100644 saiadmin-vue/src/i18n/en/menus.js create mode 100644 saiadmin-vue/src/i18n/en/skin.js create mode 100644 saiadmin-vue/src/i18n/en/sys.js create mode 100644 saiadmin-vue/src/i18n/en/upload.js create mode 100644 saiadmin-vue/src/i18n/en/user.js create mode 100644 saiadmin-vue/src/i18n/index.js create mode 100644 saiadmin-vue/src/i18n/zh_CN/crud.js create mode 100644 saiadmin-vue/src/i18n/zh_CN/maResource.js create mode 100644 saiadmin-vue/src/i18n/zh_CN/menus.js create mode 100644 saiadmin-vue/src/i18n/zh_CN/skin.js create mode 100644 saiadmin-vue/src/i18n/zh_CN/sys.js create mode 100644 saiadmin-vue/src/i18n/zh_CN/upload.js create mode 100644 saiadmin-vue/src/i18n/zh_CN/user.js create mode 100644 saiadmin-vue/src/layout/404.vue create mode 100644 saiadmin-vue/src/layout/components/banner/index.vue create mode 100644 saiadmin-vue/src/layout/components/classic/index.vue create mode 100644 saiadmin-vue/src/layout/components/classic/ma-classic-header.vue create mode 100644 saiadmin-vue/src/layout/components/classic/ma-classic-slider.vue create mode 100644 saiadmin-vue/src/layout/components/columns/index.vue create mode 100644 saiadmin-vue/src/layout/components/columns/ma-columns-header.vue create mode 100644 saiadmin-vue/src/layout/components/columns/ma-columns-menu.vue create mode 100644 saiadmin-vue/src/layout/components/components/children-banner.vue create mode 100644 saiadmin-vue/src/layout/components/components/children-menu.vue create mode 100644 saiadmin-vue/src/layout/components/components/iframe-view.vue create mode 100644 saiadmin-vue/src/layout/components/components/message-notification.vue create mode 100644 saiadmin-vue/src/layout/components/components/search.vue create mode 100644 saiadmin-vue/src/layout/components/components/skin.vue create mode 100644 saiadmin-vue/src/layout/components/components/sub-menu.vue create mode 100644 saiadmin-vue/src/layout/components/ma-breadcrumb.vue create mode 100644 saiadmin-vue/src/layout/components/ma-buttonMenu.vue create mode 100644 saiadmin-vue/src/layout/components/ma-menu.vue create mode 100644 saiadmin-vue/src/layout/components/ma-operation.vue create mode 100644 saiadmin-vue/src/layout/components/ma-tags.vue create mode 100644 saiadmin-vue/src/layout/components/ma-workerArea.vue create mode 100644 saiadmin-vue/src/layout/components/mixed/index.vue create mode 100644 saiadmin-vue/src/layout/components/mixed/top-menu.vue create mode 100644 saiadmin-vue/src/layout/empty.vue create mode 100644 saiadmin-vue/src/layout/index.vue create mode 100644 saiadmin-vue/src/layout/search.vue create mode 100644 saiadmin-vue/src/layout/setting.vue create mode 100644 saiadmin-vue/src/main.js create mode 100644 saiadmin-vue/src/plugin/index.js create mode 100644 saiadmin-vue/src/router/homePageRoutes.js create mode 100644 saiadmin-vue/src/router/index.js create mode 100644 saiadmin-vue/src/router/webRouter.js create mode 100644 saiadmin-vue/src/store/index.js create mode 100644 saiadmin-vue/src/store/modules/app.js create mode 100644 saiadmin-vue/src/store/modules/config.js create mode 100644 saiadmin-vue/src/store/modules/dict.js create mode 100644 saiadmin-vue/src/store/modules/iframe.js create mode 100644 saiadmin-vue/src/store/modules/keepAlive.js create mode 100644 saiadmin-vue/src/store/modules/message.js create mode 100644 saiadmin-vue/src/store/modules/tag.js create mode 100644 saiadmin-vue/src/store/modules/terminal.js create mode 100644 saiadmin-vue/src/store/modules/user.js create mode 100644 saiadmin-vue/src/style/animation.less create mode 100644 saiadmin-vue/src/style/dark.less create mode 100644 saiadmin-vue/src/style/global.less create mode 100644 saiadmin-vue/src/style/index.css create mode 100644 saiadmin-vue/src/style/skin.less create mode 100644 saiadmin-vue/src/style/skins/businessGray/index.less create mode 100644 saiadmin-vue/src/style/skins/city/background.jpg create mode 100644 saiadmin-vue/src/style/skins/city/index.less create mode 100644 saiadmin-vue/src/style/skins/classics/index.less create mode 100644 saiadmin-vue/src/style/skins/mine/index.less create mode 100644 saiadmin-vue/src/utils/common.js create mode 100644 saiadmin-vue/src/utils/print.js create mode 100644 saiadmin-vue/src/utils/push-vue.js create mode 100644 saiadmin-vue/src/utils/request.js create mode 100644 saiadmin-vue/src/utils/tool.js create mode 100644 saiadmin-vue/src/views/dashboard/components/components/st-announced.vue create mode 100644 saiadmin-vue/src/views/dashboard/components/components/st-count.vue create mode 100644 saiadmin-vue/src/views/dashboard/components/components/st-loginChart.vue create mode 100644 saiadmin-vue/src/views/dashboard/components/components/st-saiadmin.vue create mode 100644 saiadmin-vue/src/views/dashboard/components/components/st-welcome.vue create mode 100644 saiadmin-vue/src/views/dashboard/components/statistics.vue create mode 100644 saiadmin-vue/src/views/dashboard/components/work-panel.vue create mode 100644 saiadmin-vue/src/views/dashboard/index.vue create mode 100644 saiadmin-vue/src/views/dashboard/userCenter/components/modifyPassword.vue create mode 100644 saiadmin-vue/src/views/dashboard/userCenter/components/userInfomation.vue create mode 100644 saiadmin-vue/src/views/dashboard/userCenter/index.vue create mode 100644 saiadmin-vue/src/views/login.vue create mode 100644 saiadmin-vue/src/views/system/attachment/index.vue create mode 100644 saiadmin-vue/src/views/system/config/components/add-group.vue create mode 100644 saiadmin-vue/src/views/system/config/components/edit.vue create mode 100644 saiadmin-vue/src/views/system/config/components/js/inputType.js create mode 100644 saiadmin-vue/src/views/system/config/components/manage-config.vue create mode 100644 saiadmin-vue/src/views/system/config/index.vue create mode 100644 saiadmin-vue/src/views/system/database/index.vue create mode 100644 saiadmin-vue/src/views/system/database/recycle.vue create mode 100644 saiadmin-vue/src/views/system/database/struct.vue create mode 100644 saiadmin-vue/src/views/system/dept/edit.vue create mode 100644 saiadmin-vue/src/views/system/dept/index.vue create mode 100644 saiadmin-vue/src/views/system/dept/leader.vue create mode 100644 saiadmin-vue/src/views/system/dict/dataList.vue create mode 100644 saiadmin-vue/src/views/system/dict/edit-data.vue create mode 100644 saiadmin-vue/src/views/system/dict/edit.vue create mode 100644 saiadmin-vue/src/views/system/dict/index.vue create mode 100644 saiadmin-vue/src/views/system/logs/emailLog.vue create mode 100644 saiadmin-vue/src/views/system/logs/loginLog.vue create mode 100644 saiadmin-vue/src/views/system/logs/operLog.vue create mode 100644 saiadmin-vue/src/views/system/menu/edit.vue create mode 100644 saiadmin-vue/src/views/system/menu/index.vue create mode 100644 saiadmin-vue/src/views/system/monitor/server/index.vue create mode 100644 saiadmin-vue/src/views/system/notice/edit.vue create mode 100644 saiadmin-vue/src/views/system/notice/index.vue create mode 100644 saiadmin-vue/src/views/system/post/edit.vue create mode 100644 saiadmin-vue/src/views/system/post/index.vue create mode 100644 saiadmin-vue/src/views/system/post/view.vue create mode 100644 saiadmin-vue/src/views/system/role/components/menuPermission.vue create mode 100644 saiadmin-vue/src/views/system/role/edit.vue create mode 100644 saiadmin-vue/src/views/system/role/index.vue create mode 100644 saiadmin-vue/src/views/system/user/edit.vue create mode 100644 saiadmin-vue/src/views/system/user/index.vue create mode 100644 saiadmin-vue/src/views/tool/code/components/editInfo.vue create mode 100644 saiadmin-vue/src/views/tool/code/components/loadTable.vue create mode 100644 saiadmin-vue/src/views/tool/code/components/preview.vue create mode 100644 saiadmin-vue/src/views/tool/code/components/settingComponent.vue create mode 100644 saiadmin-vue/src/views/tool/code/index.vue create mode 100644 saiadmin-vue/src/views/tool/code/js/vars.js create mode 100644 saiadmin-vue/src/views/tool/crontab/edit.vue create mode 100644 saiadmin-vue/src/views/tool/crontab/index.vue create mode 100644 saiadmin-vue/src/views/tool/crontab/logList.vue create mode 100644 saiadmin-vue/src/views/tool/crontab/view.vue create mode 100644 saiadmin-vue/src/views/tool/install/index.vue create mode 100644 saiadmin-vue/src/views/tool/install/install-box.vue create mode 100644 saiadmin-vue/src/views/tool/install/terminal.vue create mode 100644 saiadmin-vue/tailwind.config.cjs create mode 100644 saiadmin-vue/tsconfig.json create mode 100644 saiadmin-vue/vite.config.js create mode 100644 saiadmin-vue/yarn.lock create mode 100644 webman/.env.example create mode 100644 webman/.gitignore create mode 100644 webman/LICENSE create mode 100644 webman/app/controller/IndexController.php create mode 100644 webman/app/functions.php create mode 100644 webman/app/middleware/StaticFile.php create mode 100644 webman/app/process/Http.php create mode 100644 webman/app/process/Monitor.php create mode 100644 webman/app/view/index/view.html create mode 100644 webman/composer.json create mode 100644 webman/config/app.php create mode 100644 webman/config/autoload.php create mode 100644 webman/config/bootstrap.php create mode 100644 webman/config/cache.php create mode 100644 webman/config/container.php create mode 100644 webman/config/dependence.php create mode 100644 webman/config/exception.php create mode 100644 webman/config/log.php create mode 100644 webman/config/middleware.php create mode 100644 webman/config/process.php create mode 100644 webman/config/redis.php create mode 100644 webman/config/route.php create mode 100644 webman/config/server.php create mode 100644 webman/config/session.php create mode 100644 webman/config/static.php create mode 100644 webman/config/think-orm.php create mode 100644 webman/config/translation.php create mode 100644 webman/config/view.php create mode 100644 webman/public/assets/404-C84wjUkK.js create mode 100644 webman/public/assets/404-C8qIY0DY.js create mode 100644 webman/public/assets/404-D3qmwmJf.svg create mode 100644 webman/public/assets/404-D4vdWXN8.css create mode 100644 webman/public/assets/@arco-design-BiEPdq2w.css create mode 100644 webman/public/assets/@arco-design-uttiljWv.js create mode 100644 webman/public/assets/@iconify-BfRLEUc9.js create mode 100644 webman/public/assets/@intlify-CJ2pDqUV.js create mode 100644 webman/public/assets/@vue-9ZIPiVZG.js create mode 100644 webman/public/assets/@wangeditor-Bg8kJaak.js create mode 100644 webman/public/assets/@wangeditor-nHDhGvq6.css create mode 100644 webman/public/assets/add-group-B6RsDY0n.js create mode 100644 webman/public/assets/add-group-D5MnfTKt.js create mode 100644 webman/public/assets/avatar-DJF9etZw.jpg create mode 100644 webman/public/assets/avatar-DvSZjoFF.js create mode 100644 webman/public/assets/axios-BOAqGR8s.js create mode 100644 webman/public/assets/b-tween-BtQQsX34.js create mode 100644 webman/public/assets/b-validate-DHOn5MGm.js create mode 100644 webman/public/assets/background-W5wCjb__.jpg create mode 100644 webman/public/assets/call-bind-apply-helpers-CXPkwEps.js create mode 100644 webman/public/assets/call-bind-apply-helpers-DFdvRtIg.js create mode 100644 webman/public/assets/call-bound-B36HnitE.js create mode 100644 webman/public/assets/call-bound-BMZ_xw6V.js create mode 100644 webman/public/assets/clipboard-ehac6u_s.js create mode 100644 webman/public/assets/codicon-DcSIACem.ttf create mode 100644 webman/public/assets/color-JIMhKyf3.js create mode 100644 webman/public/assets/color-name-BQ5IbGbl.js create mode 100644 webman/public/assets/color-string-Ckj7g19G.js create mode 100644 webman/public/assets/compute-scroll-into-view-1gs_hJI2.js create mode 100644 webman/public/assets/config-CFOHD7nk.js create mode 100644 webman/public/assets/config-ZWMRzLkl.js create mode 100644 webman/public/assets/crontab-D2UudUxl.js create mode 100644 webman/public/assets/crontab-DHsN78bF.js create mode 100644 webman/public/assets/crypto-js-B6um_4t4.js create mode 100644 webman/public/assets/dataList-BdaY1nZd.js create mode 100644 webman/public/assets/dataList-tp5sU58K.js create mode 100644 webman/public/assets/database-C9oinknn.js create mode 100644 webman/public/assets/database-CTMAb1z4.js create mode 100644 webman/public/assets/dayjs-DUkVwsK-.js create mode 100644 webman/public/assets/dept-B7mu9jEv.js create mode 100644 webman/public/assets/dept-BazEhZT0.js create mode 100644 webman/public/assets/dict-C6FxRZf9.js create mode 100644 webman/public/assets/dict-Di-hEQDg.js create mode 100644 webman/public/assets/dunder-proto-BvNz4iDg.js create mode 100644 webman/public/assets/dunder-proto-CiSsr-aM.js create mode 100644 webman/public/assets/echarts-Cz-L25MO.js create mode 100644 webman/public/assets/edit--su55P8f.js create mode 100644 webman/public/assets/edit-B2-MKvH2.js create mode 100644 webman/public/assets/edit-BT4iQK1s.js create mode 100644 webman/public/assets/edit-BYRBvBoh.js create mode 100644 webman/public/assets/edit-C410mWZI.js create mode 100644 webman/public/assets/edit-C4LjrAZO.js create mode 100644 webman/public/assets/edit-CqvT7GJF.js create mode 100644 webman/public/assets/edit-CyUWeZne.js create mode 100644 webman/public/assets/edit-D3WKGVOx.js create mode 100644 webman/public/assets/edit-D9KKKNcV.js create mode 100644 webman/public/assets/edit-D_EZLa8V.js create mode 100644 webman/public/assets/edit-Dj6-BOG2.js create mode 100644 webman/public/assets/edit-DjscfkpF.js create mode 100644 webman/public/assets/edit-DyIQuM4D.js create mode 100644 webman/public/assets/edit-KUYyIVcu.js create mode 100644 webman/public/assets/edit-a5eHS414.js create mode 100644 webman/public/assets/edit-data-BixJMCQA.js create mode 100644 webman/public/assets/edit-data-D-Kheltb.js create mode 100644 webman/public/assets/edit-l4j53F48.js create mode 100644 webman/public/assets/edit-xZRcGvRF.js create mode 100644 webman/public/assets/editInfo-6g9YpDTS.css create mode 100644 webman/public/assets/editInfo-ChAN-DIk.js create mode 100644 webman/public/assets/editInfo-DXBGScbZ.js create mode 100644 webman/public/assets/editInfo-NjiBc5a6.js create mode 100644 webman/public/assets/editInfo-Y-e0zUFW.css create mode 100644 webman/public/assets/emailLog-C2m1eBdk.js create mode 100644 webman/public/assets/emailLog-CBkhYq_H.js create mode 100644 webman/public/assets/es-define-property-bDCdrV83.js create mode 100644 webman/public/assets/es-errors-CFxpeikN.js create mode 100644 webman/public/assets/es-object-atoms-Ditt1eQ6.js create mode 100644 webman/public/assets/file2md5-B4-SI92N.js create mode 100644 webman/public/assets/formDesign-BDBYukjt.js create mode 100644 webman/public/assets/formDesign-BSnEilW5.css create mode 100644 webman/public/assets/function-bind-BbkWVFrm.js create mode 100644 webman/public/assets/function-bind-CHqF18-c.js create mode 100644 webman/public/assets/generate-CUmP6rhy.js create mode 100644 webman/public/assets/generate-CvHPqnHt.js create mode 100644 webman/public/assets/get-intrinsic-CCph2EoF.js create mode 100644 webman/public/assets/get-intrinsic-CdQ0j820.js create mode 100644 webman/public/assets/get-proto-CEhLFpt-.js create mode 100644 webman/public/assets/get-proto-cKMTtFGz.js create mode 100644 webman/public/assets/gopd-fcd2-aIC.js create mode 100644 webman/public/assets/has-symbols-BaUvM3gb.js create mode 100644 webman/public/assets/hasown-C2NEVhna.js create mode 100644 webman/public/assets/hasown-DwiY0sux.js create mode 100644 webman/public/assets/index-9ajc8XCP.js create mode 100644 webman/public/assets/index-B9HpnnY2.js create mode 100644 webman/public/assets/index-BFIUdcGG.js create mode 100644 webman/public/assets/index-BZxaLGo4.css create mode 100644 webman/public/assets/index-B_9N8_8i.js create mode 100644 webman/public/assets/index-BbRNy9mZ.js create mode 100644 webman/public/assets/index-Bfucj2gf.css create mode 100644 webman/public/assets/index-BhCz8zJ3.css create mode 100644 webman/public/assets/index-Bl1y9N2j.js create mode 100644 webman/public/assets/index-BlmJTHZZ.js create mode 100644 webman/public/assets/index-BqLpuig7.js create mode 100644 webman/public/assets/index-BskNDCu3.js create mode 100644 webman/public/assets/index-C2WOaPMB.js create mode 100644 webman/public/assets/index-C4UnJrYE.css create mode 100644 webman/public/assets/index-C6WqqdCm.js create mode 100644 webman/public/assets/index-CC62xq0j.css create mode 100644 webman/public/assets/index-CNx4HHXc.js create mode 100644 webman/public/assets/index-CYLgbsWO.js create mode 100644 webman/public/assets/index-CYYsyvFj.css create mode 100644 webman/public/assets/index-CaZcXSlq.js create mode 100644 webman/public/assets/index-CgeF7ukd.js create mode 100644 webman/public/assets/index-ChWaTs2V.js create mode 100644 webman/public/assets/index-CioU6uju.js create mode 100644 webman/public/assets/index-CjSAeS3E.js create mode 100644 webman/public/assets/index-Cjh1bGmI.js create mode 100644 webman/public/assets/index-D4ERJytk.js create mode 100644 webman/public/assets/index-D5MGc_nr.css create mode 100644 webman/public/assets/index-D8t8-Vcv.js create mode 100644 webman/public/assets/index-DDnFF-c6.js create mode 100644 webman/public/assets/index-DL3BjnsO.js create mode 100644 webman/public/assets/index-DM0TYnz_.js create mode 100644 webman/public/assets/index-DRV136vu.js create mode 100644 webman/public/assets/index-DYT0L2ga.js create mode 100644 webman/public/assets/index-DZpgLrrT.js create mode 100644 webman/public/assets/index-DaXTbXVv.js create mode 100644 webman/public/assets/index-Dh0mztjy.js create mode 100644 webman/public/assets/index-DkGLNqVb.js create mode 100644 webman/public/assets/index-Dp4EISnj.css create mode 100644 webman/public/assets/index-DpRapO2z.js create mode 100644 webman/public/assets/index-DqWV4YeH.js create mode 100644 webman/public/assets/index-DzkS705W.js create mode 100644 webman/public/assets/index-FIDUFMiE.css create mode 100644 webman/public/assets/index-SzGozy2_.js create mode 100644 webman/public/assets/index-XqCN5tvw.js create mode 100644 webman/public/assets/index-Ymm_9TE1.js create mode 100644 webman/public/assets/index-i94lRRfC.js create mode 100644 webman/public/assets/index-kafhfDIe.css create mode 100644 webman/public/assets/index-lkcZwK3M.js create mode 100644 webman/public/assets/index-ybrmzYq5.js create mode 100644 webman/public/assets/install-box-CBgEvQY9.js create mode 100644 webman/public/assets/install-box-UcToEVc_.js create mode 100644 webman/public/assets/is-arrayish-BII_q15j.js create mode 100644 webman/public/assets/leader-CBXB0tWK.js create mode 100644 webman/public/assets/leader-hmQzSqrT.js create mode 100644 webman/public/assets/loadTable-BDVe-iv3.js create mode 100644 webman/public/assets/loadTable-BFTONwXN.js create mode 100644 webman/public/assets/loadTable-hzlR-U5D.js create mode 100644 webman/public/assets/lodash-fWIJiXPB.js create mode 100644 webman/public/assets/lodash.noop-BeiKyXVG.js create mode 100644 webman/public/assets/logList-DmhpOLmd.js create mode 100644 webman/public/assets/logList-uYU5rm9Q.js create mode 100644 webman/public/assets/login-45LPtqKq.css create mode 100644 webman/public/assets/login-BS9dzljk.js create mode 100644 webman/public/assets/login-BtLUskZ_.js create mode 100644 webman/public/assets/loginLog-B1b2avGQ.js create mode 100644 webman/public/assets/loginLog-BblWFeAK.js create mode 100644 webman/public/assets/login_picture-C4j-88yw.svg create mode 100644 webman/public/assets/logo-5EOo6F45.png create mode 100644 webman/public/assets/logo-B7uA2Tfd.js create mode 100644 webman/public/assets/manage-config-B0P_8HfQ.js create mode 100644 webman/public/assets/manage-config-DHBeLiDi.js create mode 100644 webman/public/assets/math-intrinsics-Cv-yPkyD.js create mode 100644 webman/public/assets/menu-CBqt8CnT.js create mode 100644 webman/public/assets/menu-CgiEA4rB.js create mode 100644 webman/public/assets/menuPermission-0cOEYOYw.js create mode 100644 webman/public/assets/menuPermission-B9LCPnXg.js create mode 100644 webman/public/assets/menuPermission-Dvq43lIN.css create mode 100644 webman/public/assets/modifyPassword-CrighWRv.js create mode 100644 webman/public/assets/modifyPassword-ISylktRO.js create mode 100644 webman/public/assets/monaco-editor-DLvI6UQ2.css create mode 100644 webman/public/assets/monaco-editor-nMXQdunA.js create mode 100644 webman/public/assets/nprogress-CSXic_Zd.css create mode 100644 webman/public/assets/nprogress-DxiOKil-.js create mode 100644 webman/public/assets/number-precision-BW_FzNZC.js create mode 100644 webman/public/assets/object-inspect-Pz2pmunN.js create mode 100644 webman/public/assets/operLog-Ba1fhCTF.js create mode 100644 webman/public/assets/operLog-CpGgCm9d.js create mode 100644 webman/public/assets/pinia-CtMvrpix.js create mode 100644 webman/public/assets/post-CmCXCNyH.js create mode 100644 webman/public/assets/post-DszuaI2s.js create mode 100644 webman/public/assets/preview-7AX_8-q4.js create mode 100644 webman/public/assets/preview-Bqm1bMFJ.js create mode 100644 webman/public/assets/preview-F38rEx2-.js create mode 100644 webman/public/assets/preview-R7hQO_hS.css create mode 100644 webman/public/assets/preview-vHikicIV.css create mode 100644 webman/public/assets/qs-CGfOb-kZ.js create mode 100644 webman/public/assets/qs-DkPR50Nj.js create mode 100644 webman/public/assets/recycle-08ccYGa5.js create mode 100644 webman/public/assets/recycle-CsDo7zQj.js create mode 100644 webman/public/assets/resize-detector-G6vbKCU7.js create mode 100644 webman/public/assets/resize-observer-polyfill-B1PUzC5B.js create mode 100644 webman/public/assets/role-C_2eDkr0.js create mode 100644 webman/public/assets/role-CkU346eF.js create mode 100644 webman/public/assets/scroll-into-view-if-needed-SxpMpKWN.js create mode 100644 webman/public/assets/settingComponent-BZ1sm0m2.js create mode 100644 webman/public/assets/settingComponent-BvoGVFoj.js create mode 100644 webman/public/assets/settingComponent-C9EG_z5A.js create mode 100644 webman/public/assets/settingComponent-CO66zv16.css create mode 100644 webman/public/assets/settingComponent-jp-QAGGD.css create mode 100644 webman/public/assets/side-channel-0xN0c_x9.js create mode 100644 webman/public/assets/side-channel-DLYplXY8.js create mode 100644 webman/public/assets/side-channel-list-asz5kCf8.js create mode 100644 webman/public/assets/side-channel-map-Cq5rP8eY.js create mode 100644 webman/public/assets/side-channel-map-DBz1yoQn.js create mode 100644 webman/public/assets/side-channel-weakmap-B70DURAT.js create mode 100644 webman/public/assets/side-channel-weakmap-CMrfu08b.js create mode 100644 webman/public/assets/simple-swizzle-BUB9Iq-C.js create mode 100644 webman/public/assets/sortablejs-C83syoBY.js create mode 100644 webman/public/assets/spark-md5-D8tidE2e.js create mode 100644 webman/public/assets/st-announced-CLQoQ4wT.js create mode 100644 webman/public/assets/st-announced-DrJqprDO.js create mode 100644 webman/public/assets/st-count-9mj4Scq-.js create mode 100644 webman/public/assets/st-count-BYk9DI1y.css create mode 100644 webman/public/assets/st-count-DHnX2X1-.js create mode 100644 webman/public/assets/st-loginChart-2_NUfV4F.css create mode 100644 webman/public/assets/st-loginChart-Ce9YXVXR.js create mode 100644 webman/public/assets/st-loginChart-DW20RySP.js create mode 100644 webman/public/assets/st-saiadmin-75xpyoM0.js create mode 100644 webman/public/assets/st-saiadmin-wsMYFz7O.js create mode 100644 webman/public/assets/st-welcome-CzRY8ecE.js create mode 100644 webman/public/assets/st-welcome-DlDaAGsu.css create mode 100644 webman/public/assets/st-welcome-qOYCIGst.js create mode 100644 webman/public/assets/statistics-B5GKQmFw.js create mode 100644 webman/public/assets/statistics-C7hjx8ku.js create mode 100644 webman/public/assets/struct-BuDD2Spc.js create mode 100644 webman/public/assets/struct-CEzpDVcZ.js create mode 100644 webman/public/assets/table-BHRaYvrI.js create mode 100644 webman/public/assets/table-BjY8BMqW.js create mode 100644 webman/public/assets/table-CVTajxM4.css create mode 100644 webman/public/assets/terminal-BsIK5D1b.css create mode 100644 webman/public/assets/terminal-C7g1OY6E.js create mode 100644 webman/public/assets/terminal-CmQREFQF.js create mode 100644 webman/public/assets/terminal-ovG3j2Rs.css create mode 100644 webman/public/assets/thumb-DX6EaRRA.jpg create mode 100644 webman/public/assets/tslib-BDyQ-Jie.js create mode 100644 webman/public/assets/user-BW-rYcwt.js create mode 100644 webman/public/assets/user-pcE09jl3.js create mode 100644 webman/public/assets/userBanner-CTBkQiTM.jpg create mode 100644 webman/public/assets/userInfomation-BuBbQVpX.js create mode 100644 webman/public/assets/userInfomation-DALxJbDz.js create mode 100644 webman/public/assets/vars-CZGqfX5Y.js create mode 100644 webman/public/assets/view-CHRVpyaZ.js create mode 100644 webman/public/assets/view-Df7wOQNg.js create mode 100644 webman/public/assets/view-DkYlBne4.js create mode 100644 webman/public/assets/view-JzXCzoqh.js create mode 100644 webman/public/assets/vue-QIJ1KGct.js create mode 100644 webman/public/assets/vue-clipboard3-DpvFlCWw.js create mode 100644 webman/public/assets/vue-color-kit-dVVLog6c.css create mode 100644 webman/public/assets/vue-color-kit-w75Wyu4C.js create mode 100644 webman/public/assets/vue-demi-l0sNRNKZ.js create mode 100644 webman/public/assets/vue-echarts-B-rvonkO.js create mode 100644 webman/public/assets/vue-i18n-PeqK6azz.js create mode 100644 webman/public/assets/vue-router-DXldG2q0.js create mode 100644 webman/public/assets/work-panel-BO2MRm6y.js create mode 100644 webman/public/assets/work-panel-Bf8dYDN6.js create mode 100644 webman/public/assets/zrender-xbpiMqDc.js create mode 100644 webman/public/favicon.ico create mode 100644 webman/public/index.html create mode 100644 webman/public/npm-install-test/package.json create mode 100644 webman/start.php create mode 100644 webman/support/Request.php create mode 100644 webman/support/Response.php create mode 100644 webman/support/bootstrap.php create mode 100644 webman/windows.bat create mode 100644 webman/windows.php diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..b72a604 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "saiadmin-vue"] + path = saiadmin-vue + url = https://gitee.com/saigroup/saiadmin-vue.git diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..675baa8 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 saithink + +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 new file mode 100644 index 0000000..bb6146d --- /dev/null +++ b/README.md @@ -0,0 +1,120 @@ +

+ +

+

+ + +

+ +
+

SaiAdmin Boot

+ +基于webman + vue3开箱即用的高质量中后台管理系统 + +- webman - (高性能HTTP服务框架) + +- vue3 - (渐进式 JavaScript 框架) + +- javascript - (简单、易用) + + +

介绍

+ + +saiadmin-boot 是一个整合了 `saiadmin后端` 和 `saiadmin-vue前端` 的引导项目,能够方便我们快速的运行和创建 `saiadmin` 项目,完全保留了 `webman2.x` 的原汁原味,仅仅引入了 `saiadmin` 插件 + +

安装

+ +

1、项目下载

+ +只需要一个命令即可下载项目 + +```bash +# github +git clone --recurse-submodules https://github.com/saithink/saiadmin-boot.git +# gitee +git clone --recurse-submodules https://gitee.com/saigroup/saiadmin-boot +``` + +如果后续更新项目,执行以下命令即可更新 + +```bash +git pull && git submodule update --remote --recursive +``` + +

2、后端安装

+ +进入 `saiadmin-boot` 目录后,执行以下命令进行后端依赖安装 + +```bash +cd webman && composer install +``` + +

windows用户运行

+ +双击 `windows.bat` 或者运行 `php windows.php` 启动 + +

linux用户运行

+ +调试方式运行(用于开发调试,打印数据会显示在终端,终端关闭后webman服务也随之关闭) + +```bash +php start.php +``` + +守护进程方式运行(用于正式环境,打印数据不会显示在终端,终端关闭后webman服务会持续运行) + +```bash +php start.php -d +``` + +

3、前端安装

+ +进入 `saiadmin-boot` 目录后,执行以下命令进行前端依赖安装 + +```bash +cd saiadmin-vue && yarn install +``` + +运行 + +```bash +yarn dev +``` + +打包 + +```bash +yarn build +``` + +

共同交流

+ + + + + + + +
+ +

saiadmin交流群(添加我微信备注"saiadmin")

+
+ +

支持项目

+ +如果您正在使用这个项目并感觉良好,或者是想支持我继续开发,您可以通过如下`任意`方式支持我: + +谢谢! ❤️ + + +| 微信 | 支付宝 | +| :------------------------------------------------------------------------------: | :------------------------------------------------------------------------------: | +| Wechat QRcode | Alipay QRcode | + +
+

LICENSE

+This project is open-sourced software licensed under the MIT. +
+ +
\ No newline at end of file diff --git a/saiadmin-vue/.env b/saiadmin-vue/.env new file mode 100644 index 0000000..d87fed1 --- /dev/null +++ b/saiadmin-vue/.env @@ -0,0 +1,5 @@ +VITE_APP_TITLE = SaiAdmin +VITE_APP_PORT = 8888 +VITE_APP_OPEN_PROXY = true +VITE_APP_BASE = / +VITE_APP_TOKEN_PREFIX = token \ No newline at end of file diff --git a/saiadmin-vue/.env.development b/saiadmin-vue/.env.development new file mode 100644 index 0000000..23e031a --- /dev/null +++ b/saiadmin-vue/.env.development @@ -0,0 +1,7 @@ +# .env.development +VITE_APP_ENV = development + +VITE_APP_BASE_URL = http://127.0.0.1:8787 +VITE_APP_WS_URL = ws://127.0.0.1:3131 +VITE_APP_WS_APPKEY = 8c849eaf1e166c0a71d02fcec7c8df78 +VITE_APP_PROXY_PREFIX = /dev \ No newline at end of file diff --git a/saiadmin-vue/.env.production b/saiadmin-vue/.env.production new file mode 100644 index 0000000..44aa4c7 --- /dev/null +++ b/saiadmin-vue/.env.production @@ -0,0 +1,7 @@ +# .env.production +VITE_APP_ENV = production + +VITE_APP_BASE_URL = +VITE_APP_WS_URL = ws://127.0.0.1:3131 +VITE_APP_WS_APPKEY = 2f97f2e18b6b6e6304ce77fdb779c650 +VITE_APP_PROXY_PREFIX = \ No newline at end of file diff --git a/saiadmin-vue/.gitignore b/saiadmin-vue/.gitignore new file mode 100644 index 0000000..2908a67 --- /dev/null +++ b/saiadmin-vue/.gitignore @@ -0,0 +1,7 @@ +node_modules +.DS_Store +dist +dist-ssr +*.local +.idea +stats.html \ No newline at end of file diff --git a/saiadmin-vue/.vscode/settings.json b/saiadmin-vue/.vscode/settings.json new file mode 100644 index 0000000..bf310be --- /dev/null +++ b/saiadmin-vue/.vscode/settings.json @@ -0,0 +1,54 @@ +{ + "[scss]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[jsonc]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[javascript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "prettier.singleQuote": true, + "prettier.trailingComma": "none", + "prettier.semi": false + }, + "[html]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[typescript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[json]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[vue]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "prettier.semi": false, + "prettier.singleQuote": true, + "prettier.bracketSameLine": true, + "prettier.printWidth": 120, + "prettier.bracketSpacing": true + }, + "[css]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "eslint.options": { + "extensions": [".js", ".vue", ".ts", ".tsx"] + }, + "eslint.validate": [ + "vue", + "html", + "javascript", + "graphql", + "javascriptreact", + "json", + "typescript", + "typescriptreact", + "vue-html" + ], + "eslint.format.enable": true, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "explicit" + }, + "editor.formatOnSave": true, + "editor.tabSize": 2 +} diff --git a/saiadmin-vue/LICENSE b/saiadmin-vue/LICENSE new file mode 100644 index 0000000..6dad5b8 --- /dev/null +++ b/saiadmin-vue/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 青衣煮茶 + +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/saiadmin-vue/README.md b/saiadmin-vue/README.md new file mode 100644 index 0000000..93b9a8a --- /dev/null +++ b/saiadmin-vue/README.md @@ -0,0 +1,49 @@ +

+ +

+

+ + +

+ +## 简介 + +`Saidmin Vue` 5.x + +## 安装使用 + +- 获取代码 + +``` +git clone https://github.com/saithink/saiadmin-vue.git +``` + +或 + +``` +git clone https://gitee.com/appsai/saiadmin-vue.git +``` + +或 + +``` +git clone https://gitcode.com/saigroup/saiadmin-vue.git +``` + +- 安装依赖 + +``` +cd saiadmin-vue && yarn install +``` + +- 运行 + +``` +yarn dev +``` + +- 打包 + +``` +yarn build +``` diff --git a/saiadmin-vue/index.html b/saiadmin-vue/index.html new file mode 100644 index 0000000..cda4e70 --- /dev/null +++ b/saiadmin-vue/index.html @@ -0,0 +1,166 @@ + + + + %VITE_APP_TITLE% + + + + + + + + +
+
+
+

%VITE_APP_TITLE%

+
+

正在加载资源...

+

初次加载资源可能需要较多时间 请耐心等待

+
+ +
+
+ + + diff --git a/saiadmin-vue/jsconfig.json b/saiadmin-vue/jsconfig.json new file mode 100644 index 0000000..8311dc0 --- /dev/null +++ b/saiadmin-vue/jsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": ["src/*"], + "@cps/*": ["src/components/*"], + "vue-i18n": ["vue-i18n/dist/vue-i18n.cjs.js"] + }, + "jsx": "preserve" + }, + "exclude": ["node_modules", "dist", "build"] +} diff --git a/saiadmin-vue/package.json b/saiadmin-vue/package.json new file mode 100644 index 0000000..5abb452 --- /dev/null +++ b/saiadmin-vue/package.json @@ -0,0 +1,54 @@ +{ + "name": "saiadmin-vue", + "admin_name": "saiadmin", + "version": "5.1", + "type": "module", + "license": "MIT", + "scripts": { + "dev": "vite serve --mode development", + "build": "vite build", + "preview": "vite preview", + "tailwind": "tailwind-config-viewer -o -c tailwind.config.cjs" + }, + "dependencies": { + "@arco-design/color": "^0.4.0", + "@arco-design/web-vue": "^2.57.0", + "@wangeditor/editor": "^5.1.23", + "@wangeditor/editor-for-vue": "^5.1.12", + "autoprefixer": "^10.4.17", + "axios": "^0.27.2", + "crypto-js": "^4.2.0", + "dayjs": "^1.11.11", + "echarts": "^5.4.2", + "file2md5": "^1.3.0", + "lodash": "^4.17.21", + "md-editor-v3": "^4.13.5", + "monaco-editor": "^0.33.0", + "nprogress": "^0.2.0", + "pinia": "^2.1.7", + "pinia-plugin-persistedstate": "^4.4.1", + "postcss-import": "^14.1.0", + "qs": "^6.10.3", + "resize-observer-polyfill": "^1.5.1", + "sortablejs": "^1.15.0", + "tailwindcss": "^3.4.1", + "vue": "^3.4.19", + "vue-clipboard3": "^2.0.0", + "vue-color-kit": "^1.0.5", + "vue-echarts": "^6.0.2", + "vue-i18n": "^9.1.10", + "vue-router": "^4.2.5", + "vuedraggable": "^4.1.0" + }, + "devDependencies": { + "@iconify/vue": "^4.2.0", + "@vitejs/plugin-vue": "^5.0.4", + "@vitejs/plugin-vue-jsx": "^3.1.0", + "less": "^4.1.3", + "less-loader": "^11.1.4", + "rollup-plugin-visualizer": "^5.12.0", + "tailwind-config-viewer": "^1.7.3", + "typescript": "^4.7.4", + "vite": "^5.1.4" + } +} diff --git a/saiadmin-vue/postcss.config.cjs b/saiadmin-vue/postcss.config.cjs new file mode 100644 index 0000000..33ad091 --- /dev/null +++ b/saiadmin-vue/postcss.config.cjs @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/saiadmin-vue/public/favicon.ico b/saiadmin-vue/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..07b9c802c475dbed80a97631745955a6c52599b2 GIT binary patch literal 119742 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 z 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 AVgLXD literal 0 HcmV?d00001 diff --git a/saiadmin-vue/src/App.vue b/saiadmin-vue/src/App.vue new file mode 100644 index 0000000..c9b4d2e --- /dev/null +++ b/saiadmin-vue/src/App.vue @@ -0,0 +1,15 @@ + + + \ No newline at end of file diff --git a/saiadmin-vue/src/api/common.js b/saiadmin-vue/src/api/common.js new file mode 100644 index 0000000..06c01ba --- /dev/null +++ b/saiadmin-vue/src/api/common.js @@ -0,0 +1,220 @@ +import { request } from '@/utils/request.js' + +export default { + /** + * 获取用户列表 + * @returns + */ + getUserList(params = {}) { + return request({ + url: '/core/system/getUserList', + method: 'get', + params + }) + }, + + /** + * 通过id 列表获取用户基础信息 + * @returns + */ + getUserInfoByIds(data = {}) { + return request({ + url: '/core/system/getUserInfoByIds', + method: 'post', + data + }) + }, + + /** + * 获取公告列表 + * @returns + */ + getNoticeList(params = {}) { + return request({ + url: '/core/system/notice', + method: 'get', + params + }) + }, + + /** + * 获取基础统计 + * @returns + */ + getStatistics(params = {}) { + return request({ + url: '/core/system/statistics', + method: 'get', + params + }) + }, + + /** + * 获取登录图表统计 + * @returns + */ + loginChart(params = {}) { + return request({ + url: '/core/system/loginChart', + method: 'get', + params + }) + }, + + /** + * 清除所有缓存 + * @returns + */ + clearAllCache() { + return request({ + url: '/core/system/clearAllCache', + method: 'get' + }) + }, + + /** + * 上传图片接口 + * @returns + */ + uploadImage(data = {}) { + return request({ + url: '/core/system/uploadImage', + method: 'post', + timeout: 30000, + // headers: { 'Content-Type': 'multipart/form-data' }, + data + }) + }, + + /** + * 上传文件接口 + * @returns + */ + uploadFile(data = {}) { + return request({ + url: '/core/system/uploadFile', + method: 'post', + timeout: 30000, + // headers: { 'Content-Type': 'multipart/form-data' }, + data + }) + }, + + /** + * 切片上传接口 + * @returns + */ + chunkUpload(data = {}) { + return request({ + url: '/core/system/chunkUpload', + method: 'post', + timeout: 30000, + // headers: { 'Content-Type': 'multipart/form-data' }, + data + }) + }, + + /** + * 保存网络图片 + * @returns + */ + saveNetWorkImage(data = {}) { + return request({ + url: '/core/system/saveNetworkImage', + method: 'post', + data + }) + }, + + /** + * 获取登录日志列表 + */ + getLoginLogList(params = {}) { + return request({ + url: '/core/system/getLoginLogList', + method: 'get', + params + }) + }, + + /** + * 获取操作日志列表 + */ + getOperationLogList(params = {}) { + return request({ + url: '/core/system/getOperationLogList', + method: 'get', + params + }) + }, + + /** + * 获取资源列表 + */ + getResourceList(params = {}) { + return request({ + url: '/core/system/getResourceList', + method: 'get', + params + }) + }, + + /** + * 通用导入Excel + */ + importExcel(url, data) { + return request({ + url, + method: 'post', + data, + timeout: 30 * 1000 + // headers: { 'Content-Type': 'multipart/form-data' }, + }) + }, + + /** + * 下载通用方法 + */ + download(url, method = 'post') { + return request({ url, method, responseType: 'blob' }) + }, + + /** + * GET通用方法 + */ + commonGet(url, params = {}) { + return request({ url, method: 'get', params }) + }, + + /** + * 查询所有字典数据 + */ + dictAll() { + return request({ + url: '/core/system/dictAll', + method: 'get' + }) + }, + + /** + * 根据id下载资源 + */ + downloadById(id) { + return request({ + url: '/core/system/downloadById?id=' + id, + responseType: 'blob', + method: 'get' + }) + }, + + /** + * 根据hash下载资源 + */ + downloadByHash(hash) { + return request({ + url: '/core/system/downloadByHash?hash=' + hash, + responseType: 'blob', + method: 'get' + }) + } +} diff --git a/saiadmin-vue/src/api/login.js b/saiadmin-vue/src/api/login.js new file mode 100644 index 0000000..0a2f495 --- /dev/null +++ b/saiadmin-vue/src/api/login.js @@ -0,0 +1,54 @@ +import { request } from '@/utils/request.js' + +export default { + /** + * 获取验证码 + * @returns + */ + getCaptch() { + // return import.meta.env.VITE_APP_PROXY_PREFIX + '/core/captcha?' + Date.parse(new Date().toString()) + return request({ + url: '/core/captcha', + method: 'get', + }) + }, + + /** + * 用户登录 + * @param {object} params + * @returns + */ + login(params = {}) { + return request({ + url: '/core/login', + method: 'post', + data: params, + }) + }, + + /** + * 用户退出 + * @param {object} params + * @returns + */ + logout(params = {}) { + return request({ + url: '/core/logout', + method: 'post', + data: params, + }) + }, + + /** + * 获取登录用户信息 + * @param {object} params + * @returns + */ + getInfo(params = {}) { + return request({ + url: '/core/system/user', + method: 'get', + data: params, + }) + }, +} diff --git a/saiadmin-vue/src/api/system/attachment.js b/saiadmin-vue/src/api/system/attachment.js new file mode 100644 index 0000000..1164783 --- /dev/null +++ b/saiadmin-vue/src/api/system/attachment.js @@ -0,0 +1,27 @@ +import { request } from '@/utils/request.js' + +export default { + /** + * 获取文件分页列表 + * @returns + */ + getPageList(params = {}) { + return request({ + url: '/core/attachment/index', + method: 'get', + params + }) + }, + + /** + * 删除数据 + * @returns + */ + destroy(data) { + return request({ + url: '/core/attachment/destroy', + method: 'delete', + data + }) + } +} diff --git a/saiadmin-vue/src/api/system/config.js b/saiadmin-vue/src/api/system/config.js new file mode 100644 index 0000000..f0b82b6 --- /dev/null +++ b/saiadmin-vue/src/api/system/config.js @@ -0,0 +1,138 @@ +import { request } from '@/utils/request.js' + +/** + * 系统设置接口 + */ +export default { + /** + * 获取配置列表 + * @returns + */ + getConfigList(params) { + return request({ + url: '/core/config/index', + method: 'get', + params + }) + }, + + /** + * 删除配置 + * @returns + */ + destroy(data) { + return request({ + url: '/core/config/destroy', + method: 'delete', + data + }) + }, + + /** + * 保存配置 + * @returns + */ + save(data = {}) { + return request({ + url: '/core/config/save', + method: 'post', + data + }) + }, + + /** + * 修改配置 + * @returns + */ + update(id, data = {}) { + return request({ + url: '/core/config/update?id=' + id, + method: 'put', + data + }) + }, + + /** + * 按 keys 更新配置 + * @returns + */ + updateByKeys(data) { + return request({ + url: '/core/config/updateByKeys', + method: 'post', + data + }) + }, + + /** + * 批量修改配置值 + * @returns + */ + batchUpdate(data) { + return request({ + url: '/core/config/batchUpdate', + method: 'post', + data + }) + }, + + /** + * 获取组列表 + * @returns + */ + getConfigGroupList(params = {}) { + return request({ + url: '/core/configGroup/index', + method: 'get', + params + }) + }, + + /** + * 保存配置组 + * @returns + */ + saveConfigGroup(data = {}) { + return request({ + url: '/core/configGroup/save', + method: 'post', + data + }) + }, + + /** + * 更新配置组 + * @returns + */ + updateConfigGroup(id, data = {}) { + return request({ + url: '/core/configGroup/update?id=' + id, + method: 'put', + data + }) + }, + + /** + * 删除配置组 + * @returns + */ + deleteConfigGroup(data = {}) { + return request({ + url: '/core/configGroup/destroy', + method: 'delete', + data + }) + }, + + /** + * 邮箱测试 + * @returns + */ + testEmail(data = {}) { + return request({ + url: '/core/configGroup/email', + method: 'post', + data + }) + } +} diff --git a/saiadmin-vue/src/api/system/database.js b/saiadmin-vue/src/api/system/database.js new file mode 100644 index 0000000..4f04cad --- /dev/null +++ b/saiadmin-vue/src/api/system/database.js @@ -0,0 +1,99 @@ +import { request } from '@/utils/request.js' + +export default { + /** + * 获取数据表分页列表 + * @returns + */ + getPageList(params = {}) { + return request({ + url: '/core/database/index', + method: 'get', + params + }) + }, + + /** + * 获取数据源 + * @returns + */ + getDataSource(params = {}) { + return request({ + url: '/core/database/dataSource', + method: 'get', + params + }) + }, + + /** + * 获取表字段列表 + * @returns + */ + getDetailed(params = {}) { + return request({ + url: '/core/database/detailed', + method: 'get', + params + }) + }, + + /** + * 获取回收站数据 + * @returns + */ + getRecycle(params = {}) { + return request({ + url: '/core/database/recycle', + method: 'get', + params + }) + }, + + /** + * 销毁数据 + * @returns + */ + delete(data) { + return request({ + url: '/core/database/delete', + method: 'delete', + data + }) + }, + + /** + * 恢复数据 + * @returns + */ + recovery(data) { + return request({ + url: '/core/database/recovery', + method: 'post', + data + }) + }, + + /** + * 优化表 + * @returns + */ + optimize(data = {}) { + return request({ + url: '/core/database/optimize', + method: 'post', + data + }) + }, + + /** + * 清理表碎片 + * @returns + */ + fragment(data = {}) { + return request({ + url: '/core/database/fragment', + method: 'post', + data + }) + } +} diff --git a/saiadmin-vue/src/api/system/dept.js b/saiadmin-vue/src/api/system/dept.js new file mode 100644 index 0000000..ef84713 --- /dev/null +++ b/saiadmin-vue/src/api/system/dept.js @@ -0,0 +1,110 @@ +import { request } from '@/utils/request.js' + +export default { + /** + * 获取部门树 + * @returns + */ + getPageList(params = {}) { + return request({ + url: '/core/dept/index', + method: 'get', + params + }) + }, + + /** + * 获取部门领导列表 + * @returns + */ + getLeaderList(params = {}) { + return request({ + url: '/core/dept/leaders', + method: 'get', + params + }) + }, + + /** + * 新增部门领导 + * @returns + */ + addLeader(data = {}) { + return request({ + url: '/core/dept/addLeader', + method: 'post', + data + }) + }, + + /** + * 删除部门领导 + * @returns + */ + delLeader(data = {}) { + return request({ + url: '/core/dept/delLeader', + method: 'delete', + data + }) + }, + + /** + * 获取部门选择树 + * @returns + */ + tree() { + return request({ + url: '/core/dept/index?tree=true', + method: 'get' + }) + }, + + /** + * 添加数据 + * @returns + */ + save(params = {}) { + return request({ + url: '/core/dept/save', + method: 'post', + data: params + }) + }, + + /** + * 删除数据 + * @returns + */ + destroy(data) { + return request({ + url: '/core/dept/destroy', + method: 'delete', + data + }) + }, + + /** + * 修改数据 + * @returns + */ + update(id, params = {}) { + return request({ + url: '/core/dept/update?id=' + id, + method: 'put', + data: params + }) + }, + + /** + * 更改状态 + * @returns + */ + changeStatus(data = {}) { + return request({ + url: '/core/dept/changeStatus', + method: 'post', + data + }) + } +} diff --git a/saiadmin-vue/src/api/system/dict.js b/saiadmin-vue/src/api/system/dict.js new file mode 100644 index 0000000..ec49c73 --- /dev/null +++ b/saiadmin-vue/src/api/system/dict.js @@ -0,0 +1,137 @@ +import { request } from '@/utils/request.js' + +export const dictType = { + /** + * 获取字典类型,无分页 + * @returns + */ + getPageList(params = {}) { + return request({ + url: '/core/dictType/index', + method: 'get', + params + }) + }, + + /** + * 添加字典类型 + * @returns + */ + save(params = {}) { + return request({ + url: '/core/dictType/save', + method: 'post', + data: params + }) + }, + + /** + * 删除字典类型 + * @returns + */ + destroy(data) { + return request({ + url: '/core/dictType/destroy', + method: 'delete', + data + }) + }, + + /** + * 修改字典类型 + * @returns + */ + update(id, data = {}) { + return request({ + url: '/core/dictType/update?id=' + id, + method: 'put', + data + }) + }, + + /** + * 更改字典类型状态 + * @returns + */ + changeStatus(data = {}) { + return request({ + url: '/core/dictType/changeStatus', + method: 'post', + data + }) + } +} + +export const dict = { + /** + * 快捷查询字典 + * @param {*} params + * @returns + */ + getDict(code) { + return request({ + url: '/core/dataDict/index?code=' + code, + method: 'get' + }) + }, + + /** + * 获取字典数据分页列表 + * @returns + */ + getPageList(params = {}) { + return request({ + url: '/core/dictData/index', + method: 'get', + params + }) + }, + + /** + * 添加字典数据 + * @returns + */ + addDictData(data = {}) { + return request({ + url: '/core/dictData/save', + method: 'post', + data + }) + }, + + /** + * 删除字典数据 + * @returns + */ + destroyDictData(data) { + return request({ + url: '/core/dictData/destroy', + method: 'delete', + data + }) + }, + + /** + * 更新字典数据 + * @returns + */ + editDictData(id, data = {}) { + return request({ + url: '/core/dictData/update?id=' + id, + method: 'put', + data + }) + }, + + /** + * 更改字典状态 + * @returns + */ + changeStatus(data = {}) { + return request({ + url: '/core/dictData/changeStatus', + method: 'post', + data + }) + } +} diff --git a/saiadmin-vue/src/api/system/emailLog.js b/saiadmin-vue/src/api/system/emailLog.js new file mode 100644 index 0000000..eb66a11 --- /dev/null +++ b/saiadmin-vue/src/api/system/emailLog.js @@ -0,0 +1,30 @@ +import { request } from '@/utils/request.js' + +/** + * 邮件日志接口 + */ +export default { + /** + * 数据列表 + * @returns + */ + getPageList(params = {}) { + return request({ + url: '/core/email/index', + method: 'get', + params + }) + }, + + /** + * 删除数据 + * @returns + */ + destroy(data) { + return request({ + url: '/core/email/destroy', + method: 'delete', + data + }) + } +} diff --git a/saiadmin-vue/src/api/system/loginLog.js b/saiadmin-vue/src/api/system/loginLog.js new file mode 100644 index 0000000..834b7cc --- /dev/null +++ b/saiadmin-vue/src/api/system/loginLog.js @@ -0,0 +1,30 @@ +import { request } from '@/utils/request.js' + +/** + * 登录日志接口 + */ +export default { + /** + * 数据列表 + * @returns + */ + getPageList(params = {}) { + return request({ + url: '/core/logs/getLoginLogPageList', + method: 'get', + params + }) + }, + + /** + * 删除数据 + * @returns + */ + destroy(data) { + return request({ + url: '/core/logs/deleteLoginLog', + method: 'delete', + data + }) + } +} diff --git a/saiadmin-vue/src/api/system/menu.js b/saiadmin-vue/src/api/system/menu.js new file mode 100644 index 0000000..e15b39b --- /dev/null +++ b/saiadmin-vue/src/api/system/menu.js @@ -0,0 +1,63 @@ +import { request } from '@/utils/request.js' + +export default { + /** + * 获取数据 + * @returns + */ + getList(params = {}) { + return request({ + url: '/core/menu/index', + method: 'get', + params + }) + }, + + /** + * 可操作菜单 + * @returns + */ + accessMenu(params = {}) { + return request({ + url: '/core/menu/accessMenu', + method: 'get', + params + }) + }, + + /** + * 添加数据 + * @returns + */ + save(params = {}) { + return request({ + url: '/core/menu/save', + method: 'post', + data: params + }) + }, + + /** + * 删除数据 + * @returns + */ + destroy(data) { + return request({ + url: '/core/menu/destroy', + method: 'delete', + data + }) + }, + + /** + * 更新数据 + * @returns + */ + update(id, data = {}) { + return request({ + url: '/core/menu/update?id=' + id, + method: 'put', + data + }) + } +} diff --git a/saiadmin-vue/src/api/system/monitor.js b/saiadmin-vue/src/api/system/monitor.js new file mode 100644 index 0000000..2e548d0 --- /dev/null +++ b/saiadmin-vue/src/api/system/monitor.js @@ -0,0 +1,17 @@ +import { request } from '@/utils/request.js' + +/** + * 服务监控接口 + */ +export default { + /** + * 获取服务器信息 + * @returns + */ + getServerInfo() { + return request({ + url: '/core/system/monitor', + method: 'get' + }) + } +} diff --git a/saiadmin-vue/src/api/system/notice.js b/saiadmin-vue/src/api/system/notice.js new file mode 100644 index 0000000..92aa0cf --- /dev/null +++ b/saiadmin-vue/src/api/system/notice.js @@ -0,0 +1,77 @@ +import { request } from '@/utils/request.js' + +/** + * 通知公告接口 + */ +export default { + /** + * 数据列表 + * @returns + */ + getPageList(params = {}) { + return request({ + url: '/core/notice/index', + method: 'get', + params + }) + }, + + /** + * 添加数据 + * @returns + */ + save(params = {}) { + return request({ + url: '/core/notice/save', + method: 'post', + data: params + }) + }, + + /** + * 读取数据 + * @returns + */ + read(id) { + return request({ + url: '/core/notice/read?id=' + id, + method: 'get' + }) + }, + + /** + * 删除数据 + * @returns + */ + destroy(data) { + return request({ + url: '/core/notice/destroy', + method: 'delete', + data + }) + }, + + /** + * 修改数据 + * @returns + */ + update(id, data = {}) { + return request({ + url: '/core/notice/update?id=' + id, + method: 'put', + data + }) + }, + + /** + * 修改状态 + * @returns + */ + changeStatus(data = {}) { + return request({ + url: '/core/notice/changeStatus', + method: 'post', + data + }) + } +} diff --git a/saiadmin-vue/src/api/system/operLog.js b/saiadmin-vue/src/api/system/operLog.js new file mode 100644 index 0000000..c8cc459 --- /dev/null +++ b/saiadmin-vue/src/api/system/operLog.js @@ -0,0 +1,30 @@ +import { request } from '@/utils/request.js' + +/** + * 操作日志接口 + */ +export default { + /** + * 数据列表 + * @returns + */ + getPageList(params = {}) { + return request({ + url: '/core/logs/getOperLogPageList', + method: 'get', + params + }) + }, + + /** + * 删除数据 + * @returns + */ + destroy(data) { + return request({ + url: '/core/logs/deleteOperLog', + method: 'delete', + data + }) + } +} diff --git a/saiadmin-vue/src/api/system/post.js b/saiadmin-vue/src/api/system/post.js new file mode 100644 index 0000000..31decd6 --- /dev/null +++ b/saiadmin-vue/src/api/system/post.js @@ -0,0 +1,77 @@ +import { request } from '@/utils/request.js' + +/** + * 岗位数据接口 + */ +export default { + /** + * 数据列表 + * @returns + */ + getPageList(params = {}) { + return request({ + url: '/core/post/index', + method: 'get', + params + }) + }, + + /** + * 读取数据 + * @returns + */ + read(id) { + return request({ + url: '/core/post/read?id=' + id, + method: 'get' + }) + }, + + /** + * 添加数据 + * @returns + */ + save(params = {}) { + return request({ + url: '/core/post/save', + method: 'post', + data: params + }) + }, + + /** + * 修改数据 + * @returns + */ + update(id, data = {}) { + return request({ + url: '/core/post/update?id=' + id, + method: 'put', + data + }) + }, + + /** + * 更改状态 + * @returns + */ + changeStatus(data = {}) { + return request({ + url: '/core/post/changeStatus', + method: 'post', + data + }) + }, + + /** + * 删除数据 + * @returns + */ + destroy(data) { + return request({ + url: '/core/post/destroy', + method: 'delete', + data + }) + } +} diff --git a/saiadmin-vue/src/api/system/role.js b/saiadmin-vue/src/api/system/role.js new file mode 100644 index 0000000..7802472 --- /dev/null +++ b/saiadmin-vue/src/api/system/role.js @@ -0,0 +1,109 @@ +import { request } from '@/utils/request.js' + +export default { + /** + * 获取数据列表 + * @returns + */ + getPageList(params = {}) { + return request({ + url: '/core/role/index', + method: 'get', + params + }) + }, + + /** + * 通过角色获取菜单 + * @returns + */ + getMenuByRole(id) { + return request({ + url: '/core/role/getMenuByRole?id=' + id, + method: 'get' + }) + }, + + /** + * 通过角色获取部门 + * @returns + */ + getDeptByRole(id) { + return request({ + url: '/core/role/getDeptByRole?id=' + id, + method: 'get' + }) + }, + + /** + * 添加数据 + * @returns + */ + save(data = {}) { + return request({ + url: '/core/role/save', + method: 'post', + data + }) + }, + + /** + * 删除数据 + * @returns + */ + destroy(data) { + return request({ + url: '/core/role/destroy', + method: 'delete', + data + }) + }, + + /** + * 更新数据 + * @returns + */ + update(id, data = {}) { + return request({ + url: '/core/role/update?id=' + id, + method: 'put', + data + }) + }, + + /** + * 更新菜单权限 + * @returns + */ + updateMenuPermission(id, data) { + return request({ + url: '/core/role/menuPermission?id=' + id, + method: 'post', + data + }) + }, + + /** + * 更新数据权限 + * @returns + */ + updateDataPermission(id, data) { + return request({ + url: '/core/role/dataPermission?id=' + id, + method: 'post', + data + }) + }, + + /** + * 更改数据状态 + * @returns + */ + changeStatus(params = {}) { + return request({ + url: '/core/role/changeStatus', + method: 'post', + data: params + }) + } +} diff --git a/saiadmin-vue/src/api/system/user.js b/saiadmin-vue/src/api/system/user.js new file mode 100644 index 0000000..524a5b6 --- /dev/null +++ b/saiadmin-vue/src/api/system/user.js @@ -0,0 +1,134 @@ +import { request } from '@/utils/request.js' + +export default { + /** + * 获取数据列表 + * @returns + */ + getPageList(params = {}) { + return request({ + url: '/core/user/index', + method: 'get', + params + }) + }, + + /** + * 读取数据 + * @returns + */ + read(id) { + return request({ + url: '/core/user/read?id=' + id, + method: 'get' + }) + }, + + /** + * 添加数据 + * @returns + */ + save(params = {}) { + return request({ + url: '/core/user/save', + method: 'post', + data: params + }) + }, + + /** + * 删除数据 + * @returns + */ + destroy(data) { + return request({ + url: '/core/user/destroy', + method: 'delete', + data + }) + }, + + /** + * 更新数据 + * @returns + */ + update(id, data = {}) { + return request({ + url: '/core/user/update?id=' + id, + method: 'put', + data + }) + }, + + /** + * 更改数据状态 + * @returns + */ + changeStatus(data = {}) { + return request({ + url: '/core/user/changeStatus', + method: 'post', + data + }) + }, + + /** + * 清除用户缓存 + * @returns + */ + clearCache(params = {}) { + return request({ + url: '/core/user/clearCache', + method: 'post', + data: params + }) + }, + + /** + * 设置用户首页 + * @returns + */ + setHomePage(data = {}) { + return request({ + url: '/core/user/setHomePage', + method: 'post', + data + }) + }, + + /** + * 初始化用户密码 + * @returns + */ + initUserPassword(data) { + return request({ + url: '/core/user/initUserPassword', + method: 'post', + data + }) + }, + + /** + * 用户更新个人资料 + * @returns + */ + updateInfo(data = {}) { + return request({ + url: '/core/user/updateInfo', + method: 'post', + data + }) + }, + + /** + * 用户修改密码 + * @returns + */ + modifyPassword(data = {}) { + return request({ + url: '/core/user/modifyPassword', + method: 'post', + data + }) + } +} diff --git a/saiadmin-vue/src/api/tool/crontab.js b/saiadmin-vue/src/api/tool/crontab.js new file mode 100644 index 0000000..7ca2b9a --- /dev/null +++ b/saiadmin-vue/src/api/tool/crontab.js @@ -0,0 +1,113 @@ +import { request } from '@/utils/request.js' + +/** + * 定时任务接口 + */ +export default { + /** + * 数据列表 + * @returns + */ + getPageList(params = {}) { + return request({ + url: '/tool/crontab/index', + method: 'get', + params + }) + }, + + /** + * 日志列表 + * @returns + */ + getLogPageList(params = {}) { + return request({ + url: '/tool/crontab/logPageList', + method: 'get', + params + }) + }, + + /** + * 删除定时任务日志 + * @returns + */ + deleteLog(data) { + return request({ + url: '/tool/crontab/deleteCrontabLog', + method: 'delete', + data + }) + }, + + /** + * 立刻执行一次定时任务 + * @returns + */ + run(data = {}) { + return request({ + url: '/tool/crontab/run', + method: 'post', + data + }) + }, + + /** + * 读取数据 + * @returns + */ + read(id) { + return request({ + url: '/tool/crontab/read?id=' + id, + method: 'get' + }) + }, + + /** + * 添加 + * @returns + */ + save(data = {}) { + return request({ + url: '/tool/crontab/save', + method: 'post', + data + }) + }, + + /** + * 删除 + * @returns + */ + destroy(data) { + return request({ + url: '/tool/crontab/destroy', + method: 'delete', + data + }) + }, + + /** + * 更新数据 + * @returns + */ + update(id, params = {}) { + return request({ + url: '/tool/crontab/update?id=' + id, + method: 'put', + data: params + }) + }, + + /** + * 更改状态 + * @returns + */ + changeStatus(data = {}) { + return request({ + url: '/tool/crontab/changeStatus', + method: 'post', + data + }) + } +} diff --git a/saiadmin-vue/src/api/tool/generate.js b/saiadmin-vue/src/api/tool/generate.js new file mode 100644 index 0000000..4f0ab17 --- /dev/null +++ b/saiadmin-vue/src/api/tool/generate.js @@ -0,0 +1,135 @@ +import { request } from '@/utils/request.js' + +export default { + /** + * 数据列表 + * @returns + */ + getPageList(params = {}) { + return request({ + url: '/tool/code/index', + method: 'get', + params + }) + }, + + /** + * 删除数据 + * @returns + */ + destroy(data) { + return request({ + url: '/tool/code/destroy', + method: 'delete', + data + }) + }, + + /** + * 编辑信息 + * @returns + */ + update(id, data = {}) { + return request({ + url: '/tool/code/update?id=' + id, + method: 'put', + data + }) + }, + + /** + * 读取信息 + */ + readTable(id) { + return request({ + url: '/tool/code/read?id=' + id, + method: 'get' + }) + }, + + /** + * 生成代码 + * @returns + */ + generateCode(data = {}) { + return request({ + url: '/tool/code/generate', + method: 'post', + responseType: 'blob', + timeout: 20 * 1000, + data + }) + }, + + /** + * 生成到文件 + * @returns + */ + generateFile(data = {}) { + return request({ + url: '/tool/code/generateFile', + method: 'post', + data + }) + }, + + /** + * 装载数据表 + * @returns + */ + loadTable(data = {}) { + return request({ + url: '/tool/code/loadTable', + method: 'post', + data + }) + }, + + /** + * 同步数据表 + * @returns + */ + sync(id) { + return request({ + url: '/tool/code/sync?id=' + id, + method: 'post' + }) + }, + + /** + * 预览代码 + * @returns + */ + preview(id) { + return request({ + url: '/tool/code/preview?id=' + id, + method: 'get' + }) + }, + + // 获取表中字段信息 + getTableColumns(params = {}) { + return request({ + url: '/tool/code/getTableColumns', + method: 'get', + params + }) + }, + + // 获取数据源列表 + getDataSourceList(params = {}) { + return request({ + url: '/tool/code/getDataSourceList', + method: 'get', + params + }) + }, + + // 获取所有模型 + getModels() { + return request({ + url: '/tool/code/getModels', + method: 'get' + }) + } +} diff --git a/saiadmin-vue/src/api/tool/saipackage.js b/saiadmin-vue/src/api/tool/saipackage.js new file mode 100644 index 0000000..8c7c2be --- /dev/null +++ b/saiadmin-vue/src/api/tool/saipackage.js @@ -0,0 +1,66 @@ +import { request } from '@/utils/request.js' + +/** + * saipackage安装器 + */ +export default { + /** + * 数据列表 + * @returns + */ + getAppList(params = {}) { + return request({ + url: '/app/saipackage/install/index', + method: 'get', + params + }) + }, + + /** + * 应用上传 + * @returns + */ + uploadApp(data = {}) { + return request({ + url: '/app/saipackage/install/upload', + method: 'post', + data + }) + }, + + /** + * 应用安装 + * @returns + */ + installApp(data = {}) { + return request({ + url: '/app/saipackage/install/install', + method: 'post', + data + }) + }, + + /** + * 应用卸载 + * @returns + */ + uninstallApp(data = {}) { + return request({ + url: '/app/saipackage/install/uninstall', + method: 'post', + data + }) + }, + + /** + * 重启后端 + * @returns + */ + reloadBackend(data = {}) { + return request({ + url: '/app/saipackage/install/reload', + method: 'post', + data + }) + } +} diff --git a/saiadmin-vue/src/assets/404.svg b/saiadmin-vue/src/assets/404.svg new file mode 100644 index 0000000..e21be4f --- /dev/null +++ b/saiadmin-vue/src/assets/404.svg @@ -0,0 +1,176 @@ + + + + 6 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/saiadmin-vue/src/assets/avatar.jpg b/saiadmin-vue/src/assets/avatar.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2016a99ebbfa797bc5c42077a52f523e8cdb3d30 GIT binary patch literal 36362 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 literal 0 HcmV?d00001 diff --git a/saiadmin-vue/src/assets/image/action.svg b/saiadmin-vue/src/assets/image/action.svg new file mode 100644 index 0000000..670ffb7 --- /dev/null +++ b/saiadmin-vue/src/assets/image/action.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/saiadmin-vue/src/assets/image/attach.svg b/saiadmin-vue/src/assets/image/attach.svg new file mode 100644 index 0000000..30d06f3 --- /dev/null +++ b/saiadmin-vue/src/assets/image/attach.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/saiadmin-vue/src/assets/image/login.svg b/saiadmin-vue/src/assets/image/login.svg new file mode 100644 index 0000000..ddf582c --- /dev/null +++ b/saiadmin-vue/src/assets/image/login.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/saiadmin-vue/src/assets/image/user.svg b/saiadmin-vue/src/assets/image/user.svg new file mode 100644 index 0000000..2127825 --- /dev/null +++ b/saiadmin-vue/src/assets/image/user.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/saiadmin-vue/src/assets/login_picture.svg b/saiadmin-vue/src/assets/login_picture.svg new file mode 100644 index 0000000..3db9adb --- /dev/null +++ b/saiadmin-vue/src/assets/login_picture.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/saiadmin-vue/src/assets/logo.png b/saiadmin-vue/src/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a048fa88f5cf7e2cb4496d017da68a277788487e GIT binary patch literal 18787 zcmV)AK*Ya^P)PyA07*naRCr$PeF=CR)s^*mwfEkVYZ9CBS0O&z>pY$5ugrU`UL>2vCQ_G>u&32vA2bFeFA`1gJw|nno^i z1gO2l0Oy>o2UGxB4$w0w=qi{b0Zauv1FjWC+{^*yIgHu8JpIVwhZunopmqZd&bhQ6 zh_)dY&BC16Y!}Yio6k&Y&gUkzmI}vh+22@i+NC5f*^VR zxiO8@Dg#Eg7Rb+J%o;&rbt5nW)I*HhR?dyxDAevi+u7?|8gE*=cl!r+W?RM=C69TE z1jhp`&jE`Wu;GEb9%K&4OoGfk$S#NKa3p1Y->l=NtvS8!xMwCJzGy0Hww%sbzPjle zzMmQaYL~g+$$6v^nQ?FI+x~@RTh?8@Qz}huQk+PO;=oh@uBza&1jYfEdk~=I9^iW5 zoI{c%NMMi{hw1@_%b=G$M6(v3D8;s3F!7{k=S-UZ;7O?2ej;P-!xwtJyYmsC2IKV- z=ZXSz{L1XsFD-g^<)=0mT5G(~3GDNVaAF#`rookfl5K;#E1312|b%56olWaD`Q6jEQ6D zUjnQG2F3QEx;orD#MH&6eyz&rtJ)A5n`LL1) zVP)z6V-`@C^Kfcv+?s1oKKK95z?ik?Fjg2r>VYFLY=KHkeFm-5f4yz_Bk$z)p5E?R z@M1dh%tcZ1gdfVu_ay7ceO!jGGI;3^m5A&m!ZZ&^yBcCy8^=kpcW;?>(f4Oz!V?!U z*4oQc9rK3|OQ5diJhm1M*FC=WwI8l6HjQneH94ZeF%;yu4V#RlrT~uPo6aKyRE0KM zHiJ^IQRk|tE%3sJ&Yb)3xv|MVxRgbA9rNhx#SIQSpuWa=@_jV^^~1~l^1TMtO4;cM z+L;4aW-w(A6E2`gfFk=qZ_bb zHev5y{mV;_{iL-{H?mO)wjsl|Z8+fI1WvM~G$OQ{7bcIaDs7bf4G{fH29_*pAKlYV z4lh#_aH|A`$%rxq@q&w*#=Lp!>GOWRp!SS^n8{enkVje{Z(vvemC~TUMdQ^Eyz%U> zwxoD{ljee}GAyeENz+99(;*a67>X<@{fH1#091;a9toh*=(`+}VZbwsfX88II(T~l zlDVaeVpqd{qbP|)Wy7Q>VxZFUbG~?b6QJ%6lO#Q&*mUS zqVP-;&@_N{_ykl%2`s5AfWs)u)MaO1_EGyf^$cK=0`8I3rdX^WgH>e(cCmOThR%Fw=>xzvrwQub9hX4Sjt!hU({!X`rs)TwR`B z|JRRiTm7^3a^7f(F_b7MuPT%a6$BCiii%g|uZOgxVZfh0*MYC9Fdz~IB7)$bNIW?7 zC$hFKP*dcXTvTx5xKsb>ug1*&$KlEkIHrO6EYFYo(Yj||ecRbTr7b4GQkk$`vMi%y zTaZ*mq&zEMUBMZ?*J-)$C!h+$Nv<&k76L0;z813R9-z4#HCY!Ymm-ayJ?rw%PM0S< zHynAc$1G53m%pg>?fd`V_BZd}9rfTuRk*Gza_qEuDsl&mfEw)ZLx2*H!_nds~)x$9gaLfYr_k7Q}zj$Zy z?^jBh$(a-p@&UJGA?itx6$M%5_~EF4Y!VK{VK+|w2+|OcWg0;xP|51MemIO05h__# zlVMUDx4v@z^*2w&n1#d5sveU-UB`L+*R3o5> zqk&cI>YpC4aVneIs@&0of9N3K4=t^DxMT)qyGXh+#ug=992x(+Pn~eV7v`|ku!^l7 zlR$lfH;sRA)3OzB78}Q9V=63#fw_)Y@@YADY0IJpwybhpuUN**maftt4d1Vb2=rm) z@5I8Ay&$C;Bo&Bn5V{`B@epwtM!PCTw>mri?))47>Ju3K8e_C943F0_2UO0v{4;F- z)KA}9^zfb}Ly;KxjEgv>q{y&b%HO+yuKGcJswt^NTUX?TK&=32rK{RsKvgJ&8$=L1 z39!f&2m%5UXVB>VY)Qmc|7zykAAVRl`5QAC%MA~h9=J6a^7l<7=>OjN(oYw)Z@ab8 zaA8Z5U_hi~jN!Z#kto0(godVx?U8q!n?`@Xosf>5-nc z3ZM#~v~ou1|A{0cDhZf~Sj3ASPANt5_nmR|?CaR5caQYt4VLpCQ$VEv|2j0@_~YeI z{c=}=Co@Dmk%OQ7O?){llO4tiP-nSCLgbShUkW2v7&h z%74&!YUOjqIb=;0F<_Z9#F&CnZ4Ty3W0!n(*8E$}XYsv*WpOx?*Kte%bp_|6zP0i3 zC2x5x({r+i0(0R~9lqE>2fO>gq7DV1hUryBQD9q^@B$1;L0!hhnK@(gopY|g{8Co4 z?MMP-u$=pt0_tj>t^eHGC)U0fv+4zFUtz+c3g0vYYT&9KiP(KLliKNl5!dOvCgiCQ zP=%<4s)+P2(Ev%@qAt&I;(os8-itqY-SrstHe;0`jcTr9@PFo*0_rOS)VCkox+UpF zZO?_IDKNvJ=MV)d0aR60KS?2q4?K)EB}{3woB#gekA37iq!tf{!2dA?)Yo`!%%@iV zX7koGViepjxeh#{^ohIdSo)7-ShP>Jsf$IWY?Y`j;pqEby#B~dx_T?g8<2BsoRp9&&Mg^qy8R0YRKj7R_u#+VXjHcLCdcF`?Y zUyAs9BR=ZU!&tw3)4QD4ee1oamMt$ep3)MRKp`qH-=Z@3%6erhHCW7g$X%^tMo}Pe0IjgA3ul1 z_8h$t9=LBhrhHTq;eE{9`1ikBxAeYkaToch49@*JDXQ|U6p#pO>O|CM5COI9x)Qse zSX8ti5FOF;AVG$1x)`4YJ~i%)2R=A<_Prx1)PZ|=s{UqD=-Yuk*Z=IzXCK}ewQ93z z4UXrdkoc(K21SskD}29R1GVz;?hD8(EUNHQf^&t0>9A~CEd8!4fEu@e$r*+_PQLh4 zpNUQT@8RH|hTDm%fiW0A_!2Kn{I|EC{PSBZGi!fRLP=Ku&mmerBvCNuiCCm3F<35b zw&a6~ogLu9R)VuDP^$%N7oZBiluKf#?^6>ytSLMj5jBEnwuGr|to@(Q|M;xSSY-QP zoP#5AO~=&IPXk2tQjaz)|EI@xzWv4K(FR&IKZeR^+2j(qZHep-)gp-?dazOHYE_R4 zP%9!29cqET6h&xNg=$Kn03~KX$y*q2E0|-9d;P1&UwzGRszyELfJ$@!1aG?ZyKg+X za7PMis|u8u3ns}>Wmy1~x|l$f06C~aJxD3aL4yL}AN$Lqb~Qc1!us@n%1;Q^KVu@# zuP72?1sBJ)dEV#Fz2g2k((ykTPTf_GNuaLdy!Hnh|MKF??K@7-rVL~xr))hrcfqMl znu_}Z=6ol$lP(ph2dwH{N37aqKLBYMcnH-|1W-LdAqh$k;-S(N6|(E1rrp78Fa7Qv zXI^#VJS5*|tWt&GNG!O6=bXnXP_?DG_dokzYhM20jvA)68dQ=ZiAndUqlqf}B_5Uq zNYs<3VnTWXy#CruRcZlO*7cJ@isM)IxsnH!Go)+@wM{0zF!PeHUzeKxuTvQle4F9& zIwpZiledEB$33`V@gJXS-+DnyN`V_yQDPh(RiV<7FUmWp2}zeB=m}6Ox1l{f{t$>N zyBI;mDOpp$(9i#a!(2oihT4pS^Yr>%cg?)|{NX6>d&~lrbFTclwEc>ouUq`oM%|QK z4Gvce^8Ox&N{Il*U=cF<(L(mt!d3dh^#4>BMK7CLSc!%!9%@|`Q}#QhPoI9tz1Qj| zJ~Z5{=`k6esssv^raZL$#YbK*?78k;-VQ2Hq0kf@SG0f>fKXU@hb{ilM+?~(ppqpG zfm$FHA_nLl!}x-Xi`=@ueBspjpB^ryCkNYS_I7NC)bR`X{!@PS&XV81!kbQOiUO`G z3lg#x#D6Rn^pfh~UG?)`D(LnHc%_nv=~AhQ<9TqH2Zc)*Rg!RA2DxvZ`@xH@L3;IY z+CWuK$uYb1hc~&2bNw}I+tojL`-Mk$#=TgZ1{BqxDVZ#bKBm1fqWuk2A;V7LC&Lh7 zDDF6rRTU)Tld>2_HHTR18P9=B zL4VIJ`>0{JlcVaYx-R0$ByxM35J{y(2u&^67?b6gmzuodZ>G(?_Cl7}*V~Cb)bXUv zmEVFH%}tn}X*cU!hbK$68R6WEC*#rGiJHjzcpRH+lGuQ;Xg(5#qndj;;y|U2Bv_xX z$NJsZ?Rn?@Yxi&1I?HX&CS#tWsj{rv3N$83GV|bgCEIfxheJ~=wKkbWU36#tsncGI zO&j-;Jafu(Y*OErJ}UnEWApldU$k@Gtt|>iF(RYDYy=_8gSX~6)Cl#H?UAX%w5=UA zi5hst5)_9cZ31US#;&~WlzAVy8mX;)1qgNZRknE z^Xzb zoA2DVf8CDD3R@Z`B`mpa6gPy}muCB&mqmC;@~L>DD|4U;DjJpPKvr{|Y{YA-KkbCY zlg^#_E1Y)RD{OrAjcu24KK}Q+m;L)|d$-=Qo##=HK zZV7N~35u+j`)1L~@6t-+mLSP46y1Y|tj)FJuCbGnFPu1I{3GcTv1}j!dqjZB*YUXb z>YHDF@72|xbauCnj}#H9VG*R|2zb$flc(li3KT^xHy;y?#v}%h$RcpX#=`a-NSXvw zwvmqjZBegv@4H;0FH+-lJQI>)!&6L@cssPX+c@>4vA>^nR`UC76g#RN1^X4K zVwrzx%QX#)SNv_;hFupLIX9m6G(=qu8bz;5t|(4ps^MpcN|s+LBASo+3}&19J%Lj3 zL>dV!tX%|8>S#g^Z83)SINNo`Rr7wR&p-P=*wpG$iLdg)gvWQj{cle-t-FQ7RwV_n zWdEmIW7$oDfZpy@_Chxld?wtkgzrlpN77c1ZZ2VVY~0Sz%)0E#%MssL?L){n@WhG@ z`5*1x(sq+uGSVuGLvl1Qk2+@g3AymQMHfwO33>s8;x{bhBykZI75Y5{B-H^|OR#wk z4suAQ_0=bzI_dk9FTn4rz0Tgc0sRJ4zKQF2^WBfHeB|kG*O}7zQBo96t^|##kV!Y6 zvvRNcgCgOeS3)sP4yNm{ToabW;phw*+k~D@6l%{s;rH5K&A)@4$l7~*<8=Hw&c{B| z_}Whw?SA*>T}lbLgo-?==@J*f7PBZ?{B&(VQAxTcLUwuc6);RFa9U$XbN&3n!Bb<}`6DrDNf za=FtzbX;(t7AQ)|E64`nlgfO$u1#rYVxTDwT#t;4g;+A$93L(H`rKP$_c6w-YR11e zpXnE%k}u>fT6_DNKR*BY(HR^!PEMe>za3F6TGsm%K4{QW)CX#ywb)Hy()C=(ng)l& zB&hL%rlC+W;dn0WaWQxI@sSr#zvI>qvuP~Tn;Q?0C8G7SO>2I%aO>I+?ul`Q(BwpwK+|Rn%nHvMgj32Zd2Gnrg85 zf_rbD&1SLIp4@cTW0vszxIgb(`?F`ZtX|MqBO@PIkT2#T8wOVI%9`sFIWJnzqKKEM_MB>aX^FFhq)xeM zLRX*$Af*cp=l=k=fUYoT1?h51EppL*hZI9fuwkh#b}I$!86|JJ{QkSos}`)nvhH8| zlfP_RvtUoeL&1;)4?uE#E&%zi;vxfq2r6wM%jpU=vkHSmgsjfbA#`1bnac^_Q(r41 zXJeA1W2RKw@QIn1U6HEZl4_fmT3=tYV(Z`8B{`jlj)rHda7_tO!$3agLL)auT(*zQ zGEh5R<)JNV*uOYrb5mp>2+qI-ZL+eEqx1k47G3?>=?fUEJ|c5Cz*Y@Z@=3jCU-{=CTcj1GTfvl^dsmNJv zP~#;xJzo0lMIRaS=_BE@Ru9zQuDk7>N1p!fxSTdFS&+ai%2&sMBB7PmNf$6Qc$7=8 z*ztx>cGyI;TcDB6KU*m;| zPwZXuAJ1%Gd&6$S0V%E!lPSChu`3RgO#Iq=|NagDYXwkA-;`QfCL9Ul3lgTe(cND- z`}(V5h;OLUC)GDCalWx()%L$F6(XsqRs%EdA*RP*mHa+$r6Q0_0(PnFObfFRjyDg? zA}hDpJUA5SZK2#57DUkIk!sKcdL^h5L#}8-O?u!)dvVP1?4jA$jk&u&vWZ<+rk=P6 zofnFAxv>ooKJk2U)%KZnri!$df?Ftx7@Zo8iYL~#N}^p(_$qItL~(uK+li&Wi$x7T z5I*R%?W8!LM}zEJQX07ssE*@6i5M`g0$Nc3AD6@yIlFW2Kiu0V%lhoTwGTYEYyFKo zBCd$DhG8qklgi={1XPOpiWsn9;|H7PK$DH$*CGarP0gr{Brx7mF}lBt)Q3Sndv}F0qL;Dkb&9J0ku{XQ5??L~a!grdfm* z)#0fO88?TPh=<0p%BG9%`O>-UOx9M-fC-;<&#Iq3y?gzQO)(&+`Cyd-=DpZhkt-gA zr^3q7%B+@%R#^_}wHWk08JrUx+wjHHuDaqfUoWbQH{1PHa?aIlORTTGx2o|=W+s}B zsI{UPuw-%}v|-Q#Wp>0$30UQQYn4C^3n98%R&nnX@AkRfL@h$rE&}luq{i86=U+Kx z4y*6KK3Kg6>a*J}eeHoi{CZl+m>6ksV2C&!^Xt$n&K53@9U$!zMrWR%x+_bT_!D(V zU-gjl=zl4J$d$++^kAwE+6@m433un5Z{1zBWnIDfxIZ+$`rxA78*bRHT7r0O(o(O= z@Q8R#4@%$!lBK5ylX$K+F`}Zn(A`fl70LZYToRkK`eUbDcx!!?aZ=8?zVjvX{?%{n zywfvNu|%vMxtzbuSHAq+eV4(i2m~LvnL50Wdbr1jzDpt!IvFVjnB**EnWT)*;D5v}-uLZ% z)7W{Wdkxf}f4D0Ln;ObjGY_`npe5?z{e->o@_)VeJT|p@%ets(?a!Xxw&wc1QI2*U zC`vB$R2rphJDGOBYl+~IlG$|-(RJi98H|plAvd;RZr#*9pPF{TW!Ivvs*IBeK|ODN z?Y&hEcgWtTG>}9-PtgxjE9e5$uE^@b-0SVG|FA$M0=neEwOx3gCgg`)%|?;!N6kd< z_4(IK_yDV`E*W#cZFIljbR5B#HJ!8J$B#Xe+GCDNloZ6Eff4g2h#3mZ2JVmmsQ_vK z&@hA(_;X<=y|9Qa{FW{TqT1n>;F4H2^mqbpwt$o;BhhT)g5<#JX?Yn@x9{ZE8FbsTW^aaDpzG;im0i!*f_m+MAg__^}jskt9o~(70|y6!dzO zhGy-slzr`UEOeF&Ki9hOlicg+l`SES8_p znu{a@YsdJ5}e-W zmxK|ha-ckP4?_PnyqEy82OYITTG-%dav`XXgumquBzh?45csUFYr~B)wCWCaMM}Ho z{^Y({Y;tuOERtS-tYP(oo#L#dWC9LDQ(zZMP#um5u8vt&bnWNPy!@k=p>`8v%ot#X^7htw@S^3E4{bSz3OTN4iCKEVgLXj07*naRP^vF zNi)5@woc0&b3_D&*l@N*n`x@-H6cYxaFpi8`8OSZX>uytQ2loVt8`CKz@OQ6&FTmL z_{)iH%Gh*K5l^#H78>>GLS>68e1VEHQ=E~?=);|IrT^*+gBzJR%RhklyVY0|;gc?Q?tgF9?!PnJjGAb43``5KY`};Forp{uDsAcl zQMF)s3TCwus0ZJM^bb&d<$25Yph%QtU_#2PV3lAbC<@SEoq5sZyN;hL|Fow#JJfMK z-c0d_-?;m|$6o&S=$sl&x;iAAY$-XMzWEfu5UBE%ox>mc3jv0fVv*D5l3*6e;bI^* zR=vLsQSwfa17S}6$&+Z!FSCFMv>vF951Aj;kkAYhZ8Z{h7^R(;{@cB$S8G{CS-T-)v`gk+kJ=4YT2gi0tJYUG zt!nr(Z`Ny*${3Nir(1HBz`Jo>5YIc}$Z#AFjwY2?DjG%J$xroT*p;vT2C7R2LIp_M z!z`8r?=>FR(9+%tqsBvYRQB;pJ~`#)zE%bF6sU6c-lv|=y|VF=F^EFS+kj4NW8#td zo$(H~e0L%mbxNaFgspmX1&0Q*SpI|1p$NuzH3a1-gRkR69)hU=1q+`)$0(x%IQ zaCg;~bv-Xmes|A~zZqXs|IqnHdUrJwB6jyLd0%~J_0})RPO3)sVki|jbR}ADiXDz` z*-ffGPT#LnMQfbyeVKk8nJy>m3sA|b?u(YtTqp0G^VRC&tmGEG49L}xOT-j&u5Vq8 zd*4~J<=%Y8izoEafUU!|WEh$XYL!)f2|g*kSb5ZYG=WEQ0s=8tNu-kfrUQOO3x`7% zRo}h#rjML@eqV{zJ-SZ{m2CgkFE=E27N^J#gX&5!gnF}6mZUkNV{w?1_XMb7=?p@x zp;e{7QJmG$Id-rtn#UQNF8c=2&Iw!9E!u8t6QM@21vXr!76^IsDNw1iOOixUF?jMcFz6oeN|_$dUMZYN#9*& z-m~G2-Ct4MWE`FX$<@JNfO(P#{|QcZm?I5IB>_LeUvdxJEcNCZ`sdh#1J#pk;iK9{ z@N;xS|B#9J;gkMVgRN4XvtzlvP zgMzGZ=?|Ft132{JO2TlL?=}1X6+o3OxM~Y{bl=-IUOVgPY^LaftlzBu!utPu?q5zY zqYW?p?%;;7;RR%WNK{OA8%ICZ-%Mna?z~gA zYSXftf}Q6ugs5<5!g;65t)%G%A`zh_4dYV-IP~IDX|G3aKK1ROQaOdnQi=r_DUMca zTlS(4oO0Wwvy?w}Hx1pr-{bovKeh4USN^H^Kg+)~sa;bgSB50ycm{6SKkUu*^s>6) zv$h!?_SdrQ=idLNGpng?6&a^j%=>a#lOEgpHECcjE_dnsEV}#9F!oVt4QN7^uQByxwrmyFd8Dll6`6 zxLOv2*_sz@_CfjTDNsYlDgii&`oc4Zw2U6ec4}A0vsOz}a`rOMu-m~znPffOBx{>2xZWt)(kISjz9DPhBQrU_i z9t)b_fqYiSvEW6Sh_mjBl(t>?)BDcq$p%Y=pqAvmwtnTFdu69C!kiSCOB#Cqi%4f2 zHWX1F7d|artf<(WRH|DXI6i{`s6>uY3<^*=u-rVjYC=mD*Ishnl&hnY`bYJzS3niR zxh8ko%71zEvGnH5$;TlDsT53f6&UN6kMsekAx%(_JP4>nQxbK-0aJ;Q|0Pl62(867 z+B>E`VvQWudgyff@wrpF4-;=3YvyH|MF~9WGO0r?N09p^pt)DYR@L6qdLH^geCD0 z-C#oSH}AAGoHuXU7mu669`7%Z(s`-^suC}*q6o^ZNPh2=>GUeT=D$1jDJRF6i zAbBXL9`>fO^r`Nx`_q+MLI#y&N^=qV@)dQ7t#eQ=2CpJC!{P!n1iMsZ-4C)iLuv@c;F&&@^0IH$r0@SkArEv)jN7Yx+ z^BX&4dJzsNLwI3K>Am{Oqj2K)f#2kREM?m?)l;s$l&tDZ@&MPJdd5G z=%Y|5GN`1j8h|vc6b)+-!$QY0tceSeuoNDq`hDdegc8iQ$iFjPs1t`&>^ z!>vXoWXqYp65t$ zs!pZ2i*U&N{_|muU62)gQ&n~msv6$@{7{#aL6@)=Ne2-?%M&N`T1m-{BdY-WbdJ56 zlpS~W`TH_jY-&bMN~RPCY35TTK?wj)-$Ec2dGJsPz9LuNpLf)obNPC;9We02VjZpr zB_64GPgNx_$%SPW5sSu!0d6-PAkq#kZu^L;4B1jeiyNCIrV&Th|-SL0(>zpb$m%SO`emnMn+?MZPi;C9ZOK9iM zIb7;LKm-<96~CLF2UC*pURx{L(`lS^>1AlrqsX!dJUJ?Ku|nc=SW_0}!pngtK9E$s z&a5Y4LAxMAG~-tMA5J&J92D{vbS(+l@Q}qeSW@%KTkoDtGPC<8UrM-@uV!m17~pmt&@ zi9EdzR5GuU_?Prrxv02wOdAr{kuN$ZMGdqYI@%I395;6kGVugjWd%i9h092z%byGy z4O&&Gx*)v&fdgu|%!@1WuP+Sc2LF<9xZ`pm{6-n`qLs&}@kul_Z$Z2sE3Te9?Ls#5 z$XU{UTly=X1+uJ-zj@}t%*yw#t8bU$QmciC5)qRVhJX}5CDU0(rQaTx?w`y9j_6`h zLt);s&7rn8B;HFd3{-fw2fOINGHp?=Oac&w9vAIzavnz`g|KSU7(eeqw5L-7tRC8xDdm6cLJQhK-M^09b#0pEw-n?|f4QO7Hr)wK_4D<0I$gO>l#f`l9^ry0gn}Up zabhYBDHUuuMXD2_T|e`6phA6Av64&hn1X^rHCQ@Y^a!S2dI{QMQDk%#t*#3_ripBn zRj?3^Qd^?xlw$g8NQA7r>mjO3$mKj3nk1?VXlo&YHY6-zxiC@;ZN;64)D@Q9@cHSN zA5D-RF`$ZxUe%h;FJAw%El)08Fhxm6&{{-BGMlBAFSU_U*bL#{4A_|khnBP@F z$XQgdl^9cmPihq%*rpBFrpqOAiC-l|cCl0Ph|6#!1tm#EyQZTx8pDLS7oa&EM=ok0 zLrD->hR#T5--V+2f(--pqByCpQ=F7T(@5+LD4NvJLjpCX%;jyQ>Q%HBcEeTot-R%~ zGcP>aAU&c$6=2=K6HWj7+(S*v*I!@T?!{_L3Rua5D#>uDIYlH=QN1=WQ$;#Sem{VU zrzId$3*b5orD6%Ck}Uu${8cXOtbi#=qZ7~s`HHYEcJWk8qQF#CG)pQnwF!)wcLAE? z5oB}?CZoW)Qf}ZdFn1n2pMv!43c)pMdS;p?Vnm2%K(62*UZY@NhBi*cWjB0&=25q# z;n*DUXPGQ(%kwKAXjrsj!Ki|4jFw{Hw1iTrFJn+Wf652!CGf_@GVZVWbX`GHDK4Rq zGvSmhv2haMqMbiA19J(a9IB{c_l1K!YJw58(#F8F0poW%p-~TTB z`My`y-B4eUVsVFjGn!-xs@2gqbU-Fd_+wts)Ruz$6xo*HT8`M^7mK#=t+~g9U@h(b z{cg-22)0Tf1nbh@MJUcMVfG^(1XhNUu3<0Z$k(JX>B6~akH(PIspXIdNz)I}r0nR7 z28E+2PMR+kphr~{DcdA*=y3!4GFuTFRa|n@7f=1bKrHu_BXGnmYWQV*D^Iul{>2A& zzWCM+X;X@l8eNk4S*)pq%@oDUBq2->xaqXoi%sbM-{GQDFQ3GmdS(_ez@u7w#Yp$PaM`KcR0TD^> zkoNA$75DQo1XPh06`J0X@JSt$a@wx&qp2>8TmjMhlk`W)rMA#Rc%|sx@kuG2ttkuz(-y5F zUCBm~H$slLzp>!eo)qhyvu z#z`#q9$8UZ-bn$X@>Sk-1%LFv*yozk|Al!tv4#W#ELz3El^ASEfh9?>BpEG+jVrCA1f_NY(3TE$o6Px4!=28_&LYF!-c{2B-q8BF?(#p?%BOU!Tgkv9zUtQm!gf z;gNqxaaKy*1R$ieV@JaZe~~P!OdkTMWJyB?ls}i`XOg88YWM;L)Xk(=ED4J)n(~rg z3V(-BOMg!+YT1|S%4aYI=y-FOJL;@#WIu}ihqhLhf>N-l62T!F;mw)E4lME5C z{kUzgsS~WU>iDGDqJ!utN9^uXb@I|{zi<-m?kQzB=w1V6QOjBR?kzOZt^ z=sYvVAqM1a+TxVKQt6k8lwU}`rVx>+ajJA;IxqbpP<;T>IV<=u9)p#)MZnv(ZDB>l z#z~||1AvG~K=(`k;eaY0%8I(N5X&W5gQX|YM6t_s5>qZX7wz!~nz;)l8AqGxKoVlf zzBLsLtYF5i|Xxo;6$6+8aJThyM4l~n>YoKP1E99IEPB(cLPq2{#dh@3JFjWR=U7NrwzjL(AIq)N{XRT=LEhlkIpE%>@{;QO@#^5S!)WS0=ch^qNGs(Y#ZdYDfik5=XId+4_qJ|emmUaK{7CpG<`L`BK;0ePhGAKa z1W>8(k=QtqH5F7t4y$CtGEET%l1V*V3Ih7#At0I?9qXq`%hKfKQR_QU!&8aAsT6VW zT)5E)a=L~lSw=3MLh`gz;f))I{jv;`ToOvl2Bqd?k!{)Mv(iS2Zv9|DJrti*iM7A+ z!P{qEJXkkQ2Ya{&9Z*BdYCiw^FW!0L#T$<2si@Cqm3=-drBFgXEBTLFP=wb7sO6ib z%@K9EqZ~ey;h7F{*@6hxD~bUw{L|jhVh#_~?ksDiwWAb)EJ{2i9X|v?wb0 zq)Dhb^9(dZRAi_ggu-PmppnH?sFPm+R8e=&d(I~vRakn%=cW&uj8k_@etA55df?GM zj<0A*<(F-EV9S$BZk(c|qi8K5$|-CFK^0^npH-}N2l}Y~^@h9Qp!FnYunKlL6h)gS zKi*Y6P=y@$K_2%*iI;WyyJ)&=gUK>Voa(4Z4?Ti*Fxd5DpiMs+nTcc3s%fw!RYW6n zQD6uZDeNVYNF9-#xL|Pgf=^18bWp}gyBpI%4OHO< zY~sn5KRy3o!}BXYII1A)V^|Dc!G=rLh&WH2dc}7GR8dOFP{LRAqad@SLthB5>1*%1**%a8P5Sr^j_f(X)jEth8wKk3T+}X&CszsZmz+oDw_?q$( zq~9ti3J!-V^?*;hVAkBBvT+(RK5Ewsr8sNTlg~W7ciFn@>kCRW?kFM#s*<`WvD0XG zaR`g*)9w|(2J+dWU_}wY!wpmq5PFD1Lhfm2OIwz%>S6-Ax&k3Lz#XsMXihmwESVw zgF9b(dqGW+8Bs?@0ujMyJuFa3tc^BNB?tMO37hm>CEDrx@zsO38}7;Q`9P&o6na$@ z2#DXi`mKioDpfjAy%up-WzXm4dWwv^tYM$3fS-H{^ckn1IbtA7yMI{{-BM@|Nnc7` zQx3%^O^n8y*L+~wyrFDK2mNO1U{Dd3^{GX_*t2A<&u86l3O?)MmVTkaOTxLPFGb_o zMB7sYLrdiLMOv#%g8ra5?fOi225Jb_Ls`_WKB{j~{Y{?WRtZBt&e_n%_jRB+dW!id1l z;W#!NMS`X2Xwx*bCDRyp;RV>As>MDkHY6)c4QU9dv^p5lq4=ajDo%RL0aYxk#JYO< zm50|px%j%7W-1!ZIHKu=MEwLTs+uF8lmJU>BXxBEa+#cvA(y!-3iWtEhVE{Fdis6` zAGN2S2p%RP%YXv^zQ`}R+m;NJWJM6FDULeziYu@?UW1IHL&#OSKt$p2JR4kAQLw39 zj?X8J)!Iw1``pYS7bop*)P|fzEnC)At?7o>*8XhI|Gsw9RGu)TdP-}dznmA zfx75=O9B6UdjT%VCvpuok&guvf8e_h5usXah=NtYZ_GxSCkUYKjYcqT-aPC{)*wf6 zkAcWcA>WRg+9X=@8KmkXgPu>?9T2;Ff5-w=SXS~`pLp>XdzP)ap)Sv(wYCg3PjchB zs0ET#>g+(0JRG@9Ueqp0k_K0hP>7sDb)o|~1RNyIP9@fgOWjc7B2mYN1fLbEbdUf52?a?+K~%ImAa?iuK+aNk z*Vd!=Iq_LvSp49w7hb<J2sOxcp)eAR=+Rdl zfrALBjxTEA=|Q=Q-vEPLfUK%wuMtPxIcLM0IvI_Q4K-pQXHy?11(B4DcJqD6k^E~n z-+20^$HMOZP=h?=ff`!Y{ZB4@sBzia>&NEhc)TP-wk0T%2G1oxGUVF|qN-GtR8b&J z*(%ESlYqoP0+obuY1i(FDpvZ}cS-1nfVz*C{y7&QTRRHviUJD^jxNE}fwocu66yAr zZ~EeC)D(9}W}JHZ^dA#I6=2=WQ_YVp{Bh&Ut3H&@$C)U>oS^CNlch~A@->en9&&WwgqjJ zfd;z)#%O2x2j@?ne=J+la#*jwhkhW>M?P!&pBMdP_u@4-k10hGa+?cH(xGq_#r6`M zyamOTMcouc^?+agJdiK?da9-&y;KoQqbf%7Rhf)dLqS`8ort5_wd1kZu^~svnzmzm z>D`z9&sXPMbF5p^V-l#sQf}hO%;PWqaLcoA+%f^lm{F7vaW$A30;(f=K1nVD7l4D5 zuLn$-JW$*wnRsf!PA^TwpGaU$Mzf(KH)R4wojV)59DpZvWUVGR@yyZ%ch4B|Y0=&o zh+}5yue@o#n#W47yz!$oe|qu5Q`~e?Yja`PDy;UB2vKQFgO|5Oi^r1Wh#mGoy(ri( zBri2hlx)XHq{8E{B5^cmD%hE4!k#i7**Jr#@ZMcak%dtz$rSi z!@-v|CCpWu{$uYPngYLZf`4KHiKE;x`K8EG|&VzCHUC2_MOdo71MyFz-ZA~E52 z@{KSFS<6F2rlI1Y>7hrG&UeSZD8=`B=z%Bg}G^WCGEkJeQkq=7k0pm4jRHJCAuS4RJ zS=i_`LLF~CbKU39STGzxddve=_^hjWEVpRsKkj&W&Bu*qCmn02xQ{J1SQ149dd2SV z?}tkgQtOFy3`M66Hc9#zDKvXBwlN(Oueu1^Yf4U`-hSiS+fSW8n6#k!dnCF$-!W}b z!<+Xz48HN*4bQy(alN59s>U`Tn}BSSAsfg(PZA_Y0arL2xgCzoQSuZN;wdzZu0`bR zX?A|9{PMi(X526wLQuofN9}skyphLRAA9p#o1cFDGipP=Mr*N9ucw93h2XOe$V-AI zN0BdP;TjfrR6&bbLTPjg(wQd~-IMB;pY@4ZH?XlRKOmPkh`w~7W@tc$Kv>o%)_i;Y z|1SPyZ9}O(Sx}(5$^drGll&+|#6ZR|Mfk~yGwjr|7<0`TzdPxZm)yoCvEqOX)*$=R zVFlFCXEhhU{k7GPK70G9oEnekRj4A!-tp?%z3#9}Qs!$j0ok!tl>_<}1CTF(l#zmPUS`u*ki9T$?SP%Piq zwUSj|-_&zq$)4~@_o@YCCh2P~|N8A0vGYejda&nYSOZmnbp=oDer(aN)-7Civ zqAf1smI@-xMf50DS&L?8Vf%6>ikS(pem51O<%!PIp`L0WQYJJ@g_gfBT}i$0Y))KL zz-BJEBEgQ!*ez#}sl%r0esSMyHjQNlp)ng2mo)5w8v3klkG*-<>yJM3#pB(YF-9AQ zTx5u830PELRaT8A(Oj3fO`>8{KvXm&CL7vW7D$kxsb*hjta6bib*O)%CZWV!@|>DulspHN8FgbS+EGG_SAa1(<-|`L|KbUEE%?yL z#;JRwJp$Cq9X;oY`MfnM}?<^)1tfY*blM5x_n78Uag!`DMjI?5xNvHK&OA?JjvG^K zJE`rRHt+1E=~E~Ew{ptF<%6+*Q|}=&FrOF!YA?o}uj3jt7-%d`H=En1*_IjMmTd^R zc1dw1LoKQ?wOx)Sc4Ks8GdyH50}f*cGy>?ww~ib-;-ijWV91QXh(#STQ#HIVbOflw zd;W*a-H!lu$V}DnzR(e%4)6INGIu`$)FCrf!}~%n`}4W)-{Esz*Y|Y&aqp)E`WZtlpb!Ye z*nd4GShK1$FWf+1^Q~OkRHa##fj&$yL>LJsvc&*|%oRoeaDP5K3J3<++@!esfI9@D z1Lx71Ad?zEhJ^Sl zDJGQ$_ZEr)I1Y(+=Ad2Ca90cxi$2-BXXbc*K#-cD-XAGX`f+eES@b3>o6HUyG zBnDG_zsJ&?NQh_<6cJIV#Kc5oq6< z%oBk;p#VOs$c_-kgCv9|)4xjKi+;!oB;VVlX&6e%7NIam^lV9UKq~eBL;3t4XbBh$ z{GIRr6qeAFL;xxnkOyw? z$*$-*E=93e=C^C`*|*|Kh^ur<^DVu z{7<*B<_JBa+b+N|O2d|TtLm>K_{3&F*wDS#XCa#AF z>#DmyGrCC>sMkV=g)|<9MyxiVuREW5Ry#m12MS-Tro$SbJ@VAc1H0CCaJZpIY;`;m zBAczgo(eBXXb8LiHNkDgy-QMMhEiZN(4kcITeNM07W7@e_YwK@N^iBF(&Oc%y0&;3 z8uO%HxVyLA*H%CrY&FPV)mONl`0TRol!4Aba5amuICr8pY{Qk!^KRC-P1-}gqT1Jr zV>9hcS7hd%&QbQUwp}*uUOU(t+BjBM%-SGbaFm+%cSmAV zEgiP(Q@p50)z%U}N0%=3r=Ckv*zq>tPtqD}wch#31|O5`+N<>KEeA}dPM>aBGNg9& zu;)Qi%3(CytlT%@dHG>*X@TtOVOu(5mBn3$%2R}Kx8cVtCs4F}2bIaceZ2R{KF?4F zCupOpbh0QJnOAn9q2!Rv&NnNqo8D%PO;5g9u!zUFTaH@MAd@-oB?nQ{N%N62{Y{-L zzt7U11`F*2H~QsTZ#i4)D~{91$9C;%le7xiK=2fDkNVPGh;U2Ciy+YpVq?kUU6vLf z1I|B;Eudw!qB~w3Sh`6H^}sKzm*lT;cE53cX{}1TiyXnsw5@7a__nZ(?B zYf=a8SOnNJhm~4`q+6dJTAW;7+A;v`iWHo&R*l0Z>P>eh_8oEIu8atfIp=5F>NP(% zEVT^rv^5))4e#kWqsD>8hr3}L1~q1k?XP@G~(m#E2(;OV2M^(rsFXs~o$`B8np( zRU@oI&DJXv3jgry+9{OC>=jtGr{nckmPgOG=H`&rqa9+5a(EX;f^F{TMxo`p?+)pM zx6{ZEAaAbTjvj-K4j)MkXUa;lIuMnFi-qCBBKCZU6tfoHEb(TRLgo6Pt-5E%D5yq1ODm(;WTlt}S3Wpnt%TZX&6 zX_Yg#AO>FXzS5_t#YcG}hc%4!O0 z_g*H~57;za{?uNtK;$Aa+^)3Vh?wFa-dmpxi+UTPli~>9e+B(24+MrwN2}C5G~(sQIXu-2tP{K!!Teo(f4yUA$w@ z)grAviT{ejM&R|Xr6u@qpt z>BK9&k1b3CuJ>wlc|>#n&~2@PZIyv{N7FK5Qy)$~A;rjpKIJ{Exg(>E7~dbyJ9iYj z(CTXUzn+(&%l%KXrS)<$FY`E@w{{P&~dhE0u>h@GEI zIN5C*4w);4*4*^!IM&m2^s#n_R~&o&IsQC9j+sHrKtht&a+8T?Yts@~<_f1smz0~! zZ4}8R2JfbpbUA1*AVtYWLX?g;%B~SuFL$tL-j&_vx@R1pygIf>>p5&$#!{Ur-h@** zRqn!%$vj{j;x6N59NB-JTvBgf20SyLY_nI_^uO8!Mi)x zTz6FiS+65fQyc?|v-4GFT?pGwJ?(BRsIXHEx^^>jlTrzJp3j=T2&xNrR3DudP`?_W ZAz?dnD$lg1SI_=(`TGP?s=T)C`4it@FX;dP literal 0 HcmV?d00001 diff --git a/saiadmin-vue/src/assets/skins-thumb/businessGray/thumb.jpg b/saiadmin-vue/src/assets/skins-thumb/businessGray/thumb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d97fe7e1e1b3ce1befaf117d44e28180a14147a6 GIT binary patch literal 1871 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 literal 0 HcmV?d00001 diff --git a/saiadmin-vue/src/assets/skins-thumb/classics/thumb.jpg b/saiadmin-vue/src/assets/skins-thumb/classics/thumb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ea72e68c2a8b37d4d108fe5893227a041cfd1920 GIT binary patch literal 2210 zcmb7E30PCd7M`0MNJ`k!uvu9&LJFoJ0SRCbibycA3WheyE^8jL8ixbBCL5jo; zP+Dk3h-qJI3zCw=$72zSS_A@$3QA3ZiUK0wQqqZts9)Rndghxm|D5yBnKN_e9#x-e z5a_d+EG9q@1Z;;5sBR;DEHAGxKaMYx^`19$0DxQoP_Xs@BqXNtIX>%_Z3_roh8qM3 zY|kV-G9`H){i%kmX~jIZ%l1zhe{XyvDmo<+QpRDof0KnxT0O)6nwus{Z)a3zSa&6IO`8fc3djY7uyl7jzljLxI__J_Ws4+1y z08CZ^pc4Q9>1P16f}Z)H`itC_L6<4aD+x9phzHSN8DN1#5DDxcasc*#2I#7O;03gB zI6O{M3y;SWw6qAiCi=QMI=W_tMnsbp7FL#I3-WRb)p-@gX0^?7vb`s5wJXEj-QCJ= zJ3Q=7q`e;Ryc&Kt^sWn z@`xxAcz}t|Ad|Gl@udCQ_JQmB&vYEGbR9yki+{gR(y z>qJ7j-#W-WY<8kJ%rHw*ma*2D^A%SqO|S0}yS7PZgrzQu>XkiJoTT*4n>m>QO;e8) zbzw*S55@2b|HT?gnK}1(e}+%sQL(F31wI}QJ#%j)EU;0Tdy^CzG!e2y=`Hu}7K-g+ zrB7)karYWjpl^SI#Qev1?o6#>G|j4jksqSl@H`>)AN0S{HXMsQCi=9c@o+;~T(GmD zRSPXR@HgfDPj2oC`dH^|RKDPW4dJ5afq&PG1mEl`@NS`|JIyhYJ>pEo``ETuZ}^LE z-7bC*##5%F3DW)>a&A^_ualVCD3!AOt8o(HMyZ{dnZ%IcvGj6UW9Mm_A+7h2$mD(! zcT?lWX?c-;h<*BRn|yfGji;H;=4LgV42o>03fx>z3EF)9YKT?R8@-iV#x#$Nc@(dl zXp(JFNGKt80Y6Y%8?t0Y1|yfm8@j5DZQAZu94(Dj0gZyWo&vv`DJmw|856-R{R*QzL#EE1mdiN*-2w;rsHpHpMGOib>z! zllzwRIrLg(o_vRpRedFKpf&qoZmRqPHg#GMvSyDVy3&?p%8=4U=BG|fl~=8Cs_9qc z?Qj&X^t`{s`)=1-Jw%i+X>`fBX9ZJPmUd*09lPgish*2a$Q^rR7N8KG`m*%kWx==Z zWnt~&m|XL(fAl4pTV-}AYobOoT#^X8<^Q!1iO3h8X0d{;*dlh#;9SMKH^L8aiwwr^ zI1JVjb_Jq86ns~m{o&?(Qh%m$?(pa(I^Ai~SgQbkZ?@fc@79Y)^AqX&90qQ2g4*Wl zWezd!B7YN6zxlRa*>y$^x~}E_y(n0x^QiBS*p^M2T+0gH;dejH_AC*i!ber}QS`N9KYfE3PxVU6? z%;+24A=a7Jnks?Ylh)x)Eo|1^-je8_h><&w%(8{MCcN1xaqaHwjc~r9yu@xB&&IuB zN^abEbM{ZedwTNnWORj*;^*;3YN2TKvVZkdMT9IcwC;4PG&VHBLhsnqOl^UrlIfu= z9(ucb48)y^>1wFY0q-sxxMe#;l++hB=eXmGQgm#AgNlQehVS&hz4f~~kw;Bx#lU3e zRfHCMFe2FIN)=P`i2yr_)lU*f$2Ur#6J74J(E Hoa*Wysg&zB literal 0 HcmV?d00001 diff --git a/saiadmin-vue/src/assets/skins-thumb/mine/thumb.jpg b/saiadmin-vue/src/assets/skins-thumb/mine/thumb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..641eceac3f8bb7ca245eb8f3ca2a6c11db2e0011 GIT binary patch literal 2010 zcmb7C2~<-@6rB)R1VIAgQuYWa%3=T!fg}o)HK!5KCVhjdR78gQ9RI1SkLBT*#ku3z-L`Wyn<92LMeRF31op#P3hwv>V06^RVFlMa)Ada4r6yW7%vMDIoMD-a!!0|4^ zsL2U4=!+{7t_sXZNl1a3 zbqbucKENH~aEO=EKEjlbFf}1bq2CWRu5q!cinA16+( zhkF?DrvY#p0RVaELynRMK;>=#7K%UQ%uWF?HyZ$6^M~Aro+N}Ng}t+z1y`lWNC0GK z0niKrK=)4o)XDESxcp0PCXh0Kb;ZL$1F;|im;fI@2UK7KksVk8Fu+mX2Hb(Vs;Zi* zin^MbnufZ%hSoxDElo`=L%sQ^g^P{N&CteZQ;X%RY%MGuEKSiX)?yr1yWns*a~lsI zcUSLKSe%Q(1fi~>p{1#1psj7-vJ}14<*P$}4WQJ(F7Ow!LOw-QqE zzr7C?RpcyXB?W1(4M`;gLItU!tUSXblpu*x(J{rW_19e-hECjdxahteg>zk^H{aeZ zK;a0@K68Wy&`}kVOHl6|kx1k}e(-ZEAyLY+OffoZ{Z(`&=&-~hj$91pAfXV2L;*ag z`r&D%&SYBM7RSYQ%3V1@)w3(*1c9 z>#>x)>07>GfiIl?kIS+8b)SJ?4hymcQW*W&S$j`v29$P z`g5#%eM!z@(XWTKLMO|!#tY|8xfP^O@_Hs-yEDV?ba!;yMF$Lj^Ja8_Pn{OARv+D& ze|b#*80(CLYT;B%CJ^3QpZD6hz@ASwvZ|=q;?g1`r3pfbdYPPZ_C~Dq`5B@4k~8(y z35G>2636tUm@OHRHg%=xfdzN1jf9C0TSbjqKmp`|%s*p)(<#yC;dwUvNwEJPXp;6%@?Bf=GYowYSL`+zna4Ij!7sgNy zR^$y2OlBBAHA%MXI?2dyn$vK0&77!DTC5x@K5uVpeD_7oA9xMySqqmmV(22)jgSp> zjfq#DoG-Y`DI|gYh&$sbA6k zE`fJ{ci^k>o*r6aJ9pr=)??LcZD}!FuI}a?G8S15_Oypw;)ia?*TtZ!=-d7L%$L~o zcgB!6R()4ni?e@Y*6i?m;sZ-xe$1vGl#%~j-+|bivgVTxX~s=yX7~lX zY1`B}-ak=4DR^{oc3Cm^vg};dfGRDkCATgl*BWnY<&{0PMC{*05DV>JRWlr<@x7sB znnAc=M-OIMc|{Fd{A@HXjntYlh^Jb4u^+Sxr^q{!JVpzb|D@m85H-1zMv{X}8x7{( zrs#OmVSMBe1~Z--RZnR4KFGCvOl6uLiQnRv!*?hr9@}&O0j(F)|2lT+mH<~mm#yY> z_4N0SNnc98SLPL8C8y@zG+KFPqT{XkrBV_nxZcAfWiQJOjdu3R##JOo^2qethGmY2 zR2Cfi^ K|Mtf6*1rKpd$y+l literal 0 HcmV?d00001 diff --git a/saiadmin-vue/src/assets/userBanner.jpg b/saiadmin-vue/src/assets/userBanner.jpg new file mode 100644 index 0000000000000000000000000000000000000000..38eace2599db60a14bd81ad29a0ba5504fde65c9 GIT binary patch literal 76835 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

~$0J+EEBe5iJlve;Tf+>At>!Hg`au?Lm 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 + + + + + + + + + diff --git a/saiadmin-vue/src/components/ma-cityLinkage/lib/city.json b/saiadmin-vue/src/components/ma-cityLinkage/lib/city.json new file mode 100644 index 0000000..e92ae4b --- /dev/null +++ b/saiadmin-vue/src/components/ma-cityLinkage/lib/city.json @@ -0,0 +1 @@ +[{"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":"130505","name":"任泽区"},{"code":"130506","name":"南和区"},{"code":"130522","name":"临城县"},{"code":"130523","name":"内丘县"},{"code":"130524","name":"柏乡县"},{"code":"130525","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":"140703","name":"太谷区"},{"code":"140721","name":"榆社县"},{"code":"140722","name":"左权县"},{"code":"140723","name":"和顺县"},{"code":"140724","name":"昔阳县"},{"code":"140725","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":"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":"220184","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":"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":"320612","name":"通州区"},{"code":"320613","name":"崇川区"},{"code":"320614","name":"海门区"},{"code":"320623","name":"如东县"},{"code":"320671","name":"南通经济技术开发区"},{"code":"320681","name":"启东市"},{"code":"320682","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":"330105","name":"拱墅区"},{"code":"330106","name":"西湖区"},{"code":"330108","name":"滨江区"},{"code":"330109","name":"萧山区"},{"code":"330110","name":"余杭区"},{"code":"330111","name":"富阳区"},{"code":"330112","name":"临安区"},{"code":"330113","name":"临平区"},{"code":"330114","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":"340207","name":"鸠江区"},{"code":"340209","name":"弋江区"},{"code":"340210","name":"湾沚区"},{"code":"340212","name":"繁昌区"},{"code":"340223","name":"南陵县"},{"code":"340271","name":"芜湖经济技术开发区"},{"code":"340272","name":"安徽芜湖三山经济开发区"},{"code":"340281","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":"350404","name":"三元区"},{"code":"350405","name":"沙县区"},{"code":"350421","name":"明溪县"},{"code":"350423","name":"清流县"},{"code":"350424","name":"宁化县"},{"code":"350425","name":"大田县"},{"code":"350426","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":"350604","name":"龙海区"},{"code":"350605","name":"长泰区"},{"code":"350622","name":"云霄县"},{"code":"350623","name":"漳浦县"},{"code":"350624","name":"诏安县"},{"code":"350626","name":"东山县"},{"code":"350627","name":"南靖县"},{"code":"350628","name":"平和县"},{"code":"350629","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":"360111","name":"青山湖区"},{"code":"360112","name":"新建区"},{"code":"360113","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":"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":"360783","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":"370614","name":"蓬莱区"},{"code":"370671","name":"烟台高新技术产业开发区"},{"code":"370672","name":"烟台经济技术开发区"},{"code":"370681","name":"龙口市"},{"code":"370682","name":"莱阳市"},{"code":"370683","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":"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":"410307","name":"偃师区"},{"code":"410308","name":"孟津区"},{"code":"410311","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":"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":"421024","name":"江陵县"},{"code":"421071","name":"荆州经济技术开发区"},{"code":"421081","name":"石首市"},{"code":"421083","name":"洪湖市"},{"code":"421087","name":"松滋市"},{"code":"421088","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":"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":"431173","name":"永州市回龙圩管理区"},{"code":"431181","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":"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":"441900404","name":"东莞滨海湾新区"}]},{"code":"4420","name":"中山市","children":[{"code":"442000001","name":"石岐街道"},{"code":"442000002","name":"东区街道"},{"code":"442000003","name":"中山港街道"},{"code":"442000004","name":"西区街道"},{"code":"442000005","name":"南区街道"},{"code":"442000006","name":"五桂山街道"},{"code":"442000007","name":"民众街道"},{"code":"442000008","name":"南朗街道"},{"code":"442000101","name":"黄圃镇"},{"code":"442000103","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":"442000114","name":"三乡镇"},{"code":"442000115","name":"板芙镇"},{"code":"442000116","name":"大涌镇"},{"code":"442000117","name":"神湾镇"},{"code":"442000118","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":"450181","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":"451024","name":"德保县"},{"code":"451026","name":"那坡县"},{"code":"451027","name":"凌云县"},{"code":"451028","name":"乐业县"},{"code":"451029","name":"田林县"},{"code":"451030","name":"西林县"},{"code":"451031","name":"隆林各族自治县"},{"code":"451081","name":"靖西市"},{"code":"451082","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":"510118","name":"新津区"},{"code":"510121","name":"金堂县"},{"code":"510129","name":"大邑县"},{"code":"510131","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":"513402","name":"会理市"},{"code":"513422","name":"木里藏族自治县"},{"code":"513423","name":"盐源县"},{"code":"513424","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":"520204","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":"520523","name":"金沙县"},{"code":"520524","name":"织金县"},{"code":"520525","name":"纳雍县"},{"code":"520526","name":"威宁彝族回族苗族自治县"},{"code":"520527","name":"赫章县"},{"code":"520581","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":"530423","name":"通海县"},{"code":"530424","name":"华宁县"},{"code":"530425","name":"易门县"},{"code":"530426","name":"峨山彝族自治县"},{"code":"530427","name":"新平彝族傣族自治县"},{"code":"530428","name":"元江哈尼族彝族傣族自治县"},{"code":"530481","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":"532302","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":"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":"610305","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":"610929","name":"白河县"},{"code":"610981","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":"620201001","name":"雄关街道"},{"code":"620201002","name":"钢城街道"},{"code":"620201100","name":"新城镇"},{"code":"620201101","name":"峪泉镇"},{"code":"620201102","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":"630106","name":"湟中区"},{"code":"630121","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":"632301","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":"652902","name":"库车市"},{"code":"652922","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":"654203","name":"沙湾市"},{"code":"654221","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":"659005","name":"北屯市"},{"code":"659006","name":"铁门关市"},{"code":"659007","name":"双河市"},{"code":"659008","name":"可克达拉市"},{"code":"659009","name":"昆玉市"},{"code":"659010","name":"胡杨河市"},{"code":"659011","name":"新星市"}]}]}] \ No newline at end of file diff --git a/saiadmin-vue/src/components/ma-codeEditor/index.vue b/saiadmin-vue/src/components/ma-codeEditor/index.vue new file mode 100644 index 0000000..720204b --- /dev/null +++ b/saiadmin-vue/src/components/ma-codeEditor/index.vue @@ -0,0 +1,108 @@ + + + + + diff --git a/saiadmin-vue/src/components/ma-colorPicker/index.vue b/saiadmin-vue/src/components/ma-colorPicker/index.vue new file mode 100644 index 0000000..4569435 --- /dev/null +++ b/saiadmin-vue/src/components/ma-colorPicker/index.vue @@ -0,0 +1,77 @@ + + diff --git a/saiadmin-vue/src/components/ma-verifyCode/index.vue b/saiadmin-vue/src/components/ma-verifyCode/index.vue new file mode 100644 index 0000000..bbe49e2 --- /dev/null +++ b/saiadmin-vue/src/components/ma-verifyCode/index.vue @@ -0,0 +1,110 @@ + + + + + \ No newline at end of file diff --git a/saiadmin-vue/src/components/ma-wangEditor/index.vue b/saiadmin-vue/src/components/ma-wangEditor/index.vue new file mode 100644 index 0000000..5616e47 --- /dev/null +++ b/saiadmin-vue/src/components/ma-wangEditor/index.vue @@ -0,0 +1,194 @@ + + + + + diff --git a/saiadmin-vue/src/components/sa-chart/index.vue b/saiadmin-vue/src/components/sa-chart/index.vue new file mode 100644 index 0000000..557cc0a --- /dev/null +++ b/saiadmin-vue/src/components/sa-chart/index.vue @@ -0,0 +1,38 @@ + + + + + diff --git a/saiadmin-vue/src/components/sa-checkbox/index.vue b/saiadmin-vue/src/components/sa-checkbox/index.vue new file mode 100644 index 0000000..30e1b25 --- /dev/null +++ b/saiadmin-vue/src/components/sa-checkbox/index.vue @@ -0,0 +1,41 @@ + + + diff --git a/saiadmin-vue/src/components/sa-dict/index.vue b/saiadmin-vue/src/components/sa-dict/index.vue new file mode 100644 index 0000000..a442cba --- /dev/null +++ b/saiadmin-vue/src/components/sa-dict/index.vue @@ -0,0 +1,62 @@ + + + diff --git a/saiadmin-vue/src/components/sa-icon-picker/iconify/bi.json b/saiadmin-vue/src/components/sa-icon-picker/iconify/bi.json new file mode 100644 index 0000000..c262019 --- /dev/null +++ b/saiadmin-vue/src/components/sa-icon-picker/iconify/bi.json @@ -0,0 +1 @@ +["bi:0-circle","bi:0-circle-fill","bi:0-square","bi:0-square-fill","bi:1-circle","bi:1-circle-fill","bi:1-square","bi:1-square-fill","bi:2-circle","bi:2-circle-fill","bi:2-square","bi:2-square-fill","bi:3-circle","bi:3-circle-fill","bi:3-square","bi:3-square-fill","bi:4-circle","bi:4-circle-fill","bi:4-square","bi:4-square-fill","bi:5-circle","bi:5-circle-fill","bi:5-square","bi:5-square-fill","bi:6-circle","bi:6-circle-fill","bi:6-square","bi:6-square-fill","bi:7-circle","bi:7-circle-fill","bi:7-square","bi:7-square-fill","bi:8-circle","bi:8-circle-fill","bi:8-square","bi:8-square-fill","bi:9-circle","bi:9-circle-fill","bi:9-square","bi:9-square-fill","bi:activity","bi:airplane","bi:airplane-engines","bi:airplane-engines-fill","bi:airplane-fill","bi:alarm","bi:alarm-fill","bi:alexa","bi:align-bottom","bi:align-center","bi:align-end","bi:align-middle","bi:align-start","bi:align-top","bi:alipay","bi:alphabet","bi:alphabet-uppercase","bi:alt","bi:amazon","bi:amd","bi:android","bi:android2","bi:app","bi:app-indicator","bi:apple","bi:archive","bi:archive-fill","bi:arrow-90deg-down","bi:arrow-90deg-left","bi:arrow-90deg-right","bi:arrow-90deg-up","bi:arrow-bar-down","bi:arrow-bar-left","bi:arrow-bar-right","bi:arrow-bar-up","bi:arrow-clockwise","bi:arrow-counterclockwise","bi:arrow-down","bi:arrow-down-circle","bi:arrow-down-circle-fill","bi:arrow-down-left","bi:arrow-down-left-circle","bi:arrow-down-left-circle-fill","bi:arrow-down-left-square","bi:arrow-down-left-square-fill","bi:arrow-down-right","bi:arrow-down-right-circle","bi:arrow-down-right-circle-fill","bi:arrow-down-right-square","bi:arrow-down-right-square-fill","bi:arrow-down-short","bi:arrow-down-square","bi:arrow-down-square-fill","bi:arrow-down-up","bi:arrow-left","bi:arrow-left-circle","bi:arrow-left-circle-fill","bi:arrow-left-right","bi:arrow-left-short","bi:arrow-left-square","bi:arrow-left-square-fill","bi:arrow-repeat","bi:arrow-return-left","bi:arrow-return-right","bi:arrow-right","bi:arrow-right-circle","bi:arrow-right-circle-fill","bi:arrow-right-short","bi:arrow-right-square","bi:arrow-right-square-fill","bi:arrow-through-heart","bi:arrow-through-heart-fill","bi:arrow-up","bi:arrow-up-circle","bi:arrow-up-circle-fill","bi:arrow-up-left","bi:arrow-up-left-circle","bi:arrow-up-left-circle-fill","bi:arrow-up-left-square","bi:arrow-up-left-square-fill","bi:arrow-up-right","bi:arrow-up-right-circle","bi:arrow-up-right-circle-fill","bi:arrow-up-right-square","bi:arrow-up-right-square-fill","bi:arrow-up-short","bi:arrow-up-square","bi:arrow-up-square-fill","bi:arrows","bi:arrows-angle-contract","bi:arrows-angle-expand","bi:arrows-collapse","bi:arrows-collapse-vertical","bi:arrows-expand","bi:arrows-expand-vertical","bi:arrows-fullscreen","bi:arrows-move","bi:arrows-vertical","bi:aspect-ratio","bi:aspect-ratio-fill","bi:asterisk","bi:at","bi:award","bi:award-fill","bi:back","bi:backpack","bi:backpack-fill","bi:backpack2","bi:backpack2-fill","bi:backpack3","bi:backpack3-fill","bi:backpack4","bi:backpack4-fill","bi:backspace","bi:backspace-fill","bi:backspace-reverse","bi:backspace-reverse-fill","bi:badge-3d","bi:badge-3d-fill","bi:badge-4k","bi:badge-4k-fill","bi:badge-8k","bi:badge-8k-fill","bi:badge-ad","bi:badge-ad-fill","bi:badge-ar","bi:badge-ar-fill","bi:badge-cc","bi:badge-cc-fill","bi:badge-hd","bi:badge-hd-fill","bi:badge-sd","bi:badge-sd-fill","bi:badge-tm","bi:badge-tm-fill","bi:badge-vo","bi:badge-vo-fill","bi:badge-vr","bi:badge-vr-fill","bi:badge-wc","bi:badge-wc-fill","bi:bag","bi:bag-check","bi:bag-check-fill","bi:bag-dash","bi:bag-dash-fill","bi:bag-fill","bi:bag-heart","bi:bag-heart-fill","bi:bag-plus","bi:bag-plus-fill","bi:bag-x","bi:bag-x-fill","bi:balloon","bi:balloon-fill","bi:balloon-heart","bi:balloon-heart-fill","bi:ban","bi:ban-fill","bi:bandaid","bi:bandaid-fill","bi:bank","bi:bank2","bi:bar-chart","bi:bar-chart-fill","bi:bar-chart-line","bi:bar-chart-line-fill","bi:bar-chart-steps","bi:basket","bi:basket-fill","bi:basket2","bi:basket2-fill","bi:basket3","bi:basket3-fill","bi:battery","bi:battery-charging","bi:battery-full","bi:battery-half","bi:behance","bi:bell","bi:bell-fill","bi:bell-slash","bi:bell-slash-fill","bi:bezier","bi:bezier2","bi:bicycle","bi:bing","bi:binoculars","bi:binoculars-fill","bi:blockquote-left","bi:blockquote-right","bi:bluetooth","bi:body-text","bi:book","bi:book-fill","bi:book-half","bi:bookmark","bi:bookmark-check","bi:bookmark-check-fill","bi:bookmark-dash","bi:bookmark-dash-fill","bi:bookmark-fill","bi:bookmark-heart","bi:bookmark-heart-fill","bi:bookmark-plus","bi:bookmark-plus-fill","bi:bookmark-star","bi:bookmark-star-fill","bi:bookmark-x","bi:bookmark-x-fill","bi:bookmarks","bi:bookmarks-fill","bi:bookshelf","bi:boombox","bi:boombox-fill","bi:bootstrap","bi:bootstrap-fill","bi:bootstrap-reboot","bi:border","bi:border-all","bi:border-bottom","bi:border-center","bi:border-inner","bi:border-left","bi:border-middle","bi:border-outer","bi:border-right","bi:border-style","bi:border-top","bi:border-width","bi:bounding-box","bi:bounding-box-circles","bi:box","bi:box-arrow-down","bi:box-arrow-down-left","bi:box-arrow-down-right","bi:box-arrow-in-down","bi:box-arrow-in-down-left","bi:box-arrow-in-down-right","bi:box-arrow-in-left","bi:box-arrow-in-right","bi:box-arrow-in-up","bi:box-arrow-in-up-left","bi:box-arrow-in-up-right","bi:box-arrow-left","bi:box-arrow-right","bi:box-arrow-up","bi:box-arrow-up-left","bi:box-arrow-up-right","bi:box-fill","bi:box-seam","bi:box-seam-fill","bi:box2","bi:box2-fill","bi:box2-heart","bi:box2-heart-fill","bi:boxes","bi:braces","bi:braces-asterisk","bi:bricks","bi:briefcase","bi:briefcase-fill","bi:brightness-alt-high","bi:brightness-alt-high-fill","bi:brightness-alt-low","bi:brightness-alt-low-fill","bi:brightness-high","bi:brightness-high-fill","bi:brightness-low","bi:brightness-low-fill","bi:brilliance","bi:broadcast","bi:broadcast-pin","bi:browser-chrome","bi:browser-edge","bi:browser-firefox","bi:browser-safari","bi:brush","bi:brush-fill","bi:bucket","bi:bucket-fill","bi:bug","bi:bug-fill","bi:building","bi:building-add","bi:building-check","bi:building-dash","bi:building-down","bi:building-exclamation","bi:building-fill","bi:building-fill-add","bi:building-fill-check","bi:building-fill-dash","bi:building-fill-down","bi:building-fill-exclamation","bi:building-fill-gear","bi:building-fill-lock","bi:building-fill-slash","bi:building-fill-up","bi:building-fill-x","bi:building-gear","bi:building-lock","bi:building-slash","bi:building-up","bi:building-x","bi:buildings","bi:buildings-fill","bi:bullseye","bi:bus-front","bi:bus-front-fill","bi:c-circle","bi:c-circle-fill","bi:c-square","bi:c-square-fill","bi:cake","bi:cake-fill","bi:cake2","bi:cake2-fill","bi:calculator","bi:calculator-fill","bi:calendar","bi:calendar-check","bi:calendar-check-fill","bi:calendar-date","bi:calendar-date-fill","bi:calendar-day","bi:calendar-day-fill","bi:calendar-event","bi:calendar-event-fill","bi:calendar-fill","bi:calendar-heart","bi:calendar-heart-fill","bi:calendar-minus","bi:calendar-minus-fill","bi:calendar-month","bi:calendar-month-fill","bi:calendar-plus","bi:calendar-plus-fill","bi:calendar-range","bi:calendar-range-fill","bi:calendar-week","bi:calendar-week-fill","bi:calendar-x","bi:calendar-x-fill","bi:calendar2","bi:calendar2-check","bi:calendar2-check-fill","bi:calendar2-date","bi:calendar2-date-fill","bi:calendar2-day","bi:calendar2-day-fill","bi:calendar2-event","bi:calendar2-event-fill","bi:calendar2-fill","bi:calendar2-heart","bi:calendar2-heart-fill","bi:calendar2-minus","bi:calendar2-minus-fill","bi:calendar2-month","bi:calendar2-month-fill","bi:calendar2-plus","bi:calendar2-plus-fill","bi:calendar2-range","bi:calendar2-range-fill","bi:calendar2-week","bi:calendar2-week-fill","bi:calendar2-x","bi:calendar2-x-fill","bi:calendar3","bi:calendar3-event","bi:calendar3-event-fill","bi:calendar3-fill","bi:calendar3-range","bi:calendar3-range-fill","bi:calendar3-week","bi:calendar3-week-fill","bi:calendar4","bi:calendar4-event","bi:calendar4-range","bi:calendar4-week","bi:camera","bi:camera-fill","bi:camera-reels","bi:camera-reels-fill","bi:camera-video","bi:camera-video-fill","bi:camera-video-off","bi:camera-video-off-fill","bi:camera2","bi:capslock","bi:capslock-fill","bi:capsule","bi:capsule-pill","bi:car-front","bi:car-front-fill","bi:card-checklist","bi:card-heading","bi:card-image","bi:card-list","bi:card-text","bi:caret-down","bi:caret-down-fill","bi:caret-down-square","bi:caret-down-square-fill","bi:caret-left","bi:caret-left-fill","bi:caret-left-square","bi:caret-left-square-fill","bi:caret-right","bi:caret-right-fill","bi:caret-right-square","bi:caret-right-square-fill","bi:caret-up","bi:caret-up-fill","bi:caret-up-square","bi:caret-up-square-fill","bi:cart","bi:cart-check","bi:cart-check-fill","bi:cart-dash","bi:cart-dash-fill","bi:cart-fill","bi:cart-plus","bi:cart-plus-fill","bi:cart-x","bi:cart-x-fill","bi:cart2","bi:cart3","bi:cart4","bi:cash","bi:cash-coin","bi:cash-stack","bi:cassette","bi:cassette-fill","bi:cast","bi:cc-circle","bi:cc-circle-fill","bi:cc-square","bi:cc-square-fill","bi:chat","bi:chat-dots","bi:chat-dots-fill","bi:chat-fill","bi:chat-heart","bi:chat-heart-fill","bi:chat-left","bi:chat-left-dots","bi:chat-left-dots-fill","bi:chat-left-fill","bi:chat-left-heart","bi:chat-left-heart-fill","bi:chat-left-quote","bi:chat-left-quote-fill","bi:chat-left-text","bi:chat-left-text-fill","bi:chat-quote","bi:chat-quote-fill","bi:chat-right","bi:chat-right-dots","bi:chat-right-dots-fill","bi:chat-right-fill","bi:chat-right-heart","bi:chat-right-heart-fill","bi:chat-right-quote","bi:chat-right-quote-fill","bi:chat-right-text","bi:chat-right-text-fill","bi:chat-square","bi:chat-square-dots","bi:chat-square-dots-fill","bi:chat-square-fill","bi:chat-square-heart","bi:chat-square-heart-fill","bi:chat-square-quote","bi:chat-square-quote-fill","bi:chat-square-text","bi:chat-square-text-fill","bi:chat-text","bi:chat-text-fill","bi:check","bi:check-all","bi:check-circle","bi:check-circle-fill","bi:check-lg","bi:check-square","bi:check-square-fill","bi:check2","bi:check2-all","bi:check2-circle","bi:check2-square","bi:chevron-bar-contract","bi:chevron-bar-down","bi:chevron-bar-expand","bi:chevron-bar-left","bi:chevron-bar-right","bi:chevron-bar-up","bi:chevron-compact-down","bi:chevron-compact-left","bi:chevron-compact-right","bi:chevron-compact-up","bi:chevron-contract","bi:chevron-double-down","bi:chevron-double-left","bi:chevron-double-right","bi:chevron-double-up","bi:chevron-down","bi:chevron-expand","bi:chevron-left","bi:chevron-right","bi:chevron-up","bi:circle","bi:circle-fill","bi:circle-half","bi:circle-square","bi:clipboard","bi:clipboard-check","bi:clipboard-check-fill","bi:clipboard-data","bi:clipboard-data-fill","bi:clipboard-fill","bi:clipboard-heart","bi:clipboard-heart-fill","bi:clipboard-minus","bi:clipboard-minus-fill","bi:clipboard-plus","bi:clipboard-plus-fill","bi:clipboard-pulse","bi:clipboard-x","bi:clipboard-x-fill","bi:clipboard2","bi:clipboard2-check","bi:clipboard2-check-fill","bi:clipboard2-data","bi:clipboard2-data-fill","bi:clipboard2-fill","bi:clipboard2-heart","bi:clipboard2-heart-fill","bi:clipboard2-minus","bi:clipboard2-minus-fill","bi:clipboard2-plus","bi:clipboard2-plus-fill","bi:clipboard2-pulse","bi:clipboard2-pulse-fill","bi:clipboard2-x","bi:clipboard2-x-fill","bi:clock","bi:clock-fill","bi:clock-history","bi:cloud","bi:cloud-arrow-down","bi:cloud-arrow-down-fill","bi:cloud-arrow-up","bi:cloud-arrow-up-fill","bi:cloud-check","bi:cloud-check-fill","bi:cloud-download","bi:cloud-download-fill","bi:cloud-drizzle","bi:cloud-drizzle-fill","bi:cloud-fill","bi:cloud-fog","bi:cloud-fog-fill","bi:cloud-fog2","bi:cloud-fog2-fill","bi:cloud-hail","bi:cloud-hail-fill","bi:cloud-haze","bi:cloud-haze-fill","bi:cloud-haze2","bi:cloud-haze2-fill","bi:cloud-lightning","bi:cloud-lightning-fill","bi:cloud-lightning-rain","bi:cloud-lightning-rain-fill","bi:cloud-minus","bi:cloud-minus-fill","bi:cloud-moon","bi:cloud-moon-fill","bi:cloud-plus","bi:cloud-plus-fill","bi:cloud-rain","bi:cloud-rain-fill","bi:cloud-rain-heavy","bi:cloud-rain-heavy-fill","bi:cloud-slash","bi:cloud-slash-fill","bi:cloud-sleet","bi:cloud-sleet-fill","bi:cloud-snow","bi:cloud-snow-fill","bi:cloud-sun","bi:cloud-sun-fill","bi:cloud-upload","bi:cloud-upload-fill","bi:clouds","bi:clouds-fill","bi:cloudy","bi:cloudy-fill","bi:code","bi:code-slash","bi:code-square","bi:coin","bi:collection","bi:collection-fill","bi:collection-play","bi:collection-play-fill","bi:columns","bi:columns-gap","bi:command","bi:compass","bi:compass-fill","bi:cone","bi:cone-striped","bi:controller","bi:cookie","bi:copy","bi:cpu","bi:cpu-fill","bi:credit-card","bi:credit-card-2-back","bi:credit-card-2-back-fill","bi:credit-card-2-front","bi:credit-card-2-front-fill","bi:credit-card-fill","bi:crop","bi:crosshair","bi:crosshair2","bi:cup","bi:cup-fill","bi:cup-hot","bi:cup-hot-fill","bi:cup-straw","bi:currency-bitcoin","bi:currency-dollar","bi:currency-euro","bi:currency-exchange","bi:currency-pound","bi:currency-rupee","bi:currency-yen","bi:cursor","bi:cursor-fill","bi:cursor-text","bi:dash","bi:dash-circle","bi:dash-circle-dotted","bi:dash-circle-fill","bi:dash-lg","bi:dash-square","bi:dash-square-dotted","bi:dash-square-fill","bi:database","bi:database-add","bi:database-check","bi:database-dash","bi:database-down","bi:database-exclamation","bi:database-fill","bi:database-fill-add","bi:database-fill-check","bi:database-fill-dash","bi:database-fill-down","bi:database-fill-exclamation","bi:database-fill-gear","bi:database-fill-lock","bi:database-fill-slash","bi:database-fill-up","bi:database-fill-x","bi:database-gear","bi:database-lock","bi:database-slash","bi:database-up","bi:database-x","bi:device-hdd","bi:device-hdd-fill","bi:device-ssd","bi:device-ssd-fill","bi:diagram-2","bi:diagram-2-fill","bi:diagram-3","bi:diagram-3-fill","bi:diamond","bi:diamond-fill","bi:diamond-half","bi:dice-1","bi:dice-1-fill","bi:dice-2","bi:dice-2-fill","bi:dice-3","bi:dice-3-fill","bi:dice-4","bi:dice-4-fill","bi:dice-5","bi:dice-5-fill","bi:dice-6","bi:dice-6-fill","bi:disc","bi:disc-fill","bi:discord","bi:display","bi:display-fill","bi:displayport","bi:displayport-fill","bi:distribute-horizontal","bi:distribute-vertical","bi:door-closed","bi:door-closed-fill","bi:door-open","bi:door-open-fill","bi:dot","bi:download","bi:dpad","bi:dpad-fill","bi:dribbble","bi:dropbox","bi:droplet","bi:droplet-fill","bi:droplet-half","bi:duffle","bi:duffle-fill","bi:ear","bi:ear-fill","bi:earbuds","bi:easel","bi:easel-fill","bi:easel2","bi:easel2-fill","bi:easel3","bi:easel3-fill","bi:egg","bi:egg-fill","bi:egg-fried","bi:eject","bi:eject-fill","bi:emoji-angry","bi:emoji-angry-fill","bi:emoji-astonished","bi:emoji-astonished-fill","bi:emoji-dizzy","bi:emoji-dizzy-fill","bi:emoji-expressionless","bi:emoji-expressionless-fill","bi:emoji-frown","bi:emoji-frown-fill","bi:emoji-grimace","bi:emoji-grimace-fill","bi:emoji-grin","bi:emoji-grin-fill","bi:emoji-heart-eyes","bi:emoji-heart-eyes-fill","bi:emoji-kiss","bi:emoji-kiss-fill","bi:emoji-laughing","bi:emoji-laughing-fill","bi:emoji-neutral","bi:emoji-neutral-fill","bi:emoji-smile","bi:emoji-smile-fill","bi:emoji-smile-upside-down","bi:emoji-smile-upside-down-fill","bi:emoji-sunglasses","bi:emoji-sunglasses-fill","bi:emoji-surprise","bi:emoji-surprise-fill","bi:emoji-tear","bi:emoji-tear-fill","bi:emoji-wink","bi:emoji-wink-fill","bi:envelope","bi:envelope-arrow-down","bi:envelope-arrow-down-fill","bi:envelope-arrow-up","bi:envelope-arrow-up-fill","bi:envelope-at","bi:envelope-at-fill","bi:envelope-check","bi:envelope-check-fill","bi:envelope-dash","bi:envelope-dash-fill","bi:envelope-exclamation","bi:envelope-exclamation-fill","bi:envelope-fill","bi:envelope-heart","bi:envelope-heart-fill","bi:envelope-open","bi:envelope-open-fill","bi:envelope-open-heart","bi:envelope-open-heart-fill","bi:envelope-paper","bi:envelope-paper-fill","bi:envelope-paper-heart","bi:envelope-paper-heart-fill","bi:envelope-plus","bi:envelope-plus-fill","bi:envelope-slash","bi:envelope-slash-fill","bi:envelope-x","bi:envelope-x-fill","bi:eraser","bi:eraser-fill","bi:escape","bi:ethernet","bi:ev-front","bi:ev-front-fill","bi:ev-station","bi:ev-station-fill","bi:exclamation","bi:exclamation-circle","bi:exclamation-circle-fill","bi:exclamation-diamond","bi:exclamation-diamond-fill","bi:exclamation-lg","bi:exclamation-octagon","bi:exclamation-octagon-fill","bi:exclamation-square","bi:exclamation-square-fill","bi:exclamation-triangle","bi:exclamation-triangle-fill","bi:exclude","bi:explicit","bi:explicit-fill","bi:exposure","bi:eye","bi:eye-fill","bi:eye-slash","bi:eye-slash-fill","bi:eyedropper","bi:eyeglasses","bi:facebook","bi:fan","bi:fast-forward","bi:fast-forward-btn","bi:fast-forward-btn-fill","bi:fast-forward-circle","bi:fast-forward-circle-fill","bi:fast-forward-fill","bi:feather","bi:feather2","bi:file","bi:file-arrow-down","bi:file-arrow-down-fill","bi:file-arrow-up","bi:file-arrow-up-fill","bi:file-bar-graph","bi:file-bar-graph-fill","bi:file-binary","bi:file-binary-fill","bi:file-break","bi:file-break-fill","bi:file-check","bi:file-check-fill","bi:file-code","bi:file-code-fill","bi:file-diff","bi:file-diff-fill","bi:file-earmark","bi:file-earmark-arrow-down","bi:file-earmark-arrow-down-fill","bi:file-earmark-arrow-up","bi:file-earmark-arrow-up-fill","bi:file-earmark-bar-graph","bi:file-earmark-bar-graph-fill","bi:file-earmark-binary","bi:file-earmark-binary-fill","bi:file-earmark-break","bi:file-earmark-break-fill","bi:file-earmark-check","bi:file-earmark-check-fill","bi:file-earmark-code","bi:file-earmark-code-fill","bi:file-earmark-diff","bi:file-earmark-diff-fill","bi:file-earmark-easel","bi:file-earmark-easel-fill","bi:file-earmark-excel","bi:file-earmark-excel-fill","bi:file-earmark-fill","bi:file-earmark-font","bi:file-earmark-font-fill","bi:file-earmark-image","bi:file-earmark-image-fill","bi:file-earmark-lock","bi:file-earmark-lock-fill","bi:file-earmark-lock2","bi:file-earmark-lock2-fill","bi:file-earmark-medical","bi:file-earmark-medical-fill","bi:file-earmark-minus","bi:file-earmark-minus-fill","bi:file-earmark-music","bi:file-earmark-music-fill","bi:file-earmark-pdf","bi:file-earmark-pdf-fill","bi:file-earmark-person","bi:file-earmark-person-fill","bi:file-earmark-play","bi:file-earmark-play-fill","bi:file-earmark-plus","bi:file-earmark-plus-fill","bi:file-earmark-post","bi:file-earmark-post-fill","bi:file-earmark-ppt","bi:file-earmark-ppt-fill","bi:file-earmark-richtext","bi:file-earmark-richtext-fill","bi:file-earmark-ruled","bi:file-earmark-ruled-fill","bi:file-earmark-slides","bi:file-earmark-slides-fill","bi:file-earmark-spreadsheet","bi:file-earmark-spreadsheet-fill","bi:file-earmark-text","bi:file-earmark-text-fill","bi:file-earmark-word","bi:file-earmark-word-fill","bi:file-earmark-x","bi:file-earmark-x-fill","bi:file-earmark-zip","bi:file-earmark-zip-fill","bi:file-easel","bi:file-easel-fill","bi:file-excel","bi:file-excel-fill","bi:file-fill","bi:file-font","bi:file-font-fill","bi:file-image","bi:file-image-fill","bi:file-lock","bi:file-lock-fill","bi:file-lock2","bi:file-lock2-fill","bi:file-medical","bi:file-medical-fill","bi:file-minus","bi:file-minus-fill","bi:file-music","bi:file-music-fill","bi:file-pdf","bi:file-pdf-fill","bi:file-person","bi:file-person-fill","bi:file-play","bi:file-play-fill","bi:file-plus","bi:file-plus-fill","bi:file-post","bi:file-post-fill","bi:file-ppt","bi:file-ppt-fill","bi:file-richtext","bi:file-richtext-fill","bi:file-ruled","bi:file-ruled-fill","bi:file-slides","bi:file-slides-fill","bi:file-spreadsheet","bi:file-spreadsheet-fill","bi:file-text","bi:file-text-fill","bi:file-word","bi:file-word-fill","bi:file-x","bi:file-x-fill","bi:file-zip","bi:file-zip-fill","bi:files","bi:files-alt","bi:filetype-aac","bi:filetype-ai","bi:filetype-bmp","bi:filetype-cs","bi:filetype-css","bi:filetype-csv","bi:filetype-doc","bi:filetype-docx","bi:filetype-exe","bi:filetype-gif","bi:filetype-heic","bi:filetype-html","bi:filetype-java","bi:filetype-jpg","bi:filetype-js","bi:filetype-json","bi:filetype-jsx","bi:filetype-key","bi:filetype-m4p","bi:filetype-md","bi:filetype-mdx","bi:filetype-mov","bi:filetype-mp3","bi:filetype-mp4","bi:filetype-otf","bi:filetype-pdf","bi:filetype-php","bi:filetype-png","bi:filetype-ppt","bi:filetype-pptx","bi:filetype-psd","bi:filetype-py","bi:filetype-raw","bi:filetype-rb","bi:filetype-sass","bi:filetype-scss","bi:filetype-sh","bi:filetype-sql","bi:filetype-svg","bi:filetype-tiff","bi:filetype-tsx","bi:filetype-ttf","bi:filetype-txt","bi:filetype-wav","bi:filetype-woff","bi:filetype-xls","bi:filetype-xlsx","bi:filetype-xml","bi:filetype-yml","bi:film","bi:filter","bi:filter-circle","bi:filter-circle-fill","bi:filter-left","bi:filter-right","bi:filter-square","bi:filter-square-fill","bi:fingerprint","bi:fire","bi:flag","bi:flag-fill","bi:floppy","bi:floppy-fill","bi:floppy2","bi:floppy2-fill","bi:flower1","bi:flower2","bi:flower3","bi:folder","bi:folder-check","bi:folder-fill","bi:folder-minus","bi:folder-plus","bi:folder-symlink","bi:folder-symlink-fill","bi:folder-x","bi:folder2","bi:folder2-open","bi:fonts","bi:forward","bi:forward-fill","bi:front","bi:fuel-pump","bi:fuel-pump-diesel","bi:fuel-pump-diesel-fill","bi:fuel-pump-fill","bi:fullscreen","bi:fullscreen-exit","bi:funnel","bi:funnel-fill","bi:gear","bi:gear-fill","bi:gear-wide","bi:gear-wide-connected","bi:gem","bi:gender-ambiguous","bi:gender-female","bi:gender-male","bi:gender-neuter","bi:gender-trans","bi:geo","bi:geo-alt","bi:geo-alt-fill","bi:geo-fill","bi:gift","bi:gift-fill","bi:git","bi:github","bi:gitlab","bi:globe","bi:globe-americas","bi:globe-asia-australia","bi:globe-central-south-asia","bi:globe-europe-africa","bi:globe2","bi:google","bi:google-play","bi:gpu-card","bi:graph-down","bi:graph-down-arrow","bi:graph-up","bi:graph-up-arrow","bi:grid","bi:grid-1x2","bi:grid-1x2-fill","bi:grid-3x2","bi:grid-3x2-gap","bi:grid-3x2-gap-fill","bi:grid-3x3","bi:grid-3x3-gap","bi:grid-3x3-gap-fill","bi:grid-fill","bi:grip-horizontal","bi:grip-vertical","bi:h-circle","bi:h-circle-fill","bi:h-square","bi:h-square-fill","bi:hammer","bi:hand-index","bi:hand-index-fill","bi:hand-index-thumb","bi:hand-index-thumb-fill","bi:hand-thumbs-down","bi:hand-thumbs-down-fill","bi:hand-thumbs-up","bi:hand-thumbs-up-fill","bi:handbag","bi:handbag-fill","bi:hash","bi:hdd","bi:hdd-fill","bi:hdd-network","bi:hdd-network-fill","bi:hdd-rack","bi:hdd-rack-fill","bi:hdd-stack","bi:hdd-stack-fill","bi:hdmi","bi:hdmi-fill","bi:headphones","bi:headset","bi:headset-vr","bi:heart","bi:heart-arrow","bi:heart-fill","bi:heart-half","bi:heart-pulse","bi:heart-pulse-fill","bi:heartbreak","bi:heartbreak-fill","bi:hearts","bi:heptagon","bi:heptagon-fill","bi:heptagon-half","bi:hexagon","bi:hexagon-fill","bi:hexagon-half","bi:highlighter","bi:highlights","bi:hospital","bi:hospital-fill","bi:hourglass","bi:hourglass-bottom","bi:hourglass-split","bi:hourglass-top","bi:house","bi:house-add","bi:house-add-fill","bi:house-check","bi:house-check-fill","bi:house-dash","bi:house-dash-fill","bi:house-door","bi:house-door-fill","bi:house-down","bi:house-down-fill","bi:house-exclamation","bi:house-exclamation-fill","bi:house-fill","bi:house-gear","bi:house-gear-fill","bi:house-heart","bi:house-heart-fill","bi:house-lock","bi:house-lock-fill","bi:house-slash","bi:house-slash-fill","bi:house-up","bi:house-up-fill","bi:house-x","bi:house-x-fill","bi:houses","bi:houses-fill","bi:hr","bi:hurricane","bi:hypnotize","bi:image","bi:image-alt","bi:image-fill","bi:images","bi:inbox","bi:inbox-fill","bi:inboxes","bi:inboxes-fill","bi:incognito","bi:indent","bi:infinity","bi:info","bi:info-circle","bi:info-circle-fill","bi:info-lg","bi:info-square","bi:info-square-fill","bi:input-cursor","bi:input-cursor-text","bi:instagram","bi:intersect","bi:journal","bi:journal-album","bi:journal-arrow-down","bi:journal-arrow-up","bi:journal-bookmark","bi:journal-bookmark-fill","bi:journal-check","bi:journal-code","bi:journal-medical","bi:journal-minus","bi:journal-plus","bi:journal-richtext","bi:journal-text","bi:journal-x","bi:journals","bi:joystick","bi:justify","bi:justify-left","bi:justify-right","bi:kanban","bi:kanban-fill","bi:key","bi:key-fill","bi:keyboard","bi:keyboard-fill","bi:ladder","bi:lamp","bi:lamp-fill","bi:laptop","bi:laptop-fill","bi:layer-backward","bi:layer-forward","bi:layers","bi:layers-fill","bi:layers-half","bi:layout-sidebar","bi:layout-sidebar-inset","bi:layout-sidebar-inset-reverse","bi:layout-sidebar-reverse","bi:layout-split","bi:layout-text-sidebar","bi:layout-text-sidebar-reverse","bi:layout-text-window","bi:layout-text-window-reverse","bi:layout-three-columns","bi:layout-wtf","bi:life-preserver","bi:lightbulb","bi:lightbulb-fill","bi:lightbulb-off","bi:lightbulb-off-fill","bi:lightning","bi:lightning-charge","bi:lightning-charge-fill","bi:lightning-fill","bi:line","bi:link","bi:link-45deg","bi:linkedin","bi:list","bi:list-check","bi:list-columns","bi:list-columns-reverse","bi:list-nested","bi:list-ol","bi:list-stars","bi:list-task","bi:list-ul","bi:lock","bi:lock-fill","bi:luggage","bi:luggage-fill","bi:lungs","bi:lungs-fill","bi:magic","bi:magnet","bi:magnet-fill","bi:mailbox","bi:mailbox-flag","bi:mailbox2","bi:mailbox2-flag","bi:map","bi:map-fill","bi:markdown","bi:markdown-fill","bi:marker-tip","bi:mask","bi:mastodon","bi:medium","bi:megaphone","bi:megaphone-fill","bi:memory","bi:menu-app","bi:menu-app-fill","bi:menu-button","bi:menu-button-fill","bi:menu-button-wide","bi:menu-button-wide-fill","bi:menu-down","bi:menu-up","bi:messenger","bi:meta","bi:mic","bi:mic-fill","bi:mic-mute","bi:mic-mute-fill","bi:microsoft","bi:microsoft-teams","bi:minecart","bi:minecart-loaded","bi:modem","bi:modem-fill","bi:moisture","bi:moon","bi:moon-fill","bi:moon-stars","bi:moon-stars-fill","bi:mortarboard","bi:mortarboard-fill","bi:motherboard","bi:motherboard-fill","bi:mouse","bi:mouse-fill","bi:mouse2","bi:mouse2-fill","bi:mouse3","bi:mouse3-fill","bi:music-note","bi:music-note-beamed","bi:music-note-list","bi:music-player","bi:music-player-fill","bi:newspaper","bi:nintendo-switch","bi:node-minus","bi:node-minus-fill","bi:node-plus","bi:node-plus-fill","bi:noise-reduction","bi:nut","bi:nut-fill","bi:nvidia","bi:nvme","bi:nvme-fill","bi:octagon","bi:octagon-fill","bi:octagon-half","bi:opencollective","bi:optical-audio","bi:optical-audio-fill","bi:option","bi:outlet","bi:p-circle","bi:p-circle-fill","bi:p-square","bi:p-square-fill","bi:paint-bucket","bi:palette","bi:palette-fill","bi:palette2","bi:paperclip","bi:paragraph","bi:pass","bi:pass-fill","bi:passport","bi:passport-fill","bi:patch-check","bi:patch-check-fill","bi:patch-exclamation","bi:patch-exclamation-fill","bi:patch-minus","bi:patch-minus-fill","bi:patch-plus","bi:patch-plus-fill","bi:patch-question","bi:patch-question-fill","bi:pause","bi:pause-btn","bi:pause-btn-fill","bi:pause-circle","bi:pause-circle-fill","bi:pause-fill","bi:paypal","bi:pc","bi:pc-display","bi:pc-display-horizontal","bi:pc-horizontal","bi:pci-card","bi:pci-card-network","bi:pci-card-sound","bi:peace","bi:peace-fill","bi:pen","bi:pen-fill","bi:pencil","bi:pencil-fill","bi:pencil-square","bi:pentagon","bi:pentagon-fill","bi:pentagon-half","bi:people","bi:people-fill","bi:percent","bi:person","bi:person-add","bi:person-arms-up","bi:person-badge","bi:person-badge-fill","bi:person-bounding-box","bi:person-check","bi:person-check-fill","bi:person-circle","bi:person-dash","bi:person-dash-fill","bi:person-down","bi:person-exclamation","bi:person-fill","bi:person-fill-add","bi:person-fill-check","bi:person-fill-dash","bi:person-fill-down","bi:person-fill-exclamation","bi:person-fill-gear","bi:person-fill-lock","bi:person-fill-slash","bi:person-fill-up","bi:person-fill-x","bi:person-gear","bi:person-heart","bi:person-hearts","bi:person-lines-fill","bi:person-lock","bi:person-plus","bi:person-plus-fill","bi:person-raised-hand","bi:person-rolodex","bi:person-slash","bi:person-square","bi:person-standing","bi:person-standing-dress","bi:person-up","bi:person-vcard","bi:person-vcard-fill","bi:person-video","bi:person-video2","bi:person-video3","bi:person-walking","bi:person-wheelchair","bi:person-workspace","bi:person-x","bi:person-x-fill","bi:phone","bi:phone-fill","bi:phone-flip","bi:phone-landscape","bi:phone-landscape-fill","bi:phone-vibrate","bi:phone-vibrate-fill","bi:pie-chart","bi:pie-chart-fill","bi:piggy-bank","bi:piggy-bank-fill","bi:pin","bi:pin-angle","bi:pin-angle-fill","bi:pin-fill","bi:pin-map","bi:pin-map-fill","bi:pinterest","bi:pip","bi:pip-fill","bi:play","bi:play-btn","bi:play-btn-fill","bi:play-circle","bi:play-circle-fill","bi:play-fill","bi:playstation","bi:plug","bi:plug-fill","bi:plugin","bi:plus","bi:plus-circle","bi:plus-circle-dotted","bi:plus-circle-fill","bi:plus-lg","bi:plus-slash-minus","bi:plus-square","bi:plus-square-dotted","bi:plus-square-fill","bi:postage","bi:postage-fill","bi:postage-heart","bi:postage-heart-fill","bi:postcard","bi:postcard-fill","bi:postcard-heart","bi:postcard-heart-fill","bi:power","bi:prescription","bi:prescription2","bi:printer","bi:printer-fill","bi:projector","bi:projector-fill","bi:puzzle","bi:puzzle-fill","bi:qr-code","bi:qr-code-scan","bi:question","bi:question-circle","bi:question-circle-fill","bi:question-diamond","bi:question-diamond-fill","bi:question-lg","bi:question-octagon","bi:question-octagon-fill","bi:question-square","bi:question-square-fill","bi:quora","bi:quote","bi:r-circle","bi:r-circle-fill","bi:r-square","bi:r-square-fill","bi:radar","bi:radioactive","bi:rainbow","bi:receipt","bi:receipt-cutoff","bi:reception-0","bi:reception-1","bi:reception-2","bi:reception-3","bi:reception-4","bi:record","bi:record-btn","bi:record-btn-fill","bi:record-circle","bi:record-circle-fill","bi:record-fill","bi:record2","bi:record2-fill","bi:recycle","bi:reddit","bi:regex","bi:repeat","bi:repeat-1","bi:reply","bi:reply-all","bi:reply-all-fill","bi:reply-fill","bi:rewind","bi:rewind-btn","bi:rewind-btn-fill","bi:rewind-circle","bi:rewind-circle-fill","bi:rewind-fill","bi:robot","bi:rocket","bi:rocket-fill","bi:rocket-takeoff","bi:rocket-takeoff-fill","bi:router","bi:router-fill","bi:rss","bi:rss-fill","bi:rulers","bi:safe","bi:safe-fill","bi:safe2","bi:safe2-fill","bi:save","bi:save-fill","bi:save2","bi:save2-fill","bi:scissors","bi:scooter","bi:screwdriver","bi:sd-card","bi:sd-card-fill","bi:search","bi:search-heart","bi:search-heart-fill","bi:segmented-nav","bi:send","bi:send-arrow-down","bi:send-arrow-down-fill","bi:send-arrow-up","bi:send-arrow-up-fill","bi:send-check","bi:send-check-fill","bi:send-dash","bi:send-dash-fill","bi:send-exclamation","bi:send-exclamation-fill","bi:send-fill","bi:send-plus","bi:send-plus-fill","bi:send-slash","bi:send-slash-fill","bi:send-x","bi:send-x-fill","bi:server","bi:shadows","bi:share","bi:share-fill","bi:shield","bi:shield-check","bi:shield-exclamation","bi:shield-fill","bi:shield-fill-check","bi:shield-fill-exclamation","bi:shield-fill-minus","bi:shield-fill-plus","bi:shield-fill-x","bi:shield-lock","bi:shield-lock-fill","bi:shield-minus","bi:shield-plus","bi:shield-shaded","bi:shield-slash","bi:shield-slash-fill","bi:shield-x","bi:shift","bi:shift-fill","bi:shop","bi:shop-window","bi:shuffle","bi:sign-dead-end","bi:sign-dead-end-fill","bi:sign-do-not-enter","bi:sign-do-not-enter-fill","bi:sign-intersection","bi:sign-intersection-fill","bi:sign-intersection-side","bi:sign-intersection-side-fill","bi:sign-intersection-t","bi:sign-intersection-t-fill","bi:sign-intersection-y","bi:sign-intersection-y-fill","bi:sign-merge-left","bi:sign-merge-left-fill","bi:sign-merge-right","bi:sign-merge-right-fill","bi:sign-no-left-turn","bi:sign-no-left-turn-fill","bi:sign-no-parking","bi:sign-no-parking-fill","bi:sign-no-right-turn","bi:sign-no-right-turn-fill","bi:sign-railroad","bi:sign-railroad-fill","bi:sign-stop","bi:sign-stop-fill","bi:sign-stop-lights","bi:sign-stop-lights-fill","bi:sign-turn-left","bi:sign-turn-left-fill","bi:sign-turn-right","bi:sign-turn-right-fill","bi:sign-turn-slight-left","bi:sign-turn-slight-left-fill","bi:sign-turn-slight-right","bi:sign-turn-slight-right-fill","bi:sign-yield","bi:sign-yield-fill","bi:signal","bi:signpost","bi:signpost-2","bi:signpost-2-fill","bi:signpost-fill","bi:signpost-split","bi:signpost-split-fill","bi:sim","bi:sim-fill","bi:sim-slash","bi:sim-slash-fill","bi:sina-weibo","bi:skip-backward","bi:skip-backward-btn","bi:skip-backward-btn-fill","bi:skip-backward-circle","bi:skip-backward-circle-fill","bi:skip-backward-fill","bi:skip-end","bi:skip-end-btn","bi:skip-end-btn-fill","bi:skip-end-circle","bi:skip-end-circle-fill","bi:skip-end-fill","bi:skip-forward","bi:skip-forward-btn","bi:skip-forward-btn-fill","bi:skip-forward-circle","bi:skip-forward-circle-fill","bi:skip-forward-fill","bi:skip-start","bi:skip-start-btn","bi:skip-start-btn-fill","bi:skip-start-circle","bi:skip-start-circle-fill","bi:skip-start-fill","bi:skype","bi:slack","bi:slash","bi:slash-circle","bi:slash-circle-fill","bi:slash-lg","bi:slash-square","bi:slash-square-fill","bi:sliders","bi:sliders2","bi:sliders2-vertical","bi:smartwatch","bi:snapchat","bi:snow","bi:snow2","bi:snow3","bi:sort-alpha-down","bi:sort-alpha-down-alt","bi:sort-alpha-up","bi:sort-alpha-up-alt","bi:sort-down","bi:sort-down-alt","bi:sort-numeric-down","bi:sort-numeric-down-alt","bi:sort-numeric-up","bi:sort-numeric-up-alt","bi:sort-up","bi:sort-up-alt","bi:soundwave","bi:sourceforge","bi:speaker","bi:speaker-fill","bi:speedometer","bi:speedometer2","bi:spellcheck","bi:spotify","bi:square","bi:square-fill","bi:square-half","bi:stack","bi:stack-overflow","bi:star","bi:star-fill","bi:star-half","bi:stars","bi:steam","bi:stickies","bi:stickies-fill","bi:sticky","bi:sticky-fill","bi:stop","bi:stop-btn","bi:stop-btn-fill","bi:stop-circle","bi:stop-circle-fill","bi:stop-fill","bi:stoplights","bi:stoplights-fill","bi:stopwatch","bi:stopwatch-fill","bi:strava","bi:stripe","bi:subscript","bi:substack","bi:subtract","bi:suit-club","bi:suit-club-fill","bi:suit-diamond","bi:suit-diamond-fill","bi:suit-heart","bi:suit-heart-fill","bi:suit-spade","bi:suit-spade-fill","bi:suitcase","bi:suitcase-fill","bi:suitcase-lg","bi:suitcase-lg-fill","bi:suitcase2","bi:suitcase2-fill","bi:sun","bi:sun-fill","bi:sunglasses","bi:sunrise","bi:sunrise-fill","bi:sunset","bi:sunset-fill","bi:superscript","bi:symmetry-horizontal","bi:symmetry-vertical","bi:table","bi:tablet","bi:tablet-fill","bi:tablet-landscape","bi:tablet-landscape-fill","bi:tag","bi:tag-fill","bi:tags","bi:tags-fill","bi:taxi-front","bi:taxi-front-fill","bi:telegram","bi:telephone","bi:telephone-fill","bi:telephone-forward","bi:telephone-forward-fill","bi:telephone-inbound","bi:telephone-inbound-fill","bi:telephone-minus","bi:telephone-minus-fill","bi:telephone-outbound","bi:telephone-outbound-fill","bi:telephone-plus","bi:telephone-plus-fill","bi:telephone-x","bi:telephone-x-fill","bi:tencent-qq","bi:terminal","bi:terminal-dash","bi:terminal-fill","bi:terminal-plus","bi:terminal-split","bi:terminal-x","bi:text-center","bi:text-indent-left","bi:text-indent-right","bi:text-left","bi:text-paragraph","bi:text-right","bi:text-wrap","bi:textarea","bi:textarea-resize","bi:textarea-t","bi:thermometer","bi:thermometer-half","bi:thermometer-high","bi:thermometer-low","bi:thermometer-snow","bi:thermometer-sun","bi:threads","bi:threads-fill","bi:three-dots","bi:three-dots-vertical","bi:thunderbolt","bi:thunderbolt-fill","bi:ticket","bi:ticket-detailed","bi:ticket-detailed-fill","bi:ticket-fill","bi:ticket-perforated","bi:ticket-perforated-fill","bi:tiktok","bi:toggle-off","bi:toggle-on","bi:toggle2-off","bi:toggle2-on","bi:toggles","bi:toggles2","bi:tools","bi:tornado","bi:train-freight-front","bi:train-freight-front-fill","bi:train-front","bi:train-front-fill","bi:train-lightrail-front","bi:train-lightrail-front-fill","bi:translate","bi:transparency","bi:trash","bi:trash-fill","bi:trash2","bi:trash2-fill","bi:trash3","bi:trash3-fill","bi:tree","bi:tree-fill","bi:trello","bi:triangle","bi:triangle-fill","bi:triangle-half","bi:trophy","bi:trophy-fill","bi:tropical-storm","bi:truck","bi:truck-flatbed","bi:truck-front","bi:truck-front-fill","bi:tsunami","bi:tv","bi:tv-fill","bi:twitch","bi:twitter","bi:twitter-x","bi:type","bi:type-bold","bi:type-h1","bi:type-h2","bi:type-h3","bi:type-h4","bi:type-h5","bi:type-h6","bi:type-italic","bi:type-strikethrough","bi:type-underline","bi:ubuntu","bi:ui-checks","bi:ui-checks-grid","bi:ui-radios","bi:ui-radios-grid","bi:umbrella","bi:umbrella-fill","bi:unindent","bi:union","bi:unity","bi:universal-access","bi:universal-access-circle","bi:unlock","bi:unlock-fill","bi:upc","bi:upc-scan","bi:upload","bi:usb","bi:usb-c","bi:usb-c-fill","bi:usb-drive","bi:usb-drive-fill","bi:usb-fill","bi:usb-micro","bi:usb-micro-fill","bi:usb-mini","bi:usb-mini-fill","bi:usb-plug","bi:usb-plug-fill","bi:usb-symbol","bi:valentine","bi:valentine2","bi:vector-pen","bi:view-list","bi:view-stacked","bi:vignette","bi:vimeo","bi:vinyl","bi:vinyl-fill","bi:virus","bi:virus2","bi:voicemail","bi:volume-down","bi:volume-down-fill","bi:volume-mute","bi:volume-mute-fill","bi:volume-off","bi:volume-off-fill","bi:volume-up","bi:volume-up-fill","bi:vr","bi:wallet","bi:wallet-fill","bi:wallet2","bi:watch","bi:water","bi:webcam","bi:webcam-fill","bi:wechat","bi:whatsapp","bi:wifi","bi:wifi-1","bi:wifi-2","bi:wifi-off","bi:wikipedia","bi:wind","bi:window","bi:window-dash","bi:window-desktop","bi:window-dock","bi:window-fullscreen","bi:window-plus","bi:window-sidebar","bi:window-split","bi:window-stack","bi:window-x","bi:windows","bi:wordpress","bi:wrench","bi:wrench-adjustable","bi:wrench-adjustable-circle","bi:wrench-adjustable-circle-fill","bi:wrench-adjustable-cricle","bi:x","bi:x-circle","bi:x-circle-fill","bi:x-diamond","bi:x-diamond-fill","bi:x-lg","bi:x-octagon","bi:x-octagon-fill","bi:x-square","bi:x-square-fill","bi:xbox","bi:yelp","bi:yin-yang","bi:youtube","bi:zoom-in","bi:zoom-out"] \ No newline at end of file diff --git a/saiadmin-vue/src/components/sa-icon-picker/index.vue b/saiadmin-vue/src/components/sa-icon-picker/index.vue new file mode 100644 index 0000000..604713f --- /dev/null +++ b/saiadmin-vue/src/components/sa-icon-picker/index.vue @@ -0,0 +1,121 @@ + + + + + + \ No newline at end of file diff --git a/saiadmin-vue/src/components/sa-icon/index.vue b/saiadmin-vue/src/components/sa-icon/index.vue new file mode 100644 index 0000000..b1007fc --- /dev/null +++ b/saiadmin-vue/src/components/sa-icon/index.vue @@ -0,0 +1,29 @@ + + + diff --git a/saiadmin-vue/src/components/sa-pick-image/index.vue b/saiadmin-vue/src/components/sa-pick-image/index.vue new file mode 100644 index 0000000..95e8ab9 --- /dev/null +++ b/saiadmin-vue/src/components/sa-pick-image/index.vue @@ -0,0 +1,414 @@ + + + + diff --git a/saiadmin-vue/src/components/sa-radio/index.vue b/saiadmin-vue/src/components/sa-radio/index.vue new file mode 100644 index 0000000..ac4a80a --- /dev/null +++ b/saiadmin-vue/src/components/sa-radio/index.vue @@ -0,0 +1,56 @@ + + + diff --git a/saiadmin-vue/src/components/sa-resource/button.vue b/saiadmin-vue/src/components/sa-resource/button.vue new file mode 100644 index 0000000..fd22323 --- /dev/null +++ b/saiadmin-vue/src/components/sa-resource/button.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/saiadmin-vue/src/components/sa-resource/index.vue b/saiadmin-vue/src/components/sa-resource/index.vue new file mode 100644 index 0000000..eb39560 --- /dev/null +++ b/saiadmin-vue/src/components/sa-resource/index.vue @@ -0,0 +1,253 @@ + + + + + diff --git a/saiadmin-vue/src/components/sa-select/index.vue b/saiadmin-vue/src/components/sa-select/index.vue new file mode 100644 index 0000000..3e1ac71 --- /dev/null +++ b/saiadmin-vue/src/components/sa-select/index.vue @@ -0,0 +1,55 @@ + + + diff --git a/saiadmin-vue/src/components/sa-switch/index.vue b/saiadmin-vue/src/components/sa-switch/index.vue new file mode 100644 index 0000000..80fde7a --- /dev/null +++ b/saiadmin-vue/src/components/sa-switch/index.vue @@ -0,0 +1,60 @@ + + + diff --git a/saiadmin-vue/src/components/sa-table/defaultOptions.js b/saiadmin-vue/src/components/sa-table/defaultOptions.js new file mode 100644 index 0000000..3938c8e --- /dev/null +++ b/saiadmin-vue/src/components/sa-table/defaultOptions.js @@ -0,0 +1,132 @@ +export default { + // 当前crud组件的 id,全局唯一,不指定则随机生成一个 + id: undefined, + // 主键名称 + pk: 'id', + // 请求api方法 + api: () => {}, + // 设置分页组件每页记录数 + pageSizeOption: [10, 20, 30, 50, 100], + // 设置选择列 + rowSelection: undefined, + // 是否显示边框 + bordered: { wrapper: true, cell: false }, + // 每页记录数 + pageSize: 10, + // 默认展开所有行 + expandAllRows: false, + // 是否显示总结行 + showSummary: false, + // 斑马线 + stripe: true, + // 表格大小 + size: 'large', + // 是否显示展开/折叠按钮 + isExpand: false, + // 是否显示工具栏 + showTools: true, + // 页面布局方式,支持 normal(标准)和 fixed(固定)两种 + pageLayout: 'fixed', + height: 0, + // 简洁模式 + pageSimple: false, + // 显示排序 + showSort: true, + // 显示搜索 + showSearch: true, + // 搜索提交按钮文案 + searchText: '搜索', + // 搜索重置按钮文案 + resetText: '重置', + // 强制搜索一行显示 + singleLine: false, + + view: { + // 新增api + func: undefined, + // 显示新增按钮的权限 + auth: [], + // 按钮文案 + text: '查看', + // 是否显示 + show: false + }, + + add: { + // 新增api + func: undefined, + // 显示新增按钮的权限 + auth: [], + // 按钮文案 + text: '新增', + // 是否显示 + show: false + }, + edit: { + // 编辑api + func: undefined, + // 显示编辑按钮的权限 + auth: [], + // 按钮文案 + text: '编辑', + // 是否显示 + show: false + }, + delete: { + // 删除api + func: undefined, + // 显示删除按钮的权限 + auth: [], + // 按钮文案 + text: '删除', + // 删除确认弹窗文案 + confirmText: '确定要删除该数据吗?', + // 是否显示 + show: false, + // 是否显示批量处理按钮 + batch: true + }, + import: { + // 导入url + url: undefined, + // 导入参数 + params: {}, + // 下载模板地址 + templateUrl: undefined, + // 显示导入按钮的权限 + auth: [], + // 按钮文案 + text: '导入', + // 是否显示 + show: false + }, + export: { + // 导出url + url: undefined, + // 显示导出按钮的权限 + auth: [], + // 按钮文案 + text: '导出', + // 是否显示 + show: false + }, + + // 列对齐方式 + columnAlign: 'left', + + // 是否显示索引列 + showIndex: false, + // 索引列名称 + indexLabel: '序号', + // 索引列宽度 + indexColumnWidth: 70, + // 索引列固定方向,false 为不固定 + indexColumnFixed: 'left', + + // 是否显示操作列 + operationColumn: true, + // 操作列宽度 + operationColumnWidth: 190, + // 操作列名称 + operationColumnText: '操作' +} diff --git a/saiadmin-vue/src/components/sa-table/import.vue b/saiadmin-vue/src/components/sa-table/import.vue new file mode 100644 index 0000000..ddd546a --- /dev/null +++ b/saiadmin-vue/src/components/sa-table/import.vue @@ -0,0 +1,72 @@ + + + diff --git a/saiadmin-vue/src/components/sa-table/index.vue b/saiadmin-vue/src/components/sa-table/index.vue new file mode 100644 index 0000000..711c4ec --- /dev/null +++ b/saiadmin-vue/src/components/sa-table/index.vue @@ -0,0 +1,778 @@ + + + + + diff --git a/saiadmin-vue/src/components/sa-treeSlider/index.vue b/saiadmin-vue/src/components/sa-treeSlider/index.vue new file mode 100644 index 0000000..274bf74 --- /dev/null +++ b/saiadmin-vue/src/components/sa-treeSlider/index.vue @@ -0,0 +1,120 @@ + + + + + diff --git a/saiadmin-vue/src/components/sa-upload-chunk/index.vue b/saiadmin-vue/src/components/sa-upload-chunk/index.vue new file mode 100644 index 0000000..feaf60e --- /dev/null +++ b/saiadmin-vue/src/components/sa-upload-chunk/index.vue @@ -0,0 +1,298 @@ + + + + + \ No newline at end of file diff --git a/saiadmin-vue/src/components/sa-upload-file/index.vue b/saiadmin-vue/src/components/sa-upload-file/index.vue new file mode 100644 index 0000000..33568b8 --- /dev/null +++ b/saiadmin-vue/src/components/sa-upload-file/index.vue @@ -0,0 +1,206 @@ + + + + diff --git a/saiadmin-vue/src/components/sa-upload-image/index.vue b/saiadmin-vue/src/components/sa-upload-image/index.vue new file mode 100644 index 0000000..68f91f3 --- /dev/null +++ b/saiadmin-vue/src/components/sa-upload-image/index.vue @@ -0,0 +1,234 @@ + + + + diff --git a/saiadmin-vue/src/components/sa-user/index.vue b/saiadmin-vue/src/components/sa-user/index.vue new file mode 100644 index 0000000..3aed5cd --- /dev/null +++ b/saiadmin-vue/src/components/sa-user/index.vue @@ -0,0 +1,159 @@ + + + + + diff --git a/saiadmin-vue/src/config/skins.js b/saiadmin-vue/src/config/skins.js new file mode 100644 index 0000000..23f54bd --- /dev/null +++ b/saiadmin-vue/src/config/skins.js @@ -0,0 +1,23 @@ +import mine from '@/assets/skins-thumb/mine/thumb.jpg' +import classics from '@/assets/skins-thumb/classics/thumb.jpg' +import businessGray from '@/assets/skins-thumb/businessGray/thumb.jpg' +import city from '@/assets/skins-thumb/city/thumb.jpg' + +export default [ + { + name: 'mine', + thumb: mine + }, + { + name: 'classics', + thumb: classics + }, + { + name: 'businessGray', + thumb: businessGray + }, + { + name: 'city', + thumb: city + } +] diff --git a/saiadmin-vue/src/directives/auth/auth.js b/saiadmin-vue/src/directives/auth/auth.js new file mode 100644 index 0000000..bc4fad6 --- /dev/null +++ b/saiadmin-vue/src/directives/auth/auth.js @@ -0,0 +1,8 @@ +import { useUserStore } from '@/store' + +const auth = name => { + const userStore = useUserStore() + return (userStore.codes && userStore.codes.includes(name)) || (userStore.codes && userStore.codes.includes('*')) +} + +export default auth \ No newline at end of file diff --git a/saiadmin-vue/src/directives/auth/index.js b/saiadmin-vue/src/directives/auth/index.js new file mode 100644 index 0000000..2758f5f --- /dev/null +++ b/saiadmin-vue/src/directives/auth/index.js @@ -0,0 +1,29 @@ +import auth from './auth' + +const checkAuth = (el, binding) => { + const { value } = binding + + if (Array.isArray(value)) { + if (value.length > 0) { + let isHas = false + value.map(item => { + isHas = auth(item) + }) + + if (!isHas && el.parentNode) { + el.parentNode.removeChild(el) + } + } + } else { + throw new Error(`need permission! Like v-auth="['admin','user']"`) + } +} + +export default { + mounted(el, binding) { + checkAuth(el, binding) + }, + updated(el, binding) { + checkAuth(el, binding) + }, +}; diff --git a/saiadmin-vue/src/directives/copy/index.js b/saiadmin-vue/src/directives/copy/index.js new file mode 100644 index 0000000..d223434 --- /dev/null +++ b/saiadmin-vue/src/directives/copy/index.js @@ -0,0 +1,46 @@ +import useClipboard from 'vue-clipboard3' +import { Message } from '@arco-design/web-vue' + +const handlerMap = new WeakMap() + +const copy = (el, binding) => { + const { value } = binding + + const oldHandler = handlerMap.get(el) + if (oldHandler) { + el.removeEventListener('click', oldHandler) + } + + const newHandler = async () => { + if (value && value !== '') { + try { + await useClipboard().toClipboard(value) + Message.success('已成功复制到剪切板') + } catch(e) { + Message.error('复制失败') + } + } else { + throw new Error(`need for copy content! Like v-copy="Hello World"`) + } + } + + el.addEventListener('click', newHandler) + + handlerMap.set(el, newHandler) +} + +export default { + mounted(el, binding) { + copy(el, binding) + }, + updated(el, binding) { + copy(el, binding) + }, + unmounted(el) { + const handler = handlerMap.get(el) + if (handler) { + el.removeEventListener('click', handler) + handlerMap.delete(el) + } + } +} diff --git a/saiadmin-vue/src/directives/index.js b/saiadmin-vue/src/directives/index.js new file mode 100644 index 0000000..6aa18ed --- /dev/null +++ b/saiadmin-vue/src/directives/index.js @@ -0,0 +1,12 @@ +import auth from './auth/index' +import role from './role/index' +import copy from './copy/index' + + +export default { + install (Vue) { + Vue.directive('auth', auth) + Vue.directive('role', role) + Vue.directive('copy', copy) + } +} diff --git a/saiadmin-vue/src/directives/role/index.js b/saiadmin-vue/src/directives/role/index.js new file mode 100644 index 0000000..debe574 --- /dev/null +++ b/saiadmin-vue/src/directives/role/index.js @@ -0,0 +1,32 @@ +import role from './role' + +const checkRole = (el, binding) => { + const { value } = binding + + if (Array.isArray(value)) { + if (value.length > 0) { + let isHas = false + value.map((item) => { + if (!isHas) { + isHas = role(item) + } + }) + + if (!isHas && el.parentNode) { + // el.parentNode.remove() + el.remove() + } + } + } else { + throw new Error(`need role! Like v-role="['seo', 'cfo']"`) + } +} + +export default { + mounted(el, binding) { + checkRole(el, binding) + }, + updated(el, binding) { + checkRole(el, binding) + } +} diff --git a/saiadmin-vue/src/directives/role/role.js b/saiadmin-vue/src/directives/role/role.js new file mode 100644 index 0000000..eb897c3 --- /dev/null +++ b/saiadmin-vue/src/directives/role/role.js @@ -0,0 +1,8 @@ +import { useUserStore } from '@/store' + +const role = name => { + const userStore = useUserStore() + return (userStore.roles && userStore.roles.includes(name)) || (userStore.roles && userStore.roles.includes('superAdmin')) +} + +export default role \ No newline at end of file diff --git a/saiadmin-vue/src/i18n/en/crud.js b/saiadmin-vue/src/i18n/en/crud.js new file mode 100644 index 0000000..683394a --- /dev/null +++ b/saiadmin-vue/src/i18n/en/crud.js @@ -0,0 +1,3 @@ +export default { + +} \ No newline at end of file diff --git a/saiadmin-vue/src/i18n/en/maResource.js b/saiadmin-vue/src/i18n/en/maResource.js new file mode 100644 index 0000000..8c3ec20 --- /dev/null +++ b/saiadmin-vue/src/i18n/en/maResource.js @@ -0,0 +1,8 @@ +export default { + loadingText: 'Loading...', + searchFileNotice: 'Search file by name', + searchResource: 'Search resource type', + saveNetworkImage: 'Save network image', + networkImageNotice: 'Please paste the web picture address', + ok: 'OK', +} \ No newline at end of file diff --git a/saiadmin-vue/src/i18n/en/menus.js b/saiadmin-vue/src/i18n/en/menus.js new file mode 100644 index 0000000..fab9c6b --- /dev/null +++ b/saiadmin-vue/src/i18n/en/menus.js @@ -0,0 +1,53 @@ +export default { + // 特殊页 + 'openForm': 'CRUD', + + // 首页菜单 + 'home': 'Home', + 'dashboard': 'Dashboard', + 'userCenter': 'User Center', + 'message': 'Message Center', + 'setting:config': 'System Setting', + 'demo': 'Component Demo', + + // 权限 + 'permission': 'Permission', + 'system:user': 'User Manage', + 'system:role': 'Role Manage', + 'system:dept': 'Department Manage', + 'system:menu': 'Menu Manage', + 'system:post': 'Post Manage', + + 'dataCenter': 'Data Center', + 'system:dict': 'Dictionary', + 'system:attachment': 'Attached', + 'system:dataMaintain': 'Table Maintenance', + 'system:notice': 'Notice', + 'apps': 'App Center', + 'system:appGroup': 'App Group', + 'system:app': 'App Manage', + 'apis': 'Api Center', + 'system:apiGroup': 'Api Group', + 'system:api': 'Api Manage', + + // 监控 + 'monitor': 'Monitor', + 'system:monitor:server': 'Server Monitor', + 'system:onlineUser': 'Online User', + 'system:cache': 'Cache Monitor', + 'system:monitor:rely': 'Reliance Monitor', + 'logs': 'Logs Monitor', + 'system:queueLog': 'Queue Logs', + 'system:loginLog': 'Login Logs', + 'system:operLog': 'Operation Logs', + 'system:apiLog': 'Apis Logs', + + // 工具 + 'devTools': 'Tools', + 'setting:module': 'Module Manage', + 'setting:code': 'Code Generator', + 'setting:code:update': 'Edit the build information', + 'setting:crontab': 'Crontab', + 'setting:table': 'Table Designer', + 'systemInterface': 'System Apis', + } \ No newline at end of file diff --git a/saiadmin-vue/src/i18n/en/skin.js b/saiadmin-vue/src/i18n/en/skin.js new file mode 100644 index 0000000..89bf147 --- /dev/null +++ b/saiadmin-vue/src/i18n/en/skin.js @@ -0,0 +1,14 @@ +export default { + mine: 'Mine', + classics: 'classics', + businessGray: 'Business gray', + city: 'City', + + mineDesc: 'Predominantly pure white, Mine defaults to skin', + classicsDesc: 'Classic dark sidebar skin', + businessGrayDesc: 'Gray versatility and atmosphere, creating business and stability', + cityDesc: 'May there be a warmth in every angle of the city', + + activated: 'Activated', + use: 'Use' +} \ No newline at end of file diff --git a/saiadmin-vue/src/i18n/en/sys.js b/saiadmin-vue/src/i18n/en/sys.js new file mode 100644 index 0000000..2c51340 --- /dev/null +++ b/saiadmin-vue/src/i18n/en/sys.js @@ -0,0 +1,92 @@ +export default { + pageSetting: 'Page Setting', + chinese: '简体中文', + english: 'English', + search: 'Search', + store: 'App Store', + fullScreen: 'Full Screen', + closeFullScreen: 'Close Full Screen', + changeSkin: 'Change Skin', + skin: 'Skin', + layouts: 'Layout', + language: 'Language', + dark: 'Dark Mode', + tag: 'Open Tags', + water: 'Watermark', + waterContent: 'Watermark content', + menuFold: 'Menu Fold', + menuWidth: 'Mene Width', + skinHelp: 'Set up background skins', + layoutsHelp: 'Set the background display', + languageHelp: 'Set the page language and the request background language', + darkHelp: 'Sets the page display mode', + tagHelp: 'Whether to enable multi-tab mode', + waterHelp: 'Whether to display the watermark', + menuFoldHelp: 'Whether the left menu of the system is collapsed', + menuWidthHelp: 'Sets the display width of the left menu', + saveToBackend: 'Save to backend', + backendSettingTitle: 'Backend setting', + systemPrimaryColor: 'System Primary Color', + personalizedConfig: 'Personalized configuration', + layout: { + classic: 'Classic', + columns: 'Columns', + banner: 'Banner', + mixed: 'Mixed', + }, + userCenter: 'User Center', + clearCache: 'Clear Cache', + logout: 'Logout System', + logoutAlert: 'Exit prompt', + logoutMessage: 'Are you sure you want to sign out?', + operationMessage: { + message: 'Message', + notification: 'Notification', + todo: 'Todo', + }, + goHome: 'Go Home', + notFoundPage: 'Exit tip Ah oh, the page visited was hijacked by the Martians...', + login: { + slogan: 'High-quality middle and back office management system out of the box', + title: 'Login System', + username: 'Username', + usernameNotice: 'Please enter the username', + password: 'Passoword', + passwordNotice: 'Please enter the password', + verifyCode: 'Please enter the verification code', + verifyCodeNotice: 'Please enter the correct verification code', + loginBtn: 'Login in', + otherLoginType: 'Other ways to sign in' + }, + verifyCode: { + switch: 'Click Toggle verification code', + error: 'The verification code is incorrect', + notice: 'Please enter the verification code' + }, + i18n: 'open multi-language', + i18nHelp: 'Whether to enable the multi-language feature', + ws: 'open websocket', + wsHelp: 'Whether to enable the websocket feature', + round: 'opend round', + roundHelp: 'Whether to enable the round feature', + animation: 'Animation', + animationHelp: 'Page transition animation effect', + animate: { + fade: 'The page fades out', + sliderLeft: 'The page fades to the left', + sliderRight:'The page fades to the right', + sliderDown:'The page fades to the down', + sliderUp:'The page fades to the up', + }, + tags: { + refresh: 'Refresh', + fullscreen: 'Full screen', + closeRightTag: 'Close right tag', + closeLeftTag: 'Close left tag', + closeTag: 'Close current tag', + closeOtherTag: 'Close other tag', + }, + noticeTitle: 'System Prompted', + save: 'Save', + cancel: 'Cancel', +} diff --git a/saiadmin-vue/src/i18n/en/upload.js b/saiadmin-vue/src/i18n/en/upload.js new file mode 100644 index 0000000..d39d5d1 --- /dev/null +++ b/saiadmin-vue/src/i18n/en/upload.js @@ -0,0 +1,8 @@ +export default { + fileHashFail: 'Get file hash failed, please try again!', + sizeLimit: 'The file size exceeds the upload limit', + uploadFailed: 'File upload failed', + buttonText: 'Local upload', + clickUpload: 'Click upload', + uploadDesc: 'Drag the file here, or ', +} \ No newline at end of file diff --git a/saiadmin-vue/src/i18n/en/user.js b/saiadmin-vue/src/i18n/en/user.js new file mode 100644 index 0000000..e69de29 diff --git a/saiadmin-vue/src/i18n/index.js b/saiadmin-vue/src/i18n/index.js new file mode 100644 index 0000000..24910fd --- /dev/null +++ b/saiadmin-vue/src/i18n/index.js @@ -0,0 +1,50 @@ +import { createI18n } from 'vue-i18n' +import tool from '@/utils/tool' + +const setting = tool.local.get('setting') + +const getLanguage = () => { + const loadFile = () => { + if (setting.language === 'zh_CN') { + return import.meta.glob('./zh_CN/**/*.js', { eager:true }) + } else if (setting.language === 'en') { + return import.meta.glob('./en/**/*.js', { eager:true }) + } + } + + const generateLanguage = (fileNames, fileContent, generateLanguages = {}) => { + const fileName = fileNames.shift() + if (fileNames.length > 0) { + if (typeof generateLanguages[fileName] == 'undefined') { + generateLanguages[fileName] = {} + } + generateLanguages[fileName] = generateLanguage(fileNames, fileContent, generateLanguages[fileName]) + }else{ + generateLanguages[fileName] = fileContent + } + return generateLanguages + } + + const files = loadFile() + let messages = { [setting.language]: {} } + for (let path in files) { + const names = path.match(/([A-Za-z0-9_]+)/g) + //去除语言文件夹和文件后缀名 + names.shift() + names.pop() + if (files[path].default) { + messages[setting.language] = generateLanguage(names, files[path].default, messages[setting.language]) + } + } + return messages +} + +const i18n = createI18n({ + locale: setting.language, + legacy: false, + globalInjection: true, + fallbackLocale: 'zh_CN', + messages: getLanguage() +}) + +export default i18n \ No newline at end of file diff --git a/saiadmin-vue/src/i18n/zh_CN/crud.js b/saiadmin-vue/src/i18n/zh_CN/crud.js new file mode 100644 index 0000000..683394a --- /dev/null +++ b/saiadmin-vue/src/i18n/zh_CN/crud.js @@ -0,0 +1,3 @@ +export default { + +} \ No newline at end of file diff --git a/saiadmin-vue/src/i18n/zh_CN/maResource.js b/saiadmin-vue/src/i18n/zh_CN/maResource.js new file mode 100644 index 0000000..7e9a80f --- /dev/null +++ b/saiadmin-vue/src/i18n/zh_CN/maResource.js @@ -0,0 +1,8 @@ +export default { + loadingText: '数据加载中...', + searchFileNotice: '文件名搜索', + searchResource: '搜索资源类型', + saveNetworkImage: '保存网络图片', + networkImageNotice: '请粘贴网络图片地址', + ok: '确定' +} \ No newline at end of file diff --git a/saiadmin-vue/src/i18n/zh_CN/menus.js b/saiadmin-vue/src/i18n/zh_CN/menus.js new file mode 100644 index 0000000..df9d5a0 --- /dev/null +++ b/saiadmin-vue/src/i18n/zh_CN/menus.js @@ -0,0 +1,53 @@ +export default { + // 特殊页 + 'openForm': '公共表单', + + // 首页菜单 + 'home': '首页', + 'dashboard': '仪表盘', + 'userCenter': '个人中心', + 'message': '消息中心', + 'setting:config': '系统配置', + 'demo': '组件演示', + + // 权限 + 'permission': '权限', + 'system:user': '用户管理', + 'system:role': '角色管理', + 'system:dept': '部门管理', + 'system:menu': '菜单管理', + 'system:post': '岗位管理', + + 'dataCenter': '数据', + 'system:dict': '数据字典', + 'system:attachment': '附件管理', + 'system:dataMaintain': '数据表维护', + 'system:notice': '系统公告', + 'apps': '应用中心', + 'system:appGroup': '应用分组', + 'system:app': '应用管理', + 'apis': '应用接口', + 'system:apiGroup': '接口分组', + 'system:api': '接口管理', + + // 监控 + 'monitor': '监控', + 'system:monitor:server': '服务监控', + 'system:onlineUser': '在线用户', + 'system:cache': '缓存监控', + 'system:monitor:rely': '依赖监控', + 'logs': '日志监控', + 'system:queueLog': '队列日志', + 'system:loginLog': '登录日志', + 'system:operLog': '操作日志', + 'system:apiLog': '接口日志', + + // 工具 + 'devTools': '工具', + 'setting:module': '模块管理', + 'setting:code': '代码生成器', + 'setting:code:update': '编辑生成信息', + 'setting:crontab': '定时任务', + 'setting:table': '数据表设计器', + 'systemInterface': '系统接口', +} \ No newline at end of file diff --git a/saiadmin-vue/src/i18n/zh_CN/skin.js b/saiadmin-vue/src/i18n/zh_CN/skin.js new file mode 100644 index 0000000..cfd438f --- /dev/null +++ b/saiadmin-vue/src/i18n/zh_CN/skin.js @@ -0,0 +1,14 @@ +export default { + mine: 'Mine', + classics: '经典', + businessGray: '商务灰', + city: '城市', + + mineDesc: '以纯净的白色为主,Mine默认皮肤', + classicsDesc: '经典的深色侧边栏皮肤', + businessGrayDesc: '灰色的百搭与大气,营造商务与稳重', + cityDesc: '愿城市每一个角度,都有一份温馨', + + activated: '已激活', + use: '使用' + } \ No newline at end of file diff --git a/saiadmin-vue/src/i18n/zh_CN/sys.js b/saiadmin-vue/src/i18n/zh_CN/sys.js new file mode 100644 index 0000000..6706ae8 --- /dev/null +++ b/saiadmin-vue/src/i18n/zh_CN/sys.js @@ -0,0 +1,92 @@ +export default { + pageSetting: '页面设置', + chinese: '简体中文', + english: 'English', + search: '搜索', + store: '应用市场', + fullScreen: '全屏', + closeFullScreen: '关闭全屏', + changeSkin: '换肤', + skin: '当前皮肤', + layouts: '布局', + language: '语言', + dark: '黑夜模式', + tag: '多标签', + water: '水印', + waterContent: '水印内容', + menuFold: '菜单折叠', + menuWidth: '菜单宽度', + skinHelp: '设置后台皮肤', + layoutsHelp: '设置后台显示方式', + languageHelp: '设置页面语言和请求后台语言', + darkHelp: '设置页面显示模式', + tagHelp: '是否启用多标签方式', + waterHelp: '是否显示水印', + menuFoldHelp: '系统左侧菜单是否折叠起来', + menuWidthHelp: '设置左侧菜单的显示宽度', + saveToBackend: '保存到后台', + backendSettingTitle: '后台设置', + systemPrimaryColor: '系统主色调', + personalizedConfig: '个性化配置 ', + layout: { + classic: '经典', + columns: '分栏', + banner: '通栏', + mixed: '混合', + }, + userCenter: '个人中心', + clearCache: '清除缓存', + logout: '退出系统', + logoutAlert: '退出提示', + logoutMessage: '确定要退出登录吗?', + operationMessage: { + message: '消息', + notification: '通知', + todo: '待办', + }, + goHome: '回到首页', + notFoundPage: '啊哦,访问的页面被火星人劫走了...', + login: { + slogan: '开箱即用的高质量中后台管理系统', + title: '登录', + username: '账户', + usernameNotice: '请输入账户', + password: '密码', + passwordNotice: '请输入密码', + verifyCode: '请输入验证码', + verifyCodeNotice: '请输入正确的验证码', + loginBtn: '登录', + otherLoginType: '其他登录方式' + }, + verifyCode: { + switch: '点击切换验证码', + error: '验证码错误', + notice: '请输入验证码' + }, + i18n: '开启多语言', + i18nHelp: '是否开启多语言功能', + ws: '开启Ws', + wsHelp: '是否开启Websocket连接', + round: '圆角', + roundHelp: '是否开启圆角', + animation: '切换动画', + animationHelp: '工作区页面切换的进场和出场动画效果', + animate: { + fade: '页面渐隐渐出', + sliderLeft: '页面向左渐出', + sliderRight:'页面向右渐出', + sliderDown:'页面向下渐出', + sliderUp:'页面向上渐出', + }, + tags: { + refresh: '刷新', + fullscreen: '全屏', + closeRightTag: '关闭右侧标签', + closeLeftTag: '关闭左侧标签', + closeTag: '关闭当前标签', + closeOtherTag: '关闭其他标签', + }, + noticeTitle: '系统提示', + save: '保存', + cancel: '取消', +} diff --git a/saiadmin-vue/src/i18n/zh_CN/upload.js b/saiadmin-vue/src/i18n/zh_CN/upload.js new file mode 100644 index 0000000..23baf71 --- /dev/null +++ b/saiadmin-vue/src/i18n/zh_CN/upload.js @@ -0,0 +1,8 @@ +export default { + fileHashFail: '获取文件Hash失败,请重试', + sizeLimit: '文件大小超过了限制', + uploadFailed: '文件上传失败', + buttonText: '本地上传', + clickUpload: '点击上传', + uploadDesc: '将文件拖到此处,或', +} \ No newline at end of file diff --git a/saiadmin-vue/src/i18n/zh_CN/user.js b/saiadmin-vue/src/i18n/zh_CN/user.js new file mode 100644 index 0000000..3e9a1a9 --- /dev/null +++ b/saiadmin-vue/src/i18n/zh_CN/user.js @@ -0,0 +1,4 @@ +export default { + name: '菜单管理', + 'system:cache': '系统缓存' +} \ No newline at end of file diff --git a/saiadmin-vue/src/layout/404.vue b/saiadmin-vue/src/layout/404.vue new file mode 100644 index 0000000..34c64d9 --- /dev/null +++ b/saiadmin-vue/src/layout/404.vue @@ -0,0 +1,19 @@ + + + + \ No newline at end of file diff --git a/saiadmin-vue/src/layout/components/banner/index.vue b/saiadmin-vue/src/layout/components/banner/index.vue new file mode 100644 index 0000000..84a6c06 --- /dev/null +++ b/saiadmin-vue/src/layout/components/banner/index.vue @@ -0,0 +1,68 @@ + + + + + diff --git a/saiadmin-vue/src/layout/components/classic/index.vue b/saiadmin-vue/src/layout/components/classic/index.vue new file mode 100644 index 0000000..08cf84f --- /dev/null +++ b/saiadmin-vue/src/layout/components/classic/index.vue @@ -0,0 +1,21 @@ + + + diff --git a/saiadmin-vue/src/layout/components/classic/ma-classic-header.vue b/saiadmin-vue/src/layout/components/classic/ma-classic-header.vue new file mode 100644 index 0000000..6eb3997 --- /dev/null +++ b/saiadmin-vue/src/layout/components/classic/ma-classic-header.vue @@ -0,0 +1,18 @@ + + + diff --git a/saiadmin-vue/src/layout/components/classic/ma-classic-slider.vue b/saiadmin-vue/src/layout/components/classic/ma-classic-slider.vue new file mode 100644 index 0000000..bac3b17 --- /dev/null +++ b/saiadmin-vue/src/layout/components/classic/ma-classic-slider.vue @@ -0,0 +1,36 @@ + + + + + diff --git a/saiadmin-vue/src/layout/components/columns/index.vue b/saiadmin-vue/src/layout/components/columns/index.vue new file mode 100644 index 0000000..42866e2 --- /dev/null +++ b/saiadmin-vue/src/layout/components/columns/index.vue @@ -0,0 +1,39 @@ + + diff --git a/saiadmin-vue/src/layout/components/columns/ma-columns-header.vue b/saiadmin-vue/src/layout/components/columns/ma-columns-header.vue new file mode 100644 index 0000000..97dac47 --- /dev/null +++ b/saiadmin-vue/src/layout/components/columns/ma-columns-header.vue @@ -0,0 +1,18 @@ + + + diff --git a/saiadmin-vue/src/layout/components/columns/ma-columns-menu.vue b/saiadmin-vue/src/layout/components/columns/ma-columns-menu.vue new file mode 100644 index 0000000..787b579 --- /dev/null +++ b/saiadmin-vue/src/layout/components/columns/ma-columns-menu.vue @@ -0,0 +1,120 @@ + + + + + diff --git a/saiadmin-vue/src/layout/components/components/children-banner.vue b/saiadmin-vue/src/layout/components/components/children-banner.vue new file mode 100644 index 0000000..850affd --- /dev/null +++ b/saiadmin-vue/src/layout/components/components/children-banner.vue @@ -0,0 +1,64 @@ + + + + \ No newline at end of file diff --git a/saiadmin-vue/src/layout/components/components/children-menu.vue b/saiadmin-vue/src/layout/components/components/children-menu.vue new file mode 100644 index 0000000..39208a6 --- /dev/null +++ b/saiadmin-vue/src/layout/components/components/children-menu.vue @@ -0,0 +1,59 @@ + + + + + \ No newline at end of file diff --git a/saiadmin-vue/src/layout/components/components/iframe-view.vue b/saiadmin-vue/src/layout/components/components/iframe-view.vue new file mode 100644 index 0000000..284e2ef --- /dev/null +++ b/saiadmin-vue/src/layout/components/components/iframe-view.vue @@ -0,0 +1,38 @@ +