From 6d3cab044efda30dc86c150e34714618aa433daa Mon Sep 17 00:00:00 2001 From: kaeery <3491123437@qq.com> Date: Thu, 20 Feb 2025 19:46:42 +0800 Subject: [PATCH] first commit --- .env | 2 + .eslintrc.cjs | 42 ++ .gitignore | 38 ++ .vscode/extensions.json | 3 + .vscode/settings.json | 26 + README.md | 46 ++ first | Bin 0 -> 1044 bytes global.d.ts | 1 + index.html | 71 +++ package.json | 67 +++ postcss.config.js | 6 + scripts/build.mjs | 37 ++ src/App.vue | 58 ++ src/api/app.ts | 11 + src/api/application.ts | 11 + src/api/application/coupon.ts | 70 +++ src/api/application/recharge.ts | 11 + src/api/channel/dyapp.ts | 11 + src/api/channel/h5.ts | 11 + src/api/channel/weapp.ts | 11 + src/api/channel/wx_dev.ts | 11 + src/api/channel/wx_oa.ts | 105 ++++ src/api/consumer.ts | 16 + src/api/decorate/index.ts | 24 + src/api/distributor/group.ts | 39 ++ src/api/distributor/lists.ts | 61 ++ src/api/file.ts | 39 ++ src/api/finance/balance.ts | 10 + src/api/finance/center.ts | 5 + src/api/finance/recharge.ts | 6 + src/api/finance/record.ts | 26 + src/api/finance/withdraw.ts | 10 + src/api/master_worker/index.ts | 113 ++++ src/api/message.ts | 31 + src/api/order/lists.ts | 60 ++ src/api/org/department.ts | 26 + src/api/org/post.ts | 30 + src/api/perms/admin.ts | 31 + src/api/perms/menu.ts | 26 + src/api/perms/role.ts | 29 + src/api/service/activity.ts | 39 ++ src/api/service/area.ts | 29 + src/api/service/category.ts | 36 ++ src/api/service/evaluate.ts | 28 + src/api/service/lists.ts | 46 ++ src/api/service/subscribe.ts | 86 +++ src/api/service/unit.ts | 31 + src/api/setting/dict.ts | 61 ++ src/api/setting/map.ts | 11 + src/api/setting/payment.ts | 28 + src/api/setting/search.ts | 27 + src/api/setting/storage.ts | 21 + src/api/setting/system.ts | 38 ++ src/api/setting/user.ts | 43 ++ src/api/setting/website.ts | 27 + src/api/shop.ts | 28 + src/api/tools/code.ts | 66 +++ src/api/transaction_settings/index.ts | 11 + src/api/user.ts | 58 ++ src/assets/icons/Androidfanhui.svg | 1 + src/assets/icons/KMSguanli.svg | 1 + src/assets/icons/KTVyuding.svg | 1 + src/assets/icons/a-tixingdengpao.svg | 1 + src/assets/icons/anquan.svg | 1 + src/assets/icons/anquan_mian.svg | 1 + src/assets/icons/anquan_mian1.svg | 1 + src/assets/icons/banxing_mian.svg | 1 + src/assets/icons/baoxian.svg | 1 + src/assets/icons/bendishenghuodaxue.svg | 1 + src/assets/icons/bianji.svg | 1 + src/assets/icons/biaoqing.svg | 1 + src/assets/icons/bukejian.svg | 1 + src/assets/icons/caipinguanli.svg | 1 + src/assets/icons/caiwu.svg | 1 + src/assets/icons/caiwu_jifen.svg | 1 + src/assets/icons/caiwu_tixian.svg | 1 + src/assets/icons/canyinfuwu.svg | 1 + src/assets/icons/carryout.svg | 1 + src/assets/icons/chexiao.svg | 1 + src/assets/icons/chihuohongbao.svg | 1 + src/assets/icons/chuangyiwuliao.svg | 1 + src/assets/icons/close.svg | 1 + src/assets/icons/daiyunying.svg | 1 + src/assets/icons/danwei.svg | 1 + src/assets/icons/danxuankuang.svg | 1 + src/assets/icons/danxuanxuanzhong.svg | 1 + src/assets/icons/dayin.svg | 1 + src/assets/icons/dayin_mian.svg | 1 + src/assets/icons/del.svg | 1 + src/assets/icons/diancanshezhi.svg | 1 + src/assets/icons/dianhua.svg | 1 + src/assets/icons/dianhua_mian.svg | 1 + src/assets/icons/dianpu_fengge.svg | 1 + src/assets/icons/dianputuijian.svg | 1 + src/assets/icons/dianzifapiao.svg | 1 + src/assets/icons/dingcan.svg | 1 + src/assets/icons/dingdan.svg | 1 + src/assets/icons/dingdan1.svg | 1 + src/assets/icons/dingdan_mian.svg | 1 + src/assets/icons/dingwei.svg | 1 + src/assets/icons/dingwei_mian.svg | 1 + src/assets/icons/ditu.svg | 1 + src/assets/icons/ditu_mian.svg | 1 + src/assets/icons/duizhang.svg | 1 + src/assets/icons/elemo.svg | 1 + src/assets/icons/ezhanggui.svg | 1 + src/assets/icons/falvfuwubaoxiaohei.svg | 1 + src/assets/icons/fengniaopaotui.svg | 1 + src/assets/icons/fenxiang.svg | 1 + src/assets/icons/fukuan.svg | 1 + src/assets/icons/fukuan_mian.svg | 1 + src/assets/icons/fullscreen-exit.svg | 1 + src/assets/icons/fullscreen.svg | 1 + src/assets/icons/fuwushichang.svg | 1 + src/assets/icons/fuzhi.svg | 1 + src/assets/icons/gaode.svg | 1 + src/assets/icons/gengduo.svg | 1 + src/assets/icons/gengduoandroid.svg | 1 + src/assets/icons/gift.svg | 1 + src/assets/icons/gongyingshang.svg | 1 + src/assets/icons/goods.svg | 1 + src/assets/icons/gou.svg | 1 + src/assets/icons/gouwuche.svg | 1 + src/assets/icons/gouxuan.svg | 1 + src/assets/icons/gouxuan_mian.svg | 1 + src/assets/icons/guanbi.svg | 1 + src/assets/icons/guanli.svg | 1 + src/assets/icons/guanli_mian.svg | 1 + src/assets/icons/gukefapiao.svg | 1 + src/assets/icons/haibaosheji.svg | 1 + src/assets/icons/heshoujilu.svg | 1 + src/assets/icons/heshoujilu1.svg | 1 + src/assets/icons/hexiao_order.svg | 1 + src/assets/icons/hide-2.svg | 1 + src/assets/icons/hide.svg | 1 + src/assets/icons/hongbao.svg | 1 + src/assets/icons/huiche.svg | 1 + src/assets/icons/huiyuanyingxiao.svg | 1 + src/assets/icons/huodongbaoming.svg | 1 + src/assets/icons/huodongguanli.svg | 1 + src/assets/icons/huodongzhongxin.svg | 1 + src/assets/icons/huojian.svg | 1 + src/assets/icons/huojian_mian.svg | 1 + src/assets/icons/huolala.svg | 1 + src/assets/icons/iOSfanhui.svg | 1 + src/assets/icons/jia.svg | 1 + src/assets/icons/jia_mian.svg | 1 + src/assets/icons/jian.svg | 1 + src/assets/icons/jian_mian.svg | 1 + src/assets/icons/jianpan.svg | 1 + src/assets/icons/jianpanshanchu.svg | 1 + src/assets/icons/jianshao.svg | 1 + src/assets/icons/jiaopeiwangputong.svg | 1 + src/assets/icons/jiaoyi.svg | 1 + src/assets/icons/jiedan.svg | 1 + src/assets/icons/jiekuan.svg | 1 + src/assets/icons/jingshi.svg | 1 + src/assets/icons/jingshi_mian.svg | 1 + src/assets/icons/jingshi_mian1.svg | 1 + src/assets/icons/jingyin.svg | 1 + src/assets/icons/jingyin_mian.svg | 1 + src/assets/icons/jingying.svg | 1 + src/assets/icons/jingying_mian.svg | 1 + src/assets/icons/jingyinggonglve.svg | 1 + src/assets/icons/jingzhunyingxiao.svg | 1 + src/assets/icons/jinhuo.svg | 1 + src/assets/icons/kaitongwaimai.svg | 1 + src/assets/icons/kanjia.svg | 1 + src/assets/icons/kefu.svg | 1 + src/assets/icons/kejian.svg | 1 + src/assets/icons/kejian_mian.svg | 1 + src/assets/icons/keziyuyue.svg | 1 + src/assets/icons/kezizhongxin.svg | 1 + src/assets/icons/koubei.svg | 1 + src/assets/icons/kuaijiehuifu.svg | 1 + src/assets/icons/ladu_mian.svg | 1 + src/assets/icons/lanyadingwei.svg | 1 + src/assets/icons/list-2.svg | 1 + src/assets/icons/mendiandongtai.svg | 1 + src/assets/icons/mishiyuding.svg | 1 + src/assets/icons/mishiyuding1.svg | 1 + src/assets/icons/notice_buyer.svg | 1 + src/assets/icons/open.svg | 1 + src/assets/icons/paiduiquhao.svg | 1 + src/assets/icons/paimai.svg | 1 + src/assets/icons/pdf.svg | 1 + src/assets/icons/pingjia.svg | 1 + src/assets/icons/pingtaifapiao.svg | 1 + src/assets/icons/pinpai.svg | 1 + src/assets/icons/qianbao.svg | 1 + src/assets/icons/qianbao_mian.svg | 1 + src/assets/icons/qiehuan.svg | 1 + src/assets/icons/qingchu.svg | 1 + src/assets/icons/qingchu_mian.svg | 1 + src/assets/icons/qishoupeisong.svg | 1 + src/assets/icons/qiyedingcan.svg | 1 + src/assets/icons/qiyedingcan1.svg | 1 + src/assets/icons/quanbu.svg | 1 + src/assets/icons/quanping.svg | 1 + src/assets/icons/qudao.svg | 1 + src/assets/icons/qudao_xiaochengxu.svg | 1 + src/assets/icons/rencaizhaopin.svg | 1 + src/assets/icons/rili.svg | 1 + src/assets/icons/rili2.svg | 1 + src/assets/icons/rizhi.svg | 1 + src/assets/icons/saoma.svg | 1 + src/assets/icons/set_pay.svg | 1 + src/assets/icons/set_peisong.svg | 1 + src/assets/icons/set_user.svg | 1 + src/assets/icons/set_weihu.svg | 1 + src/assets/icons/shanchu.svg | 1 + src/assets/icons/shanchu_mian.svg | 1 + src/assets/icons/shangchuan.svg | 1 + src/assets/icons/shangchuanzhaopian.svg | 1 + src/assets/icons/shangpinguanli.svg | 1 + src/assets/icons/shangpinzhushou.svg | 1 + src/assets/icons/shangpuyuding.svg | 1 + src/assets/icons/shebeiguanli.svg | 1 + src/assets/icons/shengfuwangputong.svg | 1 + src/assets/icons/shengyin.svg | 1 + src/assets/icons/shengyin_mian.svg | 1 + src/assets/icons/shezhi.svg | 1 + src/assets/icons/shezhi_mian.svg | 1 + src/assets/icons/shichang.svg | 1 + src/assets/icons/shichang_mian.svg | 1 + src/assets/icons/shijian.svg | 1 + src/assets/icons/shijian_mian.svg | 1 + src/assets/icons/shoudan.svg | 1 + src/assets/icons/shouqi.svg | 1 + src/assets/icons/shouqi_mian.svg | 1 + src/assets/icons/shouye.svg | 1 + src/assets/icons/shouye_mian.svg | 1 + src/assets/icons/shouyiren.svg | 1 + src/assets/icons/show.svg | 1 + src/assets/icons/shuangjiantouxiangyou.svg | 1 + src/assets/icons/shuangjiantouxiangzuo.svg | 1 + src/assets/icons/shuaxin.svg | 1 + src/assets/icons/shuju.svg | 1 + src/assets/icons/shuju2.svg | 1 + src/assets/icons/shuju_liuliang.svg | 1 + src/assets/icons/shuju_mian.svg | 1 + src/assets/icons/sort.svg | 1 + src/assets/icons/sousuo.svg | 1 + src/assets/icons/sucai.svg | 1 + src/assets/icons/tianjia.svg | 1 + src/assets/icons/tishi.svg | 1 + src/assets/icons/tishi_mian.svg | 1 + src/assets/icons/tongxunlu_mian.svg | 1 + src/assets/icons/tongzhi.svg | 1 + src/assets/icons/tongzhi_mian.svg | 1 + src/assets/icons/tuichuquanping.svg | 1 + src/assets/icons/tuiguang.svg | 1 + src/assets/icons/tuiguang_mian.svg | 1 + src/assets/icons/tupian.svg | 1 + src/assets/icons/tupian_mian.svg | 1 + src/assets/icons/user_biaoqian.svg | 1 + src/assets/icons/user_gaikuang.svg | 1 + src/assets/icons/user_guanli.svg | 1 + src/assets/icons/wangpudiandan.svg | 1 + src/assets/icons/weixin.svg | 1 + src/assets/icons/weixin_mian.svg | 1 + src/assets/icons/wode.svg | 1 + src/assets/icons/wode_mian.svg | 1 + src/assets/icons/xiangji.svg | 1 + src/assets/icons/xiaoxi.svg | 1 + src/assets/icons/xiazai.svg | 1 + src/assets/icons/xitongquanxian.svg | 1 + src/assets/icons/yingxiao_qipao.svg | 1 + src/assets/icons/yingyezizhi.svg | 1 + src/assets/icons/yinhangka.svg | 1 + src/assets/icons/yiwen.svg | 1 + src/assets/icons/youhui.svg | 1 + src/assets/icons/youjian.svg | 1 + src/assets/icons/youjiantou.svg | 1 + src/assets/icons/yulibao.svg | 1 + src/assets/icons/yuyin.svg | 1 + src/assets/icons/yuyueguanli.svg | 1 + src/assets/icons/yuyueguanlishezhi.svg | 1 + src/assets/icons/zhankai.svg | 1 + src/assets/icons/zhankai_mian.svg | 1 + src/assets/icons/zhibo.svg | 1 + src/assets/icons/zhibo_mian.svg | 1 + src/assets/icons/zhuangxiu.svg | 1 + src/assets/icons/zhuangxiu_mian.svg | 1 + src/assets/icons/zhuoweiguanli.svg | 1 + src/assets/icons/zichanzhuanrang.svg | 1 + src/assets/icons/zuliao.svg | 1 + src/assets/icons/zuliaoyuding.svg | 1 + src/assets/images/cli-loading.gif | Bin 0 -> 4482 bytes src/assets/images/decorate/top_1.png | Bin 0 -> 18237 bytes src/assets/images/decorate/top_2.png | Bin 0 -> 24749 bytes src/assets/images/error.png | Bin 0 -> 2157 bytes .../images/finance_center/total_amount.png | Bin 0 -> 4799 bytes .../images/finance_center/total_order.png | Bin 0 -> 4243 bytes .../finance_center/total_refund_amount.png | Bin 0 -> 4547 bytes .../finance_center/wait_refund_amount.png | Bin 0 -> 5908 bytes src/assets/images/finance_center/yiwen.png | Bin 0 -> 708 bytes src/assets/images/icon_folder.png | Bin 0 -> 605 bytes src/assets/images/idCard.png | Bin 0 -> 2353 bytes src/assets/images/no_perms.png | Bin 0 -> 14619 bytes src/assets/images/report.png | Bin 0 -> 3277 bytes src/assets/images/success.png | Bin 0 -> 2366 bytes src/assets/images/theme_black.png | Bin 0 -> 2564 bytes src/assets/images/theme_white.png | Bin 0 -> 2559 bytes src/components/app-link/index.vue | 38 ++ src/components/area-common/Map.vue | 41 ++ src/components/area-common/Search.vue | 52 ++ src/components/area-common/Table.vue | 86 +++ .../area-common/hooks/useServiceArea.ts | 263 +++++++++ src/components/area-common/styles/area.scss | 12 + src/components/area-common/styles/map.scss | 36 ++ src/components/area-select/index.vue | 55 ++ .../channel-select-user/channel-popup.vue | 87 +++ .../channel-select-user/distributeTable.vue | 107 ++++ src/components/channel-select-user/index.vue | 35 ++ .../channel-select-user/table-detail.vue | 84 +++ .../channel-select-user/userTable.vue | 74 +++ src/components/color-picker/index.vue | 33 ++ src/components/daterange-picker/index.vue | 61 ++ src/components/del-wrap/index.vue | 51 ++ src/components/dict-value/index.vue | 30 + src/components/editor/index.vue | 143 +++++ src/components/footer-btns/index.vue | 30 + src/components/good-select/good-popup.vue | 191 ++++++ src/components/good-select/index.vue | 41 ++ src/components/good-select/table-detail.vue | 71 +++ src/components/icon/index.ts | 19 + src/components/icon/index.vue | 48 ++ src/components/icon/picker.vue | 185 ++++++ src/components/icon/svg-icon.vue | 38 ++ src/components/image-contain/index.vue | 46 ++ src/components/link/activity-center.vue | 89 +++ src/components/link/custom-link.vue | 42 ++ src/components/link/index.ts | 14 + src/components/link/index.vue | 147 +++++ src/components/link/picker.vue | 84 +++ src/components/link/service-classify.vue | 69 +++ src/components/link/service-list.vue | 91 +++ src/components/link/shop-pages.vue | 138 +++++ src/components/material/file.vue | 55 ++ src/components/material/hook.ts | 208 +++++++ src/components/material/index.vue | 521 +++++++++++++++++ src/components/material/picker.vue | 284 +++++++++ src/components/material/preview.vue | 72 +++ .../money-detail/moneyDetailDialog.vue | 55 ++ src/components/overflow-tooltip/index.vue | 47 ++ src/components/pagination/index.vue | 42 ++ src/components/popover-input/index.vue | 130 +++++ src/components/popup/index.vue | 121 ++++ src/components/service-area/index.vue | 54 ++ src/components/service-area/table-detail.vue | 43 ++ src/components/service-select/index.vue | 61 ++ .../service-select/service-popup.vue | 170 ++++++ .../service-select/table-detail.vue | 91 +++ src/components/upload/index.vue | 150 +++++ src/components/user-select/index.vue | 180 ++++++ src/components/video-player/index.vue | 72 +++ src/config/env.ts | 2 + src/config/index.ts | 18 + src/config/setting.ts | 16 + src/config/status.ts | 106 ++++ src/config/symbol.ts | 52 ++ src/directives/index.ts | 16 + src/directives/modules/positive-number.ts | 91 +++ src/enums/appEnums.ts | 40 ++ src/enums/cacheEnums.ts | 8 + src/enums/modeEnum.ts | 184 ++++++ src/enums/pageEnum.ts | 9 + src/enums/requestEnums.ts | 28 + src/env.d.ts | 9 + src/hooks/useCommon.ts | 312 ++++++++++ src/hooks/useCreateModal.ts | 62 ++ src/hooks/useDictOptions.ts | 69 +++ src/hooks/useFetchData.ts | 67 +++ src/hooks/useLockFn.ts | 21 + src/hooks/useMultipleTabs.ts | 57 ++ src/hooks/usePaging.ts | 73 +++ src/hooks/useSettingRule.ts | 56 ++ src/hooks/useWatchRoute.ts | 17 + src/install/directives/copy.ts | 28 + src/install/directives/perms.ts | 28 + src/install/index.ts | 27 + src/install/plugins/echart.ts | 65 +++ src/install/plugins/element.ts | 11 + src/install/plugins/hljs.ts | 8 + src/install/plugins/pinia.ts | 6 + src/install/plugins/router.ts | 6 + src/layout/components/footer.vue | 14 + .../default/components/header/breadcrumb.vue | 20 + src/layout/default/components/header/fold.vue | 15 + .../default/components/header/full-screen.vue | 10 + .../default/components/header/index.vue | 55 ++ .../components/header/multiple-tabs.vue | 132 +++++ .../default/components/header/refresh.vue | 14 + .../components/header/user-drop-down.vue | 34 ++ src/layout/default/components/main.vue | 32 + .../default/components/setting/drawer.vue | 182 ++++++ .../default/components/setting/index.vue | 19 + .../default/components/sidebar/index.vue | 44 ++ .../default/components/sidebar/logo.vue | 61 ++ .../default/components/sidebar/menu-item.vue | 87 +++ .../default/components/sidebar/menu.vue | 101 ++++ .../default/components/sidebar/side.vue | 66 +++ src/layout/default/index.vue | 26 + src/main.ts | 14 + src/permission.ts | 84 +++ src/router/index.ts | 110 ++++ src/router/routes.ts | 431 ++++++++++++++ src/stores/index.ts | 3 + src/stores/modules/app.ts | 53 ++ src/stores/modules/multipleTabs.ts | 164 ++++++ src/stores/modules/setting.ts | 55 ++ src/stores/modules/user.ts | 96 +++ src/styles/dark.css | 49 ++ src/styles/element.scss | 145 +++++ src/styles/index.scss | 6 + src/styles/public.scss | 76 +++ src/styles/tailwind.css | 3 + src/styles/var.css | 51 ++ src/utils/area.ts | 1 + src/utils/auth.ts | 18 + src/utils/cache.ts | 50 ++ src/utils/enum.ts | 4 + src/utils/env.ts | 13 + src/utils/feedback.ts | 107 ++++ src/utils/file.ts | 16 + src/utils/request/axios.ts | 167 ++++++ src/utils/request/cancel.ts | 31 + src/utils/request/index.ts | 130 +++++ src/utils/request/type.d.ts | 38 ++ src/utils/table2excel.ts | 10 + src/utils/theme.ts | 74 +++ src/utils/util.ts | 274 +++++++++ src/utils/validate.ts | 359 ++++++++++++ src/views/account/images/login_bg.png | Bin 0 -> 59273 bytes src/views/account/login.vue | 116 ++++ .../account_center/organization/index.vue | 0 src/views/account_center/position/index.vue | 0 .../organization/organization-tree.vue | 120 ++++ .../components/organization/structure.vue | 40 ++ .../account_center/sub_account/index.vue | 22 + .../sub_account/modules/account-list.vue | 15 + .../sub_account/modules/account-number.vue | 14 + .../sub_account/modules/organization.vue | 77 +++ .../coupon/component/selectuser.vue | 107 ++++ .../coupon/components/selectuser.vue | 219 +++++++ src/views/application/coupon/coupon.vue | 306 ++++++++++ src/views/application/coupon/detail.vue | 266 +++++++++ src/views/application/coupon/edit.vue | 484 +++++++++++++++ src/views/application/drawlist/drawlist.vue | 229 ++++++++ src/views/application/recharge/index.vue | 130 +++++ src/views/channel/dyapp.vue | 183 ++++++ src/views/channel/h5.vue | 61 ++ src/views/channel/weapp.vue | 177 ++++++ src/views/channel/wx_dev.vue | 62 ++ src/views/channel/wx_oa/config.vue | 195 +++++++ src/views/channel/wx_oa/menu.vue | 45 ++ src/views/channel/wx_oa/menu_com/oa-attr.vue | 85 +++ .../wx_oa/menu_com/oa-menu-form-edit.vue | 73 +++ .../channel/wx_oa/menu_com/oa-menu-form.vue | 107 ++++ src/views/channel/wx_oa/menu_com/oa-phone.vue | 121 ++++ src/views/channel/wx_oa/menu_com/useMenuOa.ts | 162 ++++++ .../channel/wx_oa/reply/default_reply.vue | 122 ++++ src/views/channel/wx_oa/reply/edit.vue | 189 ++++++ .../channel/wx_oa/reply/follow_reply.vue | 123 ++++ .../channel/wx_oa/reply/keyword_reply.vue | 140 +++++ src/views/customer/index.vue | 0 src/views/decorate/component/add-nav.vue | 79 +++ src/views/decorate/component/add-sub.vue | 77 +++ .../decorate/component/decoration-img.vue | 67 +++ .../decorate/component/pages/attr-setting.vue | 28 + src/views/decorate/component/pages/menu.vue | 44 ++ .../decorate/component/pages/preview.vue | 74 +++ .../component/widgets/banner/attr.vue | 80 +++ .../component/widgets/banner/content.vue | 45 ++ .../component/widgets/banner/index.ts | 8 + .../component/widgets/banner/options.ts | 15 + .../widgets/category/add-category.vue | 111 ++++ .../component/widgets/category/attr.vue | 44 ++ .../component/widgets/category/content.vue | 120 ++++ .../component/widgets/category/index.ts | 8 + .../component/widgets/category/options.ts | 26 + .../widgets/customer-service/attr.vue | 52 ++ .../widgets/customer-service/content.vue | 39 ++ .../widgets/customer-service/index.ts | 8 + .../widgets/customer-service/options.ts | 11 + .../widgets/home-title/add-title-image.vue | 79 +++ .../component/widgets/home-title/attr.vue | 42 ++ .../component/widgets/home-title/content.vue | 41 ++ .../component/widgets/home-title/index.ts | 8 + .../component/widgets/home-title/options.ts | 14 + .../decorate/component/widgets/hot/attr.vue | 20 + .../component/widgets/hot/content.vue | 145 +++++ .../decorate/component/widgets/hot/index.ts | 8 + .../decorate/component/widgets/hot/options.ts | 7 + src/views/decorate/component/widgets/index.ts | 14 + .../component/widgets/my-coupon/attr.vue | 40 ++ .../component/widgets/my-coupon/content.vue | 56 ++ .../component/widgets/my-coupon/index.ts | 8 + .../component/widgets/my-coupon/options.ts | 35 ++ .../component/widgets/my-service/attr.vue | 40 ++ .../component/widgets/my-service/content.vue | 67 +++ .../component/widgets/my-service/index.ts | 8 + .../component/widgets/my-service/options.ts | 17 + .../component/widgets/my-subscribe/attr.vue | 32 + .../widgets/my-subscribe/content.vue | 68 +++ .../component/widgets/my-subscribe/index.ts | 8 + .../component/widgets/my-subscribe/options.ts | 40 ++ .../component/widgets/my-task/attr.vue | 32 + .../component/widgets/my-task/content.vue | 60 ++ .../component/widgets/my-task/index.ts | 8 + .../component/widgets/my-task/options.ts | 34 ++ .../decorate/component/widgets/nav/attr.vue | 44 ++ .../component/widgets/nav/content.vue | 38 ++ .../decorate/component/widgets/nav/index.ts | 8 + .../decorate/component/widgets/nav/options.ts | 15 + .../component/widgets/search/attr.vue | 20 + .../component/widgets/search/content.vue | 32 + .../component/widgets/search/index.ts | 8 + .../component/widgets/search/options.ts | 7 + .../widgets/sticky-category/add-category.vue | 103 ++++ .../widgets/sticky-category/attr.vue | 45 ++ .../widgets/sticky-category/content.vue | 42 ++ .../widgets/sticky-category/index.ts | 8 + .../widgets/sticky-category/options.ts | 25 + .../component/widgets/user-banner/attr.vue | 79 +++ .../component/widgets/user-banner/content.vue | 37 ++ .../component/widgets/user-banner/index.ts | 8 + .../component/widgets/user-banner/options.ts | 15 + .../component/widgets/user-info/attr.vue | 38 ++ .../component/widgets/user-info/bg-image.vue | 56 ++ .../component/widgets/user-info/content.vue | 49 ++ .../user-info/images/default_avatar.png | Bin 0 -> 6093 bytes .../widgets/user-info/images/my_bg.png | Bin 0 -> 17834 bytes .../widgets/user-info/images/my_topbg.png | Bin 0 -> 142469 bytes .../component/widgets/user-info/index.ts | 8 + .../component/widgets/user-info/options.ts | 12 + src/views/decorate/pages/index.vue | 122 ++++ src/views/decorate/tabbar.vue | 202 +++++++ src/views/dev_tools/code/edit.vue | 388 +++++++++++++ src/views/dev_tools/code/index.vue | 246 ++++++++ .../dev_tools/components/code-preview.vue | 63 ++ src/views/dev_tools/components/data-table.vue | 102 ++++ .../distributor/components/QrcodeDialog.vue | 99 ++++ src/views/distributor/coupon.vue | 256 ++++++++ .../components/group_form.vue | 99 ++++ .../distributor/distributor_group/index.vue | 109 ++++ src/views/distributor/edit.vue | 233 ++++++++ src/views/distributor/index.vue | 315 ++++++++++ src/views/distributor/interface/index.ts | 19 + src/views/distributor/order.vue | 230 ++++++++ src/views/distributor/register.vue | 151 +++++ src/views/distributor/userDetail.vue | 151 +++++ src/views/error/403.vue | 15 + src/views/error/404.vue | 9 + src/views/error/components/error.vue | 57 ++ src/views/finance/balance/index.vue | 140 +++++ src/views/finance/center/index.vue | 99 ++++ src/views/finance/recharge/index.vue | 134 +++++ src/views/finance/withdraw/index.vue | 115 ++++ src/views/master_worker/apply.vue | 114 ++++ src/views/master_worker/cancelOrder/list.vue | 172 ++++++ src/views/master_worker/cancelOrder/rule.vue | 212 +++++++ .../components/physicalDialog.vue | 128 ++++ .../master_worker/components/previewPdf.vue | 12 + .../components/previewPdfDialog.vue | 27 + .../master_worker/components/previewPic.vue | 23 + .../master_worker/components/reasonDialog.vue | 52 ++ .../master_worker/components/uploadDialog.vue | 129 ++++ src/views/master_worker/detail.vue | 226 +++++++ src/views/master_worker/edit.vue | 246 ++++++++ src/views/master_worker/feedback.vue | 200 +++++++ src/views/master_worker/index.vue | 332 +++++++++++ src/views/master_worker/physical.vue | 175 ++++++ src/views/master_worker/staff.vue | 368 ++++++++++++ .../master_worker/staffUseInstruction.vue | 56 ++ src/views/master_worker/userList/index.vue | 104 ++++ src/views/master_worker/userManual.vue | 8 + src/views/material/index.vue | 59 ++ src/views/message/notice/edit.vue | 122 ++++ src/views/message/notice/index.vue | 100 ++++ src/views/message/short_letter/edit.vue | 130 +++++ src/views/message/short_letter/index.vue | 56 ++ .../lists/components/cancelOrderDialog.vue | 133 +++++ .../order/lists/components/dispatchDialog.vue | 69 +++ .../order/lists/components/operation.vue | 184 ++++++ src/views/order/lists/detail.vue | 549 ++++++++++++++++++ src/views/order/lists/hook.ts | 40 ++ src/views/order/lists/index.vue | 268 +++++++++ .../order/record/components/log-form.vue | 79 +++ src/views/order/record/index.vue | 251 ++++++++ src/views/organization/department/edit.vue | 172 ++++++ src/views/organization/department/index.vue | 166 ++++++ src/views/organization/post/edit.vue | 120 ++++ src/views/organization/post/index.vue | 128 ++++ src/views/permission/admin/edit.vue | 262 +++++++++ src/views/permission/admin/index.vue | 164 ++++++ src/views/permission/menu/edit.vue | 315 ++++++++++ src/views/permission/menu/index.vue | 157 +++++ src/views/permission/role/auth.vue | 154 +++++ src/views/permission/role/edit.vue | 112 ++++ src/views/permission/role/index.vue | 108 ++++ src/views/service/activity/form.vue | 113 ++++ src/views/service/activity/index.vue | 128 ++++ .../service/area/components/infoDialog.vue | 70 +++ src/views/service/area/index.vue | 38 ++ .../category/components/category-form.vue | 200 +++++++ src/views/service/category/edit.vue | 181 ++++++ src/views/service/category/index.vue | 142 +++++ .../evaluate/components/evaluate-form.vue | 76 +++ .../evaluate/components/scoreDialog.vue | 85 +++ src/views/service/evaluate/index.vue | 294 ++++++++++ .../service/lists/components/base-setting.vue | 147 +++++ src/views/service/lists/edit.vue | 190 ++++++ src/views/service/lists/index.vue | 298 ++++++++++ .../components/automatic-interval.vue | 180 ++++++ .../subscribe/components/customization.vue | 180 ++++++ src/views/service/subscribe/edit.vue | 238 ++++++++ src/views/service/subscribe/index.vue | 138 +++++ .../service/unit/components/unit-form.vue | 132 +++++ src/views/service/unit/index.vue | 68 +++ src/views/setting/dict/data/edit.vue | 129 ++++ src/views/setting/dict/data/index.vue | 174 ++++++ src/views/setting/dict/type/edit.vue | 111 ++++ src/views/setting/dict/type/index.vue | 173 ++++++ src/views/setting/map/map_config/index.vue | 68 +++ src/views/setting/payment/admin/.eslintrc.cjs | 42 ++ src/views/setting/payment/admin/.gitignore | 36 ++ .../payment/admin/.vscode/extensions.json | 3 + .../payment/admin/.vscode/settings.json | 11 + src/views/setting/payment/admin/README.md | 46 ++ src/views/setting/payment/admin/deploy.sh | 17 + src/views/setting/payment/admin/env.d.ts | 3 + src/views/setting/payment/admin/index.html | 66 +++ .../payment_config/component/config-form.vue | 283 +++++++++ .../setting/payment/payment_config/index.vue | 52 ++ .../setting/payment/payment_way/edit.vue | 113 ++++ .../setting/payment/payment_way/index.vue | 96 +++ src/views/setting/search/index.vue | 175 ++++++ src/views/setting/storage/edit.vue | 196 +++++++ src/views/setting/storage/index.vue | 65 +++ src/views/setting/system/cache.vue | 260 +++++++++ src/views/setting/system/environment.vue | 142 +++++ src/views/setting/system/journal.vue | 120 ++++ src/views/setting/system/task/edit.vue | 147 +++++ src/views/setting/system/task/index.vue | 128 ++++ .../setting/transaction_settings/index.vue | 94 +++ src/views/setting/user/login_register.vue | 178 ++++++ src/views/setting/user/setup.vue | 65 +++ src/views/setting/website/filing.vue | 93 +++ src/views/setting/website/information.vue | 165 ++++++ src/views/setting/website/protocol.vue | 56 ++ src/views/summary/index.vue | 0 src/views/user/refund_rule/index.vue | 113 ++++ src/views/user/refund_rule/setting_rule.vue | 203 +++++++ src/views/user/setting.vue | 157 +++++ src/views/user/userList/components/adjust.vue | 98 ++++ .../user/userList/components/popover-user.vue | 101 ++++ src/views/user/userList/detail.vue | 203 +++++++ src/views/user/userList/index.vue | 104 ++++ src/views/workbench/images/ad.png | Bin 0 -> 2244 bytes src/views/workbench/images/coupon.png | Bin 0 -> 1149 bytes src/views/workbench/images/distributor.png | Bin 0 -> 2119 bytes src/views/workbench/images/goods_category.png | Bin 0 -> 2364 bytes src/views/workbench/images/goods_lists.png | Bin 0 -> 2786 bytes src/views/workbench/images/index_decorate.png | Bin 0 -> 1880 bytes src/views/workbench/images/news_notice.png | Bin 0 -> 5757 bytes src/views/workbench/images/order.png | Bin 0 -> 2809 bytes src/views/workbench/images/set_payment.png | Bin 0 -> 4564 bytes src/views/workbench/images/staff.png | Bin 0 -> 2583 bytes src/views/workbench/index.vue | 259 +++++++++ tailwind.config.js | 133 +++++ tsconfig.config.json | 8 + tsconfig.json | 23 + typings/index.d.ts | 9 + typings/router.d.ts | 14 + vite.config.ts | 70 +++ 677 files changed, 36287 insertions(+) create mode 100644 .env create mode 100644 .eslintrc.cjs create mode 100644 .gitignore create mode 100644 .vscode/extensions.json create mode 100644 .vscode/settings.json create mode 100644 README.md create mode 100644 first create mode 100644 global.d.ts create mode 100644 index.html create mode 100644 package.json create mode 100644 postcss.config.js create mode 100644 scripts/build.mjs create mode 100644 src/App.vue create mode 100644 src/api/app.ts create mode 100644 src/api/application.ts create mode 100644 src/api/application/coupon.ts create mode 100644 src/api/application/recharge.ts create mode 100644 src/api/channel/dyapp.ts create mode 100644 src/api/channel/h5.ts create mode 100644 src/api/channel/weapp.ts create mode 100644 src/api/channel/wx_dev.ts create mode 100644 src/api/channel/wx_oa.ts create mode 100644 src/api/consumer.ts create mode 100644 src/api/decorate/index.ts create mode 100644 src/api/distributor/group.ts create mode 100644 src/api/distributor/lists.ts create mode 100644 src/api/file.ts create mode 100644 src/api/finance/balance.ts create mode 100644 src/api/finance/center.ts create mode 100644 src/api/finance/recharge.ts create mode 100644 src/api/finance/record.ts create mode 100644 src/api/finance/withdraw.ts create mode 100644 src/api/master_worker/index.ts create mode 100644 src/api/message.ts create mode 100644 src/api/order/lists.ts create mode 100644 src/api/org/department.ts create mode 100644 src/api/org/post.ts create mode 100644 src/api/perms/admin.ts create mode 100644 src/api/perms/menu.ts create mode 100644 src/api/perms/role.ts create mode 100644 src/api/service/activity.ts create mode 100644 src/api/service/area.ts create mode 100644 src/api/service/category.ts create mode 100644 src/api/service/evaluate.ts create mode 100644 src/api/service/lists.ts create mode 100644 src/api/service/subscribe.ts create mode 100644 src/api/service/unit.ts create mode 100644 src/api/setting/dict.ts create mode 100644 src/api/setting/map.ts create mode 100644 src/api/setting/payment.ts create mode 100644 src/api/setting/search.ts create mode 100644 src/api/setting/storage.ts create mode 100644 src/api/setting/system.ts create mode 100644 src/api/setting/user.ts create mode 100644 src/api/setting/website.ts create mode 100644 src/api/shop.ts create mode 100644 src/api/tools/code.ts create mode 100644 src/api/transaction_settings/index.ts create mode 100644 src/api/user.ts create mode 100644 src/assets/icons/Androidfanhui.svg create mode 100644 src/assets/icons/KMSguanli.svg create mode 100644 src/assets/icons/KTVyuding.svg create mode 100644 src/assets/icons/a-tixingdengpao.svg create mode 100644 src/assets/icons/anquan.svg create mode 100644 src/assets/icons/anquan_mian.svg create mode 100644 src/assets/icons/anquan_mian1.svg create mode 100644 src/assets/icons/banxing_mian.svg create mode 100644 src/assets/icons/baoxian.svg create mode 100644 src/assets/icons/bendishenghuodaxue.svg create mode 100644 src/assets/icons/bianji.svg create mode 100644 src/assets/icons/biaoqing.svg create mode 100644 src/assets/icons/bukejian.svg create mode 100644 src/assets/icons/caipinguanli.svg create mode 100644 src/assets/icons/caiwu.svg create mode 100644 src/assets/icons/caiwu_jifen.svg create mode 100644 src/assets/icons/caiwu_tixian.svg create mode 100644 src/assets/icons/canyinfuwu.svg create mode 100644 src/assets/icons/carryout.svg create mode 100644 src/assets/icons/chexiao.svg create mode 100644 src/assets/icons/chihuohongbao.svg create mode 100644 src/assets/icons/chuangyiwuliao.svg create mode 100644 src/assets/icons/close.svg create mode 100644 src/assets/icons/daiyunying.svg create mode 100644 src/assets/icons/danwei.svg create mode 100644 src/assets/icons/danxuankuang.svg create mode 100644 src/assets/icons/danxuanxuanzhong.svg create mode 100644 src/assets/icons/dayin.svg create mode 100644 src/assets/icons/dayin_mian.svg create mode 100644 src/assets/icons/del.svg create mode 100644 src/assets/icons/diancanshezhi.svg create mode 100644 src/assets/icons/dianhua.svg create mode 100644 src/assets/icons/dianhua_mian.svg create mode 100644 src/assets/icons/dianpu_fengge.svg create mode 100644 src/assets/icons/dianputuijian.svg create mode 100644 src/assets/icons/dianzifapiao.svg create mode 100644 src/assets/icons/dingcan.svg create mode 100644 src/assets/icons/dingdan.svg create mode 100644 src/assets/icons/dingdan1.svg create mode 100644 src/assets/icons/dingdan_mian.svg create mode 100644 src/assets/icons/dingwei.svg create mode 100644 src/assets/icons/dingwei_mian.svg create mode 100644 src/assets/icons/ditu.svg create mode 100644 src/assets/icons/ditu_mian.svg create mode 100644 src/assets/icons/duizhang.svg create mode 100644 src/assets/icons/elemo.svg create mode 100644 src/assets/icons/ezhanggui.svg create mode 100644 src/assets/icons/falvfuwubaoxiaohei.svg create mode 100644 src/assets/icons/fengniaopaotui.svg create mode 100644 src/assets/icons/fenxiang.svg create mode 100644 src/assets/icons/fukuan.svg create mode 100644 src/assets/icons/fukuan_mian.svg create mode 100644 src/assets/icons/fullscreen-exit.svg create mode 100644 src/assets/icons/fullscreen.svg create mode 100644 src/assets/icons/fuwushichang.svg create mode 100644 src/assets/icons/fuzhi.svg create mode 100644 src/assets/icons/gaode.svg create mode 100644 src/assets/icons/gengduo.svg create mode 100644 src/assets/icons/gengduoandroid.svg create mode 100644 src/assets/icons/gift.svg create mode 100644 src/assets/icons/gongyingshang.svg create mode 100644 src/assets/icons/goods.svg create mode 100644 src/assets/icons/gou.svg create mode 100644 src/assets/icons/gouwuche.svg create mode 100644 src/assets/icons/gouxuan.svg create mode 100644 src/assets/icons/gouxuan_mian.svg create mode 100644 src/assets/icons/guanbi.svg create mode 100644 src/assets/icons/guanli.svg create mode 100644 src/assets/icons/guanli_mian.svg create mode 100644 src/assets/icons/gukefapiao.svg create mode 100644 src/assets/icons/haibaosheji.svg create mode 100644 src/assets/icons/heshoujilu.svg create mode 100644 src/assets/icons/heshoujilu1.svg create mode 100644 src/assets/icons/hexiao_order.svg create mode 100644 src/assets/icons/hide-2.svg create mode 100644 src/assets/icons/hide.svg create mode 100644 src/assets/icons/hongbao.svg create mode 100644 src/assets/icons/huiche.svg create mode 100644 src/assets/icons/huiyuanyingxiao.svg create mode 100644 src/assets/icons/huodongbaoming.svg create mode 100644 src/assets/icons/huodongguanli.svg create mode 100644 src/assets/icons/huodongzhongxin.svg create mode 100644 src/assets/icons/huojian.svg create mode 100644 src/assets/icons/huojian_mian.svg create mode 100644 src/assets/icons/huolala.svg create mode 100644 src/assets/icons/iOSfanhui.svg create mode 100644 src/assets/icons/jia.svg create mode 100644 src/assets/icons/jia_mian.svg create mode 100644 src/assets/icons/jian.svg create mode 100644 src/assets/icons/jian_mian.svg create mode 100644 src/assets/icons/jianpan.svg create mode 100644 src/assets/icons/jianpanshanchu.svg create mode 100644 src/assets/icons/jianshao.svg create mode 100644 src/assets/icons/jiaopeiwangputong.svg create mode 100644 src/assets/icons/jiaoyi.svg create mode 100644 src/assets/icons/jiedan.svg create mode 100644 src/assets/icons/jiekuan.svg create mode 100644 src/assets/icons/jingshi.svg create mode 100644 src/assets/icons/jingshi_mian.svg create mode 100644 src/assets/icons/jingshi_mian1.svg create mode 100644 src/assets/icons/jingyin.svg create mode 100644 src/assets/icons/jingyin_mian.svg create mode 100644 src/assets/icons/jingying.svg create mode 100644 src/assets/icons/jingying_mian.svg create mode 100644 src/assets/icons/jingyinggonglve.svg create mode 100644 src/assets/icons/jingzhunyingxiao.svg create mode 100644 src/assets/icons/jinhuo.svg create mode 100644 src/assets/icons/kaitongwaimai.svg create mode 100644 src/assets/icons/kanjia.svg create mode 100644 src/assets/icons/kefu.svg create mode 100644 src/assets/icons/kejian.svg create mode 100644 src/assets/icons/kejian_mian.svg create mode 100644 src/assets/icons/keziyuyue.svg create mode 100644 src/assets/icons/kezizhongxin.svg create mode 100644 src/assets/icons/koubei.svg create mode 100644 src/assets/icons/kuaijiehuifu.svg create mode 100644 src/assets/icons/ladu_mian.svg create mode 100644 src/assets/icons/lanyadingwei.svg create mode 100644 src/assets/icons/list-2.svg create mode 100644 src/assets/icons/mendiandongtai.svg create mode 100644 src/assets/icons/mishiyuding.svg create mode 100644 src/assets/icons/mishiyuding1.svg create mode 100644 src/assets/icons/notice_buyer.svg create mode 100644 src/assets/icons/open.svg create mode 100644 src/assets/icons/paiduiquhao.svg create mode 100644 src/assets/icons/paimai.svg create mode 100644 src/assets/icons/pdf.svg create mode 100644 src/assets/icons/pingjia.svg create mode 100644 src/assets/icons/pingtaifapiao.svg create mode 100644 src/assets/icons/pinpai.svg create mode 100644 src/assets/icons/qianbao.svg create mode 100644 src/assets/icons/qianbao_mian.svg create mode 100644 src/assets/icons/qiehuan.svg create mode 100644 src/assets/icons/qingchu.svg create mode 100644 src/assets/icons/qingchu_mian.svg create mode 100644 src/assets/icons/qishoupeisong.svg create mode 100644 src/assets/icons/qiyedingcan.svg create mode 100644 src/assets/icons/qiyedingcan1.svg create mode 100644 src/assets/icons/quanbu.svg create mode 100644 src/assets/icons/quanping.svg create mode 100644 src/assets/icons/qudao.svg create mode 100644 src/assets/icons/qudao_xiaochengxu.svg create mode 100644 src/assets/icons/rencaizhaopin.svg create mode 100644 src/assets/icons/rili.svg create mode 100644 src/assets/icons/rili2.svg create mode 100644 src/assets/icons/rizhi.svg create mode 100644 src/assets/icons/saoma.svg create mode 100644 src/assets/icons/set_pay.svg create mode 100644 src/assets/icons/set_peisong.svg create mode 100644 src/assets/icons/set_user.svg create mode 100644 src/assets/icons/set_weihu.svg create mode 100644 src/assets/icons/shanchu.svg create mode 100644 src/assets/icons/shanchu_mian.svg create mode 100644 src/assets/icons/shangchuan.svg create mode 100644 src/assets/icons/shangchuanzhaopian.svg create mode 100644 src/assets/icons/shangpinguanli.svg create mode 100644 src/assets/icons/shangpinzhushou.svg create mode 100644 src/assets/icons/shangpuyuding.svg create mode 100644 src/assets/icons/shebeiguanli.svg create mode 100644 src/assets/icons/shengfuwangputong.svg create mode 100644 src/assets/icons/shengyin.svg create mode 100644 src/assets/icons/shengyin_mian.svg create mode 100644 src/assets/icons/shezhi.svg create mode 100644 src/assets/icons/shezhi_mian.svg create mode 100644 src/assets/icons/shichang.svg create mode 100644 src/assets/icons/shichang_mian.svg create mode 100644 src/assets/icons/shijian.svg create mode 100644 src/assets/icons/shijian_mian.svg create mode 100644 src/assets/icons/shoudan.svg create mode 100644 src/assets/icons/shouqi.svg create mode 100644 src/assets/icons/shouqi_mian.svg create mode 100644 src/assets/icons/shouye.svg create mode 100644 src/assets/icons/shouye_mian.svg create mode 100644 src/assets/icons/shouyiren.svg create mode 100644 src/assets/icons/show.svg create mode 100644 src/assets/icons/shuangjiantouxiangyou.svg create mode 100644 src/assets/icons/shuangjiantouxiangzuo.svg create mode 100644 src/assets/icons/shuaxin.svg create mode 100644 src/assets/icons/shuju.svg create mode 100644 src/assets/icons/shuju2.svg create mode 100644 src/assets/icons/shuju_liuliang.svg create mode 100644 src/assets/icons/shuju_mian.svg create mode 100644 src/assets/icons/sort.svg create mode 100644 src/assets/icons/sousuo.svg create mode 100644 src/assets/icons/sucai.svg create mode 100644 src/assets/icons/tianjia.svg create mode 100644 src/assets/icons/tishi.svg create mode 100644 src/assets/icons/tishi_mian.svg create mode 100644 src/assets/icons/tongxunlu_mian.svg create mode 100644 src/assets/icons/tongzhi.svg create mode 100644 src/assets/icons/tongzhi_mian.svg create mode 100644 src/assets/icons/tuichuquanping.svg create mode 100644 src/assets/icons/tuiguang.svg create mode 100644 src/assets/icons/tuiguang_mian.svg create mode 100644 src/assets/icons/tupian.svg create mode 100644 src/assets/icons/tupian_mian.svg create mode 100644 src/assets/icons/user_biaoqian.svg create mode 100644 src/assets/icons/user_gaikuang.svg create mode 100644 src/assets/icons/user_guanli.svg create mode 100644 src/assets/icons/wangpudiandan.svg create mode 100644 src/assets/icons/weixin.svg create mode 100644 src/assets/icons/weixin_mian.svg create mode 100644 src/assets/icons/wode.svg create mode 100644 src/assets/icons/wode_mian.svg create mode 100644 src/assets/icons/xiangji.svg create mode 100644 src/assets/icons/xiaoxi.svg create mode 100644 src/assets/icons/xiazai.svg create mode 100644 src/assets/icons/xitongquanxian.svg create mode 100644 src/assets/icons/yingxiao_qipao.svg create mode 100644 src/assets/icons/yingyezizhi.svg create mode 100644 src/assets/icons/yinhangka.svg create mode 100644 src/assets/icons/yiwen.svg create mode 100644 src/assets/icons/youhui.svg create mode 100644 src/assets/icons/youjian.svg create mode 100644 src/assets/icons/youjiantou.svg create mode 100644 src/assets/icons/yulibao.svg create mode 100644 src/assets/icons/yuyin.svg create mode 100644 src/assets/icons/yuyueguanli.svg create mode 100644 src/assets/icons/yuyueguanlishezhi.svg create mode 100644 src/assets/icons/zhankai.svg create mode 100644 src/assets/icons/zhankai_mian.svg create mode 100644 src/assets/icons/zhibo.svg create mode 100644 src/assets/icons/zhibo_mian.svg create mode 100644 src/assets/icons/zhuangxiu.svg create mode 100644 src/assets/icons/zhuangxiu_mian.svg create mode 100644 src/assets/icons/zhuoweiguanli.svg create mode 100644 src/assets/icons/zichanzhuanrang.svg create mode 100644 src/assets/icons/zuliao.svg create mode 100644 src/assets/icons/zuliaoyuding.svg create mode 100644 src/assets/images/cli-loading.gif create mode 100644 src/assets/images/decorate/top_1.png create mode 100644 src/assets/images/decorate/top_2.png create mode 100644 src/assets/images/error.png create mode 100644 src/assets/images/finance_center/total_amount.png create mode 100644 src/assets/images/finance_center/total_order.png create mode 100644 src/assets/images/finance_center/total_refund_amount.png create mode 100644 src/assets/images/finance_center/wait_refund_amount.png create mode 100644 src/assets/images/finance_center/yiwen.png create mode 100644 src/assets/images/icon_folder.png create mode 100644 src/assets/images/idCard.png create mode 100644 src/assets/images/no_perms.png create mode 100644 src/assets/images/report.png create mode 100644 src/assets/images/success.png create mode 100644 src/assets/images/theme_black.png create mode 100644 src/assets/images/theme_white.png create mode 100644 src/components/app-link/index.vue create mode 100644 src/components/area-common/Map.vue create mode 100644 src/components/area-common/Search.vue create mode 100644 src/components/area-common/Table.vue create mode 100644 src/components/area-common/hooks/useServiceArea.ts create mode 100644 src/components/area-common/styles/area.scss create mode 100644 src/components/area-common/styles/map.scss create mode 100644 src/components/area-select/index.vue create mode 100644 src/components/channel-select-user/channel-popup.vue create mode 100644 src/components/channel-select-user/distributeTable.vue create mode 100644 src/components/channel-select-user/index.vue create mode 100644 src/components/channel-select-user/table-detail.vue create mode 100644 src/components/channel-select-user/userTable.vue create mode 100644 src/components/color-picker/index.vue create mode 100644 src/components/daterange-picker/index.vue create mode 100644 src/components/del-wrap/index.vue create mode 100644 src/components/dict-value/index.vue create mode 100644 src/components/editor/index.vue create mode 100644 src/components/footer-btns/index.vue create mode 100644 src/components/good-select/good-popup.vue create mode 100644 src/components/good-select/index.vue create mode 100644 src/components/good-select/table-detail.vue create mode 100644 src/components/icon/index.ts create mode 100644 src/components/icon/index.vue create mode 100644 src/components/icon/picker.vue create mode 100644 src/components/icon/svg-icon.vue create mode 100644 src/components/image-contain/index.vue create mode 100644 src/components/link/activity-center.vue create mode 100644 src/components/link/custom-link.vue create mode 100644 src/components/link/index.ts create mode 100644 src/components/link/index.vue create mode 100644 src/components/link/picker.vue create mode 100644 src/components/link/service-classify.vue create mode 100644 src/components/link/service-list.vue create mode 100644 src/components/link/shop-pages.vue create mode 100644 src/components/material/file.vue create mode 100644 src/components/material/hook.ts create mode 100644 src/components/material/index.vue create mode 100644 src/components/material/picker.vue create mode 100644 src/components/material/preview.vue create mode 100644 src/components/money-detail/moneyDetailDialog.vue create mode 100644 src/components/overflow-tooltip/index.vue create mode 100644 src/components/pagination/index.vue create mode 100644 src/components/popover-input/index.vue create mode 100644 src/components/popup/index.vue create mode 100644 src/components/service-area/index.vue create mode 100644 src/components/service-area/table-detail.vue create mode 100644 src/components/service-select/index.vue create mode 100644 src/components/service-select/service-popup.vue create mode 100644 src/components/service-select/table-detail.vue create mode 100644 src/components/upload/index.vue create mode 100644 src/components/user-select/index.vue create mode 100644 src/components/video-player/index.vue create mode 100644 src/config/env.ts create mode 100644 src/config/index.ts create mode 100644 src/config/setting.ts create mode 100644 src/config/status.ts create mode 100644 src/config/symbol.ts create mode 100644 src/directives/index.ts create mode 100644 src/directives/modules/positive-number.ts create mode 100644 src/enums/appEnums.ts create mode 100644 src/enums/cacheEnums.ts create mode 100644 src/enums/modeEnum.ts create mode 100644 src/enums/pageEnum.ts create mode 100644 src/enums/requestEnums.ts create mode 100644 src/env.d.ts create mode 100644 src/hooks/useCommon.ts create mode 100644 src/hooks/useCreateModal.ts create mode 100644 src/hooks/useDictOptions.ts create mode 100644 src/hooks/useFetchData.ts create mode 100644 src/hooks/useLockFn.ts create mode 100644 src/hooks/useMultipleTabs.ts create mode 100644 src/hooks/usePaging.ts create mode 100644 src/hooks/useSettingRule.ts create mode 100644 src/hooks/useWatchRoute.ts create mode 100644 src/install/directives/copy.ts create mode 100644 src/install/directives/perms.ts create mode 100644 src/install/index.ts create mode 100644 src/install/plugins/echart.ts create mode 100644 src/install/plugins/element.ts create mode 100644 src/install/plugins/hljs.ts create mode 100644 src/install/plugins/pinia.ts create mode 100644 src/install/plugins/router.ts create mode 100644 src/layout/components/footer.vue create mode 100644 src/layout/default/components/header/breadcrumb.vue create mode 100644 src/layout/default/components/header/fold.vue create mode 100644 src/layout/default/components/header/full-screen.vue create mode 100644 src/layout/default/components/header/index.vue create mode 100644 src/layout/default/components/header/multiple-tabs.vue create mode 100644 src/layout/default/components/header/refresh.vue create mode 100644 src/layout/default/components/header/user-drop-down.vue create mode 100644 src/layout/default/components/main.vue create mode 100644 src/layout/default/components/setting/drawer.vue create mode 100644 src/layout/default/components/setting/index.vue create mode 100644 src/layout/default/components/sidebar/index.vue create mode 100644 src/layout/default/components/sidebar/logo.vue create mode 100644 src/layout/default/components/sidebar/menu-item.vue create mode 100644 src/layout/default/components/sidebar/menu.vue create mode 100644 src/layout/default/components/sidebar/side.vue create mode 100644 src/layout/default/index.vue create mode 100644 src/main.ts create mode 100644 src/permission.ts create mode 100644 src/router/index.ts create mode 100644 src/router/routes.ts create mode 100644 src/stores/index.ts create mode 100644 src/stores/modules/app.ts create mode 100644 src/stores/modules/multipleTabs.ts create mode 100644 src/stores/modules/setting.ts create mode 100644 src/stores/modules/user.ts create mode 100644 src/styles/dark.css create mode 100644 src/styles/element.scss create mode 100644 src/styles/index.scss create mode 100644 src/styles/public.scss create mode 100644 src/styles/tailwind.css create mode 100644 src/styles/var.css create mode 100644 src/utils/area.ts create mode 100644 src/utils/auth.ts create mode 100644 src/utils/cache.ts create mode 100644 src/utils/enum.ts create mode 100644 src/utils/env.ts create mode 100644 src/utils/feedback.ts create mode 100644 src/utils/file.ts create mode 100644 src/utils/request/axios.ts create mode 100644 src/utils/request/cancel.ts create mode 100644 src/utils/request/index.ts create mode 100644 src/utils/request/type.d.ts create mode 100644 src/utils/table2excel.ts create mode 100644 src/utils/theme.ts create mode 100644 src/utils/util.ts create mode 100644 src/utils/validate.ts create mode 100644 src/views/account/images/login_bg.png create mode 100644 src/views/account/login.vue create mode 100644 src/views/account_center/organization/index.vue create mode 100644 src/views/account_center/position/index.vue create mode 100644 src/views/account_center/sub_account/components/organization/organization-tree.vue create mode 100644 src/views/account_center/sub_account/components/organization/structure.vue create mode 100644 src/views/account_center/sub_account/index.vue create mode 100644 src/views/account_center/sub_account/modules/account-list.vue create mode 100644 src/views/account_center/sub_account/modules/account-number.vue create mode 100644 src/views/account_center/sub_account/modules/organization.vue create mode 100644 src/views/application/coupon/component/selectuser.vue create mode 100644 src/views/application/coupon/components/selectuser.vue create mode 100644 src/views/application/coupon/coupon.vue create mode 100644 src/views/application/coupon/detail.vue create mode 100644 src/views/application/coupon/edit.vue create mode 100644 src/views/application/drawlist/drawlist.vue create mode 100644 src/views/application/recharge/index.vue create mode 100644 src/views/channel/dyapp.vue create mode 100644 src/views/channel/h5.vue create mode 100644 src/views/channel/weapp.vue create mode 100644 src/views/channel/wx_dev.vue create mode 100644 src/views/channel/wx_oa/config.vue create mode 100644 src/views/channel/wx_oa/menu.vue create mode 100644 src/views/channel/wx_oa/menu_com/oa-attr.vue create mode 100644 src/views/channel/wx_oa/menu_com/oa-menu-form-edit.vue create mode 100644 src/views/channel/wx_oa/menu_com/oa-menu-form.vue create mode 100644 src/views/channel/wx_oa/menu_com/oa-phone.vue create mode 100644 src/views/channel/wx_oa/menu_com/useMenuOa.ts create mode 100644 src/views/channel/wx_oa/reply/default_reply.vue create mode 100644 src/views/channel/wx_oa/reply/edit.vue create mode 100644 src/views/channel/wx_oa/reply/follow_reply.vue create mode 100644 src/views/channel/wx_oa/reply/keyword_reply.vue create mode 100644 src/views/customer/index.vue create mode 100644 src/views/decorate/component/add-nav.vue create mode 100644 src/views/decorate/component/add-sub.vue create mode 100644 src/views/decorate/component/decoration-img.vue create mode 100644 src/views/decorate/component/pages/attr-setting.vue create mode 100644 src/views/decorate/component/pages/menu.vue create mode 100644 src/views/decorate/component/pages/preview.vue create mode 100644 src/views/decorate/component/widgets/banner/attr.vue create mode 100644 src/views/decorate/component/widgets/banner/content.vue create mode 100644 src/views/decorate/component/widgets/banner/index.ts create mode 100644 src/views/decorate/component/widgets/banner/options.ts create mode 100644 src/views/decorate/component/widgets/category/add-category.vue create mode 100644 src/views/decorate/component/widgets/category/attr.vue create mode 100644 src/views/decorate/component/widgets/category/content.vue create mode 100644 src/views/decorate/component/widgets/category/index.ts create mode 100644 src/views/decorate/component/widgets/category/options.ts create mode 100644 src/views/decorate/component/widgets/customer-service/attr.vue create mode 100644 src/views/decorate/component/widgets/customer-service/content.vue create mode 100644 src/views/decorate/component/widgets/customer-service/index.ts create mode 100644 src/views/decorate/component/widgets/customer-service/options.ts create mode 100644 src/views/decorate/component/widgets/home-title/add-title-image.vue create mode 100644 src/views/decorate/component/widgets/home-title/attr.vue create mode 100644 src/views/decorate/component/widgets/home-title/content.vue create mode 100644 src/views/decorate/component/widgets/home-title/index.ts create mode 100644 src/views/decorate/component/widgets/home-title/options.ts create mode 100644 src/views/decorate/component/widgets/hot/attr.vue create mode 100644 src/views/decorate/component/widgets/hot/content.vue create mode 100644 src/views/decorate/component/widgets/hot/index.ts create mode 100644 src/views/decorate/component/widgets/hot/options.ts create mode 100644 src/views/decorate/component/widgets/index.ts create mode 100644 src/views/decorate/component/widgets/my-coupon/attr.vue create mode 100644 src/views/decorate/component/widgets/my-coupon/content.vue create mode 100644 src/views/decorate/component/widgets/my-coupon/index.ts create mode 100644 src/views/decorate/component/widgets/my-coupon/options.ts create mode 100644 src/views/decorate/component/widgets/my-service/attr.vue create mode 100644 src/views/decorate/component/widgets/my-service/content.vue create mode 100644 src/views/decorate/component/widgets/my-service/index.ts create mode 100644 src/views/decorate/component/widgets/my-service/options.ts create mode 100644 src/views/decorate/component/widgets/my-subscribe/attr.vue create mode 100644 src/views/decorate/component/widgets/my-subscribe/content.vue create mode 100644 src/views/decorate/component/widgets/my-subscribe/index.ts create mode 100644 src/views/decorate/component/widgets/my-subscribe/options.ts create mode 100644 src/views/decorate/component/widgets/my-task/attr.vue create mode 100644 src/views/decorate/component/widgets/my-task/content.vue create mode 100644 src/views/decorate/component/widgets/my-task/index.ts create mode 100644 src/views/decorate/component/widgets/my-task/options.ts create mode 100644 src/views/decorate/component/widgets/nav/attr.vue create mode 100644 src/views/decorate/component/widgets/nav/content.vue create mode 100644 src/views/decorate/component/widgets/nav/index.ts create mode 100644 src/views/decorate/component/widgets/nav/options.ts create mode 100644 src/views/decorate/component/widgets/search/attr.vue create mode 100644 src/views/decorate/component/widgets/search/content.vue create mode 100644 src/views/decorate/component/widgets/search/index.ts create mode 100644 src/views/decorate/component/widgets/search/options.ts create mode 100644 src/views/decorate/component/widgets/sticky-category/add-category.vue create mode 100644 src/views/decorate/component/widgets/sticky-category/attr.vue create mode 100644 src/views/decorate/component/widgets/sticky-category/content.vue create mode 100644 src/views/decorate/component/widgets/sticky-category/index.ts create mode 100644 src/views/decorate/component/widgets/sticky-category/options.ts create mode 100644 src/views/decorate/component/widgets/user-banner/attr.vue create mode 100644 src/views/decorate/component/widgets/user-banner/content.vue create mode 100644 src/views/decorate/component/widgets/user-banner/index.ts create mode 100644 src/views/decorate/component/widgets/user-banner/options.ts create mode 100644 src/views/decorate/component/widgets/user-info/attr.vue create mode 100644 src/views/decorate/component/widgets/user-info/bg-image.vue create mode 100644 src/views/decorate/component/widgets/user-info/content.vue create mode 100644 src/views/decorate/component/widgets/user-info/images/default_avatar.png create mode 100644 src/views/decorate/component/widgets/user-info/images/my_bg.png create mode 100644 src/views/decorate/component/widgets/user-info/images/my_topbg.png create mode 100644 src/views/decorate/component/widgets/user-info/index.ts create mode 100644 src/views/decorate/component/widgets/user-info/options.ts create mode 100644 src/views/decorate/pages/index.vue create mode 100644 src/views/decorate/tabbar.vue create mode 100644 src/views/dev_tools/code/edit.vue create mode 100644 src/views/dev_tools/code/index.vue create mode 100644 src/views/dev_tools/components/code-preview.vue create mode 100644 src/views/dev_tools/components/data-table.vue create mode 100644 src/views/distributor/components/QrcodeDialog.vue create mode 100644 src/views/distributor/coupon.vue create mode 100644 src/views/distributor/distributor_group/components/group_form.vue create mode 100644 src/views/distributor/distributor_group/index.vue create mode 100644 src/views/distributor/edit.vue create mode 100644 src/views/distributor/index.vue create mode 100644 src/views/distributor/interface/index.ts create mode 100644 src/views/distributor/order.vue create mode 100644 src/views/distributor/register.vue create mode 100644 src/views/distributor/userDetail.vue create mode 100644 src/views/error/403.vue create mode 100644 src/views/error/404.vue create mode 100644 src/views/error/components/error.vue create mode 100644 src/views/finance/balance/index.vue create mode 100644 src/views/finance/center/index.vue create mode 100644 src/views/finance/recharge/index.vue create mode 100644 src/views/finance/withdraw/index.vue create mode 100644 src/views/master_worker/apply.vue create mode 100644 src/views/master_worker/cancelOrder/list.vue create mode 100644 src/views/master_worker/cancelOrder/rule.vue create mode 100644 src/views/master_worker/components/physicalDialog.vue create mode 100644 src/views/master_worker/components/previewPdf.vue create mode 100644 src/views/master_worker/components/previewPdfDialog.vue create mode 100644 src/views/master_worker/components/previewPic.vue create mode 100644 src/views/master_worker/components/reasonDialog.vue create mode 100644 src/views/master_worker/components/uploadDialog.vue create mode 100644 src/views/master_worker/detail.vue create mode 100644 src/views/master_worker/edit.vue create mode 100644 src/views/master_worker/feedback.vue create mode 100644 src/views/master_worker/index.vue create mode 100644 src/views/master_worker/physical.vue create mode 100644 src/views/master_worker/staff.vue create mode 100644 src/views/master_worker/staffUseInstruction.vue create mode 100644 src/views/master_worker/userList/index.vue create mode 100644 src/views/master_worker/userManual.vue create mode 100644 src/views/material/index.vue create mode 100644 src/views/message/notice/edit.vue create mode 100644 src/views/message/notice/index.vue create mode 100644 src/views/message/short_letter/edit.vue create mode 100644 src/views/message/short_letter/index.vue create mode 100644 src/views/order/lists/components/cancelOrderDialog.vue create mode 100644 src/views/order/lists/components/dispatchDialog.vue create mode 100644 src/views/order/lists/components/operation.vue create mode 100644 src/views/order/lists/detail.vue create mode 100644 src/views/order/lists/hook.ts create mode 100644 src/views/order/lists/index.vue create mode 100644 src/views/order/record/components/log-form.vue create mode 100644 src/views/order/record/index.vue create mode 100644 src/views/organization/department/edit.vue create mode 100644 src/views/organization/department/index.vue create mode 100644 src/views/organization/post/edit.vue create mode 100644 src/views/organization/post/index.vue create mode 100644 src/views/permission/admin/edit.vue create mode 100644 src/views/permission/admin/index.vue create mode 100644 src/views/permission/menu/edit.vue create mode 100644 src/views/permission/menu/index.vue create mode 100644 src/views/permission/role/auth.vue create mode 100644 src/views/permission/role/edit.vue create mode 100644 src/views/permission/role/index.vue create mode 100644 src/views/service/activity/form.vue create mode 100644 src/views/service/activity/index.vue create mode 100644 src/views/service/area/components/infoDialog.vue create mode 100644 src/views/service/area/index.vue create mode 100644 src/views/service/category/components/category-form.vue create mode 100644 src/views/service/category/edit.vue create mode 100644 src/views/service/category/index.vue create mode 100644 src/views/service/evaluate/components/evaluate-form.vue create mode 100644 src/views/service/evaluate/components/scoreDialog.vue create mode 100644 src/views/service/evaluate/index.vue create mode 100644 src/views/service/lists/components/base-setting.vue create mode 100644 src/views/service/lists/edit.vue create mode 100644 src/views/service/lists/index.vue create mode 100644 src/views/service/subscribe/components/automatic-interval.vue create mode 100644 src/views/service/subscribe/components/customization.vue create mode 100644 src/views/service/subscribe/edit.vue create mode 100644 src/views/service/subscribe/index.vue create mode 100644 src/views/service/unit/components/unit-form.vue create mode 100644 src/views/service/unit/index.vue create mode 100644 src/views/setting/dict/data/edit.vue create mode 100644 src/views/setting/dict/data/index.vue create mode 100644 src/views/setting/dict/type/edit.vue create mode 100644 src/views/setting/dict/type/index.vue create mode 100644 src/views/setting/map/map_config/index.vue create mode 100644 src/views/setting/payment/admin/.eslintrc.cjs create mode 100644 src/views/setting/payment/admin/.gitignore create mode 100644 src/views/setting/payment/admin/.vscode/extensions.json create mode 100644 src/views/setting/payment/admin/.vscode/settings.json create mode 100644 src/views/setting/payment/admin/README.md create mode 100644 src/views/setting/payment/admin/deploy.sh create mode 100644 src/views/setting/payment/admin/env.d.ts create mode 100644 src/views/setting/payment/admin/index.html create mode 100644 src/views/setting/payment/payment_config/component/config-form.vue create mode 100644 src/views/setting/payment/payment_config/index.vue create mode 100644 src/views/setting/payment/payment_way/edit.vue create mode 100644 src/views/setting/payment/payment_way/index.vue create mode 100644 src/views/setting/search/index.vue create mode 100644 src/views/setting/storage/edit.vue create mode 100644 src/views/setting/storage/index.vue create mode 100644 src/views/setting/system/cache.vue create mode 100644 src/views/setting/system/environment.vue create mode 100644 src/views/setting/system/journal.vue create mode 100644 src/views/setting/system/task/edit.vue create mode 100644 src/views/setting/system/task/index.vue create mode 100644 src/views/setting/transaction_settings/index.vue create mode 100644 src/views/setting/user/login_register.vue create mode 100644 src/views/setting/user/setup.vue create mode 100644 src/views/setting/website/filing.vue create mode 100644 src/views/setting/website/information.vue create mode 100644 src/views/setting/website/protocol.vue create mode 100644 src/views/summary/index.vue create mode 100644 src/views/user/refund_rule/index.vue create mode 100644 src/views/user/refund_rule/setting_rule.vue create mode 100644 src/views/user/setting.vue create mode 100644 src/views/user/userList/components/adjust.vue create mode 100644 src/views/user/userList/components/popover-user.vue create mode 100644 src/views/user/userList/detail.vue create mode 100644 src/views/user/userList/index.vue create mode 100644 src/views/workbench/images/ad.png create mode 100644 src/views/workbench/images/coupon.png create mode 100644 src/views/workbench/images/distributor.png create mode 100644 src/views/workbench/images/goods_category.png create mode 100644 src/views/workbench/images/goods_lists.png create mode 100644 src/views/workbench/images/index_decorate.png create mode 100644 src/views/workbench/images/news_notice.png create mode 100644 src/views/workbench/images/order.png create mode 100644 src/views/workbench/images/set_payment.png create mode 100644 src/views/workbench/images/staff.png create mode 100644 src/views/workbench/index.vue create mode 100644 tailwind.config.js create mode 100644 tsconfig.config.json create mode 100644 tsconfig.json create mode 100644 typings/index.d.ts create mode 100644 typings/router.d.ts create mode 100644 vite.config.ts diff --git a/.env b/.env new file mode 100644 index 0000000..439be5a --- /dev/null +++ b/.env @@ -0,0 +1,2 @@ +VITE_APP_BASE_URL = 'http://192.168.4.117:8082' +VITE_MAP_KEY = '2SABZ-S4TWH-AMCDO-W742B-SKEOE-UWBKJ' \ No newline at end of file diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000..ac25b37 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,42 @@ +/* eslint-env node */ +require('@rushstack/eslint-patch/modern-module-resolution') + +module.exports = { + root: true, + ignorePatterns: ['/auto-imports.d.ts', '/components.d.ts'], + extends: [ + 'plugin:vue/vue3-essential', + 'eslint:recommended', + '@vue/eslint-config-typescript/recommended', + './.eslintrc-auto-import.json' + ], + rules: { + 'prettier/prettier': [ + 'warn', + { + semi: false, + singleQuote: true, + printWidth: 100, + proseWrap: 'preserve', + bracketSameLine: false, + endOfLine: 'lf', + tabWidth: 4, + useTabs: false, + trailingComma: 'none' + } + ], + 'vue/multi-word-component-names': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/ban-ts-comment': 'off', + 'no-undef': 'off', + 'vue/prefer-import-from-vue': 'off', + 'no-prototype-builtins': 'off', + 'prefer-spread': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/no-non-null-asserted-optional-chain': 'off', + 'vue/no-mutating-props': 'off' + }, + globals: { + module: 'readonly' + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5cc0fca --- /dev/null +++ b/.gitignore @@ -0,0 +1,38 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +# unplugin-auto-import +auto-imports.d.ts +components.d.ts +.eslintrc-auto-import.json + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +# .env +.env.development +.env.production + +yarn.lock +package-lock.json diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..91f12b2 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..40fe379 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,26 @@ +{ + "editor.detectIndentation": false, + "editor.tabSize": 4, + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "explicit" + }, + "css.validate": false, + "less.validate": false, + "scss.validate": false, + "prettier.printWidth": 150, // 超过最大值换行 + "prettier.tabWidth": 4, // 缩进字节数 + "prettier.useTabs": false, // 缩进不使用tab,使用空格 + "prettier.semi": false, // 句尾添加分号 + "prettier.singleQuote": true, // 使用单引号代替双引号 + "prettier.proseWrap": "preserve", // 默认值。因为使用了一些折行敏感型的渲染器(如GitHub comment)而按照markdown文本样式进行折行 + "prettier.arrowParens": "avoid", // (x) => {} 箭头函数参数只有一个时是否要有小括号。avoid:省略括号 + "prettier.bracketSpacing": true, // 在对象,数组括号与文字之间加空格 "{ foo: bar }" + + "prettier.endOfLine": "auto", // 结尾是 \n \r \n\r auto + "prettier.htmlWhitespaceSensitivity": "ignore", + "prettier.ignorePath": ".prettierignore", // 不使用prettier格式化的文件填写在项目的.prettierignore文件中 + "prettier.jsxSingleQuote": false, // 在jsx中使用单引号代替双引号 + "prettier.requireConfig": false, // Require a 'prettierconfig' to format prettier + "prettier.trailingComma": "none" // 函数最后不需要逗号 +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..077a568 --- /dev/null +++ b/README.md @@ -0,0 +1,46 @@ +# vue-project + +This template should help get you started developing with Vue 3 in Vite. + +## Recommended IDE Setup + +[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin). + +## Type Support for `.vue` Imports in TS + +TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin) to make the TypeScript language service aware of `.vue` types. + +If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a [Take Over Mode](https://github.com/johnsoncodehk/volar/discussions/471#discussioncomment-1361669) that is more performant. You can enable it by the following steps: + +1. Disable the built-in TypeScript Extension + 1) Run `Extensions: Show Built-in Extensions` from VSCode's command palette + 2) Find `TypeScript and JavaScript Language Features`, right click and select `Disable (Workspace)` +2. Reload the VSCode window by running `Developer: Reload Window` from the command palette. + +## Customize configuration + +See [Vite Configuration Reference](https://vitejs.dev/config/). + +## Project Setup + +```sh +npm install +``` + +### Compile and Hot-Reload for Development + +```sh +npm run dev +``` + +### Type-Check, Compile and Minify for Production + +```sh +npm run build +``` + +### Lint with [ESLint](https://eslint.org/) + +```sh +npm run lint +``` diff --git a/first b/first new file mode 100644 index 0000000000000000000000000000000000000000..7dc3234c13cef6e89a7200da25981fa557406d84 GIT binary patch literal 1044 zcma)**-pbS5Jl%TNc=;;0A+R3cYY*sVpItV>Vo)s;M{SL=tHZ@@-p_!+&hbZzDsMZ zT*t;vcCdx9;ik3TI-6|Z)UYS+I!>d_+>NdmxLJ@pbR)NkePBvc@{GRhTPu*??ae+| z_t@;gI@+T>Smo%!wKm|qqA|gs@tb6NNsKK%C%n{-EH>g$@j7ysRz@=#0eS1V(fM@f z#+AW&W$dmL^ZQx1aL;r&g`fa@5(8jy8c7I0r_qp6XZl-+G}6M>;@RxTgyu_$6LdcSRUjm2*Xv@$}>J&k(Bqvbv&1 bXJpTr$-hHf3cCL2=+CStbawo>|4e=Xk*Abn literal 0 HcmV?d00001 diff --git a/global.d.ts b/global.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/global.d.ts @@ -0,0 +1 @@ +/// diff --git a/index.html b/index.html new file mode 100644 index 0000000..d05d865 --- /dev/null +++ b/index.html @@ -0,0 +1,71 @@ + + + + + + + + 粤好生活-后台管理系统 + + + + + +
+
+ + + +
+
+ + + + \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..4ed9890 --- /dev/null +++ b/package.json @@ -0,0 +1,67 @@ +{ + "name": "vue-project", + "version": "0.0.0", + "license": "MIT", + "scripts": { + "dev": "vite", + "preview": "vite preview --port 4173", + "build": "node ./scripts/build.mjs", + "type-check": "vue-tsc --noEmit", + "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore" + }, + "dependencies": { + "@element-plus/icons-vue": "^2.0.6", + "@highlightjs/vue-plugin": "^2.1.0", + "@wangeditor/editor": "^5.1.12", + "@wangeditor/editor-for-vue": "^5.1.12", + "axios": "^0.27.2", + "css-color-function": "^1.3.3", + "echarts": "^5.3.3", + "element-plus": "^2.2.27", + "highlight.js": "^11.6.0", + "js-table2excel": "^1.1.2", + "nprogress": "^0.2.0", + "pinia": "^2.0.14", + "qrcodejs2-fix": "^0.0.1", + "sortablejs": "^1.15.0", + "vue": "^3.2.37", + "vue-clipboard3": "^2.0.0", + "vue-echarts": "^6.2.3", + "vue-pdf-embed": "1", + "vue-router": "^4.0.16", + "vue3-eventbus": "^2.0.0", + "vue3-video-play": "^1.3.1-beta.6", + "vuedraggable": "^4.1.0" + }, + "devDependencies": { + "@rushstack/eslint-patch": "^1.1.0", + "@tailwindcss/line-clamp": "^0.4.2", + "@types/lodash-es": "^4.17.6", + "@types/node": "^16.11.41", + "@types/nprogress": "^0.2.0", + "@types/sortablejs": "^1.15.5", + "@vitejs/plugin-vue": "^3.0.0", + "@vitejs/plugin-vue-jsx": "^2.0.0", + "@vue/eslint-config-prettier": "^7.0.0", + "@vue/eslint-config-typescript": "^11.0.0", + "@vue/tsconfig": "^0.1.3", + "autoprefixer": "^10.4.7", + "consola": "^2.15.3", + "eslint": "^8.5.0", + "eslint-plugin-vue": "^9.0.0", + "execa": "^6.1.0", + "fs-extra": "^10.1.0", + "postcss": "^8.4.14", + "prettier": "^2.5.1", + "sass": "^1.53.0", + "tailwindcss": "^3.0.24", + "typescript": "~4.7.4", + "unplugin-auto-import": "^0.9.2", + "unplugin-vue-components": "^0.19.9", + "vite": "^3.0.0", + "vite-plugin-style-import": "^2.0.0", + "vite-plugin-svg-icons": "^2.0.1", + "vite-plugin-vue-setup-extend": "^0.4.0", + "vue-tsc": "^0.38.1" + } +} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..ff8ef3c --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {} + } +} diff --git a/scripts/build.mjs b/scripts/build.mjs new file mode 100644 index 0000000..6285a63 --- /dev/null +++ b/scripts/build.mjs @@ -0,0 +1,37 @@ +import { execaCommand } from 'execa' +import path from 'path' +import fsExtra from 'fs-extra' +const { existsSync, remove, copy } = fsExtra +const cwd = process.cwd() +//打包发布路径,谨慎改动 +const releaseRelativePath = './public/admin' +const distPath = path.resolve(cwd, 'dist') +const releasePath = path.resolve(cwd, releaseRelativePath) + +async function build() { + await execaCommand('vite build', { stdio: 'inherit', encoding: 'utf-8', cwd }) + if (existsSync(releasePath)) { + await remove(releasePath) + } + console.log(`文件正在复制 ==> ${releaseRelativePath}`) + try { + await copyFile(distPath, releasePath) + } catch (error) { + console.log(`\n ${error}`) + } + console.log(`文件已复制 ==> ${releaseRelativePath}`) +} + +function copyFile(sourceDir, targetDir) { + return new Promise((resolve, reject) => { + copy(sourceDir, targetDir, (err) => { + if (err) { + reject(err) + } else { + resolve() + } + }) + }) +} + +build() diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..bbe8727 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,58 @@ + + + + + diff --git a/src/api/app.ts b/src/api/app.ts new file mode 100644 index 0000000..fe64712 --- /dev/null +++ b/src/api/app.ts @@ -0,0 +1,11 @@ +import request from '@/utils/request' + +// 配置 +export function getConfig() { + return request.get({ url: '/common/index/config' }) +} + +// 工作台主页 +export function getWorkbench() { + return request.get({ url: '/common/index/workbench' }) +} diff --git a/src/api/application.ts b/src/api/application.ts new file mode 100644 index 0000000..431ea38 --- /dev/null +++ b/src/api/application.ts @@ -0,0 +1,11 @@ +import request from '@/utils/request' + +// 获取充值配置 +export function apiRechargeGetRule() { + return request.get({ url: '/recharge/config/getConfig' }) +} + +// 设置充值配置 +export function apiRechargeSetRule(params: any) { + return request.post({ url: '/recharge/config/setConfig', params }) +} diff --git a/src/api/application/coupon.ts b/src/api/application/coupon.ts new file mode 100644 index 0000000..b38701b --- /dev/null +++ b/src/api/application/coupon.ts @@ -0,0 +1,70 @@ +import request from '@/utils/request' + +//优惠券基本信息/adminapi/marketing.coupon/info +export function getBaseCoupon(params: any) { + return request.get({ url: '/marketing.coupon/info', params }) +} +//领取记录 +export function getCouponlists(params: any) { + return request.get({ url: '/marketing.coupon_lists/lists', params }) +} +//作废 +export function setCouponlists(params: any) { + return request.post({ url: '/marketing.coupon_lists/void', params }) +} +//优惠券详情/adminapi/marketing.coupon/detail +export function getCoupondetail(params: any) { + return request.get({ url: '/marketing.coupon/detail', params }) +} +//添加优惠券 +export function addCoupon(params: any) { + return request.post({ url: '/coupon/add', params }) +} +//优惠券列表 +export function GetcouponLists(params?: any) { + return request.get({ url: '/coupon/list', params }) +} +//删除优惠券 +export function delCoupon(params: any) { + return request.post({ url: '/coupon/del', params }) +} +//切换发放状态 +export function switchCouponStatus(params: any) { + return request.post({ url: '/channelCoupon/edit', params }) +} +// 优惠券指定分销员 +export function getCouponListsByChannel(params: any) { + return request.get({ url: '/channelCoupon/list', params }) +} +// 用户领取优惠券 +export function getCouponByUser(params: any) { + return request.get({ url: '/userCoupon/queryUserGetRecord', params }) +} +// 删除指定分销员优惠券 +export function delCouponByDistributor(params: any) { + return request.post({ url: '/channelCoupon/del', params }) +} +// 优惠券详情 +export function getCouponDetailApi(params: any) { + return request.get({ url: '/coupon/detail', params }) +} +// 优惠券发放状态 +export function CouponStatusApi(params: any) { + return request.post({ url: '/coupon/setCouponStatus', params }) +} + +//开始领取/adminapi/marketing.coupon/open +export function startCoupon(params: any) { + return request.post({ url: '/marketing.coupon/open', params }) +} +export function overCoupon(params: any) { + return request.post({ url: '/marketing.coupon/stop', params }) +} +//系统发放优惠券 +export function sendCoupon(params: any) { + return request.post({ url: '/marketing.coupon/send', params }) +} +//抢购列表/adminapi/marketing.seckill/lists +export function getSeckillLists(params: any) { + return request.get({ url: '/marketing.seckill/lists', params }) +} diff --git a/src/api/application/recharge.ts b/src/api/application/recharge.ts new file mode 100644 index 0000000..431ea38 --- /dev/null +++ b/src/api/application/recharge.ts @@ -0,0 +1,11 @@ +import request from '@/utils/request' + +// 获取充值配置 +export function apiRechargeGetRule() { + return request.get({ url: '/recharge/config/getConfig' }) +} + +// 设置充值配置 +export function apiRechargeSetRule(params: any) { + return request.post({ url: '/recharge/config/setConfig', params }) +} diff --git a/src/api/channel/dyapp.ts b/src/api/channel/dyapp.ts new file mode 100644 index 0000000..07fee85 --- /dev/null +++ b/src/api/channel/dyapp.ts @@ -0,0 +1,11 @@ +import request from '@/utils/request' + +// 抖音小程序配置保存 +export function setDyappConfig(params: any) { + return request.post({ url: '/channel/mp/save', params }) +} + +// 抖音小程序配置详情 +export function getDyappConfig() { + return request.get({ url: '/channel/mp/detail' }) +} diff --git a/src/api/channel/h5.ts b/src/api/channel/h5.ts new file mode 100644 index 0000000..dfb5575 --- /dev/null +++ b/src/api/channel/h5.ts @@ -0,0 +1,11 @@ +import request from '@/utils/request' + +// H5渠道配置保存 +export function setH5Config(params: any) { + return request.post({ url: '/channel/h5/save', params }) +} + +// H5渠道配置详情 +export function getH5Config() { + return request.get({ url: '/channel/h5/detail' }) +} diff --git a/src/api/channel/weapp.ts b/src/api/channel/weapp.ts new file mode 100644 index 0000000..59ce0a7 --- /dev/null +++ b/src/api/channel/weapp.ts @@ -0,0 +1,11 @@ +import request from '@/utils/request' + +// 微信小程序配置保存 +export function setWeappConfig(params: any) { + return request.post({ url: '/channel/mp/save', params }) +} + +// 微信小程序配置详情 +export function getWeappConfig() { + return request.get({ url: '/channel/mp/detail' }) +} diff --git a/src/api/channel/wx_dev.ts b/src/api/channel/wx_dev.ts new file mode 100644 index 0000000..a39ca96 --- /dev/null +++ b/src/api/channel/wx_dev.ts @@ -0,0 +1,11 @@ +import request from '@/utils/request' + +// 微信开发平台配置保存 +export function setWxDevConfig(params: any) { + return request.post({ url: '/channel/wx/save', params }) +} + +// 微信开发平台配置详情 +export function getWxDevConfig() { + return request.get({ url: '/channel/wx/detail' }) +} diff --git a/src/api/channel/wx_oa.ts b/src/api/channel/wx_oa.ts new file mode 100644 index 0000000..9b957a6 --- /dev/null +++ b/src/api/channel/wx_oa.ts @@ -0,0 +1,105 @@ +import request from "@/utils/request"; + +// 微信公众号配置保存 +export function setOaConfig(params: any) { + return request.post({ url: "/channel/oa/save", params }); +} + +// 微信公众号配置详情 +export function getOaConfig() { + return request.get({ url: "/channel/oa/detail" }); +} + +export interface Menu { + name: string; + menuType?: number; + visitType?: string; + url?: string; + appId?: string; + pagePath?: string; + subButtons: Menu[] | any; +} + +/** + * @return { Promise } + * @description 获取菜单 + */ +export function getOaMenu() { + return request.get({ url: "/channel/oaMenu/detail" }); +} + +/** + * @return { Promise } + * @param { Menu } Menu + * @description 菜单保存 + */ +export function setOaMenuSave(params: Menu | any) { + return request.post({ url: "/channel/oaMenu/save", params }); +} + +/** + * @return { Promise } + * @param { Menu } Menu + * @description 菜单发布 + */ +export function setOaMenuPublish(params: Menu | any) { + return request.post({ url: "/channel/oaMenu/publish", params }); +} + +/** + * @description 默认回复列表 + */ +export function getOaReplyList(params: any) { + return request.get({ url: `/channel/oaReply/list`, params }); +} + +/** + * @return { Promise } + * @param { number } id + * @description 回复列表删除 + */ +export function oaReplyDel(params: any) { + return request.post({ url: `/channel/oaReply/del`, params }); +} + +/** + * @return { Promise } + * @param { number } id + * @description 回复状态修改 + */ +export function changeOaReplyStatus(params: any) { + return request.post({ url: `/channel/oaReply/status`, params }); +} + +export interface Reply { + content: string; // 内容 + contentType: number; // 内容类型: 1=文本 + keyword?: string; // 关键词 + matchingType?: number; // 匹配方式: [1=全匹配, 2=模糊匹配] + name: string; // 规则名称 + status: number; // 状态: 1=开启, 0=关闭 + type: string; // 类型: follow=关注, keyword=关键词, default=默认 + sort: number; // 排序 +} +/** + * @return { Promise } + * @description 默认回复编辑 + */ +export function oaReplyAdd(params: Reply) { + return request.post({ url: `/channel/oaReply/add`, params }); +} + +/** + * @return { Promise } + * @description 默认回复编辑 + */ +export function oaReplyEdit(params: Reply) { + return request.post({ url: `/channel/oaReply/edit`, params }); +} + +/** + * @description 默认回复详情 + */ +export function getOaReplyDetail(params: any) { + return request.get({ url: `/channel/oaReply/detail`, params }); +} diff --git a/src/api/consumer.ts b/src/api/consumer.ts new file mode 100644 index 0000000..1057729 --- /dev/null +++ b/src/api/consumer.ts @@ -0,0 +1,16 @@ +import request from '@/utils/request' + +// 用户列表 +export function getUserList(params: any) { + return request.get({ url: '/user/list', params }) +} + +// 用户详情 +export function getUserDetail(params: any) { + return request.get({ url: '/user/detail', params }) +} + +// 用户编辑 +export function userEdit(params: any) { + return request.post({ url: '/user/edit', params }) +} diff --git a/src/api/decorate/index.ts b/src/api/decorate/index.ts new file mode 100644 index 0000000..01cbf90 --- /dev/null +++ b/src/api/decorate/index.ts @@ -0,0 +1,24 @@ +import request from "@/utils/request"; + +// 页面装修详情 +export function getDecoratePages(params: any) { + return request.get( + { url: "/decorate/pages/detail", params }, + { ignoreCancelToken: true } + ); +} + +// 页面装修保存 +export function setDecoratePages(params: any) { + return request.post({ url: "/decorate/pages/save", params }); +} + +// 底部导航详情 +export function getDecorateTabbar(params?: any) { + return request.get({ url: "/decorate/tabbar/detail", params }); +} + +// 底部导航保存 +export function setDecorateTabbar(params: any) { + return request.post({ url: "/decorate/tabbar/save", params }); +} diff --git a/src/api/distributor/group.ts b/src/api/distributor/group.ts new file mode 100644 index 0000000..779ec5c --- /dev/null +++ b/src/api/distributor/group.ts @@ -0,0 +1,39 @@ +/* + * @Author: micky 1254597151@qq.com + * @Date: 2023-08-30 18:34:02 + * @LastEditors: micky 1254597151@qq.com + * @LastEditTime: 2023-08-30 18:34:10 + * @FilePath: \housekeeping-admin\src\api\distributor\group.ts + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +import request from '@/utils/request' +import axios from 'axios' + +// 分销组别列表 +export function apiDistributorGroupLists(params: any) { + return request.get({ url: '/distributorsGroup/list', params }) +} +// 添加分销组别 +export function apiDistributorGroupAdd(params: any) { + return request.post({ url: '/distributorsGroup/add', params }) +} +// 编辑分销组别 +export function apiDistributorGroupEdit(params: any) { + return request.post({ url: '/distributorsGroup/edit', params }) +} + +// 删除分销组别 +export function apiDistributorGroupDel(params: any) { + return request.post({ url: '/distributorsGroup/del', params }) +} + +// 分销组别详情 +export function apiDistributorGroupDetail(params: any) { + return request.get({ url: '/distributorsGroup/detail', params }) +} + +export interface DistributorGroup { + id: number + groupName: string + remark: string +} diff --git a/src/api/distributor/lists.ts b/src/api/distributor/lists.ts new file mode 100644 index 0000000..698d6d0 --- /dev/null +++ b/src/api/distributor/lists.ts @@ -0,0 +1,61 @@ +/* + * @Author: micky 1254597151@qq.com + * @Date: 2023-09-04 09:43:15 + * @LastEditors: micky 1254597151@qq.com + * @LastEditTime: 2023-10-05 09:34:05 + * @FilePath: \housekeeping-admin\src\api\distributor\lists.ts + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +import request from '@/utils/request' +import axios from 'axios' + +// 分销列表 +export function apiDistributorLists(params: any) { + return request.get({ url: '/distributor/list', params }) +} +// 添加分销 +export function apiDistributorAdd(params: any) { + return request.post({ url: '/distributor/add', params }) +} +// 编辑分销 +export function apiDistributorEdit(params: any) { + return request.post({ url: '/distributor/edit', params }) +} + +// 删除分销 +export function apiDistributorDel(params: any) { + return request.post({ url: '/distributor/del', params }) +} + +// 分销详情 +export function apiDistributorDetail(params: any) { + return request.get({ url: '/distributor/detail', params }) +} + +// 二维码 +export function apiDistributorQrcode(params: any) { + return request.post({ url: '/distributor/genQRCode', params }) +} + +// 查看订单 +export function apiDistributorQrder(params: any) { + return request.post({ url: '/order/listDistributionOrder', params }) +} + +// 导出订单 +export function apiDistributorExcel(params: any) { + return request.post( + { responseType: 'blob', url: '/order/exportDistOrderExcel', params }, + { + isTransformResponse: false + } + ) +} +// 获取未绑定分销商用户 +export function apiUnBindingDistributor(params: any) { + return request.get({ url: '/user/getNotBindingDistributorUser', params }) +} +// 查看优惠券 +export function apiDistributorCoupon(params: any) { + return request.get({ url: '/channelCoupon/getDistributorCoupon', params }) +} diff --git a/src/api/file.ts b/src/api/file.ts new file mode 100644 index 0000000..4dccea5 --- /dev/null +++ b/src/api/file.ts @@ -0,0 +1,39 @@ +import request from '@/utils/request' + +export function fileCateAdd(params: Record) { + return request.post({ url: '/common/album/cateAdd', params }) +} + +export function fileCateEdit(params: Record) { + return request.post({ url: '/common/album/cateRename', params }) +} + +// 文件分类删除 +export function fileCateDelete(params: Record) { + return request.post({ url: '/common/album/cateDel', params }) +} + +// 文件分类列表 +export function fileCateLists(params: Record) { + return request.get({ url: '/common/album/cateList', params }) +} + +// 文件列表 +export function fileList(params: Record) { + return request.get({ url: '/common/album/albumList', params }) +} + +// 文件删除 +export function fileDelete(params: Record) { + return request.post({ url: '/common/album/albumDel', params }) +} + +// 文件移动 +export function fileMove(params: Record) { + return request.post({ url: '/common/album/albumMove', params }) +} + +// 文件重命名 +export function fileRename(params: { id: number; name: string }) { + return request.post({ url: '/common/album/albumRename', params }) +} diff --git a/src/api/finance/balance.ts b/src/api/finance/balance.ts new file mode 100644 index 0000000..3423e18 --- /dev/null +++ b/src/api/finance/balance.ts @@ -0,0 +1,10 @@ +import request from '@/utils/request' + +// 余额明细 +export function apiAccountLogLists(params: any) { + return request.get({ url: '/account/log/list', params }) +} + +export function changeTypeLists(params: any) { + return request.get({ url: '/finance.account_log/changeTypeLists', params }) +} diff --git a/src/api/finance/center.ts b/src/api/finance/center.ts new file mode 100644 index 0000000..26372c6 --- /dev/null +++ b/src/api/finance/center.ts @@ -0,0 +1,5 @@ +import request from '@/utils/request' + +export function getFinanceCenter(params: any) { + return request.get({ url: '/finance/statistics', params }) +} diff --git a/src/api/finance/recharge.ts b/src/api/finance/recharge.ts new file mode 100644 index 0000000..36ec76f --- /dev/null +++ b/src/api/finance/recharge.ts @@ -0,0 +1,6 @@ +import request from '@/utils/request' + +// 充值记录 +export function apiRechargeRecord(params: any) { + return request.get({ url: '/recharge/list', params }) +} diff --git a/src/api/finance/record.ts b/src/api/finance/record.ts new file mode 100644 index 0000000..236fdfe --- /dev/null +++ b/src/api/finance/record.ts @@ -0,0 +1,26 @@ +import request from '@/utils/request' + +// 列表 +export function getRefundList(params: any = '') { + return request.post({ url: '/refund/list', params }) +} + +// 退款详情 +export function getRefundlogLists(params: any) { + return request.get({ url: '/refund/detail', params }) +} + +// 重新退款 +export function getreRefund(params: any) { + return request.post({ url: '/refund/repeat', params }) +} + +// 统计金额 +export function getAmount(params: any) { + return request.get({ url: '/refund/statistics/amount', params }) +} + +// 统计数量 +export function getCount(params: any) { + return request.post({ url: '/refund/statistics/count', params }) +} diff --git a/src/api/finance/withdraw.ts b/src/api/finance/withdraw.ts new file mode 100644 index 0000000..539ecd3 --- /dev/null +++ b/src/api/finance/withdraw.ts @@ -0,0 +1,10 @@ +import request from '@/utils/request' + +// 提现申请列表 +export function applyForList(params: any) { + return request.post({ url: '/withdraw/applyForList', params }) +} +// 审核提现编辑 +export function applyForEdit(params: any) { + return request.post({ url: '/withdraw/applyForEdit', params }) +} diff --git a/src/api/master_worker/index.ts b/src/api/master_worker/index.ts new file mode 100644 index 0000000..0ead2ee --- /dev/null +++ b/src/api/master_worker/index.ts @@ -0,0 +1,113 @@ +/* + * @Author: micky 1254597151@qq.com + * @Date: 2023-08-14 15:56:31 + * @LastEditors: micky 1254597151@qq.com + * @LastEditTime: 2023-11-09 17:18:09 + * @FilePath: \housekeeping-admin\src\api\master_worker\index.ts + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +import request from '@/utils/request' + +// 师傅列表 +export function apiMasterWorkerLists(params: any) { + return request.post({ url: '/staff/list', params }) +} + +// 师傅详情 +export function apiMasterWorkerDetail(params: any) { + return request.get({ url: '/staff/detail', params }) +} + +// 师傅添加 +export function apiMasterWorkerAdd(params: any) { + return request.post({ url: '/staff/add', params }) +} + +// 师傅编辑 +export function apiMasterWorkerEdit(params: any) { + return request.post({ url: '/staff/edit', params }) +} + +// 师傅状态 +export function apiMasterWorkerStatusEdit(params: any) { + return request.post({ url: '/staff/receiveOrderStatus', params }) +} + +// 师傅删除 +export function apiMasterWorkerDel(params: any) { + return request.get({ url: '/staff/del', params }) +} + +// 查询选择的服务区域 +export function apiMasterWorkerArea(params: any) { + return request.get({ url: '/serviceAreaStaff/list', params }) +} + +// 单独服务区域添加 +export function apiMasterWorkerAreaAdd(params: any) { + return request.post({ url: '/serviceAreaStaff/edit', params }) +} +// 师傅申请列表 +export function apiMasterWorkerApply(params: any) { + return request.get({ url: '/StaffApplyFor/list', params }) +} +// 师傅审核申请 +export function apiMasterWorkerApplyAgreement(params: any) { + return request.post({ url: '/StaffApplyFor/checkStaffApplyFor', params }) +} +// 师傅资料详情 +export function apiMasterWorkerAuthDetail(params: any) { + return request.get({ url: '/StaffApplyFor/detail', params }) +} +// 师傅体检报告申请列表 +export function apiMasterWorkerPhysical(params: any) { + return request.get({ url: '/physical/examination/list', params }) +} +// 师傅审核体检报告申请 +export function apiMasterWorkerPhysicalAgreement(params: any) { + return request.post({ url: '/physical/examination/checkApplyFor', params }) +} +// 未绑定师傅用户列表 +export function apiUserNotStaff(params: any) { + return request.get({ url: '/user/getNotBindingStaffUser', params }) +} +// 文件上传 +export function apiUploadFile(params: any) { + return request.post({ url: '/common/upload/image', params, headers: { 'Content-Type': 'multipart/form-data' } }) +} +// 申诉列表 +export function apiFeedbackList(params: any) { + return request.get({ url: '/feedback/list', params }) +} +// 删除申诉 +export function apiFeedbackDel(params: any) { + return request.post({ url: '/feedback/del', params }) +} +// 审核申诉 +export function apiFeedbackAgreement(params: any) { + return request.post({ url: '/feedback/checkFeedback', params }) +} +// 师傅退单规则 +export function apiOrderRule(params: any) { + return request.post({ url: '/cancel/order/config/add', params }) +} +// 获取设置规则列表 +export function apiRuleList(params: any) { + return request.get({ url: '/cancel/order/config/list', params }) +} +// 师傅改派单列表 +export function apiStaffCancelOrderList(params: any) { + return request.get({ url: '/reassignment/list', params }) +} +// 获取未上传体检报告师傅 +export function apiStaffUnUploadPdfList(params: any) { + return request.get({ url: '/staff/getNotPhysicalExaminationStaff', params }) +} +// 师傅提交体检报告 +export function apiStaffPhysical(params: any) { + return request.post({ url: '/physical/examination/uploadPhysicalExamination', params }) +} + +export function apiStaffIsOperationalUpdate(params: any) { + return request.post({ url: '/staff/updateStaffOperationalStatus', params }) +} diff --git a/src/api/message.ts b/src/api/message.ts new file mode 100644 index 0000000..8d7ec49 --- /dev/null +++ b/src/api/message.ts @@ -0,0 +1,31 @@ +import request from '@/utils/request' + +// 通知设置列表 +export function noticeLists(params: any) { + return request.get({ url: '/setting/notice/list', params }) +} + +// 通知设置详情 +export function noticeDetail(params: any) { + return request.get({ url: '/setting/notice/detail', params }) +} + +// 通知设置保存 +export function setNoticeConfig(params: any) { + return request.post({ url: '/setting/notice/save', params }) +} + +// 短信设置列表 +export function smsLists() { + return request.get({ url: '/setting/sms/list' }) +} + +// 短信设置详情 +export function smsDetail(params: any) { + return request.get({ url: '/setting/sms/detail', params }) +} + +// 短信设置保存 +export function setSmsConfig(params: any) { + return request.post({ url: '/setting/sms/save', params }) +} diff --git a/src/api/order/lists.ts b/src/api/order/lists.ts new file mode 100644 index 0000000..d60a2d8 --- /dev/null +++ b/src/api/order/lists.ts @@ -0,0 +1,60 @@ +import request from '@/utils/request' + +// 订单列表 +export function apiOrderLists(params: any) { + return request.post({ url: '/order/list', params }) +} + +// 订单详情 +export function apiOrderDetail(params: any) { + return request.get({ url: '/order/detail', params }) +} + +// 订单取消 +export function apiOrderCancel(params: any) { + return request.post({ url: '/order/cancel', params }) +} + +// 订单商家备注 +export function apiOrderRemark(params: any) { + return request.get({ url: '/order/remark', params }) +} + +// 订单商家备注详情 +export function apiOrderRemarkDetail(params: any) { + return request.get({ url: '/order.order/remarkDetail', params }) +} + +// 订单删除 +export function apiOrderDel(params: any) { + return request.get({ url: '/order/del', params }) +} + +// 统计订单状态数据 +export function apiOrderStatis(params: any) { + return request.get({ url: '/order/statistics', params }) +} + +// 订单核销 +export function apiOrderVerification(params: any) { + return request.get({ url: '/order/verification', params }) +} + +// 师傅列表 +export function apiMasterLists(params: any) { + return request.post({ url: '/staff/list', params }) +} + +// 指派师傅 +export function apiDispatchStaff(params: any) { + return request.get({ url: '/order/dispatch', params }) +} +// 重新指派师傅获取分数 +export function apiDispatchStaffScore(params: any) { + return request.get({ url: '/cancel/order/config/getCancelOrderConfigByOrder', params }) +} + +// 确认服务 +export function apiConfirmService(params: any) { + return request.post({ url: '/order/staff/confirm', params }) +} diff --git a/src/api/org/department.ts b/src/api/org/department.ts new file mode 100644 index 0000000..b4899a0 --- /dev/null +++ b/src/api/org/department.ts @@ -0,0 +1,26 @@ +import request from '@/utils/request' + +// 部门列表 +export function deptLists(params?: any) { + return request.get({ url: '/system/dept/list', params }) +} + +// 添加部门 +export function deptAdd(params: any) { + return request.post({ url: '/system/dept/add', params }) +} + +// 编辑部门 +export function deptEdit(params: any) { + return request.post({ url: '/system/dept/edit', params }) +} + +// 删除部门 +export function deptDelete(params: any) { + return request.post({ url: '/system/dept/del', params }) +} + +// 部门详情 +export function deptDetail(params?: any) { + return request.get({ url: '/system/dept/detail', params }) +} diff --git a/src/api/org/post.ts b/src/api/org/post.ts new file mode 100644 index 0000000..63a15fc --- /dev/null +++ b/src/api/org/post.ts @@ -0,0 +1,30 @@ +import request from '@/utils/request' + +// 岗位列表 +export function postLists(params?: any) { + return request.get({ url: '/system/post/list', params }) +} +// 岗位列表 +export function postAll(params?: any) { + return request.get({ url: '/system/post/all', params }) +} + +// 添加岗位 +export function postAdd(params: any) { + return request.post({ url: '/system/post/add', params }) +} + +// 编辑岗位 +export function postEdit(params: any) { + return request.post({ url: '/system/post/edit', params }) +} + +// 删除岗位 +export function postDelete(params: any) { + return request.post({ url: '/system/post/del', params }) +} + +// 岗位详情 +export function postDetail(params: any) { + return request.get({ url: '/system/post/detail', params }) +} diff --git a/src/api/perms/admin.ts b/src/api/perms/admin.ts new file mode 100644 index 0000000..a54b275 --- /dev/null +++ b/src/api/perms/admin.ts @@ -0,0 +1,31 @@ +import request from '@/utils/request' + +// 管理员列表 +export function adminLists(params: any) { + return request.get({ url: '/system/admin/list', params }) +} + +// 管理员添加 +export function adminAdd(params: any) { + return request.post({ url: '/system/admin/add', params }) +} + +// 管理员编辑 +export function adminDetail(params: any) { + return request.get({ url: '/system/admin/detail', params }) +} + +// 管理员编辑 +export function adminEdit(params: any) { + return request.post({ url: '/system/admin/edit', params }) +} + +// 管理员删除 +export function adminDelete(params: any) { + return request.post({ url: '/system/admin/del', params }) +} + +// 管理员删除 +export function adminStatus(params: any) { + return request.post({ url: '/system/admin/disable', params }) +} diff --git a/src/api/perms/menu.ts b/src/api/perms/menu.ts new file mode 100644 index 0000000..577e143 --- /dev/null +++ b/src/api/perms/menu.ts @@ -0,0 +1,26 @@ +import request from '@/utils/request' + +// 菜单列表 +export function menuLists(params?: Record) { + return request.get({ url: '/system/menu/list', params }) +} + +// 添加菜单 +export function menuAdd(params: Record) { + return request.post({ url: '/system/menu/add', params }) +} + +// 编辑菜单 +export function menuEdit(params: Record) { + return request.post({ url: '/system/menu/edit', params }) +} + +// 菜单删除 +export function menuDelete(params: Record) { + return request.post({ url: '/system/menu/del', params }) +} + +// 菜单删除 +export function menuDetail(params: Record) { + return request.get({ url: '/system/menu/detail', params }) +} diff --git a/src/api/perms/role.ts b/src/api/perms/role.ts new file mode 100644 index 0000000..3225443 --- /dev/null +++ b/src/api/perms/role.ts @@ -0,0 +1,29 @@ +import request from '@/utils/request' + +// 角色列表 +export function roleLists(params: any) { + return request.get({ url: '/system/role/list', params }) +} + +// 角色列表 +export function roleAll(params?: any) { + return request.get({ url: '/system/role/all', params }) +} + +// 角色列表 +export function roleDetail(params: any) { + return request.get({ url: '/system/role/detail', params }) +} + +// 添加角色 +export function roleAdd(params: any) { + return request.post({ url: '/system/role/add', params }) +} +// 编辑角色 +export function roleEdit(params: any) { + return request.post({ url: '/system/role/edit', params }) +} +// 删除角色 +export function roleDelete(params: any) { + return request.post({ url: '/system/role/del', params }) +} diff --git a/src/api/service/activity.ts b/src/api/service/activity.ts new file mode 100644 index 0000000..3a3f18b --- /dev/null +++ b/src/api/service/activity.ts @@ -0,0 +1,39 @@ +/* + * @Author: micky 1254597151@qq.com + * @Date: 2023-12-19 15:41:58 + * @LastEditors: micky 1254597151@qq.com + * @LastEditTime: 2023-12-20 18:11:06 + * @FilePath: \housekeeping-admin\src\api\service\activity.ts + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +import request from '@/utils/request' + +// 活动专区列表 +export function apiActivityLists(params: any) { + return request.get({ url: '/activity/list', params }) +} + +// 添加活动专区 +export function apiActivityAdd(params: any) { + return request.post({ url: '/activity/add', params }) +} + +// 删除活动专区 +export function apiActivityDel(params: any) { + return request.post({ url: '/activity/del', params }) +} + +// 编辑活动专区 +export function apiActivityEdit(params: any) { + return request.post({ url: '/activity/edit', params }) +} + +// 编辑活动专区状态 +export function apiActivityStatusEdit(params: any) { + return request.post({ url: '/activity/status', params }) +} + +// 活动专区详情 +export function apiActivityDetail(params: any) { + return request.get({ url: '/activity/detail', params }) +} diff --git a/src/api/service/area.ts b/src/api/service/area.ts new file mode 100644 index 0000000..627d8da --- /dev/null +++ b/src/api/service/area.ts @@ -0,0 +1,29 @@ +import axios from 'axios' +import request from '@/utils/request' + +// 获取当前位置 +export function apiMapLocation(params) { + return new Promise(async (resolve, reject) => { + const { data } = await axios.get('/tecent/ws/location/v1/ip', { params }) + data.status === 0 ? resolve(data) : reject(data.message) + }) +} +// 根据地址获取经纬度 +export function getLonAndLatByArea(params) { + return new Promise(async (resolve, reject) => { + const { data } = await axios.get('/tecent/ws/geocoder/v1', { params }) + data.status === 0 ? resolve(data) : reject(data.message) + }) +} +// 根据当前位置获取区域列表 +export function getAreaListByLocation(params) { + return request.get({ url: '/serviceArea/list', params }); +} +// 添加区域 +export function addArea(params) { + return request.post({ url: '/serviceArea/add', params }) +} +// 删除区域 +export function delArea(params) { + return request.get({ url: '/serviceArea/del', params }) +} \ No newline at end of file diff --git a/src/api/service/category.ts b/src/api/service/category.ts new file mode 100644 index 0000000..be6e5fc --- /dev/null +++ b/src/api/service/category.ts @@ -0,0 +1,36 @@ +import request from "@/utils/request"; + +// 分类列表 +export function apiCategoryLists(params: any) { + return request.get({ url: "/category/list", params }); +} + +// 添加分类 +export function apiCategoryAdd(params: any) { + return request.post({ url: "/category/add", params }); +} + +// 删除分类 +export function apiCategoryDel(params: any) { + return request.get({ url: "/category/del", params }); +} + +// 编辑分类 +export function apiCategoryEdit(params: any) { + return request.post({ url: "/category/edit", params }); +} + +// 编辑分类状态 +export function apiCategoryStatusEdit(params: any) { + return request.post({ url: "/category/status", params }); +} + +// 分类详情 +export function apiCategoryDetail(params: any) { + return request.get({ url: "/category/detail", params }); +} + +// 通用分类列表 +export function apiCategoryCommonLists() { + return request.get({ url: "/category/commonList" }); +} diff --git a/src/api/service/evaluate.ts b/src/api/service/evaluate.ts new file mode 100644 index 0000000..2e8bba0 --- /dev/null +++ b/src/api/service/evaluate.ts @@ -0,0 +1,28 @@ +import request from "@/utils/request"; + +// 评价列表 +export function apiCommentLists(params: any) { + return request.post({ url: "/comment/list", params }); +} + +// 评价回复 +export function apiCommentReply(params: any) { + return request.post({ url: "/comment/reply", params }); +} + +// 删除评价 +export function apiCommentDel(params: any) { + return request.get({ url: "/comment/del", params }); +} + +// 评价详情 +export function apiCommentDetail(params: any) { + return request.get({ url: "/goods.goods_comment/detail", params }); +} +// 修改客服评分 +export function apiCustomerServiceAppraise(params: any) { + return request.post({ url: "/comment/customerServiceAppraiseScore", params }); +} +export function apiStaffScore(params: any) { + return request.get({ url: "/comment/calculateStaffScore", params }); +} diff --git a/src/api/service/lists.ts b/src/api/service/lists.ts new file mode 100644 index 0000000..5eb4b98 --- /dev/null +++ b/src/api/service/lists.ts @@ -0,0 +1,46 @@ +import request from '@/utils/request' + +// 服务列表 +export function apiServiceLists(params: any) { + return request.get({ url: '/goods/list', params }) +} + +// 统计状态数据 +export function apiServiceStatis(params: any) { + return request.get({ url: '/goods/statistics', params }) +} + +// 添加服务 +export function apiServiceAdd(params: any) { + return request.post({ url: '/goods/add', params }) +} + +// 删除服务 +export function apiServiceDel(params: any) { + return request.post({ url: '/goods/del', params }) +} + +// 编辑服务 +export function apiServiceEdit(params: any) { + return request.post({ url: '/goods/edit', params }) +} + +// 编辑服务状态 +export function apiServiceStatus(params: any) { + console.log("apiServiceStatus", params) + return request.post({ url: '/goods/status', params }) +} + +// 编辑服务新品推荐 +export function apiServiceNewRecommend(params: any) { + return request.post({ url: '/goods/newRecommend', params }) +} + +export function apiServicesBatchUpdatePrice(params: any) { + return request.post({ url: '/goods/batchUpdatePrice', params }) +} + +// 服务详情 +export function apiServiceDetail(params: any) { + return request.get({ url: '/goods/detail', params }) +} diff --git a/src/api/service/subscribe.ts b/src/api/service/subscribe.ts new file mode 100644 index 0000000..8a07480 --- /dev/null +++ b/src/api/service/subscribe.ts @@ -0,0 +1,86 @@ +/* + * @Author: micky 1254597151@qq.com + * @Date: 2023-08-14 15:56:31 + * @LastEditors: micky 1254597151@qq.com + * @LastEditTime: 2023-10-13 16:28:32 + * @FilePath: \housekeeping-admin\src\api\order\subscribe.ts + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +import request from '@/utils/request' + +// 获取预约天数 +export function apiGetOrderTime() { + return request.get({ url: '/time/getTime' }) +} + +// 设置预约时长 +export function apiSetOrderTime(params: any) { + return request.post({ url: '/time/setTime', params }) +} + +// 获取时间段列表 +export function apiOrderTimeLists(params: any) { + return request.get({ url: '/time/list', params }) +} + +// 获取时间段详情 +export function apiOrderTimeDetail(params: any) { + return request.get({ url: '/time/detail', params }) +} + +// 添加时间段 +export function apiOrderTimeAdd(params: any) { + return request.post({ url: '/time/add', params }) +} + +// 编辑时间段 +export function apiOrderTimeEdit(params: any) { + return request.post({ url: '/time/edit', params }) +} + +// 删除时间段 +export function apiOrderTimeDel(params: any) { + return request.post({ url: '/time/batchDel', params }) +} + +// -------------------------------------------------------------------- + +// 服务时间列表 +export function apiGoodsTimeList(params: any) { + return request.get({ url: '/goods/time/list', params }) +} + +// 编辑服务时间 +export function apiGoodsTimeEdit(params: any) { + return request.post({ url: '/goods/time/edit', params }) +} + +// 服务时间修改状态 +export function apiGoodsTimeUpdateStatus(params: any) { + return request.post({ url: '/goods/time/updateStatus', params }) +} + +// 服务时间新增 +export function apiAddGoodsTime(params: any) { + return request.post({ url: '/goods/time/add', params }) +} + +// 服务时间编辑 +export function apiEditGoodsTime(params: any) { + return request.post({ url: '/goods/time/edit', params }) +} + +// 服务时间详情 +export function apiGetGoodsTimeDetail(params: any) { + return request.get({ url: '/goods/time/detail', params }) +} + +// 服务时间删除 +export function apiGetGoodsTimeDel(params: any) { + return request.post({ url: '/goods/time/del', params }) +} + +// 服务时间所有数据 +export function apiGetGoodsTimeAllList(params: any) { + return request.get({ url: '/goods/time/all', params }) +} diff --git a/src/api/service/unit.ts b/src/api/service/unit.ts new file mode 100644 index 0000000..d11cc5a --- /dev/null +++ b/src/api/service/unit.ts @@ -0,0 +1,31 @@ +import request from "@/utils/request"; + +// 单位列表 +export function apiUnitLists(params: any) { + return request.get({ url: "/unit/list", params }); +} + +// 添加单位 +export function apiUnitAdd(params: any) { + return request.post({ url: "/unit/add", params }); +} + +// 删除单位 +export function apiUnitDel(params: any) { + return request.get({ url: "/unit/del", params }); +} + +// 编辑单位 +export function apiUnitEdit(params: any) { + return request.post({ url: "/unit/edit", params }); +} + +// 单位详情 +export function apiUnitDetail(params: any) { + return request.get({ url: "/unit/detail", params }); +} + +// 通用单位列表 +export function apiUnitCommonLists() { + return request.get({ url: "/goods.goods_unit/commonLists" }); +} diff --git a/src/api/setting/dict.ts b/src/api/setting/dict.ts new file mode 100644 index 0000000..1d5d2a8 --- /dev/null +++ b/src/api/setting/dict.ts @@ -0,0 +1,61 @@ +import request from '@/utils/request' + +// 字典类型列表 +export function dictTypeLists(params?: any) { + return request.get({ url: '/setting/dict/type/list', params }) +} + +// 字典类型列表 +export function dictTypeAll(params?: any) { + return request.get({ url: '/setting/dict/type/all', params }) +} + +// 添加字典类型 +export function dictTypeAdd(params: any) { + return request.post({ url: '/setting/dict/type/add', params }) +} + +// 编辑字典类型 +export function dictTypeEdit(params: any) { + return request.post({ url: '/setting/dict/type/edit', params }) +} + +// 删除字典类型 +export function dictTypeDelete(params: any) { + return request.post({ url: '/setting/dict/type/del', params }) +} + +// 字典数据列表 +export function dictDataLists(params: any) { + return request.get( + { url: '/setting/dict/data/list', params }, + { + ignoreCancelToken: true + } + ) +} + +// 字典数据列表 +export function dictDataAll(params: any) { + return request.get( + { url: '/setting/dict/data/all', params }, + { + ignoreCancelToken: true + } + ) +} + +// 添加字典数据 +export function dictDataAdd(params: any) { + return request.post({ url: '/setting/dict/data/add', params }) +} + +// 编辑字典数据 +export function dictDataEdit(params: any) { + return request.post({ url: '/setting/dict/data/edit', params }) +} + +// 删除字典数据 +export function dictDataDelete(params: any) { + return request.post({ url: '/setting/dict/data/del', params }) +} diff --git a/src/api/setting/map.ts b/src/api/setting/map.ts new file mode 100644 index 0000000..6de21ab --- /dev/null +++ b/src/api/setting/map.ts @@ -0,0 +1,11 @@ +import request from '@/utils/request' + +// 获取地图配置 +export function getMapConfig(params: any = '') { + return request.get({ url: '/setting/website/getMapKey', params }) +} + +// 设置地图配置 +export function setMapConfig(params: any) { + return request.post({ url: '/setting/website/setMapKey', params }) +} diff --git a/src/api/setting/payment.ts b/src/api/setting/payment.ts new file mode 100644 index 0000000..6df5556 --- /dev/null +++ b/src/api/setting/payment.ts @@ -0,0 +1,28 @@ +import request from '@/utils/request' + +/** 支付配置 Start **/ +// 获取支付配置 +export function apiPaymentConfigLists() { + return request.get({ url: '/pay/list' }) +} + +// 设置支付配置 +export function apiPaymentConfigSet(params: any) { + return request.post({ url: '/pay/edit', params }) +} + +// 支付配置详情 +export function apiPaymentConfigDetail(params: any) { + return request.get({ url: '/pay/detail', params }) +} + +// 获取支付方式列表 +export function apiPaymentWayLists() { + return request.get({ url: '/way/list' }) +} + +// 设置支付方式 +export function apiPaymentWaySet(params: any) { + return request.post({ url: '/way/edit', params }) +} +/** 支付配置 End **/ diff --git a/src/api/setting/search.ts b/src/api/setting/search.ts new file mode 100644 index 0000000..715402d --- /dev/null +++ b/src/api/setting/search.ts @@ -0,0 +1,27 @@ +import request from '@/utils/request' + +/** + * @return { Promise } + * @description 获取热门搜索数据 + */ +export function getSearch() { + return request.get({ url: '/setting/search/detail' }) +} + +export interface List { + name: string // 搜索关键字 + sort: number // 热门搜索排序 +} + +export interface Search { + isHotSearch: number // 是否开启搜索0/1 + list: List[] +} +/** + * @return { Promise } + * @param { Search } Search + * @description 设置热门搜索 + */ +export function setSearch(params: Search) { + return request.post({ url: '/setting/search/save', params }) +} diff --git a/src/api/setting/storage.ts b/src/api/setting/storage.ts new file mode 100644 index 0000000..268d254 --- /dev/null +++ b/src/api/setting/storage.ts @@ -0,0 +1,21 @@ +import request from '@/utils/request' + +// 获取存储引擎列表 +export function storageLists() { + return request.get({ url: '/setting/storage/list' }) +} + +// 设置存储引擎信息 +export function storageChange(params: any) { + return request.post({ url: '/setting/storage/change', params }) +} + +// 设置存储引擎信息 +export function storageSetup(params: any) { + return request.post({ url: '/setting/storage/edit', params }) +} + +// 获取存储配置信息 +export function storageDetail(params: any) { + return request.get({ url: '/setting/storage/detail', params }) +} diff --git a/src/api/setting/system.ts b/src/api/setting/system.ts new file mode 100644 index 0000000..f9bcf8f --- /dev/null +++ b/src/api/setting/system.ts @@ -0,0 +1,38 @@ +import request from '@/utils/request' + +// 获取系统环境 +export function systemInfo() { + return request.get({ url: '/monitor/server' }) +} + +// 获取系统日志列表 +export function systemLogLists(params: any) { + return request.get({ url: '/system/log/operate', params }) +} + +// 系统缓存监控 +export function systemCache() { + return request.get({ url: '/monitor/cache' }) +} + +// 定时任务列表 +export const apiCrontabLists = () => request.get({ url: '/crontab/list' }) + +// 添加定时任务 +export const apiCrontabAdd = (params: any) => request.post({ url: '/crontab/add', params }) + +// 查看详情 +export const apiCrontabDetail = (params: any) => request.get({ url: '/crontab/detail', params }) + +// 编辑定时任务 +export const apiCrontabEdit = (params: any) => request.post({ url: '/crontab/edit', params }) + +// 删除定时任务 +export const apiCrontabDel = (params: any) => request.post({ url: '/crontab/del', params }) + +// 获取规则执行时间 +export const apiCrontabExpression = (params: any) => + request.get({ url: '/crontab/expression', params }) + +// 操作定时任务 +export const apiSrontabOperate = (params: any) => request.post({ url: '/crontab/operate', params }) diff --git a/src/api/setting/user.ts b/src/api/setting/user.ts new file mode 100644 index 0000000..880d70f --- /dev/null +++ b/src/api/setting/user.ts @@ -0,0 +1,43 @@ +import request from '@/utils/request' + +/** + * @return { Promise } + * @description 获取用户设置 + */ +export function getUserSetup() { + return request.get({ url: '/setting/user/detail' }) +} + +/** + * @return { Promise } + * @param { string } defaultAvatar 默认用户头像 + * @description 设置用户设置 + */ +export function setUserSetup(params: { defaultAvatar: string }) { + return request.post({ url: '/setting/user/save', params }) +} + +/** + * @return { Promise } + * @description 设置登录注册规则 + */ +export function getLogin() { + return request.get({ url: '/setting/login/detail' }) +} + +export interface LoginSetup { + loginWay: number[] | any // 登录方式, 逗号隔开 + forceBindMobile: number // 强制绑定手机 0/1 + openAgreement: number // 是否开启协议 0/1 + openOtherAuth: number // 第三方登录 0/1 + autoLoginAuth: number[] | any // 第三方自动登录 逗号隔开 + tokenValidity: number +} +/** + * @return { Promise } + * @param { LoginSetup } LoginSetup + * @description 设置登录注册规则 + */ +export function setLogin(params: LoginSetup) { + return request.post({ url: '/setting/login/save', params }) +} diff --git a/src/api/setting/website.ts b/src/api/setting/website.ts new file mode 100644 index 0000000..294575b --- /dev/null +++ b/src/api/setting/website.ts @@ -0,0 +1,27 @@ +import request from '@/utils/request' + +// 获取备案信息 +export function getCopyright() { + return request.get({ url: '/setting/copyright/detail' }) +} +// 设置备案信息 +export function setCopyright(params: any) { + return request.post({ url: '/setting/copyright/save', params }) +} +// 获取网站信息 +export function getWebsite() { + return request.get({ url: '/setting/website/detail' }) +} +// 设置网站信息 +export function setWebsite(params: any) { + return request.post({ url: '/setting/website/save', params }) +} + +// 获取政策协议 +export function getProtocol() { + return request.get({ url: '/setting/protocol/detail' }) +} +// 设置政策协议 +export function setProtocol(params: any) { + return request.post({ url: '/setting/protocol/save', params }) +} diff --git a/src/api/shop.ts b/src/api/shop.ts new file mode 100644 index 0000000..78208e5 --- /dev/null +++ b/src/api/shop.ts @@ -0,0 +1,28 @@ +import request from '@/utils/request' + +//首页数据 +export function getIndex() { + return request.get({ url: '/index' }) +} + +// 装修页面 +export function getDecorate(data: any) { + return request.get({ url: '/decorate', data }) +} + +/** + * @description 热门搜索 + * @return { Promise } + */ +export function getHotSearch() { + return request.get({ url: '/hotSearch' }) +} + +/** + * @description 搜索 + * @param { string } keyword 关键词 + * @return { Promise } + */ +export function getSearch(data: { keyword: string; pageNo: number; pageSize: number }) { + return request.get({ url: '/search', data }) +} diff --git a/src/api/tools/code.ts b/src/api/tools/code.ts new file mode 100644 index 0000000..980ead5 --- /dev/null +++ b/src/api/tools/code.ts @@ -0,0 +1,66 @@ +import request from '@/utils/request' + +// 代码生成已选数据表列表接口 +export function generateTable(params: any) { + return request.get({ url: '/gen/list', params }) +} + +// 数据表列表接口 +export function dataTable(params: any) { + return request.get({ url: '/gen/db', params }) +} + +//选择要生成代码的数据表 +export function selectTable(params: any) { + return request.post( + { url: '/gen/importTable', params }, + { + isParamsToData: false + } + ) +} + +// 已选择的数据表详情 +export function tableDetail(params: any) { + return request.get({ url: '/gen/detail', params }) +} + +//同步字段 +export function syncColumn(params: any) { + return request.post( + { url: '/gen/syncTable', params }, + { + isParamsToData: false + } + ) +} + +//删除已选择的数据表 +export function generateDelete(params: any) { + return request.post({ url: '/gen/delTable', params }) +} + +//编辑已选表字段 +export function generateEdit(params: any) { + return request.post({ url: '/gen/editTable', params }) +} + +//预览代码 +export function generatePreview(params: any) { + return request.get({ url: '/gen/previewCode', params }) +} + +//生成代码 +export function generateCode(params: any) { + return request.get({ url: '/gen/genCode', params }) +} + +//下载代码 +export function downloadCode(params: any) { + return request.get( + { responseType: 'blob', url: '/gen/downloadCode', params }, + { + isTransformResponse: false + } + ) +} diff --git a/src/api/transaction_settings/index.ts b/src/api/transaction_settings/index.ts new file mode 100644 index 0000000..905350e --- /dev/null +++ b/src/api/transaction_settings/index.ts @@ -0,0 +1,11 @@ +import request from "@/utils/request"; + +// 获取交易设置 +export function getConfig(params: any = "") { + return request.get({ url: "/setting/transaction", params }); +} + +// 设置交易设置 +export function setConfig(params: any) { + return request.post({ url: "/setting/transaction", params }); +} diff --git a/src/api/user.ts b/src/api/user.ts new file mode 100644 index 0000000..6ef3734 --- /dev/null +++ b/src/api/user.ts @@ -0,0 +1,58 @@ +import config from '@/config' +import request from '@/utils/request' + +// 登录 +export function login(params: Record) { + return request.post({ + url: '/system/login', + params: { ...params, terminal: config.terminal } + }) +} + +// 退出登录 +export function logout() { + return request.post({ url: '/system/logout' }) +} + +// 用户信息 +export function getUserInfo() { + return request.get({ url: '/system/admin/self' }) +} + +// 菜单路由 +export function getMenu() { + return request.get({ url: '/system/menu/route' }) +} + +// 编辑管理员信息 +export function setUserInfo(params: any) { + return request.post({ url: '/system/admin/upInfo', params }) +} + +// 用户列表 +export function apiUserLists(params: any) { + return request.get({ url: '/user/list', params }) +} + +// 设置用户信息 +export function apiSetUserInfo(params: { + id: number | string + field: string + value: string | number +}) { + return request.post({ url: '/user/edit', params }) +} + +// 用户详情 +export function apiUserDetail(params: any) { + return request.get({ url: '/user/detail', params }) +} + +// 调整余额 +export function adjustUserWallet(params: any) { + return request.post({ url: '/user/adjustWallet', params }) +} +// 用户退款配置列表 +export function apiUserRefundList(params: any) { + return request.get({ url: '/goods/cancelOrderConfig/list', params }) +} diff --git a/src/assets/icons/Androidfanhui.svg b/src/assets/icons/Androidfanhui.svg new file mode 100644 index 0000000..e9ada24 --- /dev/null +++ b/src/assets/icons/Androidfanhui.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/KMSguanli.svg b/src/assets/icons/KMSguanli.svg new file mode 100644 index 0000000..7c65298 --- /dev/null +++ b/src/assets/icons/KMSguanli.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/KTVyuding.svg b/src/assets/icons/KTVyuding.svg new file mode 100644 index 0000000..8187b5f --- /dev/null +++ b/src/assets/icons/KTVyuding.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/a-tixingdengpao.svg b/src/assets/icons/a-tixingdengpao.svg new file mode 100644 index 0000000..7074ae7 --- /dev/null +++ b/src/assets/icons/a-tixingdengpao.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/anquan.svg b/src/assets/icons/anquan.svg new file mode 100644 index 0000000..bf90259 --- /dev/null +++ b/src/assets/icons/anquan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/anquan_mian.svg b/src/assets/icons/anquan_mian.svg new file mode 100644 index 0000000..f3486b5 --- /dev/null +++ b/src/assets/icons/anquan_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/anquan_mian1.svg b/src/assets/icons/anquan_mian1.svg new file mode 100644 index 0000000..f3486b5 --- /dev/null +++ b/src/assets/icons/anquan_mian1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/banxing_mian.svg b/src/assets/icons/banxing_mian.svg new file mode 100644 index 0000000..3cb468f --- /dev/null +++ b/src/assets/icons/banxing_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/baoxian.svg b/src/assets/icons/baoxian.svg new file mode 100644 index 0000000..9885e88 --- /dev/null +++ b/src/assets/icons/baoxian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/bendishenghuodaxue.svg b/src/assets/icons/bendishenghuodaxue.svg new file mode 100644 index 0000000..4754e16 --- /dev/null +++ b/src/assets/icons/bendishenghuodaxue.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/bianji.svg b/src/assets/icons/bianji.svg new file mode 100644 index 0000000..c8674e7 --- /dev/null +++ b/src/assets/icons/bianji.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/biaoqing.svg b/src/assets/icons/biaoqing.svg new file mode 100644 index 0000000..fcc84fb --- /dev/null +++ b/src/assets/icons/biaoqing.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/bukejian.svg b/src/assets/icons/bukejian.svg new file mode 100644 index 0000000..c79cd78 --- /dev/null +++ b/src/assets/icons/bukejian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/caipinguanli.svg b/src/assets/icons/caipinguanli.svg new file mode 100644 index 0000000..3b1fc28 --- /dev/null +++ b/src/assets/icons/caipinguanli.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/caiwu.svg b/src/assets/icons/caiwu.svg new file mode 100644 index 0000000..e3e92f4 --- /dev/null +++ b/src/assets/icons/caiwu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/caiwu_jifen.svg b/src/assets/icons/caiwu_jifen.svg new file mode 100644 index 0000000..07d01df --- /dev/null +++ b/src/assets/icons/caiwu_jifen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/caiwu_tixian.svg b/src/assets/icons/caiwu_tixian.svg new file mode 100644 index 0000000..982ac58 --- /dev/null +++ b/src/assets/icons/caiwu_tixian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/canyinfuwu.svg b/src/assets/icons/canyinfuwu.svg new file mode 100644 index 0000000..5d87395 --- /dev/null +++ b/src/assets/icons/canyinfuwu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/carryout.svg b/src/assets/icons/carryout.svg new file mode 100644 index 0000000..4a06640 --- /dev/null +++ b/src/assets/icons/carryout.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/chexiao.svg b/src/assets/icons/chexiao.svg new file mode 100644 index 0000000..b9e6e5d --- /dev/null +++ b/src/assets/icons/chexiao.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/chihuohongbao.svg b/src/assets/icons/chihuohongbao.svg new file mode 100644 index 0000000..bb1fb66 --- /dev/null +++ b/src/assets/icons/chihuohongbao.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/chuangyiwuliao.svg b/src/assets/icons/chuangyiwuliao.svg new file mode 100644 index 0000000..045057d --- /dev/null +++ b/src/assets/icons/chuangyiwuliao.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/close.svg b/src/assets/icons/close.svg new file mode 100644 index 0000000..54f3e08 --- /dev/null +++ b/src/assets/icons/close.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/daiyunying.svg b/src/assets/icons/daiyunying.svg new file mode 100644 index 0000000..dc1c7c5 --- /dev/null +++ b/src/assets/icons/daiyunying.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/danwei.svg b/src/assets/icons/danwei.svg new file mode 100644 index 0000000..ba527e8 --- /dev/null +++ b/src/assets/icons/danwei.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/danxuankuang.svg b/src/assets/icons/danxuankuang.svg new file mode 100644 index 0000000..2ef171c --- /dev/null +++ b/src/assets/icons/danxuankuang.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/danxuanxuanzhong.svg b/src/assets/icons/danxuanxuanzhong.svg new file mode 100644 index 0000000..c7f230c --- /dev/null +++ b/src/assets/icons/danxuanxuanzhong.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/dayin.svg b/src/assets/icons/dayin.svg new file mode 100644 index 0000000..0d2291d --- /dev/null +++ b/src/assets/icons/dayin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/dayin_mian.svg b/src/assets/icons/dayin_mian.svg new file mode 100644 index 0000000..7989ff6 --- /dev/null +++ b/src/assets/icons/dayin_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/del.svg b/src/assets/icons/del.svg new file mode 100644 index 0000000..f938140 --- /dev/null +++ b/src/assets/icons/del.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/diancanshezhi.svg b/src/assets/icons/diancanshezhi.svg new file mode 100644 index 0000000..8723cbf --- /dev/null +++ b/src/assets/icons/diancanshezhi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/dianhua.svg b/src/assets/icons/dianhua.svg new file mode 100644 index 0000000..be006a9 --- /dev/null +++ b/src/assets/icons/dianhua.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/dianhua_mian.svg b/src/assets/icons/dianhua_mian.svg new file mode 100644 index 0000000..5554077 --- /dev/null +++ b/src/assets/icons/dianhua_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/dianpu_fengge.svg b/src/assets/icons/dianpu_fengge.svg new file mode 100644 index 0000000..a7dc3e1 --- /dev/null +++ b/src/assets/icons/dianpu_fengge.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/dianputuijian.svg b/src/assets/icons/dianputuijian.svg new file mode 100644 index 0000000..0e8a4c8 --- /dev/null +++ b/src/assets/icons/dianputuijian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/dianzifapiao.svg b/src/assets/icons/dianzifapiao.svg new file mode 100644 index 0000000..b2db463 --- /dev/null +++ b/src/assets/icons/dianzifapiao.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/dingcan.svg b/src/assets/icons/dingcan.svg new file mode 100644 index 0000000..46d4e95 --- /dev/null +++ b/src/assets/icons/dingcan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/dingdan.svg b/src/assets/icons/dingdan.svg new file mode 100644 index 0000000..e5b35a9 --- /dev/null +++ b/src/assets/icons/dingdan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/dingdan1.svg b/src/assets/icons/dingdan1.svg new file mode 100644 index 0000000..5330a6a --- /dev/null +++ b/src/assets/icons/dingdan1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/dingdan_mian.svg b/src/assets/icons/dingdan_mian.svg new file mode 100644 index 0000000..0929276 --- /dev/null +++ b/src/assets/icons/dingdan_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/dingwei.svg b/src/assets/icons/dingwei.svg new file mode 100644 index 0000000..ef573a7 --- /dev/null +++ b/src/assets/icons/dingwei.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/dingwei_mian.svg b/src/assets/icons/dingwei_mian.svg new file mode 100644 index 0000000..8c86674 --- /dev/null +++ b/src/assets/icons/dingwei_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/ditu.svg b/src/assets/icons/ditu.svg new file mode 100644 index 0000000..6b5e5f2 --- /dev/null +++ b/src/assets/icons/ditu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/ditu_mian.svg b/src/assets/icons/ditu_mian.svg new file mode 100644 index 0000000..bb542bf --- /dev/null +++ b/src/assets/icons/ditu_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/duizhang.svg b/src/assets/icons/duizhang.svg new file mode 100644 index 0000000..f63d6df --- /dev/null +++ b/src/assets/icons/duizhang.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/elemo.svg b/src/assets/icons/elemo.svg new file mode 100644 index 0000000..c1d5388 --- /dev/null +++ b/src/assets/icons/elemo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/ezhanggui.svg b/src/assets/icons/ezhanggui.svg new file mode 100644 index 0000000..cd50b0b --- /dev/null +++ b/src/assets/icons/ezhanggui.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/falvfuwubaoxiaohei.svg b/src/assets/icons/falvfuwubaoxiaohei.svg new file mode 100644 index 0000000..27ea856 --- /dev/null +++ b/src/assets/icons/falvfuwubaoxiaohei.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/fengniaopaotui.svg b/src/assets/icons/fengniaopaotui.svg new file mode 100644 index 0000000..3f5f7b1 --- /dev/null +++ b/src/assets/icons/fengniaopaotui.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/fenxiang.svg b/src/assets/icons/fenxiang.svg new file mode 100644 index 0000000..e4eb7cc --- /dev/null +++ b/src/assets/icons/fenxiang.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/fukuan.svg b/src/assets/icons/fukuan.svg new file mode 100644 index 0000000..939c745 --- /dev/null +++ b/src/assets/icons/fukuan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/fukuan_mian.svg b/src/assets/icons/fukuan_mian.svg new file mode 100644 index 0000000..ba094cc --- /dev/null +++ b/src/assets/icons/fukuan_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/fullscreen-exit.svg b/src/assets/icons/fullscreen-exit.svg new file mode 100644 index 0000000..e845a79 --- /dev/null +++ b/src/assets/icons/fullscreen-exit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/fullscreen.svg b/src/assets/icons/fullscreen.svg new file mode 100644 index 0000000..516e890 --- /dev/null +++ b/src/assets/icons/fullscreen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/fuwushichang.svg b/src/assets/icons/fuwushichang.svg new file mode 100644 index 0000000..2564370 --- /dev/null +++ b/src/assets/icons/fuwushichang.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/fuzhi.svg b/src/assets/icons/fuzhi.svg new file mode 100644 index 0000000..659c6e0 --- /dev/null +++ b/src/assets/icons/fuzhi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/gaode.svg b/src/assets/icons/gaode.svg new file mode 100644 index 0000000..8d26343 --- /dev/null +++ b/src/assets/icons/gaode.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/gengduo.svg b/src/assets/icons/gengduo.svg new file mode 100644 index 0000000..2956729 --- /dev/null +++ b/src/assets/icons/gengduo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/gengduoandroid.svg b/src/assets/icons/gengduoandroid.svg new file mode 100644 index 0000000..ecde71b --- /dev/null +++ b/src/assets/icons/gengduoandroid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/gift.svg b/src/assets/icons/gift.svg new file mode 100644 index 0000000..add9ce8 --- /dev/null +++ b/src/assets/icons/gift.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/gongyingshang.svg b/src/assets/icons/gongyingshang.svg new file mode 100644 index 0000000..9426995 --- /dev/null +++ b/src/assets/icons/gongyingshang.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/goods.svg b/src/assets/icons/goods.svg new file mode 100644 index 0000000..b80fbed --- /dev/null +++ b/src/assets/icons/goods.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/gou.svg b/src/assets/icons/gou.svg new file mode 100644 index 0000000..6354197 --- /dev/null +++ b/src/assets/icons/gou.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/gouwuche.svg b/src/assets/icons/gouwuche.svg new file mode 100644 index 0000000..6e76f7d --- /dev/null +++ b/src/assets/icons/gouwuche.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/gouxuan.svg b/src/assets/icons/gouxuan.svg new file mode 100644 index 0000000..8fe88a6 --- /dev/null +++ b/src/assets/icons/gouxuan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/gouxuan_mian.svg b/src/assets/icons/gouxuan_mian.svg new file mode 100644 index 0000000..375972b --- /dev/null +++ b/src/assets/icons/gouxuan_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/guanbi.svg b/src/assets/icons/guanbi.svg new file mode 100644 index 0000000..831bd0e --- /dev/null +++ b/src/assets/icons/guanbi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/guanli.svg b/src/assets/icons/guanli.svg new file mode 100644 index 0000000..4848092 --- /dev/null +++ b/src/assets/icons/guanli.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/guanli_mian.svg b/src/assets/icons/guanli_mian.svg new file mode 100644 index 0000000..db46ff1 --- /dev/null +++ b/src/assets/icons/guanli_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/gukefapiao.svg b/src/assets/icons/gukefapiao.svg new file mode 100644 index 0000000..341b686 --- /dev/null +++ b/src/assets/icons/gukefapiao.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/haibaosheji.svg b/src/assets/icons/haibaosheji.svg new file mode 100644 index 0000000..f875157 --- /dev/null +++ b/src/assets/icons/haibaosheji.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/heshoujilu.svg b/src/assets/icons/heshoujilu.svg new file mode 100644 index 0000000..cd25273 --- /dev/null +++ b/src/assets/icons/heshoujilu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/heshoujilu1.svg b/src/assets/icons/heshoujilu1.svg new file mode 100644 index 0000000..f8d1bd4 --- /dev/null +++ b/src/assets/icons/heshoujilu1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/hexiao_order.svg b/src/assets/icons/hexiao_order.svg new file mode 100644 index 0000000..f1c4034 --- /dev/null +++ b/src/assets/icons/hexiao_order.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/hide-2.svg b/src/assets/icons/hide-2.svg new file mode 100644 index 0000000..8c74146 --- /dev/null +++ b/src/assets/icons/hide-2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/hide.svg b/src/assets/icons/hide.svg new file mode 100644 index 0000000..5cbbabd --- /dev/null +++ b/src/assets/icons/hide.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/hongbao.svg b/src/assets/icons/hongbao.svg new file mode 100644 index 0000000..9d331b5 --- /dev/null +++ b/src/assets/icons/hongbao.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/huiche.svg b/src/assets/icons/huiche.svg new file mode 100644 index 0000000..5022718 --- /dev/null +++ b/src/assets/icons/huiche.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/huiyuanyingxiao.svg b/src/assets/icons/huiyuanyingxiao.svg new file mode 100644 index 0000000..ae06769 --- /dev/null +++ b/src/assets/icons/huiyuanyingxiao.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/huodongbaoming.svg b/src/assets/icons/huodongbaoming.svg new file mode 100644 index 0000000..0c60672 --- /dev/null +++ b/src/assets/icons/huodongbaoming.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/huodongguanli.svg b/src/assets/icons/huodongguanli.svg new file mode 100644 index 0000000..def7109 --- /dev/null +++ b/src/assets/icons/huodongguanli.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/huodongzhongxin.svg b/src/assets/icons/huodongzhongxin.svg new file mode 100644 index 0000000..f22bb26 --- /dev/null +++ b/src/assets/icons/huodongzhongxin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/huojian.svg b/src/assets/icons/huojian.svg new file mode 100644 index 0000000..f439dd8 --- /dev/null +++ b/src/assets/icons/huojian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/huojian_mian.svg b/src/assets/icons/huojian_mian.svg new file mode 100644 index 0000000..812d3be --- /dev/null +++ b/src/assets/icons/huojian_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/huolala.svg b/src/assets/icons/huolala.svg new file mode 100644 index 0000000..a42ade7 --- /dev/null +++ b/src/assets/icons/huolala.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/iOSfanhui.svg b/src/assets/icons/iOSfanhui.svg new file mode 100644 index 0000000..8aeefbb --- /dev/null +++ b/src/assets/icons/iOSfanhui.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/jia.svg b/src/assets/icons/jia.svg new file mode 100644 index 0000000..18fbd45 --- /dev/null +++ b/src/assets/icons/jia.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/jia_mian.svg b/src/assets/icons/jia_mian.svg new file mode 100644 index 0000000..5899c91 --- /dev/null +++ b/src/assets/icons/jia_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/jian.svg b/src/assets/icons/jian.svg new file mode 100644 index 0000000..295037f --- /dev/null +++ b/src/assets/icons/jian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/jian_mian.svg b/src/assets/icons/jian_mian.svg new file mode 100644 index 0000000..e9dfa91 --- /dev/null +++ b/src/assets/icons/jian_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/jianpan.svg b/src/assets/icons/jianpan.svg new file mode 100644 index 0000000..5a7dcb9 --- /dev/null +++ b/src/assets/icons/jianpan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/jianpanshanchu.svg b/src/assets/icons/jianpanshanchu.svg new file mode 100644 index 0000000..a5a5de1 --- /dev/null +++ b/src/assets/icons/jianpanshanchu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/jianshao.svg b/src/assets/icons/jianshao.svg new file mode 100644 index 0000000..0a4d919 --- /dev/null +++ b/src/assets/icons/jianshao.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/jiaopeiwangputong.svg b/src/assets/icons/jiaopeiwangputong.svg new file mode 100644 index 0000000..ec73071 --- /dev/null +++ b/src/assets/icons/jiaopeiwangputong.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/jiaoyi.svg b/src/assets/icons/jiaoyi.svg new file mode 100644 index 0000000..1396bac --- /dev/null +++ b/src/assets/icons/jiaoyi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/jiedan.svg b/src/assets/icons/jiedan.svg new file mode 100644 index 0000000..fcbe7a1 --- /dev/null +++ b/src/assets/icons/jiedan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/jiekuan.svg b/src/assets/icons/jiekuan.svg new file mode 100644 index 0000000..4b7377f --- /dev/null +++ b/src/assets/icons/jiekuan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/jingshi.svg b/src/assets/icons/jingshi.svg new file mode 100644 index 0000000..3cecfc7 --- /dev/null +++ b/src/assets/icons/jingshi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/jingshi_mian.svg b/src/assets/icons/jingshi_mian.svg new file mode 100644 index 0000000..fe636ee --- /dev/null +++ b/src/assets/icons/jingshi_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/jingshi_mian1.svg b/src/assets/icons/jingshi_mian1.svg new file mode 100644 index 0000000..fe636ee --- /dev/null +++ b/src/assets/icons/jingshi_mian1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/jingyin.svg b/src/assets/icons/jingyin.svg new file mode 100644 index 0000000..753f254 --- /dev/null +++ b/src/assets/icons/jingyin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/jingyin_mian.svg b/src/assets/icons/jingyin_mian.svg new file mode 100644 index 0000000..ce56e68 --- /dev/null +++ b/src/assets/icons/jingyin_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/jingying.svg b/src/assets/icons/jingying.svg new file mode 100644 index 0000000..5630813 --- /dev/null +++ b/src/assets/icons/jingying.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/jingying_mian.svg b/src/assets/icons/jingying_mian.svg new file mode 100644 index 0000000..4e7ca35 --- /dev/null +++ b/src/assets/icons/jingying_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/jingyinggonglve.svg b/src/assets/icons/jingyinggonglve.svg new file mode 100644 index 0000000..0cd3755 --- /dev/null +++ b/src/assets/icons/jingyinggonglve.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/jingzhunyingxiao.svg b/src/assets/icons/jingzhunyingxiao.svg new file mode 100644 index 0000000..781b0bb --- /dev/null +++ b/src/assets/icons/jingzhunyingxiao.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/jinhuo.svg b/src/assets/icons/jinhuo.svg new file mode 100644 index 0000000..c5d9214 --- /dev/null +++ b/src/assets/icons/jinhuo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/kaitongwaimai.svg b/src/assets/icons/kaitongwaimai.svg new file mode 100644 index 0000000..a6daad9 --- /dev/null +++ b/src/assets/icons/kaitongwaimai.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/kanjia.svg b/src/assets/icons/kanjia.svg new file mode 100644 index 0000000..9f6840b --- /dev/null +++ b/src/assets/icons/kanjia.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/kefu.svg b/src/assets/icons/kefu.svg new file mode 100644 index 0000000..f32cacd --- /dev/null +++ b/src/assets/icons/kefu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/kejian.svg b/src/assets/icons/kejian.svg new file mode 100644 index 0000000..8b89874 --- /dev/null +++ b/src/assets/icons/kejian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/kejian_mian.svg b/src/assets/icons/kejian_mian.svg new file mode 100644 index 0000000..62223b4 --- /dev/null +++ b/src/assets/icons/kejian_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/keziyuyue.svg b/src/assets/icons/keziyuyue.svg new file mode 100644 index 0000000..0d2f1f9 --- /dev/null +++ b/src/assets/icons/keziyuyue.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/kezizhongxin.svg b/src/assets/icons/kezizhongxin.svg new file mode 100644 index 0000000..7fbcc6c --- /dev/null +++ b/src/assets/icons/kezizhongxin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/koubei.svg b/src/assets/icons/koubei.svg new file mode 100644 index 0000000..a744077 --- /dev/null +++ b/src/assets/icons/koubei.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/kuaijiehuifu.svg b/src/assets/icons/kuaijiehuifu.svg new file mode 100644 index 0000000..72aa5c5 --- /dev/null +++ b/src/assets/icons/kuaijiehuifu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/ladu_mian.svg b/src/assets/icons/ladu_mian.svg new file mode 100644 index 0000000..a40816c --- /dev/null +++ b/src/assets/icons/ladu_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/lanyadingwei.svg b/src/assets/icons/lanyadingwei.svg new file mode 100644 index 0000000..205653f --- /dev/null +++ b/src/assets/icons/lanyadingwei.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/list-2.svg b/src/assets/icons/list-2.svg new file mode 100644 index 0000000..1f471f3 --- /dev/null +++ b/src/assets/icons/list-2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/mendiandongtai.svg b/src/assets/icons/mendiandongtai.svg new file mode 100644 index 0000000..7a7b415 --- /dev/null +++ b/src/assets/icons/mendiandongtai.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/mishiyuding.svg b/src/assets/icons/mishiyuding.svg new file mode 100644 index 0000000..b856afa --- /dev/null +++ b/src/assets/icons/mishiyuding.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/mishiyuding1.svg b/src/assets/icons/mishiyuding1.svg new file mode 100644 index 0000000..7ac9101 --- /dev/null +++ b/src/assets/icons/mishiyuding1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/notice_buyer.svg b/src/assets/icons/notice_buyer.svg new file mode 100644 index 0000000..bab1997 --- /dev/null +++ b/src/assets/icons/notice_buyer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/open.svg b/src/assets/icons/open.svg new file mode 100644 index 0000000..3cbd08c --- /dev/null +++ b/src/assets/icons/open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/paiduiquhao.svg b/src/assets/icons/paiduiquhao.svg new file mode 100644 index 0000000..fb7abc9 --- /dev/null +++ b/src/assets/icons/paiduiquhao.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/paimai.svg b/src/assets/icons/paimai.svg new file mode 100644 index 0000000..0139a69 --- /dev/null +++ b/src/assets/icons/paimai.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/pdf.svg b/src/assets/icons/pdf.svg new file mode 100644 index 0000000..512cce0 --- /dev/null +++ b/src/assets/icons/pdf.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/pingjia.svg b/src/assets/icons/pingjia.svg new file mode 100644 index 0000000..9b39672 --- /dev/null +++ b/src/assets/icons/pingjia.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/pingtaifapiao.svg b/src/assets/icons/pingtaifapiao.svg new file mode 100644 index 0000000..b6b3315 --- /dev/null +++ b/src/assets/icons/pingtaifapiao.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/pinpai.svg b/src/assets/icons/pinpai.svg new file mode 100644 index 0000000..f4b129c --- /dev/null +++ b/src/assets/icons/pinpai.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/qianbao.svg b/src/assets/icons/qianbao.svg new file mode 100644 index 0000000..f384250 --- /dev/null +++ b/src/assets/icons/qianbao.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/qianbao_mian.svg b/src/assets/icons/qianbao_mian.svg new file mode 100644 index 0000000..897f029 --- /dev/null +++ b/src/assets/icons/qianbao_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/qiehuan.svg b/src/assets/icons/qiehuan.svg new file mode 100644 index 0000000..37e0a94 --- /dev/null +++ b/src/assets/icons/qiehuan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/qingchu.svg b/src/assets/icons/qingchu.svg new file mode 100644 index 0000000..dc898ac --- /dev/null +++ b/src/assets/icons/qingchu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/qingchu_mian.svg b/src/assets/icons/qingchu_mian.svg new file mode 100644 index 0000000..94ecaa2 --- /dev/null +++ b/src/assets/icons/qingchu_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/qishoupeisong.svg b/src/assets/icons/qishoupeisong.svg new file mode 100644 index 0000000..9adc068 --- /dev/null +++ b/src/assets/icons/qishoupeisong.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/qiyedingcan.svg b/src/assets/icons/qiyedingcan.svg new file mode 100644 index 0000000..147c9e2 --- /dev/null +++ b/src/assets/icons/qiyedingcan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/qiyedingcan1.svg b/src/assets/icons/qiyedingcan1.svg new file mode 100644 index 0000000..a3c3277 --- /dev/null +++ b/src/assets/icons/qiyedingcan1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/quanbu.svg b/src/assets/icons/quanbu.svg new file mode 100644 index 0000000..db088f5 --- /dev/null +++ b/src/assets/icons/quanbu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/quanping.svg b/src/assets/icons/quanping.svg new file mode 100644 index 0000000..0a5cfbe --- /dev/null +++ b/src/assets/icons/quanping.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/qudao.svg b/src/assets/icons/qudao.svg new file mode 100644 index 0000000..e0fbf39 --- /dev/null +++ b/src/assets/icons/qudao.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/qudao_xiaochengxu.svg b/src/assets/icons/qudao_xiaochengxu.svg new file mode 100644 index 0000000..54af407 --- /dev/null +++ b/src/assets/icons/qudao_xiaochengxu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/rencaizhaopin.svg b/src/assets/icons/rencaizhaopin.svg new file mode 100644 index 0000000..6113e53 --- /dev/null +++ b/src/assets/icons/rencaizhaopin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/rili.svg b/src/assets/icons/rili.svg new file mode 100644 index 0000000..5d751bf --- /dev/null +++ b/src/assets/icons/rili.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/rili2.svg b/src/assets/icons/rili2.svg new file mode 100644 index 0000000..ba2d55d --- /dev/null +++ b/src/assets/icons/rili2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/rizhi.svg b/src/assets/icons/rizhi.svg new file mode 100644 index 0000000..bfdf2b0 --- /dev/null +++ b/src/assets/icons/rizhi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/saoma.svg b/src/assets/icons/saoma.svg new file mode 100644 index 0000000..260981d --- /dev/null +++ b/src/assets/icons/saoma.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/set_pay.svg b/src/assets/icons/set_pay.svg new file mode 100644 index 0000000..639bb8e --- /dev/null +++ b/src/assets/icons/set_pay.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/set_peisong.svg b/src/assets/icons/set_peisong.svg new file mode 100644 index 0000000..a87ca69 --- /dev/null +++ b/src/assets/icons/set_peisong.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/set_user.svg b/src/assets/icons/set_user.svg new file mode 100644 index 0000000..800baf5 --- /dev/null +++ b/src/assets/icons/set_user.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/set_weihu.svg b/src/assets/icons/set_weihu.svg new file mode 100644 index 0000000..e6765f1 --- /dev/null +++ b/src/assets/icons/set_weihu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/shanchu.svg b/src/assets/icons/shanchu.svg new file mode 100644 index 0000000..9655138 --- /dev/null +++ b/src/assets/icons/shanchu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/shanchu_mian.svg b/src/assets/icons/shanchu_mian.svg new file mode 100644 index 0000000..17ffa4e --- /dev/null +++ b/src/assets/icons/shanchu_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/shangchuan.svg b/src/assets/icons/shangchuan.svg new file mode 100644 index 0000000..f2d1a01 --- /dev/null +++ b/src/assets/icons/shangchuan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/shangchuanzhaopian.svg b/src/assets/icons/shangchuanzhaopian.svg new file mode 100644 index 0000000..5e90e91 --- /dev/null +++ b/src/assets/icons/shangchuanzhaopian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/shangpinguanli.svg b/src/assets/icons/shangpinguanli.svg new file mode 100644 index 0000000..c15f1a1 --- /dev/null +++ b/src/assets/icons/shangpinguanli.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/shangpinzhushou.svg b/src/assets/icons/shangpinzhushou.svg new file mode 100644 index 0000000..9972561 --- /dev/null +++ b/src/assets/icons/shangpinzhushou.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/shangpuyuding.svg b/src/assets/icons/shangpuyuding.svg new file mode 100644 index 0000000..4250f00 --- /dev/null +++ b/src/assets/icons/shangpuyuding.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/shebeiguanli.svg b/src/assets/icons/shebeiguanli.svg new file mode 100644 index 0000000..1ca4ef0 --- /dev/null +++ b/src/assets/icons/shebeiguanli.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/shengfuwangputong.svg b/src/assets/icons/shengfuwangputong.svg new file mode 100644 index 0000000..467b687 --- /dev/null +++ b/src/assets/icons/shengfuwangputong.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/shengyin.svg b/src/assets/icons/shengyin.svg new file mode 100644 index 0000000..9b1d63b --- /dev/null +++ b/src/assets/icons/shengyin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/shengyin_mian.svg b/src/assets/icons/shengyin_mian.svg new file mode 100644 index 0000000..00c76a7 --- /dev/null +++ b/src/assets/icons/shengyin_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/shezhi.svg b/src/assets/icons/shezhi.svg new file mode 100644 index 0000000..785b60f --- /dev/null +++ b/src/assets/icons/shezhi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/shezhi_mian.svg b/src/assets/icons/shezhi_mian.svg new file mode 100644 index 0000000..0bdc106 --- /dev/null +++ b/src/assets/icons/shezhi_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/shichang.svg b/src/assets/icons/shichang.svg new file mode 100644 index 0000000..d5d5d88 --- /dev/null +++ b/src/assets/icons/shichang.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/shichang_mian.svg b/src/assets/icons/shichang_mian.svg new file mode 100644 index 0000000..083b301 --- /dev/null +++ b/src/assets/icons/shichang_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/shijian.svg b/src/assets/icons/shijian.svg new file mode 100644 index 0000000..9ad8b2e --- /dev/null +++ b/src/assets/icons/shijian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/shijian_mian.svg b/src/assets/icons/shijian_mian.svg new file mode 100644 index 0000000..6c00d41 --- /dev/null +++ b/src/assets/icons/shijian_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/shoudan.svg b/src/assets/icons/shoudan.svg new file mode 100644 index 0000000..9967dd8 --- /dev/null +++ b/src/assets/icons/shoudan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/shouqi.svg b/src/assets/icons/shouqi.svg new file mode 100644 index 0000000..e8386f1 --- /dev/null +++ b/src/assets/icons/shouqi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/shouqi_mian.svg b/src/assets/icons/shouqi_mian.svg new file mode 100644 index 0000000..b022d4c --- /dev/null +++ b/src/assets/icons/shouqi_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/shouye.svg b/src/assets/icons/shouye.svg new file mode 100644 index 0000000..288b24f --- /dev/null +++ b/src/assets/icons/shouye.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/shouye_mian.svg b/src/assets/icons/shouye_mian.svg new file mode 100644 index 0000000..d180e9b --- /dev/null +++ b/src/assets/icons/shouye_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/shouyiren.svg b/src/assets/icons/shouyiren.svg new file mode 100644 index 0000000..3b409d2 --- /dev/null +++ b/src/assets/icons/shouyiren.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/show.svg b/src/assets/icons/show.svg new file mode 100644 index 0000000..2fdf9b9 --- /dev/null +++ b/src/assets/icons/show.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/shuangjiantouxiangyou.svg b/src/assets/icons/shuangjiantouxiangyou.svg new file mode 100644 index 0000000..56c0e61 --- /dev/null +++ b/src/assets/icons/shuangjiantouxiangyou.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/shuangjiantouxiangzuo.svg b/src/assets/icons/shuangjiantouxiangzuo.svg new file mode 100644 index 0000000..1a90a69 --- /dev/null +++ b/src/assets/icons/shuangjiantouxiangzuo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/shuaxin.svg b/src/assets/icons/shuaxin.svg new file mode 100644 index 0000000..a4686b3 --- /dev/null +++ b/src/assets/icons/shuaxin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/shuju.svg b/src/assets/icons/shuju.svg new file mode 100644 index 0000000..8418b76 --- /dev/null +++ b/src/assets/icons/shuju.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/shuju2.svg b/src/assets/icons/shuju2.svg new file mode 100644 index 0000000..bea4c25 --- /dev/null +++ b/src/assets/icons/shuju2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/shuju_liuliang.svg b/src/assets/icons/shuju_liuliang.svg new file mode 100644 index 0000000..21b048b --- /dev/null +++ b/src/assets/icons/shuju_liuliang.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/shuju_mian.svg b/src/assets/icons/shuju_mian.svg new file mode 100644 index 0000000..5da2d78 --- /dev/null +++ b/src/assets/icons/shuju_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/sort.svg b/src/assets/icons/sort.svg new file mode 100644 index 0000000..1e760a8 --- /dev/null +++ b/src/assets/icons/sort.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/sousuo.svg b/src/assets/icons/sousuo.svg new file mode 100644 index 0000000..2387e0a --- /dev/null +++ b/src/assets/icons/sousuo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/sucai.svg b/src/assets/icons/sucai.svg new file mode 100644 index 0000000..23499f8 --- /dev/null +++ b/src/assets/icons/sucai.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/tianjia.svg b/src/assets/icons/tianjia.svg new file mode 100644 index 0000000..b06fe16 --- /dev/null +++ b/src/assets/icons/tianjia.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/tishi.svg b/src/assets/icons/tishi.svg new file mode 100644 index 0000000..e14e118 --- /dev/null +++ b/src/assets/icons/tishi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/tishi_mian.svg b/src/assets/icons/tishi_mian.svg new file mode 100644 index 0000000..04334ea --- /dev/null +++ b/src/assets/icons/tishi_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/tongxunlu_mian.svg b/src/assets/icons/tongxunlu_mian.svg new file mode 100644 index 0000000..b7c06ab --- /dev/null +++ b/src/assets/icons/tongxunlu_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/tongzhi.svg b/src/assets/icons/tongzhi.svg new file mode 100644 index 0000000..a227028 --- /dev/null +++ b/src/assets/icons/tongzhi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/tongzhi_mian.svg b/src/assets/icons/tongzhi_mian.svg new file mode 100644 index 0000000..876676f --- /dev/null +++ b/src/assets/icons/tongzhi_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/tuichuquanping.svg b/src/assets/icons/tuichuquanping.svg new file mode 100644 index 0000000..3832030 --- /dev/null +++ b/src/assets/icons/tuichuquanping.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/tuiguang.svg b/src/assets/icons/tuiguang.svg new file mode 100644 index 0000000..7d5bb2d --- /dev/null +++ b/src/assets/icons/tuiguang.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/tuiguang_mian.svg b/src/assets/icons/tuiguang_mian.svg new file mode 100644 index 0000000..005323a --- /dev/null +++ b/src/assets/icons/tuiguang_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/tupian.svg b/src/assets/icons/tupian.svg new file mode 100644 index 0000000..64b511d --- /dev/null +++ b/src/assets/icons/tupian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/tupian_mian.svg b/src/assets/icons/tupian_mian.svg new file mode 100644 index 0000000..0875efd --- /dev/null +++ b/src/assets/icons/tupian_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/user_biaoqian.svg b/src/assets/icons/user_biaoqian.svg new file mode 100644 index 0000000..206fff6 --- /dev/null +++ b/src/assets/icons/user_biaoqian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/user_gaikuang.svg b/src/assets/icons/user_gaikuang.svg new file mode 100644 index 0000000..b4ae10e --- /dev/null +++ b/src/assets/icons/user_gaikuang.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/user_guanli.svg b/src/assets/icons/user_guanli.svg new file mode 100644 index 0000000..e00fd79 --- /dev/null +++ b/src/assets/icons/user_guanli.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/wangpudiandan.svg b/src/assets/icons/wangpudiandan.svg new file mode 100644 index 0000000..77cc413 --- /dev/null +++ b/src/assets/icons/wangpudiandan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/weixin.svg b/src/assets/icons/weixin.svg new file mode 100644 index 0000000..f043f12 --- /dev/null +++ b/src/assets/icons/weixin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/weixin_mian.svg b/src/assets/icons/weixin_mian.svg new file mode 100644 index 0000000..5c4e92e --- /dev/null +++ b/src/assets/icons/weixin_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/wode.svg b/src/assets/icons/wode.svg new file mode 100644 index 0000000..4cc5c10 --- /dev/null +++ b/src/assets/icons/wode.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/wode_mian.svg b/src/assets/icons/wode_mian.svg new file mode 100644 index 0000000..ea9ebfb --- /dev/null +++ b/src/assets/icons/wode_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/xiangji.svg b/src/assets/icons/xiangji.svg new file mode 100644 index 0000000..a9f7b5f --- /dev/null +++ b/src/assets/icons/xiangji.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/xiaoxi.svg b/src/assets/icons/xiaoxi.svg new file mode 100644 index 0000000..cf220c8 --- /dev/null +++ b/src/assets/icons/xiaoxi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/xiazai.svg b/src/assets/icons/xiazai.svg new file mode 100644 index 0000000..c741576 --- /dev/null +++ b/src/assets/icons/xiazai.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/xitongquanxian.svg b/src/assets/icons/xitongquanxian.svg new file mode 100644 index 0000000..b34ac74 --- /dev/null +++ b/src/assets/icons/xitongquanxian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/yingxiao_qipao.svg b/src/assets/icons/yingxiao_qipao.svg new file mode 100644 index 0000000..238ddf2 --- /dev/null +++ b/src/assets/icons/yingxiao_qipao.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/yingyezizhi.svg b/src/assets/icons/yingyezizhi.svg new file mode 100644 index 0000000..23ae5be --- /dev/null +++ b/src/assets/icons/yingyezizhi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/yinhangka.svg b/src/assets/icons/yinhangka.svg new file mode 100644 index 0000000..20c1fdc --- /dev/null +++ b/src/assets/icons/yinhangka.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/yiwen.svg b/src/assets/icons/yiwen.svg new file mode 100644 index 0000000..ef07f2e --- /dev/null +++ b/src/assets/icons/yiwen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/youhui.svg b/src/assets/icons/youhui.svg new file mode 100644 index 0000000..4358e1c --- /dev/null +++ b/src/assets/icons/youhui.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/youjian.svg b/src/assets/icons/youjian.svg new file mode 100644 index 0000000..1304c01 --- /dev/null +++ b/src/assets/icons/youjian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/youjiantou.svg b/src/assets/icons/youjiantou.svg new file mode 100644 index 0000000..5c59926 --- /dev/null +++ b/src/assets/icons/youjiantou.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/yulibao.svg b/src/assets/icons/yulibao.svg new file mode 100644 index 0000000..b785c04 --- /dev/null +++ b/src/assets/icons/yulibao.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/yuyin.svg b/src/assets/icons/yuyin.svg new file mode 100644 index 0000000..1ac06af --- /dev/null +++ b/src/assets/icons/yuyin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/yuyueguanli.svg b/src/assets/icons/yuyueguanli.svg new file mode 100644 index 0000000..080255d --- /dev/null +++ b/src/assets/icons/yuyueguanli.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/yuyueguanlishezhi.svg b/src/assets/icons/yuyueguanlishezhi.svg new file mode 100644 index 0000000..eac7549 --- /dev/null +++ b/src/assets/icons/yuyueguanlishezhi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/zhankai.svg b/src/assets/icons/zhankai.svg new file mode 100644 index 0000000..aef4e53 --- /dev/null +++ b/src/assets/icons/zhankai.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/zhankai_mian.svg b/src/assets/icons/zhankai_mian.svg new file mode 100644 index 0000000..187e3e9 --- /dev/null +++ b/src/assets/icons/zhankai_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/zhibo.svg b/src/assets/icons/zhibo.svg new file mode 100644 index 0000000..d329b49 --- /dev/null +++ b/src/assets/icons/zhibo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/zhibo_mian.svg b/src/assets/icons/zhibo_mian.svg new file mode 100644 index 0000000..443e2cb --- /dev/null +++ b/src/assets/icons/zhibo_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/zhuangxiu.svg b/src/assets/icons/zhuangxiu.svg new file mode 100644 index 0000000..c692c45 --- /dev/null +++ b/src/assets/icons/zhuangxiu.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/zhuangxiu_mian.svg b/src/assets/icons/zhuangxiu_mian.svg new file mode 100644 index 0000000..53e8deb --- /dev/null +++ b/src/assets/icons/zhuangxiu_mian.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/zhuoweiguanli.svg b/src/assets/icons/zhuoweiguanli.svg new file mode 100644 index 0000000..ee9d0cc --- /dev/null +++ b/src/assets/icons/zhuoweiguanli.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/zichanzhuanrang.svg b/src/assets/icons/zichanzhuanrang.svg new file mode 100644 index 0000000..8a8d546 --- /dev/null +++ b/src/assets/icons/zichanzhuanrang.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/zuliao.svg b/src/assets/icons/zuliao.svg new file mode 100644 index 0000000..e210df3 --- /dev/null +++ b/src/assets/icons/zuliao.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/zuliaoyuding.svg b/src/assets/icons/zuliaoyuding.svg new file mode 100644 index 0000000..69a9d99 --- /dev/null +++ b/src/assets/icons/zuliaoyuding.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/images/cli-loading.gif b/src/assets/images/cli-loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..a388496a3e00e3bc7d1a7ab146a2dcaaebb11256 GIT binary patch literal 4482 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/decorate/top_1.png b/src/assets/images/decorate/top_1.png new file mode 100644 index 0000000000000000000000000000000000000000..7f014219afd05d8c9d22c6c6a161ae2f30554a14 GIT binary patch literal 18237 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/decorate/top_2.png b/src/assets/images/decorate/top_2.png new file mode 100644 index 0000000000000000000000000000000000000000..00f251118436c5d6272fc0a4656a3e5cac8a15d9 GIT binary patch literal 24749 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

iTOUeP-sCa;@pU+#+%U!)H#sW|LLn0z2qc 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

X*rKa|Jku=53^%!Cy5RvIGV9P5v&JJA*Gjw5N zIERN9UQxy)GItj7e9#coVC$b(^5|++sAC?W*diuW@1C+5Lq()GDAxfWj~_@EhK|er zycL~iysh{!)jjqg!?ngyIa4bT!gF(f4b>r0@bZp7M1iZLv|k@7?x7*L1BKs$=Faby z+#`&qAIUDzNKPyIJM?a4a; literal 0 HcmV?d00001 diff --git a/src/assets/images/finance_center/total_amount.png b/src/assets/images/finance_center/total_amount.png new file mode 100644 index 0000000000000000000000000000000000000000..603f032c346405d0308b071aec421f9a6244c68f GIT binary patch literal 4799 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 Z{{`}da?Og^W5)mh002ovPDHLkV1n1}5?TNN literal 0 HcmV?d00001 diff --git a/src/assets/images/finance_center/total_order.png b/src/assets/images/finance_center/total_order.png new file mode 100644 index 0000000000000000000000000000000000000000..94e817da3371b4554d0ff8b4429d669a3c4dae94 GIT binary patch literal 4243 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/finance_center/total_refund_amount.png b/src/assets/images/finance_center/total_refund_amount.png new file mode 100644 index 0000000000000000000000000000000000000000..732ca8317a02345e22f95b5f7f6df017f3c76de8 GIT binary patch literal 4547 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/finance_center/wait_refund_amount.png b/src/assets/images/finance_center/wait_refund_amount.png new file mode 100644 index 0000000000000000000000000000000000000000..7ce3aa8fcdc4e472798b0cae3932deebfb496c85 GIT binary patch literal 5908 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/finance_center/yiwen.png b/src/assets/images/finance_center/yiwen.png new file mode 100644 index 0000000000000000000000000000000000000000..8991335341f0adc867c1f5a36b5657e3bbadc606 GIT binary patch literal 708 zcmV;#0z3VQP)Px%en~_@R5(wKQ!!{1Q4oEzo_8XF*t7HKSE%%R@u{gDZ~$0-(epZPOy=FNLU z0Km*tuh*SiF4r=~93-M~WdrHY&KiU<#N$xtt3>d)ooD}EddxHBCpYCOqEKd?~)+@(!dzA z9l!+ulK@uI>GWVepZ~F$V2qgsaGsfmUDsWZSfx_g?KsY909^p?$>I^pi2>4uBH?cCD_i zZuq`$jWIU?oB^;yYyHg_^B%x!t@TNvH9tS!9YxV601E=}nVBECu6xS!yp-?zzrrxw zE1i^5?_!D{h-gJAb#`WECQ~dHn_(E%nfZtSFaTd`J(&O`(#rC}Fucvo`BtmdH#Ro* zR@4#&j4`rI@1Fq1n5|mtpFt4#M0A;m4lAXedY?Pb zdIFl{v?&BZaF>V%0qoRTuP4TmZoR#|S!->hP$)z~C;6*Zt36Q^eFU&bK@c1wqUVW> z$&$+Da#t#q+5m7>Ykf&3$Y!%7{Qr=#(?~=#q?B5WW8yrInIF5Z`!HFsF=iOR{kD<* zwsLIMDbfGGteo(Y(KDIMv{<_Hn5?zdahyJ89*B?WRsGmC6CfaV`Ro qbMB56SqHFet-UrnI{K>foPPt4n2Pi>4?TAP00004f26ot=uyR+%+k~IiHE3ItAV(o0yRy3M)!NP4)#f&2(+jnbn^?cI9`wDlzP&)flSvh}KV42+)wI0C=}a2e_th(T?W{$AuO*Lmvo z4{6>3HwJb_0i50V#u_#G;KJvAFfoDH_H#G-UQWAkD4w&>Q zFn8Y6w&*dM5$x|}25Cnbjt?pm=j-qX1h>uP+)s?7P1a2$NRLY?B-OatU!mR)^^hlA z)B>0)+Yg?#%O{8%fL2lcyh6^$rYO~1u!2dG2Zi;JL57DQEranKt8-1Nc_$AAQ>@Th zY0E^m&pbGLId8yl{W>4u&!n$~tHTIrFWLFI6V`_nu(K1ym*EC9#+*NrJbLht8UW|hXnxUyc_^6AU;a>%-ue0;w)l1fV0C{42(7AQXj%hst`Aos z^r>0$Q-|Xj)wnecmX-j-<`U#Gf@VS3ea&w}lb=fFSZyvmgws^l{xHZa{!AD~?`%`f zCb|e-_c=a0(*?YH7|t&OINkMUQgdiOAoi+hJNW{xe1)U+O(ymN?X(zSE4~ErBB+x9 r4((Mb=lf=Tyan9~#<*-gjj{a#{ssW#^D}X600000NkvXXu0mjflw=TH literal 0 HcmV?d00001 diff --git a/src/assets/images/idCard.png b/src/assets/images/idCard.png new file mode 100644 index 0000000000000000000000000000000000000000..768868a3fcd2021fdd66f220e21fea9d0be861bf GIT binary patch literal 2353 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/theme_white.png b/src/assets/images/theme_white.png new file mode 100644 index 0000000000000000000000000000000000000000..52714ba146ac6aa1510c5615f7c5dce913cab9cb GIT binary patch literal 2559 zcmeH}`8U)J7rOTM+_* zC_6f!&PqH@qDk^{66>My$xPy8h<1)1@)C)Wzmg1rDAYKjY&{|`&J1C$`FLtX*Tnk>ej*Z zf8|s+lTTvqZpYx%%rNFz?UCZSSptzb^8HDaxSh3W_lf(hme{#5{;i$VV+a5JOzLR) zN$pp{rgv`fC-`y+pcjNrWL0~6U!eCex7~Ulai~jltJGuiwID3IE_npdoYb<>{QT6) zgF8vV*}go3*e+w`4jK$T?SvkmzQtO!+FPM;RJ7>enR=hI9Jyq%5lx1pofK7WzLX-f z$Ji^zUa#omokBXUYrJ{vV(X*f@W^N6;qzo)QfJJOFPc$4DT$mr!Nqvnh6phak>eD2 z)z6QQsv0nQRT%{UfH3{f0E_hC(cNtbw}ToXCPFM0ixiJEY<6@%N5i8cH3>G~GUL#V zIGCwND_**y?>hI(_(F;I$?W_##GRscoGdDF@br$^d z)(YgmaUYI8aM<9_!4`?EZLF`vPC!Ft!id2b0ly!eSuA7xJFVl8jTwBpCg z%7fkXjfwe;W3-RMcE%%I;nJm#X(Xd8&#_{ThaZu+_?ge=Z}D#|C9a3hq3BB)<#9Wk zi_#CZs0O74*0_z9c^U0UvIZ4vcy%OKm*O;i#RyjLNL}>G>gb20Sh?BuW$=X(a_5d6 z87Z+e<6&SfC2%`FxHVU|t>=|%(8|ovO1-mY%Y`Z`dwP0$Kr&w;mq{CF47?eAj1I>y z%3)Z+&Y*u+gZrVJi|u#@{hhPscH&Bf|7@WdLC97g_;bAWdxCw}mmXVr*i3~~SI&7L{P_K@ zr++Yj{=ZUi6ZmjE-z7Yh(x62ET=zG~LS}!>mMKb8auJ*G2%u$nAKprVQ3~`=roVa_*|I4IKN3z}5FXh|5O%V+gu zK{jSIIdH3l$u%*2D23<0Bz!cJlQ7Qt8jesT!QIM#m$ZcWf7}1*l1&KWWIY%U>mGfC zm{&yG)HI@=xs)Xy$96{|&Qbe<6B82;Fg%LAs7p8~GH+&or!EH6k6%ag4Myx`e!O81 z4i2t$cXty7L$|rP!v!To>b8q&P-g@JQIwXJ7V|j}*~MUpP!S8>K0Yy_{{Dh{_pmzL z%hVfs3*I{BIl3t)9=|7ac6Pd+c5&f}IA;ZD+1XVK;ftdDf&!Qg>F1A!pU!s-mL@v4 zPh$=n?!Xf#a_Ly}$miXw6>bMVJuu(g0zL}0<*Hq?EZE#*Md0fzg^-NSa8;U(;jeAp z^s*wTL}w5NgN-OFE7uKFdp65&1x-`?0#r0z4LUQ@(@9gKxqF91gKBGqZ_9Np^F&El z%9HFvIZkW;oVpyR7vHPi?j!`&Ne?sXt)K-qVUt}ffx?T73pR2d#0Y=z`X8o2VnI_= z6AYcPXRQ(D$*gLUKNAnwW!@HP`-^<*!lwQ$G&eW@Syt{>zy_LdfEXV>Pd!&rf84@i ziNx?BYg2zhBfN6NoNy!(8Ow~E7odYUPu9-C?0@-TU7ZqI)QGb+;o{|FouD7B58$z; z$B)O9dK;bKQuNm)%X*LCQG|WMC7Zn5+OnyS@kd1Ok7f zLw<#>LhlZ4hD=@V74Ce|z@tR3>-8K|Y+cHU(tLP9g9f{!Nu8?KM4*ZbXamxrpk8Bn zgr7QnhFBFKq(dn=l^$8$tg_#zu3z5qmMjKN!x3cQT#ayDOC05|Z*EU9?uSeH9PVGa z#X6sI(6?8_oOtce8T)wz)zxZELpbD@NLhl4<+m%2(Uhx3I$Ozhf59$?fi;Km333EA zb%wl}9JVz?*i|1iSTl{90?Fn~_<{+@_^NMIJfSL#SxZT2-Oc?JRh;{h#OM(~=8N zYh^=EIT>M=yE+4f0A*Fq&OwPl2#F2%(q5?_G3EXJ5bEoFcW$Gw970$T^=r@ntq6(u cufQ*r+E9`TEXaOJ^3g#YPr0Dp+W95?2N6QvSpWb4 literal 0 HcmV?d00001 diff --git a/src/components/app-link/index.vue b/src/components/app-link/index.vue new file mode 100644 index 0000000..e7fe926 --- /dev/null +++ b/src/components/app-link/index.vue @@ -0,0 +1,38 @@ + + + diff --git a/src/components/area-common/Map.vue b/src/components/area-common/Map.vue new file mode 100644 index 0000000..af1251d --- /dev/null +++ b/src/components/area-common/Map.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/src/components/area-common/Search.vue b/src/components/area-common/Search.vue new file mode 100644 index 0000000..b303582 --- /dev/null +++ b/src/components/area-common/Search.vue @@ -0,0 +1,52 @@ + + + + + diff --git a/src/components/area-common/Table.vue b/src/components/area-common/Table.vue new file mode 100644 index 0000000..2bb176c --- /dev/null +++ b/src/components/area-common/Table.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/src/components/area-common/hooks/useServiceArea.ts b/src/components/area-common/hooks/useServiceArea.ts new file mode 100644 index 0000000..1cf4bf3 --- /dev/null +++ b/src/components/area-common/hooks/useServiceArea.ts @@ -0,0 +1,263 @@ +import { nextTick, type Ref, unref, watch } from "vue" +import { useRequest } from "@/hooks/useFetchData" +import { usePaging } from "@/hooks/usePaging" +import { addArea, apiMapLocation, delArea, getAreaListByLocation, getLonAndLatByArea } from "@/api/service/area" +import type { Pager, Location } from '@/config/symbol' +import { VITE_MAP_KEY } from "@/config/env" +import { toast } from "@/utils/util" + +/**用户操作 */ +export function useAreaOperation(inited = true) { + const areaSearch = ref() + const tcMap = ref() + const zone = ref('') //地区 + const regionCode = ref() //地区编码 + const base = ref>() //区域列表信息 + const address = ref() //当前地址信息 + const isInited = ref(true) //初始化 + + // 查询 + const handleSearch = (form: any) => { + const params = { + address: encodeURIComponent(form.area.join('')), + key: VITE_MAP_KEY + } + const { runFn } = useRequest({ + apiFn: getLonAndLatByArea, + onSuccess(response) { + const { result: { location, address_components, ad_info } } = response + searchCommon({ location, address_components, ad_info }) + }, + }) + runFn(params) + } + // 查询后操作 + const searchCommon = (payload: any) => { + const { location, address_components, ad_info } = payload + if (isInited.value) { + tcMap.value?.setMapCenter(location) + areaSearch.value?.setCascaderValue(address_components) + } + address.value = payload + zone.value = address_components.district + regionCode.value = ad_info.adcode + fetchAreaList() + } + // 添加区域 + const increment = async (payload: any) => { + const { runFn } = useRequest({ + apiFn: addArea, + onSuccess(response) { + tcMap.value.removePolygon() + toast('添加成功', 'success') + fetchAreaList() + }, + }) + runFn(payload) + } + /**获取区域列表 */ + const fetchAreaList = async () => { + const params = { + regionId: regionCode.value + } + const { pager, getLists } = usePaging({ + fetchFun: getAreaListByLocation, + params + }) + await getLists() + base.value = Object.assign(pager, { + getLists + }) + } + /**初始化当前位置 */ + const initPosition = async () => { + const params = { key: VITE_MAP_KEY } + const { runFn } = useRequest({ + apiFn: apiMapLocation, + onSuccess(response) { + const { result: { location, ad_info } } = response + searchCommon({ location, address_components: ad_info, ad_info }) + } + }) + runFn(params) + isInited.value = inited + } + + onMounted(initPosition) + + return { + tcMap, + areaSearch, + zone, + regionCode, + increment, + searchCommon, + handleSearch, + base, + address, + isInited + } +} + +/**表格操作 */ +export function useAreaTableOperation({ tcMap, base, aTable }: { tcMap: any, base: Ref, aTable: any }) { + + /**选中 */ + const toggleRowSelection = (selectData: any[]) => { + const tableData = base.value.lists + const selectedIds = selectData?.map(item => item.id) as number[] + const selectedList = tableData.filter(data => selectedIds.includes(data.id)) + + tableData.forEach(data => { + aTable.value.tableRef.toggleRowSelection(data, false) + }) + selectedList.forEach(row => { + aTable.value.tableRef.toggleRowSelection(row, true) + }) + } + /**定位 */ + const handleLocation = (row: any) => { + const convertPolygons = row.polygongeo.replace("POLYGON((", '').replace("))", '').split(',') + const polygonPaths = convertPolygons.map((path: string) => { + const [lng, lat] = path.split(' ') + return { + lat: parseFloat(lat), + lng: parseFloat(lng) + } + }) + + tcMap.value.initPolygon({ + polygonId: row.id, + polygonPaths + }) + } + /**删除 */ + const handleDelete = async (id: number) => { + const { runFn } = useRequest({ + apiFn: delArea, + onSuccess(response) { + toast('删除成功', 'success') + base.value.getLists() + } + }) + runFn({ id }) + } + + return { + handleLocation, + handleDelete, + toggleRowSelection, + } +} + +/**地图 */ +export function useAreaMapOperation(parentApi: any) { + + let map, polygon, editor; + const TMap = (window as any).TMap + + const mapRef = ref() + const drawId = ref([]) + + /**初始化地图 */ + function initMap() { + map = new TMap.Map(mapRef.value, { + zoom: 12, + viewMode: '2D' + }) + } + /**设置地图中心 */ + function setMapCenter(location: Location) { + const { lat, lng } = location + map!.setCenter(new TMap.LatLng(lat, lng)) + } + /**绘制多边形 */ + const drawPolygon = () => { + polygon = new TMap.MultiPolygon({ + map: map + }) + editor = new TMap.tools.GeometryEditor({ + map: map, + overlayList: [ + { + overlay: polygon, + id: 'polygon', + } + ], + actionMode: TMap.tools.constants.EDITOR_ACTION.DRAW, // 编辑器的工作模式 + activeOverlayId: 'polygon', // 激活图层 + snappable: true, + }) + editor.on('draw_complete', geometry => { + drawId.value.push(geometry.id) + geometry.paths.splice(geometry.paths.length, 0, geometry.paths[0]) + parentApi?.showDialog({ + polygonPaths: geometry.paths + }) + }) + } + /**表格定位=>初始化多边形 */ + function initPolygon({ polygonId, polygonPaths }: { polygonId: number, polygonPaths: Location[] }) { + + if (polygonId === polygon?.id) return + + polygon = new TMap.MultiPolygon({ + id: polygonId, // 图层id + map: map, // 显示多边形图层的底图 + styles: { + // 多边形的相关样式 + polygon: new TMap.PolygonStyle({ + color: 'rgb(250, 250, 122)', // 面填充色 + showBorder: false, // 是否显示拔起面的边线 + borderColor: '#00FFFF', // 边线颜色 + }), + }, + geometries: [ + { + id: 'polygon', // 多边形图形数据的标志信息 + styleId: 'polygon', // 样式id + paths: polygonPaths, // 多边形的位置信息 + properties: { + // 多边形的属性数据 + title: 'polygon', + }, + }, + ], + }) + } + /**移除多边形 (先选中再删除)*/ + function removePolygon() { + editor!.setActionMode(TMap.tools.constants.EDITOR_ACTION.INTERACT).select(drawId.value).setSelectable(true) + editor!.delete() + } + + onMounted(() => { + nextTick(initMap) + }) + + return { + mapRef, + setMapCenter, + drawPolygon, + removePolygon, + initPolygon + } +} + +/**弹框 */ +export function useDialogOperation(regionCode: Ref) { + const infoDialogRef = ref() + + function showDialog(payload: any) { + const params = { + title: '绘制确认', + rawData: { ...payload, regionCode: regionCode.value } + } + infoDialogRef.value.acceptParams(params) + } + + return { + infoDialogRef, + showDialog + } +} \ No newline at end of file diff --git a/src/components/area-common/styles/area.scss b/src/components/area-common/styles/area.scss new file mode 100644 index 0000000..6e2afea --- /dev/null +++ b/src/components/area-common/styles/area.scss @@ -0,0 +1,12 @@ +.area { + display: grid; + grid-template-columns: 1fr; + grid-template-rows: 50px minmax(100px, auto); + gap: 20px; + + &__part { + display: grid; + grid-template-columns: 1fr minmax(400px, 1fr); + gap: 20px; + } +} \ No newline at end of file diff --git a/src/components/area-common/styles/map.scss b/src/components/area-common/styles/map.scss new file mode 100644 index 0000000..2ef690d --- /dev/null +++ b/src/components/area-common/styles/map.scss @@ -0,0 +1,36 @@ +.map { + position: relative; + flex: 1; + + &__inner { + width: 100%; + height: 100%; + } + + #toolControl { + position: absolute; + top: 10px; + left: 0px; + right: 0px; + margin: auto; + width: 252px; + z-index: 1001; + + .toolItem { + width: 30px; + height: 30px; + float: left; + margin: 1px; + padding: 4px; + border-radius: 3px; + background-size: 30px 30px; + background-position: 4px 4px; + background-repeat: no-repeat; + box-shadow: 0 1px 2px 0 #e4e7ef; + background-color: #ffffff; + border: 1px solid #ffffff; + background-image: url('https://mapapi.qq.com/web/lbs/javascriptGL/demo/img/polygon.png'); + background-position: center; + } + } +} \ No newline at end of file diff --git a/src/components/area-select/index.vue b/src/components/area-select/index.vue new file mode 100644 index 0000000..1471e37 --- /dev/null +++ b/src/components/area-select/index.vue @@ -0,0 +1,55 @@ + + + diff --git a/src/components/channel-select-user/channel-popup.vue b/src/components/channel-select-user/channel-popup.vue new file mode 100644 index 0000000..b8a72fd --- /dev/null +++ b/src/components/channel-select-user/channel-popup.vue @@ -0,0 +1,87 @@ + + + + + \ No newline at end of file diff --git a/src/components/channel-select-user/distributeTable.vue b/src/components/channel-select-user/distributeTable.vue new file mode 100644 index 0000000..28e2424 --- /dev/null +++ b/src/components/channel-select-user/distributeTable.vue @@ -0,0 +1,107 @@ + + + + + diff --git a/src/components/channel-select-user/index.vue b/src/components/channel-select-user/index.vue new file mode 100644 index 0000000..62dbc29 --- /dev/null +++ b/src/components/channel-select-user/index.vue @@ -0,0 +1,35 @@ + + + diff --git a/src/components/channel-select-user/table-detail.vue b/src/components/channel-select-user/table-detail.vue new file mode 100644 index 0000000..f9bca6a --- /dev/null +++ b/src/components/channel-select-user/table-detail.vue @@ -0,0 +1,84 @@ + + + + + + \ No newline at end of file diff --git a/src/components/channel-select-user/userTable.vue b/src/components/channel-select-user/userTable.vue new file mode 100644 index 0000000..3690f66 --- /dev/null +++ b/src/components/channel-select-user/userTable.vue @@ -0,0 +1,74 @@ + + + + + diff --git a/src/components/color-picker/index.vue b/src/components/color-picker/index.vue new file mode 100644 index 0000000..ed0bc3e --- /dev/null +++ b/src/components/color-picker/index.vue @@ -0,0 +1,33 @@ + + diff --git a/src/components/daterange-picker/index.vue b/src/components/daterange-picker/index.vue new file mode 100644 index 0000000..094cd49 --- /dev/null +++ b/src/components/daterange-picker/index.vue @@ -0,0 +1,61 @@ + + + \ No newline at end of file diff --git a/src/components/del-wrap/index.vue b/src/components/del-wrap/index.vue new file mode 100644 index 0000000..787f3e2 --- /dev/null +++ b/src/components/del-wrap/index.vue @@ -0,0 +1,51 @@ + + + + + diff --git a/src/components/dict-value/index.vue b/src/components/dict-value/index.vue new file mode 100644 index 0000000..2935e5d --- /dev/null +++ b/src/components/dict-value/index.vue @@ -0,0 +1,30 @@ + + diff --git a/src/components/editor/index.vue b/src/components/editor/index.vue new file mode 100644 index 0000000..ae39eee --- /dev/null +++ b/src/components/editor/index.vue @@ -0,0 +1,143 @@ + + + + diff --git a/src/components/footer-btns/index.vue b/src/components/footer-btns/index.vue new file mode 100644 index 0000000..fd7fe5b --- /dev/null +++ b/src/components/footer-btns/index.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/src/components/good-select/good-popup.vue b/src/components/good-select/good-popup.vue new file mode 100644 index 0000000..a414eed --- /dev/null +++ b/src/components/good-select/good-popup.vue @@ -0,0 +1,191 @@ + + + + + diff --git a/src/components/good-select/index.vue b/src/components/good-select/index.vue new file mode 100644 index 0000000..6aaf9b9 --- /dev/null +++ b/src/components/good-select/index.vue @@ -0,0 +1,41 @@ + + + \ No newline at end of file diff --git a/src/components/good-select/table-detail.vue b/src/components/good-select/table-detail.vue new file mode 100644 index 0000000..9ea98a0 --- /dev/null +++ b/src/components/good-select/table-detail.vue @@ -0,0 +1,71 @@ + + + + + + \ No newline at end of file diff --git a/src/components/icon/index.ts b/src/components/icon/index.ts new file mode 100644 index 0000000..831fcad --- /dev/null +++ b/src/components/icon/index.ts @@ -0,0 +1,19 @@ +import * as ElementPlusIcons from '@element-plus/icons-vue' +//@ts-ignore +import localIconsName from 'virtual:svg-icons-names' + +export const LOCAL_ICON_PREFIX = 'local-icon-' +export const EL_ICON_PREFIX = 'el-icon-' + +const elIconsName: string[] = [] + +for (const [, component] of Object.entries(ElementPlusIcons)) { + elIconsName.push(`${EL_ICON_PREFIX}${component.name}`) +} + +export function getElementPlusIconNames() { + return elIconsName +} +export function getLocalIconNames() { + return localIconsName +} diff --git a/src/components/icon/index.vue b/src/components/icon/index.vue new file mode 100644 index 0000000..98dff2a --- /dev/null +++ b/src/components/icon/index.vue @@ -0,0 +1,48 @@ + diff --git a/src/components/icon/picker.vue b/src/components/icon/picker.vue new file mode 100644 index 0000000..27fc8cd --- /dev/null +++ b/src/components/icon/picker.vue @@ -0,0 +1,185 @@ + + + diff --git a/src/components/icon/svg-icon.vue b/src/components/icon/svg-icon.vue new file mode 100644 index 0000000..10c6919 --- /dev/null +++ b/src/components/icon/svg-icon.vue @@ -0,0 +1,38 @@ + + + diff --git a/src/components/image-contain/index.vue b/src/components/image-contain/index.vue new file mode 100644 index 0000000..1961025 --- /dev/null +++ b/src/components/image-contain/index.vue @@ -0,0 +1,46 @@ + + + + + diff --git a/src/components/link/activity-center.vue b/src/components/link/activity-center.vue new file mode 100644 index 0000000..0ff4a36 --- /dev/null +++ b/src/components/link/activity-center.vue @@ -0,0 +1,89 @@ + + + + + + diff --git a/src/components/link/custom-link.vue b/src/components/link/custom-link.vue new file mode 100644 index 0000000..d90264e --- /dev/null +++ b/src/components/link/custom-link.vue @@ -0,0 +1,42 @@ + + + diff --git a/src/components/link/index.ts b/src/components/link/index.ts new file mode 100644 index 0000000..336e28b --- /dev/null +++ b/src/components/link/index.ts @@ -0,0 +1,14 @@ +export enum LinkTypeEnum { + 'SHOP_PAGES' = 'shop', + 'CUSTOM_LINK' = 'custom', + 'SERVICE_LIST' = 'goods_list', + 'SERVICE_CLASSIFY' = 'goods_classify', + 'ACTIVITY_CENTER'='activity_center' +} + +export interface Link { + path: string + name?: string + type: string + query?: Record +} diff --git a/src/components/link/index.vue b/src/components/link/index.vue new file mode 100644 index 0000000..7037a88 --- /dev/null +++ b/src/components/link/index.vue @@ -0,0 +1,147 @@ + + + + + diff --git a/src/components/link/picker.vue b/src/components/link/picker.vue new file mode 100644 index 0000000..4d3895b --- /dev/null +++ b/src/components/link/picker.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/link/service-classify.vue b/src/components/link/service-classify.vue new file mode 100644 index 0000000..7b6559c --- /dev/null +++ b/src/components/link/service-classify.vue @@ -0,0 +1,69 @@ + + + + + diff --git a/src/components/link/service-list.vue b/src/components/link/service-list.vue new file mode 100644 index 0000000..418574f --- /dev/null +++ b/src/components/link/service-list.vue @@ -0,0 +1,91 @@ + + + + + diff --git a/src/components/link/shop-pages.vue b/src/components/link/shop-pages.vue new file mode 100644 index 0000000..4d2d268 --- /dev/null +++ b/src/components/link/shop-pages.vue @@ -0,0 +1,138 @@ + + + diff --git a/src/components/material/file.vue b/src/components/material/file.vue new file mode 100644 index 0000000..a9f0500 --- /dev/null +++ b/src/components/material/file.vue @@ -0,0 +1,55 @@ + + + + + diff --git a/src/components/material/hook.ts b/src/components/material/hook.ts new file mode 100644 index 0000000..05615c6 --- /dev/null +++ b/src/components/material/hook.ts @@ -0,0 +1,208 @@ +import { + fileCateAdd, + fileCateDelete, + fileCateEdit, + fileCateLists, + fileDelete, + fileList, + fileMove, + fileRename +} from '@/api/file' +import { usePaging } from '@/hooks/usePaging' +import feedback from '@/utils/feedback' +import { ElMessage, ElTree, type CheckboxValueType } from 'element-plus' +import { shallowRef, type Ref } from 'vue' + +// 左侧分组的钩子函数 +export function useCate(type: number) { + const treeRef = shallowRef>() + // 分组列表 + const cateLists = ref([]) + + // 选中的分组id + const cateId = ref('') + + // 获取分组列表 + const getCateLists = async () => { + const data = await fileCateLists({ + type + }) + const item: any[] = [ + { + name: '全部', + id: '' + }, + { + name: '未分组', + id: 0 + } + ] + cateLists.value = data + cateLists.value.unshift(...item) + setTimeout(() => { + treeRef.value?.setCurrentKey(cateId.value) + }, 0) + } + + // 添加分组 + const handleAddCate = async (value: string) => { + await fileCateAdd({ + type, + name: value, + pid: 0 + }) + getCateLists() + } + + // 编辑分组 + const handleEditCate = async (value: string, id: number) => { + await fileCateEdit({ + id, + name: value + }) + getCateLists() + } + + // 删除分组 + const handleDeleteCate = async (id: number) => { + await feedback.confirm('确定要删除?') + await fileCateDelete({ id }) + cateId.value = '' + getCateLists() + } + + //选中分类 + const handleCatSelect = (item: any) => { + cateId.value = item.id + } + + return { + treeRef, + cateId, + cateLists, + handleAddCate, + handleEditCate, + handleDeleteCate, + getCateLists, + handleCatSelect + } +} + +// 处理文件的钩子函数 +export function useFile( + cateId: Ref, + type: Ref, + limit: Ref, + size: number +) { + const tableRef = shallowRef() + const listShowType = ref('normal') + const moveId = ref(0) + const select = ref([]) + const isCheckAll = ref(false) + const isIndeterminate = ref(false) + const fileParams = reactive({ + name: '', + type: type, + cid: cateId + }) + const { pager, getLists, resetPage } = usePaging({ + fetchFun: fileList, + params: fileParams, + firstLoading: true, + size + }) + + const getFileList = () => { + getLists() + } + const refresh = () => { + resetPage() + } + + const isSelect = (id: number) => { + return !!select.value.find((item: any) => item.id == id) + } + + const batchFileDelete = async (id?: number[]) => { + await feedback.confirm( + '确认删除后,本地或云存储文件也将同步删除,如文件已被使用,请谨慎操作!' + ) + const ids = id ? id : select.value.map((item: any) => item.id) + await fileDelete({ ids }) + getFileList() + clearSelect() + } + + const batchFileMove = async () => { + const ids = select.value.map((item: any) => item.id) + await fileMove({ ids, cid: moveId.value }) + moveId.value = 0 + getFileList() + clearSelect() + } + + const selectFile = (item: any) => { + const index = select.value.findIndex((items: any) => items.id == item.id) + if (index != -1) { + select.value.splice(index, 1) + return + } + if (select.value.length == limit.value) { + if (limit.value == 1) { + select.value = [] + select.value.push(item) + return + } + ElMessage.warning('已达到选择上限') + return + } + select.value.push(item) + } + + const clearSelect = () => { + select.value = [] + } + + const cancelSelete = (id: number) => { + select.value = select.value.filter((item: any) => item.id != id) + } + + const selectAll = (value: CheckboxValueType) => { + isIndeterminate.value = false + tableRef.value?.toggleAllSelection() + if (value) { + select.value = [...pager.lists] + return + } + clearSelect() + } + + const handleFileRename = async (value: string, id: number) => { + await fileRename({ + id, + name: value + }) + getFileList() + } + return { + listShowType, + tableRef, + moveId, + pager, + fileParams, + select, + isCheckAll, + isIndeterminate, + getFileList, + refresh, + batchFileDelete, + batchFileMove, + selectFile, + isSelect, + clearSelect, + cancelSelete, + selectAll, + handleFileRename + } +} diff --git a/src/components/material/index.vue b/src/components/material/index.vue new file mode 100644 index 0000000..f10bc0f --- /dev/null +++ b/src/components/material/index.vue @@ -0,0 +1,521 @@ + + + + + diff --git a/src/components/material/picker.vue b/src/components/material/picker.vue new file mode 100644 index 0000000..13d9983 --- /dev/null +++ b/src/components/material/picker.vue @@ -0,0 +1,284 @@ + + + + + diff --git a/src/components/material/preview.vue b/src/components/material/preview.vue new file mode 100644 index 0000000..6accaa0 --- /dev/null +++ b/src/components/material/preview.vue @@ -0,0 +1,72 @@ + + + diff --git a/src/components/money-detail/moneyDetailDialog.vue b/src/components/money-detail/moneyDetailDialog.vue new file mode 100644 index 0000000..a66065d --- /dev/null +++ b/src/components/money-detail/moneyDetailDialog.vue @@ -0,0 +1,55 @@ + + + diff --git a/src/components/overflow-tooltip/index.vue b/src/components/overflow-tooltip/index.vue new file mode 100644 index 0000000..57734db --- /dev/null +++ b/src/components/overflow-tooltip/index.vue @@ -0,0 +1,47 @@ + + + + + diff --git a/src/components/pagination/index.vue b/src/components/pagination/index.vue new file mode 100644 index 0000000..61ce366 --- /dev/null +++ b/src/components/pagination/index.vue @@ -0,0 +1,42 @@ + + + diff --git a/src/components/popover-input/index.vue b/src/components/popover-input/index.vue new file mode 100644 index 0000000..88ba84a --- /dev/null +++ b/src/components/popover-input/index.vue @@ -0,0 +1,130 @@ + + + + + diff --git a/src/components/popup/index.vue b/src/components/popup/index.vue new file mode 100644 index 0000000..beb129a --- /dev/null +++ b/src/components/popup/index.vue @@ -0,0 +1,121 @@ + + + + + diff --git a/src/components/service-area/index.vue b/src/components/service-area/index.vue new file mode 100644 index 0000000..e385897 --- /dev/null +++ b/src/components/service-area/index.vue @@ -0,0 +1,54 @@ + + + + diff --git a/src/components/service-area/table-detail.vue b/src/components/service-area/table-detail.vue new file mode 100644 index 0000000..fd369ee --- /dev/null +++ b/src/components/service-area/table-detail.vue @@ -0,0 +1,43 @@ + + + + + + diff --git a/src/components/service-select/index.vue b/src/components/service-select/index.vue new file mode 100644 index 0000000..d1eb95d --- /dev/null +++ b/src/components/service-select/index.vue @@ -0,0 +1,61 @@ + + + + + diff --git a/src/components/service-select/service-popup.vue b/src/components/service-select/service-popup.vue new file mode 100644 index 0000000..3fe4e35 --- /dev/null +++ b/src/components/service-select/service-popup.vue @@ -0,0 +1,170 @@ + + + + + diff --git a/src/components/service-select/table-detail.vue b/src/components/service-select/table-detail.vue new file mode 100644 index 0000000..4fe6172 --- /dev/null +++ b/src/components/service-select/table-detail.vue @@ -0,0 +1,91 @@ + + + + + + diff --git a/src/components/upload/index.vue b/src/components/upload/index.vue new file mode 100644 index 0000000..9a913c5 --- /dev/null +++ b/src/components/upload/index.vue @@ -0,0 +1,150 @@ + + + + + diff --git a/src/components/user-select/index.vue b/src/components/user-select/index.vue new file mode 100644 index 0000000..3a66c15 --- /dev/null +++ b/src/components/user-select/index.vue @@ -0,0 +1,180 @@ + + + + + diff --git a/src/components/video-player/index.vue b/src/components/video-player/index.vue new file mode 100644 index 0000000..8a49f31 --- /dev/null +++ b/src/components/video-player/index.vue @@ -0,0 +1,72 @@ + + + diff --git a/src/config/env.ts b/src/config/env.ts new file mode 100644 index 0000000..2335a20 --- /dev/null +++ b/src/config/env.ts @@ -0,0 +1,2 @@ +export const VITE_MAP_KEY = import.meta.env.VITE_MAP_KEY +export const VITE_BASE_URL_PREFIX = import.meta.env.VITE_APP_BASE_URL \ No newline at end of file diff --git a/src/config/index.ts b/src/config/index.ts new file mode 100644 index 0000000..3fb4110 --- /dev/null +++ b/src/config/index.ts @@ -0,0 +1,18 @@ +/* + * @Author: micky 1254597151@qq.com + * @Date: 2023-08-14 15:56:31 + * @LastEditors: micky 1254597151@qq.com + * @LastEditTime: 2023-12-22 16:18:37 + * @FilePath: \housekeeping-admin\src\config\index.ts + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +const config = { + terminal: 1, //终端 + title: '粤好生活-后台管理系统', //网站默认标题 + version: '1.3.3', //版本号 + baseUrl: `${import.meta.env.VITE_APP_BASE_URL || ''}/`, //请求接口域名 + urlPrefix: 'api', //请求默认前缀 + timeout: 20 * 1000 //请求超时时长 +} + +export default config diff --git a/src/config/setting.ts b/src/config/setting.ts new file mode 100644 index 0000000..c92a5ea --- /dev/null +++ b/src/config/setting.ts @@ -0,0 +1,16 @@ +const defaultSetting = { + isUniqueOpened: false, //只展开一个一级菜单 + sideWidth: 200, //侧边栏宽度 + sideTheme: 'light', //侧边栏主题 + sideDarkColor: '#1d2124', //侧边栏深色主题颜色 + openMultipleTabs: true, // 是否开启多标签tab栏 + theme: '#4A5DFF', //主题色 + successTheme: '#67c23a', //成功主题色 + warningTheme: '#e6a23c', //警告主题色 + dangerTheme: '#f56c6c', //危险主题色 + errorTheme: '#f56c6c', //错误主题色 + infoTheme: '#909399' //信息主题色 +} +//以上各种主题色分别对应element-plus的几种行为主题 + +export default defaultSetting diff --git a/src/config/status.ts b/src/config/status.ts new file mode 100644 index 0000000..35eff38 --- /dev/null +++ b/src/config/status.ts @@ -0,0 +1,106 @@ +/* + * @Author: micky 1254597151@qq.com + * @Date: 2023-08-14 15:56:31 + * @LastEditors: micky 1254597151@qq.com + * @LastEditTime: 2023-10-12 16:47:56 + * @FilePath: \housekeeping-admin\src\config\status.ts + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +export const optionMap = { + orderStatus: [ + { label: '全部', value: '' }, + { label: '待支付', value: 0 }, + { label: '预约中', value: 1 }, + { label: '服务中', value: 2 }, + { label: '已完成', value: 3 }, + { label: '已取消', value: 4 } + ], + accountStatus: [ + { label: '正常', value: 1 }, + { label: '停用', value: 0 } + ], + sourceOptions: [ + { label: '微信小程序', value: 1 }, + { label: '微信公众号', value: 2 }, + { label: '手机H5', value: 3 } + ], + groupOptions: [ + { label: '粤好', value: 1 }, + { label: '美团', value: 2 }, + { label: '外聘', value: 3 } + ], + dispatchOptions: [ + { label: '全部', value: '' }, + { label: '未派单', value: 0 }, + { label: '已派单', value: 1 } + ], + payStatusOptions: [ + { label: '全部', value: '' }, + { label: '待支付', value: 0 }, + { label: '已支付', value: 1 } + ], + dispatchMethodOptions: [ + { label: '用户领取', value: 1 }, + { label: '系统赠送', value: 2 }, + { label: '渠道派发', value: 3 } + ], + channelOptions: [ + { label: '分销员', value: 1 }, + { label: '指定用户', value: 2 } + ], + goodsOptions: [ + { label: '通用券', value: 1 }, + { label: '品类券', value: 2 }, + { label: '商品券', value: 3 } + ], + conditionOptions: [ + { label: '无门槛', value: 1 }, + { label: '有门槛', value: 2 } + ], + dispatchCountOptions: [ + { label: '不限量', value: 1 }, + { label: '限量', value: 2 } + ], + statusOptions: [ + { label: '开启', value: 1 }, + { label: '停用', value: 2 } + ], + useStatusOptions: [ + { label: '未使用', value: 1 }, + { label: '已使用', value: 2 }, + { label: '未发放', value: 3 } + ], + getTypeOptions: [ + { label: '用户领取', value: 1 }, + { label: '系统赠送', value: 2 }, + { label: '指定分销员', value: 3 }, + { label: '指定用户', value: 4 } + ], + applyStatusOptions: [ + { label: '申请中', value: 0 }, + { label: '申请通过', value: 1 }, + { label: '申请失败', value: 2 } + ], + serviceTimeType: [ + { label: '自定义', value: 0 }, + { label: '自动间隔', value: 1 } + ], + physicalStatusOptions: [ + { label: '审核中', value: 0 }, + { label: '审核通过', value: 1 }, + { label: '审核失败', value: 2 } + ], + sexOptions: [ + { label: '男', value: 1 }, + { label: '女', value: 2 } + ], + reassignOptions: [ + { label: '全部', value: '' }, + { label: '申请中', value: 0 }, + { label: '已处理', value: 1 } + ], + refundOptions: [ + { label: '未设置', value: 0 }, + { label: '已设置', value: 1 } + ] +} diff --git a/src/config/symbol.ts b/src/config/symbol.ts new file mode 100644 index 0000000..31f70ab --- /dev/null +++ b/src/config/symbol.ts @@ -0,0 +1,52 @@ +import type { InjectionKey, Ref } from 'vue' +import type { ElTable } from 'element-plus' +import type { CategoryProp } from '@/hooks/useCommon' +import type { Tree } from '@/views/account_center/sub_account/components/organization/organization-tree.vue' + +interface LocationProp { + province: string + city: string + district: string + adcode: number +} +export interface Location { + lng: number + lat: number +} +export type Area = { + location: Location + address_components: any +} +export interface Pager { + page: number + size: number + count: number + lists: T[] + getLists: () => Promise +} +export interface MapContext { + isInited: Ref //是否初始化 + tcMap: any + address: Ref + originSelectData?: Ref + showDialog?: (payload: any) => void //传递几何坐标信息 + searchCommon: (payload: any) => void + handleLocation: (row: any) => void //定位 + handleDelete: (id: number) => void //删除 + toggleRowSelection?: (selectData: any[]) => void +} +export const MAP_INJECTION_KEY: InjectionKey = Symbol() + +export interface ChannelContext { + channel: Ref + categoryLists: Ref + selectObj?: Ref> + handleSelectionChange?: (val: any) => void +} +export const CHANNEL_INJECTION_KEY: InjectionKey = Symbol() + +export interface OrganizationContext { + fetchOrganizationList: () => void + setSelectedNode: (data: Tree) => void +} +export const ORGANIZATION_INJECTION_KEY: InjectionKey = Symbol() diff --git a/src/directives/index.ts b/src/directives/index.ts new file mode 100644 index 0000000..48446e3 --- /dev/null +++ b/src/directives/index.ts @@ -0,0 +1,16 @@ +import type { App, Directive } from "vue"; +import { positiveNumber, precision } from "./modules/positive-number"; + +const directiveList: { [key: string]: Directive } = { + positiveNumber, + precision +} + +const directives = { + install: function (app: App) { + Object.keys(directiveList).forEach(key => { + app.directive(key, directiveList[key]) + }) + } +} +export default directives \ No newline at end of file diff --git a/src/directives/modules/positive-number.ts b/src/directives/modules/positive-number.ts new file mode 100644 index 0000000..36970ac --- /dev/null +++ b/src/directives/modules/positive-number.ts @@ -0,0 +1,91 @@ +import type { Directive, DirectiveBinding } from "vue"; + +// 特殊字符 +const reg1 = /^[0-9]\d*$/ +// 连输输入多个0,只保留一个0 +const zeroReg = /^0+(\d)/ +const _reg = /[^\d.]/g; //移除特殊字符 +const precisionReg = /(\.\d\d)\d+$/; //最多保留2位小数 +const _reg2 = /^\./ //小数点开头 +const _reg3 = /(\.\d*\.)/g //连续输入多个小数点,只保留一个 + +/**只能输入正整数,包含0 */ +const positiveNumber: Directive = { + mounted: (el: HTMLElement) => { + el.addEventListener('input', (event: Event) => { + const content = (event.target as HTMLInputElement).value + if (!reg1.test(content)) { + (event.target as HTMLInputElement).value = ''; + } else if (zeroReg.test(content)) { + (event.target as HTMLInputElement).value = '$1'; + } + }) + } +} +/**minRow-maxRow,最多保留2位小数 */ +const precision = { + mounted: (el: HTMLElement, binding: DirectiveBinding) => { + const bindingValue = binding.value + el.addEventListener('keydown', (event: KeyboardEvent) => { + event.stopPropagation() + const inputKey = event.key + const value = (event.target as HTMLInputElement).value + disabledInput(event, inputKey, value, bindingValue) + }) + el.addEventListener('input', (event) => { + const value = (event.target as HTMLInputElement).value; + if (/[^\d.-]/g.test(value)) { + event.preventDefault(); + (event.target as HTMLInputElement).value = '' + } + bindingValue.update(bindingValue.$index, (event.target as HTMLInputElement).value) + }) + } +} + +let _v = '' + +function disabledInput(event: KeyboardEvent, inputKey: string, value: string, bindingValue) { + if (!bindingValue && !Object.keys(bindingValue).length) return + const { minRow, maxRow } = bindingValue + + if (inputKey === 'Backspace' || inputKey === 'Shift') { + _v = ''; + return + } + if (value) { + _v = value + inputKey + } else { + _v += inputKey + } + + if (/[^\d.-]/g.test(_v)) { + event.preventDefault(); + _v = '' + } else if (_reg.test(_v)) { + event.preventDefault(); + _v = '' + } else if (zeroReg.test(_v)) { + event.preventDefault(); + _v = '' + } else if (precisionReg.test(_v)) { + event.preventDefault(); + _v = '' + } else if (_reg2.test(_v)) { + event.preventDefault() + _v = '' + } else if (_reg3.test(_v)) { + event.preventDefault() + _v = '' + } else if (_v > maxRow || _v < minRow) { + event.preventDefault(); + _v = '' + } else { + (event.target as HTMLInputElement).value = _v + bindingValue.update(bindingValue.$index, (event.target as HTMLInputElement).value) + } +} +export { + positiveNumber, + precision +} \ No newline at end of file diff --git a/src/enums/appEnums.ts b/src/enums/appEnums.ts new file mode 100644 index 0000000..90ac145 --- /dev/null +++ b/src/enums/appEnums.ts @@ -0,0 +1,40 @@ +//菜单主题类型 +export enum ThemeEnum { + LIGHT = 'light', + DARK = 'dark' +} + +// 菜单类型 +export enum MenuEnum { + CATALOGUE = 'M', + MENU = 'C', + BUTTON = 'A' +} + +// 屏幕 +export enum ScreenEnum { + SM = 640, + MD = 768, + LG = 1024, + XL = 1280, + '2XL' = 1536 +} + +// 客户端类型 +export enum ClientEnum { + MP_WEIXIN = 1, // 微信-小程序 + OA_WEIXIN = 2, // 微信-公众号 + H5 = 3, // H5 + PC = 4, // PC + IOS = 5, //苹果 + ANDROID = 6 //安卓 +} + +export const ClientMap = { + [ClientEnum.MP_WEIXIN]: '微信小程序', + [ClientEnum.OA_WEIXIN]: '微信公众号', + [ClientEnum.H5]: '手机H5', + [ClientEnum.PC]: '电脑PC', + [ClientEnum.IOS]: '苹果APP', + [ClientEnum.ANDROID]: '安卓APP' +} diff --git a/src/enums/cacheEnums.ts b/src/enums/cacheEnums.ts new file mode 100644 index 0000000..45624e4 --- /dev/null +++ b/src/enums/cacheEnums.ts @@ -0,0 +1,8 @@ +// 本地缓冲key + +//token +export const TOKEN_KEY = 'token' +//账号 +export const ACCOUNT_KEY = 'account' +//设置 +export const SETTING_KEY = 'setting' diff --git a/src/enums/modeEnum.ts b/src/enums/modeEnum.ts new file mode 100644 index 0000000..4fe9854 --- /dev/null +++ b/src/enums/modeEnum.ts @@ -0,0 +1,184 @@ +/* + * @Author: micky 1254597151@qq.com + * @Date: 2023-08-14 15:56:31 + * @LastEditors: micky 1254597151@qq.com + * @LastEditTime: 2023-11-09 16:27:46 + * @FilePath: \housekeeping-admin\src\enums\modeEnum.ts + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +// 页面模式 +export enum PageMode { + 'ADD' = 'add', // 添加 + 'EDIT' = 'edit' // 编辑 +} + +export enum ServiceMode { + 'all_count' = '全部', // int 全部 + 'SHELVE' = '销售中', //销售中 + 'UNSHELVE' = '仓库中' //仓库中 +} + +export enum OrderMode { + 'all_count' = '全部', // int 全部 + 'wait_pay_count' = '待支付', // int 待支付 + 'appoint_count' = '预约中', // int 预约中 + 'service_count' = '服务中', // int 服务中 + 'finish_count' = '已完成', // int 已完成 + 'close_count' = '已取消' // int 已取消 +} + +export enum RefundMode { + 'all_count' = '全部', + 'refund_wait_count' = '退款中', + 'refund_success_count' = '退款成功', + 'refund_fail_count' = '退款失败' +} + +export enum StatusEnum { + 'NORMAL' = 1, + 'STOP' = 0 +} + +export const statusMap: Record = { + [StatusEnum.NORMAL]: '正常', + [StatusEnum.STOP]: '停用' +} +export enum DispatchEnum { + USER_RECEIVE = 1, + SYSTEM_GIVE = 2, + CHANNEL_DISPATCH = 3 +} +export enum ChannelEnum { + DISTBUTOR = 1, + USER = 2 +} +export enum UseGoodsEnum { + ALL = 1, + CATEGORY = 2, + CATEGOYR_PART = 3 +} +export enum UseConditionEnum { + NO_CONDITION = 1, + CONDITION = 2 +} +export enum DispatchCountEnum { + NO_COUNT = 1, + COUNT = 2 +} +export enum DispatchStatusEnum { + NORMAL = 1, + STOP = 2 +} +export const dispatchStatusMap: Record = { + [DispatchStatusEnum.NORMAL]: '停用', + [DispatchStatusEnum.STOP]: '启用' +} +export const statusEnumMap: Record = { + [DispatchStatusEnum.NORMAL]: '启用', + [DispatchStatusEnum.STOP]: '停用' +} +export const getTypeMap: Record = { + [DispatchEnum.USER_RECEIVE]: '用户领取', + [DispatchEnum.SYSTEM_GIVE]: '系统赠送', + [DispatchEnum.CHANNEL_DISPATCH]: '渠道派发' +} +export const useGoodsTypeMap = { + [UseGoodsEnum.ALL]: '通用券', + [UseGoodsEnum.CATEGORY]: '品类券', + [UseGoodsEnum.CATEGOYR_PART]: '商品券' +} +export const conditionTypeMap = { + [UseConditionEnum.NO_CONDITION]: '无门槛使用', + [UseConditionEnum.CONDITION]: '最低消费' +} +export const channelMap: Record = { + [ChannelEnum.DISTBUTOR]: '分销员', + [ChannelEnum.USER]: '用户' +} +export const useStatusMap: Record = { + 1: '未使用', + 2: '已使用', + 3: '未发放' +} +export const channelfieldsMap: Record = { + [ChannelEnum.DISTBUTOR]: 'distributors', + [ChannelEnum.USER]: 'users' +} +export enum ApplyStatusEnum { + APPLY = 0, + SUCCESS = 1, + FAILED = 2 +} +export const applyStatusMap: Record = { + [ApplyStatusEnum.APPLY]: '申请中', + [ApplyStatusEnum.SUCCESS]: '通过', + [ApplyStatusEnum.FAILED]: '失败' +} + +export enum OperationEnum { + SUCCESS = 1, + FAILED = 2 +} +export enum OperationTextEnum { + SUCCESS = 'success', + FAILED = 'fail' +} +export const OperationEnumMap: Record = { + [OperationTextEnum.SUCCESS]: OperationEnum.SUCCESS, + [OperationTextEnum.FAILED]: OperationEnum.FAILED +} +export enum SexEnum { + MALE = 1, + FEMALE = 2 +} +export const SexEnumMap: Record = { + [SexEnum.MALE]: '男', + [SexEnum.FEMALE]: '女' +} + +export const GoodsTimeType: Record = { + 0: '自定义', + 1: '自动间隔' +} +/**师傅状态 */ +export enum ReceiveOrderEnum { + ENABLEDING = 0, //接单中 + PAUSE = 1 //休息中 +} +/**申请状态 */ +export const tagFields = { + [ApplyStatusEnum.APPLY]: '', + [ApplyStatusEnum.SUCCESS]: 'success', + [ApplyStatusEnum.FAILED]: 'danger' +} +/**体检报告审核状态 */ +export const physicalEnumMap: Record = { + [ApplyStatusEnum.APPLY]: '审核中', //审核中 + [ApplyStatusEnum.SUCCESS]: '通过', //审核通过 + [ApplyStatusEnum.FAILED]: '失败' // 审核失败 +} +/**退单规则 */ +export enum TemplateEnum { + STAFF = 0, //师傅 + USER = 1 //用户 +} + +// 接单状态 +export enum getStaffOrderStatusEnum { + OPEN = 0, //接单状态开启 + CLOSED = 1 //接单状态关闭 +} +// 师傅退单状态 +export enum StaffRefundEnum { + PEDDING = 0, + SUCCESS = 1 +} +export const StaffRefundEnumMap: Record = { + [StaffRefundEnum.PEDDING]: '申请中', + [StaffRefundEnum.SUCCESS]: '已处理' +} +// 用户退款设置 +export enum RefundEnum { + SETTING = 1, + UN_SETTING = 0 +} \ No newline at end of file diff --git a/src/enums/pageEnum.ts b/src/enums/pageEnum.ts new file mode 100644 index 0000000..89e6525 --- /dev/null +++ b/src/enums/pageEnum.ts @@ -0,0 +1,9 @@ +export enum PageEnum { + //登录页面 + LOGIN = '/login', + //无权限页面 + ERROR_403 = '/403', + // 404 + ERROR_404 = '/:pathMatch(.*)*', + INDEX = '/' +} diff --git a/src/enums/requestEnums.ts b/src/enums/requestEnums.ts new file mode 100644 index 0000000..67d30b2 --- /dev/null +++ b/src/enums/requestEnums.ts @@ -0,0 +1,28 @@ +export enum ContentTypeEnum { + // json + JSON = 'application/json;charset=UTF-8', + // form-data 上传资源(图片,视频) + FORM_DATA = 'multipart/form-data;charset=UTF-8' +} + +export enum RequestMethodsEnum { + GET = 'GET', + POST = 'POST' +} + +export enum RequestCodeEnum { + SUCCESS = 200, //成功 + FAILED = 300, // 失败 + PARAMS_VALID_ERROR = 310, //参数校验错误 + PARAMS_TYPE_ERROR = 311, //参数类型错误 + REQUEST_METHOD_ERROR = 312, //请求方法错误 + ASSERT_ARGUMENT_ERROR = 313, //断言参数错误 + ASSERT_MYBATIS_ERROR = 314, //断言mybatis错误 + LOGIN_ACCOUNT_ERROR = 330, //登陆账号或密码错误 + LOGIN_DISABLE_ERROR = 331, //登陆账号已被禁用 + TOKEN_EMPTY = 332, // TOKEN参数为空 + TOKEN_INVALID = 333, // TOKEN参数无效 + NO_PERMISSTION = 403, //无相关权限 + REQUEST_404_ERROR = 404, //请求接口不存在 + SYSTEM_ERROR = 500 //系统错误 +} diff --git a/src/env.d.ts b/src/env.d.ts new file mode 100644 index 0000000..d6e6efd --- /dev/null +++ b/src/env.d.ts @@ -0,0 +1,9 @@ + +interface ImportMetaEnv { + readonly VITE_APP_BASE_URL: string + readonly VITE_MAP_KEY: string +} + +interface ImportMeta { + readonly env: ImportMetaEnv +} diff --git a/src/hooks/useCommon.ts b/src/hooks/useCommon.ts new file mode 100644 index 0000000..630eaa8 --- /dev/null +++ b/src/hooks/useCommon.ts @@ -0,0 +1,312 @@ +import { ref, type Component } from 'vue' +import { apiCategoryLists } from '@/api/service/category' +import feedback from '@/utils/feedback' +import { OperationEnumMap, OperationTextEnum, dispatchStatusMap } from '@/enums/modeEnum' +import { apiDistributorGroupLists } from '@/api/distributor/group' +import { CouponStatusApi, delCoupon, delCouponByDistributor, switchCouponStatus } from '@/api/application/coupon' +import { + ElMessageBox, + genFileId, + type ElTable, + type ElUpload, + type UploadFile, + type UploadFiles, + type UploadInstance, + type UploadRawFile, + type UploadUserFile +} from 'element-plus' +import { apiFeedbackAgreement, apiMasterWorkerApplyAgreement, apiMasterWorkerPhysicalAgreement } from '@/api/master_worker' +import { applyForEdit } from '@/api/finance/withdraw' +import { useCreateModal } from './useCreateModal' +import { toast, formatFileSize } from '@/utils/util' + +export interface CategoryProp { + id: number + name: string +} +export interface GroupProp { + id: number + groupName: string +} +export function useCommon() { + const categoryLists = ref([]) + const groupLists = ref([]) + const couponTable = ref>() + const selectedIds = ref([]) + + const isDisabled = computed(() => !selectedIds.value.length) + + /**获取服务分类列表 */ + const fetchCategoryList = async () => { + try { + const { lists } = await apiCategoryLists('') + categoryLists.value = lists + } catch (error) {} + } + /**切换发放状态 */ + const handleStatusChange = (row: any, api: () => Promise, type: string) => { + const { id, status = 1 } = row + return new Promise(async resolve => { + try { + await feedback.confirm(`确定${dispatchStatusMap[status]}发放?`) + // console.log(id, `${dispatchStatusMap[status]}`); + type === 'wrapper' ? await CouponStatusApi({ id }) : await switchCouponStatus({ id, status }) + feedback.msgSuccess(`${dispatchStatusMap[status]}成功`) + api() + return resolve(true) + } catch (error) {} + }) + } + /**获取分销组别列表 */ + const fetchGroupList = async () => { + try { + const params = { + pageNo: 1, + pageSize: 10 + } + const { lists } = await apiDistributorGroupLists(params) + groupLists.value = lists + } catch (error) {} + } + /**删除优惠券 */ + const handleDelete = async (row: any, type: string, field: string, api: () => Promise) => { + let couponName = '' + // 分销商优惠券 + if (field === 'inner') { + const { + couponDetailVo: { name } + } = row + couponName = name + } else { + // 优惠券页面 + const { name } = row + couponName = name + } + try { + if (type === 'single') couponTable.value?.toggleRowSelection(row, true) + const text = type === 'multiple' ? '勾选的优惠券' : `优惠券【${couponName}】` + await feedback.confirm(`此操作不可逆,确定删除${text}?`) + field === 'inner' ? await delCouponByDistributor({ ids: selectedIds.value }) : await delCoupon({ ids: selectedIds.value }) + feedback.msgSuccess('删除成功') + api() + } catch (error) { + } finally { + clearSelection() + } + } + + /**多选操作 */ + const handleSelectionChange = (val: any[]) => { + selectedIds.value = val.map(item => item.id) as number[] + } + /**清除选中 */ + function clearSelection() { + couponTable.value?.clearSelection() + } + + return { + categoryLists, + groupLists, + couponTable, + selectedIds, + fetchGroupList, + fetchCategoryList, + handleStatusChange, + handleDelete, + isDisabled, + handleSelectionChange + } +} + +export function useAuthStaffOperation(component: Component, isGoBack = false, event?: () => void, refresh?: () => Promise) { + const fields: Record Promise> = { + 实名认证: apiMasterWorkerApplyAgreement, + 体检报告: apiMasterWorkerPhysicalAgreement, + 意见反馈: apiFeedbackAgreement, + 提现: applyForEdit + } + const commandComponent = useCreateModal(component) + + /**通过和拒绝 */ + const handleOperation = (row: any, type: string, msg = '实名认证') => { + const field = msg === '实名认证' ? 'name' : msg === '提现' ? 'distributorName' : 'staffName' + const filedKey = msg === '意见反馈' ? 'reply' : msg === '提现' ? 'failReason' : 'refuseReason' + const identity = msg == '提现' ? '分销商' : '师傅' + const { id } = row + let data = { id, status: OperationEnumMap[type] } + type === OperationTextEnum.SUCCESS + ? feedback + .confirm(`您确定通过【${row[field]}】${identity}的${msg}申请吗?`) + .then(async () => { + handleConfirm(data, '审核通过', msg) + }) + .catch(() => {}) + : commandComponent({ + title: `${msg === '意见反馈' ? '回复' : '拒绝'}理由`, + width: 500, + onConfirm: async payload => { + Object.assign(data, { + [filedKey]: payload.reason + }) + handleConfirm(data, `已拒绝【${row[field]}】申请`, msg) + } + }) + } + /**确认后操作 */ + async function handleConfirm(data: any, message: string, tip: string) { + try { + const api = fields[tip] + await api(data) + feedback.msgSuccess(message) + refresh?.() + isGoBack && event?.() + } catch (error) {} + } + + return { + handleOperation + } +} + +/**校验上传图片过程、图片上传操作 */ +export function useUploadMoreAction() { + /**upload组件实例 */ + const uploadRef = ref>() + const fileUploadList = ref>({ + avatar: [], + idCard: [], + report: [], + pdf: [] + }) + const imgViewerVisible = ref(false) + const viewerIndex = ref(0) + const previewSrcList = ref([]) + const uploadPdf = ref() + const pdfDialog = ref() + + /**判断图片类型 */ + const getFileType = (name: string | undefined) => { + if (!name) return + const matches = name.match(/\.([^.]+)$/) + return matches && matches[1] + } + + /**判断图片是否符合格式 */ + const isImage = (file: UploadFile, type: string) => { + const suffixArr = type === 'pdf' ? ['pdf'] : ['jpg', 'png', 'jpeg'] + const suffix = getFileType(file.raw?.name) + if (!suffix) return + return suffixArr.includes(suffix) + } + + /**校验图片格式和文件大小 */ + const validate = (file: UploadFile, fileList: UploadFiles, type: string, size: number) => { + return new Promise((resolve, reject) => { + const text = type === 'pdf' ? '文件' : '图片' + if (!isImage(file, type)) { + let msg = type === 'pdf' ? 'pdf' : 'jpg,png,jpeg' + toast(`请上传${msg}格式的${text}`, 'error') + fileList.splice(-1, 1) + uploadRef.value?.abort(file) + return false + } + if ((file.size as number) > size) { + toast(`${text}【${file.name}】大小:${formatFileSize(file.size as number)},请上传小于${formatFileSize(size)}的${text}`, 'error', 3000) + fileList.splice(-1, 1) + uploadRef.value?.abort(file) + return false + } + fileUploadList.value[type] = fileList + resolve(true) + }) + } + + /**开始上传 */ + const startUpload = async (file: UploadFile, fileList: UploadFiles, type: string, size: number) => { + const flag = await validate(file, fileList, type, size) + } + + /**上传图片 */ + const onSubmit = () => { + if (!fileUploadList.value.length) { + toast('请先上传图片', 'warning') + } + } + + /**删除图片 */ + const beforeRemove = (file: UploadFile, fileList: UploadFiles, type: string) => { + return new Promise((resolve, reject) => { + ElMessageBox.confirm(`确定删除${file.name}图片`, '温馨提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }) + .then(() => { + let index = fileList.indexOf(file) + fileList.splice(index, 1) + fileUploadList.value[type] = fileList + }) + .catch(() => { + resolve(false) + }) + }) + } + + /**预览图片 */ + const handlePreview = (file: UploadFile, type: string) => { + if (!unref(fileUploadList)[type].length) return + imgViewerVisible.value = true + let index = unref(fileUploadList)[type].indexOf(file) + viewerIndex.value = index + previewSrcList.value = unref(fileUploadList)[type].map(file => file.url!) + } + + // pdf预览 + const previewPdf = (file: UploadFile) => { + const reader = new FileReader() // 读取文件资源 + reader.readAsDataURL(file.raw!) + reader.onload = function (e) { + if (e?.target?.result) pdfDialog.value.openDialog(e?.target.result) + } + } + + /**关闭预览图片 */ + const closeImageViewer = () => { + imgViewerVisible.value = false + } + + /**超出限制重新上传 */ + const handleExceed = (files: File[], uploadFiles: UploadUserFile[], type: string) => { + switch (type) { + case 'report': + toast('体检报告的图片最多上传9张') + break + case 'pdf': + uploadPdf.value?.clearFiles() + const file = files[0] as UploadRawFile + file.uid = genFileId() + uploadPdf.value?.handleStart(file) + break + case 'idCard': + toast('身份证正反面最多上传2张') + break + default: + break + } + } + + return { + uploadPdf, + fileUploadList, + imgViewerVisible, + viewerIndex, + previewSrcList, + startUpload, + beforeRemove, + handlePreview, + closeImageViewer, + handleExceed, + pdfDialog, + previewPdf + } +} diff --git a/src/hooks/useCreateModal.ts b/src/hooks/useCreateModal.ts new file mode 100644 index 0000000..781253f --- /dev/null +++ b/src/hooks/useCreateModal.ts @@ -0,0 +1,62 @@ +import { createVNode, render as VueRender, type Component } from "vue"; +import zhCn from "element-plus/es/locale/lang/zh-cn"; + +export interface CreateModalOptions { + [key: string]: any + title: string + visible?: boolean + width?: number | string + onConfirm?: Fn + onCancel?: Fn +} + +export interface ModalProps { + [key: string]: any + title: string + visible: boolean + width: number | string + onConfirm?: Fn + onCancel?: Fn +} +/**挂载 */ +function render(Component: T, props: Partial, container: HTMLElement) { + const vNode = createVNode(Component, props) + VueRender(vNode, container) + document.body.appendChild(container) +} +/**销毁 */ +function destroy(container: HTMLElement) { + document.body.removeChild(container) +} + +export function useCreateModal(Component: T) { + const container = document.createElement('div') + + function close() { + VueRender(null, container) + destroy(container) + } + + const commandComponent = (options: CreateModalOptions) => { + const propsData: Partial = { + ...options, + onConfirm: function (...args) { + if (options.onConfirm) { + options.onConfirm(...args) + } + }, + onCancel: function () { + if (options.onCancel) { + options.onCancel() + } + close() + }, + } + + render(Component, propsData, container) + } + + commandComponent.close = close + + return commandComponent +} \ No newline at end of file diff --git a/src/hooks/useDictOptions.ts b/src/hooks/useDictOptions.ts new file mode 100644 index 0000000..30f5c11 --- /dev/null +++ b/src/hooks/useDictOptions.ts @@ -0,0 +1,69 @@ +import { dictDataAll } from '@/api/setting/dict' +import { reactive, toRaw } from 'vue' + +interface Options { + [propName: string]: { + api: PromiseFun + params?: Record + transformData?(data: any): any + } +} + +// { +// dict: { +// api: dictData, +// params: { name: 'user' }, +// transformData(data: any) { +// return data.list +// } +// } +// } + +export function useDictOptions(options: Options) { + const optionsData: any = reactive({}) + const optionsKey = Object.keys(options) + const apiLists = optionsKey.map((key) => { + const value = options[key] + optionsData[key] = [] + return () => value.api(toRaw(value.params) || {}) + }) + + const refresh = async () => { + const res = await Promise.allSettled>(apiLists.map((api) => api())) + res.forEach((item, index) => { + const key = optionsKey[index] + if (item.status == 'fulfilled') { + const { transformData } = options[key] + const data = transformData ? transformData(item.value) : item.value + optionsData[key] = data + } + }) + } + refresh() + return { + optionsData: optionsData as T, + refresh + } +} + +// useDictOptions<{ +// dict: any[] +// }>({ +// dict: dictData +// }) + +export function useDictData(dict: string[]) { + const options: Options = {} + for (const type of dict) { + options[type] = { + api: dictDataAll, + params: { + dictType: type + } + } + } + const { optionsData } = useDictOptions(options) + return { + dictData: optionsData + } +} diff --git a/src/hooks/useFetchData.ts b/src/hooks/useFetchData.ts new file mode 100644 index 0000000..0d68a74 --- /dev/null +++ b/src/hooks/useFetchData.ts @@ -0,0 +1,67 @@ +type OptionsType = { + apiFn: (payload: any) => Promise // 请求api + onSuccess?: (response: T[] | any) => void // 接口调用成功的回调函数 + onError?: (err: any) => void // 接口调用失败的回调函数 +} +type StateType = { + loading: boolean // loading + data: T[] // 返回结果 +} + +/** + * 获取异步请求数据 + */ +export function useFetchData(options: OptionsType) { + const { apiFn, onSuccess, onError } = options + + const state: StateType = reactive({ + loading: false, + data: [] + }) + + const loadData = async () => { + state.loading = true + try { + const result = await apiFn() + state.data = result + onSuccess && onSuccess(result) + } catch (error) { + onError && onError(error) + } finally { + state.loading = false + } + } + + onMounted(loadData) + + return { + ...toRefs(state), + loadData + } +} + +/** + * loading + */ +export function useRequest(options: OptionsType) { + const { apiFn, onSuccess, onError } = options + + const loading = ref(false) + + const runFn = async (...args: any[]) => { + loading.value = true + try { + const result = await apiFn(...args) + onSuccess && onSuccess(result) + } catch (error) { + onError && onError(error) + } finally { + loading.value = false + } + } + + return { + loading, + runFn + } +} diff --git a/src/hooks/useLockFn.ts b/src/hooks/useLockFn.ts new file mode 100644 index 0000000..c4423d6 --- /dev/null +++ b/src/hooks/useLockFn.ts @@ -0,0 +1,21 @@ +import { ref } from 'vue' + +export function useLockFn(fn: (...args: any[]) => Promise) { + const isLock = ref(false) + const lockFn = async (...args: any[]) => { + if (isLock.value) return + isLock.value = true + try { + const res = await fn(...args) + isLock.value = false + return res + } catch (e) { + isLock.value = false + throw e + } + } + return { + isLock, + lockFn + } +} diff --git a/src/hooks/useMultipleTabs.ts b/src/hooks/useMultipleTabs.ts new file mode 100644 index 0000000..26faedc --- /dev/null +++ b/src/hooks/useMultipleTabs.ts @@ -0,0 +1,57 @@ +/* + * @Author: micky 1254597151@qq.com + * @Date: 2023-08-14 15:56:31 + * @LastEditors: micky 1254597151@qq.com + * @LastEditTime: 2023-11-08 19:10:33 + * @FilePath: \housekeeping-admin\src\hooks\useMultipleTabs.ts + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +import useTabsStore from '@/stores/modules/multipleTabs' +import useSettingStore from '@/stores/modules/setting' +import { objectToQuery } from '@/utils/util' + +export default function useMultipleTabs() { + const router = useRouter() + const route = useRoute() + const tabsStore = useTabsStore() + const settingStore = useSettingStore() + + const tabsLists = computed(() => { + return tabsStore.getTabList + }) + + const currentTab = computed(() => { + return Object.keys(route.query).length > 0 ? `${route.path}?${objectToQuery(route.query)}` : route.path + // return route.path + }) + + const addTab = () => { + if (!settingStore.openMultipleTabs) return + tabsStore.addTab(router) + } + + const removeTab = (fullPath?: any) => { + if (!settingStore.openMultipleTabs) return + fullPath = fullPath ?? route.fullPath + tabsStore.removeTab(fullPath, router) + } + + const removeOtherTab = () => { + if (!settingStore.openMultipleTabs) return + tabsStore.removeOtherTab(route) + } + + const removeAllTab = () => { + if (!settingStore.openMultipleTabs) return + tabsStore.removeAllTab(router) + } + + return { + tabsLists, + currentTab, + addTab, + removeTab, + removeOtherTab, + removeAllTab + } +} diff --git a/src/hooks/usePaging.ts b/src/hooks/usePaging.ts new file mode 100644 index 0000000..572c9c8 --- /dev/null +++ b/src/hooks/usePaging.ts @@ -0,0 +1,73 @@ +import { reactive, toRaw } from 'vue' + +// 分页钩子函数 +interface Options { + page?: number + size?: number + fetchFun: (_arg: any) => Promise + params?: Record + firstLoading?: boolean + nextFetchFun?: (_arg: any) => any + nextFetchParams?: Record +} + +export function usePaging(options: Options) { + const { page = 1, size = 10, fetchFun, params = {}, firstLoading = false, nextFetchFun, nextFetchParams = {} } = options + // 记录分页初始参数 + const paramsInit: Record = Object.assign({}, toRaw(params)) + // 分页数据 + const pager = reactive({ + page, + size, + loading: firstLoading, + count: 0, + lists: [] as any[], + sum: 0, + actualPaymentTotal: 0, + totalCommissionAmount: 0, + totalOrderAmount: 0 + }) + // 请求分页接口 + const getLists = () => { + pager.loading = true + return fetchFun({ + pageNo: pager.page, + pageSize: pager.size, + ...params + }) + .then((res: any) => { + pager.count = res?.count + pager.lists = res?.lists + pager.sum = res?.sum ?? 0 + pager.actualPaymentTotal = res?.actualPaymentTotal ?? 0 + pager.totalCommissionAmount = res?.totalCommissionAmount ?? 0 + pager.totalOrderAmount = res?.totalOrderAmount ?? 0 + if (nextFetchFun) nextFetchFun(nextFetchParams) + return Promise.resolve(res) + }) + .catch((err: any) => { + return Promise.reject(err) + }) + .finally(() => { + pager.loading = false + }) + } + // 重置为第一页 + const resetPage = () => { + pager.page = 1 + getLists() + } + // 重置参数 + const resetParams = () => { + Object.keys(paramsInit).forEach(item => { + params[item] = paramsInit[item] + }) + getLists() + } + return { + pager, + getLists, + resetParams, + resetPage + } +} diff --git a/src/hooks/useSettingRule.ts b/src/hooks/useSettingRule.ts new file mode 100644 index 0000000..607d71c --- /dev/null +++ b/src/hooks/useSettingRule.ts @@ -0,0 +1,56 @@ +import type { ElTable } from "element-plus" +import Sortable from 'sortablejs' + +export function useSettingRule() { + const tableList = ref([]) + const selectTableList = ref([]) + const tableDataRef = ref>() + + /**添加时间节点 */ + const handleAddItem = (item: T) => { + tableList.value.push(item) + } + /**批量删除 */ + const handleBatchDelete = () => { + const selectedIds = unref(selectTableList).map(item => item.uid) + tableList.value = unref(tableList).filter(item => !selectedIds.includes(item.uid)) + selectTableList.value = [] + tableDataRef.value?.clearSelection() + } + /**删除(取消选中删除项)*/ + const handleDelete = (scope: any) => { + const { $index, row } = scope + tableList.value.splice($index, 1) + if (!unref(selectTableList).length) return + selectTableList.value = unref(selectTableList).filter(item => item.uid !== row.uid) + tableDataRef.value?.toggleRowSelection(row, false) + } + /**拖拽表格 */ + const initDropTable = () => { + if (tableDataRef.value) { + const el = tableDataRef.value.$el.querySelector('.el-table__body tbody') + return Sortable.create(el, { + handle: '.el-table__row', + onEnd: ({ newIndex, oldIndex }: { newIndex: number; oldIndex: number }) => { + const arr = tableList.value + const currRow = arr.splice(oldIndex, 1)[0] + arr.splice(newIndex, 0, currRow) + tableList.value = [] + nextTick(() => { + tableList.value = arr + }) + } + }) + } + } + + return { + selectTableList, + tableList, + tableDataRef, + handleAddItem, + handleBatchDelete, + handleDelete, + initDropTable, + } +} diff --git a/src/hooks/useWatchRoute.ts b/src/hooks/useWatchRoute.ts new file mode 100644 index 0000000..381b2ec --- /dev/null +++ b/src/hooks/useWatchRoute.ts @@ -0,0 +1,17 @@ +import type { RouteLocationNormalizedLoaded } from 'vue-router' + +export function useWatchRoute(callback: (route: RouteLocationNormalizedLoaded) => void) { + const route = useRoute() + watch( + route, + () => { + callback(route) + }, + { + immediate: true + } + ) + return { + route + } +} diff --git a/src/install/directives/copy.ts b/src/install/directives/copy.ts new file mode 100644 index 0000000..c0b1909 --- /dev/null +++ b/src/install/directives/copy.ts @@ -0,0 +1,28 @@ +/** + * perm 操作权限处理 + * 指令用法: + * 编辑 + */ + +import feedback from '@/utils/feedback' +import useClipboard from 'vue-clipboard3' +const clipboard = 'data-clipboard-text' +export default { + mounted: (el: HTMLElement, binding: any) => { + el.setAttribute(clipboard, binding.value) + const { toClipboard } = useClipboard() + + el.onclick = () => { + toClipboard(el.getAttribute(clipboard)!) + .then(() => { + feedback.msgSuccess('复制成功') + }) + .catch(() => { + feedback.msgError('复制失败') + }) + } + }, + updated: (el: HTMLElement, binding: any) => { + el.setAttribute(clipboard, binding.value) + } +} diff --git a/src/install/directives/perms.ts b/src/install/directives/perms.ts new file mode 100644 index 0000000..e62765f --- /dev/null +++ b/src/install/directives/perms.ts @@ -0,0 +1,28 @@ +/** + * perm 操作权限处理 + * 指令用法: + * 编辑 + */ + +import useUserStore from '@/stores/modules/user' +export default { + mounted: (el: HTMLElement, binding: any) => { + const { value } = binding + const userStore = useUserStore() + const permissions = userStore.perms + const all_permission = '*' + if (Array.isArray(value)) { + if (value.length > 0) { + const hasPermission = permissions.some((key: string) => { + return all_permission == key || value.includes(key) + }) + + if (!hasPermission) { + el.parentNode && el.parentNode.removeChild(el) + } + } + } else { + throw new Error('like v-perms="[\'auth.menu/edit\']"') + } + } +} diff --git a/src/install/index.ts b/src/install/index.ts new file mode 100644 index 0000000..eab8563 --- /dev/null +++ b/src/install/index.ts @@ -0,0 +1,27 @@ +import type { App } from 'vue' +const modules = import.meta.glob('./**/*', { eager: true }) + +// 安装方法,执行某一类相同操作 +function install(app: App) { + Object.keys(modules).forEach((key) => { + const name = key.replace(/(.*\/)*([^.]+).*/gi, '$2') + const type = key.replace(/^\.\/([\w-]+).*/gi, '$1') + const module: any = modules[key] + if (module.default) { + switch (type) { + // 用于注册全局指令 + case 'directives': + app.directive(name, module.default) + break + // 使用插件 + case 'plugins': + typeof module.default === 'function' && module.default(app) + break + } + } + }) +} + +export default { + install +} diff --git a/src/install/plugins/echart.ts b/src/install/plugins/echart.ts new file mode 100644 index 0000000..3d3aee0 --- /dev/null +++ b/src/install/plugins/echart.ts @@ -0,0 +1,65 @@ +//引入 echarts 核心模块,核心模块提供了 echarts 使用必须要的接口。 + +import * as echarts from 'echarts/core' +//引入柱状图图表,图表后缀都为 Chart +import { + BarChart, + LineChart, + PieChart, + MapChart, + PictorialBarChart, + RadarChart, + ScatterChart, + GaugeChart +} from 'echarts/charts' +// 引入提示框,标题,直角坐标系,数据集,内置数据转换器组件,组件后缀都为 Component +import { + TitleComponent, + TooltipComponent, + GridComponent, + PolarComponent, + AriaComponent, + ParallelComponent, + LegendComponent, + RadarComponent, + ToolboxComponent, + DataZoomComponent, + VisualMapComponent, + TimelineComponent, + CalendarComponent, + GraphicComponent +} from 'echarts/components' + +//引入 Canvas 渲染器,注意引入 CanvasRenderer 或者 SVGRenderer 是必须的一步 +import { CanvasRenderer } from 'echarts/renderers' +//标签自动布局,全局过渡动画等特性 +import { LabelLayout, UniversalTransition } from 'echarts/features' + +// 注册必须的组件 +echarts.use([ + LegendComponent, + TitleComponent, + TooltipComponent, + GridComponent, + PolarComponent, + AriaComponent, + ParallelComponent, + BarChart, + LineChart, + PieChart, + MapChart, + RadarChart, + PictorialBarChart, + RadarComponent, + ToolboxComponent, + DataZoomComponent, + VisualMapComponent, + TimelineComponent, + CalendarComponent, + GraphicComponent, + ScatterChart, + CanvasRenderer, + LabelLayout, + UniversalTransition, + GaugeChart +]) diff --git a/src/install/plugins/element.ts b/src/install/plugins/element.ts new file mode 100644 index 0000000..ac6ae23 --- /dev/null +++ b/src/install/plugins/element.ts @@ -0,0 +1,11 @@ +import * as ElementPlusIcons from '@element-plus/icons-vue' +import type { App } from 'vue' +//https://github.com/element-plus/element-plus/issues/7293 +import 'element-plus/es/components/dialog/style/css' + +export default (app: App) => { + // 全局注册ElementPlus图标 + for (const [key, component] of Object.entries(ElementPlusIcons)) { + app.component(key, component) + } +} diff --git a/src/install/plugins/hljs.ts b/src/install/plugins/hljs.ts new file mode 100644 index 0000000..041ac77 --- /dev/null +++ b/src/install/plugins/hljs.ts @@ -0,0 +1,8 @@ +import type { App } from 'vue' +import 'highlight.js/styles/github.css' +import hljs from 'highlight.js/lib/common' +import hljsVuePlugin from '@highlightjs/vue-plugin' +console.log(hljs) +export default (app: App) => { + app.use(hljsVuePlugin) +} diff --git a/src/install/plugins/pinia.ts b/src/install/plugins/pinia.ts new file mode 100644 index 0000000..6e72e75 --- /dev/null +++ b/src/install/plugins/pinia.ts @@ -0,0 +1,6 @@ +import store from '@/stores' +import type { App } from 'vue' + +export default (app: App) => { + app.use(store) +} diff --git a/src/install/plugins/router.ts b/src/install/plugins/router.ts new file mode 100644 index 0000000..4e3647d --- /dev/null +++ b/src/install/plugins/router.ts @@ -0,0 +1,6 @@ +import router from '@/router' +import type { App } from 'vue' + +export default (app: App) => { + app.use(router) +} diff --git a/src/layout/components/footer.vue b/src/layout/components/footer.vue new file mode 100644 index 0000000..037a977 --- /dev/null +++ b/src/layout/components/footer.vue @@ -0,0 +1,14 @@ + + + diff --git a/src/layout/default/components/header/breadcrumb.vue b/src/layout/default/components/header/breadcrumb.vue new file mode 100644 index 0000000..58c8ef2 --- /dev/null +++ b/src/layout/default/components/header/breadcrumb.vue @@ -0,0 +1,20 @@ + + diff --git a/src/layout/default/components/header/fold.vue b/src/layout/default/components/header/fold.vue new file mode 100644 index 0000000..7ce9360 --- /dev/null +++ b/src/layout/default/components/header/fold.vue @@ -0,0 +1,15 @@ + + + diff --git a/src/layout/default/components/header/full-screen.vue b/src/layout/default/components/header/full-screen.vue new file mode 100644 index 0000000..96cec1e --- /dev/null +++ b/src/layout/default/components/header/full-screen.vue @@ -0,0 +1,10 @@ + + + diff --git a/src/layout/default/components/header/index.vue b/src/layout/default/components/header/index.vue new file mode 100644 index 0000000..8aacd7f --- /dev/null +++ b/src/layout/default/components/header/index.vue @@ -0,0 +1,55 @@ + + + + + diff --git a/src/layout/default/components/header/multiple-tabs.vue b/src/layout/default/components/header/multiple-tabs.vue new file mode 100644 index 0000000..eea9e74 --- /dev/null +++ b/src/layout/default/components/header/multiple-tabs.vue @@ -0,0 +1,132 @@ + + + + diff --git a/src/layout/default/components/header/refresh.vue b/src/layout/default/components/header/refresh.vue new file mode 100644 index 0000000..a55ccba --- /dev/null +++ b/src/layout/default/components/header/refresh.vue @@ -0,0 +1,14 @@ + + + diff --git a/src/layout/default/components/header/user-drop-down.vue b/src/layout/default/components/header/user-drop-down.vue new file mode 100644 index 0000000..3970709 --- /dev/null +++ b/src/layout/default/components/header/user-drop-down.vue @@ -0,0 +1,34 @@ + + + diff --git a/src/layout/default/components/main.vue b/src/layout/default/components/main.vue new file mode 100644 index 0000000..d716675 --- /dev/null +++ b/src/layout/default/components/main.vue @@ -0,0 +1,32 @@ + + + + + diff --git a/src/layout/default/components/setting/drawer.vue b/src/layout/default/components/setting/drawer.vue new file mode 100644 index 0000000..82ed4e5 --- /dev/null +++ b/src/layout/default/components/setting/drawer.vue @@ -0,0 +1,182 @@ + + + + + diff --git a/src/layout/default/components/setting/index.vue b/src/layout/default/components/setting/index.vue new file mode 100644 index 0000000..d0f4957 --- /dev/null +++ b/src/layout/default/components/setting/index.vue @@ -0,0 +1,19 @@ + + + diff --git a/src/layout/default/components/sidebar/index.vue b/src/layout/default/components/sidebar/index.vue new file mode 100644 index 0000000..28413a0 --- /dev/null +++ b/src/layout/default/components/sidebar/index.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/src/layout/default/components/sidebar/logo.vue b/src/layout/default/components/sidebar/logo.vue new file mode 100644 index 0000000..f469f4e --- /dev/null +++ b/src/layout/default/components/sidebar/logo.vue @@ -0,0 +1,61 @@ + + + + diff --git a/src/layout/default/components/sidebar/menu-item.vue b/src/layout/default/components/sidebar/menu-item.vue new file mode 100644 index 0000000..09b46aa --- /dev/null +++ b/src/layout/default/components/sidebar/menu-item.vue @@ -0,0 +1,87 @@ + + + + diff --git a/src/layout/default/components/sidebar/menu.vue b/src/layout/default/components/sidebar/menu.vue new file mode 100644 index 0000000..7efba48 --- /dev/null +++ b/src/layout/default/components/sidebar/menu.vue @@ -0,0 +1,101 @@ + + + + + diff --git a/src/layout/default/components/sidebar/side.vue b/src/layout/default/components/sidebar/side.vue new file mode 100644 index 0000000..d90134d --- /dev/null +++ b/src/layout/default/components/sidebar/side.vue @@ -0,0 +1,66 @@ + + + + + diff --git a/src/layout/default/index.vue b/src/layout/default/index.vue new file mode 100644 index 0000000..6a377e4 --- /dev/null +++ b/src/layout/default/index.vue @@ -0,0 +1,26 @@ + + + diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..0f67fa7 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,14 @@ +import { createApp } from 'vue' +import App from './App.vue' +import install from './install' +import './permission' +import './styles/index.scss' +import 'virtual:svg-icons-register' +import eventBus from 'vue3-eventbus' +import directives from './directives' + +const app = createApp(App) +app.use(install) +app.use(eventBus) +app.use(directives) +app.mount('#app') diff --git a/src/permission.ts b/src/permission.ts new file mode 100644 index 0000000..ca7017a --- /dev/null +++ b/src/permission.ts @@ -0,0 +1,84 @@ +/** + * 权限控制 + */ + +import NProgress from 'nprogress' +import router, { findFirstValidRoute } from './router' +import 'nprogress/nprogress.css' +import { isExternal } from './utils/validate' +import useUserStore from './stores/modules/user' +import { INDEX_ROUTE, INDEX_ROUTE_NAME } from './router/routes' +import { PageEnum } from './enums/pageEnum' +import useTabsStore from './stores/modules/multipleTabs' +import { clearAuthInfo } from './utils/auth' +import config from './config' + +// NProgress配置 +NProgress.configure({ showSpinner: false }) + +const loginPath = PageEnum.LOGIN +const defaultPath = PageEnum.INDEX +// 免登录白名单 +const whiteList: string[] = [PageEnum.LOGIN, PageEnum.ERROR_403] +router.beforeEach(async (to, from, next) => { + // 开始 Progress Bar + NProgress.start() + document.title = to.meta.title ?? config.title + const userStore = useUserStore() + const tabsStore = useTabsStore() + if (whiteList.includes(to.path)) { + // 在免登录白名单,直接进入 + next() + } else if (userStore.token) { + // 获取用户信息 + const hasGetUserInfo = Object.keys(userStore.userInfo).length !== 0 + if (hasGetUserInfo) { + if (to.path === loginPath) { + next({ path: defaultPath }) + } else { + next() + } + } else { + try { + await userStore.getUserInfo() + await userStore.getMenu() + const routes = userStore.routes + // 找到第一个有效路由 + const routeName = findFirstValidRoute(routes) + // 没有有效路由跳转到403页面 + if (!routeName) { + clearAuthInfo() + next(PageEnum.ERROR_403) + return + } + tabsStore.setRouteName(routeName!) + INDEX_ROUTE.redirect = { name: routeName } + + // 动态添加index路由 + router.addRoute(INDEX_ROUTE) + routes.forEach((route: any) => { + // https 则不插入 + if (isExternal(route.path)) { + return + } + if (!route.children) { + router.addRoute(INDEX_ROUTE_NAME, route) + return + } + // 动态添加可访问路由表 + router.addRoute(route) + }) + next({ ...to, replace: true }) + } catch (err) { + clearAuthInfo() + next({ path: loginPath, query: { redirect: to.fullPath } }) + } + } + } else { + next({ path: loginPath, query: { redirect: to.fullPath } }) + } +}) + +router.afterEach(() => { + NProgress.done() +}) diff --git a/src/router/index.ts b/src/router/index.ts new file mode 100644 index 0000000..91b6f88 --- /dev/null +++ b/src/router/index.ts @@ -0,0 +1,110 @@ +import { createRouter, createWebHistory, RouterView, type RouteRecordRaw } from 'vue-router' +import { MenuEnum } from '@/enums/appEnums' +import { isExternal } from '@/utils/validate' +import { constantRoutes, INDEX_ROUTE_NAME, LAYOUT } from './routes' +import useUserStore from '@/stores/modules/user' + +// 匹配views里面所有的.vue文件,动态引入 +const modules = import.meta.glob('/src/views/**/*.vue') + +// +export function getModulesKey() { + return Object.keys(modules).map((item) => item.replace('/src/views/', '').replace('.vue', '')) +} + +// 过滤路由所需要的数据 +export function filterAsyncRoutes(routes: any[], firstRoute = true) { + return routes.map((route) => { + const routeRecord = createRouteRecord(route, firstRoute) + if (route.children != null && route.children && route.children.length) { + routeRecord.children = filterAsyncRoutes(route.children, false) + } + return routeRecord + }) +} + +// 创建一条路由记录 +export function createRouteRecord(route: any, firstRoute: boolean): RouteRecordRaw { + //@ts-ignore + const routeRecord: RouteRecordRaw = { + path: isExternal(route.paths) ? route.paths : firstRoute ? `/${route.paths}` : route.paths, + name: Symbol(route.paths), + meta: { + hidden: !route.isShow, + keepAlive: !!route.isCache, + title: route.menuName, + perms: route.perms, + query: route.params, + icon: route.menuIcon, + type: route.menuType, + activeMenu: route.selected + } + } + switch (route.menuType) { + case MenuEnum.CATALOGUE: + routeRecord.component = firstRoute ? LAYOUT : RouterView + if (!route.children) { + routeRecord.component = RouterView + } + break + case MenuEnum.MENU: + routeRecord.component = loadRouteView(route.component) + break + } + return routeRecord +} + +// 动态加载组件 +export function loadRouteView(component: string) { + try { + const key = Object.keys(modules).find((key) => { + return key.includes(`${component}.vue`) + }) + if (key) { + return modules[key] + } + throw Error(`找不到组件${component},请确保组件路径正确`) + } catch (error) { + console.error(error) + return RouterView + } +} + +// 找到第一个有效的路由 +export function findFirstValidRoute(routes: RouteRecordRaw[]): string | undefined { + for (const route of routes) { + if (route.meta?.type == MenuEnum.MENU && !route.meta?.hidden && !isExternal(route.path)) { + return route.name as string + } + if (route.children) { + const name = findFirstValidRoute(route.children) + if (name) { + return name + } + } + } +} +//通过权限字符查询路由路径 +export function getRoutePath(perms: string) { + const routerObj = useRouter() || router + return routerObj.getRoutes().find((item) => item.meta?.perms == perms)?.path || '' +} + +// 重置路由 +export function resetRouter() { + router.removeRoute(INDEX_ROUTE_NAME) + const { routes } = useUserStore() + routes.forEach((route) => { + const name = route.name + if (name && router.hasRoute(name)) { + router.removeRoute(name) + } + }) +} + +const router = createRouter({ + history: createWebHistory(import.meta.env.BASE_URL), + routes: constantRoutes +}) + +export default router diff --git a/src/router/routes.ts b/src/router/routes.ts new file mode 100644 index 0000000..9af429b --- /dev/null +++ b/src/router/routes.ts @@ -0,0 +1,431 @@ +/** + * Note: 路由配置项 + * + * path: '/path' // 路由路径 + * name:'router-name' // 设定路由的名字,一定要填写不然使用时会出现各种问题 + * meta : { + title: 'title' // 设置该路由在侧边栏的名字 + icon: 'icon-name' // 设置该路由的图标 + activeMenu: '/system/user' // 当路由设置了该属性,则会高亮相对应的侧边栏。 + query: '{"id": 1}' // 访问路由的默认传递参数 + hidden: true // 当设置 true 的时候该路由不会在侧边栏出现 + hideTab: true //当设置 true 的时候该路由不会在多标签tab栏出现 + } + */ + +import type { RouteRecordRaw } from 'vue-router' +import { PageEnum } from '@/enums/pageEnum' +import Layout from '@/layout/default/index.vue' + +export const LAYOUT = () => Promise.resolve(Layout) + +export const INDEX_ROUTE_NAME = Symbol() + +export const constantRoutes: Array = [ + { + path: PageEnum.ERROR_404, + component: () => import('@/views/error/404.vue') + }, + { + path: PageEnum.ERROR_403, + component: () => import('@/views/error/403.vue') + }, + { + path: PageEnum.LOGIN, + component: () => import('@/views/account/login.vue') + }, + { + path: '/user', + component: LAYOUT, + children: [ + { + path: 'setting', + name: Symbol(), + component: () => import('@/views/user/setting.vue'), + meta: { + title: '个人设置' + } + } + ] + }, + { + path: '/dev_tools', + component: LAYOUT, + children: [ + { + path: 'code/edit', + component: () => import('@/views/dev_tools/code/edit.vue'), + meta: { + title: '编辑数据表', + activeMenu: '/dev_tools/code' + } + } + ] + }, + { + path: '/setting', + component: LAYOUT, + children: [ + { + path: 'dict/data', + component: () => import('@/views/setting/dict/data/index.vue'), + meta: { + title: '数据管理', + activeMenu: '/setting/dict' + } + }, + { + path: 'system/task/edit', + component: () => import('@/views/setting/system/task/edit.vue'), + meta: { + title: '新增任务', + activeMenu: '/setting/system/task' + } + } + ] + }, + { + path: '/setting', + component: LAYOUT, + children: [ + { + path: 'dict/data', + component: () => import('@/views/setting/dict/data/index.vue'), + meta: { + title: '数据管理', + activeMenu: '/setting/dict' + } + } + ] + }, + { + path: '/service', + component: LAYOUT, + children: [ + { + path: 'lists/edit', + component: () => import('@/views/service/lists/edit.vue'), + meta: { + title: '服务列表', + activeMenu: '/service/lists' + } + } + ] + }, + { + path: '/service', + component: LAYOUT, + children: [ + { + path: 'category/edit', + component: () => import('@/views/service/category/edit.vue'), + meta: { + title: '服务列表', + activeMenu: '/service/category' + } + } + ] + }, + { + path: '/service', + component: LAYOUT, + children: [ + { + path: 'time/edit', + component: () => import('@/views/service/subscribe/edit.vue'), + meta: { + title: '预约服务时间', + activeMenu: '/service/subscribe' + } + } + ] + }, + { + path: '/service', + component: LAYOUT, + children: [ + { + path: 'activity/form', + component: () => import('@/views/service/activity/form.vue'), + meta: { + title: '活动专区', + activeMenu: '/service/activity' + } + } + ] + }, + { + path: '/user', + component: LAYOUT, + children: [ + { + path: 'userList/detail', + component: () => import('@/views/user/userList/detail.vue'), + meta: { + title: '用户列表', + activeMenu: '/user/userList' + } + } + ] + }, + { + path: '/master_worker', + component: LAYOUT, + children: [ + { + path: 'edit', + component: () => import('@/views/master_worker/edit.vue'), + name: 'MasterWorkerEdit', + meta: { + title: '添加师傅', + activeMenu: '/master_worker/index' + } + } + ] + }, + { + path: '/order', + component: LAYOUT, + children: [ + { + path: 'lists/detail', + component: () => import('@/views/order/lists/detail.vue'), + meta: { + title: '订单列表', + activeMenu: '/order/lists' + } + } + ] + }, + { + path: '/setting', + component: LAYOUT, + children: [ + { + path: 'payment/payment_way/edit', + component: () => import('@/views/setting/payment/payment_way/edit.vue'), + meta: { + title: '支付方式', + activeMenu: '/setting/payment/payment_way' + } + } + ] + }, + { + path: '/marketing', + component: LAYOUT, + children: [ + { + path: 'coupon/edit', + component: () => import('@/views/application/coupon/edit.vue'), + meta: { + title: '新增优惠券', + activeMenu: '/application/coupon/coupon' + } + } + ] + }, + // 分销管理 + { + path: '/distributor', + component: LAYOUT, + children: [ + { + path: 'add', + component: () => import('@/views/distributor/edit.vue'), + name: 'DistributorAdd', + meta: { + title: '添加分销', + activeMenu: '/distributor/index' + } + } + ] + }, + { + path: '/distributor', + component: LAYOUT, + children: [ + { + path: 'edit', + component: () => import('@/views/distributor/edit.vue'), + name: 'DistributorEdit', + meta: { + title: '编辑分销', + activeMenu: '/distributor/index' + } + } + ] + }, + { + path: '/distributor', + component: LAYOUT, + children: [ + { + path: 'register', + component: () => import('@/views/distributor/register.vue'), + name: 'DistributorRegister', + meta: { + title: '查看用户', + activeMenu: '/distributor/index' + } + } + ] + }, + { + path: '/distributor', + component: LAYOUT, + children: [ + { + path: 'order', + component: () => import('@/views/distributor/order.vue'), + name: 'DistributorOrder', + meta: { + title: '查看订单', + activeMenu: '/distributor/index' + } + } + ] + }, + { + path: '/distributor', + component: LAYOUT, + children: [ + { + path: 'register/detail', + component: () => import('@/views/distributor/userDetail.vue'), + name: 'DistributorRegisterDetail', + meta: { + title: '用户详情', + activeMenu: '/distributor/index' + } + } + ] + }, + { + path: '/marketing', + component: LAYOUT, + children: [ + { + path: 'coupon/edit', + component: () => import('@/views/application/coupon/edit.vue'), + meta: { + title: '新增优惠券', + activeMenu: '/application/coupon/coupon' + } + } + ] + }, + { + path: '/marketing', + component: LAYOUT, + children: [ + { + path: 'coupon/detail', + component: () => import('@/views/application/coupon/detail.vue'), + name: 'CouponDetail', + meta: { + title: '优惠券详情', + activeMenu: '/application/coupon/coupon' + } + } + ] + }, + { + path: '/distributor', + component: LAYOUT, + children: [ + { + path: 'coupon', + component: () => import('@/views/distributor/coupon.vue'), + name: 'DistributorCoupon', + meta: { + title: '查看优惠券', + activeMenu: '/distributor/index' + } + } + ] + }, + { + path: '/master_worker', + component: LAYOUT, + children: [ + { + path: 'detail', + component: () => import('@/views/master_worker/detail.vue'), + meta: { + title: '师傅认证资料详情', + activeMenu: '/master_worker/apply' + } + } + ] + }, + { + path: '/report/pdf', + component: () => import('@/views/master_worker/components/previewPdf.vue'), + meta: { + title: '师傅体检报告' + } + }, + // { + // path: '/master_worker', + // component: LAYOUT, + // children: [ + // { + // path: 'physical', + // component: () => import('@/views/master_worker/physical.vue'), + // meta: { + // title: '师傅体检报告', + // } + // } + // ] + // }, + { + path: '/master_worker', + component: LAYOUT, + children: [ + { + path: 'staff', + component: () => import('@/views/master_worker/staff.vue'), + meta: { + title: '师傅资料', + activeMenu: '/master_worker/apply' + } + } + ] + }, + + { + path: '/master_worker', + component: LAYOUT, + children: [ + { + path: 'cancelOrderRule', + component: () => import('@/views/master_worker/cancelOrder/rule.vue'), + meta: { + title: '师傅退单规则', + activeMenu: '/master_worker/cancelOrder' + } + } + ] + }, + { + path: '/user', + component: LAYOUT, + children: [ + { + path: 'setting_rule', + component: () => import('@/views/user/refund_rule/setting_rule.vue'), + meta: { + title: '用户退单规则', + activeMenu: '/user/refund_rule_list' + } + } + ] + } +] + +export const INDEX_ROUTE: RouteRecordRaw = { + path: PageEnum.INDEX, + component: LAYOUT, + name: INDEX_ROUTE_NAME +} diff --git a/src/stores/index.ts b/src/stores/index.ts new file mode 100644 index 0000000..7c7ea69 --- /dev/null +++ b/src/stores/index.ts @@ -0,0 +1,3 @@ +import { createPinia } from 'pinia' +const store = createPinia() +export default store diff --git a/src/stores/modules/app.ts b/src/stores/modules/app.ts new file mode 100644 index 0000000..d6cba57 --- /dev/null +++ b/src/stores/modules/app.ts @@ -0,0 +1,53 @@ +import { getConfig } from '@/api/app' +import { defineStore } from 'pinia' +interface AppSate { + config: Record + isMobile: boolean + isCollapsed: boolean + isRouteShow: boolean +} + +const useAppStore = defineStore({ + id: 'app', + state: (): AppSate => { + return { + config: {}, + isMobile: true, + isCollapsed: false, + isRouteShow: true + } + }, + actions: { + getImageUrl(url: string) { + return url && url.includes(this.config.ossDomain) + ? url + : `${this.config.ossDomain}${url}` + }, + getConfig() { + return new Promise((resolve, reject) => { + getConfig() + .then((data) => { + this.config = data + resolve(data) + }) + .catch((err) => { + reject(err) + }) + }) + }, + setMobile(value: boolean) { + this.isMobile = value + }, + toggleCollapsed(toggle?: boolean) { + this.isCollapsed = toggle ?? !this.isCollapsed + }, + refreshView() { + this.isRouteShow = false + nextTick(() => { + this.isRouteShow = true + }) + } + } +}) + +export default useAppStore diff --git a/src/stores/modules/multipleTabs.ts b/src/stores/modules/multipleTabs.ts new file mode 100644 index 0000000..331165c --- /dev/null +++ b/src/stores/modules/multipleTabs.ts @@ -0,0 +1,164 @@ +import { defineStore } from 'pinia' +import { isExternal } from '@/utils/validate' +import type { LocationQuery, RouteLocationNormalized, RouteParamsRaw, Router, RouteRecordName } from 'vue-router' +import { PageEnum } from '@/enums/pageEnum' + +interface TabItem { + name: RouteRecordName + fullPath: string + path: string + title?: string + query?: LocationQuery + params?: RouteParamsRaw +} + +interface TabsSate { + cacheTabList: Set + tabList: TabItem[] + tasMap: Record + indexRouteName: RouteRecordName +} + +const getHasTabIndex = (path: string, tabList: TabItem[]) => { + return tabList.findIndex(item => item.path == path) +} + +const isCannotAddRoute = (route: RouteLocationNormalized, router: Router) => { + const { path, meta, name } = route + if (!path || isExternal(path)) return true + if (meta?.hideTab) return true + if (!router.hasRoute(name!)) return true + if (([PageEnum.LOGIN, PageEnum.ERROR_403] as string[]).includes(path)) { + return true + } + return false +} + +const findTabsIndex = (fullPath: string, tabList: TabItem[]) => { + return tabList.findIndex(item => item.fullPath === fullPath) +} + +const getComponentName = (route: RouteLocationNormalized) => { + return route.matched.at(-1)?.components?.default?.name +} + +export const getRouteParams = (tabItem: TabItem) => { + const { params, path, query } = tabItem + return { + params: params || {}, + path, + query: query || {} + } +} + +const useTabsStore = defineStore({ + id: 'tabs', + state: (): TabsSate => ({ + cacheTabList: new Set(), + tabList: [], + tasMap: {}, + indexRouteName: '' + }), + getters: { + getTabList(): TabItem[] { + return this.tabList + }, + getCacheTabList(): string[] { + return Array.from(this.cacheTabList) + } + }, + actions: { + setRouteName(name: RouteRecordName) { + this.indexRouteName = name + }, + addCache(componentName?: string) { + if (componentName) this.cacheTabList.add(componentName) + }, + removeCache(componentName?: string) { + if (componentName && this.cacheTabList.has(componentName)) { + this.cacheTabList.delete(componentName) + } + console.log(this.cacheTabList) + }, + clearCache() { + this.cacheTabList.clear() + }, + resetState() { + this.cacheTabList = new Set() + this.tabList = [] + this.tasMap = {} + this.indexRouteName = '' + }, + addTab(router: Router) { + const route = unref(router.currentRoute) + const { name, query, meta, params, fullPath, path } = route + if (isCannotAddRoute(route, router)) return + const hasTabIndex = getHasTabIndex(path!, this.tabList) + const componentName = getComponentName(route) + const tabItem = { + name: name!, + path, + fullPath, + title: meta?.title, + query, + params + } + this.tasMap[fullPath] = tabItem + if (meta?.keepAlive) { + this.addCache(componentName) + } + if (hasTabIndex != -1) { + this.tabList.splice(hasTabIndex, 1, tabItem) + return + } + + this.tabList.push(tabItem) + }, + removeTab(fullPath: string, router: Router) { + const { currentRoute, push } = router + const index = findTabsIndex(fullPath, this.tabList) + // 移除tab + if (this.tabList.length > 1) { + index !== -1 && this.tabList.splice(index, 1) + } + const componentName = getComponentName(currentRoute.value) + this.removeCache(componentName) + if (fullPath !== currentRoute.value.fullPath) { + return + } + // 删除选中的tab + let toTab: TabItem | null = null + + if (index === 0) { + toTab = this.tabList[index] + } else { + toTab = this.tabList[index - 1] + } + + const toRoute = getRouteParams(toTab) + push(toRoute) + }, + removeOtherTab(route: RouteLocationNormalized) { + this.tabList = this.tabList.filter(item => item.fullPath == route.fullPath) + const componentName = getComponentName(route) + this.cacheTabList.forEach(name => { + if (componentName !== name) { + this.removeCache(name) + } + }) + }, + removeAllTab(router: Router) { + const { push, currentRoute } = router + const { name } = unref(currentRoute) + if (name == this.indexRouteName) { + this.removeOtherTab(currentRoute.value) + return + } + this.tabList = [] + this.clearCache() + push(PageEnum.INDEX) + } + } +}) + +export default useTabsStore diff --git a/src/stores/modules/setting.ts b/src/stores/modules/setting.ts new file mode 100644 index 0000000..219a58b --- /dev/null +++ b/src/stores/modules/setting.ts @@ -0,0 +1,55 @@ +import { defineStore } from 'pinia' +import defaultSetting from '@/config/setting' +import cache from '@/utils/cache' +import { isObject } from '@vue/shared' +import { setTheme } from '@/utils/theme' +import { SETTING_KEY } from '@/enums/cacheEnums' +const storageSetting = cache.get(SETTING_KEY) + +export const useSettingStore = defineStore({ + id: 'setting', + state: () => { + const state = { + showDrawer: false, + ...defaultSetting + } + isObject(storageSetting) && Object.assign(state, storageSetting) + return state + }, + actions: { + // 设置布局设置 + setSetting(data: Record) { + const { key, value } = data + if (this.hasOwnProperty(key)) { + //@ts-ignore + this[key] = value + } + const settings: any = Object.assign({}, this.$state) + delete settings.showDrawer + cache.set(SETTING_KEY, settings) + }, + // 设置主题色 + setTheme(isDark: boolean) { + setTheme( + { + primary: this.theme, + success: this.successTheme, + warning: this.warningTheme, + danger: this.dangerTheme, + error: this.errorTheme, + info: this.infoTheme + }, + isDark + ) + }, + resetTheme() { + for (const key in defaultSetting) { + //@ts-ignore + this[key] = defaultSetting[key] + } + cache.remove(SETTING_KEY) + } + } +}) + +export default useSettingStore diff --git a/src/stores/modules/user.ts b/src/stores/modules/user.ts new file mode 100644 index 0000000..d5248d6 --- /dev/null +++ b/src/stores/modules/user.ts @@ -0,0 +1,96 @@ +import { defineStore } from 'pinia' +import cache from '@/utils/cache' +import type { RouteRecordRaw } from 'vue-router' +import { getUserInfo, login, logout, getMenu } from '@/api/user' +import router, { filterAsyncRoutes } from '@/router' +import { TOKEN_KEY } from '@/enums/cacheEnums' +import { PageEnum } from '@/enums/pageEnum' +import { clearAuthInfo, getToken } from '@/utils/auth' +export interface UserState { + token: string + userInfo: Record + routes: RouteRecordRaw[] + menu: any[] + perms: string[] +} + +const useUserStore = defineStore({ + id: 'user', + state: (): UserState => ({ + token: getToken() || '', + // 用户信息 + userInfo: {}, + // 路由 + routes: [], + menu: [], + // 权限 + perms: [] + }), + getters: {}, + actions: { + resetState() { + this.token = '' + this.userInfo = {} + this.perms = [] + }, + login(playload: any) { + const { account, password } = playload + return new Promise((resolve, reject) => { + login({ + username: account, + password: password + }) + .then((data) => { + this.token = data.token + cache.set(TOKEN_KEY, data.token) + resolve(data) + }) + .catch((error) => { + reject(error) + }) + }) + }, + logout() { + return new Promise((resolve, reject) => { + logout() + .then(async (data) => { + this.token = '' + await router.push(PageEnum.LOGIN) + clearAuthInfo() + resolve(data) + }) + .catch((error) => { + reject(error) + }) + }) + }, + getUserInfo() { + return new Promise((resolve, reject) => { + getUserInfo() + .then((data) => { + this.userInfo = data.user + this.perms = data.permissions + resolve(data) + }) + .catch((error) => { + reject(error) + }) + }) + }, + getMenu() { + return new Promise((resolve, reject) => { + getMenu() + .then((data) => { + this.menu = data + this.routes = filterAsyncRoutes(data) + resolve(data) + }) + .catch((error) => { + reject(error) + }) + }) + } + } +}) + +export default useUserStore diff --git a/src/styles/dark.css b/src/styles/dark.css new file mode 100644 index 0000000..ae969fd --- /dev/null +++ b/src/styles/dark.css @@ -0,0 +1,49 @@ +:root.dark { + color-scheme: dark; + --table-header-bg-color: var(--el-bg-color); + --el-bg-color-page: #0a0a0a; + --el-bg-color: #1d2124; + --el-bg-color-overlay: #1d1e1f; + --el-text-color-primary: #e5eaf3; + --el-text-color-regular: #cfd3dc; + --el-text-color-secondary: #a3a6ad; + --el-text-color-placeholder: #8d9095; + --el-text-color-disabled: #6c6e72; + --el-border-color-darker: #636466; + --el-border-color-dark: #58585b; + --el-border-color: #4c4d4f; + --el-border-color-light: #414243; + --el-border-color-lighter: #363637; + --el-border-color-extra-light: #2b2b2c; + --el-fill-color-darker: #424243; + --el-fill-color-dark: #39393a; + --el-fill-color: #303030; + --el-fill-color-light: #262727; + --el-fill-color-lighter: #1d1d1d; + --el-fill-color-extra-light: #191919; + --el-fill-color-blank: var(--el-bg-color); + --el-mask-color: rgba(0, 0, 0, 0.8); + --el-mask-color-extra-light: rgba(0, 0, 0, 0.3); + --el-box-shadow: 0px 12px 32px 4px rgba(0, 0, 0, 0.36), 0px 8px 20px rgba(0, 0, 0, 0.72); + --el-box-shadow-light: 0px 0px 12px rgba(0, 0, 0, 0.72); + --el-box-shadow-lighter: 0px 0px 6px rgba(0, 0, 0, 0.72); + --el-box-shadow-dark: 0px 16px 48px 16px rgba(0, 0, 0, 0.72), 0px 12px 32px #000000, + 0px 8px 16px -8px #000000 !important; + /* wangeditor主题 */ + --w-e-textarea-bg-color: var(--el-bg-color); + --w-e-textarea-color: var(--el-text-color-primary); + --w-e-textarea-border-color: var(--el-border-color); + --w-e-textarea-slight-border-color: var(--el-border-color-light); + --w-e-textarea-slight-color: var(--el-border-color); + --w-e-textarea-slight-bg-color: var(--el-bg-color-page); + /* --w-e-textarea-selected-border-color: #b4d5ff; + --w-e-textarea-handler-bg-color: #4290f7; */ + --w-e-toolbar-color: var(--el-text-color-primary); + --w-e-toolbar-bg-color: var(--el-bg-color); + --w-e-toolbar-active-color: var(--el-text-color-primary); + --w-e-toolbar-active-bg-color: var(--el-bg-color); + --w-e-toolbar-disabled-color: var(--el-text-color-disabled); + --w-e-toolbar-border-color: var(--el-border-color); + --w-e-modal-button-bg-color: var(--el-bg-color); + --w-e-modal-button-border-color: var(--el-border-color); +} diff --git a/src/styles/element.scss b/src/styles/element.scss new file mode 100644 index 0000000..07d8e5d --- /dev/null +++ b/src/styles/element.scss @@ -0,0 +1,145 @@ +:root { + // 弹窗居中 + .el-overlay-dialog { + display: flex; + justify-content: center; + align-items: center; + min-height: 100%; + position: static; + + .el-dialog { + --el-dialog-content-font-size: var(--el-font-size-base); + --el-dialog-margin-top: 50px; + max-width: calc(100vw - 30px); + flex: none; + display: flex; + flex-direction: column; + border-radius: 5px; + + &.body-padding .el-dialog__body { + padding: 0; + } + + .el-dialog__body { + flex: 1; + padding: 15px 20px; + } + .el-dialog__header { + font-size: var(--el-font-size-large); + } + } + } + + .el-drawer { + --el-drawer-padding-primary: 16px; + &__header { + margin-bottom: 0; + padding: 13px 16px; + border-bottom: 1px solid var(--el-border-color-lighter); + } + &__title { + @apply text-tx-primary; + } + } + + .el-table { + --el-table-header-text-color: var(--el-text-color-primary); + --el-table-header-bg-color: var(--table-header-bg-color); + font-size: var(--el-font-size-base); + + thead { + th { + font-weight: 400; + } + } + } + + .el-input-group__prepend { + background-color: var(--el-fill-color-blank); + } + + .el-checkbox { + --el-checkbox-font-size: var(--el-font-size-base); + } + + .el-menu--popup-container { + &.theme-light { + .el-menu { + .el-menu-item { + &.is-active { + @apply bg-primary-light-9 border-primary border-r-2; + } + } + .el-menu-item:hover, + .el-sub-menu__title:hover { + color: var(--el-color-primary); + } + } + } + &.theme-dark { + .el-menu { + .el-menu-item { + &.is-active { + @apply bg-primary; + } + } + } + } + } + + .el-message-box { + --el-messagebox-width: 350px; + } + .el-date-editor { + --el-date-editor-width: 280px; + .el-range-input { + font-size: var(--el-font-size-small); + } + } + + .el-button--primary { + --el-button-hover-link-text-color: var(--el-color-primary-light-3); + } + .el-button--success { + --el-button-hover-link-text-color: var(--el-color-success-light-3); + } + .el-button--info { + --el-button-hover-link-text-color: var(--el-color-info-light-3); + } + .el-button--warning { + --el-button-hover-link-text-color: var(--el-color-warning-light-3); + } + .el-button--danger { + --el-button-hover-link-text-color: var(--el-color-danger-light-3); + } + .el-image__error { + font-size: 12px; + } + .el-tabs__nav-wrap::after { + height: 1px; + } +} +@media (max-width: 768px) { + .el-pagination > .el-pagination__jump { + display: none !important; + } + .el-pagination > .el-pagination__sizes { + display: none !important; + } +} + +.el-button { + // 防止被tailwindcss默认样式覆盖 + background-color: var(--el-button-bg-color, var(--el-color-white)); + + //覆盖el-button的点击样式 + &:focus { + border-color: var(--el-button-border-color); + background-color: var(--el-button-bg-color); + } + &:hover { + color: var(--el-button-hover-text-color); + border-color: var(--el-button-hover-border-color); + background-color: var(--el-button-hover-bg-color); + } +} diff --git a/src/styles/index.scss b/src/styles/index.scss new file mode 100644 index 0000000..7bd1726 --- /dev/null +++ b/src/styles/index.scss @@ -0,0 +1,6 @@ + +@import 'element.scss'; +@import 'dark.css'; +@import 'var.css'; +@import 'tailwind.css'; +@import 'public.scss'; diff --git a/src/styles/public.scss b/src/styles/public.scss new file mode 100644 index 0000000..f6234a3 --- /dev/null +++ b/src/styles/public.scss @@ -0,0 +1,76 @@ +body { + @apply text-base text-tx-primary overflow-hidden min-w-[375px]; +} +.form-tips { + @apply text-tx-secondary text-xs leading-6 mt-1; +} + +.clearfix:after { + content: ''; + display: block; + clear: both; + visibility: hidden; +} + +/* NProgress */ +#nprogress .bar { + @apply bg-primary #{!important}; +} +$directions: ( + 't': 'top', + 'r': 'right', + 'b': 'bottom', + 'l': 'left' +); +$colors: ( + 'light2': var(--el-border-color-light2) +); +$borderStyle: ( + 'dotted': dotted, + 'dashed': dashed, + 'solid': solid +); +@each $name, $direction in $directions { + @each $color-name, $color-value in $colors { + @each $border-style-name, $border-style-value in $borderStyle { + .border-#{$name}-#{$border-style-name}-#{$color-name} { + border-#{$direction}: 1px $border-style-value $color-value; + } + } + } +} +$flexDirection: ( + 'row': row, + 'row-reverse': row-reverse, + 'column': column, + 'column-reverse': column-reverse +); + +$justifyContent: ( + 'start': flex-start, + 'end': flex-end, + 'center': center, + 'between': space-between, + 'around': space-around, + 'evenly': space-evenly +); +$alignItems: ( + 'start': flex-start, + 'end': flex-end, + 'center': center, + 'baseline': baseline, + 'stretch': stretch +); + +@each $flex-direction-name, $flex-direction-value in $flexDirection { + @each $justify-content-name, $justify-content-value in $justifyContent { + @each $align-items-name, $align-items-value in $alignItems { + .flex-#{$flex-direction-name}-#{$justify-content-name}-#{$align-items-name} { + display: flex; + flex-direction: $flex-direction-value; + justify-content: $justify-content-value; + align-items: $align-items-value; + } + } + } +} diff --git a/src/styles/tailwind.css b/src/styles/tailwind.css new file mode 100644 index 0000000..bd6213e --- /dev/null +++ b/src/styles/tailwind.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; \ No newline at end of file diff --git a/src/styles/var.css b/src/styles/var.css new file mode 100644 index 0000000..c52a8e5 --- /dev/null +++ b/src/styles/var.css @@ -0,0 +1,51 @@ +:root { + --el-font-family: theme(fontFamily.sans); + --el-font-weight-primary: 400; + --el-menu-item-height: 46px; + --el-menu-sub-item-height: var(--el-menu-item-height); + --el-menu-icon-width: 18px; + --aside-width: 200px; + --navbar-height: 50px; + --color-white: #ffffff; + --color-red: #d9001b; + --table-header-bg-color: #f8f8f8; + --el-font-size-extra-large: 18px; + --el-menu-base-level-padding: 16px; + --el-menu-level-padding: 26px; + --el-font-size-large: 16px; + --el-font-size-medium: 15px; + --el-font-size-base: 14px; + --el-font-size-small: 13px; + --el-font-size-extra-small: 12px; + + --el-bg-color: var(--color-white); + --el-bg-color-page: #f6f6f6; + --el-bg-color-overlay: #ffffff; + --el-bg-color-light: #f0f3f6; + --el-color-primary-light-10: #f2f7ff; + --el-text-color-primary: #333333; + --el-text-color-regular: #666666; + --el-text-color-secondary: #999999; + --el-text-color-placeholder: #a8abb2; + --el-text-color-disabled: #c0c4cc; + --el-border-color: #dcdfe6; + --el-border-color-light: #e4e7ed; + --el-border-color-lighter: #ebeef5; + --el-border-color-extra-light: #f2f2f2; + --el-border-color-dark: #d4d7de; + --el-border-color-darker: #cdd0d6; + --el-border-color-light2: #f4f4f4; + --el-fill-color: #f0f2f5; + --el-fill-color-light: #f8f8f8; + --el-fill-color-lighter: #fafafa; + --el-fill-color-extra-light: #fafcff; + --el-fill-color-dark: #ebedf0; + --el-fill-color-darker: #e6e8eb; + --el-fill-color-blank: #ffffff; + --el-mask-color: rgba(255, 255, 255, 0.9); + --el-mask-color-extra-light: rgba(255, 255, 255, 0.3); + -el-box-shadow: 0px 12px 32px 4px rgba(0, 0, 0, 0.04), 0px 8px 20px rgba(0, 0, 0, 0.08); + --el-box-shadow-light: 0px 0px 12px rgba(0, 0, 0, 0.12); + --el-box-shadow-lighter: 0px 0px 6px rgba(0, 0, 0, 0.12); + --el-box-shadow-dark: 0px 16px 48px 16px rgba(0, 0, 0, 0.08), 0px 12px 32px rgba(0, 0, 0, 0.12), 0px 8px 16px -8px rgba(0, 0, 0, 0.16); +} diff --git a/src/utils/area.ts b/src/utils/area.ts new file mode 100644 index 0000000..7748dcd --- /dev/null +++ b/src/utils/area.ts @@ -0,0 +1 @@ +export default [{ "value": 110000, "pid": 100000, "label": "北京", "children": [{ "value": 110100, "pid": 110000, "label": "北京市", "children": [{ "value": 110101, "pid": 110100, "label": "东城区", }, { "value": 110102, "pid": 110100, "label": "西城区", }, { "value": 110105, "pid": 110100, "label": "朝阳区", }, { "value": 110106, "pid": 110100, "label": "丰台区", }, { "value": 110107, "pid": 110100, "label": "石景山区", }, { "value": 110108, "pid": 110100, "label": "海淀区", }, { "value": 110109, "pid": 110100, "label": "门头沟区", }, { "value": 110111, "pid": 110100, "label": "房山区", }, { "value": 110112, "pid": 110100, "label": "通州区", }, { "value": 110113, "pid": 110100, "label": "顺义区", }, { "value": 110114, "pid": 110100, "label": "昌平区", }, { "value": 110115, "pid": 110100, "label": "大兴区", }, { "value": 110116, "pid": 110100, "label": "怀柔区", }, { "value": 110117, "pid": 110100, "label": "平谷区", }, { "value": 110118, "pid": 110100, "label": "密云区", }, { "value": 110119, "pid": 110100, "label": "延庆区", }, { "value": 110120, "pid": 110100, "label": "中关村科技园区", }] }] }, { "value": 120000, "pid": 100000, "label": "天津", "children": [{ "value": 120100, "pid": 120000, "label": "天津市", "children": [{ "value": 120101, "pid": 120100, "label": "和平区", }, { "value": 120102, "pid": 120100, "label": "河东区", }, { "value": 120103, "pid": 120100, "label": "河西区", }, { "value": 120104, "pid": 120100, "label": "南开区", }, { "value": 120105, "pid": 120100, "label": "河北区", }, { "value": 120106, "pid": 120100, "label": "红桥区", }, { "value": 120110, "pid": 120100, "label": "东丽区", }, { "value": 120111, "pid": 120100, "label": "西青区", }, { "value": 120112, "pid": 120100, "label": "津南区", }, { "value": 120113, "pid": 120100, "label": "北辰区", }, { "value": 120114, "pid": 120100, "label": "武清区", }, { "value": 120115, "pid": 120100, "label": "宝坻区", }, { "value": 120116, "pid": 120100, "label": "滨海新区", }, { "value": 120117, "pid": 120100, "label": "宁河区", }, { "value": 120118, "pid": 120100, "label": "静海区", }, { "value": 120119, "pid": 120100, "label": "蓟州区", }, { "value": 120120, "pid": 120100, "label": "滨海高新区", }] }] }, { "value": 130000, "pid": 100000, "label": "河北省", "children": [{ "value": 130100, "pid": 130000, "label": "石家庄市", "children": [{ "value": 130102, "pid": 130100, "label": "长安区", }, { "value": 130104, "pid": 130100, "label": "桥西区", }, { "value": 130105, "pid": 130100, "label": "新华区", }, { "value": 130107, "pid": 130100, "label": "井陉矿区", }, { "value": 130108, "pid": 130100, "label": "裕华区", }, { "value": 130109, "pid": 130100, "label": "藁城区", }, { "value": 130110, "pid": 130100, "label": "鹿泉区", }, { "value": 130111, "pid": 130100, "label": "栾城区", }, { "value": 130121, "pid": 130100, "label": "井陉县", }, { "value": 130123, "pid": 130100, "label": "正定县", }, { "value": 130125, "pid": 130100, "label": "行唐县", }, { "value": 130126, "pid": 130100, "label": "灵寿县", }, { "value": 130127, "pid": 130100, "label": "高邑县", }, { "value": 130128, "pid": 130100, "label": "深泽县", }, { "value": 130129, "pid": 130100, "label": "赞皇县", }, { "value": 130130, "pid": 130100, "label": "无极县", }, { "value": 130131, "pid": 130100, "label": "平山县", }, { "value": 130132, "pid": 130100, "label": "元氏县", }, { "value": 130133, "pid": 130100, "label": "赵县", }, { "value": 130181, "pid": 130100, "label": "辛集市", }, { "value": 130183, "pid": 130100, "label": "晋州市", }, { "value": 130184, "pid": 130100, "label": "新乐市", }, { "value": 130185, "pid": 130100, "label": "高新区", }, { "value": 130186, "pid": 130100, "label": "经济开发区", }, { "value": 130187, "pid": 130100, "label": "循环化工园区", }] }, { "value": 130200, "pid": 130000, "label": "唐山市", "children": [{ "value": 130202, "pid": 130200, "label": "路南区", }, { "value": 130203, "pid": 130200, "label": "路北区", }, { "value": 130204, "pid": 130200, "label": "古冶区", }, { "value": 130205, "pid": 130200, "label": "开平区", }, { "value": 130207, "pid": 130200, "label": "丰南区", }, { "value": 130208, "pid": 130200, "label": "丰润区", }, { "value": 130209, "pid": 130200, "label": "曹妃甸区", }, { "value": 130224, "pid": 130200, "label": "滦南县", }, { "value": 130225, "pid": 130200, "label": "乐亭县", }, { "value": 130227, "pid": 130200, "label": "迁西县", }, { "value": 130229, "pid": 130200, "label": "玉田县", }, { "value": 130281, "pid": 130200, "label": "遵化市", }, { "value": 130283, "pid": 130200, "label": "迁安市", }, { "value": 130284, "pid": 130200, "label": "滦州市", }, { "value": 130291, "pid": 130200, "label": "高新区", }, { "value": 130292, "pid": 130200, "label": "芦台开发区", }, { "value": 130293, "pid": 130200, "label": "海港经济开发区", }, { "value": 130294, "pid": 130200, "label": "汉沽管理区", }] }, { "value": 130300, "pid": 130000, "label": "秦皇岛市", "children": [{ "value": 130302, "pid": 130300, "label": "海港区", }, { "value": 130303, "pid": 130300, "label": "山海关区", }, { "value": 130304, "pid": 130300, "label": "北戴河区", }, { "value": 130306, "pid": 130300, "label": "抚宁区", }, { "value": 130321, "pid": 130300, "label": "青龙满族自治县", }, { "value": 130322, "pid": 130300, "label": "昌黎县", }, { "value": 130324, "pid": 130300, "label": "卢龙县", }, { "value": 130371, "pid": 130300, "label": "经济技术开发区", }, { "value": 130372, "pid": 130300, "label": "北戴河新区", }] }, { "value": 130400, "pid": 130000, "label": "邯郸市", "children": [{ "value": 130402, "pid": 130400, "label": "邯山区", }, { "value": 130403, "pid": 130400, "label": "丛台区", }, { "value": 130404, "pid": 130400, "label": "复兴区", }, { "value": 130406, "pid": 130400, "label": "峰峰矿区", }, { "value": 130407, "pid": 130400, "label": "肥乡区", }, { "value": 130408, "pid": 130400, "label": "永年区", }, { "value": 130423, "pid": 130400, "label": "临漳县", }, { "value": 130424, "pid": 130400, "label": "成安县", }, { "value": 130425, "pid": 130400, "label": "大名县", }, { "value": 130426, "pid": 130400, "label": "涉县", }, { "value": 130427, "pid": 130400, "label": "磁县", }, { "value": 130430, "pid": 130400, "label": "邱县", }, { "value": 130431, "pid": 130400, "label": "鸡泽县", }, { "value": 130432, "pid": 130400, "label": "广平县", }, { "value": 130433, "pid": 130400, "label": "馆陶县", }, { "value": 130434, "pid": 130400, "label": "魏县", }, { "value": 130435, "pid": 130400, "label": "曲周县", }, { "value": 130481, "pid": 130400, "label": "武安市", }, { "value": 130482, "pid": 130400, "label": "冀南新区", }, { "value": 130483, "pid": 130400, "label": "高新技术产业开发区", }] }, { "value": 130500, "pid": 130000, "label": "邢台市", "children": [{ "value": 130502, "pid": 130500, "label": "桥东区", }, { "value": 130503, "pid": 130500, "label": "桥西区", }, { "value": 130521, "pid": 130500, "label": "邢台县", }, { "value": 130522, "pid": 130500, "label": "临城县", }, { "value": 130523, "pid": 130500, "label": "内丘县", }, { "value": 130524, "pid": 130500, "label": "柏乡县", }, { "value": 130525, "pid": 130500, "label": "隆尧县", }, { "value": 130526, "pid": 130500, "label": "任县", }, { "value": 130527, "pid": 130500, "label": "南和县", }, { "value": 130528, "pid": 130500, "label": "宁晋县", }, { "value": 130529, "pid": 130500, "label": "巨鹿县", }, { "value": 130530, "pid": 130500, "label": "新河县", }, { "value": 130531, "pid": 130500, "label": "广宗县", }, { "value": 130532, "pid": 130500, "label": "平乡县", }, { "value": 130533, "pid": 130500, "label": "威县", }, { "value": 130534, "pid": 130500, "label": "清河县", }, { "value": 130535, "pid": 130500, "label": "临西县", }, { "value": 130581, "pid": 130500, "label": "南宫市", }, { "value": 130582, "pid": 130500, "label": "沙河市", }, { "value": 130583, "pid": 130500, "label": "经济开发区", }] }, { "value": 130600, "pid": 130000, "label": "保定市", "children": [{ "value": 130602, "pid": 130600, "label": "竞秀区", }, { "value": 130606, "pid": 130600, "label": "莲池区", }, { "value": 130607, "pid": 130600, "label": "满城区", }, { "value": 130608, "pid": 130600, "label": "清苑区", }, { "value": 130609, "pid": 130600, "label": "徐水区", }, { "value": 130623, "pid": 130600, "label": "涞水县", }, { "value": 130624, "pid": 130600, "label": "阜平县", }, { "value": 130626, "pid": 130600, "label": "定兴县", }, { "value": 130627, "pid": 130600, "label": "唐县", }, { "value": 130628, "pid": 130600, "label": "高阳县", }, { "value": 130629, "pid": 130600, "label": "容城县", }, { "value": 130630, "pid": 130600, "label": "涞源县", }, { "value": 130631, "pid": 130600, "label": "望都县", }, { "value": 130632, "pid": 130600, "label": "安新县", }, { "value": 130633, "pid": 130600, "label": "易县", }, { "value": 130634, "pid": 130600, "label": "曲阳县", }, { "value": 130635, "pid": 130600, "label": "蠡县", }, { "value": 130636, "pid": 130600, "label": "顺平县", }, { "value": 130637, "pid": 130600, "label": "博野县", }, { "value": 130638, "pid": 130600, "label": "雄县", }, { "value": 130681, "pid": 130600, "label": "涿州市", }, { "value": 130682, "pid": 130600, "label": "定州市", }, { "value": 130683, "pid": 130600, "label": "安国市", }, { "value": 130684, "pid": 130600, "label": "高碑店市", }, { "value": 130685, "pid": 130600, "label": "雄安新区", }, { "value": 130686, "pid": 130600, "label": "高新区", }, { "value": 130687, "pid": 130600, "label": "白沟新城", }] }, { "value": 130700, "pid": 130000, "label": "张家口市", "children": [{ "value": 130702, "pid": 130700, "label": "桥东区", }, { "value": 130703, "pid": 130700, "label": "桥西区", }, { "value": 130705, "pid": 130700, "label": "宣化区", }, { "value": 130706, "pid": 130700, "label": "下花园区", }, { "value": 130708, "pid": 130700, "label": "万全区", }, { "value": 130709, "pid": 130700, "label": "崇礼区", }, { "value": 130722, "pid": 130700, "label": "张北县", }, { "value": 130723, "pid": 130700, "label": "康保县", }, { "value": 130724, "pid": 130700, "label": "沽源县", }, { "value": 130725, "pid": 130700, "label": "尚义县", }, { "value": 130726, "pid": 130700, "label": "蔚县", }, { "value": 130727, "pid": 130700, "label": "阳原县", }, { "value": 130728, "pid": 130700, "label": "怀安县", }, { "value": 130730, "pid": 130700, "label": "怀来县", }, { "value": 130731, "pid": 130700, "label": "涿鹿县", }, { "value": 130732, "pid": 130700, "label": "赤城县", }, { "value": 130771, "pid": 130700, "label": "高新区", }, { "value": 130772, "pid": 130700, "label": "察北管理区", }, { "value": 130773, "pid": 130700, "label": "塞北管理区", }] }, { "value": 130800, "pid": 130000, "label": "承德市", "children": [{ "value": 130802, "pid": 130800, "label": "双桥区", }, { "value": 130803, "pid": 130800, "label": "双滦区", }, { "value": 130804, "pid": 130800, "label": "鹰手营子矿区", }, { "value": 130821, "pid": 130800, "label": "承德县", }, { "value": 130822, "pid": 130800, "label": "兴隆县", }, { "value": 130824, "pid": 130800, "label": "滦平县", }, { "value": 130825, "pid": 130800, "label": "隆化县", }, { "value": 130826, "pid": 130800, "label": "丰宁满族自治县", }, { "value": 130827, "pid": 130800, "label": "宽城满族自治县", }, { "value": 130828, "pid": 130800, "label": "围场满族蒙古族自治县", }, { "value": 130881, "pid": 130800, "label": "平泉市", }, { "value": 130882, "pid": 130800, "label": "高新区", }] }, { "value": 130900, "pid": 130000, "label": "沧州市", "children": [{ "value": 130902, "pid": 130900, "label": "新华区", }, { "value": 130903, "pid": 130900, "label": "运河区", }, { "value": 130921, "pid": 130900, "label": "沧县", }, { "value": 130922, "pid": 130900, "label": "青县", }, { "value": 130923, "pid": 130900, "label": "东光县", }, { "value": 130924, "pid": 130900, "label": "海兴县", }, { "value": 130925, "pid": 130900, "label": "盐山县", }, { "value": 130926, "pid": 130900, "label": "肃宁县", }, { "value": 130927, "pid": 130900, "label": "南皮县", }, { "value": 130928, "pid": 130900, "label": "吴桥县", }, { "value": 130929, "pid": 130900, "label": "献县", }, { "value": 130930, "pid": 130900, "label": "孟村回族自治县", }, { "value": 130981, "pid": 130900, "label": "泊头市", }, { "value": 130982, "pid": 130900, "label": "任丘市", }, { "value": 130983, "pid": 130900, "label": "黄骅市", }, { "value": 130984, "pid": 130900, "label": "河间市", }, { "value": 130985, "pid": 130900, "label": "渤海新区", }, { "value": 130986, "pid": 130900, "label": "高新区", }, { "value": 130987, "pid": 130900, "label": "临港开发区", }] }, { "value": 131000, "pid": 130000, "label": "廊坊市", "children": [{ "value": 131002, "pid": 131000, "label": "安次区", }, { "value": 131003, "pid": 131000, "label": "广阳区", }, { "value": 131022, "pid": 131000, "label": "固安县", }, { "value": 131023, "pid": 131000, "label": "永清县", }, { "value": 131024, "pid": 131000, "label": "香河县", }, { "value": 131025, "pid": 131000, "label": "大城县", }, { "value": 131026, "pid": 131000, "label": "文安县", }, { "value": 131028, "pid": 131000, "label": "大厂回族自治县", }, { "value": 131081, "pid": 131000, "label": "霸州市", }, { "value": 131082, "pid": 131000, "label": "三河市", }, { "value": 131083, "pid": 131000, "label": "经济技术开发区", }] }, { "value": 131100, "pid": 130000, "label": "衡水市", "children": [{ "value": 131102, "pid": 131100, "label": "桃城区", }, { "value": 131103, "pid": 131100, "label": "冀州区", }, { "value": 131121, "pid": 131100, "label": "枣强县", }, { "value": 131122, "pid": 131100, "label": "武邑县", }, { "value": 131123, "pid": 131100, "label": "武强县", }, { "value": 131124, "pid": 131100, "label": "饶阳县", }, { "value": 131125, "pid": 131100, "label": "安平县", }, { "value": 131126, "pid": 131100, "label": "故城县", }, { "value": 131127, "pid": 131100, "label": "景县", }, { "value": 131128, "pid": 131100, "label": "阜城县", }, { "value": 131182, "pid": 131100, "label": "深州市", }, { "value": 131183, "pid": 131100, "label": "经济开发区", }, { "value": 131184, "pid": 131100, "label": "滨湖新区", }] }] }, { "value": 140000, "pid": 100000, "label": "山西省", "children": [{ "value": 140100, "pid": 140000, "label": "太原市", "children": [{ "value": 140105, "pid": 140100, "label": "小店区", }, { "value": 140106, "pid": 140100, "label": "迎泽区", }, { "value": 140107, "pid": 140100, "label": "杏花岭区", }, { "value": 140108, "pid": 140100, "label": "尖草坪区", }, { "value": 140109, "pid": 140100, "label": "万柏林区", }, { "value": 140110, "pid": 140100, "label": "晋源区", }, { "value": 140121, "pid": 140100, "label": "清徐县", }, { "value": 140122, "pid": 140100, "label": "阳曲县", }, { "value": 140123, "pid": 140100, "label": "娄烦县", }, { "value": 140181, "pid": 140100, "label": "古交市", }, { "value": 140182, "pid": 140100, "label": "高新阳曲园区", }, { "value": 140183, "pid": 140100, "label": "高新汾东园区", }, { "value": 140184, "pid": 140100, "label": "高新姚村园区", }] }, { "value": 140200, "pid": 140000, "label": "大同市", "children": [{ "value": 140212, "pid": 140200, "label": "新荣区", }, { "value": 140213, "pid": 140200, "label": "平城区", }, { "value": 140214, "pid": 140200, "label": "云冈区", }, { "value": 140215, "pid": 140200, "label": "云州区", }, { "value": 140221, "pid": 140200, "label": "阳高县", }, { "value": 140222, "pid": 140200, "label": "天镇县", }, { "value": 140223, "pid": 140200, "label": "广灵县", }, { "value": 140224, "pid": 140200, "label": "灵丘县", }, { "value": 140225, "pid": 140200, "label": "浑源县", }, { "value": 140226, "pid": 140200, "label": "左云县", }, { "value": 140228, "pid": 140200, "label": "经济开发区", }] }, { "value": 140300, "pid": 140000, "label": "阳泉市", "children": [{ "value": 140302, "pid": 140300, "label": "城区", }, { "value": 140303, "pid": 140300, "label": "矿区", }, { "value": 140311, "pid": 140300, "label": "郊区", }, { "value": 140321, "pid": 140300, "label": "平定县", }, { "value": 140322, "pid": 140300, "label": "盂县", }] }, { "value": 140400, "pid": 140000, "label": "长治市", "children": [{ "value": 140403, "pid": 140400, "label": "潞州区", }, { "value": 140404, "pid": 140400, "label": "上党区", }, { "value": 140405, "pid": 140400, "label": "屯留区", }, { "value": 140406, "pid": 140400, "label": "潞城区", }, { "value": 140423, "pid": 140400, "label": "襄垣县", }, { "value": 140425, "pid": 140400, "label": "平顺县", }, { "value": 140426, "pid": 140400, "label": "黎城县", }, { "value": 140427, "pid": 140400, "label": "壶关县", }, { "value": 140428, "pid": 140400, "label": "长子县", }, { "value": 140429, "pid": 140400, "label": "武乡县", }, { "value": 140430, "pid": 140400, "label": "沁县", }, { "value": 140431, "pid": 140400, "label": "沁源县", }] }, { "value": 140500, "pid": 140000, "label": "晋城市", "children": [{ "value": 140502, "pid": 140500, "label": "城区", }, { "value": 140521, "pid": 140500, "label": "沁水县", }, { "value": 140522, "pid": 140500, "label": "阳城县", }, { "value": 140524, "pid": 140500, "label": "陵川县", }, { "value": 140525, "pid": 140500, "label": "泽州县", }, { "value": 140581, "pid": 140500, "label": "高平市", }, { "value": 140582, "pid": 140500, "label": "经济开发区", }] }, { "value": 140600, "pid": 140000, "label": "朔州市", "children": [{ "value": 140602, "pid": 140600, "label": "朔城区", }, { "value": 140603, "pid": 140600, "label": "平鲁区", }, { "value": 140621, "pid": 140600, "label": "山阴县", }, { "value": 140622, "pid": 140600, "label": "应县", }, { "value": 140623, "pid": 140600, "label": "右玉县", }, { "value": 140681, "pid": 140600, "label": "怀仁市", }] }, { "value": 140700, "pid": 140000, "label": "晋中市", "children": [{ "value": 140702, "pid": 140700, "label": "榆次区", }, { "value": 140721, "pid": 140700, "label": "榆社县", }, { "value": 140722, "pid": 140700, "label": "左权县", }, { "value": 140723, "pid": 140700, "label": "和顺县", }, { "value": 140724, "pid": 140700, "label": "昔阳县", }, { "value": 140725, "pid": 140700, "label": "寿阳县", }, { "value": 140726, "pid": 140700, "label": "太谷县", }, { "value": 140727, "pid": 140700, "label": "祁县", }, { "value": 140728, "pid": 140700, "label": "平遥县", }, { "value": 140729, "pid": 140700, "label": "灵石县", }, { "value": 140781, "pid": 140700, "label": "介休市", }] }, { "value": 140800, "pid": 140000, "label": "运城市", "children": [{ "value": 140802, "pid": 140800, "label": "盐湖区", }, { "value": 140821, "pid": 140800, "label": "临猗县", }, { "value": 140822, "pid": 140800, "label": "万荣县", }, { "value": 140823, "pid": 140800, "label": "闻喜县", }, { "value": 140824, "pid": 140800, "label": "稷山县", }, { "value": 140825, "pid": 140800, "label": "新绛县", }, { "value": 140826, "pid": 140800, "label": "绛县", }, { "value": 140827, "pid": 140800, "label": "垣曲县", }, { "value": 140828, "pid": 140800, "label": "夏县", }, { "value": 140829, "pid": 140800, "label": "平陆县", }, { "value": 140830, "pid": 140800, "label": "芮城县", }, { "value": 140881, "pid": 140800, "label": "永济市", }, { "value": 140882, "pid": 140800, "label": "河津市", }] }, { "value": 140900, "pid": 140000, "label": "忻州市", "children": [{ "value": 140902, "pid": 140900, "label": "忻府区", }, { "value": 140921, "pid": 140900, "label": "定襄县", }, { "value": 140922, "pid": 140900, "label": "五台县", }, { "value": 140923, "pid": 140900, "label": "代县", }, { "value": 140924, "pid": 140900, "label": "繁峙县", }, { "value": 140925, "pid": 140900, "label": "宁武县", }, { "value": 140926, "pid": 140900, "label": "静乐县", }, { "value": 140927, "pid": 140900, "label": "神池县", }, { "value": 140928, "pid": 140900, "label": "五寨县", }, { "value": 140929, "pid": 140900, "label": "岢岚县", }, { "value": 140930, "pid": 140900, "label": "河曲县", }, { "value": 140931, "pid": 140900, "label": "保德县", }, { "value": 140932, "pid": 140900, "label": "偏关县", }, { "value": 140981, "pid": 140900, "label": "原平市", }] }, { "value": 141000, "pid": 140000, "label": "临汾市", "children": [{ "value": 141002, "pid": 141000, "label": "尧都区", }, { "value": 141021, "pid": 141000, "label": "曲沃县", }, { "value": 141022, "pid": 141000, "label": "翼城县", }, { "value": 141023, "pid": 141000, "label": "襄汾县", }, { "value": 141024, "pid": 141000, "label": "洪洞县", }, { "value": 141025, "pid": 141000, "label": "古县", }, { "value": 141026, "pid": 141000, "label": "安泽县", }, { "value": 141027, "pid": 141000, "label": "浮山县", }, { "value": 141028, "pid": 141000, "label": "吉县", }, { "value": 141029, "pid": 141000, "label": "乡宁县", }, { "value": 141030, "pid": 141000, "label": "大宁县", }, { "value": 141031, "pid": 141000, "label": "隰县", }, { "value": 141032, "pid": 141000, "label": "永和县", }, { "value": 141033, "pid": 141000, "label": "蒲县", }, { "value": 141034, "pid": 141000, "label": "汾西县", }, { "value": 141081, "pid": 141000, "label": "侯马市", }, { "value": 141082, "pid": 141000, "label": "霍州市", }] }, { "value": 141100, "pid": 140000, "label": "吕梁市", "children": [{ "value": 141102, "pid": 141100, "label": "离石区", }, { "value": 141121, "pid": 141100, "label": "文水县", }, { "value": 141122, "pid": 141100, "label": "交城县", }, { "value": 141123, "pid": 141100, "label": "兴县", }, { "value": 141124, "pid": 141100, "label": "临县", }, { "value": 141125, "pid": 141100, "label": "柳林县", }, { "value": 141126, "pid": 141100, "label": "石楼县", }, { "value": 141127, "pid": 141100, "label": "岚县", }, { "value": 141128, "pid": 141100, "label": "方山县", }, { "value": 141129, "pid": 141100, "label": "中阳县", }, { "value": 141130, "pid": 141100, "label": "交口县", }, { "value": 141181, "pid": 141100, "label": "孝义市", }, { "value": 141182, "pid": 141100, "label": "汾阳市", }] }] }, { "value": 150000, "pid": 100000, "label": "内蒙古自治区", "children": [{ "value": 150100, "pid": 150000, "label": "呼和浩特市", "children": [{ "value": 150102, "pid": 150100, "label": "新城区", }, { "value": 150103, "pid": 150100, "label": "回民区", }, { "value": 150104, "pid": 150100, "label": "玉泉区", }, { "value": 150105, "pid": 150100, "label": "赛罕区", }, { "value": 150121, "pid": 150100, "label": "土默特左旗", }, { "value": 150122, "pid": 150100, "label": "托克托县", }, { "value": 150123, "pid": 150100, "label": "和林格尔县", }, { "value": 150124, "pid": 150100, "label": "清水河县", }, { "value": 150125, "pid": 150100, "label": "武川县", }, { "value": 150171, "pid": 150100, "label": "金海工业园区", }, { "value": 150172, "pid": 150100, "label": "经济技术开发区", }] }, { "value": 150200, "pid": 150000, "label": "包头市", "children": [{ "value": 150202, "pid": 150200, "label": "东河区", }, { "value": 150203, "pid": 150200, "label": "昆都仑区", }, { "value": 150204, "pid": 150200, "label": "青山区", }, { "value": 150205, "pid": 150200, "label": "石拐区", }, { "value": 150206, "pid": 150200, "label": "白云鄂博矿区", }, { "value": 150207, "pid": 150200, "label": "九原区", }, { "value": 150221, "pid": 150200, "label": "土默特右旗", }, { "value": 150222, "pid": 150200, "label": "固阳县", }, { "value": 150223, "pid": 150200, "label": "达尔罕茂明安联合旗", }] }, { "value": 150300, "pid": 150000, "label": "乌海市", "children": [{ "value": 150302, "pid": 150300, "label": "海勃湾区", }, { "value": 150303, "pid": 150300, "label": "海南区", }, { "value": 150304, "pid": 150300, "label": "乌达区", }] }, { "value": 150400, "pid": 150000, "label": "赤峰市", "children": [{ "value": 150402, "pid": 150400, "label": "红山区", }, { "value": 150403, "pid": 150400, "label": "元宝山区", }, { "value": 150404, "pid": 150400, "label": "松山区", }, { "value": 150421, "pid": 150400, "label": "阿鲁科尔沁旗", }, { "value": 150422, "pid": 150400, "label": "巴林左旗", }, { "value": 150423, "pid": 150400, "label": "巴林右旗", }, { "value": 150424, "pid": 150400, "label": "林西县", }, { "value": 150425, "pid": 150400, "label": "克什克腾旗", }, { "value": 150426, "pid": 150400, "label": "翁牛特旗", }, { "value": 150428, "pid": 150400, "label": "喀喇沁旗", }, { "value": 150429, "pid": 150400, "label": "宁城县", }, { "value": 150430, "pid": 150400, "label": "敖汉旗", }] }, { "value": 150500, "pid": 150000, "label": "通辽市", "children": [{ "value": 150502, "pid": 150500, "label": "科尔沁区", }, { "value": 150521, "pid": 150500, "label": "科尔沁左翼中旗", }, { "value": 150522, "pid": 150500, "label": "科尔沁左翼后旗", }, { "value": 150523, "pid": 150500, "label": "开鲁县", }, { "value": 150524, "pid": 150500, "label": "库伦旗", }, { "value": 150525, "pid": 150500, "label": "奈曼旗", }, { "value": 150526, "pid": 150500, "label": "扎鲁特旗", }, { "value": 150581, "pid": 150500, "label": "霍林郭勒市", }] }, { "value": 150600, "pid": 150000, "label": "鄂尔多斯市", "children": [{ "value": 150602, "pid": 150600, "label": "东胜区", }, { "value": 150603, "pid": 150600, "label": "康巴什区", }, { "value": 150621, "pid": 150600, "label": "达拉特旗", }, { "value": 150622, "pid": 150600, "label": "准格尔旗", }, { "value": 150623, "pid": 150600, "label": "鄂托克前旗", }, { "value": 150624, "pid": 150600, "label": "鄂托克旗", }, { "value": 150625, "pid": 150600, "label": "杭锦旗", }, { "value": 150626, "pid": 150600, "label": "乌审旗", }, { "value": 150627, "pid": 150600, "label": "伊金霍洛旗", }] }, { "value": 150700, "pid": 150000, "label": "呼伦贝尔市", "children": [{ "value": 150702, "pid": 150700, "label": "海拉尔区", }, { "value": 150703, "pid": 150700, "label": "扎赉诺尔区", }, { "value": 150721, "pid": 150700, "label": "阿荣旗", }, { "value": 150722, "pid": 150700, "label": "莫力达瓦达斡尔族自治旗", }, { "value": 150723, "pid": 150700, "label": "鄂伦春自治旗", }, { "value": 150724, "pid": 150700, "label": "鄂温克族自治旗", }, { "value": 150725, "pid": 150700, "label": "陈巴尔虎旗", }, { "value": 150726, "pid": 150700, "label": "新巴尔虎左旗", }, { "value": 150727, "pid": 150700, "label": "新巴尔虎右旗", }, { "value": 150781, "pid": 150700, "label": "满洲里市", }, { "value": 150782, "pid": 150700, "label": "牙克石市", }, { "value": 150783, "pid": 150700, "label": "扎兰屯市", }, { "value": 150784, "pid": 150700, "label": "额尔古纳市", }, { "value": 150785, "pid": 150700, "label": "根河市", }] }, { "value": 150800, "pid": 150000, "label": "巴彦淖尔市", "children": [{ "value": 150802, "pid": 150800, "label": "临河区", }, { "value": 150821, "pid": 150800, "label": "五原县", }, { "value": 150822, "pid": 150800, "label": "磴口县", }, { "value": 150823, "pid": 150800, "label": "乌拉特前旗", }, { "value": 150824, "pid": 150800, "label": "乌拉特中旗", }, { "value": 150825, "pid": 150800, "label": "乌拉特后旗", }, { "value": 150826, "pid": 150800, "label": "杭锦后旗", }] }, { "value": 150900, "pid": 150000, "label": "乌兰察布市", "children": [{ "value": 150902, "pid": 150900, "label": "集宁区", }, { "value": 150921, "pid": 150900, "label": "卓资县", }, { "value": 150922, "pid": 150900, "label": "化德县", }, { "value": 150923, "pid": 150900, "label": "商都县", }, { "value": 150924, "pid": 150900, "label": "兴和县", }, { "value": 150925, "pid": 150900, "label": "凉城县", }, { "value": 150926, "pid": 150900, "label": "察哈尔右翼前旗", }, { "value": 150927, "pid": 150900, "label": "察哈尔右翼中旗", }, { "value": 150928, "pid": 150900, "label": "察哈尔右翼后旗", }, { "value": 150929, "pid": 150900, "label": "四子王旗", }, { "value": 150981, "pid": 150900, "label": "丰镇市", }] }, { "value": 152200, "pid": 150000, "label": "兴安盟", "children": [{ "value": 152201, "pid": 152200, "label": "乌兰浩特市", }, { "value": 152202, "pid": 152200, "label": "阿尔山市", }, { "value": 152221, "pid": 152200, "label": "科尔沁右翼前旗", }, { "value": 152222, "pid": 152200, "label": "科尔沁右翼中旗", }, { "value": 152223, "pid": 152200, "label": "扎赉特旗", }, { "value": 152224, "pid": 152200, "label": "突泉县", }] }, { "value": 152500, "pid": 150000, "label": "锡林郭勒盟", "children": [{ "value": 152501, "pid": 152500, "label": "二连浩特市", }, { "value": 152502, "pid": 152500, "label": "锡林浩特市", }, { "value": 152522, "pid": 152500, "label": "阿巴嘎旗", }, { "value": 152523, "pid": 152500, "label": "苏尼特左旗", }, { "value": 152524, "pid": 152500, "label": "苏尼特右旗", }, { "value": 152525, "pid": 152500, "label": "东乌珠穆沁旗", }, { "value": 152526, "pid": 152500, "label": "西乌珠穆沁旗", }, { "value": 152527, "pid": 152500, "label": "太仆寺旗", }, { "value": 152528, "pid": 152500, "label": "镶黄旗", }, { "value": 152529, "pid": 152500, "label": "正镶白旗", }, { "value": 152530, "pid": 152500, "label": "正蓝旗", }, { "value": 152531, "pid": 152500, "label": "多伦县", }] }, { "value": 152900, "pid": 150000, "label": "阿拉善盟", "children": [{ "value": 152921, "pid": 152900, "label": "阿拉善左旗", }, { "value": 152922, "pid": 152900, "label": "阿拉善右旗", }, { "value": 152923, "pid": 152900, "label": "额济纳旗", }] }] }, { "value": 210000, "pid": 100000, "label": "辽宁省", "children": [{ "value": 210100, "pid": 210000, "label": "沈阳市", "children": [{ "value": 210102, "pid": 210100, "label": "和平区", }, { "value": 210103, "pid": 210100, "label": "沈河区", }, { "value": 210104, "pid": 210100, "label": "大东区", }, { "value": 210105, "pid": 210100, "label": "皇姑区", }, { "value": 210106, "pid": 210100, "label": "铁西区", }, { "value": 210111, "pid": 210100, "label": "苏家屯区", }, { "value": 210112, "pid": 210100, "label": "浑南区", }, { "value": 210113, "pid": 210100, "label": "沈北新区", }, { "value": 210114, "pid": 210100, "label": "于洪区", }, { "value": 210115, "pid": 210100, "label": "辽中区", }, { "value": 210123, "pid": 210100, "label": "康平县", }, { "value": 210124, "pid": 210100, "label": "法库县", }, { "value": 210181, "pid": 210100, "label": "新民市", }, { "value": 210182, "pid": 210100, "label": "高新区", }] }, { "value": 210200, "pid": 210000, "label": "大连市", "children": [{ "value": 210202, "pid": 210200, "label": "中山区", }, { "value": 210203, "pid": 210200, "label": "西岗区", }, { "value": 210204, "pid": 210200, "label": "沙河口区", }, { "value": 210211, "pid": 210200, "label": "甘井子区", }, { "value": 210212, "pid": 210200, "label": "旅顺口区", }, { "value": 210213, "pid": 210200, "label": "金州区", }, { "value": 210214, "pid": 210200, "label": "普兰店区", }, { "value": 210224, "pid": 210200, "label": "长海县", }, { "value": 210281, "pid": 210200, "label": "瓦房店市", }, { "value": 210283, "pid": 210200, "label": "庄河市", }, { "value": 210284, "pid": 210200, "label": "高新区", }, { "value": 210285, "pid": 210200, "label": "经济开发区", }, { "value": 210286, "pid": 210200, "label": "金普新区", }] }, { "value": 210300, "pid": 210000, "label": "鞍山市", "children": [{ "value": 210302, "pid": 210300, "label": "铁东区", }, { "value": 210303, "pid": 210300, "label": "铁西区", }, { "value": 210304, "pid": 210300, "label": "立山区", }, { "value": 210311, "pid": 210300, "label": "千山区", }, { "value": 210321, "pid": 210300, "label": "台安县", }, { "value": 210323, "pid": 210300, "label": "岫岩满族自治县", }, { "value": 210381, "pid": 210300, "label": "海城市", }, { "value": 210382, "pid": 210300, "label": "高新区", }] }, { "value": 210400, "pid": 210000, "label": "抚顺市", "children": [{ "value": 210402, "pid": 210400, "label": "新抚区", }, { "value": 210403, "pid": 210400, "label": "东洲区", }, { "value": 210404, "pid": 210400, "label": "望花区", }, { "value": 210411, "pid": 210400, "label": "顺城区", }, { "value": 210421, "pid": 210400, "label": "抚顺县", }, { "value": 210422, "pid": 210400, "label": "新宾满族自治县", }, { "value": 210423, "pid": 210400, "label": "清原满族自治县", }] }, { "value": 210500, "pid": 210000, "label": "本溪市", "children": [{ "value": 210502, "pid": 210500, "label": "平山区", }, { "value": 210503, "pid": 210500, "label": "溪湖区", }, { "value": 210504, "pid": 210500, "label": "明山区", }, { "value": 210505, "pid": 210500, "label": "南芬区", }, { "value": 210521, "pid": 210500, "label": "本溪满族自治县", }, { "value": 210522, "pid": 210500, "label": "桓仁满族自治县", }] }, { "value": 210600, "pid": 210000, "label": "丹东市", "children": [{ "value": 210602, "pid": 210600, "label": "元宝区", }, { "value": 210603, "pid": 210600, "label": "振兴区", }, { "value": 210604, "pid": 210600, "label": "振安区", }, { "value": 210624, "pid": 210600, "label": "宽甸满族自治县", }, { "value": 210681, "pid": 210600, "label": "东港市", }, { "value": 210682, "pid": 210600, "label": "凤城市", }] }, { "value": 210700, "pid": 210000, "label": "锦州市", "children": [{ "value": 210702, "pid": 210700, "label": "古塔区", }, { "value": 210703, "pid": 210700, "label": "凌河区", }, { "value": 210711, "pid": 210700, "label": "太和区", }, { "value": 210726, "pid": 210700, "label": "黑山县", }, { "value": 210727, "pid": 210700, "label": "义县", }, { "value": 210781, "pid": 210700, "label": "凌海市", }, { "value": 210782, "pid": 210700, "label": "北镇市", }, { "value": 210783, "pid": 210700, "label": "松山新区", }, { "value": 210784, "pid": 210700, "label": "龙栖湾新区", }, { "value": 210785, "pid": 210700, "label": "经济技术开发区", }] }, { "value": 210800, "pid": 210000, "label": "营口市", "children": [{ "value": 210802, "pid": 210800, "label": "站前区", }, { "value": 210803, "pid": 210800, "label": "西市区", }, { "value": 210804, "pid": 210800, "label": "鲅鱼圈区", }, { "value": 210811, "pid": 210800, "label": "老边区", }, { "value": 210881, "pid": 210800, "label": "盖州市", }, { "value": 210882, "pid": 210800, "label": "大石桥市", }] }, { "value": 210900, "pid": 210000, "label": "阜新市", "children": [{ "value": 210902, "pid": 210900, "label": "海州区", }, { "value": 210903, "pid": 210900, "label": "新邱区", }, { "value": 210904, "pid": 210900, "label": "太平区", }, { "value": 210905, "pid": 210900, "label": "清河门区", }, { "value": 210911, "pid": 210900, "label": "细河区", }, { "value": 210921, "pid": 210900, "label": "阜新蒙古族自治县", }, { "value": 210922, "pid": 210900, "label": "彰武县", }] }, { "value": 211000, "pid": 210000, "label": "辽阳市", "children": [{ "value": 211002, "pid": 211000, "label": "白塔区", }, { "value": 211003, "pid": 211000, "label": "文圣区", }, { "value": 211004, "pid": 211000, "label": "宏伟区", }, { "value": 211005, "pid": 211000, "label": "弓长岭区", }, { "value": 211011, "pid": 211000, "label": "太子河区", }, { "value": 211021, "pid": 211000, "label": "辽阳县", }, { "value": 211081, "pid": 211000, "label": "灯塔市", }] }, { "value": 211100, "pid": 210000, "label": "盘锦市", "children": [{ "value": 211102, "pid": 211100, "label": "双台子区", }, { "value": 211103, "pid": 211100, "label": "兴隆台区", }, { "value": 211104, "pid": 211100, "label": "大洼区", }, { "value": 211122, "pid": 211100, "label": "盘山县", }] }, { "value": 211200, "pid": 210000, "label": "铁岭市", "children": [{ "value": 211202, "pid": 211200, "label": "银州区", }, { "value": 211204, "pid": 211200, "label": "清河区", }, { "value": 211221, "pid": 211200, "label": "铁岭县", }, { "value": 211223, "pid": 211200, "label": "西丰县", }, { "value": 211224, "pid": 211200, "label": "昌图县", }, { "value": 211281, "pid": 211200, "label": "调兵山市", }, { "value": 211282, "pid": 211200, "label": "开原市", }] }, { "value": 211300, "pid": 210000, "label": "朝阳市", "children": [{ "value": 211302, "pid": 211300, "label": "双塔区", }, { "value": 211303, "pid": 211300, "label": "龙城区", }, { "value": 211321, "pid": 211300, "label": "朝阳县", }, { "value": 211322, "pid": 211300, "label": "建平县", }, { "value": 211324, "pid": 211300, "label": "喀喇沁左翼蒙古族自治县", }, { "value": 211381, "pid": 211300, "label": "北票市", }, { "value": 211382, "pid": 211300, "label": "凌源市", }] }, { "value": 211400, "pid": 210000, "label": "葫芦岛市", "children": [{ "value": 211402, "pid": 211400, "label": "连山区", }, { "value": 211403, "pid": 211400, "label": "龙港区", }, { "value": 211404, "pid": 211400, "label": "南票区", }, { "value": 211421, "pid": 211400, "label": "绥中县", }, { "value": 211422, "pid": 211400, "label": "建昌县", }, { "value": 211481, "pid": 211400, "label": "兴城市", }] }] }, { "value": 220000, "pid": 100000, "label": "吉林省", "children": [{ "value": 220100, "pid": 220000, "label": "长春市", "children": [{ "value": 220102, "pid": 220100, "label": "南关区", }, { "value": 220103, "pid": 220100, "label": "宽城区", }, { "value": 220104, "pid": 220100, "label": "朝阳区", }, { "value": 220105, "pid": 220100, "label": "二道区", }, { "value": 220106, "pid": 220100, "label": "绿园区", }, { "value": 220112, "pid": 220100, "label": "双阳区", }, { "value": 220113, "pid": 220100, "label": "九台区", }, { "value": 220122, "pid": 220100, "label": "农安县", }, { "value": 220182, "pid": 220100, "label": "榆树市", }, { "value": 220183, "pid": 220100, "label": "德惠市", }, { "value": 220184, "pid": 220100, "label": "长春新区", }, { "value": 220185, "pid": 220100, "label": "高新区", }, { "value": 220186, "pid": 220100, "label": "经济技术开发区", }, { "value": 220187, "pid": 220100, "label": "汽车产业开发区", }, { "value": 220188, "pid": 220100, "label": "兴隆综合保税区", }] }, { "value": 220200, "pid": 220000, "label": "吉林市", "children": [{ "value": 220202, "pid": 220200, "label": "昌邑区", }, { "value": 220203, "pid": 220200, "label": "龙潭区", }, { "value": 220204, "pid": 220200, "label": "船营区", }, { "value": 220211, "pid": 220200, "label": "丰满区", }, { "value": 220221, "pid": 220200, "label": "永吉县", }, { "value": 220281, "pid": 220200, "label": "蛟河市", }, { "value": 220282, "pid": 220200, "label": "桦甸市", }, { "value": 220283, "pid": 220200, "label": "舒兰市", }, { "value": 220284, "pid": 220200, "label": "磐石市", }, { "value": 220285, "pid": 220200, "label": "高新区", }] }, { "value": 220300, "pid": 220000, "label": "四平市", "children": [{ "value": 220302, "pid": 220300, "label": "铁西区", }, { "value": 220303, "pid": 220300, "label": "铁东区", }, { "value": 220322, "pid": 220300, "label": "梨树县", }, { "value": 220323, "pid": 220300, "label": "伊通满族自治县", }, { "value": 220381, "pid": 220300, "label": "公主岭市", }, { "value": 220382, "pid": 220300, "label": "双辽市", }] }, { "value": 220400, "pid": 220000, "label": "辽源市", "children": [{ "value": 220402, "pid": 220400, "label": "龙山区", }, { "value": 220403, "pid": 220400, "label": "西安区", }, { "value": 220421, "pid": 220400, "label": "东丰县", }, { "value": 220422, "pid": 220400, "label": "东辽县", }] }, { "value": 220500, "pid": 220000, "label": "通化市", "children": [{ "value": 220502, "pid": 220500, "label": "东昌区", }, { "value": 220503, "pid": 220500, "label": "二道江区", }, { "value": 220521, "pid": 220500, "label": "通化县", }, { "value": 220523, "pid": 220500, "label": "辉南县", }, { "value": 220524, "pid": 220500, "label": "柳河县", }, { "value": 220581, "pid": 220500, "label": "梅河口市", }, { "value": 220582, "pid": 220500, "label": "集安市", }] }, { "value": 220600, "pid": 220000, "label": "白山市", "children": [{ "value": 220602, "pid": 220600, "label": "浑江区", }, { "value": 220605, "pid": 220600, "label": "江源区", }, { "value": 220621, "pid": 220600, "label": "抚松县", }, { "value": 220622, "pid": 220600, "label": "靖宇县", }, { "value": 220623, "pid": 220600, "label": "长白朝鲜族自治县", }, { "value": 220681, "pid": 220600, "label": "临江市", }] }, { "value": 220700, "pid": 220000, "label": "松原市", "children": [{ "value": 220702, "pid": 220700, "label": "宁江区", }, { "value": 220721, "pid": 220700, "label": "前郭尔罗斯蒙古族自治县", }, { "value": 220722, "pid": 220700, "label": "长岭县", }, { "value": 220723, "pid": 220700, "label": "乾安县", }, { "value": 220781, "pid": 220700, "label": "扶余市", }] }, { "value": 220800, "pid": 220000, "label": "白城市", "children": [{ "value": 220802, "pid": 220800, "label": "洮北区", }, { "value": 220821, "pid": 220800, "label": "镇赉县", }, { "value": 220822, "pid": 220800, "label": "通榆县", }, { "value": 220881, "pid": 220800, "label": "洮南市", }, { "value": 220882, "pid": 220800, "label": "大安市", }] }, { "value": 222400, "pid": 220000, "label": "延边朝鲜族自治州", "children": [{ "value": 222401, "pid": 222400, "label": "延吉市", }, { "value": 222402, "pid": 222400, "label": "图们市", }, { "value": 222403, "pid": 222400, "label": "敦化市", }, { "value": 222404, "pid": 222400, "label": "珲春市", }, { "value": 222405, "pid": 222400, "label": "龙井市", }, { "value": 222406, "pid": 222400, "label": "和龙市", }, { "value": 222424, "pid": 222400, "label": "汪清县", }, { "value": 222426, "pid": 222400, "label": "安图县", }] }] }, { "value": 230000, "pid": 100000, "label": "黑龙江省", "children": [{ "value": 230100, "pid": 230000, "label": "哈尔滨市", "children": [{ "value": 230102, "pid": 230100, "label": "道里区", }, { "value": 230103, "pid": 230100, "label": "南岗区", }, { "value": 230104, "pid": 230100, "label": "道外区", }, { "value": 230108, "pid": 230100, "label": "平房区", }, { "value": 230109, "pid": 230100, "label": "松北区", }, { "value": 230110, "pid": 230100, "label": "香坊区", }, { "value": 230111, "pid": 230100, "label": "呼兰区", }, { "value": 230112, "pid": 230100, "label": "阿城区", }, { "value": 230113, "pid": 230100, "label": "双城区", }, { "value": 230123, "pid": 230100, "label": "依兰县", }, { "value": 230124, "pid": 230100, "label": "方正县", }, { "value": 230125, "pid": 230100, "label": "宾县", }, { "value": 230126, "pid": 230100, "label": "巴彦县", }, { "value": 230127, "pid": 230100, "label": "木兰县", }, { "value": 230128, "pid": 230100, "label": "通河县", }, { "value": 230129, "pid": 230100, "label": "延寿县", }, { "value": 230183, "pid": 230100, "label": "尚志市", }, { "value": 230184, "pid": 230100, "label": "五常市", }, { "value": 230185, "pid": 230100, "label": "哈尔滨新区", }, { "value": 230186, "pid": 230100, "label": "高新区", }] }, { "value": 230200, "pid": 230000, "label": "齐齐哈尔市", "children": [{ "value": 230202, "pid": 230200, "label": "龙沙区", }, { "value": 230203, "pid": 230200, "label": "建华区", }, { "value": 230204, "pid": 230200, "label": "铁锋区", }, { "value": 230205, "pid": 230200, "label": "昂昂溪区", }, { "value": 230206, "pid": 230200, "label": "富拉尔基区", }, { "value": 230207, "pid": 230200, "label": "碾子山区", }, { "value": 230208, "pid": 230200, "label": "梅里斯达斡尔族区", }, { "value": 230221, "pid": 230200, "label": "龙江县", }, { "value": 230223, "pid": 230200, "label": "依安县", }, { "value": 230224, "pid": 230200, "label": "泰来县", }, { "value": 230225, "pid": 230200, "label": "甘南县", }, { "value": 230227, "pid": 230200, "label": "富裕县", }, { "value": 230229, "pid": 230200, "label": "克山县", }, { "value": 230230, "pid": 230200, "label": "克东县", }, { "value": 230231, "pid": 230200, "label": "拜泉县", }, { "value": 230281, "pid": 230200, "label": "讷河市", }, { "value": 230282, "pid": 230200, "label": "高新区", }] }, { "value": 230300, "pid": 230000, "label": "鸡西市", "children": [{ "value": 230302, "pid": 230300, "label": "鸡冠区", }, { "value": 230303, "pid": 230300, "label": "恒山区", }, { "value": 230304, "pid": 230300, "label": "滴道区", }, { "value": 230305, "pid": 230300, "label": "梨树区", }, { "value": 230306, "pid": 230300, "label": "城子河区", }, { "value": 230307, "pid": 230300, "label": "麻山区", }, { "value": 230321, "pid": 230300, "label": "鸡东县", }, { "value": 230381, "pid": 230300, "label": "虎林市", }, { "value": 230382, "pid": 230300, "label": "密山市", }] }, { "value": 230400, "pid": 230000, "label": "鹤岗市", "children": [{ "value": 230402, "pid": 230400, "label": "向阳区", }, { "value": 230403, "pid": 230400, "label": "工农区", }, { "value": 230404, "pid": 230400, "label": "南山区", }, { "value": 230405, "pid": 230400, "label": "兴安区", }, { "value": 230406, "pid": 230400, "label": "东山区", }, { "value": 230407, "pid": 230400, "label": "兴山区", }, { "value": 230421, "pid": 230400, "label": "萝北县", }, { "value": 230422, "pid": 230400, "label": "绥滨县", }] }, { "value": 230500, "pid": 230000, "label": "双鸭山市", "children": [{ "value": 230502, "pid": 230500, "label": "尖山区", }, { "value": 230503, "pid": 230500, "label": "岭东区", }, { "value": 230505, "pid": 230500, "label": "四方台区", }, { "value": 230506, "pid": 230500, "label": "宝山区", }, { "value": 230521, "pid": 230500, "label": "集贤县", }, { "value": 230522, "pid": 230500, "label": "友谊县", }, { "value": 230523, "pid": 230500, "label": "宝清县", }, { "value": 230524, "pid": 230500, "label": "饶河县", }] }, { "value": 230600, "pid": 230000, "label": "大庆市", "children": [{ "value": 230602, "pid": 230600, "label": "萨尔图区", }, { "value": 230603, "pid": 230600, "label": "龙凤区", }, { "value": 230604, "pid": 230600, "label": "让胡路区", }, { "value": 230605, "pid": 230600, "label": "红岗区", }, { "value": 230606, "pid": 230600, "label": "大同区", }, { "value": 230621, "pid": 230600, "label": "肇州县", }, { "value": 230622, "pid": 230600, "label": "肇源县", }, { "value": 230623, "pid": 230600, "label": "林甸县", }, { "value": 230624, "pid": 230600, "label": "杜尔伯特蒙古族自治县", }, { "value": 230625, "pid": 230600, "label": "高新区", }] }, { "value": 230700, "pid": 230000, "label": "伊春市", "children": [{ "value": 230702, "pid": 230700, "label": "伊春区", }, { "value": 230703, "pid": 230700, "label": "南岔区", }, { "value": 230704, "pid": 230700, "label": "友好区", }, { "value": 230705, "pid": 230700, "label": "西林区", }, { "value": 230706, "pid": 230700, "label": "翠峦区", }, { "value": 230707, "pid": 230700, "label": "新青区", }, { "value": 230708, "pid": 230700, "label": "美溪区", }, { "value": 230709, "pid": 230700, "label": "金山屯区", }, { "value": 230710, "pid": 230700, "label": "五营区", }, { "value": 230711, "pid": 230700, "label": "乌马河区", }, { "value": 230712, "pid": 230700, "label": "汤旺河区", }, { "value": 230713, "pid": 230700, "label": "带岭区", }, { "value": 230714, "pid": 230700, "label": "乌伊岭区", }, { "value": 230715, "pid": 230700, "label": "红星区", }, { "value": 230716, "pid": 230700, "label": "上甘岭区", }, { "value": 230722, "pid": 230700, "label": "嘉荫县", }, { "value": 230781, "pid": 230700, "label": "铁力市", }] }, { "value": 230800, "pid": 230000, "label": "佳木斯市", "children": [{ "value": 230803, "pid": 230800, "label": "向阳区", }, { "value": 230804, "pid": 230800, "label": "前进区", }, { "value": 230805, "pid": 230800, "label": "东风区", }, { "value": 230811, "pid": 230800, "label": "郊区", }, { "value": 230822, "pid": 230800, "label": "桦南县", }, { "value": 230826, "pid": 230800, "label": "桦川县", }, { "value": 230828, "pid": 230800, "label": "汤原县", }, { "value": 230881, "pid": 230800, "label": "同江市", }, { "value": 230882, "pid": 230800, "label": "富锦市", }, { "value": 230883, "pid": 230800, "label": "抚远市", }] }, { "value": 230900, "pid": 230000, "label": "七台河市", "children": [{ "value": 230902, "pid": 230900, "label": "新兴区", }, { "value": 230903, "pid": 230900, "label": "桃山区", }, { "value": 230904, "pid": 230900, "label": "茄子河区", }, { "value": 230921, "pid": 230900, "label": "勃利县", }] }, { "value": 231000, "pid": 230000, "label": "牡丹江市", "children": [{ "value": 231002, "pid": 231000, "label": "东安区", }, { "value": 231003, "pid": 231000, "label": "阳明区", }, { "value": 231004, "pid": 231000, "label": "爱民区", }, { "value": 231005, "pid": 231000, "label": "西安区", }, { "value": 231025, "pid": 231000, "label": "林口县", }, { "value": 231081, "pid": 231000, "label": "绥芬河市", }, { "value": 231083, "pid": 231000, "label": "海林市", }, { "value": 231084, "pid": 231000, "label": "宁安市", }, { "value": 231085, "pid": 231000, "label": "穆棱市", }, { "value": 231086, "pid": 231000, "label": "东宁市", }] }, { "value": 231100, "pid": 230000, "label": "黑河市", "children": [{ "value": 231102, "pid": 231100, "label": "爱辉区", }, { "value": 231121, "pid": 231100, "label": "嫩江县", }, { "value": 231123, "pid": 231100, "label": "逊克县", }, { "value": 231124, "pid": 231100, "label": "孙吴县", }, { "value": 231181, "pid": 231100, "label": "北安市", }, { "value": 231182, "pid": 231100, "label": "五大连池市", }] }, { "value": 231200, "pid": 230000, "label": "绥化市", "children": [{ "value": 231202, "pid": 231200, "label": "北林区", }, { "value": 231221, "pid": 231200, "label": "望奎县", }, { "value": 231222, "pid": 231200, "label": "兰西县", }, { "value": 231223, "pid": 231200, "label": "青冈县", }, { "value": 231224, "pid": 231200, "label": "庆安县", }, { "value": 231225, "pid": 231200, "label": "明水县", }, { "value": 231226, "pid": 231200, "label": "绥棱县", }, { "value": 231281, "pid": 231200, "label": "安达市", }, { "value": 231282, "pid": 231200, "label": "肇东市", }, { "value": 231283, "pid": 231200, "label": "海伦市", }] }, { "value": 232700, "pid": 230000, "label": "大兴安岭地区", "children": [{ "value": 232701, "pid": 232700, "label": "漠河市", }, { "value": 232721, "pid": 232700, "label": "呼玛县", }, { "value": 232722, "pid": 232700, "label": "塔河县", }, { "value": 232761, "pid": 232700, "label": "加格达奇区", }, { "value": 232762, "pid": 232700, "label": "松岭区", }, { "value": 232763, "pid": 232700, "label": "新林区", }, { "value": 232764, "pid": 232700, "label": "呼中区", }] }] }, { "value": 310000, "pid": 100000, "label": "上海", "children": [{ "value": 310100, "pid": 310000, "label": "上海市", "children": [{ "value": 310101, "pid": 310100, "label": "黄浦区", }, { "value": 310104, "pid": 310100, "label": "徐汇区", }, { "value": 310105, "pid": 310100, "label": "长宁区", }, { "value": 310106, "pid": 310100, "label": "静安区", }, { "value": 310107, "pid": 310100, "label": "普陀区", }, { "value": 310109, "pid": 310100, "label": "虹口区", }, { "value": 310110, "pid": 310100, "label": "杨浦区", }, { "value": 310112, "pid": 310100, "label": "闵行区", }, { "value": 310113, "pid": 310100, "label": "宝山区", }, { "value": 310114, "pid": 310100, "label": "嘉定区", }, { "value": 310115, "pid": 310100, "label": "浦东新区", }, { "value": 310116, "pid": 310100, "label": "金山区", }, { "value": 310117, "pid": 310100, "label": "松江区", }, { "value": 310118, "pid": 310100, "label": "青浦区", }, { "value": 310120, "pid": 310100, "label": "奉贤区", }, { "value": 310151, "pid": 310100, "label": "崇明区", }, { "value": 310231, "pid": 310100, "label": "张江高新区", }, { "value": 310232, "pid": 310100, "label": "紫竹高新区", }, { "value": 310233, "pid": 310100, "label": "漕河泾开发区", }] }] }, { "value": 320000, "pid": 100000, "label": "江苏省", "children": [{ "value": 320100, "pid": 320000, "label": "南京市", "children": [{ "value": 320102, "pid": 320100, "label": "玄武区", }, { "value": 320104, "pid": 320100, "label": "秦淮区", }, { "value": 320105, "pid": 320100, "label": "建邺区", }, { "value": 320106, "pid": 320100, "label": "鼓楼区", }, { "value": 320111, "pid": 320100, "label": "浦口区", }, { "value": 320113, "pid": 320100, "label": "栖霞区", }, { "value": 320114, "pid": 320100, "label": "雨花台区", }, { "value": 320115, "pid": 320100, "label": "江宁区", }, { "value": 320116, "pid": 320100, "label": "六合区", }, { "value": 320117, "pid": 320100, "label": "溧水区", }, { "value": 320118, "pid": 320100, "label": "高淳区", }, { "value": 320119, "pid": 320100, "label": "江北新区", }, { "value": 320120, "pid": 320100, "label": "高新区", }] }, { "value": 320200, "pid": 320000, "label": "无锡市", "children": [{ "value": 320205, "pid": 320200, "label": "锡山区", }, { "value": 320206, "pid": 320200, "label": "惠山区", }, { "value": 320211, "pid": 320200, "label": "滨湖区", }, { "value": 320213, "pid": 320200, "label": "梁溪区", }, { "value": 320214, "pid": 320200, "label": "新吴区", }, { "value": 320281, "pid": 320200, "label": "江阴市", }, { "value": 320282, "pid": 320200, "label": "宜兴市", }] }, { "value": 320300, "pid": 320000, "label": "徐州市", "children": [{ "value": 320302, "pid": 320300, "label": "鼓楼区", }, { "value": 320303, "pid": 320300, "label": "云龙区", }, { "value": 320305, "pid": 320300, "label": "贾汪区", }, { "value": 320311, "pid": 320300, "label": "泉山区", }, { "value": 320312, "pid": 320300, "label": "铜山区", }, { "value": 320321, "pid": 320300, "label": "丰县", }, { "value": 320322, "pid": 320300, "label": "沛县", }, { "value": 320324, "pid": 320300, "label": "睢宁县", }, { "value": 320381, "pid": 320300, "label": "新沂市", }, { "value": 320382, "pid": 320300, "label": "邳州市", }, { "value": 320383, "pid": 320300, "label": "经济技术开发区", }, { "value": 320384, "pid": 320300, "label": "高新区", }, { "value": 320385, "pid": 320300, "label": "软件园", }] }, { "value": 320400, "pid": 320000, "label": "常州市", "children": [{ "value": 320402, "pid": 320400, "label": "天宁区", }, { "value": 320404, "pid": 320400, "label": "钟楼区", }, { "value": 320411, "pid": 320400, "label": "新北区", }, { "value": 320412, "pid": 320400, "label": "武进区", }, { "value": 320413, "pid": 320400, "label": "金坛区", }, { "value": 320481, "pid": 320400, "label": "溧阳市", }, { "value": 320482, "pid": 320400, "label": "高新区", }] }, { "value": 320500, "pid": 320000, "label": "苏州市", "children": [{ "value": 320505, "pid": 320500, "label": "虎丘区", }, { "value": 320506, "pid": 320500, "label": "吴中区", }, { "value": 320507, "pid": 320500, "label": "相城区", }, { "value": 320508, "pid": 320500, "label": "姑苏区", }, { "value": 320509, "pid": 320500, "label": "吴江区", }, { "value": 320581, "pid": 320500, "label": "常熟市", }, { "value": 320582, "pid": 320500, "label": "张家港市", }, { "value": 320583, "pid": 320500, "label": "昆山市", }, { "value": 320585, "pid": 320500, "label": "太仓市", }, { "value": 320586, "pid": 320500, "label": "苏州新区", }, { "value": 320587, "pid": 320500, "label": "工业园区", }, { "value": 320588, "pid": 320500, "label": "高新区", }] }, { "value": 320600, "pid": 320000, "label": "南通市", "children": [{ "value": 320602, "pid": 320600, "label": "崇川区", }, { "value": 320611, "pid": 320600, "label": "港闸区", }, { "value": 320612, "pid": 320600, "label": "通州区", }, { "value": 320623, "pid": 320600, "label": "如东县", }, { "value": 320681, "pid": 320600, "label": "启东市", }, { "value": 320682, "pid": 320600, "label": "如皋市", }, { "value": 320684, "pid": 320600, "label": "海门市", }, { "value": 320685, "pid": 320600, "label": "海安市", }, { "value": 320686, "pid": 320600, "label": "经济技术开发区", }] }, { "value": 320700, "pid": 320000, "label": "连云港市", "children": [{ "value": 320703, "pid": 320700, "label": "连云区", }, { "value": 320706, "pid": 320700, "label": "海州区", }, { "value": 320707, "pid": 320700, "label": "赣榆区", }, { "value": 320722, "pid": 320700, "label": "东海县", }, { "value": 320723, "pid": 320700, "label": "灌云县", }, { "value": 320724, "pid": 320700, "label": "灌南县", }, { "value": 320725, "pid": 320700, "label": "新海新区", }, { "value": 320726, "pid": 320700, "label": "连云新城", }, { "value": 320727, "pid": 320700, "label": "徐圩新区", }, { "value": 320728, "pid": 320700, "label": "济技术开发区", }] }, { "value": 320800, "pid": 320000, "label": "淮安市", "children": [{ "value": 320803, "pid": 320800, "label": "淮安区", }, { "value": 320804, "pid": 320800, "label": "淮阴区", }, { "value": 320812, "pid": 320800, "label": "清江浦区", }, { "value": 320813, "pid": 320800, "label": "洪泽区", }, { "value": 320826, "pid": 320800, "label": "涟水县", }, { "value": 320830, "pid": 320800, "label": "盱眙县", }, { "value": 320831, "pid": 320800, "label": "金湖县", }, { "value": 320832, "pid": 320800, "label": "经济开发区", }] }, { "value": 320900, "pid": 320000, "label": "盐城市", "children": [{ "value": 320902, "pid": 320900, "label": "亭湖区", }, { "value": 320903, "pid": 320900, "label": "盐都区", }, { "value": 320904, "pid": 320900, "label": "大丰区", }, { "value": 320921, "pid": 320900, "label": "响水县", }, { "value": 320922, "pid": 320900, "label": "滨海县", }, { "value": 320923, "pid": 320900, "label": "阜宁县", }, { "value": 320924, "pid": 320900, "label": "射阳县", }, { "value": 320925, "pid": 320900, "label": "建湖县", }, { "value": 320981, "pid": 320900, "label": "东台市", }] }, { "value": 321000, "pid": 320000, "label": "扬州市", "children": [{ "value": 321002, "pid": 321000, "label": "广陵区", }, { "value": 321003, "pid": 321000, "label": "邗江区", }, { "value": 321012, "pid": 321000, "label": "江都区", }, { "value": 321023, "pid": 321000, "label": "宝应县", }, { "value": 321081, "pid": 321000, "label": "仪征市", }, { "value": 321084, "pid": 321000, "label": "高邮市", }] }, { "value": 321100, "pid": 320000, "label": "镇江市", "children": [{ "value": 321102, "pid": 321100, "label": "京口区", }, { "value": 321111, "pid": 321100, "label": "润州区", }, { "value": 321112, "pid": 321100, "label": "丹徒区", }, { "value": 321181, "pid": 321100, "label": "丹阳市", }, { "value": 321182, "pid": 321100, "label": "扬中市", }, { "value": 321183, "pid": 321100, "label": "句容市", }, { "value": 321184, "pid": 321100, "label": "镇江新区", }, { "value": 321185, "pid": 321100, "label": "镇江新区", }, { "value": 321186, "pid": 321100, "label": "经济开发区", }] }, { "value": 321200, "pid": 320000, "label": "泰州市", "children": [{ "value": 321202, "pid": 321200, "label": "海陵区", }, { "value": 321203, "pid": 321200, "label": "高港区", }, { "value": 321204, "pid": 321200, "label": "姜堰区", }, { "value": 321281, "pid": 321200, "label": "兴化市", }, { "value": 321282, "pid": 321200, "label": "靖江市", }, { "value": 321283, "pid": 321200, "label": "泰兴市", }] }, { "value": 321300, "pid": 320000, "label": "宿迁市", "children": [{ "value": 321302, "pid": 321300, "label": "宿城区", }, { "value": 321311, "pid": 321300, "label": "宿豫区", }, { "value": 321322, "pid": 321300, "label": "沭阳县", }, { "value": 321323, "pid": 321300, "label": "泗阳县", }, { "value": 321324, "pid": 321300, "label": "泗洪县", }, { "value": 321325, "pid": 321300, "label": "高新区", }] }] }, { "value": 330000, "pid": 100000, "label": "浙江省", "children": [{ "value": 330100, "pid": 330000, "label": "杭州市", "children": [{ "value": 330102, "pid": 330100, "label": "上城区", }, { "value": 330103, "pid": 330100, "label": "下城区", }, { "value": 330104, "pid": 330100, "label": "江干区", }, { "value": 330105, "pid": 330100, "label": "拱墅区", }, { "value": 330106, "pid": 330100, "label": "西湖区", }, { "value": 330108, "pid": 330100, "label": "滨江区", }, { "value": 330109, "pid": 330100, "label": "萧山区", }, { "value": 330110, "pid": 330100, "label": "余杭区", }, { "value": 330111, "pid": 330100, "label": "富阳区", }, { "value": 330112, "pid": 330100, "label": "临安区", }, { "value": 330122, "pid": 330100, "label": "桐庐县", }, { "value": 330127, "pid": 330100, "label": "淳安县", }, { "value": 330182, "pid": 330100, "label": "建德市", }, { "value": 330186, "pid": 330100, "label": "高新区", }] }, { "value": 330200, "pid": 330000, "label": "宁波市", "children": [{ "value": 330203, "pid": 330200, "label": "海曙区", }, { "value": 330205, "pid": 330200, "label": "江北区", }, { "value": 330206, "pid": 330200, "label": "北仑区", }, { "value": 330211, "pid": 330200, "label": "镇海区", }, { "value": 330212, "pid": 330200, "label": "鄞州区", }, { "value": 330213, "pid": 330200, "label": "奉化区", }, { "value": 330225, "pid": 330200, "label": "象山县", }, { "value": 330226, "pid": 330200, "label": "宁海县", }, { "value": 330281, "pid": 330200, "label": "余姚市", }, { "value": 330282, "pid": 330200, "label": "慈溪市", }, { "value": 330284, "pid": 330200, "label": "杭州湾新区", }, { "value": 330285, "pid": 330200, "label": "高新区", }] }, { "value": 330300, "pid": 330000, "label": "温州市", "children": [{ "value": 330302, "pid": 330300, "label": "鹿城区", }, { "value": 330303, "pid": 330300, "label": "龙湾区", }, { "value": 330304, "pid": 330300, "label": "瓯海区", }, { "value": 330305, "pid": 330300, "label": "洞头区", }, { "value": 330324, "pid": 330300, "label": "永嘉县", }, { "value": 330326, "pid": 330300, "label": "平阳县", }, { "value": 330327, "pid": 330300, "label": "苍南县", }, { "value": 330328, "pid": 330300, "label": "文成县", }, { "value": 330329, "pid": 330300, "label": "泰顺县", }, { "value": 330381, "pid": 330300, "label": "瑞安市", }, { "value": 330382, "pid": 330300, "label": "乐清市", }] }, { "value": 330400, "pid": 330000, "label": "嘉兴市", "children": [{ "value": 330402, "pid": 330400, "label": "南湖区", }, { "value": 330411, "pid": 330400, "label": "秀洲区", }, { "value": 330421, "pid": 330400, "label": "嘉善县", }, { "value": 330424, "pid": 330400, "label": "海盐县", }, { "value": 330481, "pid": 330400, "label": "海宁市", }, { "value": 330482, "pid": 330400, "label": "平湖市", }, { "value": 330483, "pid": 330400, "label": "桐乡市", }] }, { "value": 330500, "pid": 330000, "label": "湖州市", "children": [{ "value": 330502, "pid": 330500, "label": "吴兴区", }, { "value": 330503, "pid": 330500, "label": "南浔区", }, { "value": 330521, "pid": 330500, "label": "德清县", }, { "value": 330522, "pid": 330500, "label": "长兴县", }, { "value": 330523, "pid": 330500, "label": "安吉县", }] }, { "value": 330600, "pid": 330000, "label": "绍兴市", "children": [{ "value": 330602, "pid": 330600, "label": "越城区", }, { "value": 330603, "pid": 330600, "label": "柯桥区", }, { "value": 330604, "pid": 330600, "label": "上虞区", }, { "value": 330624, "pid": 330600, "label": "新昌县", }, { "value": 330681, "pid": 330600, "label": "诸暨市", }, { "value": 330683, "pid": 330600, "label": "嵊州市", }] }, { "value": 330700, "pid": 330000, "label": "金华市", "children": [{ "value": 330702, "pid": 330700, "label": "婺城区", }, { "value": 330703, "pid": 330700, "label": "金东区", }, { "value": 330723, "pid": 330700, "label": "武义县", }, { "value": 330726, "pid": 330700, "label": "浦江县", }, { "value": 330727, "pid": 330700, "label": "磐安县", }, { "value": 330781, "pid": 330700, "label": "兰溪市", }, { "value": 330782, "pid": 330700, "label": "义乌市", }, { "value": 330783, "pid": 330700, "label": "东阳市", }, { "value": 330784, "pid": 330700, "label": "永康市", }] }, { "value": 330800, "pid": 330000, "label": "衢州市", "children": [{ "value": 330802, "pid": 330800, "label": "柯城区", }, { "value": 330803, "pid": 330800, "label": "衢江区", }, { "value": 330822, "pid": 330800, "label": "常山县", }, { "value": 330824, "pid": 330800, "label": "开化县", }, { "value": 330825, "pid": 330800, "label": "龙游县", }, { "value": 330881, "pid": 330800, "label": "江山市", }] }, { "value": 330900, "pid": 330000, "label": "舟山市", "children": [{ "value": 330902, "pid": 330900, "label": "定海区", }, { "value": 330903, "pid": 330900, "label": "普陀区", }, { "value": 330921, "pid": 330900, "label": "岱山县", }, { "value": 330922, "pid": 330900, "label": "嵊泗县", }] }, { "value": 331000, "pid": 330000, "label": "台州市", "children": [{ "value": 331002, "pid": 331000, "label": "椒江区", }, { "value": 331003, "pid": 331000, "label": "黄岩区", }, { "value": 331004, "pid": 331000, "label": "路桥区", }, { "value": 331022, "pid": 331000, "label": "三门县", }, { "value": 331023, "pid": 331000, "label": "天台县", }, { "value": 331024, "pid": 331000, "label": "仙居县", }, { "value": 331081, "pid": 331000, "label": "温岭市", }, { "value": 331082, "pid": 331000, "label": "临海市", }, { "value": 331083, "pid": 331000, "label": "玉环市", }] }, { "value": 331100, "pid": 330000, "label": "丽水市", "children": [{ "value": 331102, "pid": 331100, "label": "莲都区", }, { "value": 331121, "pid": 331100, "label": "青田县", }, { "value": 331122, "pid": 331100, "label": "缙云县", }, { "value": 331123, "pid": 331100, "label": "遂昌县", }, { "value": 331124, "pid": 331100, "label": "松阳县", }, { "value": 331125, "pid": 331100, "label": "云和县", }, { "value": 331126, "pid": 331100, "label": "庆元县", }, { "value": 331127, "pid": 331100, "label": "景宁畲族自治县", }, { "value": 331181, "pid": 331100, "label": "龙泉市", }] }, { "value": 331200, "pid": 330000, "label": "舟山群岛新区", "children": [{ "value": 331201, "pid": 331200, "label": "金塘岛", }, { "value": 331202, "pid": 331200, "label": "六横岛", }, { "value": 331203, "pid": 331200, "label": "衢山岛", }, { "value": 331204, "pid": 331200, "label": "舟山本岛西北部", }, { "value": 331205, "pid": 331200, "label": "岱山岛西南部", }, { "value": 331206, "pid": 331200, "label": "泗礁岛", }, { "value": 331207, "pid": 331200, "label": "朱家尖岛", }, { "value": 331208, "pid": 331200, "label": "洋山岛", }, { "value": 331209, "pid": 331200, "label": "长涂岛", }, { "value": 331210, "pid": 331200, "label": "虾峙岛", }] }] }, { "value": 340000, "pid": 100000, "label": "安徽省", "children": [{ "value": 340100, "pid": 340000, "label": "合肥市", "children": [{ "value": 340102, "pid": 340100, "label": "瑶海区", }, { "value": 340103, "pid": 340100, "label": "庐阳区", }, { "value": 340104, "pid": 340100, "label": "蜀山区", }, { "value": 340111, "pid": 340100, "label": "包河区", }, { "value": 340121, "pid": 340100, "label": "长丰县", }, { "value": 340122, "pid": 340100, "label": "肥东县", }, { "value": 340123, "pid": 340100, "label": "肥西县", }, { "value": 340124, "pid": 340100, "label": "庐江县", }, { "value": 340181, "pid": 340100, "label": "巢湖市", }, { "value": 340184, "pid": 340100, "label": "经济开发区", }, { "value": 340185, "pid": 340100, "label": "高新区", }, { "value": 340186, "pid": 340100, "label": "北城新区", }, { "value": 340187, "pid": 340100, "label": "滨湖新区", }, { "value": 340188, "pid": 340100, "label": "政务文化新区", }, { "value": 340189, "pid": 340100, "label": "新站综合开发试验区", }] }, { "value": 340200, "pid": 340000, "label": "芜湖市", "children": [{ "value": 340202, "pid": 340200, "label": "镜湖区", }, { "value": 340203, "pid": 340200, "label": "弋江区", }, { "value": 340207, "pid": 340200, "label": "鸠江区", }, { "value": 340208, "pid": 340200, "label": "三山区", }, { "value": 340221, "pid": 340200, "label": "芜湖县", }, { "value": 340222, "pid": 340200, "label": "繁昌县", }, { "value": 340223, "pid": 340200, "label": "南陵县", }, { "value": 340225, "pid": 340200, "label": "无为县", }, { "value": 340226, "pid": 340200, "label": "经济开发区", }, { "value": 340227, "pid": 340200, "label": "城东新区", }] }, { "value": 340300, "pid": 340000, "label": "蚌埠市", "children": [{ "value": 340302, "pid": 340300, "label": "龙子湖区", }, { "value": 340303, "pid": 340300, "label": "蚌山区", }, { "value": 340304, "pid": 340300, "label": "禹会区", }, { "value": 340311, "pid": 340300, "label": "淮上区", }, { "value": 340321, "pid": 340300, "label": "怀远县", }, { "value": 340322, "pid": 340300, "label": "五河县", }, { "value": 340323, "pid": 340300, "label": "固镇县", }, { "value": 340324, "pid": 340300, "label": "高新区", }] }, { "value": 340400, "pid": 340000, "label": "淮南市", "children": [{ "value": 340402, "pid": 340400, "label": "大通区", }, { "value": 340403, "pid": 340400, "label": "田家庵区", }, { "value": 340404, "pid": 340400, "label": "谢家集区", }, { "value": 340405, "pid": 340400, "label": "八公山区", }, { "value": 340406, "pid": 340400, "label": "潘集区", }, { "value": 340421, "pid": 340400, "label": "凤台县", }, { "value": 340422, "pid": 340400, "label": "寿县", }, { "value": 340423, "pid": 340400, "label": "山南新区", }, { "value": 340424, "pid": 340400, "label": "毛集实验区", }, { "value": 340425, "pid": 340400, "label": "经济开发区", }] }, { "value": 340500, "pid": 340000, "label": "马鞍山市", "children": [{ "value": 340503, "pid": 340500, "label": "花山区", }, { "value": 340504, "pid": 340500, "label": "雨山区", }, { "value": 340506, "pid": 340500, "label": "博望区", }, { "value": 340521, "pid": 340500, "label": "当涂县", }, { "value": 340522, "pid": 340500, "label": "含山县", }, { "value": 340523, "pid": 340500, "label": "和县", }] }, { "value": 340600, "pid": 340000, "label": "淮北市", "children": [{ "value": 340602, "pid": 340600, "label": "杜集区", }, { "value": 340603, "pid": 340600, "label": "相山区", }, { "value": 340604, "pid": 340600, "label": "烈山区", }, { "value": 340621, "pid": 340600, "label": "濉溪县", }] }, { "value": 340700, "pid": 340000, "label": "铜陵市", "children": [{ "value": 340705, "pid": 340700, "label": "铜官区", }, { "value": 340706, "pid": 340700, "label": "义安区", }, { "value": 340711, "pid": 340700, "label": "郊区", }, { "value": 340722, "pid": 340700, "label": "枞阳县", }] }, { "value": 340800, "pid": 340000, "label": "安庆市", "children": [{ "value": 340802, "pid": 340800, "label": "迎江区", }, { "value": 340803, "pid": 340800, "label": "大观区", }, { "value": 340811, "pid": 340800, "label": "宜秀区", }, { "value": 340822, "pid": 340800, "label": "怀宁县", }, { "value": 340825, "pid": 340800, "label": "太湖县", }, { "value": 340826, "pid": 340800, "label": "宿松县", }, { "value": 340827, "pid": 340800, "label": "望江县", }, { "value": 340828, "pid": 340800, "label": "岳西县", }, { "value": 340881, "pid": 340800, "label": "桐城市", }, { "value": 340882, "pid": 340800, "label": "潜山市", }] }, { "value": 341000, "pid": 340000, "label": "黄山市", "children": [{ "value": 341002, "pid": 341000, "label": "屯溪区", }, { "value": 341003, "pid": 341000, "label": "黄山区", }, { "value": 341004, "pid": 341000, "label": "徽州区", }, { "value": 341021, "pid": 341000, "label": "歙县", }, { "value": 341022, "pid": 341000, "label": "休宁县", }, { "value": 341023, "pid": 341000, "label": "黟县", }, { "value": 341024, "pid": 341000, "label": "祁门县", }] }, { "value": 341100, "pid": 340000, "label": "滁州市", "children": [{ "value": 341102, "pid": 341100, "label": "琅琊区", }, { "value": 341103, "pid": 341100, "label": "南谯区", }, { "value": 341122, "pid": 341100, "label": "来安县", }, { "value": 341124, "pid": 341100, "label": "全椒县", }, { "value": 341125, "pid": 341100, "label": "定远县", }, { "value": 341126, "pid": 341100, "label": "凤阳县", }, { "value": 341181, "pid": 341100, "label": "天长市", }, { "value": 341182, "pid": 341100, "label": "明光市", }] }, { "value": 341200, "pid": 340000, "label": "阜阳市", "children": [{ "value": 341202, "pid": 341200, "label": "颍州区", }, { "value": 341203, "pid": 341200, "label": "颍东区", }, { "value": 341204, "pid": 341200, "label": "颍泉区", }, { "value": 341221, "pid": 341200, "label": "临泉县", }, { "value": 341222, "pid": 341200, "label": "太和县", }, { "value": 341225, "pid": 341200, "label": "阜南县", }, { "value": 341226, "pid": 341200, "label": "颍上县", }, { "value": 341282, "pid": 341200, "label": "界首市", }, { "value": 341283, "pid": 341200, "label": "经济开发区", }, { "value": 341284, "pid": 341200, "label": "苏滁现代产业园", }] }, { "value": 341300, "pid": 340000, "label": "宿州市", "children": [{ "value": 341302, "pid": 341300, "label": "埇桥区", }, { "value": 341321, "pid": 341300, "label": "砀山县", }, { "value": 341322, "pid": 341300, "label": "萧县", }, { "value": 341323, "pid": 341300, "label": "灵璧县", }, { "value": 341324, "pid": 341300, "label": "泗县", }, { "value": 341325, "pid": 341300, "label": "经济开发区", }, { "value": 341371, "pid": 341300, "label": "宿马现代产业园", }] }, { "value": 341500, "pid": 340000, "label": "六安市", "children": [{ "value": 341502, "pid": 341500, "label": "金安区", }, { "value": 341503, "pid": 341500, "label": "裕安区", }, { "value": 341504, "pid": 341500, "label": "叶集区", }, { "value": 341522, "pid": 341500, "label": "霍邱县", }, { "value": 341523, "pid": 341500, "label": "舒城县", }, { "value": 341524, "pid": 341500, "label": "金寨县", }, { "value": 341525, "pid": 341500, "label": "霍山县", }] }, { "value": 341600, "pid": 340000, "label": "亳州市", "children": [{ "value": 341602, "pid": 341600, "label": "谯城区", }, { "value": 341621, "pid": 341600, "label": "涡阳县", }, { "value": 341622, "pid": 341600, "label": "蒙城县", }, { "value": 341623, "pid": 341600, "label": "利辛县", }] }, { "value": 341700, "pid": 340000, "label": "池州市", "children": [{ "value": 341702, "pid": 341700, "label": "贵池区", }, { "value": 341721, "pid": 341700, "label": "东至县", }, { "value": 341722, "pid": 341700, "label": "石台县", }, { "value": 341723, "pid": 341700, "label": "青阳县", }] }, { "value": 341800, "pid": 340000, "label": "宣城市", "children": [{ "value": 341802, "pid": 341800, "label": "宣州区", }, { "value": 341821, "pid": 341800, "label": "郎溪县", }, { "value": 341822, "pid": 341800, "label": "广德县", }, { "value": 341823, "pid": 341800, "label": "泾县", }, { "value": 341824, "pid": 341800, "label": "绩溪县", }, { "value": 341825, "pid": 341800, "label": "旌德县", }, { "value": 341881, "pid": 341800, "label": "宁国市", }] }] }, { "value": 350000, "pid": 100000, "label": "福建省", "children": [{ "value": 350100, "pid": 350000, "label": "福州市", "children": [{ "value": 350102, "pid": 350100, "label": "鼓楼区", }, { "value": 350103, "pid": 350100, "label": "台江区", }, { "value": 350104, "pid": 350100, "label": "仓山区", }, { "value": 350105, "pid": 350100, "label": "马尾区", }, { "value": 350111, "pid": 350100, "label": "晋安区", }, { "value": 350112, "pid": 350100, "label": "长乐区", }, { "value": 350121, "pid": 350100, "label": "闽侯县", }, { "value": 350122, "pid": 350100, "label": "连江县", }, { "value": 350123, "pid": 350100, "label": "罗源县", }, { "value": 350124, "pid": 350100, "label": "闽清县", }, { "value": 350125, "pid": 350100, "label": "永泰县", }, { "value": 350128, "pid": 350100, "label": "平潭县", }, { "value": 350181, "pid": 350100, "label": "福清市", }, { "value": 350183, "pid": 350100, "label": "福州新区", }] }, { "value": 350200, "pid": 350000, "label": "厦门市", "children": [{ "value": 350203, "pid": 350200, "label": "思明区", }, { "value": 350205, "pid": 350200, "label": "海沧区", }, { "value": 350206, "pid": 350200, "label": "湖里区", }, { "value": 350211, "pid": 350200, "label": "集美区", }, { "value": 350212, "pid": 350200, "label": "同安区", }, { "value": 350213, "pid": 350200, "label": "翔安区", }] }, { "value": 350300, "pid": 350000, "label": "莆田市", "children": [{ "value": 350302, "pid": 350300, "label": "城厢区", }, { "value": 350303, "pid": 350300, "label": "涵江区", }, { "value": 350304, "pid": 350300, "label": "荔城区", }, { "value": 350305, "pid": 350300, "label": "秀屿区", }, { "value": 350322, "pid": 350300, "label": "仙游县", }] }, { "value": 350400, "pid": 350000, "label": "三明市", "children": [{ "value": 350402, "pid": 350400, "label": "梅列区", }, { "value": 350403, "pid": 350400, "label": "三元区", }, { "value": 350421, "pid": 350400, "label": "明溪县", }, { "value": 350423, "pid": 350400, "label": "清流县", }, { "value": 350424, "pid": 350400, "label": "宁化县", }, { "value": 350425, "pid": 350400, "label": "大田县", }, { "value": 350426, "pid": 350400, "label": "尤溪县", }, { "value": 350427, "pid": 350400, "label": "沙县", }, { "value": 350428, "pid": 350400, "label": "将乐县", }, { "value": 350429, "pid": 350400, "label": "泰宁县", }, { "value": 350430, "pid": 350400, "label": "建宁县", }, { "value": 350481, "pid": 350400, "label": "永安市", }] }, { "value": 350500, "pid": 350000, "label": "泉州市", "children": [{ "value": 350502, "pid": 350500, "label": "鲤城区", }, { "value": 350503, "pid": 350500, "label": "丰泽区", }, { "value": 350504, "pid": 350500, "label": "洛江区", }, { "value": 350505, "pid": 350500, "label": "泉港区", }, { "value": 350521, "pid": 350500, "label": "惠安县", }, { "value": 350524, "pid": 350500, "label": "安溪县", }, { "value": 350525, "pid": 350500, "label": "永春县", }, { "value": 350526, "pid": 350500, "label": "德化县", }, { "value": 350527, "pid": 350500, "label": "金门县", }, { "value": 350581, "pid": 350500, "label": "石狮市", }, { "value": 350582, "pid": 350500, "label": "晋江市", }, { "value": 350583, "pid": 350500, "label": "南安市", }, { "value": 350584, "pid": 350500, "label": "台商投资区", }, { "value": 350585, "pid": 350500, "label": "经济技术开发区", }, { "value": 350586, "pid": 350500, "label": "高新区", }, { "value": 350587, "pid": 350500, "label": "综合保税区", }] }, { "value": 350600, "pid": 350000, "label": "漳州市", "children": [{ "value": 350602, "pid": 350600, "label": "芗城区", }, { "value": 350603, "pid": 350600, "label": "龙文区", }, { "value": 350622, "pid": 350600, "label": "云霄县", }, { "value": 350623, "pid": 350600, "label": "漳浦县", }, { "value": 350624, "pid": 350600, "label": "诏安县", }, { "value": 350625, "pid": 350600, "label": "长泰县", }, { "value": 350626, "pid": 350600, "label": "东山县", }, { "value": 350627, "pid": 350600, "label": "南靖县", }, { "value": 350628, "pid": 350600, "label": "平和县", }, { "value": 350629, "pid": 350600, "label": "华安县", }, { "value": 350681, "pid": 350600, "label": "龙海市", }] }, { "value": 350700, "pid": 350000, "label": "南平市", "children": [{ "value": 350702, "pid": 350700, "label": "延平区", }, { "value": 350703, "pid": 350700, "label": "建阳区", }, { "value": 350721, "pid": 350700, "label": "顺昌县", }, { "value": 350722, "pid": 350700, "label": "浦城县", }, { "value": 350723, "pid": 350700, "label": "光泽县", }, { "value": 350724, "pid": 350700, "label": "松溪县", }, { "value": 350725, "pid": 350700, "label": "政和县", }, { "value": 350781, "pid": 350700, "label": "邵武市", }, { "value": 350782, "pid": 350700, "label": "武夷山市", }, { "value": 350783, "pid": 350700, "label": "建瓯市", }] }, { "value": 350800, "pid": 350000, "label": "龙岩市", "children": [{ "value": 350802, "pid": 350800, "label": "新罗区", }, { "value": 350803, "pid": 350800, "label": "永定区", }, { "value": 350821, "pid": 350800, "label": "长汀县", }, { "value": 350823, "pid": 350800, "label": "上杭县", }, { "value": 350824, "pid": 350800, "label": "武平县", }, { "value": 350825, "pid": 350800, "label": "连城县", }, { "value": 350881, "pid": 350800, "label": "漳平市", }] }, { "value": 350900, "pid": 350000, "label": "宁德市", "children": [{ "value": 350902, "pid": 350900, "label": "蕉城区", }, { "value": 350921, "pid": 350900, "label": "霞浦县", }, { "value": 350922, "pid": 350900, "label": "古田县", }, { "value": 350923, "pid": 350900, "label": "屏南县", }, { "value": 350924, "pid": 350900, "label": "寿宁县", }, { "value": 350925, "pid": 350900, "label": "周宁县", }, { "value": 350926, "pid": 350900, "label": "柘荣县", }, { "value": 350981, "pid": 350900, "label": "福安市", }, { "value": 350982, "pid": 350900, "label": "福鼎市", }, { "value": 350983, "pid": 350900, "label": "东侨开发区", }] }] }, { "value": 360000, "pid": 100000, "label": "江西省", "children": [{ "value": 360100, "pid": 360000, "label": "南昌市", "children": [{ "value": 360102, "pid": 360100, "label": "东湖区", }, { "value": 360103, "pid": 360100, "label": "西湖区", }, { "value": 360104, "pid": 360100, "label": "青云谱区", }, { "value": 360105, "pid": 360100, "label": "湾里区", }, { "value": 360111, "pid": 360100, "label": "青山湖区", }, { "value": 360112, "pid": 360100, "label": "新建区", }, { "value": 360121, "pid": 360100, "label": "南昌县", }, { "value": 360123, "pid": 360100, "label": "安义县", }, { "value": 360124, "pid": 360100, "label": "进贤县", }, { "value": 360125, "pid": 360100, "label": "红谷滩新区", }, { "value": 360126, "pid": 360100, "label": "高新区", }, { "value": 360127, "pid": 360100, "label": "经济开发区", }, { "value": 360128, "pid": 360100, "label": "小蓝开发区", }, { "value": 360129, "pid": 360100, "label": "桑海开发区", }, { "value": 360130, "pid": 360100, "label": "望城新区", }, { "value": 360131, "pid": 360100, "label": "赣江新区", }] }, { "value": 360200, "pid": 360000, "label": "景德镇市", "children": [{ "value": 360202, "pid": 360200, "label": "昌江区", }, { "value": 360203, "pid": 360200, "label": "珠山区", }, { "value": 360222, "pid": 360200, "label": "浮梁县", }, { "value": 360281, "pid": 360200, "label": "乐平市", }] }, { "value": 360300, "pid": 360000, "label": "萍乡市", "children": [{ "value": 360302, "pid": 360300, "label": "安源区", }, { "value": 360313, "pid": 360300, "label": "湘东区", }, { "value": 360321, "pid": 360300, "label": "莲花县", }, { "value": 360322, "pid": 360300, "label": "上栗县", }, { "value": 360323, "pid": 360300, "label": "芦溪县", }] }, { "value": 360400, "pid": 360000, "label": "九江市", "children": [{ "value": 360402, "pid": 360400, "label": "濂溪区", }, { "value": 360403, "pid": 360400, "label": "浔阳区", }, { "value": 360404, "pid": 360400, "label": "柴桑区", }, { "value": 360423, "pid": 360400, "label": "武宁县", }, { "value": 360424, "pid": 360400, "label": "修水县", }, { "value": 360425, "pid": 360400, "label": "永修县", }, { "value": 360426, "pid": 360400, "label": "德安县", }, { "value": 360428, "pid": 360400, "label": "都昌县", }, { "value": 360429, "pid": 360400, "label": "湖口县", }, { "value": 360430, "pid": 360400, "label": "彭泽县", }, { "value": 360481, "pid": 360400, "label": "瑞昌市", }, { "value": 360482, "pid": 360400, "label": "共青城市", }, { "value": 360483, "pid": 360400, "label": "庐山市", }, { "value": 360484, "pid": 360400, "label": "经济技术开发区", }, { "value": 360485, "pid": 360400, "label": "八里湖新区", }, { "value": 360486, "pid": 360400, "label": "庐山风景名胜区", }] }, { "value": 360500, "pid": 360000, "label": "新余市", "children": [{ "value": 360502, "pid": 360500, "label": "渝水区", }, { "value": 360521, "pid": 360500, "label": "分宜县", }] }, { "value": 360600, "pid": 360000, "label": "鹰潭市", "children": [{ "value": 360602, "pid": 360600, "label": "月湖区", }, { "value": 360603, "pid": 360600, "label": "余江区", }, { "value": 360681, "pid": 360600, "label": "贵溪市", }, { "value": 360682, "pid": 360600, "label": "高新区", }] }, { "value": 360700, "pid": 360000, "label": "赣州市", "children": [{ "value": 360702, "pid": 360700, "label": "章贡区", }, { "value": 360703, "pid": 360700, "label": "南康区", }, { "value": 360704, "pid": 360700, "label": "赣县区", }, { "value": 360722, "pid": 360700, "label": "信丰县", }, { "value": 360723, "pid": 360700, "label": "大余县", }, { "value": 360724, "pid": 360700, "label": "上犹县", }, { "value": 360725, "pid": 360700, "label": "崇义县", }, { "value": 360726, "pid": 360700, "label": "安远县", }, { "value": 360727, "pid": 360700, "label": "龙南县", }, { "value": 360728, "pid": 360700, "label": "定南县", }, { "value": 360729, "pid": 360700, "label": "全南县", }, { "value": 360730, "pid": 360700, "label": "宁都县", }, { "value": 360731, "pid": 360700, "label": "于都县", }, { "value": 360732, "pid": 360700, "label": "兴国县", }, { "value": 360733, "pid": 360700, "label": "会昌县", }, { "value": 360734, "pid": 360700, "label": "寻乌县", }, { "value": 360735, "pid": 360700, "label": "石城县", }, { "value": 360781, "pid": 360700, "label": "瑞金市", }, { "value": 360782, "pid": 360700, "label": "章康新区", }] }, { "value": 360800, "pid": 360000, "label": "吉安市", "children": [{ "value": 360802, "pid": 360800, "label": "吉州区", }, { "value": 360803, "pid": 360800, "label": "青原区", }, { "value": 360821, "pid": 360800, "label": "吉安县", }, { "value": 360822, "pid": 360800, "label": "吉水县", }, { "value": 360823, "pid": 360800, "label": "峡江县", }, { "value": 360824, "pid": 360800, "label": "新干县", }, { "value": 360825, "pid": 360800, "label": "永丰县", }, { "value": 360826, "pid": 360800, "label": "泰和县", }, { "value": 360827, "pid": 360800, "label": "遂川县", }, { "value": 360828, "pid": 360800, "label": "万安县", }, { "value": 360829, "pid": 360800, "label": "安福县", }, { "value": 360830, "pid": 360800, "label": "永新县", }, { "value": 360881, "pid": 360800, "label": "井冈山市", }] }, { "value": 360900, "pid": 360000, "label": "宜春市", "children": [{ "value": 360902, "pid": 360900, "label": "袁州区", }, { "value": 360921, "pid": 360900, "label": "奉新县", }, { "value": 360922, "pid": 360900, "label": "万载县", }, { "value": 360923, "pid": 360900, "label": "上高县", }, { "value": 360924, "pid": 360900, "label": "宜丰县", }, { "value": 360925, "pid": 360900, "label": "靖安县", }, { "value": 360926, "pid": 360900, "label": "铜鼓县", }, { "value": 360981, "pid": 360900, "label": "丰城市", }, { "value": 360982, "pid": 360900, "label": "樟树市", }, { "value": 360983, "pid": 360900, "label": "高安市", }] }, { "value": 361000, "pid": 360000, "label": "抚州市", "children": [{ "value": 361002, "pid": 361000, "label": "临川区", }, { "value": 361003, "pid": 361000, "label": "东乡区", }, { "value": 361021, "pid": 361000, "label": "南城县", }, { "value": 361022, "pid": 361000, "label": "黎川县", }, { "value": 361023, "pid": 361000, "label": "南丰县", }, { "value": 361024, "pid": 361000, "label": "崇仁县", }, { "value": 361025, "pid": 361000, "label": "乐安县", }, { "value": 361026, "pid": 361000, "label": "宜黄县", }, { "value": 361027, "pid": 361000, "label": "金溪县", }, { "value": 361028, "pid": 361000, "label": "资溪县", }, { "value": 361030, "pid": 361000, "label": "广昌县", }] }, { "value": 361100, "pid": 360000, "label": "上饶市", "children": [{ "value": 361102, "pid": 361100, "label": "信州区", }, { "value": 361103, "pid": 361100, "label": "广丰区", }, { "value": 361121, "pid": 361100, "label": "上饶县", }, { "value": 361123, "pid": 361100, "label": "玉山县", }, { "value": 361124, "pid": 361100, "label": "铅山县", }, { "value": 361125, "pid": 361100, "label": "横峰县", }, { "value": 361126, "pid": 361100, "label": "弋阳县", }, { "value": 361127, "pid": 361100, "label": "余干县", }, { "value": 361128, "pid": 361100, "label": "鄱阳县", }, { "value": 361129, "pid": 361100, "label": "万年县", }, { "value": 361130, "pid": 361100, "label": "婺源县", }, { "value": 361181, "pid": 361100, "label": "德兴市", }] }] }, { "value": 370000, "pid": 100000, "label": "山东省", "children": [{ "value": 370100, "pid": 370000, "label": "济南市", "children": [{ "value": 370102, "pid": 370100, "label": "历下区", }, { "value": 370103, "pid": 370100, "label": "市中区", }, { "value": 370104, "pid": 370100, "label": "槐荫区", }, { "value": 370105, "pid": 370100, "label": "天桥区", }, { "value": 370112, "pid": 370100, "label": "历城区", }, { "value": 370113, "pid": 370100, "label": "长清区", }, { "value": 370114, "pid": 370100, "label": "章丘区", }, { "value": 370115, "pid": 370100, "label": "济阳区", }, { "value": 370116, "pid": 370100, "label": "莱芜区", }, { "value": 370117, "pid": 370100, "label": "钢城区", }, { "value": 370124, "pid": 370100, "label": "平阴县", }, { "value": 370126, "pid": 370100, "label": "商河县", }, { "value": 370182, "pid": 370100, "label": "高新区", }] }, { "value": 370200, "pid": 370000, "label": "青岛市", "children": [{ "value": 370202, "pid": 370200, "label": "市南区", }, { "value": 370203, "pid": 370200, "label": "市北区", }, { "value": 370211, "pid": 370200, "label": "黄岛区", }, { "value": 370212, "pid": 370200, "label": "崂山区", }, { "value": 370213, "pid": 370200, "label": "李沧区", }, { "value": 370214, "pid": 370200, "label": "城阳区", }, { "value": 370215, "pid": 370200, "label": "即墨区", }, { "value": 370281, "pid": 370200, "label": "胶州市", }, { "value": 370283, "pid": 370200, "label": "平度市", }, { "value": 370285, "pid": 370200, "label": "莱西市", }, { "value": 370286, "pid": 370200, "label": "西海岸新区", }, { "value": 370287, "pid": 370200, "label": "高新区", }] }, { "value": 370300, "pid": 370000, "label": "淄博市", "children": [{ "value": 370302, "pid": 370300, "label": "淄川区", }, { "value": 370303, "pid": 370300, "label": "张店区", }, { "value": 370304, "pid": 370300, "label": "博山区", }, { "value": 370305, "pid": 370300, "label": "临淄区", }, { "value": 370306, "pid": 370300, "label": "周村区", }, { "value": 370321, "pid": 370300, "label": "桓台县", }, { "value": 370322, "pid": 370300, "label": "高青县", }, { "value": 370323, "pid": 370300, "label": "沂源县", }, { "value": 370324, "pid": 370300, "label": "高新区", }] }, { "value": 370400, "pid": 370000, "label": "枣庄市", "children": [{ "value": 370402, "pid": 370400, "label": "市中区", }, { "value": 370403, "pid": 370400, "label": "薛城区", }, { "value": 370404, "pid": 370400, "label": "峄城区", }, { "value": 370405, "pid": 370400, "label": "台儿庄区", }, { "value": 370406, "pid": 370400, "label": "山亭区", }, { "value": 370481, "pid": 370400, "label": "滕州市", }, { "value": 370482, "pid": 370400, "label": "高新区", }] }, { "value": 370500, "pid": 370000, "label": "东营市", "children": [{ "value": 370502, "pid": 370500, "label": "东营区", }, { "value": 370503, "pid": 370500, "label": "河口区", }, { "value": 370505, "pid": 370500, "label": "垦利区", }, { "value": 370522, "pid": 370500, "label": "利津县", }, { "value": 370523, "pid": 370500, "label": "广饶县", }] }, { "value": 370600, "pid": 370000, "label": "烟台市", "children": [{ "value": 370602, "pid": 370600, "label": "芝罘区", }, { "value": 370611, "pid": 370600, "label": "福山区", }, { "value": 370612, "pid": 370600, "label": "牟平区", }, { "value": 370613, "pid": 370600, "label": "莱山区", }, { "value": 370634, "pid": 370600, "label": "长岛县", }, { "value": 370681, "pid": 370600, "label": "龙口市", }, { "value": 370682, "pid": 370600, "label": "莱阳市", }, { "value": 370683, "pid": 370600, "label": "莱州市", }, { "value": 370684, "pid": 370600, "label": "蓬莱市", }, { "value": 370685, "pid": 370600, "label": "招远市", }, { "value": 370686, "pid": 370600, "label": "栖霞市", }, { "value": 370687, "pid": 370600, "label": "海阳市", }, { "value": 370688, "pid": 370600, "label": "高新区", }, { "value": 370689, "pid": 370600, "label": "经济开发区", }] }, { "value": 370700, "pid": 370000, "label": "潍坊市", "children": [{ "value": 370702, "pid": 370700, "label": "潍城区", }, { "value": 370703, "pid": 370700, "label": "寒亭区", }, { "value": 370704, "pid": 370700, "label": "坊子区", }, { "value": 370705, "pid": 370700, "label": "奎文区", }, { "value": 370724, "pid": 370700, "label": "临朐县", }, { "value": 370725, "pid": 370700, "label": "昌乐县", }, { "value": 370781, "pid": 370700, "label": "青州市", }, { "value": 370782, "pid": 370700, "label": "诸城市", }, { "value": 370783, "pid": 370700, "label": "寿光市", }, { "value": 370784, "pid": 370700, "label": "安丘市", }, { "value": 370785, "pid": 370700, "label": "高密市", }, { "value": 370786, "pid": 370700, "label": "昌邑市", }, { "value": 370787, "pid": 370700, "label": "高新区", }] }, { "value": 370800, "pid": 370000, "label": "济宁市", "children": [{ "value": 370811, "pid": 370800, "label": "任城区", }, { "value": 370812, "pid": 370800, "label": "兖州区", }, { "value": 370826, "pid": 370800, "label": "微山县", }, { "value": 370827, "pid": 370800, "label": "鱼台县", }, { "value": 370828, "pid": 370800, "label": "金乡县", }, { "value": 370829, "pid": 370800, "label": "嘉祥县", }, { "value": 370830, "pid": 370800, "label": "汶上县", }, { "value": 370831, "pid": 370800, "label": "泗水县", }, { "value": 370832, "pid": 370800, "label": "梁山县", }, { "value": 370881, "pid": 370800, "label": "曲阜市", }, { "value": 370883, "pid": 370800, "label": "邹城市", }, { "value": 370884, "pid": 370800, "label": "高新区", }] }, { "value": 370900, "pid": 370000, "label": "泰安市", "children": [{ "value": 370902, "pid": 370900, "label": "泰山区", }, { "value": 370911, "pid": 370900, "label": "岱岳区", }, { "value": 370921, "pid": 370900, "label": "宁阳县", }, { "value": 370923, "pid": 370900, "label": "东平县", }, { "value": 370982, "pid": 370900, "label": "新泰市", }, { "value": 370983, "pid": 370900, "label": "肥城市", }] }, { "value": 371000, "pid": 370000, "label": "威海市", "children": [{ "value": 371002, "pid": 371000, "label": "环翠区", }, { "value": 371003, "pid": 371000, "label": "文登区", }, { "value": 371082, "pid": 371000, "label": "荣成市", }, { "value": 371083, "pid": 371000, "label": "乳山市", }, { "value": 371084, "pid": 371000, "label": "火炬高新区", }, { "value": 371085, "pid": 371000, "label": "经济技术开发区", }, { "value": 371086, "pid": 371000, "label": "临港经济技术开发区", }] }, { "value": 371100, "pid": 370000, "label": "日照市", "children": [{ "value": 371102, "pid": 371100, "label": "东港区", }, { "value": 371103, "pid": 371100, "label": "岚山区", }, { "value": 371121, "pid": 371100, "label": "五莲县", }, { "value": 371122, "pid": 371100, "label": "莒县", }] }, { "value": 371300, "pid": 370000, "label": "临沂市", "children": [{ "value": 371302, "pid": 371300, "label": "兰山区", }, { "value": 371311, "pid": 371300, "label": "罗庄区", }, { "value": 371312, "pid": 371300, "label": "河东区", }, { "value": 371321, "pid": 371300, "label": "沂南县", }, { "value": 371322, "pid": 371300, "label": "郯城县", }, { "value": 371323, "pid": 371300, "label": "沂水县", }, { "value": 371324, "pid": 371300, "label": "兰陵县", }, { "value": 371325, "pid": 371300, "label": "费县", }, { "value": 371326, "pid": 371300, "label": "平邑县", }, { "value": 371327, "pid": 371300, "label": "莒南县", }, { "value": 371328, "pid": 371300, "label": "蒙阴县", }, { "value": 371329, "pid": 371300, "label": "临沭县", }] }, { "value": 371400, "pid": 370000, "label": "德州市", "children": [{ "value": 371402, "pid": 371400, "label": "德城区", }, { "value": 371403, "pid": 371400, "label": "陵城区", }, { "value": 371422, "pid": 371400, "label": "宁津县", }, { "value": 371423, "pid": 371400, "label": "庆云县", }, { "value": 371424, "pid": 371400, "label": "临邑县", }, { "value": 371425, "pid": 371400, "label": "齐河县", }, { "value": 371426, "pid": 371400, "label": "平原县", }, { "value": 371427, "pid": 371400, "label": "夏津县", }, { "value": 371428, "pid": 371400, "label": "武城县", }, { "value": 371481, "pid": 371400, "label": "乐陵市", }, { "value": 371482, "pid": 371400, "label": "禹城市", }] }, { "value": 371500, "pid": 370000, "label": "聊城市", "children": [{ "value": 371502, "pid": 371500, "label": "东昌府区", }, { "value": 371521, "pid": 371500, "label": "阳谷县", }, { "value": 371522, "pid": 371500, "label": "莘县", }, { "value": 371523, "pid": 371500, "label": "茌平县", }, { "value": 371524, "pid": 371500, "label": "东阿县", }, { "value": 371525, "pid": 371500, "label": "冠县", }, { "value": 371526, "pid": 371500, "label": "高唐县", }, { "value": 371581, "pid": 371500, "label": "临清市", }] }, { "value": 371600, "pid": 370000, "label": "滨州市", "children": [{ "value": 371602, "pid": 371600, "label": "滨城区", }, { "value": 371603, "pid": 371600, "label": "沾化区", }, { "value": 371621, "pid": 371600, "label": "惠民县", }, { "value": 371622, "pid": 371600, "label": "阳信县", }, { "value": 371623, "pid": 371600, "label": "无棣县", }, { "value": 371625, "pid": 371600, "label": "博兴县", }, { "value": 371681, "pid": 371600, "label": "邹平市", }, { "value": 371682, "pid": 371600, "label": "北海新区", }] }, { "value": 371700, "pid": 370000, "label": "菏泽市", "children": [{ "value": 371702, "pid": 371700, "label": "牡丹区", }, { "value": 371703, "pid": 371700, "label": "定陶区", }, { "value": 371721, "pid": 371700, "label": "曹县", }, { "value": 371722, "pid": 371700, "label": "单县", }, { "value": 371723, "pid": 371700, "label": "成武县", }, { "value": 371724, "pid": 371700, "label": "巨野县", }, { "value": 371725, "pid": 371700, "label": "郓城县", }, { "value": 371726, "pid": 371700, "label": "鄄城县", }, { "value": 371728, "pid": 371700, "label": "东明县", }, { "value": 371772, "pid": 371700, "label": "高新开发区", }] }] }, { "value": 410000, "pid": 100000, "label": "河南省", "children": [{ "value": 410100, "pid": 410000, "label": "郑州市", "children": [{ "value": 410102, "pid": 410100, "label": "中原区", }, { "value": 410103, "pid": 410100, "label": "二七区", }, { "value": 410104, "pid": 410100, "label": "管城回族区", }, { "value": 410105, "pid": 410100, "label": "金水区", }, { "value": 410106, "pid": 410100, "label": "上街区", }, { "value": 410108, "pid": 410100, "label": "惠济区", }, { "value": 410122, "pid": 410100, "label": "中牟县", }, { "value": 410181, "pid": 410100, "label": "巩义市", }, { "value": 410182, "pid": 410100, "label": "荥阳市", }, { "value": 410183, "pid": 410100, "label": "新密市", }, { "value": 410184, "pid": 410100, "label": "新郑市", }, { "value": 410185, "pid": 410100, "label": "登封市", }, { "value": 410186, "pid": 410100, "label": "郑东新区", }, { "value": 410187, "pid": 410100, "label": "郑汴新区", }, { "value": 410188, "pid": 410100, "label": "高新开发区", }, { "value": 410189, "pid": 410100, "label": "经济开发区", }, { "value": 410190, "pid": 410100, "label": "航空港区", }] }, { "value": 410200, "pid": 410000, "label": "开封市", "children": [{ "value": 410202, "pid": 410200, "label": "龙亭区", }, { "value": 410203, "pid": 410200, "label": "顺河回族区", }, { "value": 410204, "pid": 410200, "label": "鼓楼区", }, { "value": 410205, "pid": 410200, "label": "禹王台区", }, { "value": 410212, "pid": 410200, "label": "祥符区", }, { "value": 410221, "pid": 410200, "label": "杞县", }, { "value": 410222, "pid": 410200, "label": "通许县", }, { "value": 410223, "pid": 410200, "label": "尉氏县", }, { "value": 410225, "pid": 410200, "label": "兰考县", }, { "value": 410226, "pid": 410200, "label": "经济技术开发区", }] }, { "value": 410300, "pid": 410000, "label": "洛阳市", "children": [{ "value": 410302, "pid": 410300, "label": "老城区", }, { "value": 410303, "pid": 410300, "label": "西工区", }, { "value": 410304, "pid": 410300, "label": "瀍河回族区", }, { "value": 410305, "pid": 410300, "label": "涧西区", }, { "value": 410306, "pid": 410300, "label": "吉利区", }, { "value": 410311, "pid": 410300, "label": "洛龙区", }, { "value": 410322, "pid": 410300, "label": "孟津县", }, { "value": 410323, "pid": 410300, "label": "新安县", }, { "value": 410324, "pid": 410300, "label": "栾川县", }, { "value": 410325, "pid": 410300, "label": "嵩县", }, { "value": 410326, "pid": 410300, "label": "汝阳县", }, { "value": 410327, "pid": 410300, "label": "宜阳县", }, { "value": 410328, "pid": 410300, "label": "洛宁县", }, { "value": 410329, "pid": 410300, "label": "伊川县", }, { "value": 410381, "pid": 410300, "label": "偃师市", }, { "value": 410382, "pid": 410300, "label": "洛阳新区", }, { "value": 410383, "pid": 410300, "label": "高新区", }] }, { "value": 410400, "pid": 410000, "label": "平顶山市", "children": [{ "value": 410402, "pid": 410400, "label": "新华区", }, { "value": 410403, "pid": 410400, "label": "卫东区", }, { "value": 410404, "pid": 410400, "label": "石龙区", }, { "value": 410411, "pid": 410400, "label": "湛河区", }, { "value": 410421, "pid": 410400, "label": "宝丰县", }, { "value": 410422, "pid": 410400, "label": "叶县", }, { "value": 410423, "pid": 410400, "label": "鲁山县", }, { "value": 410425, "pid": 410400, "label": "郏县", }, { "value": 410481, "pid": 410400, "label": "舞钢市", }, { "value": 410482, "pid": 410400, "label": "汝州市", }, { "value": 410483, "pid": 410400, "label": "高新区", }, { "value": 410484, "pid": 410400, "label": "新城区", }] }, { "value": 410500, "pid": 410000, "label": "安阳市", "children": [{ "value": 410502, "pid": 410500, "label": "文峰区", }, { "value": 410503, "pid": 410500, "label": "北关区", }, { "value": 410505, "pid": 410500, "label": "殷都区", }, { "value": 410506, "pid": 410500, "label": "龙安区", }, { "value": 410522, "pid": 410500, "label": "安阳县", }, { "value": 410523, "pid": 410500, "label": "汤阴县", }, { "value": 410526, "pid": 410500, "label": "滑县", }, { "value": 410527, "pid": 410500, "label": "内黄县", }, { "value": 410581, "pid": 410500, "label": "林州市", }, { "value": 410582, "pid": 410500, "label": "安阳新区", }] }, { "value": 410600, "pid": 410000, "label": "鹤壁市", "children": [{ "value": 410602, "pid": 410600, "label": "鹤山区", }, { "value": 410603, "pid": 410600, "label": "山城区", }, { "value": 410611, "pid": 410600, "label": "淇滨区", }, { "value": 410621, "pid": 410600, "label": "浚县", }, { "value": 410622, "pid": 410600, "label": "淇县", }] }, { "value": 410700, "pid": 410000, "label": "新乡市", "children": [{ "value": 410702, "pid": 410700, "label": "红旗区", }, { "value": 410703, "pid": 410700, "label": "卫滨区", }, { "value": 410704, "pid": 410700, "label": "凤泉区", }, { "value": 410711, "pid": 410700, "label": "牧野区", }, { "value": 410721, "pid": 410700, "label": "新乡县", }, { "value": 410724, "pid": 410700, "label": "获嘉县", }, { "value": 410725, "pid": 410700, "label": "原阳县", }, { "value": 410726, "pid": 410700, "label": "延津县", }, { "value": 410727, "pid": 410700, "label": "封丘县", }, { "value": 410728, "pid": 410700, "label": "长垣县", }, { "value": 410781, "pid": 410700, "label": "卫辉市", }, { "value": 410782, "pid": 410700, "label": "辉县市", }] }, { "value": 410800, "pid": 410000, "label": "焦作市", "children": [{ "value": 410802, "pid": 410800, "label": "解放区", }, { "value": 410803, "pid": 410800, "label": "中站区", }, { "value": 410804, "pid": 410800, "label": "马村区", }, { "value": 410811, "pid": 410800, "label": "山阳区", }, { "value": 410821, "pid": 410800, "label": "修武县", }, { "value": 410822, "pid": 410800, "label": "博爱县", }, { "value": 410823, "pid": 410800, "label": "武陟县", }, { "value": 410825, "pid": 410800, "label": "温县", }, { "value": 410882, "pid": 410800, "label": "沁阳市", }, { "value": 410883, "pid": 410800, "label": "孟州市", }] }, { "value": 410900, "pid": 410000, "label": "濮阳市", "children": [{ "value": 410902, "pid": 410900, "label": "华龙区", }, { "value": 410922, "pid": 410900, "label": "清丰县", }, { "value": 410923, "pid": 410900, "label": "南乐县", }, { "value": 410926, "pid": 410900, "label": "范县", }, { "value": 410927, "pid": 410900, "label": "台前县", }, { "value": 410928, "pid": 410900, "label": "濮阳县", }] }, { "value": 411000, "pid": 410000, "label": "许昌市", "children": [{ "value": 411002, "pid": 411000, "label": "魏都区", }, { "value": 411003, "pid": 411000, "label": "建安区", }, { "value": 411024, "pid": 411000, "label": "鄢陵县", }, { "value": 411025, "pid": 411000, "label": "襄城县", }, { "value": 411081, "pid": 411000, "label": "禹州市", }, { "value": 411082, "pid": 411000, "label": "长葛市", }] }, { "value": 411100, "pid": 410000, "label": "漯河市", "children": [{ "value": 411102, "pid": 411100, "label": "源汇区", }, { "value": 411103, "pid": 411100, "label": "郾城区", }, { "value": 411104, "pid": 411100, "label": "召陵区", }, { "value": 411121, "pid": 411100, "label": "舞阳县", }, { "value": 411122, "pid": 411100, "label": "临颍县", }] }, { "value": 411200, "pid": 410000, "label": "三门峡市", "children": [{ "value": 411202, "pid": 411200, "label": "湖滨区", }, { "value": 411203, "pid": 411200, "label": "陕州区", }, { "value": 411221, "pid": 411200, "label": "渑池县", }, { "value": 411224, "pid": 411200, "label": "卢氏县", }, { "value": 411281, "pid": 411200, "label": "义马市", }, { "value": 411282, "pid": 411200, "label": "灵宝市", }] }, { "value": 411300, "pid": 410000, "label": "南阳市", "children": [{ "value": 411302, "pid": 411300, "label": "宛城区", }, { "value": 411303, "pid": 411300, "label": "卧龙区", }, { "value": 411321, "pid": 411300, "label": "南召县", }, { "value": 411322, "pid": 411300, "label": "方城县", }, { "value": 411323, "pid": 411300, "label": "西峡县", }, { "value": 411324, "pid": 411300, "label": "镇平县", }, { "value": 411325, "pid": 411300, "label": "内乡县", }, { "value": 411326, "pid": 411300, "label": "淅川县", }, { "value": 411327, "pid": 411300, "label": "社旗县", }, { "value": 411328, "pid": 411300, "label": "唐河县", }, { "value": 411329, "pid": 411300, "label": "新野县", }, { "value": 411330, "pid": 411300, "label": "桐柏县", }, { "value": 411381, "pid": 411300, "label": "邓州市", }] }, { "value": 411400, "pid": 410000, "label": "商丘市", "children": [{ "value": 411402, "pid": 411400, "label": "梁园区", }, { "value": 411403, "pid": 411400, "label": "睢阳区", }, { "value": 411421, "pid": 411400, "label": "民权县", }, { "value": 411422, "pid": 411400, "label": "睢县", }, { "value": 411423, "pid": 411400, "label": "宁陵县", }, { "value": 411424, "pid": 411400, "label": "柘城县", }, { "value": 411425, "pid": 411400, "label": "虞城县", }, { "value": 411426, "pid": 411400, "label": "夏邑县", }, { "value": 411481, "pid": 411400, "label": "永城市", }] }, { "value": 411500, "pid": 410000, "label": "信阳市", "children": [{ "value": 411502, "pid": 411500, "label": "浉河区", }, { "value": 411503, "pid": 411500, "label": "平桥区", }, { "value": 411521, "pid": 411500, "label": "罗山县", }, { "value": 411522, "pid": 411500, "label": "光山县", }, { "value": 411523, "pid": 411500, "label": "新县", }, { "value": 411524, "pid": 411500, "label": "商城县", }, { "value": 411525, "pid": 411500, "label": "固始县", }, { "value": 411526, "pid": 411500, "label": "潢川县", }, { "value": 411527, "pid": 411500, "label": "淮滨县", }, { "value": 411528, "pid": 411500, "label": "息县", }] }, { "value": 411600, "pid": 410000, "label": "周口市", "children": [{ "value": 411602, "pid": 411600, "label": "川汇区", }, { "value": 411621, "pid": 411600, "label": "扶沟县", }, { "value": 411622, "pid": 411600, "label": "西华县", }, { "value": 411623, "pid": 411600, "label": "商水县", }, { "value": 411624, "pid": 411600, "label": "沈丘县", }, { "value": 411625, "pid": 411600, "label": "郸城县", }, { "value": 411626, "pid": 411600, "label": "淮阳县", }, { "value": 411627, "pid": 411600, "label": "太康县", }, { "value": 411628, "pid": 411600, "label": "鹿邑县", }, { "value": 411681, "pid": 411600, "label": "项城市", }, { "value": 411682, "pid": 411600, "label": "东新区", }, { "value": 411683, "pid": 411600, "label": "经济开发区", }] }, { "value": 411700, "pid": 410000, "label": "驻马店市", "children": [{ "value": 411702, "pid": 411700, "label": "驿城区", }, { "value": 411721, "pid": 411700, "label": "西平县", }, { "value": 411722, "pid": 411700, "label": "上蔡县", }, { "value": 411723, "pid": 411700, "label": "平舆县", }, { "value": 411724, "pid": 411700, "label": "正阳县", }, { "value": 411725, "pid": 411700, "label": "确山县", }, { "value": 411726, "pid": 411700, "label": "泌阳县", }, { "value": 411727, "pid": 411700, "label": "汝南县", }, { "value": 411728, "pid": 411700, "label": "遂平县", }, { "value": 411729, "pid": 411700, "label": "新蔡县", }, { "value": 411771, "pid": 411700, "label": "经济开发区", }] }, { "value": 419001, "pid": 410000, "label": "济源市", "children": [{ "value": 419011, "pid": 419001, "label": "沁园街道", }, { "value": 419012, "pid": 419001, "label": "济水街道", }, { "value": 419013, "pid": 419001, "label": "北海街道", }, { "value": 419014, "pid": 419001, "label": "天坛街道", }, { "value": 419015, "pid": 419001, "label": "玉泉街道", }, { "value": 419016, "pid": 419001, "label": "克井镇", }, { "value": 419017, "pid": 419001, "label": "五龙口镇", }, { "value": 419018, "pid": 419001, "label": "梨林镇", }, { "value": 419019, "pid": 419001, "label": "轵城镇", }, { "value": 419020, "pid": 419001, "label": "承留镇", }, { "value": 419021, "pid": 419001, "label": "坡头镇", }, { "value": 419022, "pid": 419001, "label": "大峪镇", }, { "value": 419023, "pid": 419001, "label": "邵原镇", }, { "value": 419024, "pid": 419001, "label": "思礼镇", }, { "value": 419025, "pid": 419001, "label": "王屋镇", }, { "value": 419026, "pid": 419001, "label": "下冶镇", }] }] }, { "value": 420000, "pid": 100000, "label": "湖北省", "children": [{ "value": 420100, "pid": 420000, "label": "武汉市", "children": [{ "value": 420102, "pid": 420100, "label": "江岸区", }, { "value": 420103, "pid": 420100, "label": "江汉区", }, { "value": 420104, "pid": 420100, "label": "硚口区", }, { "value": 420105, "pid": 420100, "label": "汉阳区", }, { "value": 420106, "pid": 420100, "label": "武昌区", }, { "value": 420107, "pid": 420100, "label": "青山区", }, { "value": 420111, "pid": 420100, "label": "洪山区", }, { "value": 420112, "pid": 420100, "label": "东西湖区", }, { "value": 420113, "pid": 420100, "label": "汉南区", }, { "value": 420114, "pid": 420100, "label": "蔡甸区", }, { "value": 420115, "pid": 420100, "label": "江夏区", }, { "value": 420116, "pid": 420100, "label": "黄陂区", }, { "value": 420117, "pid": 420100, "label": "新洲区", }, { "value": 420118, "pid": 420100, "label": "经济技术开发区", }] }, { "value": 420200, "pid": 420000, "label": "黄石市", "children": [{ "value": 420202, "pid": 420200, "label": "黄石港区", }, { "value": 420203, "pid": 420200, "label": "西塞山区", }, { "value": 420204, "pid": 420200, "label": "下陆区", }, { "value": 420205, "pid": 420200, "label": "铁山区", }, { "value": 420222, "pid": 420200, "label": "阳新县", }, { "value": 420281, "pid": 420200, "label": "大冶市", }, { "value": 420282, "pid": 420200, "label": "经济开发区", }] }, { "value": 420300, "pid": 420000, "label": "十堰市", "children": [{ "value": 420302, "pid": 420300, "label": "茅箭区", }, { "value": 420303, "pid": 420300, "label": "张湾区", }, { "value": 420304, "pid": 420300, "label": "郧阳区", }, { "value": 420322, "pid": 420300, "label": "郧西县", }, { "value": 420323, "pid": 420300, "label": "竹山县", }, { "value": 420324, "pid": 420300, "label": "竹溪县", }, { "value": 420325, "pid": 420300, "label": "房县", }, { "value": 420381, "pid": 420300, "label": "丹江口市", }] }, { "value": 420500, "pid": 420000, "label": "宜昌市", "children": [{ "value": 420502, "pid": 420500, "label": "西陵区", }, { "value": 420503, "pid": 420500, "label": "伍家岗区", }, { "value": 420504, "pid": 420500, "label": "点军区", }, { "value": 420505, "pid": 420500, "label": "猇亭区", }, { "value": 420506, "pid": 420500, "label": "夷陵区", }, { "value": 420525, "pid": 420500, "label": "远安县", }, { "value": 420526, "pid": 420500, "label": "兴山县", }, { "value": 420527, "pid": 420500, "label": "秭归县", }, { "value": 420528, "pid": 420500, "label": "长阳土家族自治县", }, { "value": 420529, "pid": 420500, "label": "五峰土家族自治县", }, { "value": 420581, "pid": 420500, "label": "宜都市", }, { "value": 420582, "pid": 420500, "label": "当阳市", }, { "value": 420583, "pid": 420500, "label": "枝江市", }, { "value": 420584, "pid": 420500, "label": "宜昌新区", }] }, { "value": 420600, "pid": 420000, "label": "襄阳市", "children": [{ "value": 420602, "pid": 420600, "label": "襄城区", }, { "value": 420606, "pid": 420600, "label": "樊城区", }, { "value": 420607, "pid": 420600, "label": "襄州区", }, { "value": 420624, "pid": 420600, "label": "南漳县", }, { "value": 420625, "pid": 420600, "label": "谷城县", }, { "value": 420626, "pid": 420600, "label": "保康县", }, { "value": 420682, "pid": 420600, "label": "老河口市", }, { "value": 420683, "pid": 420600, "label": "枣阳市", }, { "value": 420684, "pid": 420600, "label": "宜城市", }, { "value": 420685, "pid": 420600, "label": "高新区", }, { "value": 420686, "pid": 420600, "label": "经济开发区", }] }, { "value": 420700, "pid": 420000, "label": "鄂州市", "children": [{ "value": 420702, "pid": 420700, "label": "梁子湖区", }, { "value": 420703, "pid": 420700, "label": "华容区", }, { "value": 420704, "pid": 420700, "label": "鄂城区", }] }, { "value": 420800, "pid": 420000, "label": "荆门市", "children": [{ "value": 420802, "pid": 420800, "label": "东宝区", }, { "value": 420804, "pid": 420800, "label": "掇刀区", }, { "value": 420822, "pid": 420800, "label": "沙洋县", }, { "value": 420881, "pid": 420800, "label": "钟祥市", }, { "value": 420882, "pid": 420800, "label": "京山市", }] }, { "value": 420900, "pid": 420000, "label": "孝感市", "children": [{ "value": 420902, "pid": 420900, "label": "孝南区", }, { "value": 420921, "pid": 420900, "label": "孝昌县", }, { "value": 420922, "pid": 420900, "label": "大悟县", }, { "value": 420923, "pid": 420900, "label": "云梦县", }, { "value": 420981, "pid": 420900, "label": "应城市", }, { "value": 420982, "pid": 420900, "label": "安陆市", }, { "value": 420984, "pid": 420900, "label": "汉川市", }] }, { "value": 421000, "pid": 420000, "label": "荆州市", "children": [{ "value": 421002, "pid": 421000, "label": "沙市区", }, { "value": 421003, "pid": 421000, "label": "荆州区", }, { "value": 421022, "pid": 421000, "label": "公安县", }, { "value": 421023, "pid": 421000, "label": "监利县", }, { "value": 421024, "pid": 421000, "label": "江陵县", }, { "value": 421081, "pid": 421000, "label": "石首市", }, { "value": 421083, "pid": 421000, "label": "洪湖市", }, { "value": 421087, "pid": 421000, "label": "松滋市", }] }, { "value": 421100, "pid": 420000, "label": "黄冈市", "children": [{ "value": 421102, "pid": 421100, "label": "黄州区", }, { "value": 421121, "pid": 421100, "label": "团风县", }, { "value": 421122, "pid": 421100, "label": "红安县", }, { "value": 421123, "pid": 421100, "label": "罗田县", }, { "value": 421124, "pid": 421100, "label": "英山县", }, { "value": 421125, "pid": 421100, "label": "浠水县", }, { "value": 421126, "pid": 421100, "label": "蕲春县", }, { "value": 421127, "pid": 421100, "label": "黄梅县", }, { "value": 421181, "pid": 421100, "label": "麻城市", }, { "value": 421182, "pid": 421100, "label": "武穴市", }, { "value": 421183, "pid": 421100, "label": "城东新区", }] }, { "value": 421200, "pid": 420000, "label": "咸宁市", "children": [{ "value": 421202, "pid": 421200, "label": "咸安区", }, { "value": 421221, "pid": 421200, "label": "嘉鱼县", }, { "value": 421222, "pid": 421200, "label": "通城县", }, { "value": 421223, "pid": 421200, "label": "崇阳县", }, { "value": 421224, "pid": 421200, "label": "通山县", }, { "value": 421281, "pid": 421200, "label": "赤壁市", }] }, { "value": 421300, "pid": 420000, "label": "随州市", "children": [{ "value": 421303, "pid": 421300, "label": "曾都区", }, { "value": 421321, "pid": 421300, "label": "随县", }, { "value": 421381, "pid": 421300, "label": "广水市", }] }, { "value": 422800, "pid": 420000, "label": "恩施土家族苗族自治州", "children": [{ "value": 422801, "pid": 422800, "label": "恩施市", }, { "value": 422802, "pid": 422800, "label": "利川市", }, { "value": 422822, "pid": 422800, "label": "建始县", }, { "value": 422823, "pid": 422800, "label": "巴东县", }, { "value": 422825, "pid": 422800, "label": "宣恩县", }, { "value": 422826, "pid": 422800, "label": "咸丰县", }, { "value": 422827, "pid": 422800, "label": "来凤县", }, { "value": 422828, "pid": 422800, "label": "鹤峰县", }] }, { "value": 429004, "pid": 420000, "label": "仙桃市", "children": [{ "value": 429401, "pid": 429004, "label": "沙嘴街道", }, { "value": 429402, "pid": 429004, "label": "干河街道", }, { "value": 429403, "pid": 429004, "label": "龙华山街道", }, { "value": 429404, "pid": 429004, "label": "郑场镇", }, { "value": 429405, "pid": 429004, "label": "毛嘴镇", }, { "value": 429406, "pid": 429004, "label": "豆河镇", }, { "value": 429407, "pid": 429004, "label": "三伏潭镇", }, { "value": 429408, "pid": 429004, "label": "胡场镇", }, { "value": 429409, "pid": 429004, "label": "长埫口镇", }, { "value": 429410, "pid": 429004, "label": "西流河镇", }, { "value": 429411, "pid": 429004, "label": "沙湖镇", }, { "value": 429412, "pid": 429004, "label": "杨林尾镇", }, { "value": 429413, "pid": 429004, "label": "彭场镇", }, { "value": 429414, "pid": 429004, "label": "张沟镇", }, { "value": 429415, "pid": 429004, "label": "郭河镇", }, { "value": 429416, "pid": 429004, "label": "沔城镇", }, { "value": 429417, "pid": 429004, "label": "通海口镇", }, { "value": 429418, "pid": 429004, "label": "陈场镇", }, { "value": 429419, "pid": 429004, "label": "高新区", }, { "value": 429420, "pid": 429004, "label": "经济开发区", }, { "value": 429421, "pid": 429004, "label": "工业园区", }, { "value": 429422, "pid": 429004, "label": "九合垸原种场", }, { "value": 429423, "pid": 429004, "label": "沙湖原种场", }, { "value": 429424, "pid": 429004, "label": "排湖渔场", }, { "value": 429425, "pid": 429004, "label": "五湖渔场", }, { "value": 429426, "pid": 429004, "label": "赵西垸林场", }, { "value": 429427, "pid": 429004, "label": "刘家垸林场", }, { "value": 429428, "pid": 429004, "label": "畜禽良种场", }] }, { "value": 429005, "pid": 420000, "label": "潜江市", "children": [{ "value": 429501, "pid": 429005, "label": "园林", }, { "value": 429502, "pid": 429005, "label": "广华", }, { "value": 429503, "pid": 429005, "label": "杨市", }, { "value": 429504, "pid": 429005, "label": "周矶", }, { "value": 429505, "pid": 429005, "label": "泽口", }, { "value": 429506, "pid": 429005, "label": "泰丰", }, { "value": 429507, "pid": 429005, "label": "高场", }, { "value": 429508, "pid": 429005, "label": "熊口镇", }, { "value": 429509, "pid": 429005, "label": "竹根滩镇", }, { "value": 429510, "pid": 429005, "label": "高石碑镇", }, { "value": 429511, "pid": 429005, "label": "老新镇", }, { "value": 429512, "pid": 429005, "label": "王场镇", }, { "value": 429513, "pid": 429005, "label": "渔洋镇", }, { "value": 429514, "pid": 429005, "label": "龙湾镇", }, { "value": 429515, "pid": 429005, "label": "浩口镇", }, { "value": 429516, "pid": 429005, "label": "积玉口镇", }, { "value": 429517, "pid": 429005, "label": "张金镇", }, { "value": 429518, "pid": 429005, "label": "白鹭湖管理区", }, { "value": 429519, "pid": 429005, "label": "总口管理区", }, { "value": 429520, "pid": 429005, "label": "熊口农场管理区", }, { "value": 429521, "pid": 429005, "label": "运粮湖管理区", }, { "value": 429522, "pid": 429005, "label": "后湖管理区", }, { "value": 429523, "pid": 429005, "label": "周矶管理区", }, { "value": 429524, "pid": 429005, "label": "经济开发区", }] }, { "value": 429006, "pid": 420000, "label": "天门市", "children": [{ "value": 429601, "pid": 429006, "label": "竟陵街道", }, { "value": 429602, "pid": 429006, "label": "杨林街道", }, { "value": 429603, "pid": 429006, "label": "佛子山镇", }, { "value": 429604, "pid": 429006, "label": "多宝镇", }, { "value": 429605, "pid": 429006, "label": "拖市镇", }, { "value": 429606, "pid": 429006, "label": "张港镇", }, { "value": 429607, "pid": 429006, "label": "蒋场镇", }, { "value": 429608, "pid": 429006, "label": "汪场镇", }, { "value": 429609, "pid": 429006, "label": "渔薪镇", }, { "value": 429610, "pid": 429006, "label": "黄潭镇", }, { "value": 429611, "pid": 429006, "label": "岳口镇", }, { "value": 429612, "pid": 429006, "label": "横林镇", }, { "value": 429613, "pid": 429006, "label": "彭市镇", }, { "value": 429614, "pid": 429006, "label": "麻洋镇", }, { "value": 429615, "pid": 429006, "label": "多祥镇", }, { "value": 429616, "pid": 429006, "label": "干驿镇", }, { "value": 429617, "pid": 429006, "label": "马湾镇", }, { "value": 429618, "pid": 429006, "label": "卢市镇", }, { "value": 429619, "pid": 429006, "label": "小板镇", }, { "value": 429620, "pid": 429006, "label": "九真镇", }, { "value": 429621, "pid": 429006, "label": "皂市镇", }, { "value": 429622, "pid": 429006, "label": "胡市镇", }, { "value": 429623, "pid": 429006, "label": "石河镇", }, { "value": 429624, "pid": 429006, "label": "净潭乡", }, { "value": 429625, "pid": 429006, "label": "蒋湖农场", }, { "value": 429626, "pid": 429006, "label": "白茅湖农场", }, { "value": 429627, "pid": 429006, "label": "沉湖林业科技示范区", }, { "value": 429628, "pid": 429006, "label": "天门工业园", }, { "value": 429629, "pid": 429006, "label": "侨乡街道开发区", }] }, { "value": 429021, "pid": 420000, "label": "神农架林区", "children": [{ "value": 429022, "pid": 429021, "label": "松柏镇", }, { "value": 429023, "pid": 429021, "label": "阳日镇", }, { "value": 429024, "pid": 429021, "label": "木鱼镇", }, { "value": 429025, "pid": 429021, "label": "红坪镇", }, { "value": 429026, "pid": 429021, "label": "新华镇", }, { "value": 429027, "pid": 429021, "label": "大九湖", }, { "value": 429028, "pid": 429021, "label": "宋洛", }, { "value": 429029, "pid": 429021, "label": "下谷坪乡", }] }] }, { "value": 430000, "pid": 100000, "label": "湖南省", "children": [{ "value": 430100, "pid": 430000, "label": "长沙市", "children": [{ "value": 430102, "pid": 430100, "label": "芙蓉区", }, { "value": 430103, "pid": 430100, "label": "天心区", }, { "value": 430104, "pid": 430100, "label": "岳麓区", }, { "value": 430105, "pid": 430100, "label": "开福区", }, { "value": 430111, "pid": 430100, "label": "雨花区", }, { "value": 430112, "pid": 430100, "label": "望城区", }, { "value": 430121, "pid": 430100, "label": "长沙县", }, { "value": 430181, "pid": 430100, "label": "浏阳市", }, { "value": 430182, "pid": 430100, "label": "宁乡市", }, { "value": 430183, "pid": 430100, "label": "湘江新区", }] }, { "value": 430200, "pid": 430000, "label": "株洲市", "children": [{ "value": 430202, "pid": 430200, "label": "荷塘区", }, { "value": 430203, "pid": 430200, "label": "芦淞区", }, { "value": 430204, "pid": 430200, "label": "石峰区", }, { "value": 430211, "pid": 430200, "label": "天元区", }, { "value": 430212, "pid": 430200, "label": "渌口区", }, { "value": 430223, "pid": 430200, "label": "攸县", }, { "value": 430224, "pid": 430200, "label": "茶陵县", }, { "value": 430225, "pid": 430200, "label": "炎陵县", }, { "value": 430281, "pid": 430200, "label": "醴陵市", }] }, { "value": 430300, "pid": 430000, "label": "湘潭市", "children": [{ "value": 430302, "pid": 430300, "label": "雨湖区", }, { "value": 430304, "pid": 430300, "label": "岳塘区", }, { "value": 430321, "pid": 430300, "label": "湘潭县", }, { "value": 430381, "pid": 430300, "label": "湘乡市", }, { "value": 430382, "pid": 430300, "label": "韶山市", }, { "value": 430383, "pid": 430300, "label": "高新区", }] }, { "value": 430400, "pid": 430000, "label": "衡阳市", "children": [{ "value": 430405, "pid": 430400, "label": "珠晖区", }, { "value": 430406, "pid": 430400, "label": "雁峰区", }, { "value": 430407, "pid": 430400, "label": "石鼓区", }, { "value": 430408, "pid": 430400, "label": "蒸湘区", }, { "value": 430412, "pid": 430400, "label": "南岳区", }, { "value": 430421, "pid": 430400, "label": "衡阳县", }, { "value": 430422, "pid": 430400, "label": "衡南县", }, { "value": 430423, "pid": 430400, "label": "衡山县", }, { "value": 430424, "pid": 430400, "label": "衡东县", }, { "value": 430426, "pid": 430400, "label": "祁东县", }, { "value": 430481, "pid": 430400, "label": "耒阳市", }, { "value": 430482, "pid": 430400, "label": "常宁市", }, { "value": 430483, "pid": 430400, "label": "高新区", }, { "value": 430484, "pid": 430400, "label": "综合保税区", }] }, { "value": 430500, "pid": 430000, "label": "邵阳市", "children": [{ "value": 430502, "pid": 430500, "label": "双清区", }, { "value": 430503, "pid": 430500, "label": "大祥区", }, { "value": 430511, "pid": 430500, "label": "北塔区", }, { "value": 430521, "pid": 430500, "label": "邵东县", }, { "value": 430522, "pid": 430500, "label": "新邵县", }, { "value": 430523, "pid": 430500, "label": "邵阳县", }, { "value": 430524, "pid": 430500, "label": "隆回县", }, { "value": 430525, "pid": 430500, "label": "洞口县", }, { "value": 430527, "pid": 430500, "label": "绥宁县", }, { "value": 430528, "pid": 430500, "label": "新宁县", }, { "value": 430529, "pid": 430500, "label": "城步苗族自治县", }, { "value": 430581, "pid": 430500, "label": "武冈市", }] }, { "value": 430600, "pid": 430000, "label": "岳阳市", "children": [{ "value": 430602, "pid": 430600, "label": "岳阳楼区", }, { "value": 430603, "pid": 430600, "label": "云溪区", }, { "value": 430611, "pid": 430600, "label": "君山区", }, { "value": 430621, "pid": 430600, "label": "岳阳县", }, { "value": 430623, "pid": 430600, "label": "华容县", }, { "value": 430624, "pid": 430600, "label": "湘阴县", }, { "value": 430626, "pid": 430600, "label": "平江县", }, { "value": 430681, "pid": 430600, "label": "汨罗市", }, { "value": 430682, "pid": 430600, "label": "临湘市", }] }, { "value": 430700, "pid": 430000, "label": "常德市", "children": [{ "value": 430702, "pid": 430700, "label": "武陵区", }, { "value": 430703, "pid": 430700, "label": "鼎城区", }, { "value": 430721, "pid": 430700, "label": "安乡县", }, { "value": 430722, "pid": 430700, "label": "汉寿县", }, { "value": 430723, "pid": 430700, "label": "澧县", }, { "value": 430724, "pid": 430700, "label": "临澧县", }, { "value": 430725, "pid": 430700, "label": "桃源县", }, { "value": 430726, "pid": 430700, "label": "石门县", }, { "value": 430781, "pid": 430700, "label": "津市市", }] }, { "value": 430800, "pid": 430000, "label": "张家界市", "children": [{ "value": 430802, "pid": 430800, "label": "永定区", }, { "value": 430811, "pid": 430800, "label": "武陵源区", }, { "value": 430821, "pid": 430800, "label": "慈利县", }, { "value": 430822, "pid": 430800, "label": "桑植县", }] }, { "value": 430900, "pid": 430000, "label": "益阳市", "children": [{ "value": 430902, "pid": 430900, "label": "资阳区", }, { "value": 430903, "pid": 430900, "label": "赫山区", }, { "value": 430921, "pid": 430900, "label": "南县", }, { "value": 430922, "pid": 430900, "label": "桃江县", }, { "value": 430923, "pid": 430900, "label": "安化县", }, { "value": 430981, "pid": 430900, "label": "沅江市", }] }, { "value": 431000, "pid": 430000, "label": "郴州市", "children": [{ "value": 431002, "pid": 431000, "label": "北湖区", }, { "value": 431003, "pid": 431000, "label": "苏仙区", }, { "value": 431021, "pid": 431000, "label": "桂阳县", }, { "value": 431022, "pid": 431000, "label": "宜章县", }, { "value": 431023, "pid": 431000, "label": "永兴县", }, { "value": 431024, "pid": 431000, "label": "嘉禾县", }, { "value": 431025, "pid": 431000, "label": "临武县", }, { "value": 431026, "pid": 431000, "label": "汝城县", }, { "value": 431027, "pid": 431000, "label": "桂东县", }, { "value": 431028, "pid": 431000, "label": "安仁县", }, { "value": 431081, "pid": 431000, "label": "资兴市", }] }, { "value": 431100, "pid": 430000, "label": "永州市", "children": [{ "value": 431102, "pid": 431100, "label": "零陵区", }, { "value": 431103, "pid": 431100, "label": "冷水滩区", }, { "value": 431121, "pid": 431100, "label": "祁阳县", }, { "value": 431122, "pid": 431100, "label": "东安县", }, { "value": 431123, "pid": 431100, "label": "双牌县", }, { "value": 431124, "pid": 431100, "label": "道县", }, { "value": 431125, "pid": 431100, "label": "江永县", }, { "value": 431126, "pid": 431100, "label": "宁远县", }, { "value": 431127, "pid": 431100, "label": "蓝山县", }, { "value": 431128, "pid": 431100, "label": "新田县", }, { "value": 431129, "pid": 431100, "label": "江华瑶族自治县", }] }, { "value": 431200, "pid": 430000, "label": "怀化市", "children": [{ "value": 431202, "pid": 431200, "label": "鹤城区", }, { "value": 431221, "pid": 431200, "label": "中方县", }, { "value": 431222, "pid": 431200, "label": "沅陵县", }, { "value": 431223, "pid": 431200, "label": "辰溪县", }, { "value": 431224, "pid": 431200, "label": "溆浦县", }, { "value": 431225, "pid": 431200, "label": "会同县", }, { "value": 431226, "pid": 431200, "label": "麻阳苗族自治县", }, { "value": 431227, "pid": 431200, "label": "新晃侗族自治县", }, { "value": 431228, "pid": 431200, "label": "芷江侗族自治县", }, { "value": 431229, "pid": 431200, "label": "靖州苗族侗族自治县", }, { "value": 431230, "pid": 431200, "label": "通道侗族自治县", }, { "value": 431281, "pid": 431200, "label": "洪江市", }] }, { "value": 431300, "pid": 430000, "label": "娄底市", "children": [{ "value": 431302, "pid": 431300, "label": "娄星区", }, { "value": 431321, "pid": 431300, "label": "双峰县", }, { "value": 431322, "pid": 431300, "label": "新化县", }, { "value": 431381, "pid": 431300, "label": "冷水江市", }, { "value": 431382, "pid": 431300, "label": "涟源市", }] }, { "value": 433100, "pid": 430000, "label": "湘西土家族苗族自治州", "children": [{ "value": 433101, "pid": 433100, "label": "吉首市", }, { "value": 433122, "pid": 433100, "label": "泸溪县", }, { "value": 433123, "pid": 433100, "label": "凤凰县", }, { "value": 433124, "pid": 433100, "label": "花垣县", }, { "value": 433125, "pid": 433100, "label": "保靖县", }, { "value": 433126, "pid": 433100, "label": "古丈县", }, { "value": 433127, "pid": 433100, "label": "永顺县", }, { "value": 433130, "pid": 433100, "label": "龙山县", }] }] }, { "value": 440000, "pid": 100000, "label": "广东省", "children": [{ "value": 440100, "pid": 440000, "label": "广州市", "children": [{ "value": 440103, "pid": 440100, "label": "荔湾区", }, { "value": 440104, "pid": 440100, "label": "越秀区", }, { "value": 440105, "pid": 440100, "label": "海珠区", }, { "value": 440106, "pid": 440100, "label": "天河区", }, { "value": 440111, "pid": 440100, "label": "白云区", }, { "value": 440112, "pid": 440100, "label": "黄埔区", }, { "value": 440113, "pid": 440100, "label": "番禺区", }, { "value": 440114, "pid": 440100, "label": "花都区", }, { "value": 440115, "pid": 440100, "label": "南沙区", }, { "value": 440117, "pid": 440100, "label": "从化区", }, { "value": 440118, "pid": 440100, "label": "增城区", }] }, { "value": 440200, "pid": 440000, "label": "韶关市", "children": [{ "value": 440203, "pid": 440200, "label": "武江区", }, { "value": 440204, "pid": 440200, "label": "浈江区", }, { "value": 440205, "pid": 440200, "label": "曲江区", }, { "value": 440222, "pid": 440200, "label": "始兴县", }, { "value": 440224, "pid": 440200, "label": "仁化县", }, { "value": 440229, "pid": 440200, "label": "翁源县", }, { "value": 440232, "pid": 440200, "label": "乳源瑶族自治县", }, { "value": 440233, "pid": 440200, "label": "新丰县", }, { "value": 440281, "pid": 440200, "label": "乐昌市", }, { "value": 440282, "pid": 440200, "label": "南雄市", }] }, { "value": 440300, "pid": 440000, "label": "深圳市", "children": [{ "value": 440303, "pid": 440300, "label": "罗湖区", }, { "value": 440304, "pid": 440300, "label": "福田区", }, { "value": 440305, "pid": 440300, "label": "南山区", }, { "value": 440306, "pid": 440300, "label": "宝安区", }, { "value": 440307, "pid": 440300, "label": "龙岗区", }, { "value": 440308, "pid": 440300, "label": "盐田区", }, { "value": 440309, "pid": 440300, "label": "龙华区", }, { "value": 440310, "pid": 440300, "label": "坪山区", }, { "value": 440311, "pid": 440300, "label": "光明区", }, { "value": 440312, "pid": 440300, "label": "大鹏新区", }] }, { "value": 440400, "pid": 440000, "label": "珠海市", "children": [{ "value": 440402, "pid": 440400, "label": "香洲区", }, { "value": 440403, "pid": 440400, "label": "斗门区", }, { "value": 440404, "pid": 440400, "label": "金湾区", }, { "value": 440405, "pid": 440400, "label": "横琴新区", }, { "value": 440406, "pid": 440400, "label": "经济开发区", }] }, { "value": 440500, "pid": 440000, "label": "汕头市", "children": [{ "value": 440507, "pid": 440500, "label": "龙湖区", }, { "value": 440511, "pid": 440500, "label": "金平区", }, { "value": 440512, "pid": 440500, "label": "濠江区", }, { "value": 440513, "pid": 440500, "label": "潮阳区", }, { "value": 440514, "pid": 440500, "label": "潮南区", }, { "value": 440515, "pid": 440500, "label": "澄海区", }, { "value": 440523, "pid": 440500, "label": "南澳县", }] }, { "value": 440600, "pid": 440000, "label": "佛山市", "children": [{ "value": 440604, "pid": 440600, "label": "禅城区", }, { "value": 440605, "pid": 440600, "label": "南海区", }, { "value": 440606, "pid": 440600, "label": "顺德区", }, { "value": 440607, "pid": 440600, "label": "三水区", }, { "value": 440608, "pid": 440600, "label": "高明区", }] }, { "value": 440700, "pid": 440000, "label": "江门市", "children": [{ "value": 440703, "pid": 440700, "label": "蓬江区", }, { "value": 440704, "pid": 440700, "label": "江海区", }, { "value": 440705, "pid": 440700, "label": "新会区", }, { "value": 440781, "pid": 440700, "label": "台山市", }, { "value": 440783, "pid": 440700, "label": "开平市", }, { "value": 440784, "pid": 440700, "label": "鹤山市", }, { "value": 440785, "pid": 440700, "label": "恩平市", }] }, { "value": 440800, "pid": 440000, "label": "湛江市", "children": [{ "value": 440802, "pid": 440800, "label": "赤坎区", }, { "value": 440803, "pid": 440800, "label": "霞山区", }, { "value": 440804, "pid": 440800, "label": "坡头区", }, { "value": 440811, "pid": 440800, "label": "麻章区", }, { "value": 440823, "pid": 440800, "label": "遂溪县", }, { "value": 440825, "pid": 440800, "label": "徐闻县", }, { "value": 440881, "pid": 440800, "label": "廉江市", }, { "value": 440882, "pid": 440800, "label": "雷州市", }, { "value": 440883, "pid": 440800, "label": "吴川市", }, { "value": 440884, "pid": 440800, "label": "经济开发区", }] }, { "value": 440900, "pid": 440000, "label": "茂名市", "children": [{ "value": 440902, "pid": 440900, "label": "茂南区", }, { "value": 440904, "pid": 440900, "label": "电白区", }, { "value": 440981, "pid": 440900, "label": "高州市", }, { "value": 440982, "pid": 440900, "label": "化州市", }, { "value": 440983, "pid": 440900, "label": "信宜市", }] }, { "value": 441200, "pid": 440000, "label": "肇庆市", "children": [{ "value": 441202, "pid": 441200, "label": "端州区", }, { "value": 441203, "pid": 441200, "label": "鼎湖区", }, { "value": 441204, "pid": 441200, "label": "高要区", }, { "value": 441223, "pid": 441200, "label": "广宁县", }, { "value": 441224, "pid": 441200, "label": "怀集县", }, { "value": 441225, "pid": 441200, "label": "封开县", }, { "value": 441226, "pid": 441200, "label": "德庆县", }, { "value": 441284, "pid": 441200, "label": "四会市", }] }, { "value": 441300, "pid": 440000, "label": "惠州市", "children": [{ "value": 441302, "pid": 441300, "label": "惠城区", }, { "value": 441303, "pid": 441300, "label": "惠阳区", }, { "value": 441322, "pid": 441300, "label": "博罗县", }, { "value": 441323, "pid": 441300, "label": "惠东县", }, { "value": 441324, "pid": 441300, "label": "龙门县", }, { "value": 441325, "pid": 441300, "label": "大亚湾区", }] }, { "value": 441400, "pid": 440000, "label": "梅州市", "children": [{ "value": 441402, "pid": 441400, "label": "梅江区", }, { "value": 441403, "pid": 441400, "label": "梅县区", }, { "value": 441422, "pid": 441400, "label": "大埔县", }, { "value": 441423, "pid": 441400, "label": "丰顺县", }, { "value": 441424, "pid": 441400, "label": "五华县", }, { "value": 441426, "pid": 441400, "label": "平远县", }, { "value": 441427, "pid": 441400, "label": "蕉岭县", }, { "value": 441481, "pid": 441400, "label": "兴宁市", }] }, { "value": 441500, "pid": 440000, "label": "汕尾市", "children": [{ "value": 441502, "pid": 441500, "label": "城区", }, { "value": 441521, "pid": 441500, "label": "海丰县", }, { "value": 441523, "pid": 441500, "label": "陆河县", }, { "value": 441581, "pid": 441500, "label": "陆丰市", }] }, { "value": 441600, "pid": 440000, "label": "河源市", "children": [{ "value": 441602, "pid": 441600, "label": "源城区", }, { "value": 441621, "pid": 441600, "label": "紫金县", }, { "value": 441622, "pid": 441600, "label": "龙川县", }, { "value": 441623, "pid": 441600, "label": "连平县", }, { "value": 441624, "pid": 441600, "label": "和平县", }, { "value": 441625, "pid": 441600, "label": "东源县", }] }, { "value": 441700, "pid": 440000, "label": "阳江市", "children": [{ "value": 441702, "pid": 441700, "label": "江城区", }, { "value": 441704, "pid": 441700, "label": "阳东区", }, { "value": 441721, "pid": 441700, "label": "阳西县", }, { "value": 441781, "pid": 441700, "label": "阳春市", }] }, { "value": 441800, "pid": 440000, "label": "清远市", "children": [{ "value": 441802, "pid": 441800, "label": "清城区", }, { "value": 441803, "pid": 441800, "label": "清新区", }, { "value": 441821, "pid": 441800, "label": "佛冈县", }, { "value": 441823, "pid": 441800, "label": "阳山县", }, { "value": 441825, "pid": 441800, "label": "连山壮族瑶族自治县", }, { "value": 441826, "pid": 441800, "label": "连南瑶族自治县", }, { "value": 441881, "pid": 441800, "label": "英德市", }, { "value": 441882, "pid": 441800, "label": "连州市", }] }, { "value": 441900, "pid": 440000, "label": "东莞市", "children": [{ "value": 441901, "pid": 441900, "label": "莞城区", }, { "value": 441902, "pid": 441900, "label": "南城区", }, { "value": 441903, "pid": 441900, "label": "东城区", }, { "value": 441904, "pid": 441900, "label": "万江区", }, { "value": 441905, "pid": 441900, "label": "石碣镇", }, { "value": 441906, "pid": 441900, "label": "石龙镇", }, { "value": 441907, "pid": 441900, "label": "茶山镇", }, { "value": 441908, "pid": 441900, "label": "石排镇", }, { "value": 441909, "pid": 441900, "label": "企石镇", }, { "value": 441910, "pid": 441900, "label": "横沥镇", }, { "value": 441911, "pid": 441900, "label": "桥头镇", }, { "value": 441912, "pid": 441900, "label": "谢岗镇", }, { "value": 441913, "pid": 441900, "label": "东坑镇", }, { "value": 441914, "pid": 441900, "label": "常平镇", }, { "value": 441915, "pid": 441900, "label": "寮步镇", }, { "value": 441916, "pid": 441900, "label": "大朗镇", }, { "value": 441917, "pid": 441900, "label": "麻涌镇", }, { "value": 441918, "pid": 441900, "label": "中堂镇", }, { "value": 441919, "pid": 441900, "label": "高埗镇", }, { "value": 441920, "pid": 441900, "label": "樟木头镇", }, { "value": 441921, "pid": 441900, "label": "大岭山镇", }, { "value": 441922, "pid": 441900, "label": "望牛墩镇", }, { "value": 441923, "pid": 441900, "label": "黄江镇", }, { "value": 441924, "pid": 441900, "label": "洪梅镇", }, { "value": 441925, "pid": 441900, "label": "清溪镇", }, { "value": 441926, "pid": 441900, "label": "沙田镇", }, { "value": 441927, "pid": 441900, "label": "道滘镇", }, { "value": 441928, "pid": 441900, "label": "塘厦镇", }, { "value": 441929, "pid": 441900, "label": "虎门镇", }, { "value": 441930, "pid": 441900, "label": "厚街镇", }, { "value": 441931, "pid": 441900, "label": "凤岗镇", }, { "value": 441932, "pid": 441900, "label": "长安镇", }, { "value": 441933, "pid": 441900, "label": "松山湖高新区", }] }, { "value": 442000, "pid": 440000, "label": "中山市", "children": [{ "value": 442001, "pid": 442000, "label": "石岐区", }, { "value": 442002, "pid": 442000, "label": "东区", }, { "value": 442003, "pid": 442000, "label": "西区", }, { "value": 442004, "pid": 442000, "label": "南区", }, { "value": 442005, "pid": 442000, "label": "五桂山区", }, { "value": 442006, "pid": 442000, "label": "火炬开发区", }, { "value": 442007, "pid": 442000, "label": "黄圃镇", }, { "value": 442008, "pid": 442000, "label": "南头镇", }, { "value": 442009, "pid": 442000, "label": "东凤镇", }, { "value": 442010, "pid": 442000, "label": "阜沙镇", }, { "value": 442011, "pid": 442000, "label": "小榄镇", }, { "value": 442012, "pid": 442000, "label": "东升镇", }, { "value": 442013, "pid": 442000, "label": "古镇镇", }, { "value": 442014, "pid": 442000, "label": "横栏镇", }, { "value": 442015, "pid": 442000, "label": "三角镇", }, { "value": 442016, "pid": 442000, "label": "民众镇", }, { "value": 442017, "pid": 442000, "label": "南朗镇", }, { "value": 442018, "pid": 442000, "label": "港口镇", }, { "value": 442019, "pid": 442000, "label": "大涌镇", }, { "value": 442020, "pid": 442000, "label": "沙溪镇", }, { "value": 442021, "pid": 442000, "label": "三乡镇", }, { "value": 442022, "pid": 442000, "label": "板芙镇", }, { "value": 442023, "pid": 442000, "label": "神湾镇", }, { "value": 442024, "pid": 442000, "label": "坦洲镇", }] }, { "value": 445100, "pid": 440000, "label": "潮州市", "children": [{ "value": 445102, "pid": 445100, "label": "湘桥区", }, { "value": 445103, "pid": 445100, "label": "潮安区", }, { "value": 445122, "pid": 445100, "label": "饶平县", }] }, { "value": 445200, "pid": 440000, "label": "揭阳市", "children": [{ "value": 445202, "pid": 445200, "label": "榕城区", }, { "value": 445203, "pid": 445200, "label": "揭东区", }, { "value": 445222, "pid": 445200, "label": "揭西县", }, { "value": 445224, "pid": 445200, "label": "惠来县", }, { "value": 445281, "pid": 445200, "label": "普宁市", }] }, { "value": 445300, "pid": 440000, "label": "云浮市", "children": [{ "value": 445302, "pid": 445300, "label": "云城区", }, { "value": 445303, "pid": 445300, "label": "云安区", }, { "value": 445321, "pid": 445300, "label": "新兴县", }, { "value": 445322, "pid": 445300, "label": "郁南县", }, { "value": 445381, "pid": 445300, "label": "罗定市", }] }] }, { "value": 450000, "pid": 100000, "label": "广西壮族自治区", "children": [{ "value": 450100, "pid": 450000, "label": "南宁市", "children": [{ "value": 450102, "pid": 450100, "label": "兴宁区", }, { "value": 450103, "pid": 450100, "label": "青秀区", }, { "value": 450105, "pid": 450100, "label": "江南区", }, { "value": 450107, "pid": 450100, "label": "西乡塘区", }, { "value": 450108, "pid": 450100, "label": "良庆区", }, { "value": 450109, "pid": 450100, "label": "邕宁区", }, { "value": 450110, "pid": 450100, "label": "武鸣区", }, { "value": 450123, "pid": 450100, "label": "隆安县", }, { "value": 450124, "pid": 450100, "label": "马山县", }, { "value": 450125, "pid": 450100, "label": "上林县", }, { "value": 450126, "pid": 450100, "label": "宾阳县", }, { "value": 450127, "pid": 450100, "label": "横县", }, { "value": 450128, "pid": 450100, "label": "埌东新区", }] }, { "value": 450200, "pid": 450000, "label": "柳州市", "children": [{ "value": 450202, "pid": 450200, "label": "城中区", }, { "value": 450203, "pid": 450200, "label": "鱼峰区", }, { "value": 450204, "pid": 450200, "label": "柳南区", }, { "value": 450205, "pid": 450200, "label": "柳北区", }, { "value": 450206, "pid": 450200, "label": "柳江区", }, { "value": 450222, "pid": 450200, "label": "柳城县", }, { "value": 450223, "pid": 450200, "label": "鹿寨县", }, { "value": 450224, "pid": 450200, "label": "融安县", }, { "value": 450225, "pid": 450200, "label": "融水苗族自治县", }, { "value": 450226, "pid": 450200, "label": "三江侗族自治县", }, { "value": 450227, "pid": 450200, "label": "柳东新区", }] }, { "value": 450300, "pid": 450000, "label": "桂林市", "children": [{ "value": 450302, "pid": 450300, "label": "秀峰区", }, { "value": 450303, "pid": 450300, "label": "叠彩区", }, { "value": 450304, "pid": 450300, "label": "象山区", }, { "value": 450305, "pid": 450300, "label": "七星区", }, { "value": 450311, "pid": 450300, "label": "雁山区", }, { "value": 450312, "pid": 450300, "label": "临桂区", }, { "value": 450321, "pid": 450300, "label": "阳朔县", }, { "value": 450323, "pid": 450300, "label": "灵川县", }, { "value": 450324, "pid": 450300, "label": "全州县", }, { "value": 450325, "pid": 450300, "label": "兴安县", }, { "value": 450326, "pid": 450300, "label": "永福县", }, { "value": 450327, "pid": 450300, "label": "灌阳县", }, { "value": 450328, "pid": 450300, "label": "龙胜各族自治县", }, { "value": 450329, "pid": 450300, "label": "资源县", }, { "value": 450330, "pid": 450300, "label": "平乐县", }, { "value": 450332, "pid": 450300, "label": "恭城瑶族自治县", }, { "value": 450381, "pid": 450300, "label": "荔浦市", }] }, { "value": 450400, "pid": 450000, "label": "梧州市", "children": [{ "value": 450403, "pid": 450400, "label": "万秀区", }, { "value": 450405, "pid": 450400, "label": "长洲区", }, { "value": 450406, "pid": 450400, "label": "龙圩区", }, { "value": 450421, "pid": 450400, "label": "苍梧县", }, { "value": 450422, "pid": 450400, "label": "藤县", }, { "value": 450423, "pid": 450400, "label": "蒙山县", }, { "value": 450481, "pid": 450400, "label": "岑溪市", }] }, { "value": 450500, "pid": 450000, "label": "北海市", "children": [{ "value": 450502, "pid": 450500, "label": "海城区", }, { "value": 450503, "pid": 450500, "label": "银海区", }, { "value": 450512, "pid": 450500, "label": "铁山港区", }, { "value": 450521, "pid": 450500, "label": "合浦县", }] }, { "value": 450600, "pid": 450000, "label": "防城港市", "children": [{ "value": 450602, "pid": 450600, "label": "港口区", }, { "value": 450603, "pid": 450600, "label": "防城区", }, { "value": 450621, "pid": 450600, "label": "上思县", }, { "value": 450681, "pid": 450600, "label": "东兴市", }] }, { "value": 450700, "pid": 450000, "label": "钦州市", "children": [{ "value": 450702, "pid": 450700, "label": "钦南区", }, { "value": 450703, "pid": 450700, "label": "钦北区", }, { "value": 450721, "pid": 450700, "label": "灵山县", }, { "value": 450722, "pid": 450700, "label": "浦北县", }] }, { "value": 450800, "pid": 450000, "label": "贵港市", "children": [{ "value": 450802, "pid": 450800, "label": "港北区", }, { "value": 450803, "pid": 450800, "label": "港南区", }, { "value": 450804, "pid": 450800, "label": "覃塘区", }, { "value": 450821, "pid": 450800, "label": "平南县", }, { "value": 450881, "pid": 450800, "label": "桂平市", }] }, { "value": 450900, "pid": 450000, "label": "玉林市", "children": [{ "value": 450902, "pid": 450900, "label": "玉州区", }, { "value": 450903, "pid": 450900, "label": "福绵区", }, { "value": 450921, "pid": 450900, "label": "容县", }, { "value": 450922, "pid": 450900, "label": "陆川县", }, { "value": 450923, "pid": 450900, "label": "博白县", }, { "value": 450924, "pid": 450900, "label": "兴业县", }, { "value": 450981, "pid": 450900, "label": "北流市", }, { "value": 450982, "pid": 450900, "label": "玉东新区", }, { "value": 450983, "pid": 450900, "label": "高新区", }] }, { "value": 451000, "pid": 450000, "label": "百色市", "children": [{ "value": 451002, "pid": 451000, "label": "右江区", }, { "value": 451021, "pid": 451000, "label": "田阳县", }, { "value": 451022, "pid": 451000, "label": "田东县", }, { "value": 451023, "pid": 451000, "label": "平果县", }, { "value": 451024, "pid": 451000, "label": "德保县", }, { "value": 451026, "pid": 451000, "label": "那坡县", }, { "value": 451027, "pid": 451000, "label": "凌云县", }, { "value": 451028, "pid": 451000, "label": "乐业县", }, { "value": 451029, "pid": 451000, "label": "田林县", }, { "value": 451030, "pid": 451000, "label": "西林县", }, { "value": 451031, "pid": 451000, "label": "隆林各族自治县", }, { "value": 451081, "pid": 451000, "label": "靖西市", }] }, { "value": 451100, "pid": 450000, "label": "贺州市", "children": [{ "value": 451102, "pid": 451100, "label": "八步区", }, { "value": 451103, "pid": 451100, "label": "平桂区", }, { "value": 451121, "pid": 451100, "label": "昭平县", }, { "value": 451122, "pid": 451100, "label": "钟山县", }, { "value": 451123, "pid": 451100, "label": "富川瑶族自治县", }] }, { "value": 451200, "pid": 450000, "label": "河池市", "children": [{ "value": 451202, "pid": 451200, "label": "金城江区", }, { "value": 451203, "pid": 451200, "label": "宜州区", }, { "value": 451221, "pid": 451200, "label": "南丹县", }, { "value": 451222, "pid": 451200, "label": "天峨县", }, { "value": 451223, "pid": 451200, "label": "凤山县", }, { "value": 451224, "pid": 451200, "label": "东兰县", }, { "value": 451225, "pid": 451200, "label": "罗城仫佬族自治县", }, { "value": 451226, "pid": 451200, "label": "环江毛南族自治县", }, { "value": 451227, "pid": 451200, "label": "巴马瑶族自治县", }, { "value": 451228, "pid": 451200, "label": "都安瑶族自治县", }, { "value": 451229, "pid": 451200, "label": "大化瑶族自治县", }] }, { "value": 451300, "pid": 450000, "label": "来宾市", "children": [{ "value": 451302, "pid": 451300, "label": "兴宾区", }, { "value": 451321, "pid": 451300, "label": "忻城县", }, { "value": 451322, "pid": 451300, "label": "象州县", }, { "value": 451323, "pid": 451300, "label": "武宣县", }, { "value": 451324, "pid": 451300, "label": "金秀瑶族自治县", }, { "value": 451381, "pid": 451300, "label": "合山市", }] }, { "value": 451400, "pid": 450000, "label": "崇左市", "children": [{ "value": 451402, "pid": 451400, "label": "江州区", }, { "value": 451421, "pid": 451400, "label": "扶绥县", }, { "value": 451422, "pid": 451400, "label": "宁明县", }, { "value": 451423, "pid": 451400, "label": "龙州县", }, { "value": 451424, "pid": 451400, "label": "大新县", }, { "value": 451425, "pid": 451400, "label": "天等县", }, { "value": 451481, "pid": 451400, "label": "凭祥市", }] }] }, { "value": 460000, "pid": 100000, "label": "海南省", "children": [{ "value": 460100, "pid": 460000, "label": "海口市", "children": [{ "value": 460105, "pid": 460100, "label": "秀英区", }, { "value": 460106, "pid": 460100, "label": "龙华区", }, { "value": 460107, "pid": 460100, "label": "琼山区", }, { "value": 460108, "pid": 460100, "label": "美兰区", }, { "value": 460109, "pid": 460100, "label": "江东新区", }] }, { "value": 460200, "pid": 460000, "label": "三亚市", "children": [{ "value": 460202, "pid": 460200, "label": "海棠区", }, { "value": 460203, "pid": 460200, "label": "吉阳区", }, { "value": 460204, "pid": 460200, "label": "天涯区", }, { "value": 460205, "pid": 460200, "label": "崖州区", }] }, { "value": 460300, "pid": 460000, "label": "三沙市", "children": [{ "value": 460321, "pid": 460300, "label": "西沙群岛", }, { "value": 460322, "pid": 460300, "label": "南沙群岛", }, { "value": 460323, "pid": 460300, "label": "中沙群岛", }] }, { "value": 460400, "pid": 460000, "label": "儋州市", "children": [{ "value": 460401, "pid": 460400, "label": "洋浦经济开发区", }, { "value": 460402, "pid": 460400, "label": "那大镇", }, { "value": 460403, "pid": 460400, "label": "南丰镇", }, { "value": 460404, "pid": 460400, "label": "雅星镇", }, { "value": 460405, "pid": 460400, "label": "和庆镇", }, { "value": 460406, "pid": 460400, "label": "大成镇", }, { "value": 460407, "pid": 460400, "label": "新州镇", }, { "value": 460408, "pid": 460400, "label": "光村镇", }, { "value": 460409, "pid": 460400, "label": "东成镇", }, { "value": 460410, "pid": 460400, "label": "中和镇", }, { "value": 460411, "pid": 460400, "label": "峨蔓镇", }, { "value": 460412, "pid": 460400, "label": "兰洋镇", }, { "value": 460413, "pid": 460400, "label": "王五镇", }, { "value": 460414, "pid": 460400, "label": "排浦镇", }, { "value": 460415, "pid": 460400, "label": "海头镇", }, { "value": 460416, "pid": 460400, "label": "木棠镇", }, { "value": 460417, "pid": 460400, "label": "白马井镇", }, { "value": 460418, "pid": 460400, "label": "三都镇", }, { "value": 460419, "pid": 460400, "label": "西培农场", }, { "value": 460420, "pid": 460400, "label": "西联农场", }, { "value": 460421, "pid": 460400, "label": "蓝洋农场", }, { "value": 460422, "pid": 460400, "label": "八一农场", }, { "value": 460423, "pid": 460400, "label": "西华农场", }, { "value": 460424, "pid": 460400, "label": "西庆农场", }, { "value": 460425, "pid": 460400, "label": "西流农场", }, { "value": 460426, "pid": 460400, "label": "新盈农场", }, { "value": 460427, "pid": 460400, "label": "龙山农场", }, { "value": 460428, "pid": 460400, "label": "红岭农场", }] }, { "value": 469001, "pid": 460000, "label": "五指山市", "children": [{ "value": 469101, "pid": 469001, "label": "通什镇", }, { "value": 469102, "pid": 469001, "label": "南圣镇", }, { "value": 469103, "pid": 469001, "label": "毛阳镇", }, { "value": 469104, "pid": 469001, "label": "番阳镇", }, { "value": 469105, "pid": 469001, "label": "畅好乡", }, { "value": 469106, "pid": 469001, "label": "毛道乡", }, { "value": 469107, "pid": 469001, "label": "水满乡", }] }, { "value": 469002, "pid": 460000, "label": "琼海市", "children": [{ "value": 469201, "pid": 469002, "label": "嘉积镇", }, { "value": 469202, "pid": 469002, "label": "万泉镇", }, { "value": 469203, "pid": 469002, "label": "石壁镇", }, { "value": 469204, "pid": 469002, "label": "中原镇", }, { "value": 469205, "pid": 469002, "label": "博鳌镇", }, { "value": 469206, "pid": 469002, "label": "阳江镇", }, { "value": 469207, "pid": 469002, "label": "龙江镇", }, { "value": 469208, "pid": 469002, "label": "潭门镇", }, { "value": 469209, "pid": 469002, "label": "塔洋镇", }, { "value": 469210, "pid": 469002, "label": "���坡镇", }, { "value": 469211, "pid": 469002, "label": "大路镇", }, { "value": 469212, "pid": 469002, "label": "会山镇", }, { "value": 469213, "pid": 469002, "label": "东太农场", }, { "value": 469214, "pid": 469002, "label": "东红农场", }, { "value": 469215, "pid": 469002, "label": "东升农场", }, { "value": 469216, "pid": 469002, "label": "南俸农场", }, { "value": 469217, "pid": 469002, "label": "彬村山华侨农场", }] }, { "value": 469005, "pid": 460000, "label": "文昌市", "children": [{ "value": 469501, "pid": 469005, "label": "文城镇", }, { "value": 469502, "pid": 469005, "label": "重兴镇", }, { "value": 469503, "pid": 469005, "label": "蓬莱镇", }, { "value": 469504, "pid": 469005, "label": "会文镇", }, { "value": 469505, "pid": 469005, "label": "东路镇", }, { "value": 469506, "pid": 469005, "label": "潭牛镇", }, { "value": 469507, "pid": 469005, "label": "东阁镇", }, { "value": 469508, "pid": 469005, "label": "文教镇", }, { "value": 469509, "pid": 469005, "label": "东郊镇", }, { "value": 469510, "pid": 469005, "label": "龙楼镇", }, { "value": 469511, "pid": 469005, "label": "昌洒镇", }, { "value": 469512, "pid": 469005, "label": "翁田镇", }, { "value": 469513, "pid": 469005, "label": "抱罗镇", }, { "value": 469514, "pid": 469005, "label": "冯坡镇", }, { "value": 469515, "pid": 469005, "label": "锦山镇", }, { "value": 469516, "pid": 469005, "label": "铺前镇", }, { "value": 469517, "pid": 469005, "label": "公坡镇", }, { "value": 469518, "pid": 469005, "label": "迈号镇", }, { "value": 469519, "pid": 469005, "label": "清谰镇", }, { "value": 469520, "pid": 469005, "label": "南阳镇", }, { "value": 469521, "pid": 469005, "label": "新桥镇", }, { "value": 469522, "pid": 469005, "label": "头苑镇", }, { "value": 469523, "pid": 469005, "label": "宝芳乡", }, { "value": 469524, "pid": 469005, "label": "龙马乡", }, { "value": 469525, "pid": 469005, "label": "湖山乡", }, { "value": 469526, "pid": 469005, "label": "东路农场", }, { "value": 469527, "pid": 469005, "label": "南阳农场", }, { "value": 469528, "pid": 469005, "label": "罗豆农场", }] }, { "value": 469006, "pid": 460000, "label": "万宁市", "children": [{ "value": 469601, "pid": 469006, "label": "万城镇", }, { "value": 469602, "pid": 469006, "label": "龙滚镇", }, { "value": 469603, "pid": 469006, "label": "和乐镇", }, { "value": 469604, "pid": 469006, "label": "后安镇", }, { "value": 469605, "pid": 469006, "label": "大茂镇", }, { "value": 469606, "pid": 469006, "label": "东澳镇", }, { "value": 469607, "pid": 469006, "label": "礼纪镇", }, { "value": 469608, "pid": 469006, "label": "长丰镇", }, { "value": 469609, "pid": 469006, "label": "山根镇", }, { "value": 469610, "pid": 469006, "label": "北大镇", }, { "value": 469611, "pid": 469006, "label": "南桥镇", }, { "value": 469612, "pid": 469006, "label": "三更罗镇", }, { "value": 469613, "pid": 469006, "label": "东岭农场", }, { "value": 469614, "pid": 469006, "label": "南林农场", }, { "value": 469615, "pid": 469006, "label": "东兴农场", }, { "value": 469616, "pid": 469006, "label": "东和农场", }, { "value": 469617, "pid": 469006, "label": "新中农场", }, { "value": 469618, "pid": 469006, "label": "兴隆华侨农场", }] }, { "value": 469007, "pid": 460000, "label": "东方市", "children": [{ "value": 469701, "pid": 469007, "label": "八所镇", }, { "value": 469702, "pid": 469007, "label": "东河镇", }, { "value": 469703, "pid": 469007, "label": "大田镇", }, { "value": 469704, "pid": 469007, "label": "感城镇", }, { "value": 469705, "pid": 469007, "label": "板桥镇", }, { "value": 469706, "pid": 469007, "label": "三家镇", }, { "value": 469707, "pid": 469007, "label": "四更镇", }, { "value": 469708, "pid": 469007, "label": "新龙镇", }, { "value": 469709, "pid": 469007, "label": "天安乡", }, { "value": 469710, "pid": 469007, "label": "江边乡", }, { "value": 469711, "pid": 469007, "label": "广坝农场", }, { "value": 469712, "pid": 469007, "label": "东方华侨农场", }] }, { "value": 469021, "pid": 460000, "label": "定安县", "children": [{ "value": 469801, "pid": 469021, "label": "定城镇", }, { "value": 469802, "pid": 469021, "label": "新竹镇", }, { "value": 469803, "pid": 469021, "label": "龙湖镇", }, { "value": 469804, "pid": 469021, "label": "雷鸣镇", }, { "value": 469805, "pid": 469021, "label": "龙门镇", }, { "value": 469806, "pid": 469021, "label": "龙河镇", }, { "value": 469807, "pid": 469021, "label": "岭口镇", }, { "value": 469808, "pid": 469021, "label": "翰林镇", }, { "value": 469809, "pid": 469021, "label": "富文镇", }, { "value": 469810, "pid": 469021, "label": "黄竹镇", }, { "value": 469811, "pid": 469021, "label": "金鸡岭农场", }, { "value": 469812, "pid": 469021, "label": "中瑞农场", }, { "value": 469813, "pid": 469021, "label": "南海农场", }, { "value": 469814, "pid": 469021, "label": "城区", }] }, { "value": 469022, "pid": 460000, "label": "屯昌县", "children": [{ "value": 469821, "pid": 469022, "label": "屯城镇", }, { "value": 469822, "pid": 469022, "label": "新兴镇", }, { "value": 469823, "pid": 469022, "label": "枫木镇", }, { "value": 469824, "pid": 469022, "label": "乌坡镇", }, { "value": 469825, "pid": 469022, "label": "南吕镇", }, { "value": 469826, "pid": 469022, "label": "南坤镇", }, { "value": 469827, "pid": 469022, "label": "坡心镇", }, { "value": 469828, "pid": 469022, "label": "西昌镇", }, { "value": 469829, "pid": 469022, "label": "中建农场", }, { "value": 469830, "pid": 469022, "label": "中坤农场", }, { "value": 469831, "pid": 469022, "label": "县城内", }] }, { "value": 469023, "pid": 460000, "label": "澄迈县", "children": [{ "value": 469841, "pid": 469023, "label": "金江镇", }, { "value": 469842, "pid": 469023, "label": "老城镇", }, { "value": 469843, "pid": 469023, "label": "瑞溪镇", }, { "value": 469844, "pid": 469023, "label": "永发镇", }, { "value": 469845, "pid": 469023, "label": "加乐镇", }, { "value": 469846, "pid": 469023, "label": "文儒镇", }, { "value": 469847, "pid": 469023, "label": "中兴镇", }, { "value": 469848, "pid": 469023, "label": "仁兴镇", }, { "value": 469849, "pid": 469023, "label": "福山镇", }, { "value": 469850, "pid": 469023, "label": "桥头镇", }, { "value": 469851, "pid": 469023, "label": "大丰镇", }, { "value": 469852, "pid": 469023, "label": "红光农场", }, { "value": 469853, "pid": 469023, "label": "西达农场", }, { "value": 469854, "pid": 469023, "label": "金安农场", }, { "value": 469855, "pid": 469023, "label": "城区", }] }, { "value": 469024, "pid": 460000, "label": "临高县", "children": [{ "value": 469861, "pid": 469024, "label": "临城镇", }, { "value": 469862, "pid": 469024, "label": "波莲镇", }, { "value": 469863, "pid": 469024, "label": "东英镇", }, { "value": 469864, "pid": 469024, "label": "博厚镇", }, { "value": 469865, "pid": 469024, "label": "皇桐镇", }, { "value": 469866, "pid": 469024, "label": "多文镇", }, { "value": 469867, "pid": 469024, "label": "和舍镇", }, { "value": 469868, "pid": 469024, "label": "南宝镇", }, { "value": 469869, "pid": 469024, "label": "新盈镇", }, { "value": 469870, "pid": 469024, "label": "调楼镇", }, { "value": 469871, "pid": 469024, "label": "加来镇", }, { "value": 469872, "pid": 469024, "label": "红华农场", }, { "value": 469873, "pid": 469024, "label": "加来农场", }, { "value": 469874, "pid": 469024, "label": "城区", }] }, { "value": 469025, "pid": 460000, "label": "白沙黎族自治县", "children": [{ "value": 469881, "pid": 469025, "label": "牙叉镇", }, { "value": 469882, "pid": 469025, "label": "七坊镇", }, { "value": 469883, "pid": 469025, "label": "邦溪镇", }, { "value": 469884, "pid": 469025, "label": "打安镇", }, { "value": 469885, "pid": 469025, "label": "细水乡", }, { "value": 469886, "pid": 469025, "label": "元门乡", }, { "value": 469887, "pid": 469025, "label": "南开乡", }, { "value": 469888, "pid": 469025, "label": "阜龙乡", }, { "value": 469889, "pid": 469025, "label": "青松乡", }, { "value": 469890, "pid": 469025, "label": "金波乡", }, { "value": 469891, "pid": 469025, "label": "荣邦乡", }, { "value": 469892, "pid": 469025, "label": "白沙农场", }, { "value": 469893, "pid": 469025, "label": "龙江农场", }, { "value": 469894, "pid": 469025, "label": "邦溪农场", }, { "value": 469895, "pid": 469025, "label": "城区", }] }, { "value": 469026, "pid": 460000, "label": "昌江黎族自治县", "children": [{ "value": 469901, "pid": 469026, "label": "石碌镇", }, { "value": 469902, "pid": 469026, "label": "叉河镇", }, { "value": 469903, "pid": 469026, "label": "十月田镇", }, { "value": 469904, "pid": 469026, "label": "乌烈镇", }, { "value": 469905, "pid": 469026, "label": "海尾镇", }, { "value": 469906, "pid": 469026, "label": "南罗镇", }, { "value": 469907, "pid": 469026, "label": "太坡镇", }, { "value": 469908, "pid": 469026, "label": "昌化镇", }, { "value": 469909, "pid": 469026, "label": "七叉镇", }, { "value": 469910, "pid": 469026, "label": "保平乡", }, { "value": 469911, "pid": 469026, "label": "昌城乡", }, { "value": 469912, "pid": 469026, "label": "王下乡", }, { "value": 469913, "pid": 469026, "label": "霸王岭林场", }, { "value": 469914, "pid": 469026, "label": "红林农场", }, { "value": 469915, "pid": 469026, "label": "城区", }] }, { "value": 469027, "pid": 460000, "label": "乐东黎族自治县", "children": [{ "value": 469920, "pid": 469027, "label": "抱由镇", }, { "value": 469921, "pid": 469027, "label": "万冲镇", }, { "value": 469922, "pid": 469027, "label": "大安镇", }, { "value": 469923, "pid": 469027, "label": "志仲镇", }, { "value": 469924, "pid": 469027, "label": "千家镇", }, { "value": 469925, "pid": 469027, "label": "九所镇", }, { "value": 469926, "pid": 469027, "label": "利国镇", }, { "value": 469927, "pid": 469027, "label": "黄流镇", }, { "value": 469928, "pid": 469027, "label": "佛罗镇", }, { "value": 469929, "pid": 469027, "label": "尖峰镇", }, { "value": 469930, "pid": 469027, "label": "莺歌海镇", }, { "value": 469931, "pid": 469027, "label": "乐中农场", }, { "value": 469932, "pid": 469027, "label": "山荣农场", }, { "value": 469933, "pid": 469027, "label": "乐光农场", }, { "value": 469934, "pid": 469027, "label": "报伦农场", }, { "value": 469935, "pid": 469027, "label": "福报农场", }, { "value": 469936, "pid": 469027, "label": "保国农场", }, { "value": 469937, "pid": 469027, "label": "保显农场", }, { "value": 469938, "pid": 469027, "label": "尖峰岭林业", }, { "value": 469939, "pid": 469027, "label": "莺歌海盐场", }, { "value": 469940, "pid": 469027, "label": "城区", }] }, { "value": 469028, "pid": 460000, "label": "陵水黎族自治县", "children": [{ "value": 469941, "pid": 469028, "label": "椰林镇", }, { "value": 469942, "pid": 469028, "label": "光坡镇", }, { "value": 469943, "pid": 469028, "label": "三才镇", }, { "value": 469944, "pid": 469028, "label": "英州镇", }, { "value": 469945, "pid": 469028, "label": "隆广镇", }, { "value": 469946, "pid": 469028, "label": "文罗镇", }, { "value": 469947, "pid": 469028, "label": "本号镇", }, { "value": 469948, "pid": 469028, "label": "新村镇", }, { "value": 469949, "pid": 469028, "label": "黎安镇", }, { "value": 469950, "pid": 469028, "label": "提蒙乡", }, { "value": 469951, "pid": 469028, "label": "群英乡", }, { "value": 469952, "pid": 469028, "label": "岭门农场", }, { "value": 469953, "pid": 469028, "label": "南平农场", }, { "value": 469954, "pid": 469028, "label": "城区", }] }, { "value": 469029, "pid": 460000, "label": "保亭黎族苗族自治县", "children": [{ "value": 469961, "pid": 469029, "label": "保城镇", }, { "value": 469962, "pid": 469029, "label": "什玲镇", }, { "value": 469963, "pid": 469029, "label": "加茂镇", }, { "value": 469964, "pid": 469029, "label": "响水镇", }, { "value": 469965, "pid": 469029, "label": "新政镇", }, { "value": 469966, "pid": 469029, "label": "三道镇", }, { "value": 469967, "pid": 469029, "label": "六弓乡", }, { "value": 469968, "pid": 469029, "label": "南林乡", }, { "value": 469969, "pid": 469029, "label": "毛感乡", }, { "value": 469970, "pid": 469029, "label": "新星农场", }, { "value": 469971, "pid": 469029, "label": "金江农场", }, { "value": 469972, "pid": 469029, "label": "三道农场", }] }, { "value": 469030, "pid": 460000, "label": "琼中黎族苗族自治县", "children": [{ "value": 469981, "pid": 469030, "label": "营根镇", }, { "value": 469982, "pid": 469030, "label": "湾岭镇", }, { "value": 469983, "pid": 469030, "label": "黎母山镇", }, { "value": 469984, "pid": 469030, "label": "和平镇", }, { "value": 469985, "pid": 469030, "label": "长征镇", }, { "value": 469986, "pid": 469030, "label": "红毛镇", }, { "value": 469987, "pid": 469030, "label": "中平镇", }, { "value": 469988, "pid": 469030, "label": "上安乡", }, { "value": 469989, "pid": 469030, "label": "什运乡", }, { "value": 469990, "pid": 469030, "label": "吊罗山乡", }, { "value": 469991, "pid": 469030, "label": "阳江农场", }, { "value": 469992, "pid": 469030, "label": "乌石农场", }, { "value": 469993, "pid": 469030, "label": "加钗农场", }, { "value": 469994, "pid": 469030, "label": "长征农场", }, { "value": 469995, "pid": 469030, "label": "城区", }] }] }, { "value": 500000, "pid": 100000, "label": "重庆", "children": [{ "value": 500100, "pid": 500000, "label": "重庆市", "children": [{ "value": 500101, "pid": 500100, "label": "万州区", }, { "value": 500102, "pid": 500100, "label": "涪陵区", }, { "value": 500103, "pid": 500100, "label": "渝中区", }, { "value": 500104, "pid": 500100, "label": "大渡口区", }, { "value": 500105, "pid": 500100, "label": "江北区", }, { "value": 500106, "pid": 500100, "label": "沙坪坝区", }, { "value": 500107, "pid": 500100, "label": "九龙坡区", }, { "value": 500108, "pid": 500100, "label": "南岸区", }, { "value": 500109, "pid": 500100, "label": "北碚区", }, { "value": 500110, "pid": 500100, "label": "綦江区", }, { "value": 500111, "pid": 500100, "label": "大足区", }, { "value": 500112, "pid": 500100, "label": "渝北区", }, { "value": 500113, "pid": 500100, "label": "巴南区", }, { "value": 500114, "pid": 500100, "label": "黔江区", }, { "value": 500115, "pid": 500100, "label": "长寿区", }, { "value": 500116, "pid": 500100, "label": "江津区", }, { "value": 500117, "pid": 500100, "label": "合川区", }, { "value": 500118, "pid": 500100, "label": "永川区", }, { "value": 500119, "pid": 500100, "label": "南川区", }, { "value": 500120, "pid": 500100, "label": "璧山区", }, { "value": 500151, "pid": 500100, "label": "铜梁区", }, { "value": 500152, "pid": 500100, "label": "潼南区", }, { "value": 500153, "pid": 500100, "label": "荣昌区", }, { "value": 500154, "pid": 500100, "label": "开州区", }, { "value": 500155, "pid": 500100, "label": "梁平区", }, { "value": 500156, "pid": 500100, "label": "武隆区", }, { "value": 500229, "pid": 500100, "label": "城口县", }, { "value": 500230, "pid": 500100, "label": "丰都县", }, { "value": 500231, "pid": 500100, "label": "垫江县", }, { "value": 500233, "pid": 500100, "label": "忠县", }, { "value": 500235, "pid": 500100, "label": "云阳县", }, { "value": 500236, "pid": 500100, "label": "奉节县", }, { "value": 500237, "pid": 500100, "label": "巫山县", }, { "value": 500238, "pid": 500100, "label": "巫溪县", }, { "value": 500240, "pid": 500100, "label": "石柱土家族自治县", }, { "value": 500241, "pid": 500100, "label": "秀山土家族苗族自治县", }, { "value": 500242, "pid": 500100, "label": "酉阳土家族苗族自治县", }, { "value": 500243, "pid": 500100, "label": "彭水苗族土家族自治县", }, { "value": 500300, "pid": 500100, "label": "两江新区", }, { "value": 500301, "pid": 500100, "label": "高新区", }, { "value": 500302, "pid": 500100, "label": "璧山高新区", }] }] }, { "value": 510000, "pid": 100000, "label": "四川省", "children": [{ "value": 510100, "pid": 510000, "label": "成都市", "children": [{ "value": 510104, "pid": 510100, "label": "锦江区", }, { "value": 510105, "pid": 510100, "label": "青羊区", }, { "value": 510106, "pid": 510100, "label": "金牛区", }, { "value": 510107, "pid": 510100, "label": "武侯区", }, { "value": 510108, "pid": 510100, "label": "成华区", }, { "value": 510112, "pid": 510100, "label": "龙泉驿区", }, { "value": 510113, "pid": 510100, "label": "青白江区", }, { "value": 510114, "pid": 510100, "label": "新都区", }, { "value": 510115, "pid": 510100, "label": "温江区", }, { "value": 510116, "pid": 510100, "label": "双流区", }, { "value": 510117, "pid": 510100, "label": "郫都区", }, { "value": 510121, "pid": 510100, "label": "金堂县", }, { "value": 510129, "pid": 510100, "label": "大邑县", }, { "value": 510131, "pid": 510100, "label": "蒲江县", }, { "value": 510132, "pid": 510100, "label": "新津县", }, { "value": 510181, "pid": 510100, "label": "都江堰市", }, { "value": 510182, "pid": 510100, "label": "彭州市", }, { "value": 510183, "pid": 510100, "label": "邛崃市", }, { "value": 510184, "pid": 510100, "label": "崇州市", }, { "value": 510185, "pid": 510100, "label": "简阳市", }, { "value": 510186, "pid": 510100, "label": "天府新区", }, { "value": 510187, "pid": 510100, "label": "高新南区", }, { "value": 510188, "pid": 510100, "label": "高新西区", }] }, { "value": 510300, "pid": 510000, "label": "自贡市", "children": [{ "value": 510302, "pid": 510300, "label": "自流井区", }, { "value": 510303, "pid": 510300, "label": "贡井区", }, { "value": 510304, "pid": 510300, "label": "大安区", }, { "value": 510311, "pid": 510300, "label": "沿滩区", }, { "value": 510321, "pid": 510300, "label": "荣县", }, { "value": 510322, "pid": 510300, "label": "富顺县", }, { "value": 510323, "pid": 510300, "label": "高新区", }] }, { "value": 510400, "pid": 510000, "label": "攀枝花市", "children": [{ "value": 510402, "pid": 510400, "label": "东区", }, { "value": 510403, "pid": 510400, "label": "西区", }, { "value": 510411, "pid": 510400, "label": "仁和区", }, { "value": 510421, "pid": 510400, "label": "米易县", }, { "value": 510422, "pid": 510400, "label": "盐边县", }] }, { "value": 510500, "pid": 510000, "label": "泸州市", "children": [{ "value": 510502, "pid": 510500, "label": "江阳区", }, { "value": 510503, "pid": 510500, "label": "纳溪区", }, { "value": 510504, "pid": 510500, "label": "龙马潭区", }, { "value": 510521, "pid": 510500, "label": "泸县", }, { "value": 510522, "pid": 510500, "label": "合江县", }, { "value": 510524, "pid": 510500, "label": "叙永县", }, { "value": 510525, "pid": 510500, "label": "古蔺县", }] }, { "value": 510600, "pid": 510000, "label": "德阳市", "children": [{ "value": 510603, "pid": 510600, "label": "旌阳区", }, { "value": 510604, "pid": 510600, "label": "罗江区", }, { "value": 510623, "pid": 510600, "label": "中江县", }, { "value": 510681, "pid": 510600, "label": "广汉市", }, { "value": 510682, "pid": 510600, "label": "什邡市", }, { "value": 510683, "pid": 510600, "label": "绵竹市", }] }, { "value": 510700, "pid": 510000, "label": "绵阳市", "children": [{ "value": 510703, "pid": 510700, "label": "涪城区", }, { "value": 510704, "pid": 510700, "label": "游仙区", }, { "value": 510705, "pid": 510700, "label": "安州区", }, { "value": 510722, "pid": 510700, "label": "三台县", }, { "value": 510723, "pid": 510700, "label": "盐亭县", }, { "value": 510725, "pid": 510700, "label": "梓潼县", }, { "value": 510726, "pid": 510700, "label": "北川羌族自治县", }, { "value": 510727, "pid": 510700, "label": "平武县", }, { "value": 510781, "pid": 510700, "label": "江油市", }, { "value": 510782, "pid": 510700, "label": "高新区", }, { "value": 510783, "pid": 510700, "label": "经开区", }] }, { "value": 510800, "pid": 510000, "label": "广元市", "children": [{ "value": 510802, "pid": 510800, "label": "利州区", }, { "value": 510811, "pid": 510800, "label": "昭化区", }, { "value": 510812, "pid": 510800, "label": "朝天区", }, { "value": 510821, "pid": 510800, "label": "旺苍县", }, { "value": 510822, "pid": 510800, "label": "青川县", }, { "value": 510823, "pid": 510800, "label": "剑阁县", }, { "value": 510824, "pid": 510800, "label": "苍溪县", }] }, { "value": 510900, "pid": 510000, "label": "遂宁市", "children": [{ "value": 510903, "pid": 510900, "label": "船山区", }, { "value": 510904, "pid": 510900, "label": "安居区", }, { "value": 510921, "pid": 510900, "label": "蓬溪县", }, { "value": 510922, "pid": 510900, "label": "射洪县", }, { "value": 510923, "pid": 510900, "label": "大英县", }, { "value": 510924, "pid": 510900, "label": "经济技术开发区", }] }, { "value": 511000, "pid": 510000, "label": "内江市", "children": [{ "value": 511002, "pid": 511000, "label": "市中区", }, { "value": 511011, "pid": 511000, "label": "东兴区", }, { "value": 511024, "pid": 511000, "label": "威远县", }, { "value": 511025, "pid": 511000, "label": "资中县", }, { "value": 511083, "pid": 511000, "label": "隆昌市", }] }, { "value": 511100, "pid": 510000, "label": "乐山市", "children": [{ "value": 511102, "pid": 511100, "label": "市中区", }, { "value": 511111, "pid": 511100, "label": "沙湾区", }, { "value": 511112, "pid": 511100, "label": "五通桥区", }, { "value": 511113, "pid": 511100, "label": "金口河区", }, { "value": 511123, "pid": 511100, "label": "犍为县", }, { "value": 511124, "pid": 511100, "label": "井研县", }, { "value": 511126, "pid": 511100, "label": "夹江县", }, { "value": 511129, "pid": 511100, "label": "沐川县", }, { "value": 511132, "pid": 511100, "label": "峨边彝族自治县", }, { "value": 511133, "pid": 511100, "label": "马边彝族自治县", }, { "value": 511181, "pid": 511100, "label": "峨眉山市", }] }, { "value": 511300, "pid": 510000, "label": "南充市", "children": [{ "value": 511302, "pid": 511300, "label": "顺庆区", }, { "value": 511303, "pid": 511300, "label": "高坪区", }, { "value": 511304, "pid": 511300, "label": "嘉陵区", }, { "value": 511321, "pid": 511300, "label": "南部县", }, { "value": 511322, "pid": 511300, "label": "营山县", }, { "value": 511323, "pid": 511300, "label": "蓬安县", }, { "value": 511324, "pid": 511300, "label": "仪陇县", }, { "value": 511325, "pid": 511300, "label": "西充县", }, { "value": 511381, "pid": 511300, "label": "阆中市", }] }, { "value": 511400, "pid": 510000, "label": "眉山市", "children": [{ "value": 511402, "pid": 511400, "label": "东坡区", }, { "value": 511403, "pid": 511400, "label": "彭山区", }, { "value": 511421, "pid": 511400, "label": "仁寿县", }, { "value": 511423, "pid": 511400, "label": "洪雅县", }, { "value": 511424, "pid": 511400, "label": "丹棱县", }, { "value": 511425, "pid": 511400, "label": "青神县", }] }, { "value": 511500, "pid": 510000, "label": "宜宾市", "children": [{ "value": 511502, "pid": 511500, "label": "翠屏区", }, { "value": 511503, "pid": 511500, "label": "南溪区", }, { "value": 511504, "pid": 511500, "label": "叙州区", }, { "value": 511523, "pid": 511500, "label": "江安县", }, { "value": 511524, "pid": 511500, "label": "长宁县", }, { "value": 511525, "pid": 511500, "label": "高县", }, { "value": 511526, "pid": 511500, "label": "珙县", }, { "value": 511527, "pid": 511500, "label": "筠连县", }, { "value": 511528, "pid": 511500, "label": "兴文县", }, { "value": 511529, "pid": 511500, "label": "屏山县", }] }, { "value": 511600, "pid": 510000, "label": "广安市", "children": [{ "value": 511602, "pid": 511600, "label": "广安区", }, { "value": 511603, "pid": 511600, "label": "前锋区", }, { "value": 511621, "pid": 511600, "label": "岳池县", }, { "value": 511622, "pid": 511600, "label": "武胜县", }, { "value": 511623, "pid": 511600, "label": "邻水县", }, { "value": 511681, "pid": 511600, "label": "华蓥市", }] }, { "value": 511700, "pid": 510000, "label": "达州市", "children": [{ "value": 511702, "pid": 511700, "label": "通川区", }, { "value": 511703, "pid": 511700, "label": "达川区", }, { "value": 511722, "pid": 511700, "label": "宣汉县", }, { "value": 511723, "pid": 511700, "label": "开江县", }, { "value": 511724, "pid": 511700, "label": "大竹县", }, { "value": 511725, "pid": 511700, "label": "渠县", }, { "value": 511781, "pid": 511700, "label": "万源市", }] }, { "value": 511800, "pid": 510000, "label": "雅安市", "children": [{ "value": 511802, "pid": 511800, "label": "雨城区", }, { "value": 511803, "pid": 511800, "label": "名山区", }, { "value": 511822, "pid": 511800, "label": "荥经县", }, { "value": 511823, "pid": 511800, "label": "汉源县", }, { "value": 511824, "pid": 511800, "label": "石棉县", }, { "value": 511825, "pid": 511800, "label": "天全县", }, { "value": 511826, "pid": 511800, "label": "芦山县", }, { "value": 511827, "pid": 511800, "label": "宝兴县", }] }, { "value": 511900, "pid": 510000, "label": "巴中市", "children": [{ "value": 511902, "pid": 511900, "label": "巴州区", }, { "value": 511903, "pid": 511900, "label": "恩阳区", }, { "value": 511921, "pid": 511900, "label": "通江县", }, { "value": 511922, "pid": 511900, "label": "南江县", }, { "value": 511923, "pid": 511900, "label": "平昌县", }] }, { "value": 512000, "pid": 510000, "label": "资阳市", "children": [{ "value": 512002, "pid": 512000, "label": "雁江区", }, { "value": 512021, "pid": 512000, "label": "安岳县", }, { "value": 512022, "pid": 512000, "label": "乐至县", }] }, { "value": 513200, "pid": 510000, "label": "阿坝藏族羌族自治州", "children": [{ "value": 513201, "pid": 513200, "label": "马尔康市", }, { "value": 513221, "pid": 513200, "label": "汶川县", }, { "value": 513222, "pid": 513200, "label": "理县", }, { "value": 513223, "pid": 513200, "label": "茂县", }, { "value": 513224, "pid": 513200, "label": "松潘县", }, { "value": 513225, "pid": 513200, "label": "九寨沟县", }, { "value": 513226, "pid": 513200, "label": "金川县", }, { "value": 513227, "pid": 513200, "label": "小金县", }, { "value": 513228, "pid": 513200, "label": "黑水县", }, { "value": 513230, "pid": 513200, "label": "壤塘县", }, { "value": 513231, "pid": 513200, "label": "阿坝县", }, { "value": 513232, "pid": 513200, "label": "若尔盖县", }, { "value": 513233, "pid": 513200, "label": "红原县", }] }, { "value": 513300, "pid": 510000, "label": "甘孜藏族自治州", "children": [{ "value": 513301, "pid": 513300, "label": "康定市", }, { "value": 513322, "pid": 513300, "label": "泸定县", }, { "value": 513323, "pid": 513300, "label": "丹巴县", }, { "value": 513324, "pid": 513300, "label": "九龙县", }, { "value": 513325, "pid": 513300, "label": "雅江县", }, { "value": 513326, "pid": 513300, "label": "道孚县", }, { "value": 513327, "pid": 513300, "label": "炉霍县", }, { "value": 513328, "pid": 513300, "label": "甘孜县", }, { "value": 513329, "pid": 513300, "label": "新龙县", }, { "value": 513330, "pid": 513300, "label": "德格县", }, { "value": 513331, "pid": 513300, "label": "白玉县", }, { "value": 513332, "pid": 513300, "label": "石渠县", }, { "value": 513333, "pid": 513300, "label": "色达县", }, { "value": 513334, "pid": 513300, "label": "理塘县", }, { "value": 513335, "pid": 513300, "label": "巴塘县", }, { "value": 513336, "pid": 513300, "label": "乡城县", }, { "value": 513337, "pid": 513300, "label": "稻城县", }, { "value": 513338, "pid": 513300, "label": "得荣县", }] }, { "value": 513400, "pid": 510000, "label": "凉山彝族自治州", "children": [{ "value": 513401, "pid": 513400, "label": "西昌市", }, { "value": 513422, "pid": 513400, "label": "木里藏族自治县", }, { "value": 513423, "pid": 513400, "label": "盐源县", }, { "value": 513424, "pid": 513400, "label": "德昌县", }, { "value": 513425, "pid": 513400, "label": "会理县", }, { "value": 513426, "pid": 513400, "label": "会东县", }, { "value": 513427, "pid": 513400, "label": "宁南县", }, { "value": 513428, "pid": 513400, "label": "普格县", }, { "value": 513429, "pid": 513400, "label": "布拖县", }, { "value": 513430, "pid": 513400, "label": "金阳县", }, { "value": 513431, "pid": 513400, "label": "昭觉县", }, { "value": 513432, "pid": 513400, "label": "喜德县", }, { "value": 513433, "pid": 513400, "label": "冕宁县", }, { "value": 513434, "pid": 513400, "label": "越西县", }, { "value": 513435, "pid": 513400, "label": "甘洛县", }, { "value": 513436, "pid": 513400, "label": "美姑县", }, { "value": 513437, "pid": 513400, "label": "雷波县", }] }] }, { "value": 520000, "pid": 100000, "label": "贵州省", "children": [{ "value": 520100, "pid": 520000, "label": "贵阳市", "children": [{ "value": 520102, "pid": 520100, "label": "南明区", }, { "value": 520103, "pid": 520100, "label": "云岩区", }, { "value": 520111, "pid": 520100, "label": "花溪区", }, { "value": 520112, "pid": 520100, "label": "乌当区", }, { "value": 520113, "pid": 520100, "label": "白云区", }, { "value": 520115, "pid": 520100, "label": "观山湖区", }, { "value": 520121, "pid": 520100, "label": "开阳县", }, { "value": 520122, "pid": 520100, "label": "息烽县", }, { "value": 520123, "pid": 520100, "label": "修文县", }, { "value": 520181, "pid": 520100, "label": "清镇市", }, { "value": 520182, "pid": 520100, "label": "贵安新区", }, { "value": 520183, "pid": 520100, "label": "高新区", }] }, { "value": 520200, "pid": 520000, "label": "六盘水市", "children": [{ "value": 520201, "pid": 520200, "label": "钟山区", }, { "value": 520203, "pid": 520200, "label": "六枝特区", }, { "value": 520221, "pid": 520200, "label": "水城县", }, { "value": 520281, "pid": 520200, "label": "盘州市", }] }, { "value": 520300, "pid": 520000, "label": "遵义市", "children": [{ "value": 520302, "pid": 520300, "label": "红花岗区", }, { "value": 520303, "pid": 520300, "label": "汇川区", }, { "value": 520304, "pid": 520300, "label": "播州区", }, { "value": 520322, "pid": 520300, "label": "桐梓县", }, { "value": 520323, "pid": 520300, "label": "绥阳县", }, { "value": 520324, "pid": 520300, "label": "正安县", }, { "value": 520325, "pid": 520300, "label": "道真仡佬族苗族自治县", }, { "value": 520326, "pid": 520300, "label": "务川仡佬族苗族自治县", }, { "value": 520327, "pid": 520300, "label": "凤冈县", }, { "value": 520328, "pid": 520300, "label": "湄潭县", }, { "value": 520329, "pid": 520300, "label": "余庆县", }, { "value": 520330, "pid": 520300, "label": "习水县", }, { "value": 520381, "pid": 520300, "label": "赤水市", }, { "value": 520382, "pid": 520300, "label": "仁怀市", }] }, { "value": 520400, "pid": 520000, "label": "安顺市", "children": [{ "value": 520402, "pid": 520400, "label": "西秀区", }, { "value": 520403, "pid": 520400, "label": "平坝区", }, { "value": 520422, "pid": 520400, "label": "普定县", }, { "value": 520423, "pid": 520400, "label": "镇宁布依族苗族自治县", }, { "value": 520424, "pid": 520400, "label": "关岭布依族苗族自治县", }, { "value": 520425, "pid": 520400, "label": "紫云苗族布依族自治县", }] }, { "value": 520500, "pid": 520000, "label": "毕节市", "children": [{ "value": 520502, "pid": 520500, "label": "七星关区", }, { "value": 520521, "pid": 520500, "label": "大方县", }, { "value": 520522, "pid": 520500, "label": "黔西县", }, { "value": 520523, "pid": 520500, "label": "金沙县", }, { "value": 520524, "pid": 520500, "label": "织金县", }, { "value": 520525, "pid": 520500, "label": "纳雍县", }, { "value": 520526, "pid": 520500, "label": "威宁彝族回族苗族自治县", }, { "value": 520527, "pid": 520500, "label": "赫章县", }] }, { "value": 520600, "pid": 520000, "label": "铜仁市", "children": [{ "value": 520602, "pid": 520600, "label": "碧江区", }, { "value": 520603, "pid": 520600, "label": "万山区", }, { "value": 520621, "pid": 520600, "label": "江口县", }, { "value": 520622, "pid": 520600, "label": "玉屏侗族自治县", }, { "value": 520623, "pid": 520600, "label": "石阡县", }, { "value": 520624, "pid": 520600, "label": "思南县", }, { "value": 520625, "pid": 520600, "label": "印江土家族苗族自治县", }, { "value": 520626, "pid": 520600, "label": "德江县", }, { "value": 520627, "pid": 520600, "label": "沿河土家族自治县", }, { "value": 520628, "pid": 520600, "label": "松桃苗族自治县", }] }, { "value": 522300, "pid": 520000, "label": "黔西南布依族苗族自治州", "children": [{ "value": 522301, "pid": 522300, "label": "兴义市 ", }, { "value": 522302, "pid": 522300, "label": "兴仁市", }, { "value": 522323, "pid": 522300, "label": "普安县", }, { "value": 522324, "pid": 522300, "label": "晴隆县", }, { "value": 522325, "pid": 522300, "label": "贞丰县", }, { "value": 522326, "pid": 522300, "label": "望谟县", }, { "value": 522327, "pid": 522300, "label": "册亨县", }, { "value": 522328, "pid": 522300, "label": "安龙县", }] }, { "value": 522600, "pid": 520000, "label": "黔东南苗族侗族自治州", "children": [{ "value": 522601, "pid": 522600, "label": "凯里市", }, { "value": 522622, "pid": 522600, "label": "黄平县", }, { "value": 522623, "pid": 522600, "label": "施秉县", }, { "value": 522624, "pid": 522600, "label": "三穗县", }, { "value": 522625, "pid": 522600, "label": "镇远县", }, { "value": 522626, "pid": 522600, "label": "岑巩县", }, { "value": 522627, "pid": 522600, "label": "天柱县", }, { "value": 522628, "pid": 522600, "label": "锦屏县", }, { "value": 522629, "pid": 522600, "label": "剑河县", }, { "value": 522630, "pid": 522600, "label": "台江县", }, { "value": 522631, "pid": 522600, "label": "黎平县", }, { "value": 522632, "pid": 522600, "label": "榕江县", }, { "value": 522633, "pid": 522600, "label": "从江县", }, { "value": 522634, "pid": 522600, "label": "雷山县", }, { "value": 522635, "pid": 522600, "label": "麻江县", }, { "value": 522636, "pid": 522600, "label": "丹寨县", }] }, { "value": 522700, "pid": 520000, "label": "黔南布依族苗族自治州", "children": [{ "value": 522701, "pid": 522700, "label": "都匀市", }, { "value": 522702, "pid": 522700, "label": "福泉市", }, { "value": 522722, "pid": 522700, "label": "荔波县", }, { "value": 522723, "pid": 522700, "label": "贵定县", }, { "value": 522725, "pid": 522700, "label": "瓮安县", }, { "value": 522726, "pid": 522700, "label": "独山县", }, { "value": 522727, "pid": 522700, "label": "平塘县", }, { "value": 522728, "pid": 522700, "label": "罗甸县", }, { "value": 522729, "pid": 522700, "label": "长顺县", }, { "value": 522730, "pid": 522700, "label": "龙里县", }, { "value": 522731, "pid": 522700, "label": "惠水县", }, { "value": 522732, "pid": 522700, "label": "三都水族自治县", }] }] }, { "value": 530000, "pid": 100000, "label": "云南省", "children": [{ "value": 530100, "pid": 530000, "label": "昆明市", "children": [{ "value": 530102, "pid": 530100, "label": "五华区", }, { "value": 530103, "pid": 530100, "label": "盘龙区", }, { "value": 530111, "pid": 530100, "label": "官渡区", }, { "value": 530112, "pid": 530100, "label": "西山区", }, { "value": 530113, "pid": 530100, "label": "东川区", }, { "value": 530114, "pid": 530100, "label": "呈贡区", }, { "value": 530115, "pid": 530100, "label": "晋宁区", }, { "value": 530124, "pid": 530100, "label": "富民县", }, { "value": 530125, "pid": 530100, "label": "宜良县", }, { "value": 530126, "pid": 530100, "label": "石林彝族自治县", }, { "value": 530127, "pid": 530100, "label": "嵩明县", }, { "value": 530128, "pid": 530100, "label": "禄劝彝族苗族自治县", }, { "value": 530129, "pid": 530100, "label": "寻甸回族彝族自治县 ", }, { "value": 530181, "pid": 530100, "label": "安宁市", }, { "value": 530182, "pid": 530100, "label": "滇中新区", }, { "value": 530183, "pid": 530100, "label": "高新区", }] }, { "value": 530300, "pid": 530000, "label": "曲靖市", "children": [{ "value": 530302, "pid": 530300, "label": "麒麟区", }, { "value": 530303, "pid": 530300, "label": "沾益区", }, { "value": 530304, "pid": 530300, "label": "马龙区", }, { "value": 530322, "pid": 530300, "label": "陆良县", }, { "value": 530323, "pid": 530300, "label": "师宗县", }, { "value": 530324, "pid": 530300, "label": "罗平县", }, { "value": 530325, "pid": 530300, "label": "富源县", }, { "value": 530326, "pid": 530300, "label": "会泽县", }, { "value": 530381, "pid": 530300, "label": "宣威市", }] }, { "value": 530400, "pid": 530000, "label": "玉溪市", "children": [{ "value": 530402, "pid": 530400, "label": "红塔区", }, { "value": 530403, "pid": 530400, "label": "江川区", }, { "value": 530422, "pid": 530400, "label": "澄江县", }, { "value": 530423, "pid": 530400, "label": "通海县", }, { "value": 530424, "pid": 530400, "label": "华宁县", }, { "value": 530425, "pid": 530400, "label": "易门县", }, { "value": 530426, "pid": 530400, "label": "峨山彝族自治县", }, { "value": 530427, "pid": 530400, "label": "新平彝族傣族自治县", }, { "value": 530428, "pid": 530400, "label": "元江哈尼族彝族傣族自治县", }] }, { "value": 530500, "pid": 530000, "label": "保山市", "children": [{ "value": 530502, "pid": 530500, "label": "隆阳区", }, { "value": 530521, "pid": 530500, "label": "施甸县", }, { "value": 530523, "pid": 530500, "label": "龙陵县", }, { "value": 530524, "pid": 530500, "label": "昌宁县", }, { "value": 530581, "pid": 530500, "label": "腾冲市", }] }, { "value": 530600, "pid": 530000, "label": "昭通市", "children": [{ "value": 530602, "pid": 530600, "label": "昭阳区", }, { "value": 530621, "pid": 530600, "label": "鲁甸县", }, { "value": 530622, "pid": 530600, "label": "巧家县", }, { "value": 530623, "pid": 530600, "label": "盐津县", }, { "value": 530624, "pid": 530600, "label": "大关县", }, { "value": 530625, "pid": 530600, "label": "永善县", }, { "value": 530626, "pid": 530600, "label": "绥江县", }, { "value": 530627, "pid": 530600, "label": "镇雄县", }, { "value": 530628, "pid": 530600, "label": "彝良县", }, { "value": 530629, "pid": 530600, "label": "威信县", }, { "value": 530681, "pid": 530600, "label": "水富市", }] }, { "value": 530700, "pid": 530000, "label": "丽江市", "children": [{ "value": 530702, "pid": 530700, "label": "古城区", }, { "value": 530721, "pid": 530700, "label": "玉龙纳西族自治县", }, { "value": 530722, "pid": 530700, "label": "永胜县", }, { "value": 530723, "pid": 530700, "label": "华坪县", }, { "value": 530724, "pid": 530700, "label": "宁蒗彝族自治县", }] }, { "value": 530800, "pid": 530000, "label": "普洱市", "children": [{ "value": 530802, "pid": 530800, "label": "思茅区", }, { "value": 530821, "pid": 530800, "label": "宁洱哈尼族彝族自治县", }, { "value": 530822, "pid": 530800, "label": "墨江哈尼族自治县", }, { "value": 530823, "pid": 530800, "label": "景东彝族自治县", }, { "value": 530824, "pid": 530800, "label": "景谷傣族彝族自治县", }, { "value": 530825, "pid": 530800, "label": "镇沅彝族哈尼族拉祜族自治县", }, { "value": 530826, "pid": 530800, "label": "江城哈尼族彝族自治县", }, { "value": 530827, "pid": 530800, "label": "孟连傣族拉祜族佤族自治县", }, { "value": 530828, "pid": 530800, "label": "澜沧拉祜族自治县", }, { "value": 530829, "pid": 530800, "label": "西盟佤族自治县", }] }, { "value": 530900, "pid": 530000, "label": "临沧市", "children": [{ "value": 530902, "pid": 530900, "label": "临翔区", }, { "value": 530921, "pid": 530900, "label": "凤庆县", }, { "value": 530922, "pid": 530900, "label": "云县", }, { "value": 530923, "pid": 530900, "label": "永德县", }, { "value": 530924, "pid": 530900, "label": "镇康县", }, { "value": 530925, "pid": 530900, "label": "双江拉祜族佤族布朗族傣族自治县", }, { "value": 530926, "pid": 530900, "label": "耿马傣族佤族自治县", }, { "value": 530927, "pid": 530900, "label": "沧源佤族自治县", }] }, { "value": 532300, "pid": 530000, "label": "楚雄彝族自治州", "children": [{ "value": 532301, "pid": 532300, "label": "楚雄市", }, { "value": 532322, "pid": 532300, "label": "双柏县", }, { "value": 532323, "pid": 532300, "label": "牟定县", }, { "value": 532324, "pid": 532300, "label": "南华县", }, { "value": 532325, "pid": 532300, "label": "姚安县", }, { "value": 532326, "pid": 532300, "label": "大姚县", }, { "value": 532327, "pid": 532300, "label": "永仁县", }, { "value": 532328, "pid": 532300, "label": "元谋县", }, { "value": 532329, "pid": 532300, "label": "武定县", }, { "value": 532331, "pid": 532300, "label": "禄丰县", }] }, { "value": 532500, "pid": 530000, "label": "红河哈尼族彝族自治州", "children": [{ "value": 532501, "pid": 532500, "label": "个旧市", }, { "value": 532502, "pid": 532500, "label": "开远市", }, { "value": 532503, "pid": 532500, "label": "蒙自市", }, { "value": 532504, "pid": 532500, "label": "弥勒市", }, { "value": 532523, "pid": 532500, "label": "屏边苗族自治县", }, { "value": 532524, "pid": 532500, "label": "建水县", }, { "value": 532525, "pid": 532500, "label": "石屏县", }, { "value": 532527, "pid": 532500, "label": "泸西县", }, { "value": 532528, "pid": 532500, "label": "元阳县", }, { "value": 532529, "pid": 532500, "label": "红河县", }, { "value": 532530, "pid": 532500, "label": "金平苗族瑶族傣族自治县", }, { "value": 532531, "pid": 532500, "label": "绿春县", }, { "value": 532532, "pid": 532500, "label": "河口瑶族自治县", }] }, { "value": 532600, "pid": 530000, "label": "文山壮族苗族自治州", "children": [{ "value": 532601, "pid": 532600, "label": "文山市", }, { "value": 532622, "pid": 532600, "label": "砚山县", }, { "value": 532623, "pid": 532600, "label": "西畴县", }, { "value": 532624, "pid": 532600, "label": "麻栗坡县", }, { "value": 532625, "pid": 532600, "label": "马关县", }, { "value": 532626, "pid": 532600, "label": "丘北县", }, { "value": 532627, "pid": 532600, "label": "广南县", }, { "value": 532628, "pid": 532600, "label": "富宁县", }] }, { "value": 532800, "pid": 530000, "label": "西双版纳傣族自治州", "children": [{ "value": 532801, "pid": 532800, "label": "景洪市", }, { "value": 532822, "pid": 532800, "label": "勐海县", }, { "value": 532823, "pid": 532800, "label": "勐腊县", }] }, { "value": 532900, "pid": 530000, "label": "大理白族自治州", "children": [{ "value": 532901, "pid": 532900, "label": "大理市", }, { "value": 532922, "pid": 532900, "label": "漾濞彝族自治县", }, { "value": 532923, "pid": 532900, "label": "祥云县", }, { "value": 532924, "pid": 532900, "label": "宾川县", }, { "value": 532925, "pid": 532900, "label": "弥渡县", }, { "value": 532926, "pid": 532900, "label": "南涧彝族自治县", }, { "value": 532927, "pid": 532900, "label": "巍山彝族回族自治县", }, { "value": 532928, "pid": 532900, "label": "永平县", }, { "value": 532929, "pid": 532900, "label": "云龙县", }, { "value": 532930, "pid": 532900, "label": "洱源县", }, { "value": 532931, "pid": 532900, "label": "剑川县", }, { "value": 532932, "pid": 532900, "label": "鹤庆县", }] }, { "value": 533100, "pid": 530000, "label": "德宏傣族景颇族自治州", "children": [{ "value": 533102, "pid": 533100, "label": "瑞丽市", }, { "value": 533103, "pid": 533100, "label": "芒市", }, { "value": 533122, "pid": 533100, "label": "梁河县", }, { "value": 533123, "pid": 533100, "label": "盈江县", }, { "value": 533124, "pid": 533100, "label": "陇川县", }] }, { "value": 533300, "pid": 530000, "label": "怒江傈僳族自治州", "children": [{ "value": 533301, "pid": 533300, "label": "泸水市", }, { "value": 533323, "pid": 533300, "label": "福贡县", }, { "value": 533324, "pid": 533300, "label": "贡山独龙族怒族自治县", }, { "value": 533325, "pid": 533300, "label": "兰坪白族普米族自治县", }] }, { "value": 533400, "pid": 530000, "label": "迪庆藏族自治州", "children": [{ "value": 533401, "pid": 533400, "label": "香格里拉市", }, { "value": 533422, "pid": 533400, "label": "德钦县", }, { "value": 533423, "pid": 533400, "label": "维西傈僳族自治县", }] }] }, { "value": 540000, "pid": 100000, "label": "西藏自治区", "children": [{ "value": 540100, "pid": 540000, "label": "拉萨市", "children": [{ "value": 540102, "pid": 540100, "label": "城关区", }, { "value": 540103, "pid": 540100, "label": "堆龙德庆区", }, { "value": 540104, "pid": 540100, "label": "达孜区", }, { "value": 540121, "pid": 540100, "label": "林周县", }, { "value": 540122, "pid": 540100, "label": "当雄县", }, { "value": 540123, "pid": 540100, "label": "尼木县", }, { "value": 540124, "pid": 540100, "label": "曲水县", }, { "value": 540127, "pid": 540100, "label": "墨竹工卡县", }, { "value": 540171, "pid": 540100, "label": "格尔木藏青工业园区", }, { "value": 540173, "pid": 540100, "label": "西藏文化旅游创意园区", }, { "value": 540174, "pid": 540100, "label": "达孜工业园区", }] }, { "value": 540200, "pid": 540000, "label": "日喀则市", "children": [{ "value": 540202, "pid": 540200, "label": "桑珠孜区", }, { "value": 540221, "pid": 540200, "label": "南木林县", }, { "value": 540222, "pid": 540200, "label": "江孜县", }, { "value": 540223, "pid": 540200, "label": "定日县", }, { "value": 540224, "pid": 540200, "label": "萨迦县", }, { "value": 540225, "pid": 540200, "label": "拉孜县", }, { "value": 540226, "pid": 540200, "label": "昂仁县", }, { "value": 540227, "pid": 540200, "label": "谢通门县", }, { "value": 540228, "pid": 540200, "label": "白朗县", }, { "value": 540229, "pid": 540200, "label": "仁布县", }, { "value": 540230, "pid": 540200, "label": "康马县", }, { "value": 540231, "pid": 540200, "label": "定结县", }, { "value": 540232, "pid": 540200, "label": "仲巴县", }, { "value": 540233, "pid": 540200, "label": "亚东县", }, { "value": 540234, "pid": 540200, "label": "吉隆县", }, { "value": 540235, "pid": 540200, "label": "聂拉木县", }, { "value": 540236, "pid": 540200, "label": "萨嘎县", }, { "value": 540237, "pid": 540200, "label": "岗巴县", }] }, { "value": 540300, "pid": 540000, "label": "昌都市", "children": [{ "value": 540302, "pid": 540300, "label": "卡若区", }, { "value": 540321, "pid": 540300, "label": "江达县", }, { "value": 540322, "pid": 540300, "label": "贡觉县", }, { "value": 540323, "pid": 540300, "label": "类乌齐县", }, { "value": 540324, "pid": 540300, "label": "丁青县", }, { "value": 540325, "pid": 540300, "label": "察雅县", }, { "value": 540326, "pid": 540300, "label": "八宿县", }, { "value": 540327, "pid": 540300, "label": "左贡县", }, { "value": 540328, "pid": 540300, "label": "芒康县", }, { "value": 540329, "pid": 540300, "label": "洛隆县", }, { "value": 540330, "pid": 540300, "label": "边坝县", }] }, { "value": 540400, "pid": 540000, "label": "林芝市", "children": [{ "value": 540402, "pid": 540400, "label": "巴宜区", }, { "value": 540421, "pid": 540400, "label": "工布江达县", }, { "value": 540422, "pid": 540400, "label": "米林县", }, { "value": 540423, "pid": 540400, "label": "墨脱县", }, { "value": 540424, "pid": 540400, "label": "波密县", }, { "value": 540425, "pid": 540400, "label": "察隅县", }, { "value": 540426, "pid": 540400, "label": "朗县", }] }, { "value": 540500, "pid": 540000, "label": "山南市", "children": [{ "value": 540502, "pid": 540500, "label": "乃东区", }, { "value": 540521, "pid": 540500, "label": "扎囊县", }, { "value": 540522, "pid": 540500, "label": "贡嘎县", }, { "value": 540523, "pid": 540500, "label": "桑日县", }, { "value": 540524, "pid": 540500, "label": "琼结县", }, { "value": 540525, "pid": 540500, "label": "曲松县", }, { "value": 540526, "pid": 540500, "label": "措美县", }, { "value": 540527, "pid": 540500, "label": "洛扎县", }, { "value": 540528, "pid": 540500, "label": "加查县", }, { "value": 540529, "pid": 540500, "label": "隆子县", }, { "value": 540530, "pid": 540500, "label": "错那县", }, { "value": 540531, "pid": 540500, "label": "浪卡子县", }] }, { "value": 540600, "pid": 540000, "label": "那曲市", "children": [{ "value": 540602, "pid": 540600, "label": "色尼区", }, { "value": 540621, "pid": 540600, "label": "嘉黎县", }, { "value": 540622, "pid": 540600, "label": "比如县", }, { "value": 540623, "pid": 540600, "label": "聂荣县", }, { "value": 540624, "pid": 540600, "label": "安多县", }, { "value": 540625, "pid": 540600, "label": "申扎县", }, { "value": 540626, "pid": 540600, "label": "索县", }, { "value": 540627, "pid": 540600, "label": "班戈县", }, { "value": 540628, "pid": 540600, "label": "巴青县", }, { "value": 540629, "pid": 540600, "label": "尼玛县", }, { "value": 540630, "pid": 540600, "label": "双湖县", }] }, { "value": 542500, "pid": 540000, "label": "阿里地区", "children": [{ "value": 542521, "pid": 542500, "label": "普兰县", }, { "value": 542522, "pid": 542500, "label": "札达县", }, { "value": 542523, "pid": 542500, "label": "噶尔县", }, { "value": 542524, "pid": 542500, "label": "日土县", }, { "value": 542525, "pid": 542500, "label": "革吉县", }, { "value": 542526, "pid": 542500, "label": "改则县", }, { "value": 542527, "pid": 542500, "label": "措勤县", }] }] }, { "value": 610000, "pid": 100000, "label": "陕西省", "children": [{ "value": 610100, "pid": 610000, "label": "西安市", "children": [{ "value": 610102, "pid": 610100, "label": "新城区", }, { "value": 610103, "pid": 610100, "label": "碑林区", }, { "value": 610104, "pid": 610100, "label": "莲湖区", }, { "value": 610111, "pid": 610100, "label": "灞桥区", }, { "value": 610112, "pid": 610100, "label": "未央区", }, { "value": 610113, "pid": 610100, "label": "雁塔区", }, { "value": 610114, "pid": 610100, "label": "阎良区", }, { "value": 610115, "pid": 610100, "label": "临潼区", }, { "value": 610116, "pid": 610100, "label": "长安区", }, { "value": 610117, "pid": 610100, "label": "高陵区", }, { "value": 610118, "pid": 610100, "label": "鄠邑区", }, { "value": 610122, "pid": 610100, "label": "蓝田县", }, { "value": 610124, "pid": 610100, "label": "周至县", }, { "value": 610125, "pid": 610100, "label": "西咸新区", }, { "value": 610127, "pid": 610100, "label": "曲江新区", }, { "value": 610128, "pid": 610100, "label": "高新区", }] }, { "value": 610200, "pid": 610000, "label": "铜川市", "children": [{ "value": 610202, "pid": 610200, "label": "王益区", }, { "value": 610203, "pid": 610200, "label": "印台区", }, { "value": 610204, "pid": 610200, "label": "耀州区", }, { "value": 610222, "pid": 610200, "label": "宜君县", }] }, { "value": 610300, "pid": 610000, "label": "宝鸡市", "children": [{ "value": 610302, "pid": 610300, "label": "渭滨区", }, { "value": 610303, "pid": 610300, "label": "金台区", }, { "value": 610304, "pid": 610300, "label": "陈仓区", }, { "value": 610322, "pid": 610300, "label": "凤翔县", }, { "value": 610323, "pid": 610300, "label": "岐山县", }, { "value": 610324, "pid": 610300, "label": "扶风县", }, { "value": 610326, "pid": 610300, "label": "眉县", }, { "value": 610327, "pid": 610300, "label": "陇县", }, { "value": 610328, "pid": 610300, "label": "千阳县", }, { "value": 610329, "pid": 610300, "label": "麟游县", }, { "value": 610330, "pid": 610300, "label": "凤县", }, { "value": 610331, "pid": 610300, "label": "太白县", }, { "value": 610332, "pid": 610300, "label": "高新区", }] }, { "value": 610400, "pid": 610000, "label": "咸阳市", "children": [{ "value": 610402, "pid": 610400, "label": "秦都区", }, { "value": 610403, "pid": 610400, "label": "杨陵区", }, { "value": 610404, "pid": 610400, "label": "渭城区", }, { "value": 610422, "pid": 610400, "label": "三原县", }, { "value": 610423, "pid": 610400, "label": "泾阳县", }, { "value": 610424, "pid": 610400, "label": "乾县", }, { "value": 610425, "pid": 610400, "label": "礼泉县", }, { "value": 610426, "pid": 610400, "label": "永寿县", }, { "value": 610428, "pid": 610400, "label": "长武县", }, { "value": 610429, "pid": 610400, "label": "旬邑县", }, { "value": 610430, "pid": 610400, "label": "淳化县", }, { "value": 610431, "pid": 610400, "label": "武功县", }, { "value": 610481, "pid": 610400, "label": "兴平市", }, { "value": 610482, "pid": 610400, "label": "彬州市", }, { "value": 610483, "pid": 610400, "label": "高新区", }] }, { "value": 610500, "pid": 610000, "label": "渭南市", "children": [{ "value": 610502, "pid": 610500, "label": "临渭区", }, { "value": 610503, "pid": 610500, "label": "华州区", }, { "value": 610522, "pid": 610500, "label": "潼关县", }, { "value": 610523, "pid": 610500, "label": "大荔县", }, { "value": 610524, "pid": 610500, "label": "合阳县", }, { "value": 610525, "pid": 610500, "label": "澄城县", }, { "value": 610526, "pid": 610500, "label": "蒲城县", }, { "value": 610527, "pid": 610500, "label": "白水县", }, { "value": 610528, "pid": 610500, "label": "富平县", }, { "value": 610581, "pid": 610500, "label": "韩城市", }, { "value": 610582, "pid": 610500, "label": "华阴市", }] }, { "value": 610600, "pid": 610000, "label": "延安市", "children": [{ "value": 610602, "pid": 610600, "label": "宝塔区", }, { "value": 610603, "pid": 610600, "label": "安塞区", }, { "value": 610621, "pid": 610600, "label": "延长县", }, { "value": 610622, "pid": 610600, "label": "延川县", }, { "value": 610623, "pid": 610600, "label": "子长县", }, { "value": 610625, "pid": 610600, "label": "志丹县", }, { "value": 610626, "pid": 610600, "label": "吴起县", }, { "value": 610627, "pid": 610600, "label": "甘泉县", }, { "value": 610628, "pid": 610600, "label": "富县", }, { "value": 610629, "pid": 610600, "label": "洛川县", }, { "value": 610630, "pid": 610600, "label": "宜川县", }, { "value": 610631, "pid": 610600, "label": "黄龙县", }, { "value": 610632, "pid": 610600, "label": "黄陵县", }] }, { "value": 610700, "pid": 610000, "label": "汉中市", "children": [{ "value": 610702, "pid": 610700, "label": "汉台区", }, { "value": 610703, "pid": 610700, "label": "南郑区", }, { "value": 610722, "pid": 610700, "label": "城固县", }, { "value": 610723, "pid": 610700, "label": "洋县", }, { "value": 610724, "pid": 610700, "label": "西乡县", }, { "value": 610725, "pid": 610700, "label": "勉县", }, { "value": 610726, "pid": 610700, "label": "宁强县", }, { "value": 610727, "pid": 610700, "label": "略阳县", }, { "value": 610728, "pid": 610700, "label": "镇巴县", }, { "value": 610729, "pid": 610700, "label": "留坝县", }, { "value": 610730, "pid": 610700, "label": "佛坪县", }] }, { "value": 610800, "pid": 610000, "label": "榆林市", "children": [{ "value": 610802, "pid": 610800, "label": "榆阳区", }, { "value": 610803, "pid": 610800, "label": "横山区", }, { "value": 610822, "pid": 610800, "label": "府谷县", }, { "value": 610824, "pid": 610800, "label": "靖边县", }, { "value": 610825, "pid": 610800, "label": "定边县", }, { "value": 610826, "pid": 610800, "label": "绥德县", }, { "value": 610827, "pid": 610800, "label": "米脂县", }, { "value": 610828, "pid": 610800, "label": "佳县", }, { "value": 610829, "pid": 610800, "label": "吴堡县", }, { "value": 610830, "pid": 610800, "label": "清涧县", }, { "value": 610831, "pid": 610800, "label": "子洲县", }, { "value": 610881, "pid": 610800, "label": "神木市", }] }, { "value": 610900, "pid": 610000, "label": "安康市", "children": [{ "value": 610902, "pid": 610900, "label": "汉滨区", }, { "value": 610921, "pid": 610900, "label": "汉阴县", }, { "value": 610922, "pid": 610900, "label": "石泉县", }, { "value": 610923, "pid": 610900, "label": "宁陕县", }, { "value": 610924, "pid": 610900, "label": "紫阳县", }, { "value": 610925, "pid": 610900, "label": "岚皋县", }, { "value": 610926, "pid": 610900, "label": "平利县", }, { "value": 610927, "pid": 610900, "label": "镇坪县", }, { "value": 610928, "pid": 610900, "label": "旬阳县", }, { "value": 610929, "pid": 610900, "label": "白河县", }] }, { "value": 611000, "pid": 610000, "label": "商洛市", "children": [{ "value": 611002, "pid": 611000, "label": "商州区", }, { "value": 611021, "pid": 611000, "label": "洛南县", }, { "value": 611022, "pid": 611000, "label": "丹凤县", }, { "value": 611023, "pid": 611000, "label": "商南县", }, { "value": 611024, "pid": 611000, "label": "山阳县", }, { "value": 611025, "pid": 611000, "label": "镇安县", }, { "value": 611026, "pid": 611000, "label": "柞水县", }] }] }, { "value": 620000, "pid": 100000, "label": "甘肃省", "children": [{ "value": 620100, "pid": 620000, "label": "兰州市", "children": [{ "value": 620102, "pid": 620100, "label": "城关区", }, { "value": 620103, "pid": 620100, "label": "七里河区", }, { "value": 620104, "pid": 620100, "label": "西固区", }, { "value": 620105, "pid": 620100, "label": "安宁区", }, { "value": 620111, "pid": 620100, "label": "红古区", }, { "value": 620121, "pid": 620100, "label": "永登县", }, { "value": 620122, "pid": 620100, "label": "皋兰县", }, { "value": 620123, "pid": 620100, "label": "榆中县", }, { "value": 620124, "pid": 620100, "label": "兰州新区", }, { "value": 620125, "pid": 620100, "label": "高新区", }, { "value": 620126, "pid": 620100, "label": "经济开发区", }] }, { "value": 620200, "pid": 620000, "label": "嘉峪关市", "children": [{ "value": 620201, "pid": 620200, "label": "雄关区", }, { "value": 620202, "pid": 620200, "label": "长城区", }, { "value": 620203, "pid": 620200, "label": "镜铁区", }] }, { "value": 620300, "pid": 620000, "label": "金昌市", "children": [{ "value": 620302, "pid": 620300, "label": "金川区", }, { "value": 620321, "pid": 620300, "label": "永昌县", }] }, { "value": 620400, "pid": 620000, "label": "白银市", "children": [{ "value": 620402, "pid": 620400, "label": "白银区", }, { "value": 620403, "pid": 620400, "label": "平川区", }, { "value": 620421, "pid": 620400, "label": "靖远县", }, { "value": 620422, "pid": 620400, "label": "会宁县", }, { "value": 620423, "pid": 620400, "label": "景泰县", }] }, { "value": 620500, "pid": 620000, "label": "天水市", "children": [{ "value": 620502, "pid": 620500, "label": "秦州区", }, { "value": 620503, "pid": 620500, "label": "麦积区", }, { "value": 620521, "pid": 620500, "label": "清水县", }, { "value": 620522, "pid": 620500, "label": "秦安县", }, { "value": 620523, "pid": 620500, "label": "甘谷县", }, { "value": 620524, "pid": 620500, "label": "武山县", }, { "value": 620525, "pid": 620500, "label": "张家川回族自治县", }] }, { "value": 620600, "pid": 620000, "label": "武威市", "children": [{ "value": 620602, "pid": 620600, "label": "凉州区", }, { "value": 620621, "pid": 620600, "label": "民勤县", }, { "value": 620622, "pid": 620600, "label": "古浪县", }, { "value": 620623, "pid": 620600, "label": "天祝藏族自治县", }] }, { "value": 620700, "pid": 620000, "label": "张掖市", "children": [{ "value": 620702, "pid": 620700, "label": "甘州区", }, { "value": 620721, "pid": 620700, "label": "肃南裕固族自治县", }, { "value": 620722, "pid": 620700, "label": "民乐县", }, { "value": 620723, "pid": 620700, "label": "临泽县", }, { "value": 620724, "pid": 620700, "label": "高台县", }, { "value": 620725, "pid": 620700, "label": "山丹县", }] }, { "value": 620800, "pid": 620000, "label": "平凉市", "children": [{ "value": 620802, "pid": 620800, "label": "崆峒区", }, { "value": 620821, "pid": 620800, "label": "泾川县", }, { "value": 620822, "pid": 620800, "label": "灵台县", }, { "value": 620823, "pid": 620800, "label": "崇信县", }, { "value": 620825, "pid": 620800, "label": "庄浪县", }, { "value": 620826, "pid": 620800, "label": "静宁县", }, { "value": 620881, "pid": 620800, "label": "华亭市", }] }, { "value": 620900, "pid": 620000, "label": "酒泉市", "children": [{ "value": 620902, "pid": 620900, "label": "肃州区", }, { "value": 620921, "pid": 620900, "label": "金塔县", }, { "value": 620922, "pid": 620900, "label": "瓜州县", }, { "value": 620923, "pid": 620900, "label": "肃北蒙古族自治县", }, { "value": 620924, "pid": 620900, "label": "阿克塞哈萨克族自治县", }, { "value": 620981, "pid": 620900, "label": "玉门市", }, { "value": 620982, "pid": 620900, "label": "敦煌市", }] }, { "value": 621000, "pid": 620000, "label": "庆阳市", "children": [{ "value": 621002, "pid": 621000, "label": "西峰区", }, { "value": 621021, "pid": 621000, "label": "庆城县", }, { "value": 621022, "pid": 621000, "label": "环县", }, { "value": 621023, "pid": 621000, "label": "华池县", }, { "value": 621024, "pid": 621000, "label": "合水县", }, { "value": 621025, "pid": 621000, "label": "正宁县", }, { "value": 621026, "pid": 621000, "label": "宁县", }, { "value": 621027, "pid": 621000, "label": "镇原县", }] }, { "value": 621100, "pid": 620000, "label": "定西市", "children": [{ "value": 621102, "pid": 621100, "label": "安定区", }, { "value": 621121, "pid": 621100, "label": "通渭县", }, { "value": 621122, "pid": 621100, "label": "陇西县", }, { "value": 621123, "pid": 621100, "label": "渭源县", }, { "value": 621124, "pid": 621100, "label": "临洮县", }, { "value": 621125, "pid": 621100, "label": "漳县", }, { "value": 621126, "pid": 621100, "label": "岷县", }] }, { "value": 621200, "pid": 620000, "label": "陇南市", "children": [{ "value": 621202, "pid": 621200, "label": "武都区", }, { "value": 621221, "pid": 621200, "label": "成县", }, { "value": 621222, "pid": 621200, "label": "文县", }, { "value": 621223, "pid": 621200, "label": "宕昌县", }, { "value": 621224, "pid": 621200, "label": "康县", }, { "value": 621225, "pid": 621200, "label": "西和县", }, { "value": 621226, "pid": 621200, "label": "礼县", }, { "value": 621227, "pid": 621200, "label": "徽县", }, { "value": 621228, "pid": 621200, "label": "两当县", }] }, { "value": 622900, "pid": 620000, "label": "临夏回族自治州", "children": [{ "value": 622901, "pid": 622900, "label": "临夏市", }, { "value": 622921, "pid": 622900, "label": "临夏县", }, { "value": 622922, "pid": 622900, "label": "康乐县", }, { "value": 622923, "pid": 622900, "label": "永靖县", }, { "value": 622924, "pid": 622900, "label": "广河县", }, { "value": 622925, "pid": 622900, "label": "和政县", }, { "value": 622926, "pid": 622900, "label": "东乡族自治县", }, { "value": 622927, "pid": 622900, "label": "积石山保安族东乡族撒拉族自治县", }] }, { "value": 623000, "pid": 620000, "label": "甘南藏族自治州", "children": [{ "value": 623001, "pid": 623000, "label": "合作市", }, { "value": 623021, "pid": 623000, "label": "临潭县", }, { "value": 623022, "pid": 623000, "label": "卓尼县", }, { "value": 623023, "pid": 623000, "label": "舟曲县", }, { "value": 623024, "pid": 623000, "label": "迭部县", }, { "value": 623025, "pid": 623000, "label": "玛曲县", }, { "value": 623026, "pid": 623000, "label": "碌曲县", }, { "value": 623027, "pid": 623000, "label": "夏河县", }] }] }, { "value": 630000, "pid": 100000, "label": "青海省", "children": [{ "value": 630100, "pid": 630000, "label": "西宁市", "children": [{ "value": 630102, "pid": 630100, "label": "城东区", }, { "value": 630103, "pid": 630100, "label": "城中区", }, { "value": 630104, "pid": 630100, "label": "城西区", }, { "value": 630105, "pid": 630100, "label": "城北区", }, { "value": 630121, "pid": 630100, "label": "大通回族土族自治县", }, { "value": 630122, "pid": 630100, "label": "湟中县", }, { "value": 630123, "pid": 630100, "label": "湟源县", }] }, { "value": 630200, "pid": 630000, "label": "海东市", "children": [{ "value": 630202, "pid": 630200, "label": "乐都区", }, { "value": 630203, "pid": 630200, "label": "平安区", }, { "value": 630222, "pid": 630200, "label": "民和回族土族自治县", }, { "value": 630223, "pid": 630200, "label": "互助土族自治县", }, { "value": 630224, "pid": 630200, "label": "化隆回族自治县", }, { "value": 630225, "pid": 630200, "label": "循化撒拉族自治县", }] }, { "value": 632200, "pid": 630000, "label": "海北藏族自治州", "children": [{ "value": 632221, "pid": 632200, "label": "门源回族自治县", }, { "value": 632222, "pid": 632200, "label": "祁连县", }, { "value": 632223, "pid": 632200, "label": "海晏县", }, { "value": 632224, "pid": 632200, "label": "刚察县", }] }, { "value": 632300, "pid": 630000, "label": "黄南藏族自治州", "children": [{ "value": 632321, "pid": 632300, "label": "同仁县", }, { "value": 632322, "pid": 632300, "label": "尖扎县", }, { "value": 632323, "pid": 632300, "label": "泽库县", }, { "value": 632324, "pid": 632300, "label": "河南蒙古族自治县", }] }, { "value": 632500, "pid": 630000, "label": "海南藏族自治州", "children": [{ "value": 632521, "pid": 632500, "label": "共和县", }, { "value": 632522, "pid": 632500, "label": "同德县", }, { "value": 632523, "pid": 632500, "label": "贵德县", }, { "value": 632524, "pid": 632500, "label": "兴海县", }, { "value": 632525, "pid": 632500, "label": "贵南县", }] }, { "value": 632600, "pid": 630000, "label": "果洛藏族自治州", "children": [{ "value": 632621, "pid": 632600, "label": "玛沁县", }, { "value": 632622, "pid": 632600, "label": "班玛县", }, { "value": 632623, "pid": 632600, "label": "甘德县", }, { "value": 632624, "pid": 632600, "label": "达日县", }, { "value": 632625, "pid": 632600, "label": "久治县", }, { "value": 632626, "pid": 632600, "label": "玛多县", }] }, { "value": 632700, "pid": 630000, "label": "玉树藏族自治州", "children": [{ "value": 632701, "pid": 632700, "label": "玉树市", }, { "value": 632722, "pid": 632700, "label": "杂多县", }, { "value": 632723, "pid": 632700, "label": "称多县", }, { "value": 632724, "pid": 632700, "label": "治多县", }, { "value": 632725, "pid": 632700, "label": "囊谦县", }, { "value": 632726, "pid": 632700, "label": "曲麻莱县", }] }, { "value": 632800, "pid": 630000, "label": "海西蒙古族藏族自治州", "children": [{ "value": 632801, "pid": 632800, "label": "格尔木市", }, { "value": 632802, "pid": 632800, "label": "德令哈市", }, { "value": 632803, "pid": 632800, "label": "茫崖市", }, { "value": 632821, "pid": 632800, "label": "乌兰县", }, { "value": 632822, "pid": 632800, "label": "都兰县", }, { "value": 632823, "pid": 632800, "label": "天峻县", }] }] }, { "value": 640000, "pid": 100000, "label": "宁夏回族自治区", "children": [{ "value": 640100, "pid": 640000, "label": "银川市", "children": [{ "value": 640104, "pid": 640100, "label": "兴庆区", }, { "value": 640105, "pid": 640100, "label": "西夏区", }, { "value": 640106, "pid": 640100, "label": "金凤区", }, { "value": 640121, "pid": 640100, "label": "永宁县", }, { "value": 640122, "pid": 640100, "label": "贺兰县", }, { "value": 640181, "pid": 640100, "label": "灵武市", }, { "value": 640182, "pid": 640100, "label": "经济开发区", }] }, { "value": 640200, "pid": 640000, "label": "石嘴山市", "children": [{ "value": 640202, "pid": 640200, "label": "大武口区", }, { "value": 640205, "pid": 640200, "label": "惠农区", }, { "value": 640221, "pid": 640200, "label": "平罗县", }, { "value": 640222, "pid": 640200, "label": "经济开发区", }] }, { "value": 640300, "pid": 640000, "label": "吴忠市", "children": [{ "value": 640302, "pid": 640300, "label": "利通区", }, { "value": 640303, "pid": 640300, "label": "红寺堡区", }, { "value": 640323, "pid": 640300, "label": "盐池县", }, { "value": 640324, "pid": 640300, "label": "同心县", }, { "value": 640381, "pid": 640300, "label": "青铜峡市", }] }, { "value": 640400, "pid": 640000, "label": "固原市", "children": [{ "value": 640402, "pid": 640400, "label": "原州区", }, { "value": 640422, "pid": 640400, "label": "西吉县", }, { "value": 640423, "pid": 640400, "label": "隆德县", }, { "value": 640424, "pid": 640400, "label": "泾源县", }, { "value": 640425, "pid": 640400, "label": "彭阳县", }] }, { "value": 640500, "pid": 640000, "label": "中卫市", "children": [{ "value": 640502, "pid": 640500, "label": "沙坡头区", }, { "value": 640521, "pid": 640500, "label": "中宁县", }, { "value": 640522, "pid": 640500, "label": "海原县", }] }] }, { "value": 650000, "pid": 100000, "label": "新疆维吾尔自治区", "children": [{ "value": 650100, "pid": 650000, "label": "乌鲁木齐市", "children": [{ "value": 650102, "pid": 650100, "label": "天山区", }, { "value": 650103, "pid": 650100, "label": "沙依巴克区", }, { "value": 650104, "pid": 650100, "label": "新市区", }, { "value": 650105, "pid": 650100, "label": "水磨沟区", }, { "value": 650106, "pid": 650100, "label": "头屯河区", }, { "value": 650107, "pid": 650100, "label": "达坂城区", }, { "value": 650109, "pid": 650100, "label": "米东区", }, { "value": 650121, "pid": 650100, "label": "乌鲁木齐县", }, { "value": 650171, "pid": 650100, "label": "经济技术开发区", }, { "value": 650172, "pid": 650100, "label": "高新区", }] }, { "value": 650200, "pid": 650000, "label": "克拉玛依市", "children": [{ "value": 650202, "pid": 650200, "label": "独山子区", }, { "value": 650203, "pid": 650200, "label": "克拉玛依区", }, { "value": 650204, "pid": 650200, "label": "白碱滩区", }, { "value": 650205, "pid": 650200, "label": "乌尔禾区", }] }, { "value": 650400, "pid": 650000, "label": "吐鲁番市", "children": [{ "value": 650402, "pid": 650400, "label": "高昌区", }, { "value": 650421, "pid": 650400, "label": "鄯善县", }, { "value": 650422, "pid": 650400, "label": "托克逊县", }] }, { "value": 650500, "pid": 650000, "label": "哈密市", "children": [{ "value": 650502, "pid": 650500, "label": "伊州区", }, { "value": 650521, "pid": 650500, "label": "巴里坤哈萨克自治县", }, { "value": 650522, "pid": 650500, "label": "伊吾县", }] }, { "value": 652300, "pid": 650000, "label": "昌吉回族自治州", "children": [{ "value": 652301, "pid": 652300, "label": "昌吉市", }, { "value": 652302, "pid": 652300, "label": "阜康市", }, { "value": 652323, "pid": 652300, "label": "呼图壁县", }, { "value": 652324, "pid": 652300, "label": "玛纳斯县", }, { "value": 652325, "pid": 652300, "label": "奇台县", }, { "value": 652327, "pid": 652300, "label": "吉木萨尔县", }, { "value": 652328, "pid": 652300, "label": "木垒哈萨克自治县", }] }, { "value": 652700, "pid": 650000, "label": "博尔塔拉蒙古自治州", "children": [{ "value": 652701, "pid": 652700, "label": "博乐市", }, { "value": 652702, "pid": 652700, "label": "阿拉山口市", }, { "value": 652722, "pid": 652700, "label": "精河县", }, { "value": 652723, "pid": 652700, "label": "温泉县", }] }, { "value": 652800, "pid": 650000, "label": "巴音郭楞蒙古自治州", "children": [{ "value": 652801, "pid": 652800, "label": "库尔勒市", }, { "value": 652822, "pid": 652800, "label": "轮台县", }, { "value": 652823, "pid": 652800, "label": "尉犁县", }, { "value": 652824, "pid": 652800, "label": "若羌县", }, { "value": 652825, "pid": 652800, "label": "且末县", }, { "value": 652826, "pid": 652800, "label": "焉耆回族自治县", }, { "value": 652827, "pid": 652800, "label": "和静县", }, { "value": 652828, "pid": 652800, "label": "和硕县", }, { "value": 652829, "pid": 652800, "label": "博湖县", }, { "value": 652871, "pid": 652800, "label": "库尔勒开发区", }] }, { "value": 652900, "pid": 650000, "label": "阿克苏地区", "children": [{ "value": 652901, "pid": 652900, "label": "阿克苏市", }, { "value": 652922, "pid": 652900, "label": "温宿县", }, { "value": 652923, "pid": 652900, "label": "库车县", }, { "value": 652924, "pid": 652900, "label": "沙雅县", }, { "value": 652925, "pid": 652900, "label": "新和县", }, { "value": 652926, "pid": 652900, "label": "拜城县", }, { "value": 652927, "pid": 652900, "label": "乌什县", }, { "value": 652928, "pid": 652900, "label": "阿瓦提县", }, { "value": 652929, "pid": 652900, "label": "柯坪县", }] }, { "value": 653000, "pid": 650000, "label": "克孜勒苏柯尔克孜自治州", "children": [{ "value": 653001, "pid": 653000, "label": "阿图什市", }, { "value": 653022, "pid": 653000, "label": "阿克陶县", }, { "value": 653023, "pid": 653000, "label": "阿合奇县", }, { "value": 653024, "pid": 653000, "label": "乌恰县", }] }, { "value": 653100, "pid": 650000, "label": "喀什地区", "children": [{ "value": 653101, "pid": 653100, "label": "喀什市", }, { "value": 653121, "pid": 653100, "label": "疏附县", }, { "value": 653122, "pid": 653100, "label": "疏勒县", }, { "value": 653123, "pid": 653100, "label": "英吉沙县", }, { "value": 653124, "pid": 653100, "label": "泽普县", }, { "value": 653125, "pid": 653100, "label": "莎车县", }, { "value": 653126, "pid": 653100, "label": "叶城县", }, { "value": 653127, "pid": 653100, "label": "麦盖提县", }, { "value": 653128, "pid": 653100, "label": "岳普湖县", }, { "value": 653129, "pid": 653100, "label": "伽师县", }, { "value": 653130, "pid": 653100, "label": "巴楚县", }, { "value": 653131, "pid": 653100, "label": "塔什库尔干塔吉克自治县", }] }, { "value": 653200, "pid": 650000, "label": "和田地区", "children": [{ "value": 653201, "pid": 653200, "label": "和田市", }, { "value": 653221, "pid": 653200, "label": "和田县", }, { "value": 653222, "pid": 653200, "label": "墨玉县", }, { "value": 653223, "pid": 653200, "label": "皮山县", }, { "value": 653224, "pid": 653200, "label": "洛浦县", }, { "value": 653225, "pid": 653200, "label": "策勒县", }, { "value": 653226, "pid": 653200, "label": "于田县", }, { "value": 653227, "pid": 653200, "label": "民丰县", }] }, { "value": 654000, "pid": 650000, "label": "伊犁哈萨克自治州", "children": [{ "value": 654002, "pid": 654000, "label": "伊宁市", }, { "value": 654003, "pid": 654000, "label": "奎屯市", }, { "value": 654004, "pid": 654000, "label": "霍尔果斯市", }, { "value": 654021, "pid": 654000, "label": "伊宁县", }, { "value": 654022, "pid": 654000, "label": "察布查尔锡伯自治县", }, { "value": 654023, "pid": 654000, "label": "霍城县", }, { "value": 654024, "pid": 654000, "label": "巩留县", }, { "value": 654025, "pid": 654000, "label": "新源县", }, { "value": 654026, "pid": 654000, "label": "昭苏县", }, { "value": 654027, "pid": 654000, "label": "特克斯县", }, { "value": 654028, "pid": 654000, "label": "尼勒克县", }] }, { "value": 654200, "pid": 650000, "label": "塔城地区", "children": [{ "value": 654201, "pid": 654200, "label": "塔城市", }, { "value": 654202, "pid": 654200, "label": "乌苏市", }, { "value": 654221, "pid": 654200, "label": "额敏县", }, { "value": 654223, "pid": 654200, "label": "沙湾县", }, { "value": 654224, "pid": 654200, "label": "托里县", }, { "value": 654225, "pid": 654200, "label": "裕民县", }, { "value": 654226, "pid": 654200, "label": "和布克赛尔蒙古自治县", }] }, { "value": 654300, "pid": 650000, "label": "阿勒泰地区", "children": [{ "value": 654301, "pid": 654300, "label": "阿勒泰市", }, { "value": 654321, "pid": 654300, "label": "布尔津县", }, { "value": 654322, "pid": 654300, "label": "富蕴县", }, { "value": 654323, "pid": 654300, "label": "福海县", }, { "value": 654324, "pid": 654300, "label": "哈巴河县", }, { "value": 654325, "pid": 654300, "label": "青河县", }, { "value": 654326, "pid": 654300, "label": "吉木乃县", }] }, { "value": 659001, "pid": 650000, "label": "石河子市", "children": [{ "value": 659101, "pid": 659001, "label": "新城街道", }, { "value": 659102, "pid": 659001, "label": "向阳街道", }, { "value": 659103, "pid": 659001, "label": "红山街道", }, { "value": 659104, "pid": 659001, "label": "老街街道", }, { "value": 659105, "pid": 659001, "label": "东城街道", }, { "value": 659106, "pid": 659001, "label": "北泉镇", }, { "value": 659107, "pid": 659001, "label": "石河子乡", }, { "value": 659108, "pid": 659001, "label": "一五二团", }] }, { "value": 659002, "pid": 650000, "label": "阿拉尔市", "children": [{ "value": 659201, "pid": 659002, "label": "幸福路街道", }, { "value": 659202, "pid": 659002, "label": "金银川路街道", }, { "value": 659203, "pid": 659002, "label": "青松路街道", }, { "value": 659204, "pid": 659002, "label": "南口街道", }, { "value": 659205, "pid": 659002, "label": "托喀依乡", }, { "value": 659206, "pid": 659002, "label": "金银川镇", }] }, { "value": 659003, "pid": 650000, "label": "图木舒克市", "children": [{ "value": 659301, "pid": 659003, "label": "图木舒克市区", }, { "value": 659302, "pid": 659003, "label": "兵团四十四团", }, { "value": 659303, "pid": 659003, "label": "兵团四十九团", }, { "value": 659304, "pid": 659003, "label": "兵团五十团", }, { "value": 659305, "pid": 659003, "label": "兵团五十一团", }, { "value": 659306, "pid": 659003, "label": "兵团五十二团", }, { "value": 659307, "pid": 659003, "label": "兵团五十三团", }, { "value": 659308, "pid": 659003, "label": "喀拉拜勒镇", }, { "value": 659309, "pid": 659003, "label": "永安坝", }] }, { "value": 659004, "pid": 650000, "label": "五家渠市", "children": [{ "value": 659401, "pid": 659004, "label": "城区", }, { "value": 659402, "pid": 659004, "label": "一零一团", }, { "value": 659403, "pid": 659004, "label": "一零二团", }, { "value": 659404, "pid": 659004, "label": "一零三团", }] }, { "value": 659005, "pid": 650000, "label": "北屯市", "children": [{ "value": 659501, "pid": 659005, "label": "新城区", }, { "value": 659502, "pid": 659005, "label": "老城区", }, { "value": 659503, "pid": 659005, "label": "工业园区", }, { "value": 659504, "pid": 659005, "label": "海川镇", }, { "value": 659505, "pid": 659005, "label": "丰庆镇", }, { "value": 659506, "pid": 659005, "label": "锡伯渡镇", }] }, { "value": 659006, "pid": 650000, "label": "铁门关市", "children": [{ "value": 659601, "pid": 659006, "label": "二十九团场", }, { "value": 659602, "pid": 659006, "label": "库西经济工业园", }, { "value": 659603, "pid": 659006, "label": "博古其镇", }, { "value": 659604, "pid": 659006, "label": "双丰镇", }] }, { "value": 659007, "pid": 650000, "label": "双河市", "children": [{ "value": 659701, "pid": 659007, "label": "八十一团", }, { "value": 659702, "pid": 659007, "label": "八十四团", }, { "value": 659703, "pid": 659007, "label": "八十五团", }, { "value": 659704, "pid": 659007, "label": "八十六团", }, { "value": 659705, "pid": 659007, "label": "八十九团", }, { "value": 659706, "pid": 659007, "label": "九十团", }] }, { "value": 659008, "pid": 650000, "label": "可克达拉市", "children": [{ "value": 659801, "pid": 659008, "label": "63团", }, { "value": 659802, "pid": 659008, "label": "64团", }, { "value": 659803, "pid": 659008, "label": "66团", }, { "value": 659804, "pid": 659008, "label": "67团", }, { "value": 659805, "pid": 659008, "label": "68团", }] }, { "value": 659009, "pid": 650000, "label": "昆玉市", "children": [{ "value": 659901, "pid": 659009, "label": "皮山农场", }, { "value": 659902, "pid": 659009, "label": "二二四团", }, { "value": 659903, "pid": 659009, "label": "四十七团", }, { "value": 659904, "pid": 659009, "label": "一牧场", }] }] }, { "value": 710000, "pid": 100000, "label": "台湾", "children": [{ "value": 710100, "pid": 710000, "label": "台北市", "children": [{ "value": 710101, "pid": 710100, "label": "松山区", }, { "value": 710102, "pid": 710100, "label": "信义区", }, { "value": 710103, "pid": 710100, "label": "大安区", }, { "value": 710104, "pid": 710100, "label": "中山区", }, { "value": 710105, "pid": 710100, "label": "中正区", }, { "value": 710106, "pid": 710100, "label": "大同区", }, { "value": 710107, "pid": 710100, "label": "万华区", }, { "value": 710108, "pid": 710100, "label": "文山区", }, { "value": 710109, "pid": 710100, "label": "南港区", }, { "value": 710110, "pid": 710100, "label": "内湖区", }, { "value": 710111, "pid": 710100, "label": "士林区", }, { "value": 710112, "pid": 710100, "label": "北投区", }] }, { "value": 710200, "pid": 710000, "label": "高雄市", "children": [{ "value": 710201, "pid": 710200, "label": "盐埕区", }, { "value": 710202, "pid": 710200, "label": "鼓山区", }, { "value": 710203, "pid": 710200, "label": "左营区", }, { "value": 710204, "pid": 710200, "label": "楠梓区", }, { "value": 710205, "pid": 710200, "label": "三民区", }, { "value": 710206, "pid": 710200, "label": "新兴区", }, { "value": 710207, "pid": 710200, "label": "前金区", }, { "value": 710208, "pid": 710200, "label": "苓雅区", }, { "value": 710209, "pid": 710200, "label": "前镇区", }, { "value": 710210, "pid": 710200, "label": "旗津区", }, { "value": 710211, "pid": 710200, "label": "小港区", }, { "value": 710212, "pid": 710200, "label": "凤山区", }, { "value": 710213, "pid": 710200, "label": "林园区", }, { "value": 710214, "pid": 710200, "label": "大寮区", }, { "value": 710215, "pid": 710200, "label": "大树区", }, { "value": 710216, "pid": 710200, "label": "大社区", }, { "value": 710217, "pid": 710200, "label": "仁武区", }, { "value": 710218, "pid": 710200, "label": "鸟松区", }, { "value": 710219, "pid": 710200, "label": "冈山区", }, { "value": 710220, "pid": 710200, "label": "桥头区", }, { "value": 710221, "pid": 710200, "label": "燕巢区", }, { "value": 710222, "pid": 710200, "label": "田寮区", }, { "value": 710223, "pid": 710200, "label": "阿莲区", }, { "value": 710224, "pid": 710200, "label": "路竹区", }, { "value": 710225, "pid": 710200, "label": "湖内区", }, { "value": 710226, "pid": 710200, "label": "茄萣区", }, { "value": 710227, "pid": 710200, "label": "永安区", }, { "value": 710228, "pid": 710200, "label": "弥陀区", }, { "value": 710229, "pid": 710200, "label": "梓官区", }, { "value": 710230, "pid": 710200, "label": "旗山区", }, { "value": 710231, "pid": 710200, "label": "美浓区", }, { "value": 710232, "pid": 710200, "label": "六龟区", }, { "value": 710233, "pid": 710200, "label": "甲仙区", }, { "value": 710234, "pid": 710200, "label": "杉林区", }, { "value": 710235, "pid": 710200, "label": "内门区", }, { "value": 710236, "pid": 710200, "label": "茂林区", }, { "value": 710237, "pid": 710200, "label": "桃源区", }, { "value": 710238, "pid": 710200, "label": "那玛夏区", }] }, { "value": 710300, "pid": 710000, "label": "基隆市", "children": [{ "value": 710301, "pid": 710300, "label": "中正区", }, { "value": 710302, "pid": 710300, "label": "七堵区", }, { "value": 710303, "pid": 710300, "label": "暖暖区", }, { "value": 710304, "pid": 710300, "label": "仁爱区", }, { "value": 710305, "pid": 710300, "label": "中山区", }, { "value": 710306, "pid": 710300, "label": "安乐区", }, { "value": 710307, "pid": 710300, "label": "信义区", }] }, { "value": 710400, "pid": 710000, "label": "台中市", "children": [{ "value": 710401, "pid": 710400, "label": "中区", }, { "value": 710402, "pid": 710400, "label": "东区", }, { "value": 710403, "pid": 710400, "label": "南区", }, { "value": 710404, "pid": 710400, "label": "西区", }, { "value": 710405, "pid": 710400, "label": "北区", }, { "value": 710406, "pid": 710400, "label": "西屯区", }, { "value": 710407, "pid": 710400, "label": "南屯区", }, { "value": 710408, "pid": 710400, "label": "北屯区", }, { "value": 710409, "pid": 710400, "label": "丰原区", }, { "value": 710410, "pid": 710400, "label": "东势区", }, { "value": 710411, "pid": 710400, "label": "大甲区", }, { "value": 710412, "pid": 710400, "label": "清水区", }, { "value": 710413, "pid": 710400, "label": "沙鹿区", }, { "value": 710414, "pid": 710400, "label": "梧栖区", }, { "value": 710415, "pid": 710400, "label": "后里区", }, { "value": 710416, "pid": 710400, "label": "神冈区", }, { "value": 710417, "pid": 710400, "label": "潭子区", }, { "value": 710418, "pid": 710400, "label": "大雅区", }, { "value": 710419, "pid": 710400, "label": "新社区", }, { "value": 710420, "pid": 710400, "label": "石冈区", }, { "value": 710421, "pid": 710400, "label": "外埔区", }, { "value": 710422, "pid": 710400, "label": "大安区", }, { "value": 710423, "pid": 710400, "label": "乌日区", }, { "value": 710424, "pid": 710400, "label": "大肚区", }, { "value": 710425, "pid": 710400, "label": "龙井区", }, { "value": 710426, "pid": 710400, "label": "雾峰区", }, { "value": 710427, "pid": 710400, "label": "太平区", }, { "value": 710428, "pid": 710400, "label": "大里区", }, { "value": 710429, "pid": 710400, "label": "和平区", }] }, { "value": 710500, "pid": 710000, "label": "台南市", "children": [{ "value": 710501, "pid": 710500, "label": "东区", }, { "value": 710502, "pid": 710500, "label": "南区", }, { "value": 710504, "pid": 710500, "label": "北区", }, { "value": 710506, "pid": 710500, "label": "安南区", }, { "value": 710507, "pid": 710500, "label": "安平区", }, { "value": 710508, "pid": 710500, "label": "中西区", }, { "value": 710509, "pid": 710500, "label": "新营区", }, { "value": 710510, "pid": 710500, "label": "盐水区", }, { "value": 710511, "pid": 710500, "label": "白河区", }, { "value": 710512, "pid": 710500, "label": "柳营区", }, { "value": 710513, "pid": 710500, "label": "后壁区", }, { "value": 710514, "pid": 710500, "label": "东山区", }, { "value": 710515, "pid": 710500, "label": "麻豆区", }, { "value": 710516, "pid": 710500, "label": "下营区", }, { "value": 710517, "pid": 710500, "label": "六甲区", }, { "value": 710518, "pid": 710500, "label": "官田区", }, { "value": 710519, "pid": 710500, "label": "大内区", }, { "value": 710520, "pid": 710500, "label": "佳里区", }, { "value": 710521, "pid": 710500, "label": "学甲区", }, { "value": 710522, "pid": 710500, "label": "西港区", }, { "value": 710523, "pid": 710500, "label": "七股区", }, { "value": 710524, "pid": 710500, "label": "将军区", }, { "value": 710525, "pid": 710500, "label": "北门区", }, { "value": 710526, "pid": 710500, "label": "新化区", }, { "value": 710527, "pid": 710500, "label": "善化区", }, { "value": 710528, "pid": 710500, "label": "新市区", }, { "value": 710529, "pid": 710500, "label": "安定区", }, { "value": 710530, "pid": 710500, "label": "山上区", }, { "value": 710531, "pid": 710500, "label": "玉井区", }, { "value": 710532, "pid": 710500, "label": "楠西区", }, { "value": 710533, "pid": 710500, "label": "南化区", }, { "value": 710534, "pid": 710500, "label": "左镇区", }, { "value": 710535, "pid": 710500, "label": "仁德区", }, { "value": 710536, "pid": 710500, "label": "归仁区", }, { "value": 710537, "pid": 710500, "label": "关庙区", }, { "value": 710538, "pid": 710500, "label": "龙崎区", }, { "value": 710539, "pid": 710500, "label": "永康区", }] }, { "value": 710600, "pid": 710000, "label": "新竹市", "children": [{ "value": 710601, "pid": 710600, "label": "东区", }, { "value": 710602, "pid": 710600, "label": "北区", }, { "value": 710603, "pid": 710600, "label": "香山区", }] }, { "value": 710700, "pid": 710000, "label": "嘉义市", "children": [{ "value": 710701, "pid": 710700, "label": "东区", }, { "value": 710702, "pid": 710700, "label": "西区", }] }, { "value": 710800, "pid": 710000, "label": "新北市", "children": [{ "value": 710801, "pid": 710800, "label": "板桥区", }, { "value": 710802, "pid": 710800, "label": "三重区", }, { "value": 710803, "pid": 710800, "label": "中和区", }, { "value": 710804, "pid": 710800, "label": "永和区", }, { "value": 710805, "pid": 710800, "label": "新庄区", }, { "value": 710806, "pid": 710800, "label": "新店区", }, { "value": 710807, "pid": 710800, "label": "树林区", }, { "value": 710808, "pid": 710800, "label": "莺歌区", }, { "value": 710809, "pid": 710800, "label": "三峡区", }, { "value": 710810, "pid": 710800, "label": "淡水区", }, { "value": 710811, "pid": 710800, "label": "汐止区", }, { "value": 710812, "pid": 710800, "label": "瑞芳区", }, { "value": 710813, "pid": 710800, "label": "土城区", }, { "value": 710814, "pid": 710800, "label": "芦洲区", }, { "value": 710815, "pid": 710800, "label": "五股区", }, { "value": 710816, "pid": 710800, "label": "泰山区", }, { "value": 710817, "pid": 710800, "label": "林口区", }, { "value": 710818, "pid": 710800, "label": "深坑区", }, { "value": 710819, "pid": 710800, "label": "石碇区", }, { "value": 710820, "pid": 710800, "label": "坪林区", }, { "value": 710821, "pid": 710800, "label": "三芝区", }, { "value": 710822, "pid": 710800, "label": "石门区", }, { "value": 710823, "pid": 710800, "label": "八里区", }, { "value": 710824, "pid": 710800, "label": "平溪区", }, { "value": 710825, "pid": 710800, "label": "双溪区", }, { "value": 710826, "pid": 710800, "label": "贡寮区", }, { "value": 710827, "pid": 710800, "label": "金山区", }, { "value": 710828, "pid": 710800, "label": "万里区", }, { "value": 710829, "pid": 710800, "label": "乌来区", }] }, { "value": 712200, "pid": 710000, "label": "宜兰县", "children": [{ "value": 712201, "pid": 712200, "label": "宜兰市", }, { "value": 712221, "pid": 712200, "label": "罗东镇", }, { "value": 712222, "pid": 712200, "label": "苏澳镇", }, { "value": 712223, "pid": 712200, "label": "头城镇", }, { "value": 712224, "pid": 712200, "label": "礁溪乡", }, { "value": 712225, "pid": 712200, "label": "壮围乡", }, { "value": 712226, "pid": 712200, "label": "员山乡", }, { "value": 712227, "pid": 712200, "label": "冬山乡", }, { "value": 712228, "pid": 712200, "label": "五结乡", }, { "value": 712229, "pid": 712200, "label": "三星乡", }, { "value": 712230, "pid": 712200, "label": "大同乡", }, { "value": 712231, "pid": 712200, "label": "南澳乡", }] }, { "value": 712300, "pid": 710000, "label": "桃园市", "children": [{ "value": 712301, "pid": 712300, "label": "桃园市", }, { "value": 712302, "pid": 712300, "label": "中坜市", }, { "value": 712303, "pid": 712300, "label": "平镇市", }, { "value": 712304, "pid": 712300, "label": "八德市", }, { "value": 712305, "pid": 712300, "label": "杨梅市", }, { "value": 712306, "pid": 712300, "label": "芦竹市", }, { "value": 712321, "pid": 712300, "label": "大溪镇", }, { "value": 712324, "pid": 712300, "label": "大园乡", }, { "value": 712325, "pid": 712300, "label": "龟山乡", }, { "value": 712327, "pid": 712300, "label": "龙潭乡", }, { "value": 712329, "pid": 712300, "label": "新屋乡", }, { "value": 712330, "pid": 712300, "label": "观音乡", }, { "value": 712331, "pid": 712300, "label": "复兴乡", }] }, { "value": 712400, "pid": 710000, "label": "新竹县", "children": [{ "value": 712401, "pid": 712400, "label": "竹北市", }, { "value": 712421, "pid": 712400, "label": "竹东镇", }, { "value": 712422, "pid": 712400, "label": "新埔镇", }, { "value": 712423, "pid": 712400, "label": "关西镇", }, { "value": 712424, "pid": 712400, "label": "湖口乡", }, { "value": 712425, "pid": 712400, "label": "新丰乡", }, { "value": 712426, "pid": 712400, "label": "芎林乡", }, { "value": 712427, "pid": 712400, "label": "横山乡", }, { "value": 712428, "pid": 712400, "label": "北埔乡", }, { "value": 712429, "pid": 712400, "label": "宝山乡", }, { "value": 712430, "pid": 712400, "label": "峨眉乡", }, { "value": 712431, "pid": 712400, "label": "尖石乡", }, { "value": 712432, "pid": 712400, "label": "五峰乡", }] }, { "value": 712500, "pid": 710000, "label": "苗栗县", "children": [{ "value": 712501, "pid": 712500, "label": "苗栗市", }, { "value": 712521, "pid": 712500, "label": "苑里镇", }, { "value": 712522, "pid": 712500, "label": "通霄镇", }, { "value": 712523, "pid": 712500, "label": "竹南镇", }, { "value": 712524, "pid": 712500, "label": "头份市", }, { "value": 712525, "pid": 712500, "label": "后龙镇", }, { "value": 712526, "pid": 712500, "label": "卓兰镇", }, { "value": 712527, "pid": 712500, "label": "大湖乡", }, { "value": 712528, "pid": 712500, "label": "公馆乡", }, { "value": 712529, "pid": 712500, "label": "铜锣乡", }, { "value": 712530, "pid": 712500, "label": "南庄乡", }, { "value": 712531, "pid": 712500, "label": "头屋乡", }, { "value": 712532, "pid": 712500, "label": "三义乡", }, { "value": 712533, "pid": 712500, "label": "西湖乡", }, { "value": 712534, "pid": 712500, "label": "造桥乡", }, { "value": 712535, "pid": 712500, "label": "三湾乡", }, { "value": 712536, "pid": 712500, "label": "狮潭乡", }, { "value": 712537, "pid": 712500, "label": "泰安乡", }] }, { "value": 712700, "pid": 710000, "label": "彰化县", "children": [{ "value": 712701, "pid": 712700, "label": "彰化市", }, { "value": 712721, "pid": 712700, "label": "鹿港镇", }, { "value": 712722, "pid": 712700, "label": "和美镇", }, { "value": 712723, "pid": 712700, "label": "线西乡", }, { "value": 712724, "pid": 712700, "label": "伸港乡", }, { "value": 712725, "pid": 712700, "label": "福兴乡", }, { "value": 712726, "pid": 712700, "label": "秀水乡", }, { "value": 712727, "pid": 712700, "label": "花坛乡", }, { "value": 712728, "pid": 712700, "label": "芬园乡", }, { "value": 712729, "pid": 712700, "label": "员林市", }, { "value": 712730, "pid": 712700, "label": "溪湖镇", }, { "value": 712731, "pid": 712700, "label": "田中镇", }, { "value": 712732, "pid": 712700, "label": "大村乡", }, { "value": 712733, "pid": 712700, "label": "埔盐乡", }, { "value": 712734, "pid": 712700, "label": "埔心乡", }, { "value": 712735, "pid": 712700, "label": "永靖乡", }, { "value": 712736, "pid": 712700, "label": "社头乡", }, { "value": 712737, "pid": 712700, "label": "二水乡", }, { "value": 712738, "pid": 712700, "label": "北斗镇", }, { "value": 712739, "pid": 712700, "label": "二林镇", }, { "value": 712740, "pid": 712700, "label": "田尾乡", }, { "value": 712741, "pid": 712700, "label": "埤头乡", }, { "value": 712742, "pid": 712700, "label": "芳苑乡", }, { "value": 712743, "pid": 712700, "label": "大城乡", }, { "value": 712744, "pid": 712700, "label": "竹塘乡", }, { "value": 712745, "pid": 712700, "label": "溪州乡", }] }, { "value": 712800, "pid": 710000, "label": "南投县", "children": [{ "value": 712801, "pid": 712800, "label": "南投市", }, { "value": 712821, "pid": 712800, "label": "埔里镇", }, { "value": 712822, "pid": 712800, "label": "草屯镇", }, { "value": 712823, "pid": 712800, "label": "竹山镇", }, { "value": 712824, "pid": 712800, "label": "集集镇", }, { "value": 712825, "pid": 712800, "label": "名间乡", }, { "value": 712826, "pid": 712800, "label": "鹿谷乡", }, { "value": 712827, "pid": 712800, "label": "中寮乡", }, { "value": 712828, "pid": 712800, "label": "鱼池乡", }, { "value": 712829, "pid": 712800, "label": "国姓乡", }, { "value": 712830, "pid": 712800, "label": "水里乡", }, { "value": 712831, "pid": 712800, "label": "信义乡", }, { "value": 712832, "pid": 712800, "label": "仁爱乡", }] }, { "value": 712900, "pid": 710000, "label": "云林县", "children": [{ "value": 712901, "pid": 712900, "label": "斗六市", }, { "value": 712921, "pid": 712900, "label": "斗南镇", }, { "value": 712922, "pid": 712900, "label": "虎尾镇", }, { "value": 712923, "pid": 712900, "label": "西螺镇", }, { "value": 712924, "pid": 712900, "label": "土库镇", }, { "value": 712925, "pid": 712900, "label": "北港镇", }, { "value": 712926, "pid": 712900, "label": "古坑乡", }, { "value": 712927, "pid": 712900, "label": "大埤乡", }, { "value": 712928, "pid": 712900, "label": "莿桐乡", }, { "value": 712929, "pid": 712900, "label": "林内乡", }, { "value": 712930, "pid": 712900, "label": "二仑乡", }, { "value": 712931, "pid": 712900, "label": "仑背乡", }, { "value": 712932, "pid": 712900, "label": "麦寮乡", }, { "value": 712933, "pid": 712900, "label": "东势乡", }, { "value": 712934, "pid": 712900, "label": "褒忠乡", }, { "value": 712935, "pid": 712900, "label": "台西乡", }, { "value": 712936, "pid": 712900, "label": "元长乡", }, { "value": 712937, "pid": 712900, "label": "四湖乡", }, { "value": 712938, "pid": 712900, "label": "口湖乡", }, { "value": 712939, "pid": 712900, "label": "水林乡", }] }, { "value": 713000, "pid": 710000, "label": "嘉义县", "children": [{ "value": 713001, "pid": 713000, "label": "太保市", }, { "value": 713002, "pid": 713000, "label": "朴子市", }, { "value": 713023, "pid": 713000, "label": "布袋镇", }, { "value": 713024, "pid": 713000, "label": "大林镇", }, { "value": 713025, "pid": 713000, "label": "民雄乡", }, { "value": 713026, "pid": 713000, "label": "溪口乡", }, { "value": 713027, "pid": 713000, "label": "新港乡", }, { "value": 713028, "pid": 713000, "label": "六脚乡", }, { "value": 713029, "pid": 713000, "label": "东石乡", }, { "value": 713030, "pid": 713000, "label": "义竹乡", }, { "value": 713031, "pid": 713000, "label": "鹿草乡", }, { "value": 713032, "pid": 713000, "label": "水上乡", }, { "value": 713033, "pid": 713000, "label": "中埔乡", }, { "value": 713034, "pid": 713000, "label": "竹崎乡", }, { "value": 713035, "pid": 713000, "label": "梅山乡", }, { "value": 713036, "pid": 713000, "label": "番路乡", }, { "value": 713037, "pid": 713000, "label": "大埔乡", }, { "value": 713038, "pid": 713000, "label": "阿里山乡", }] }, { "value": 713300, "pid": 710000, "label": "屏东县", "children": [{ "value": 713301, "pid": 713300, "label": "屏东市", }, { "value": 713321, "pid": 713300, "label": "潮州镇", }, { "value": 713322, "pid": 713300, "label": "东港镇", }, { "value": 713323, "pid": 713300, "label": "恒春镇", }, { "value": 713324, "pid": 713300, "label": "万丹乡", }, { "value": 713325, "pid": 713300, "label": "长治乡", }, { "value": 713326, "pid": 713300, "label": "麟洛乡", }, { "value": 713327, "pid": 713300, "label": "九如乡", }, { "value": 713328, "pid": 713300, "label": "里港乡", }, { "value": 713329, "pid": 713300, "label": "盐埔乡", }, { "value": 713330, "pid": 713300, "label": "高树乡", }, { "value": 713331, "pid": 713300, "label": "万峦乡", }, { "value": 713332, "pid": 713300, "label": "内埔乡", }, { "value": 713333, "pid": 713300, "label": "竹田乡", }, { "value": 713334, "pid": 713300, "label": "新埤乡", }, { "value": 713335, "pid": 713300, "label": "枋寮乡", }, { "value": 713336, "pid": 713300, "label": "新园乡", }, { "value": 713337, "pid": 713300, "label": "崁顶乡", }, { "value": 713338, "pid": 713300, "label": "林边乡", }, { "value": 713339, "pid": 713300, "label": "南州乡", }, { "value": 713340, "pid": 713300, "label": "佳冬乡", }, { "value": 713341, "pid": 713300, "label": "琉球乡", }, { "value": 713342, "pid": 713300, "label": "车城乡", }, { "value": 713343, "pid": 713300, "label": "满州乡", }, { "value": 713344, "pid": 713300, "label": "枋山乡", }, { "value": 713345, "pid": 713300, "label": "三地门乡", }, { "value": 713346, "pid": 713300, "label": "雾台乡", }, { "value": 713347, "pid": 713300, "label": "玛家乡", }, { "value": 713348, "pid": 713300, "label": "泰武乡", }, { "value": 713349, "pid": 713300, "label": "来义乡", }, { "value": 713350, "pid": 713300, "label": "春日乡", }, { "value": 713351, "pid": 713300, "label": "狮子乡", }, { "value": 713352, "pid": 713300, "label": "牡丹乡", }] }, { "value": 713400, "pid": 710000, "label": "台东县", "children": [{ "value": 713401, "pid": 713400, "label": "台东市", }, { "value": 713421, "pid": 713400, "label": "成功镇", }, { "value": 713422, "pid": 713400, "label": "关山镇", }, { "value": 713423, "pid": 713400, "label": "卑南乡", }, { "value": 713424, "pid": 713400, "label": "鹿野乡", }, { "value": 713425, "pid": 713400, "label": "池上乡", }, { "value": 713426, "pid": 713400, "label": "东河乡", }, { "value": 713427, "pid": 713400, "label": "长滨乡", }, { "value": 713428, "pid": 713400, "label": "太麻里乡", }, { "value": 713429, "pid": 713400, "label": "大武乡", }, { "value": 713430, "pid": 713400, "label": "绿岛乡", }, { "value": 713431, "pid": 713400, "label": "海端乡", }, { "value": 713432, "pid": 713400, "label": "延平乡", }, { "value": 713433, "pid": 713400, "label": "金峰乡", }, { "value": 713434, "pid": 713400, "label": "达仁乡", }, { "value": 713435, "pid": 713400, "label": "兰屿乡", }] }, { "value": 713500, "pid": 710000, "label": "花莲县", "children": [{ "value": 713501, "pid": 713500, "label": "花莲市", }, { "value": 713521, "pid": 713500, "label": "凤林镇", }, { "value": 713522, "pid": 713500, "label": "玉里镇", }, { "value": 713523, "pid": 713500, "label": "新城乡", }, { "value": 713524, "pid": 713500, "label": "吉安乡", }, { "value": 713525, "pid": 713500, "label": "寿丰乡", }, { "value": 713526, "pid": 713500, "label": "光复乡", }, { "value": 713527, "pid": 713500, "label": "丰滨乡", }, { "value": 713528, "pid": 713500, "label": "瑞穗乡", }, { "value": 713529, "pid": 713500, "label": "富里乡", }, { "value": 713530, "pid": 713500, "label": "秀林乡", }, { "value": 713531, "pid": 713500, "label": "万荣乡", }, { "value": 713532, "pid": 713500, "label": "卓溪乡", }] }, { "value": 713600, "pid": 710000, "label": "澎湖县", "children": [{ "value": 713601, "pid": 713600, "label": "马公市", }, { "value": 713621, "pid": 713600, "label": "湖西乡", }, { "value": 713622, "pid": 713600, "label": "白沙乡", }, { "value": 713623, "pid": 713600, "label": "西屿乡", }, { "value": 713624, "pid": 713600, "label": "望安乡", }, { "value": 713625, "pid": 713600, "label": "七美乡", }] }, { "value": 713700, "pid": 710000, "label": "金门县", "children": [{ "value": 713701, "pid": 713700, "label": "金城镇", }, { "value": 713702, "pid": 713700, "label": "金湖镇", }, { "value": 713703, "pid": 713700, "label": "金沙镇", }, { "value": 713704, "pid": 713700, "label": "金宁乡", }, { "value": 713705, "pid": 713700, "label": "烈屿乡", }, { "value": 713706, "pid": 713700, "label": "乌丘乡", }] }, { "value": 713800, "pid": 710000, "label": "连江县", "children": [{ "value": 713801, "pid": 713800, "label": "南竿乡", }, { "value": 713802, "pid": 713800, "label": "北竿乡", }, { "value": 713803, "pid": 713800, "label": "莒光乡", }, { "value": 713804, "pid": 713800, "label": "东引乡", }] }] },] \ No newline at end of file diff --git a/src/utils/auth.ts b/src/utils/auth.ts new file mode 100644 index 0000000..e7a6877 --- /dev/null +++ b/src/utils/auth.ts @@ -0,0 +1,18 @@ +import { TOKEN_KEY } from '@/enums/cacheEnums' +import { resetRouter } from '@/router' +import useTabsStore from '@/stores/modules/multipleTabs' +import useUserStore from '@/stores/modules/user' +import cache from './cache' + +export function getToken() { + return cache.get(TOKEN_KEY) +} + +export function clearAuthInfo() { + const userStore = useUserStore() + const tabsStore = useTabsStore() + userStore.resetState() + tabsStore.$reset() + cache.remove(TOKEN_KEY) + resetRouter() +} diff --git a/src/utils/cache.ts b/src/utils/cache.ts new file mode 100644 index 0000000..d98624f --- /dev/null +++ b/src/utils/cache.ts @@ -0,0 +1,50 @@ +const cache = { + key: 'like_admin_', + //设置缓存(expire为缓存时效) + set(key: string, value: any, expire?: string) { + key = this.getKey(key) + let data: any = { + expire: expire ? this.time() + expire : '', + value + } + + if (typeof data === 'object') { + data = JSON.stringify(data) + } + try { + window.localStorage.setItem(key, data) + } catch (e) { + return null + } + }, + get(key: string) { + key = this.getKey(key) + try { + const data = window.localStorage.getItem(key) + if (!data) { + return null + } + const { value, expire } = JSON.parse(data) + if (expire && expire < this.time()) { + window.localStorage.removeItem(key) + return null + } + return value + } catch (e) { + return null + } + }, + //获取当前时间 + time() { + return Math.round(new Date().getTime() / 1000) + }, + remove(key: string) { + key = this.getKey(key) + window.localStorage.removeItem(key) + }, + getKey(key: string) { + return this.key + key + } +} + +export default cache diff --git a/src/utils/enum.ts b/src/utils/enum.ts new file mode 100644 index 0000000..a85db7c --- /dev/null +++ b/src/utils/enum.ts @@ -0,0 +1,4 @@ +export enum PageMode { + 'ADD' = 'add', // 添加 + 'EDIT' = 'edit' // 编辑 +} diff --git a/src/utils/env.ts b/src/utils/env.ts new file mode 100644 index 0000000..d8951e9 --- /dev/null +++ b/src/utils/env.ts @@ -0,0 +1,13 @@ +/** + * @description: 开发模式 + */ +export function isDevMode(): boolean { + return import.meta.env.DEV +} + +/** + * @description: 生成模式 + */ +export function isProdMode(): boolean { + return import.meta.env.PROD +} diff --git a/src/utils/feedback.ts b/src/utils/feedback.ts new file mode 100644 index 0000000..94f7d80 --- /dev/null +++ b/src/utils/feedback.ts @@ -0,0 +1,107 @@ +/* + * @Author: micky 1254597151@qq.com + * @Date: 2023-08-14 15:56:31 + * @LastEditors: micky 1254597151@qq.com + * @LastEditTime: 2023-10-18 16:31:56 + * @FilePath: \housekeeping-admin\src\utils\feedback.ts + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +import { + ElMessage, + ElMessageBox, + ElNotification, + ElLoading, + type ElMessageBoxOptions +} from 'element-plus' +import type { LoadingInstance } from 'element-plus/es/components/loading/src/loading' + +export class Feedback { + private loadingInstance: LoadingInstance | null = null + static instance: Feedback | null = null + static getInstance() { + return this.instance ?? (this.instance = new Feedback()) + } + // 消息提示 + msg(msg: string) { + ElMessage.info(msg) + } + // 错误消息 + msgError(msg: string) { + ElMessage({ + dangerouslyUseHTMLString: true, + message: msg, + type: 'error' + }) + } + // 成功消息 + msgSuccess(msg: string) { + ElMessage.success(msg) + } + // 警告消息 + msgWarning(msg: string) { + ElMessage.warning(msg) + } + // 弹出提示 + alert(msg: string) { + ElMessageBox.alert(msg, '系统提示') + } + // 错误提示 + alertError(msg: string) { + ElMessageBox.alert(msg, '系统提示', { type: 'error' }) + } + // 成功提示 + alertSuccess(msg: string) { + ElMessageBox.alert(msg, '系统提示', { type: 'success' }) + } + // 警告提示 + alertWarning(msg: string) { + ElMessageBox.alert(msg, '系统提示', { type: 'warning' }) + } + // 通知提示 + notify(msg: string) { + ElNotification.info(msg) + } + // 错误通知 + notifyError(msg: string) { + ElNotification.error(msg) + } + // 成功通知 + notifySuccess(msg: string) { + ElNotification.success(msg) + } + // 警告通知 + notifyWarning(msg: string) { + ElNotification.warning(msg) + } + // 确认窗体 + confirm(msg: string) { + return ElMessageBox.confirm(msg, '温馨提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }) + } + // 提交内容 + prompt(content: string, title: string, options?: ElMessageBoxOptions) { + return ElMessageBox.prompt(content, title, { + confirmButtonText: '确定', + cancelButtonText: '取消', + ...options + }) + } + // 打开全局loading + loading(msg: string) { + this.loadingInstance = ElLoading.service({ + lock: true, + text: msg + }) + } + // 关闭全局loading + closeLoading() { + this.loadingInstance?.close() + } +} + +const feedback = Feedback.getInstance() + +export default feedback diff --git a/src/utils/file.ts b/src/utils/file.ts new file mode 100644 index 0000000..e8704c9 --- /dev/null +++ b/src/utils/file.ts @@ -0,0 +1,16 @@ +/** + * @description + * @param file + */ +export function streamFileDownload(file: any, fileName = '文件名称.zip', type = 'application/octet-stream;charset=UTF-8') { + const blob = new Blob([file], { type }) + const url = window.URL.createObjectURL(blob) + const link = document.createElement('a') + link.style.display = 'none' + link.href = url + link.setAttribute('download', fileName) + document.body.appendChild(link) + link.click() + document.body.removeChild(link) // 下载完成移除元素 + window.URL.revokeObjectURL(url) +} diff --git a/src/utils/request/axios.ts b/src/utils/request/axios.ts new file mode 100644 index 0000000..0adebff --- /dev/null +++ b/src/utils/request/axios.ts @@ -0,0 +1,167 @@ +import { RequestMethodsEnum } from '@/enums/requestEnums' +import axios, { + AxiosError, + type AxiosInstance, + type AxiosRequestConfig, + type AxiosResponse +} from 'axios' +import { isFunction, merge, cloneDeep } from 'lodash' +import axiosCancel from './cancel' +import type { RequestData, RequestOptions } from './type' + +export class Axios { + private axiosInstance: AxiosInstance + private readonly config: AxiosRequestConfig + private readonly options: RequestOptions + constructor(config: AxiosRequestConfig) { + this.config = config + this.options = config.requestOptions + this.axiosInstance = axios.create(config) + this.setupInterceptors() + } + + /** + * @description 获取axios实例 + */ + getAxiosInstance() { + return this.axiosInstance + } + + /** + * @description 设置拦截器 + */ + setupInterceptors() { + if (!this.config.axiosHooks) { + return + } + const { + requestInterceptorsHook, + requestInterceptorsCatchHook, + responseInterceptorsHook, + responseInterceptorsCatchHook + } = this.config.axiosHooks + this.axiosInstance.interceptors.request.use( + (config) => { + this.addCancelToken(config) + if (isFunction(requestInterceptorsHook)) { + config = requestInterceptorsHook(config) + } + return config + }, + (err: Error) => { + if (isFunction(requestInterceptorsCatchHook)) { + requestInterceptorsCatchHook(err) + } + return err + } + ) + this.axiosInstance.interceptors.response.use( + (response: AxiosResponse) => { + this.removeCancelToken(response.config.url!) + if (isFunction(responseInterceptorsHook)) { + response = responseInterceptorsHook(response) + } + return response + }, + (err: AxiosError) => { + if (isFunction(responseInterceptorsCatchHook)) { + responseInterceptorsCatchHook(err) + } + if (err.code != AxiosError.ERR_CANCELED) { + this.removeCancelToken(err.config?.url!) + } + + if (err.code == AxiosError.ECONNABORTED || err.code == AxiosError.ERR_NETWORK) { + return new Promise((resolve) => setTimeout(resolve, 500)).then(() => + this.retryRequest(err) + ) + } + return Promise.reject(err) + } + ) + } + + /** + * @description 添加CancelToken + */ + addCancelToken(config: AxiosRequestConfig) { + const { ignoreCancelToken } = config.requestOptions + !ignoreCancelToken && axiosCancel.add(config) + } + + /** + * @description 移除CancelToken + */ + removeCancelToken(url: string) { + axiosCancel.remove(url) + } + + /** + * @description 重新请求 + */ + retryRequest(error: AxiosError) { + const config = error.config + const { retryCount, isOpenRetry } = config.requestOptions + if (!isOpenRetry || config.method?.toUpperCase() == RequestMethodsEnum.POST) { + return Promise.reject(error) + } + config.retryCount = config.retryCount ?? 0 + + if (config.retryCount >= retryCount) { + return Promise.reject(error) + } + config.retryCount++ + + return this.axiosInstance.request(config) + } + /** + * @description get请求 + */ + get( + config: Partial, + options?: Partial + ): Promise { + return this.request({ ...config, method: RequestMethodsEnum.GET }, options) + } + + /** + * @description post请求 + */ + post( + config: Partial, + options?: Partial + ): Promise { + return this.request({ ...config, method: RequestMethodsEnum.POST }, options) + } + + /** + * @description 请求函数 + */ + request( + config: Partial, + options?: Partial + ): Promise { + const opt: RequestOptions = merge({}, this.options, options) + const axioxConfig: AxiosRequestConfig = { + ...cloneDeep(config), + requestOptions: opt + } + + + const { urlPrefix } = opt + // 拼接请求前缀如api + if (urlPrefix) { + axioxConfig.url = `${urlPrefix}${config.url}` + } + return new Promise((resolve, reject) => { + this.axiosInstance + .request>>(axioxConfig) + .then((res) => { + resolve(res) + }) + .catch((err) => { + reject(err) + }) + }) + } +} diff --git a/src/utils/request/cancel.ts b/src/utils/request/cancel.ts new file mode 100644 index 0000000..b092e1d --- /dev/null +++ b/src/utils/request/cancel.ts @@ -0,0 +1,31 @@ +import axios, { type AxiosRequestConfig, type Canceler } from 'axios' + +const cancelerMap = new Map() + +export class AxiosCancel { + private static instance?: AxiosCancel + + static createInstance() { + return this.instance ?? (this.instance = new AxiosCancel()) + } + add(config: AxiosRequestConfig) { + const url = config.url! + this.remove(url) + config.cancelToken = new axios.CancelToken((cancel) => { + if (!cancelerMap.has(url)) { + cancelerMap.set(url, cancel) + } + }) + } + remove(url: string) { + if (cancelerMap.has(url)) { + const cancel = cancelerMap.get(url) + cancel && cancel(url) + cancelerMap.delete(url) + } + } +} + +const axiosCancel = AxiosCancel.createInstance() + +export default axiosCancel diff --git a/src/utils/request/index.ts b/src/utils/request/index.ts new file mode 100644 index 0000000..d278983 --- /dev/null +++ b/src/utils/request/index.ts @@ -0,0 +1,130 @@ +import { merge } from 'lodash' +import configs from '@/config' +import { Axios } from './axios' +import { ContentTypeEnum, RequestCodeEnum, RequestMethodsEnum } from '@/enums/requestEnums' +import type { AxiosHooks } from './type' +import { clearAuthInfo, getToken } from '../auth' +import feedback from '../feedback' +import NProgress from 'nprogress' +import { AxiosError, type AxiosRequestConfig } from 'axios' +import router from '@/router' +import { PageEnum } from '@/enums/pageEnum' + +// 处理axios的钩子函数 +const axiosHooks: AxiosHooks = { + requestInterceptorsHook(config) { + NProgress.start() + const { withToken, isParamsToData } = config.requestOptions + const params = config.params || {} + const headers = config.headers || {} + + // 添加token + if (withToken) { + const token = getToken() + headers.token = token + } + // POST请求下如果无data,则将params视为data + if ( + isParamsToData && + !Reflect.has(config, 'data') && + config.method?.toUpperCase() === RequestMethodsEnum.POST + ) { + config.data = params + config.params = {} + } + config.headers = headers + return config + }, + requestInterceptorsCatchHook(err) { + NProgress.done() + return err + }, + async responseInterceptorsHook(response) { + NProgress.done() + const { isTransformResponse, isReturnDefaultResponse } = response.config.requestOptions + + //返回默认响应,当需要获取响应头及其他数据时可使用 + if (isReturnDefaultResponse) { + return response + } + // 是否需要对数据进行处理 + if (!isTransformResponse) { + return response.data + } + const { code, data, show, msg } = response.data + switch (code) { + case RequestCodeEnum.SUCCESS: + if (show) { + msg && feedback.msgSuccess(msg) + } + return data + + case RequestCodeEnum.PARAMS_TYPE_ERROR: + case RequestCodeEnum.PARAMS_VALID_ERROR: + case RequestCodeEnum.REQUEST_METHOD_ERROR: + case RequestCodeEnum.ASSERT_ARGUMENT_ERROR: + case RequestCodeEnum.ASSERT_MYBATIS_ERROR: + case RequestCodeEnum.LOGIN_ACCOUNT_ERROR: + case RequestCodeEnum.LOGIN_DISABLE_ERROR: + case RequestCodeEnum.NO_PERMISSTION: + case RequestCodeEnum.FAILED: + case RequestCodeEnum.SYSTEM_ERROR: + msg && feedback.msgError(msg) + return Promise.reject(data) + + case RequestCodeEnum.TOKEN_INVALID: + case RequestCodeEnum.TOKEN_EMPTY: + clearAuthInfo() + router.push(PageEnum.LOGIN) + return Promise.reject() + + default: + return data + } + }, + responseInterceptorsCatchHook(error) { + NProgress.done() + if (error.code !== AxiosError.ERR_CANCELED) { + error.message && feedback.msgError(error.message) + } + return Promise.reject(error) + } +} + +const defaultOptions: AxiosRequestConfig = { + timeout: configs.timeout, + // 基础接口地址 + baseURL: configs.baseUrl, + headers: { 'Content-Type': ContentTypeEnum.JSON, version: configs.version }, + + // 处理 axios的钩子函数 + axiosHooks: axiosHooks, + // 每个接口可以单独配置 + requestOptions: { + // 是否将params视为data参数,仅限post请求 + isParamsToData: true, + //是否返回默认的响应 + isReturnDefaultResponse: false, + // 需要对返回数据进行处理 + isTransformResponse: true, + // 接口拼接地址 + urlPrefix: configs.urlPrefix, + // 忽略重复请求 + ignoreCancelToken: false, + // 是否携带token + withToken: true, + // 开启请求超时重新发起请求请求机制 + isOpenRetry: true, + // 重新请求次数 + retryCount: 2 + } +} + +function createAxios(opt?: Partial) { + return new Axios( + // 深度合并 + merge(defaultOptions, opt || {}) + ) +} +const request = createAxios() +export default request diff --git a/src/utils/request/type.d.ts b/src/utils/request/type.d.ts new file mode 100644 index 0000000..a7f364d --- /dev/null +++ b/src/utils/request/type.d.ts @@ -0,0 +1,38 @@ +import type { AxiosRequestConfig, AxiosResponse } from 'axios' + +import 'axios' +declare module 'axios' { + // 扩展 RouteMeta + interface AxiosRequestConfig { + retryCount?: number + axiosHooks?: AxiosHooks + requestOptions: RequestOptions + } +} + +export interface RequestOptions { + isParamsToData: boolean + isReturnDefaultResponse: boolean + isTransformResponse: boolean + urlPrefix: string + ignoreCancelToken: boolean + withToken: boolean + isOpenRetry: boolean + retryCount: number +} + +export interface AxiosHooks { + requestInterceptorsHook?: (config: AxiosRequestConfig) => AxiosRequestConfig + requestInterceptorsCatchHook?: (error: Error) => void + responseInterceptorsHook?: ( + response: AxiosResponse> + ) => AxiosResponse | RequestData | T + responseInterceptorsCatchHook?: (error: AxiosError) => void +} + +export interface RequestData { + code: number + data: T + msg: string + show: boolean +} diff --git a/src/utils/table2excel.ts b/src/utils/table2excel.ts new file mode 100644 index 0000000..17fdb1e --- /dev/null +++ b/src/utils/table2excel.ts @@ -0,0 +1,10 @@ +import table2excel from 'js-table2excel' +export interface Column { + title: string + key: string + width?: number +} + +export const batchExport = (column: Column[], datas: any, excelName: string) => { + table2excel(column, datas, excelName) +} diff --git a/src/utils/theme.ts b/src/utils/theme.ts new file mode 100644 index 0000000..d11fe18 --- /dev/null +++ b/src/utils/theme.ts @@ -0,0 +1,74 @@ +import colors from 'css-color-function' +const lightConfig = { + 'dark-2': 'shade(20%)', + 'light-3': 'tint(30%)', + 'light-5': 'tint(50%)', + 'light-7': 'tint(70%)', + 'light-8': 'tint(80%)', + 'light-9': 'tint(90%)' +} + +const darkConfig = { + 'light-3': 'shade(20%)', + 'light-5': 'shade(30%)', + 'light-7': 'shade(50%)', + 'light-8': 'shade(60%)', + 'light-9': 'shade(70%)', + 'dark-2': 'tint(20%)' +} + +const themeId = 'theme-vars' + +/** + * @author Jason + * @description 用于生成elementui主题的行为变量 + * 可选值有primary、success、warning、danger、error、info + */ + +export const generateVars = (color: string, type = 'primary', isDark = false) => { + const colos = { + [`--el-color-${type}`]: color + } + const config: Record = isDark ? darkConfig : lightConfig + for (const key in config) { + colos[`--el-color-${type}-${key}`] = `color(${color} ${config[key]})` + } + return colos +} + +/** + * @author Jason + * @description 用于设置css变量 + * @param key css变量key 如 --color-primary + * @param value css变量值 如 #f40 + * @param dom dom元素 + */ +export const setCssVar = (key: string, value: string, dom = document.documentElement) => { + dom.style.setProperty(key, value) +} + +/** + * @author Jason + * @description 设置主题 + */ +export const setTheme = (options: Record, isDark = false) => { + const varsMap: Record = Object.keys(options).reduce((prev, key) => { + return Object.assign(prev, generateVars(options[key], key, isDark)) + }, {}) + + let theme = Object.keys(varsMap).reduce((prev, key) => { + const color = colors.convert(varsMap[key]) + return `${prev}${key}:${color};` + }, '') + theme = `:root{${theme}}` + let style = document.getElementById(themeId) + if (style) { + style.innerHTML = theme + return + } + style = document.createElement('style') + style.setAttribute('type', 'text/css') + style.setAttribute('id', themeId) + style.innerHTML = theme + document.head.append(style) +} diff --git a/src/utils/util.ts b/src/utils/util.ts new file mode 100644 index 0000000..c640665 --- /dev/null +++ b/src/utils/util.ts @@ -0,0 +1,274 @@ +import { isObject } from '@vue/shared' +import { ElMessage, type messageType } from 'element-plus' +import { cloneDeep } from 'lodash' + +/** + * @description 添加单位 + * @param {String | Number} value 值 100 + * @param {String} unit 单位 px em rem + */ +export const addUnit = (value: string | number, unit = 'px') => { + return !Object.is(Number(value), NaN) ? `${value}${unit}` : value +} + +/** + * @description 添加单位 + * @param {unknown} value + * @return {Boolean} + */ +export const isEmpty = (value: unknown) => { + return value == null && typeof value == 'undefined' +} + +/** + * @description 树转数组,队列实现广度优先遍历 + * @param {Array} data 数据 + * @param {Object} props `{ children: 'children' }` + */ + +export const treeToArray = (data: any[], props = { children: 'children' }) => { + data = cloneDeep(data) + const { children } = props + const newData = [] + const queue: any[] = [] + data.forEach((child: any) => queue.push(child)) + while (queue.length) { + const item: any = queue.shift() + if (item[children]) { + item[children].forEach((child: any) => queue.push(child)) + delete item[children] + } + newData.push(item) + } + return newData +} + +/** + * @description 数组转 + * @param {Array} data 数据 + * @param {Object} props `{ parent: 'pid', children: 'children' }` + */ + +export const arrayToTree = (data: any[], props = { id: 'id', parentId: 'pid', children: 'children' }) => { + data = cloneDeep(data) + const { id, parentId, children } = props + const result: any[] = [] + const map = new Map() + data.forEach(item => { + map.set(item[id], item) + const parent = map.get(item[parentId]) + if (parent) { + parent[children] = parent[children] ?? [] + parent[children].push(item) + } else { + result.push(item) + } + }) + return result +} + +/** + * 深拷贝 + * @param {any} target 需要深拷贝的对象 + * @returns {Object} + */ +export function deepClone(target: any) { + if (typeof target !== 'object' || target === null) { + return target + } + + const cloneResult: any = Array.isArray(target) ? [] : {} + + for (const key in target) { + if (Object.prototype.hasOwnProperty.call(target, key)) { + const value = target[key] + + if (typeof value === 'object' && value !== null) { + cloneResult[key] = deepClone(value) + } else { + cloneResult[key] = value + } + } + } + + return cloneResult +} + +/** + * @description 获取正确的路经 + * @param {String} path 数据 + */ +export function getNormalPath(path: string) { + if (path.length === 0 || !path || path == 'undefined') { + return path + } + const newPath = path.replace('//', '/') + const length = newPath.length + if (newPath[length - 1] === '/') { + return newPath.slice(0, length - 1) + } + return newPath +} + +/** + * @description对象格式化为Query语法 + * @param { Object } params + * @return {string} Query语法 + */ +export function objectToQuery(params: Record): string { + let query = '' + for (const props of Object.keys(params)) { + const value = params[props] + const part = encodeURIComponent(props) + '=' + if (!isEmpty(value)) { + if (isObject(value)) { + for (const key of Object.keys(value)) { + if (!isEmpty(value[key])) { + const params = props + '[' + key + ']' + const subPart = encodeURIComponent(params) + '=' + query += subPart + encodeURIComponent(value[key]) + '&' + } + } + } else { + query += part + encodeURIComponent(value) + '&' + } + } + } + return query.slice(0, -1) +} + +/** + * @description 时间格式化 + * @param dateTime { number } 时间戳 + * @param fmt { string } 时间格式 + * @return { string } + */ +// yyyy:mm:dd|yyyy:mm|yyyy年mm月dd日|yyyy年mm月dd日 hh时MM分等,可自定义组合 +export const timeFormat = (dateTime: number, fmt = 'yyyy-mm-dd') => { + // 如果为null,则格式化当前时间 + if (!dateTime) { + dateTime = Number(new Date()) + } + // 如果dateTime长度为10或者13,则为秒和毫秒的时间戳,如果超过13位,则为其他的时间格式 + if (dateTime.toString().length == 10) { + dateTime *= 1000 + } + const date = new Date(dateTime) + let ret + const opt: any = { + 'y+': date.getFullYear().toString(), // 年 + 'm+': (date.getMonth() + 1).toString(), // 月 + 'd+': date.getDate().toString(), // 日 + 'h+': date.getHours().toString(), // 时 + 'M+': date.getMinutes().toString(), // 分 + 's+': date.getSeconds().toString() // 秒 + } + for (const k in opt) { + ret = new RegExp('(' + k + ')').exec(fmt) + if (ret) { + fmt = fmt.replace(ret[1], ret[1].length == 1 ? opt[k] : opt[k].padStart(ret[1].length, '0')) + } + } + return fmt +} + +/** + * @description 获取不重复的id + * @param length { Number } id的长度 + * @return { String } id + */ +export const getNonDuplicateID = (length = 8) => { + let idStr = Date.now().toString(36) + idStr += Math.random().toString(36).substring(3, length) + return idStr +} + +/** + * @description 单词首字母大写 + * @param { String } str + * @return { String } id + */ +export const firstToUpperCase = (str = '') => { + return str.toLowerCase().replace(/( |^)[a-z]/g, $1 => $1.toUpperCase()) +} + +/** + * @description ElMessage提示 + * @param { String } message + * @param { String } type + * @param { Number } duration + * @return { String } ElMessage + */ +export const toast = (message = '', type: messageType = 'error', duration = 1500) => { + return ElMessage({ + message, + type, + duration + }) +} +interface Row { + [key: string]: any +} +/**空判断 */ +export function parseEmpty(row: Row, key: string, unit?: string) { + if (!row) return '--' + return unit ? (row[key] != null ? `${row[key]}${unit}` : '--') : row[key] ?? '--' +} +// 优惠券时间转换 +export const parseCouponTime = (t: string) => { + if (!t) return + try { + const [day, time] = t.split(' ') + let hour = time.split(':')[0] + hour.startsWith('0') ? (hour = hour.replace('0', '')) : '' + return `${day} ${hour}时` + } catch {} + return t +} +/**循环截取文本 */ +export function interceptText(text: string, interceptThreshold = 20, wrap = '\n') { + let str = '' + for (let i = 0; i < text.length; i += interceptThreshold) { + str = str + text.slice(i, i + interceptThreshold) + wrap + } + return str +} + +/** + * 根据字节数获取文件大小,并转换成 KB、MB、GB、TB 等形式 + * @param {number} bytes - 文件的字节数 + * @returns {string} - 文件大小的字符串表示形式 + */ +export function formatFileSize(bytes: number) { + const units = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'] + let size = bytes + let unitIndex = 0 + + while (size >= 1024 && unitIndex < units.length - 1) { + size /= 1024 + unitIndex++ + } + + // 保留两位小数,四舍五入 + size = Math.round(size * 100) / 100 + + return `${size} ${units[unitIndex]}` +} + +/** + * value: 数据源 + * n: 保留几位小数 + */ +export function retain(value: any, n: any): string { + if (n === 'null' || n === 'undefined' || n === 0) return value + let tran = Math.round(value * Math.pow(10, n)) / Math.pow(10, n) + let tranV = tran.toString() + let newVal = tranV.indexOf('.') + if (newVal < 0) { + tranV += '.' + } + for (let i = tranV.length - tranV.indexOf('.'); i <= n; i++) { + tranV += '0' + } + return tranV +} diff --git a/src/utils/validate.ts b/src/utils/validate.ts new file mode 100644 index 0000000..fdbf4a0 --- /dev/null +++ b/src/utils/validate.ts @@ -0,0 +1,359 @@ +import { DispatchCountEnum, DispatchEnum, UseConditionEnum, UseGoodsEnum } from '@/enums/modeEnum' +import type { UploadFile } from 'element-plus' + +/* + * @Author: micky 1254597151@qq.com + * @Date: 2023-08-14 15:56:31 + * @LastEditors: micky 1254597151@qq.com + * @LastEditTime: 2024-01-09 16:32:58 + * @FilePath: \housekeeping-admin\src\utils\validate.ts + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +const mobileReg = /^(?:(?:\+|00)86)?1(?:(?:3[\d])|(?:4[5-79])|(?:5[0-35-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\d])|(?:9[189]))\d{8}$/ + +const integerReg = /^\+?[1-9]\d*$/ +const positiveNumberReg = /^(?!0+(?:\.0+)?$)(?:[1-9]\d*|0)(?:\.\d{1,2})?$/ + +const positiveNumberAndZeroReg = /^(0|[1-9]\d*)(\.\d{1,2})?$/ +const idCardReg = /^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|10|11|12)(?:0[1-9]|[1-2]\d|30|31)\d{3}[\dXx]$/ +const ageReg = /^(?:1[0-5][0-9]|[1-9][0-9]|[1-9])$/ + +/** + * @param {string} path + * @returns {Boolean} + */ +export function isExternal(path: string) { + return /^(https?:|mailto:|tel:)/.test(path) +} + +/**手机号码 */ +export function validateContact(rule: any, value: any, callback: any) { + if (value) { + if (!mobileReg.test(value)) { + callback(new Error('请输入正确的手机号')) + } else { + callback() + } + } else { + callback() + } +} +/**分销抽佣比 */ +export function validateCommissionRate(args, payload: string) { + const [, value, callback] = args + if (value && positiveNumberAndZeroReg.test(value)) { + if (parseFloat(value) <= 20) { + callback() + } else { + callback(new Error(`${payload}抽佣比范围在0-20%`)) + } + } else { + callback(new Error(`${payload}抽佣比请输入正数,且最多保留两位小数`)) + } +} + +/**分销码有效期 */ +export function validateEffectTime(args, payload: any) { + const [, value, callback] = args + if (!payload.validEndTime) { + callback('请选择日期') + } else if (payload.validEndTime < payload.validStartTime) { + callback('结束日期不能小于开始日期') + } else { + callback() + } +} +/**分销抽佣比、师傅服务金额 */ +export function validateServiceCommissionRate(args, payload: string, max: number) { + const [, value, callback] = args + if (positiveNumberAndZeroReg.test(value)) { + if (parseFloat(value) <= max) { + callback() + } else { + callback(new Error(`${payload}抽佣比范围在0-${max}%`)) + } + } else { + callback(new Error(`${payload}抽佣比请输入正数,且最多保留两位小数`)) + } +} + +// 全数字 +export function isNumber(path: string) { + return /^\d+$/.test(path) +} +// 带小数点的数字 +export function isNumberWithDot(path: string) { + return /^(?!0\.00$)(?:0|[1-9]\d*)(?:\.\d{1,2})?$/.test(path) +} + +/**优惠券的校验规则 */ +/**优惠券面值 */ +export function validateMoney(args: any, payload: any[]) { + const [, value, callback] = args + const [conditionType, conditionMoney] = payload + if (value && positiveNumberReg.test(value)) { + if (conditionType === UseConditionEnum.CONDITION) { + if (parseFloat(value) > parseFloat(conditionMoney)) { + callback(new Error('优惠值面额必须小于最低消费金额')) + } else { + callback() + } + } else { + callback() + } + } else { + callback(new Error('优惠面值请输入正数,但不包含0且最多保留两位小数')) + } +} +/**发放方式渠道派发 */ +export function validateUserList(args: any, payload: number, channel: number) { + const [, value, callback] = args + if (payload === DispatchEnum.CHANNEL_DISPATCH) { + const val = value[channel] + if (!Array.isArray(val) || !val.length) { + callback(new Error('请选择赠送对象')) + } else { + callback() + } + } else { + callback() + } +} +/**品类券 */ +export function validateServiceCategory(args: any, payload: number) { + const [, value, callback] = args + if (payload === UseGoodsEnum.CATEGORY) { + if (!value.length) { + callback(new Error('请选择商品品类')) + } else { + callback() + } + } else { + callback() + } +} +/**商品券 */ +export function validateGoodsList(args: any, payload: number) { + const [, value, callback] = args + if (payload === UseGoodsEnum.CATEGOYR_PART) { + if (!value.length) { + callback(new Error('请选择商品')) + } else { + callback() + } + } else { + callback() + } +} +/**有门槛 */ +export function valdiateConditionMoney(args: any, payload: number[]) { + const [, value, callback] = args + const [conditionType, money] = payload + if (conditionType === UseConditionEnum.CONDITION) { + if (!value) { + callback(new Error('请输入最低消费金额,但不包含0')) + } else if (positiveNumberReg.test(value)) { + if (money && parseFloat(value) < parseFloat(money)) { + callback(new Error('最低消费金额必须大于优惠券面值')) + } else { + callback() + } + } else { + callback(new Error('最低消费金额请输入正数,但不包含0且最多保留两位小数')) + } + } else { + callback() + } +} +/**限量 */ +export function validateDispatchCount(args: any, payload: number[]) { + const [, value, callback] = args + const [sendTotalType, getType] = payload + if (getType == DispatchEnum.SYSTEM_GIVE) return callback() + if (sendTotalType === DispatchCountEnum.COUNT) { + if (!value) { + callback(new Error('请输入发放数量,但不包含0')) + } else if (integerReg.test(value)) { + callback() + } else { + callback(new Error('请输入正整数,但不包含0')) + } + } else { + callback() + } +} +/**用户可领取数量 */ +export function validateGetNum(args: any, payload: number[]) { + const [, value, callback] = args + const [sendTotalType, dispatchCount] = payload + if (value && integerReg.test(value)) { + if (sendTotalType === DispatchCountEnum.COUNT && dispatchCount && value > dispatchCount) { + callback(new Error('用户领取数量必须小于发放数量')) + } else { + callback() + } + } else { + callback(new Error('请输入正整数,但不包含0')) + } +} +/**发放时间 */ +export function validateSendTime(args: any, payload: number[]) { + const [, value, callback] = args + const [sendTimeStart, sendTimeEnd, useTimeStart, useTimeEnd] = payload + if (!sendTimeStart || !sendTimeEnd) { + callback(new Error('请选择发放时间')) + } else if (sendTimeStart === sendTimeEnd) { + callback(new Error('结束时间不能等于开始时间')) + } else if ((useTimeStart && sendTimeStart > useTimeStart) || (useTimeEnd && sendTimeEnd > useTimeEnd)) { + callback(new Error('发放时间的开始时间应该小于使用时间的开始时间,发放时间的结束时间应该小于使用时间的结束时间')) + } else { + callback() + } +} +/**使用时间 */ +export function validateUseTime(args: any, payload: number[]) { + const [, value, callback] = args + const [useTimeStart, useTimeEnd, sendTimeStart, sendTimeEnd] = payload + if (!useTimeStart || !useTimeEnd) { + callback(new Error('请选择使用时间')) + } else if (useTimeStart === useTimeEnd) { + callback(new Error('结束时间不能等于开始时间')) + } else if ((useTimeStart && sendTimeStart > useTimeStart) || (useTimeEnd && sendTimeEnd > useTimeEnd)) { + callback(new Error('使用时间的开始时间应该大于发放时间的开始时间,使用时间的结束时间应该大于发放时间的结束时间')) + } else { + callback() + } +} + +// 服务时间格式校验 +export function validateGoodsTime(args: any) { + const [, value, callback] = args + if (!/^\+?[1-9]\d*$/.test(value)) { + callback(new Error('请输入正整数,但不包含0')) + } else { + callback() + } +} +/**身份证号 */ +export function validateIdCard(rule: any, value: any, callback: any) { + if (value === '') { + callback(new Error('请输入身份证号')) + } else if (!idCardReg.test(value)) { + callback(new Error('身份证号格式有误')) + } else { + callback() + } +} +/**服务类别 */ +export function validateGoodsIds(rule: any, value: any, callback: any) { + if (!value.length) { + callback(new Error('请选择服务类别')) + } else { + callback() + } +} +/**身份证照片 */ +export function validateFileUploadList(args: any, payload: Record) { + const [, , callback] = args + if (!payload.idCard.length) { + callback(new Error('请上传身份证正反面照片')) + } else if (payload.idCard.length < 2) { + callback(new Error('请上传2张身份证照片')) + } else { + callback() + } +} +/**师傅全身照 */ +export function validateAvatarUploadList(args: any, payload: Record) { + const [, , callback] = args + if (!payload.avatar.length) { + callback(new Error('请上传全身照')) + } else { + callback() + } +} +/**所在地区 */ +export function validateLocation(args: any, payload: Record) { + const [, , callback] = args + const { provinceId, cityId, districtId } = payload + if (provinceId === '' && cityId === '' && districtId === '') { + callback(new Error('请选择所在地区')) + } else { + callback() + } +} + +export function validateAge(rule: any, value: any, callback: any) { + if (value === '') { + callback(new Error('请输入年龄')) + } else if (!ageReg.test(value)) { + callback(new Error('请输入正确的年龄')) + } else { + callback() + } +} +// 运营师傅工作时间 +export function validateWorkTime(args: any, value: any) { + const [, , callback] = args + if (!value.workStartTime || !value.workEndTime) { + callback('请选择工作时间') + } else if (value.workStartTime > value.workEndTime) { + callback('结束时间不能小于开始时间') + } else { + callback() + } +} +/**重新指派师傅-扣分 */ +export function validateScore(rule: any, value: any, callback: any) { + const reg = /^\d+(\.\d{1,2})?$/ + if (value) { + if (value < 0 || value > 5) { + callback(new Error('最小0分,最大5分')) + } else if (!/^[0-9]\d*(\.\d+)?$/.test(value)) { + callback(new Error('请输入正数')) + } else if (!reg.test(value)) { + callback(new Error('请输入正数,最多保留2位小数')) + } else { + callback() + } + } +} +/**体检报告 */ +export function validateFiles(args, payload: any) { + const [, value, callback] = args + const { pdf, report } = payload + if (report.length == 0 && pdf.length == 0) { + callback(new Error('请上传体检报告')) + } else { + callback() + } +} +/**扣款比例 */ +export function validateValue(rule: any, value: any, callback: any) { + const _reg = /[^\d.]/g //移除特殊字符 + const zeroReg = /^0+(\d+)/ //连续输入多个0 + const precisionReg = /(\.\d\d)\d+$/ //最多保留2位小数 + const _reg2 = /^\./ //点开头 + const _reg3 = /(\.\d*\.)/g //连续输入多个小数点,只保留一个 + + if (value === '') { + callback(new Error('请输入退款比例')) + } else { + const parsedValue = parseFloat(value) + if (parsedValue < 0 || parsedValue > 100) { + callback(new Error('扣款比例范围在0-100')) + } else if (_reg.test(value)) { + callback(new Error('不能输入特殊字符')) + } else if (zeroReg.test(value)) { + callback(new Error('不能连续输入多个0')) + } else if (precisionReg.test(value)) { + callback(new Error('最多保留2位小数')) + } else if (_reg2.test(value)) { + callback(new Error('不能输入以点开头字符')) + } else if (_reg3.test(value)) { + callback(new Error('不能连续输入多个小数点')) + } else { + callback() + } + } +} diff --git a/src/views/account/images/login_bg.png b/src/views/account/images/login_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..787837a256587e81c2ffd3abcac0324acff7a718 GIT binary patch literal 59273 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 Z{{c!4-k? ({ + title: '用户信息', + name: 'user-info', + content: { + data: [ + { + image: '' + } + ] + }, + styles: {} +}) diff --git a/src/views/decorate/pages/index.vue b/src/views/decorate/pages/index.vue new file mode 100644 index 0000000..da9d509 --- /dev/null +++ b/src/views/decorate/pages/index.vue @@ -0,0 +1,122 @@ + + + diff --git a/src/views/decorate/tabbar.vue b/src/views/decorate/tabbar.vue new file mode 100644 index 0000000..5241575 --- /dev/null +++ b/src/views/decorate/tabbar.vue @@ -0,0 +1,202 @@ + + + diff --git a/src/views/dev_tools/code/edit.vue b/src/views/dev_tools/code/edit.vue new file mode 100644 index 0000000..374ed96 --- /dev/null +++ b/src/views/dev_tools/code/edit.vue @@ -0,0 +1,388 @@ + + + diff --git a/src/views/dev_tools/code/index.vue b/src/views/dev_tools/code/index.vue new file mode 100644 index 0000000..ca1f9a2 --- /dev/null +++ b/src/views/dev_tools/code/index.vue @@ -0,0 +1,246 @@ + + + diff --git a/src/views/dev_tools/components/code-preview.vue b/src/views/dev_tools/components/code-preview.vue new file mode 100644 index 0000000..36c7439 --- /dev/null +++ b/src/views/dev_tools/components/code-preview.vue @@ -0,0 +1,63 @@ + + + diff --git a/src/views/dev_tools/components/data-table.vue b/src/views/dev_tools/components/data-table.vue new file mode 100644 index 0000000..e4d2d49 --- /dev/null +++ b/src/views/dev_tools/components/data-table.vue @@ -0,0 +1,102 @@ + + + diff --git a/src/views/distributor/components/QrcodeDialog.vue b/src/views/distributor/components/QrcodeDialog.vue new file mode 100644 index 0000000..bbb3bb8 --- /dev/null +++ b/src/views/distributor/components/QrcodeDialog.vue @@ -0,0 +1,99 @@ + + + + \ No newline at end of file diff --git a/src/views/distributor/coupon.vue b/src/views/distributor/coupon.vue new file mode 100644 index 0000000..e76fbb1 --- /dev/null +++ b/src/views/distributor/coupon.vue @@ -0,0 +1,256 @@ + + + + + diff --git a/src/views/distributor/distributor_group/components/group_form.vue b/src/views/distributor/distributor_group/components/group_form.vue new file mode 100644 index 0000000..43c0ff9 --- /dev/null +++ b/src/views/distributor/distributor_group/components/group_form.vue @@ -0,0 +1,99 @@ + + + diff --git a/src/views/distributor/distributor_group/index.vue b/src/views/distributor/distributor_group/index.vue new file mode 100644 index 0000000..1a877f7 --- /dev/null +++ b/src/views/distributor/distributor_group/index.vue @@ -0,0 +1,109 @@ + + + diff --git a/src/views/distributor/edit.vue b/src/views/distributor/edit.vue new file mode 100644 index 0000000..e2d8bc5 --- /dev/null +++ b/src/views/distributor/edit.vue @@ -0,0 +1,233 @@ + + + + + diff --git a/src/views/distributor/index.vue b/src/views/distributor/index.vue new file mode 100644 index 0000000..6b5585c --- /dev/null +++ b/src/views/distributor/index.vue @@ -0,0 +1,315 @@ + + + + + diff --git a/src/views/distributor/interface/index.ts b/src/views/distributor/interface/index.ts new file mode 100644 index 0000000..d161e54 --- /dev/null +++ b/src/views/distributor/interface/index.ts @@ -0,0 +1,19 @@ +export interface DialogProps { + title: string + rawData: any + api?: (params: any) => Promise +} +export interface Distributor { + id?: number + name: string + distNum: string + contract: string + effectTime: string + status: number | string + validStartTime: string + validEndTime: string + commissionRate: number | string + alreadyWithdraw: number | string + canWithdrawCommission: number | string + toBeSettledMoney: number | string +} diff --git a/src/views/distributor/order.vue b/src/views/distributor/order.vue new file mode 100644 index 0000000..24de36d --- /dev/null +++ b/src/views/distributor/order.vue @@ -0,0 +1,230 @@ + + + + diff --git a/src/views/distributor/register.vue b/src/views/distributor/register.vue new file mode 100644 index 0000000..35b3ac2 --- /dev/null +++ b/src/views/distributor/register.vue @@ -0,0 +1,151 @@ + + + + diff --git a/src/views/distributor/userDetail.vue b/src/views/distributor/userDetail.vue new file mode 100644 index 0000000..da340de --- /dev/null +++ b/src/views/distributor/userDetail.vue @@ -0,0 +1,151 @@ + + + + + diff --git a/src/views/error/403.vue b/src/views/error/403.vue new file mode 100644 index 0000000..53905ec --- /dev/null +++ b/src/views/error/403.vue @@ -0,0 +1,15 @@ + + + diff --git a/src/views/error/404.vue b/src/views/error/404.vue new file mode 100644 index 0000000..caa3d7f --- /dev/null +++ b/src/views/error/404.vue @@ -0,0 +1,9 @@ + + + diff --git a/src/views/error/components/error.vue b/src/views/error/components/error.vue new file mode 100644 index 0000000..5f0b959 --- /dev/null +++ b/src/views/error/components/error.vue @@ -0,0 +1,57 @@ + + + + diff --git a/src/views/finance/balance/index.vue b/src/views/finance/balance/index.vue new file mode 100644 index 0000000..f82a6c8 --- /dev/null +++ b/src/views/finance/balance/index.vue @@ -0,0 +1,140 @@ + + + + + diff --git a/src/views/finance/center/index.vue b/src/views/finance/center/index.vue new file mode 100644 index 0000000..51f5623 --- /dev/null +++ b/src/views/finance/center/index.vue @@ -0,0 +1,99 @@ + + + + + diff --git a/src/views/finance/recharge/index.vue b/src/views/finance/recharge/index.vue new file mode 100644 index 0000000..526f72d --- /dev/null +++ b/src/views/finance/recharge/index.vue @@ -0,0 +1,134 @@ + + + + + diff --git a/src/views/finance/withdraw/index.vue b/src/views/finance/withdraw/index.vue new file mode 100644 index 0000000..7d39c8b --- /dev/null +++ b/src/views/finance/withdraw/index.vue @@ -0,0 +1,115 @@ + + + + + + diff --git a/src/views/master_worker/apply.vue b/src/views/master_worker/apply.vue new file mode 100644 index 0000000..3ca8227 --- /dev/null +++ b/src/views/master_worker/apply.vue @@ -0,0 +1,114 @@ + + + + + + diff --git a/src/views/master_worker/cancelOrder/list.vue b/src/views/master_worker/cancelOrder/list.vue new file mode 100644 index 0000000..af1800d --- /dev/null +++ b/src/views/master_worker/cancelOrder/list.vue @@ -0,0 +1,172 @@ + + + + + diff --git a/src/views/master_worker/cancelOrder/rule.vue b/src/views/master_worker/cancelOrder/rule.vue new file mode 100644 index 0000000..0e059b7 --- /dev/null +++ b/src/views/master_worker/cancelOrder/rule.vue @@ -0,0 +1,212 @@ + + + + + diff --git a/src/views/master_worker/components/physicalDialog.vue b/src/views/master_worker/components/physicalDialog.vue new file mode 100644 index 0000000..3c519f6 --- /dev/null +++ b/src/views/master_worker/components/physicalDialog.vue @@ -0,0 +1,128 @@ + + + + diff --git a/src/views/master_worker/components/previewPdf.vue b/src/views/master_worker/components/previewPdf.vue new file mode 100644 index 0000000..3f8d99c --- /dev/null +++ b/src/views/master_worker/components/previewPdf.vue @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/src/views/master_worker/components/previewPdfDialog.vue b/src/views/master_worker/components/previewPdfDialog.vue new file mode 100644 index 0000000..bd2720d --- /dev/null +++ b/src/views/master_worker/components/previewPdfDialog.vue @@ -0,0 +1,27 @@ +

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 B-!K3G literal 0 HcmV?d00001 diff --git a/src/views/account/login.vue b/src/views/account/login.vue new file mode 100644 index 0000000..9d30fb3 --- /dev/null +++ b/src/views/account/login.vue @@ -0,0 +1,116 @@ + + + + + diff --git a/src/views/account_center/organization/index.vue b/src/views/account_center/organization/index.vue new file mode 100644 index 0000000..e69de29 diff --git a/src/views/account_center/position/index.vue b/src/views/account_center/position/index.vue new file mode 100644 index 0000000..e69de29 diff --git a/src/views/account_center/sub_account/components/organization/organization-tree.vue b/src/views/account_center/sub_account/components/organization/organization-tree.vue new file mode 100644 index 0000000..20b9fcb --- /dev/null +++ b/src/views/account_center/sub_account/components/organization/organization-tree.vue @@ -0,0 +1,120 @@ + + + + + diff --git a/src/views/account_center/sub_account/components/organization/structure.vue b/src/views/account_center/sub_account/components/organization/structure.vue new file mode 100644 index 0000000..ed9360d --- /dev/null +++ b/src/views/account_center/sub_account/components/organization/structure.vue @@ -0,0 +1,40 @@ + + + + + diff --git a/src/views/account_center/sub_account/index.vue b/src/views/account_center/sub_account/index.vue new file mode 100644 index 0000000..a5a028c --- /dev/null +++ b/src/views/account_center/sub_account/index.vue @@ -0,0 +1,22 @@ + + + + diff --git a/src/views/account_center/sub_account/modules/account-list.vue b/src/views/account_center/sub_account/modules/account-list.vue new file mode 100644 index 0000000..ef00a88 --- /dev/null +++ b/src/views/account_center/sub_account/modules/account-list.vue @@ -0,0 +1,15 @@ + + + + diff --git a/src/views/account_center/sub_account/modules/account-number.vue b/src/views/account_center/sub_account/modules/account-number.vue new file mode 100644 index 0000000..048e339 --- /dev/null +++ b/src/views/account_center/sub_account/modules/account-number.vue @@ -0,0 +1,14 @@ + + + + diff --git a/src/views/account_center/sub_account/modules/organization.vue b/src/views/account_center/sub_account/modules/organization.vue new file mode 100644 index 0000000..79b3424 --- /dev/null +++ b/src/views/account_center/sub_account/modules/organization.vue @@ -0,0 +1,77 @@ + + + + + diff --git a/src/views/application/coupon/component/selectuser.vue b/src/views/application/coupon/component/selectuser.vue new file mode 100644 index 0000000..c2e68a3 --- /dev/null +++ b/src/views/application/coupon/component/selectuser.vue @@ -0,0 +1,107 @@ + + diff --git a/src/views/application/coupon/components/selectuser.vue b/src/views/application/coupon/components/selectuser.vue new file mode 100644 index 0000000..0cc5651 --- /dev/null +++ b/src/views/application/coupon/components/selectuser.vue @@ -0,0 +1,219 @@ + + + + diff --git a/src/views/application/coupon/coupon.vue b/src/views/application/coupon/coupon.vue new file mode 100644 index 0000000..49e071d --- /dev/null +++ b/src/views/application/coupon/coupon.vue @@ -0,0 +1,306 @@ + + + + + diff --git a/src/views/application/coupon/detail.vue b/src/views/application/coupon/detail.vue new file mode 100644 index 0000000..681493e --- /dev/null +++ b/src/views/application/coupon/detail.vue @@ -0,0 +1,266 @@ + + + + diff --git a/src/views/application/coupon/edit.vue b/src/views/application/coupon/edit.vue new file mode 100644 index 0000000..353c5f2 --- /dev/null +++ b/src/views/application/coupon/edit.vue @@ -0,0 +1,484 @@ + + + + diff --git a/src/views/application/drawlist/drawlist.vue b/src/views/application/drawlist/drawlist.vue new file mode 100644 index 0000000..567367c --- /dev/null +++ b/src/views/application/drawlist/drawlist.vue @@ -0,0 +1,229 @@ + + + + + diff --git a/src/views/application/recharge/index.vue b/src/views/application/recharge/index.vue new file mode 100644 index 0000000..dff8301 --- /dev/null +++ b/src/views/application/recharge/index.vue @@ -0,0 +1,130 @@ + + + + + diff --git a/src/views/channel/dyapp.vue b/src/views/channel/dyapp.vue new file mode 100644 index 0000000..227983e --- /dev/null +++ b/src/views/channel/dyapp.vue @@ -0,0 +1,183 @@ + + diff --git a/src/views/channel/h5.vue b/src/views/channel/h5.vue new file mode 100644 index 0000000..c884fea --- /dev/null +++ b/src/views/channel/h5.vue @@ -0,0 +1,61 @@ + + diff --git a/src/views/channel/weapp.vue b/src/views/channel/weapp.vue new file mode 100644 index 0000000..cabfad8 --- /dev/null +++ b/src/views/channel/weapp.vue @@ -0,0 +1,177 @@ + + diff --git a/src/views/channel/wx_dev.vue b/src/views/channel/wx_dev.vue new file mode 100644 index 0000000..d7c31e6 --- /dev/null +++ b/src/views/channel/wx_dev.vue @@ -0,0 +1,62 @@ + + diff --git a/src/views/channel/wx_oa/config.vue b/src/views/channel/wx_oa/config.vue new file mode 100644 index 0000000..b1477df --- /dev/null +++ b/src/views/channel/wx_oa/config.vue @@ -0,0 +1,195 @@ + + diff --git a/src/views/channel/wx_oa/menu.vue b/src/views/channel/wx_oa/menu.vue new file mode 100644 index 0000000..1a0e184 --- /dev/null +++ b/src/views/channel/wx_oa/menu.vue @@ -0,0 +1,45 @@ + + + + + diff --git a/src/views/channel/wx_oa/menu_com/oa-attr.vue b/src/views/channel/wx_oa/menu_com/oa-attr.vue new file mode 100644 index 0000000..663fd85 --- /dev/null +++ b/src/views/channel/wx_oa/menu_com/oa-attr.vue @@ -0,0 +1,85 @@ + + + + + diff --git a/src/views/channel/wx_oa/menu_com/oa-menu-form-edit.vue b/src/views/channel/wx_oa/menu_com/oa-menu-form-edit.vue new file mode 100644 index 0000000..f696f7c --- /dev/null +++ b/src/views/channel/wx_oa/menu_com/oa-menu-form-edit.vue @@ -0,0 +1,73 @@ + + + diff --git a/src/views/channel/wx_oa/menu_com/oa-menu-form.vue b/src/views/channel/wx_oa/menu_com/oa-menu-form.vue new file mode 100644 index 0000000..a1729f5 --- /dev/null +++ b/src/views/channel/wx_oa/menu_com/oa-menu-form.vue @@ -0,0 +1,107 @@ + + + diff --git a/src/views/channel/wx_oa/menu_com/oa-phone.vue b/src/views/channel/wx_oa/menu_com/oa-phone.vue new file mode 100644 index 0000000..da27572 --- /dev/null +++ b/src/views/channel/wx_oa/menu_com/oa-phone.vue @@ -0,0 +1,121 @@ + + + + + diff --git a/src/views/channel/wx_oa/menu_com/useMenuOa.ts b/src/views/channel/wx_oa/menu_com/useMenuOa.ts new file mode 100644 index 0000000..731fa41 --- /dev/null +++ b/src/views/channel/wx_oa/menu_com/useMenuOa.ts @@ -0,0 +1,162 @@ +import { ref } from "vue"; +import feedback from "@/utils/feedback"; +import type { FormRules } from "element-plus"; +import { + setOaMenuSave, + getOaMenu, + setOaMenuPublish, +} from "@/api/channel/wx_oa"; +import type { Menu } from "@/api/channel/wx_oa"; + +// 菜单实例 +export const menuRef = shallowRef(); +// 菜单数据 +const menuList = ref([]); +const menuIndex = ref(0); + +// 校验 +export const rules = reactive({ + name: [ + { + required: true, + message: "必填项不能为空", + trigger: ["blur", "change"], + }, + { + min: 1, + max: 12, + message: "长度限制12个字符", + trigger: ["blur", "change"], + }, + ], + menuType: [ + { + required: true, + message: "必填项不能为空", + trigger: ["blur", "change"], + }, + ], + visitType: [ + { + required: true, + message: "必填项不能为空", + trigger: ["blur", "change"], + }, + ], + url: [ + { + required: true, + message: "必填项不能为空", + trigger: ["blur", "change"], + }, + ], + appId: [ + { + required: true, + message: "必填项不能为空", + trigger: ["blur", "change"], + }, + ], + pagePath: [ + { + required: true, + message: "必填项不能为空", + trigger: ["blur", "change"], + }, + ], +}); + +export const useMenuOa = (ref: any) => { + if (ref) menuRef.value = ref; + + // 添加主菜单 + const handleAddMenu = () => { + menuList.value.push({ + name: "菜单名称", + menuType: 1, + visitType: "view", + url: "", + appId: "", + pagePath: "", + subButtons: [], + }); + }; + + // 添加子菜单 + const handleAddSubMenu = (event?: Menu) => { + const index = menuIndex.value; + if (menuList.value[index].subButtons.length >= 5) { + feedback.msgError("已添加上限~"); + return; + } + menuList.value[index].subButtons.push(event); + }; + + // 编辑子菜单 + const handleEditSubMenu = (event: Menu, subIndex: number) => { + const index = menuIndex.value; + menuList.value[index].subButtons[subIndex] = event; + }; + + // 删除主菜单 + const handleDelMenu = (index: number) => { + menuList.value.splice(index, 1); + }; + + // 删除子菜单 + const handleDelSubMenu = (index: number, subIndex: number) => { + menuList.value[index].subButtons.splice(subIndex, 1); + }; + + // 获取菜单 + const getOaMenuFunc = async () => { + try { + menuList.value = await getOaMenu(); + } catch (error) { + console.log("获取菜单=>", error); + } + }; + + // 保存菜单 + const handleSave = async () => { + const refs = menuRef.value.value; + for (let i = 0; i < refs.length; i++) { + try { + await refs[i].menuFormRef.validate(); + } catch (error) { + menuIndex.value = i; + return; + } + } + await setOaMenuSave(menuList.value); + feedback.msgSuccess("保存成功"); + }; + + // 保存菜单 + const handlePublish = async () => { + const refs = menuRef.value.value; + for (let i = 0; i < refs.length; i++) { + try { + await refs[i].menuFormRef.validate(); + } catch (error) { + menuIndex.value = i; + return; + } + } + await setOaMenuPublish(menuList.value); + feedback.msgSuccess("发布成功"); + }; + + return { + menuList, + menuIndex, + handleAddMenu, + handleAddSubMenu, + handleEditSubMenu, + handleDelMenu, + handleDelSubMenu, + getOaMenuFunc, + handleSave, + handlePublish, + }; +}; diff --git a/src/views/channel/wx_oa/reply/default_reply.vue b/src/views/channel/wx_oa/reply/default_reply.vue new file mode 100644 index 0000000..54b3127 --- /dev/null +++ b/src/views/channel/wx_oa/reply/default_reply.vue @@ -0,0 +1,122 @@ + + diff --git a/src/views/channel/wx_oa/reply/edit.vue b/src/views/channel/wx_oa/reply/edit.vue new file mode 100644 index 0000000..28e5778 --- /dev/null +++ b/src/views/channel/wx_oa/reply/edit.vue @@ -0,0 +1,189 @@ + + diff --git a/src/views/channel/wx_oa/reply/follow_reply.vue b/src/views/channel/wx_oa/reply/follow_reply.vue new file mode 100644 index 0000000..934589f --- /dev/null +++ b/src/views/channel/wx_oa/reply/follow_reply.vue @@ -0,0 +1,123 @@ + + diff --git a/src/views/channel/wx_oa/reply/keyword_reply.vue b/src/views/channel/wx_oa/reply/keyword_reply.vue new file mode 100644 index 0000000..4a92328 --- /dev/null +++ b/src/views/channel/wx_oa/reply/keyword_reply.vue @@ -0,0 +1,140 @@ + + diff --git a/src/views/customer/index.vue b/src/views/customer/index.vue new file mode 100644 index 0000000..e69de29 diff --git a/src/views/decorate/component/add-nav.vue b/src/views/decorate/component/add-nav.vue new file mode 100644 index 0000000..1eaaa53 --- /dev/null +++ b/src/views/decorate/component/add-nav.vue @@ -0,0 +1,79 @@ + + + + diff --git a/src/views/decorate/component/add-sub.vue b/src/views/decorate/component/add-sub.vue new file mode 100644 index 0000000..9fd6dc4 --- /dev/null +++ b/src/views/decorate/component/add-sub.vue @@ -0,0 +1,77 @@ + + + + diff --git a/src/views/decorate/component/decoration-img.vue b/src/views/decorate/component/decoration-img.vue new file mode 100644 index 0000000..002274e --- /dev/null +++ b/src/views/decorate/component/decoration-img.vue @@ -0,0 +1,67 @@ + + + + + + diff --git a/src/views/decorate/component/pages/attr-setting.vue b/src/views/decorate/component/pages/attr-setting.vue new file mode 100644 index 0000000..d4c90f3 --- /dev/null +++ b/src/views/decorate/component/pages/attr-setting.vue @@ -0,0 +1,28 @@ + + diff --git a/src/views/decorate/component/pages/menu.vue b/src/views/decorate/component/pages/menu.vue new file mode 100644 index 0000000..1027e41 --- /dev/null +++ b/src/views/decorate/component/pages/menu.vue @@ -0,0 +1,44 @@ + + + + diff --git a/src/views/decorate/component/pages/preview.vue b/src/views/decorate/component/pages/preview.vue new file mode 100644 index 0000000..fdb4448 --- /dev/null +++ b/src/views/decorate/component/pages/preview.vue @@ -0,0 +1,74 @@ + + + + diff --git a/src/views/decorate/component/widgets/banner/attr.vue b/src/views/decorate/component/widgets/banner/attr.vue new file mode 100644 index 0000000..67fef29 --- /dev/null +++ b/src/views/decorate/component/widgets/banner/attr.vue @@ -0,0 +1,80 @@ + + + + + diff --git a/src/views/decorate/component/widgets/banner/content.vue b/src/views/decorate/component/widgets/banner/content.vue new file mode 100644 index 0000000..55a7505 --- /dev/null +++ b/src/views/decorate/component/widgets/banner/content.vue @@ -0,0 +1,45 @@ + + + + + diff --git a/src/views/decorate/component/widgets/banner/index.ts b/src/views/decorate/component/widgets/banner/index.ts new file mode 100644 index 0000000..c776bce --- /dev/null +++ b/src/views/decorate/component/widgets/banner/index.ts @@ -0,0 +1,8 @@ +import attr from './attr.vue' +import content from './content.vue' +import options from './options' +export default { + attr, + content, + options +} diff --git a/src/views/decorate/component/widgets/banner/options.ts b/src/views/decorate/component/widgets/banner/options.ts new file mode 100644 index 0000000..e33d921 --- /dev/null +++ b/src/views/decorate/component/widgets/banner/options.ts @@ -0,0 +1,15 @@ +export default () => ({ + title: '首页轮播图', + name: 'banner', + content: { + enabled: 1, + data: [ + { + image: '', + name: '', + link: {} + } + ] + }, + styles: {} +}) diff --git a/src/views/decorate/component/widgets/category/add-category.vue b/src/views/decorate/component/widgets/category/add-category.vue new file mode 100644 index 0000000..3a6fb9c --- /dev/null +++ b/src/views/decorate/component/widgets/category/add-category.vue @@ -0,0 +1,111 @@ + + + + + diff --git a/src/views/decorate/component/widgets/category/attr.vue b/src/views/decorate/component/widgets/category/attr.vue new file mode 100644 index 0000000..7e2ae1f --- /dev/null +++ b/src/views/decorate/component/widgets/category/attr.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/src/views/decorate/component/widgets/category/content.vue b/src/views/decorate/component/widgets/category/content.vue new file mode 100644 index 0000000..42c7184 --- /dev/null +++ b/src/views/decorate/component/widgets/category/content.vue @@ -0,0 +1,120 @@ + + + + + diff --git a/src/views/decorate/component/widgets/category/index.ts b/src/views/decorate/component/widgets/category/index.ts new file mode 100644 index 0000000..c776bce --- /dev/null +++ b/src/views/decorate/component/widgets/category/index.ts @@ -0,0 +1,8 @@ +import attr from './attr.vue' +import content from './content.vue' +import options from './options' +export default { + attr, + content, + options +} diff --git a/src/views/decorate/component/widgets/category/options.ts b/src/views/decorate/component/widgets/category/options.ts new file mode 100644 index 0000000..4b07e30 --- /dev/null +++ b/src/views/decorate/component/widgets/category/options.ts @@ -0,0 +1,26 @@ +/* + * @Author: micky 1254597151@qq.com + * @Date: 2023-08-14 15:56:31 + * @LastEditors: micky 1254597151@qq.com + * @LastEditTime: 2023-12-25 12:07:15 + * @FilePath: \housekeeping-admin\src\views\decorate\component\widgets\banner\options.ts + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +export default () => ({ + title: '首页推荐分类', + name: 'category', + content: { + enabled: 1, + data: [ + { + image: '', + name: '', + link: {}, + showList: true, + showImage: true, + sliceNum: '' + } + ] + }, + styles: {} +}) diff --git a/src/views/decorate/component/widgets/customer-service/attr.vue b/src/views/decorate/component/widgets/customer-service/attr.vue new file mode 100644 index 0000000..011266d --- /dev/null +++ b/src/views/decorate/component/widgets/customer-service/attr.vue @@ -0,0 +1,52 @@ + + + + + diff --git a/src/views/decorate/component/widgets/customer-service/content.vue b/src/views/decorate/component/widgets/customer-service/content.vue new file mode 100644 index 0000000..99d4f7e --- /dev/null +++ b/src/views/decorate/component/widgets/customer-service/content.vue @@ -0,0 +1,39 @@ + + + + diff --git a/src/views/decorate/component/widgets/customer-service/index.ts b/src/views/decorate/component/widgets/customer-service/index.ts new file mode 100644 index 0000000..c776bce --- /dev/null +++ b/src/views/decorate/component/widgets/customer-service/index.ts @@ -0,0 +1,8 @@ +import attr from './attr.vue' +import content from './content.vue' +import options from './options' +export default { + attr, + content, + options +} diff --git a/src/views/decorate/component/widgets/customer-service/options.ts b/src/views/decorate/component/widgets/customer-service/options.ts new file mode 100644 index 0000000..3a5efda --- /dev/null +++ b/src/views/decorate/component/widgets/customer-service/options.ts @@ -0,0 +1,11 @@ +export default () => ({ + title: '客服设置', + name: 'customer-service', + content: { + title: '添加客服二维码', + time: '', + mobile: '', + qrcode: '' + }, + styles: {} +}) diff --git a/src/views/decorate/component/widgets/home-title/add-title-image.vue b/src/views/decorate/component/widgets/home-title/add-title-image.vue new file mode 100644 index 0000000..cf87206 --- /dev/null +++ b/src/views/decorate/component/widgets/home-title/add-title-image.vue @@ -0,0 +1,79 @@ + + + + + diff --git a/src/views/decorate/component/widgets/home-title/attr.vue b/src/views/decorate/component/widgets/home-title/attr.vue new file mode 100644 index 0000000..7098330 --- /dev/null +++ b/src/views/decorate/component/widgets/home-title/attr.vue @@ -0,0 +1,42 @@ + + + + + diff --git a/src/views/decorate/component/widgets/home-title/content.vue b/src/views/decorate/component/widgets/home-title/content.vue new file mode 100644 index 0000000..446fd18 --- /dev/null +++ b/src/views/decorate/component/widgets/home-title/content.vue @@ -0,0 +1,41 @@ + + + + diff --git a/src/views/decorate/component/widgets/home-title/index.ts b/src/views/decorate/component/widgets/home-title/index.ts new file mode 100644 index 0000000..c776bce --- /dev/null +++ b/src/views/decorate/component/widgets/home-title/index.ts @@ -0,0 +1,8 @@ +import attr from './attr.vue' +import content from './content.vue' +import options from './options' +export default { + attr, + content, + options +} diff --git a/src/views/decorate/component/widgets/home-title/options.ts b/src/views/decorate/component/widgets/home-title/options.ts new file mode 100644 index 0000000..55866a4 --- /dev/null +++ b/src/views/decorate/component/widgets/home-title/options.ts @@ -0,0 +1,14 @@ +/* + * @Author: micky 1254597151@qq.com + * @Date: 2023-08-14 15:56:31 + * @LastEditors: micky 1254597151@qq.com + * @LastEditTime: 2023-09-11 15:01:01 + * @FilePath: \housekeeping-admin\src\views\decorate\component\widgets\banner\options.ts + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD% + */ +export default () => ({ + title: '图片标题', + name: 'home-title', + content: {}, + styles: {} +}) diff --git a/src/views/decorate/component/widgets/hot/attr.vue b/src/views/decorate/component/widgets/hot/attr.vue new file mode 100644 index 0000000..6645dc4 --- /dev/null +++ b/src/views/decorate/component/widgets/hot/attr.vue @@ -0,0 +1,20 @@ + + + + diff --git a/src/views/decorate/component/widgets/hot/content.vue b/src/views/decorate/component/widgets/hot/content.vue new file mode 100644 index 0000000..f2a572f --- /dev/null +++ b/src/views/decorate/component/widgets/hot/content.vue @@ -0,0 +1,145 @@ + + + + + diff --git a/src/views/decorate/component/widgets/hot/index.ts b/src/views/decorate/component/widgets/hot/index.ts new file mode 100644 index 0000000..c776bce --- /dev/null +++ b/src/views/decorate/component/widgets/hot/index.ts @@ -0,0 +1,8 @@ +import attr from './attr.vue' +import content from './content.vue' +import options from './options' +export default { + attr, + content, + options +} diff --git a/src/views/decorate/component/widgets/hot/options.ts b/src/views/decorate/component/widgets/hot/options.ts new file mode 100644 index 0000000..a3ef272 --- /dev/null +++ b/src/views/decorate/component/widgets/hot/options.ts @@ -0,0 +1,7 @@ +export default () => ({ + title: '热门', + name: 'hot', + disabled: 1, + content: {}, + styles: {} +}) diff --git a/src/views/decorate/component/widgets/index.ts b/src/views/decorate/component/widgets/index.ts new file mode 100644 index 0000000..f543ddd --- /dev/null +++ b/src/views/decorate/component/widgets/index.ts @@ -0,0 +1,14 @@ +const widgets: Record = import.meta.glob('./**/index.ts', { eager: true }) +interface Widget { + attr: any + content: any + options: any +} +console.log('widgets:', widgets) +const exportWidgets: Record = {} +Object.keys(widgets).forEach((key) => { + const widgetName = key.replace(/^\.\/([\w-]+).*/gi, '$1') + exportWidgets[widgetName] = widgets[key]?.default +}) + +export default exportWidgets diff --git a/src/views/decorate/component/widgets/my-coupon/attr.vue b/src/views/decorate/component/widgets/my-coupon/attr.vue new file mode 100644 index 0000000..cbfb32f --- /dev/null +++ b/src/views/decorate/component/widgets/my-coupon/attr.vue @@ -0,0 +1,40 @@ + + + + diff --git a/src/views/decorate/component/widgets/my-coupon/content.vue b/src/views/decorate/component/widgets/my-coupon/content.vue new file mode 100644 index 0000000..caeff58 --- /dev/null +++ b/src/views/decorate/component/widgets/my-coupon/content.vue @@ -0,0 +1,56 @@ + + + + diff --git a/src/views/decorate/component/widgets/my-coupon/index.ts b/src/views/decorate/component/widgets/my-coupon/index.ts new file mode 100644 index 0000000..c776bce --- /dev/null +++ b/src/views/decorate/component/widgets/my-coupon/index.ts @@ -0,0 +1,8 @@ +import attr from './attr.vue' +import content from './content.vue' +import options from './options' +export default { + attr, + content, + options +} diff --git a/src/views/decorate/component/widgets/my-coupon/options.ts b/src/views/decorate/component/widgets/my-coupon/options.ts new file mode 100644 index 0000000..68bd885 --- /dev/null +++ b/src/views/decorate/component/widgets/my-coupon/options.ts @@ -0,0 +1,35 @@ +/* + * @Author: micky 1254597151@qq.com + * @Date: 2023-09-22 10:41:06 + * @LastEditors: micky 1254597151@qq.com + * @LastEditTime: 2024-01-03 10:08:31 + * @FilePath: \housekeeping-admin\src\views\decorate\component\widgets\my-coupon\options.ts + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +export default () => ({ + title: '我的权益', + name: 'my-coupon', + content: { + style: 1, + title: '我的权益', + title_display: true, + data: [ + { + image: '', + name: '领券中心', + link: '/bundle/pages/coupon/index' + }, + { + image: '', + name: '我的优惠券', + link: '/bundle/pages/my_coupon/my_coupon' + }, + { + image: '', + name: '我的店铺', + link: '/bundle/pages/my_distributor/my_distributor' + } + ] + }, + styles: {} +}) diff --git a/src/views/decorate/component/widgets/my-service/attr.vue b/src/views/decorate/component/widgets/my-service/attr.vue new file mode 100644 index 0000000..cbfb32f --- /dev/null +++ b/src/views/decorate/component/widgets/my-service/attr.vue @@ -0,0 +1,40 @@ + + + + diff --git a/src/views/decorate/component/widgets/my-service/content.vue b/src/views/decorate/component/widgets/my-service/content.vue new file mode 100644 index 0000000..62de8e9 --- /dev/null +++ b/src/views/decorate/component/widgets/my-service/content.vue @@ -0,0 +1,67 @@ + + + + diff --git a/src/views/decorate/component/widgets/my-service/index.ts b/src/views/decorate/component/widgets/my-service/index.ts new file mode 100644 index 0000000..c776bce --- /dev/null +++ b/src/views/decorate/component/widgets/my-service/index.ts @@ -0,0 +1,8 @@ +import attr from './attr.vue' +import content from './content.vue' +import options from './options' +export default { + attr, + content, + options +} diff --git a/src/views/decorate/component/widgets/my-service/options.ts b/src/views/decorate/component/widgets/my-service/options.ts new file mode 100644 index 0000000..e8263cb --- /dev/null +++ b/src/views/decorate/component/widgets/my-service/options.ts @@ -0,0 +1,17 @@ +export default () => ({ + title: '我的服务', + name: 'my-service', + content: { + style: 1, + title: '我的服务', + title_display: true, + data: [ + { + image: '', + name: '导航名称', + link: {} + } + ] + }, + styles: {} +}) diff --git a/src/views/decorate/component/widgets/my-subscribe/attr.vue b/src/views/decorate/component/widgets/my-subscribe/attr.vue new file mode 100644 index 0000000..5626c54 --- /dev/null +++ b/src/views/decorate/component/widgets/my-subscribe/attr.vue @@ -0,0 +1,32 @@ + + + + diff --git a/src/views/decorate/component/widgets/my-subscribe/content.vue b/src/views/decorate/component/widgets/my-subscribe/content.vue new file mode 100644 index 0000000..6539ada --- /dev/null +++ b/src/views/decorate/component/widgets/my-subscribe/content.vue @@ -0,0 +1,68 @@ + + + + + diff --git a/src/views/decorate/component/widgets/my-subscribe/index.ts b/src/views/decorate/component/widgets/my-subscribe/index.ts new file mode 100644 index 0000000..c776bce --- /dev/null +++ b/src/views/decorate/component/widgets/my-subscribe/index.ts @@ -0,0 +1,8 @@ +import attr from './attr.vue' +import content from './content.vue' +import options from './options' +export default { + attr, + content, + options +} diff --git a/src/views/decorate/component/widgets/my-subscribe/options.ts b/src/views/decorate/component/widgets/my-subscribe/options.ts new file mode 100644 index 0000000..dd51422 --- /dev/null +++ b/src/views/decorate/component/widgets/my-subscribe/options.ts @@ -0,0 +1,40 @@ +export default () => ({ + title: '我的预约', + name: 'my-subscribe', + content: { + title: '我的预约', + data: [ + { + image: '', + name: '代支付', + display: true, + link: '/pages/order/index?type=1' + }, + { + image: '', + name: '预约中', + display: true, + link: '/pages/order/index?type=2' + }, + { + image: '', + name: '服务中', + display: true, + link: '/pages/order/index?type=3' + }, + { + image: '', + name: '已完成', + display: true, + link: '/pages/order/index?type=4' + }, + { + image: '', + name: '已取消', + display: true, + link: '/pages/order/index?type=5' + } + ] + }, + styles: {} +}) diff --git a/src/views/decorate/component/widgets/my-task/attr.vue b/src/views/decorate/component/widgets/my-task/attr.vue new file mode 100644 index 0000000..a165b5e --- /dev/null +++ b/src/views/decorate/component/widgets/my-task/attr.vue @@ -0,0 +1,32 @@ + + + + diff --git a/src/views/decorate/component/widgets/my-task/content.vue b/src/views/decorate/component/widgets/my-task/content.vue new file mode 100644 index 0000000..0c243a0 --- /dev/null +++ b/src/views/decorate/component/widgets/my-task/content.vue @@ -0,0 +1,60 @@ + + + + diff --git a/src/views/decorate/component/widgets/my-task/index.ts b/src/views/decorate/component/widgets/my-task/index.ts new file mode 100644 index 0000000..c776bce --- /dev/null +++ b/src/views/decorate/component/widgets/my-task/index.ts @@ -0,0 +1,8 @@ +import attr from './attr.vue' +import content from './content.vue' +import options from './options' +export default { + attr, + content, + options +} diff --git a/src/views/decorate/component/widgets/my-task/options.ts b/src/views/decorate/component/widgets/my-task/options.ts new file mode 100644 index 0000000..ac79461 --- /dev/null +++ b/src/views/decorate/component/widgets/my-task/options.ts @@ -0,0 +1,34 @@ +export default () => ({ + title: '我的接单', + name: 'my-task', + content: { + title: '我的接单', + data: [ + { + image: '', + name: '预约中', + display: true, + link: '/bundle/pages/service_order/index?type=1' + }, + { + image: '', + name: '服务中', + display: true, + link: '/bundle/pages/service_order/index?type=2' + }, + { + image: '', + name: '已完成', + display: true, + link: '/bundle/pages/service_order/index?type=3' + }, + { + image: '', + name: '已取消', + display: true, + link: '/bundle/pages/service_order/index?type=4' + } + ] + }, + styles: {} +}) diff --git a/src/views/decorate/component/widgets/nav/attr.vue b/src/views/decorate/component/widgets/nav/attr.vue new file mode 100644 index 0000000..89d2365 --- /dev/null +++ b/src/views/decorate/component/widgets/nav/attr.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/src/views/decorate/component/widgets/nav/content.vue b/src/views/decorate/component/widgets/nav/content.vue new file mode 100644 index 0000000..5ea7681 --- /dev/null +++ b/src/views/decorate/component/widgets/nav/content.vue @@ -0,0 +1,38 @@ + + + + diff --git a/src/views/decorate/component/widgets/nav/index.ts b/src/views/decorate/component/widgets/nav/index.ts new file mode 100644 index 0000000..c776bce --- /dev/null +++ b/src/views/decorate/component/widgets/nav/index.ts @@ -0,0 +1,8 @@ +import attr from './attr.vue' +import content from './content.vue' +import options from './options' +export default { + attr, + content, + options +} diff --git a/src/views/decorate/component/widgets/nav/options.ts b/src/views/decorate/component/widgets/nav/options.ts new file mode 100644 index 0000000..1eb3cfa --- /dev/null +++ b/src/views/decorate/component/widgets/nav/options.ts @@ -0,0 +1,15 @@ +export default () => ({ + title: '导航菜单', + name: 'nav', + content: { + enabled: 1, + data: [ + { + image: '', + name: '导航名称', + link: {} + } + ] + }, + styles: {} +}) diff --git a/src/views/decorate/component/widgets/search/attr.vue b/src/views/decorate/component/widgets/search/attr.vue new file mode 100644 index 0000000..93f9278 --- /dev/null +++ b/src/views/decorate/component/widgets/search/attr.vue @@ -0,0 +1,20 @@ + + + + diff --git a/src/views/decorate/component/widgets/search/content.vue b/src/views/decorate/component/widgets/search/content.vue new file mode 100644 index 0000000..c52ecb6 --- /dev/null +++ b/src/views/decorate/component/widgets/search/content.vue @@ -0,0 +1,32 @@ + + + + + diff --git a/src/views/decorate/component/widgets/search/index.ts b/src/views/decorate/component/widgets/search/index.ts new file mode 100644 index 0000000..c776bce --- /dev/null +++ b/src/views/decorate/component/widgets/search/index.ts @@ -0,0 +1,8 @@ +import attr from './attr.vue' +import content from './content.vue' +import options from './options' +export default { + attr, + content, + options +} diff --git a/src/views/decorate/component/widgets/search/options.ts b/src/views/decorate/component/widgets/search/options.ts new file mode 100644 index 0000000..e02e298 --- /dev/null +++ b/src/views/decorate/component/widgets/search/options.ts @@ -0,0 +1,7 @@ +export default () => ({ + title: '搜索', + name: 'search', + disabled: 1, + content: {}, + styles: {} +}) diff --git a/src/views/decorate/component/widgets/sticky-category/add-category.vue b/src/views/decorate/component/widgets/sticky-category/add-category.vue new file mode 100644 index 0000000..8829524 --- /dev/null +++ b/src/views/decorate/component/widgets/sticky-category/add-category.vue @@ -0,0 +1,103 @@ + + + + + diff --git a/src/views/decorate/component/widgets/sticky-category/attr.vue b/src/views/decorate/component/widgets/sticky-category/attr.vue new file mode 100644 index 0000000..6a5a1e4 --- /dev/null +++ b/src/views/decorate/component/widgets/sticky-category/attr.vue @@ -0,0 +1,45 @@ + + + + + diff --git a/src/views/decorate/component/widgets/sticky-category/content.vue b/src/views/decorate/component/widgets/sticky-category/content.vue new file mode 100644 index 0000000..b0bfae8 --- /dev/null +++ b/src/views/decorate/component/widgets/sticky-category/content.vue @@ -0,0 +1,42 @@ + + + diff --git a/src/views/decorate/component/widgets/sticky-category/index.ts b/src/views/decorate/component/widgets/sticky-category/index.ts new file mode 100644 index 0000000..c776bce --- /dev/null +++ b/src/views/decorate/component/widgets/sticky-category/index.ts @@ -0,0 +1,8 @@ +import attr from './attr.vue' +import content from './content.vue' +import options from './options' +export default { + attr, + content, + options +} diff --git a/src/views/decorate/component/widgets/sticky-category/options.ts b/src/views/decorate/component/widgets/sticky-category/options.ts new file mode 100644 index 0000000..78e0056 --- /dev/null +++ b/src/views/decorate/component/widgets/sticky-category/options.ts @@ -0,0 +1,25 @@ +/* + * @Author: micky 1254597151@qq.com + * @Date: 2023-08-14 15:56:31 + * @LastEditors: micky 1254597151@qq.com + * @LastEditTime: 2023-12-25 12:13:37 + * @FilePath: \housekeeping-admin\src\views\decorate\component\widgets\banner\options.ts + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ +export default () => ({ + title: '首页推荐分类', + name: 'category', + content: { + enabled: 1, + data: [ + { + image: '', + name: '', + link: {}, + showList: true, + sliceNum: '' + } + ] + }, + styles: {} +}) diff --git a/src/views/decorate/component/widgets/user-banner/attr.vue b/src/views/decorate/component/widgets/user-banner/attr.vue new file mode 100644 index 0000000..464e614 --- /dev/null +++ b/src/views/decorate/component/widgets/user-banner/attr.vue @@ -0,0 +1,79 @@ + + + + diff --git a/src/views/decorate/component/widgets/user-banner/content.vue b/src/views/decorate/component/widgets/user-banner/content.vue new file mode 100644 index 0000000..f7b115e --- /dev/null +++ b/src/views/decorate/component/widgets/user-banner/content.vue @@ -0,0 +1,37 @@ + + + + diff --git a/src/views/decorate/component/widgets/user-banner/index.ts b/src/views/decorate/component/widgets/user-banner/index.ts new file mode 100644 index 0000000..c776bce --- /dev/null +++ b/src/views/decorate/component/widgets/user-banner/index.ts @@ -0,0 +1,8 @@ +import attr from './attr.vue' +import content from './content.vue' +import options from './options' +export default { + attr, + content, + options +} diff --git a/src/views/decorate/component/widgets/user-banner/options.ts b/src/views/decorate/component/widgets/user-banner/options.ts new file mode 100644 index 0000000..4adc70e --- /dev/null +++ b/src/views/decorate/component/widgets/user-banner/options.ts @@ -0,0 +1,15 @@ +export default () => ({ + title: '个人中心广告图', + name: 'user-banner', + content: { + enabled: 1, + data: [ + { + image: '', + name: '', + link: {} + } + ] + }, + styles: {} +}) diff --git a/src/views/decorate/component/widgets/user-info/attr.vue b/src/views/decorate/component/widgets/user-info/attr.vue new file mode 100644 index 0000000..f9b7cc3 --- /dev/null +++ b/src/views/decorate/component/widgets/user-info/attr.vue @@ -0,0 +1,38 @@ + + + + + diff --git a/src/views/decorate/component/widgets/user-info/bg-image.vue b/src/views/decorate/component/widgets/user-info/bg-image.vue new file mode 100644 index 0000000..096df0d --- /dev/null +++ b/src/views/decorate/component/widgets/user-info/bg-image.vue @@ -0,0 +1,56 @@ + + + + + diff --git a/src/views/decorate/component/widgets/user-info/content.vue b/src/views/decorate/component/widgets/user-info/content.vue new file mode 100644 index 0000000..dcf6500 --- /dev/null +++ b/src/views/decorate/component/widgets/user-info/content.vue @@ -0,0 +1,49 @@ + + + + diff --git a/src/views/decorate/component/widgets/user-info/images/default_avatar.png b/src/views/decorate/component/widgets/user-info/images/default_avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..de31d02adfced125ae228824df009132f2a5085f GIT binary patch literal 6093 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 T*+R{{00000NkvXXu0mjf-T0C1 literal 0 HcmV?d00001 diff --git a/src/views/decorate/component/widgets/user-info/images/my_bg.png b/src/views/decorate/component/widgets/user-info/images/my_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..cedb24de76406b265401897ea9cca30d2da47567 GIT binary patch literal 17834 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