commit 198738cff23a356346f53fa95b8bd00cfff594aa Author: Lufaneng Date: Fri Sep 12 17:01:41 2025 +0800 init diff --git a/.commitlintrc.js b/.commitlintrc.js new file mode 100644 index 0000000..89f188e --- /dev/null +++ b/.commitlintrc.js @@ -0,0 +1,93 @@ +module.exports = { + // 继承的规则 + extends: ["@commitlint/config-conventional"], + // 自定义规则 + rules: { + // @see https://commitlint.js.org/#/reference-rules + + // 提交类型枚举,git提交type必须是以下类型 + "type-enum": [ + 2, + "always", + [ + "feat", // 新增功能 + "fix", // 修复缺陷 + "docs", // 文档变更 + "style", // 代码格式(不影响功能,例如空格、分号等格式修正) + "refactor", // 代码重构(不包括 bug 修复、功能新增) + "perf", // 性能优化 + "test", // 添加疏漏测试或已有测试改动 + "build", // 构建流程、外部依赖变更(如升级 npm 包、修改 webpack 配置等) + "ci", // 修改 CI 配置、脚本 + "revert", // 回滚 commit + "chore", // 对构建过程或辅助工具和库的更改(不影响源文件、测试用例) + ], + ], + "subject-case": [0], // subject大小写不做校验 + }, + + prompt: { + messages: { + type: "选择你要提交的类型 :", + scope: "选择一个提交范围(可选):", + customScope: "请输入自定义的提交范围 :", + subject: "填写简短精炼的变更描述 :\n", + body: '填写更加详细的变更描述(可选)。使用 "|" 换行 :\n', + breaking: '列举非兼容性重大的变更(可选)。使用 "|" 换行 :\n', + footerPrefixesSelect: "选择关联issue前缀(可选):", + customFooterPrefix: "输入自定义issue前缀 :", + footer: "列举关联issue (可选) 例如: #31, #I3244 :\n", + generatingByAI: "正在通过 AI 生成你的提交简短描述...", + generatedSelectByAI: "选择一个 AI 生成的简短描述:", + confirmCommit: "是否提交或修改commit ?", + }, + // prettier-ignore + types: [ + { value: "feat", name: "特性: ✨ 新增功能", emoji: ":sparkles:" }, + { value: "fix", name: "修复: 🐛 修复缺陷", emoji: ":bug:" }, + { value: "docs", name: "文档: 📝 文档变更(更新README文件,或者注释)", emoji: ":memo:" }, + { value: "style", name: "格式: 🌈 代码格式(空格、格式化、缺失的分号等)", emoji: ":lipstick:" }, + { value: "refactor", name: "重构: 🔄 代码重构(不修复错误也不添加特性的代码更改)", emoji: ":recycle:" }, + { value: "perf", name: "性能: 🚀 性能优化", emoji: ":zap:" }, + { value: "test", name: "测试: 🧪 添加疏漏测试或已有测试改动", emoji: ":white_check_mark:"}, + { value: "build", name: "构建: 📦️ 构建流程、外部依赖变更(如升级 npm 包、修改 vite 配置等)", emoji: ":package:"}, + { value: "ci", name: "集成: ⚙️ 修改 CI 配置、脚本", emoji: ":ferris_wheel:"}, + { value: "revert", name: "回退: ↩️ 回滚 commit",emoji: ":rewind:"}, + { value: "chore", name: "其他: 🛠️ 对构建过程或辅助工具和库的更改(不影响源文件、测试用例)", emoji: ":hammer:"}, + ], + useEmoji: true, + emojiAlign: "center", + useAI: false, + aiNumber: 1, + themeColorCode: "", + scopes: [], + allowCustomScopes: true, + allowEmptyScopes: true, + customScopesAlign: "bottom", + customScopesAlias: "custom", + emptyScopesAlias: "empty", + upperCaseSubject: false, + markBreakingChangeMode: false, + allowBreakingChanges: ["feat", "fix"], + breaklineNumber: 100, + breaklineChar: "|", + skipQuestions: [], + issuePrefixes: [ + { value: "closed", name: "closed: ISSUES has been processed" }, + ], + customIssuePrefixAlign: "top", + emptyIssuePrefixAlias: "skip", + customIssuePrefixAlias: "custom", + allowCustomIssuePrefix: true, + allowEmptyIssuePrefix: true, + confirmColorize: true, + maxHeaderLength: Infinity, + maxSubjectLength: Infinity, + minSubjectLength: 0, + scopeOverrides: undefined, + defaultBody: "", + defaultIssues: "", + defaultScope: "", + defaultSubject: "", + }, +}; diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..00ee2de --- /dev/null +++ b/.editorconfig @@ -0,0 +1,15 @@ +# http://editorconfig.org +root = true + +# 表示所有文件适用 +[*] +charset = utf-8 # 设置文件字符集为 utf-8 +end_of_line = lf # 控制换行类型(lf | cr | crlf) +indent_style = space # 缩进风格(tab | space) +indent_size = 2 # 缩进大小 +insert_final_newline = true # 始终在文件末尾插入一个新行 + +# 表示仅 md 文件适用以下规则 +[*.md] +max_line_length = off # 关闭最大行长度限制 +trim_trailing_whitespace = false # 关闭末尾空格修剪 diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..63dba1e --- /dev/null +++ b/.env.development @@ -0,0 +1,8 @@ +# H5应用端口 +VITE_APP_PORT = 3000 + +# H5代理前缀 +VITE_APP_PROXY_PREFIX = "/dev-api" + +# 接口地址 +VITE_APP_BASE_URL = "http://localhost:8080" diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..f69f521 --- /dev/null +++ b/.env.production @@ -0,0 +1,2 @@ +# 接口地址 +VITE_APP_BASE_URL = "http://prod-api" diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..edef1ea --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +.idea +.vscode +.hbuilderx +.project +.DS_Store +node_modules +unpackage +package-lock.json +pnpm-lock.yaml \ No newline at end of file diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100644 index 0000000..fd2bf70 --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1 @@ +npx --no-install commitlint --edit $1 diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 0000000..b18d041 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1 @@ +npm run lint:lint-staged diff --git a/.lintstagedrc.js b/.lintstagedrc.js new file mode 100644 index 0000000..3242196 --- /dev/null +++ b/.lintstagedrc.js @@ -0,0 +1,3 @@ +module.exports = { + "*.{js,cjs,ts,json,tsx,css,less,scss,vue,html,md}": ["prettier --write"], +}; diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..a284f7b --- /dev/null +++ b/.prettierignore @@ -0,0 +1,10 @@ +unpackage +node_modules +uni_modules +static +.husky +.hbuilderx +.vscode +.idea +*.sh +*.md diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 0000000..3c61781 --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,47 @@ +// Prettier配置文档:https://prettier.io/docs/en/options.html +module.exports = { + // (x)=>{},单个参数箭头函数是否显示小括号。(always:始终显示;avoid:省略括号。默认:always) + arrowParens: "always", + // 开始标签的右尖括号是否跟随在最后一行属性末尾,默认false + bracketSameLine: false, + // 对象字面量的括号之间打印空格 (true - Example: { foo: bar } ; false - Example: {foo:bar}) + bracketSpacing: true, + // 是否格式化一些文件中被嵌入的代码片段的风格(auto|off;默认auto) + embeddedLanguageFormatting: "auto", + // 指定 HTML 文件的空格敏感度 (css|strict|ignore;默认css) + htmlWhitespaceSensitivity: "ignore", + // 当文件已经被 Prettier 格式化之后,是否会在文件顶部插入一个特殊的 @format 标记,默认false + insertPragma: false, + // 在 JSX 中使用单引号替代双引号,默认false + jsxSingleQuote: false, + // 每行最多字符数量,超出换行(默认80) + printWidth: 80, + // 超出打印宽度 (always | never | preserve ) + proseWrap: "preserve", + // 对象属性是否使用引号(as-needed | consistent | preserve;默认as-needed:对象的属性需要加引号才添加;) + quoteProps: "as-needed", + // 是否只格式化在文件顶部包含特定注释(@prettier| @format)的文件,默认false + requirePragma: false, + // 结尾添加分号 + semi: true, + // 使用单引号 (true:单引号;false:双引号) + singleQuote: false, + // 缩进空格数,默认2个空格 + tabWidth: 2, + // 元素末尾是否加逗号,默认es5: ES5中的 objects, arrays 等会添加逗号,TypeScript 中的 type 后不加逗号 + trailingComma: "es5", + // 指定缩进方式,空格或tab,默认false,即使用空格 + useTabs: false, + // vue 文件中是否缩进 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f755343 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 白開水 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..48ea067 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +vue3+uniapp+uv-ui \ No newline at end of file diff --git a/api/index.js b/api/index.js new file mode 100644 index 0000000..3ef9985 --- /dev/null +++ b/api/index.js @@ -0,0 +1,4 @@ +import AuthAPI from "./modules/auth"; +import UserAPI from "./modules/user"; + +export { AuthAPI, UserAPI }; diff --git a/api/modules/auth.js b/api/modules/auth.js new file mode 100644 index 0000000..cc9d547 --- /dev/null +++ b/api/modules/auth.js @@ -0,0 +1,30 @@ +import http from "@/utils/request"; + +class AuthAPI { + // 注册 + static signUp(data) { + return http.post("/auth/signup", data, { + custom: { + loading: true, + }, + }); + } + + // 登录 + static signIn(data) { + return http.post("/auth/signin", data, { + custom: { + loading: true, + }, + }); + } + + // 刷新token + static refreshToken(header = {}) { + return http.post("/auth/refresh", undefined, { + header, + }); + } +} + +export default AuthAPI; diff --git a/api/modules/user.js b/api/modules/user.js new file mode 100644 index 0000000..00d5cec --- /dev/null +++ b/api/modules/user.js @@ -0,0 +1,16 @@ +import http from "@/utils/request"; + +class UserAPI { + // test get api + static getUserList(params = {}) { + return http.get("/user/list", { + params, + custom: { + auth: true, + loading: true, + }, + }); + } +} + +export default UserAPI; diff --git a/components/HeaderCustom/HeaderCustom.vue b/components/HeaderCustom/HeaderCustom.vue new file mode 100644 index 0000000..03999f3 --- /dev/null +++ b/components/HeaderCustom/HeaderCustom.vue @@ -0,0 +1,54 @@ + + + + \ No newline at end of file diff --git a/components/IconFont/IconFont.vue b/components/IconFont/IconFont.vue new file mode 100644 index 0000000..98e730c --- /dev/null +++ b/components/IconFont/IconFont.vue @@ -0,0 +1,36 @@ + + + + + diff --git a/components/IconFont/iconfont.css b/components/IconFont/iconfont.css new file mode 100644 index 0000000..babe6c2 --- /dev/null +++ b/components/IconFont/iconfont.css @@ -0,0 +1,19 @@ +@font-face { + font-family: "iconfont"; /* Project id 4657887 */ + src: + url("iconfont.woff2?t=1724050101808") format("woff2"), + url("iconfont.woff?t=1724050101808") format("woff"), + url("iconfont.ttf?t=1724050101808") format("truetype"); +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-uniapp:before { + content: "\e624"; +} diff --git a/components/IconFont/iconfont.json b/components/IconFont/iconfont.json new file mode 100644 index 0000000..8c16935 --- /dev/null +++ b/components/IconFont/iconfont.json @@ -0,0 +1,16 @@ +{ + "id": "4657887", + "name": "vue3-uniapp-template", + "font_family": "iconfont", + "css_prefix_text": "icon-", + "description": "", + "glyphs": [ + { + "icon_id": "19317486", + "name": "uniapp", + "font_class": "uniapp", + "unicode": "e624", + "unicode_decimal": 58916 + } + ] +} diff --git a/components/IconFont/iconfont.ttf b/components/IconFont/iconfont.ttf new file mode 100644 index 0000000..9010d88 Binary files /dev/null and b/components/IconFont/iconfont.ttf differ diff --git a/components/IconFont/iconfont.woff b/components/IconFont/iconfont.woff new file mode 100644 index 0000000..8b46eff Binary files /dev/null and b/components/IconFont/iconfont.woff differ diff --git a/components/IconFont/iconfont.woff2 b/components/IconFont/iconfont.woff2 new file mode 100644 index 0000000..4d21366 Binary files /dev/null and b/components/IconFont/iconfont.woff2 differ diff --git a/components/LangSelect/LangSelect.vue b/components/LangSelect/LangSelect.vue new file mode 100644 index 0000000..eecb905 --- /dev/null +++ b/components/LangSelect/LangSelect.vue @@ -0,0 +1,58 @@ + + + + + diff --git a/components/Login/Login.vue b/components/Login/Login.vue new file mode 100644 index 0000000..c9af66e --- /dev/null +++ b/components/Login/Login.vue @@ -0,0 +1,307 @@ + + + + + diff --git a/components/UploadFile/UploadFile.vue b/components/UploadFile/UploadFile.vue new file mode 100644 index 0000000..32d4dd1 --- /dev/null +++ b/components/UploadFile/UploadFile.vue @@ -0,0 +1,426 @@ + + + + + \ No newline at end of file diff --git a/components/UploadFile/example.vue b/components/UploadFile/example.vue new file mode 100644 index 0000000..9e06ccc --- /dev/null +++ b/components/UploadFile/example.vue @@ -0,0 +1,191 @@ + + + + + + \ No newline at end of file diff --git a/hooks/usePermission.js b/hooks/usePermission.js new file mode 100644 index 0000000..587f7a9 --- /dev/null +++ b/hooks/usePermission.js @@ -0,0 +1,10 @@ +import { hasPerm } from "@/plugins/permission"; +import { currentRoute } from "@/router"; + +// 对某些特殊场景需要在页面onShow生命周期中校验权限: +// 1.微信小程序端点击tabbar的底层逻辑不触发uni.switchTab +// 2.h5在浏览器地址栏输入url后跳转不触发uni的路由api +// 3.首次启动加载的页面不触发uni的路由api +export async function usePermission() { + return hasPerm(currentRoute()); +} diff --git a/index.html b/index.html new file mode 100644 index 0000000..7535993 --- /dev/null +++ b/index.html @@ -0,0 +1,24 @@ + + + + + + + + + + +
+ + + diff --git a/locale/en.json b/locale/en.json new file mode 100644 index 0000000..8c3df39 --- /dev/null +++ b/locale/en.json @@ -0,0 +1,8 @@ +{ + "locale.auto": "System", + "locale.en": "English", + "locale.zh-hans": "Simplified Chinese", + "locale.zh-hant": "Traditional Chinese", + "locale.ja": "Japanese", + "index.demo": "uni-app internationalization demo" +} diff --git a/locale/index.js b/locale/index.js new file mode 100644 index 0000000..274eca7 --- /dev/null +++ b/locale/index.js @@ -0,0 +1,23 @@ +import { createI18n } from "vue-i18n"; // v9.x +import en from "./en.json"; +import ja from "./ja.json"; +import zhHans from "./zh-Hans.json"; +import zhHant from "./zh-Hant.json"; + +const i18n = createI18n({ + legacy: false, // 必须设置false才能使用Composition API + globalInjection: true, // 为每个组件注入$为前缀的全局属性和函数 + locale: uni.getLocale(), + messages: { + en, + "zh-Hans": zhHans, + "zh-Hant": zhHant, + ja, + }, +}); + +export function setupI18n(app) { + app.use(i18n); +} + +export { i18n }; diff --git a/locale/ja.json b/locale/ja.json new file mode 100644 index 0000000..4a991e3 --- /dev/null +++ b/locale/ja.json @@ -0,0 +1,8 @@ +{ + "locale.auto": "システム", + "locale.en": "英語", + "locale.zh-hans": "簡体字中国語", + "locale.zh-hant": "繁体字中国語", + "locale.ja": "日本語", + "index.demo": "uni-app 国際化デモ" +} diff --git a/locale/uni-app.ja.json b/locale/uni-app.ja.json new file mode 100644 index 0000000..41cef76 --- /dev/null +++ b/locale/uni-app.ja.json @@ -0,0 +1,36 @@ +{ + "common": { + "uni.app.quit": "もう一度押すと、アプリケーションが終了します", + "uni.async.error": "サーバーへの接続がタイムアウトしました。画面をクリックして再試行してください", + "uni.showActionSheet.cancel": "キャンセル", + "uni.showToast.unpaired": "使用するには、showToastとhideToastをペアにする必要があることに注意してください", + "uni.showLoading.unpaired": "使用するには、showLoadingとhideLoadingをペアにする必要があることに注意してください", + "uni.showModal.cancel": "キャンセル", + "uni.showModal.confirm": "OK", + "uni.chooseImage.cancel": "キャンセル", + "uni.chooseImage.sourceType.album": "アルバムから選択", + "uni.chooseImage.sourceType.camera": "カメラ", + "uni.chooseVideo.cancel": "キャンセル", + "uni.chooseVideo.sourceType.album": "アルバムから選択", + "uni.chooseVideo.sourceType.camera": "カメラ", + "uni.previewImage.cancel": "キャンセル", + "uni.previewImage.button.save": "画像を保存", + "uni.previewImage.save.success": "画像をアルバムに正常に保存します", + "uni.previewImage.save.fail": "画像をアルバムに保存できませんでした", + "uni.setClipboardData.success": "コンテンツがコピーされました", + "uni.scanCode.title": "スキャンコード", + "uni.scanCode.album": "アルバム", + "uni.scanCode.fail": "認識に失敗しました", + "uni.scanCode.flash.on": "タッチして点灯", + "uni.scanCode.flash.off": "タップして閉じる", + "uni.startSoterAuthentication.authContent": "指紋認識...", + "uni.picker.done": "完了", + "uni.picker.cancel": "キャンセル", + "uni.video.danmu": "「弾幕」", + "uni.video.volume": "ボリューム", + "uni.button.feedback.title": "質問のフィードバック", + "uni.button.feedback.send": "送信" + }, + "ios": {}, + "android": {} +} diff --git a/locale/zh-Hans.json b/locale/zh-Hans.json new file mode 100644 index 0000000..a227eda --- /dev/null +++ b/locale/zh-Hans.json @@ -0,0 +1,8 @@ +{ + "locale.auto": "系统", + "locale.en": "英语", + "locale.zh-hans": "简体中文", + "locale.zh-hant": "繁体中文", + "locale.ja": "日语", + "index.demo": "uni-app 国际化演示" +} diff --git a/locale/zh-Hant.json b/locale/zh-Hant.json new file mode 100644 index 0000000..6e43514 --- /dev/null +++ b/locale/zh-Hant.json @@ -0,0 +1,8 @@ +{ + "locale.auto": "系統", + "locale.en": "英語", + "locale.zh-hans": "簡體中文", + "locale.zh-hant": "繁體中文", + "locale.ja": "日語", + "index.demo": "uni-app 國際化演示" +} diff --git a/main.js b/main.js new file mode 100644 index 0000000..642bf76 --- /dev/null +++ b/main.js @@ -0,0 +1,11 @@ +import App from "./App"; +import { createSSRApp } from "vue"; +import setupPlugins from "@/plugins"; + +export function createApp() { + const app = createSSRApp(App); + app.use(setupPlugins); + return { + app, + }; +} diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..8e0d5b3 --- /dev/null +++ b/manifest.json @@ -0,0 +1,100 @@ +{ + "name" : "卡叔电梯", + "appid" : "__UNI__3A16C1C", + "description" : "", + "versionName" : "1.0.0", + "versionCode" : "100", + "transformPx" : false, + /* 5+App特有相关 */ + "app-plus" : { + "usingComponents" : true, + "nvueStyleCompiler" : "uni-app", + "compilerVersion" : 3, + "splashscreen" : { + "alwaysShowBeforeRender" : true, + "waiting" : true, + "autoclose" : true, + "delay" : 0 + }, + /* 模块配置 */ + "modules" : {}, + /* 应用发布信息 */ + "distribute" : { + /* android打包配置 */ + "android" : { + "permissions" : [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ], + "minSdkVersion" : 21 + }, + /* ios打包配置 */ + "ios" : {}, + /* SDK配置 */ + "sdkConfigs" : {} + } + }, + /* 快应用特有相关 */ + "quickapp" : {}, + /* 小程序特有相关 */ + "mp-weixin" : { + "appid" : "wx2c04ebae2099b3d2", + "setting" : { + "urlCheck" : false, + "es6" : true, + "postcss" : true, + "minified" : true + }, + "usingComponents" : true, + "permission" : { + "scope.userLocation" : { + "desc" : "获取当前位置" + }, + "scope.userFuzzyLocation" : { + "desc" : "您的位置信息将用于小程序位置接口的效果展示" + } + }, + /* 地理位置相关接口配置项 @see https://developers.weixin.qq.com/community/develop/doc/000a02f2c5026891650e7f40351c01 */ + "requiredPrivateInfos" : [ "getLocation", "chooseLocation" ] + }, + "mp-alipay" : { + "usingComponents" : true + }, + "mp-baidu" : { + "usingComponents" : true + }, + "mp-toutiao" : { + "usingComponents" : true + }, + "uniStatistics" : { + "enable" : false + }, + "vueVersion" : "3", + "h5" : { + "optimization" : { + "treeShaking" : { + "enable" : false + } + }, + "devServer" : { + "https" : false + }, + "router" : { + "mode" : "history" + } + }, + "locale" : "auto" +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..a991c4f --- /dev/null +++ b/package.json @@ -0,0 +1,38 @@ +{ + "name": "lift-wechat", + "version": "1.0.0", + "description": "电梯图纸生成", + "main": "main.js", + "scripts": { + "prepare": "husky", + "lint:prettier": "prettier --write \"**/*.{js,cjs,ts,json,tsx,css,less,scss,vue,html,md}\"", + "lint:lint-staged": "lint-staged", + "commit": "git-cz" + }, + "keywords": [ + "卡叔电梯" + ], + "author": "Lufaneng", + "license": "MIT", + "dependencies": { + "crypto-js": "^4.2.0", + "dayjs": "^1.11.18", + "three": "^0.178.0", + "vue-draggable-plus": "^0.6.0" + }, + "devDependencies": { + "@commitlint/cli": "^19.1.0", + "@commitlint/config-conventional": "^19.1.0", + "@dcloudio/types": "^3.4.11", + "commitizen": "^4.3.0", + "cz-git": "^1.9.0", + "husky": "^9.0.11", + "lint-staged": "^15.2.2", + "prettier": "^3.2.5" + }, + "config": { + "commitizen": { + "path": "node_modules/cz-git" + } + } +} diff --git a/pages.json b/pages.json new file mode 100644 index 0000000..411730d --- /dev/null +++ b/pages.json @@ -0,0 +1,120 @@ +{ + //组件自动引入规则 https://uniapp.dcloud.net.cn/collocation/pages.html#easycom + "easycom": { + "autoscan": true, + "custom": { + "^x-(.*)": "@/components/x-$1/index.vue" + } + }, + "globalStyle": { + "navigationBarTextStyle": "black", + "navigationBarTitleText": "电梯图纸生成", + "navigationBarBackgroundColor": "#fff", + "backgroundColor": "#F8F8F8", + "enablePullDownRefresh": false + }, + "pages": [ + //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages + { + "path": "pages/login/login", + "style": { + "navigationBarTitleText": "登录" + } + }, + { + "path": "pages/index/index", + "style": { + "navigationBarTitleText": "电梯图纸生成平台" + } + }, + { + "path" : "pages/order/order", + "style" : + { + "navigationBarTitleText" : "订单" + } + }, + { + "path" : "pages/consumption/consumption", + "style" : + { + "navigationBarTitleText" : "消费" + } + }, + { + "path" : "pages/mine/mine", + "style" : + { + "navigationBarTitleText" : "我的" + } + } + ], + "subPackages": [ + { + "root": "pagesA", + "pages": [ + { + "path" : "user-agreement/user-agreement", + "style" : + { + "navigationBarTitleText" : "用户协议", + "navigationStyle": "custom" + } + }, + { + "path" : "generate-record/generate-record", + "style" : + { + "navigationBarTitleText" : "图纸生成记录" + } + }, + { + "path" : "edit-profile/edit-profile", + "style" : + { + "navigationBarTitleText" : "编辑资料" + } + } + ] + } + ], + "preloadRule": { + "pages/index/index": { + "network": "wifi", + "packages": ["pagesA"] + } + }, + "tabBar": { + "color": "#999999", + "selectedColor": "#3F70FF", + "backgroundColor": "#fff", + "position": "bottom", + "borderStyle": "black", + "list": [ + { + "pagePath": "pages/index/index", + "iconPath": "static/tabbar/index.png", + "selectedIconPath": "static/tabbar/index_HL.png", + "text": "首页" + }, + { + "pagePath": "pages/order/order", + "iconPath": "static/tabbar/appointment.png", + "selectedIconPath": "static/tabbar/appointment_HL.png", + "text": "订单" + }, + { + "pagePath": "pages/consumption/consumption", + "iconPath": "static/tabbar/appointment.png", + "selectedIconPath": "static/tabbar/appointment_HL.png", + "text": "消费" + }, + { + "pagePath": "pages/mine/mine", + "iconPath": "static/tabbar/mine.png", + "selectedIconPath": "static/tabbar/mine_HL.png", + "text": "我的" + } + ] + } +} diff --git a/pages/consumption/consumption.vue b/pages/consumption/consumption.vue new file mode 100644 index 0000000..a0578d8 --- /dev/null +++ b/pages/consumption/consumption.vue @@ -0,0 +1,380 @@ + + + + + \ No newline at end of file diff --git a/pages/index/index.vue b/pages/index/index.vue new file mode 100644 index 0000000..defb7d7 --- /dev/null +++ b/pages/index/index.vue @@ -0,0 +1,342 @@ + + + + + + + \ No newline at end of file diff --git a/pages/index/index1.vue b/pages/index/index1.vue new file mode 100644 index 0000000..8ec2551 --- /dev/null +++ b/pages/index/index1.vue @@ -0,0 +1,517 @@ + + + + + \ No newline at end of file diff --git a/pages/login/login.vue b/pages/login/login.vue new file mode 100644 index 0000000..fb5b817 --- /dev/null +++ b/pages/login/login.vue @@ -0,0 +1,214 @@ + + + + + + + \ No newline at end of file diff --git a/pages/mine/mine.vue b/pages/mine/mine.vue new file mode 100644 index 0000000..255f32d --- /dev/null +++ b/pages/mine/mine.vue @@ -0,0 +1,457 @@ + + + + + \ No newline at end of file diff --git a/pages/order/order.vue b/pages/order/order.vue new file mode 100644 index 0000000..cded34e --- /dev/null +++ b/pages/order/order.vue @@ -0,0 +1,528 @@ + + + + + \ No newline at end of file diff --git a/pagesA/edit-profile/edit-profile.vue b/pagesA/edit-profile/edit-profile.vue new file mode 100644 index 0000000..7caedbc --- /dev/null +++ b/pagesA/edit-profile/edit-profile.vue @@ -0,0 +1,460 @@ + + + + + \ No newline at end of file diff --git a/pagesA/generate-record/generate-record.vue b/pagesA/generate-record/generate-record.vue new file mode 100644 index 0000000..1fc5ba5 --- /dev/null +++ b/pagesA/generate-record/generate-record.vue @@ -0,0 +1,351 @@ + + + + + \ No newline at end of file diff --git a/pagesA/user-agreement/user-agreement.vue b/pagesA/user-agreement/user-agreement.vue new file mode 100644 index 0000000..4f911cb --- /dev/null +++ b/pagesA/user-agreement/user-agreement.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/plugins/index.js b/plugins/index.js new file mode 100644 index 0000000..6d53e99 --- /dev/null +++ b/plugins/index.js @@ -0,0 +1,17 @@ +import { setupI18n } from "@/locale"; +import { setupStore } from "@/store"; +import { setupPermission } from "./permission"; +import { setupUI } from "./ui"; + +export default { + install(app) { + // UI扩展配置 + app.use(setupUI); + // 状态管理 + app.use(setupStore); + // 国际化 + app.use(setupI18n); + // 路由拦截 + app.use(setupPermission); + }, +}; diff --git a/plugins/permission.js b/plugins/permission.js new file mode 100644 index 0000000..bed1f8e --- /dev/null +++ b/plugins/permission.js @@ -0,0 +1,56 @@ +import { + ERROR404_PATH, + isPathExists, + LOGIN_PATH, + removeQueryString, + routes, +} from "@/router"; +import { useAuthStore } from "@/store/modules/auth"; + +// 白名单路由 +const whiteList = ["/"]; +routes.forEach((item) => { + if (item.needLogin !== true) { + whiteList.push(item.path); + } +}); + +/** + * 权限校验 + * @param {String} path + * @returns + */ +export function hasPerm(path = "") { + if (!isPathExists(path)) { + uni.redirectTo({ + url: ERROR404_PATH, + }); + return false; + } + const authStore = useAuthStore(); + // 在白名单中或有token,直接放行 + const hasPermission = + whiteList.includes(removeQueryString(path)) || authStore.isLoggedIn; + if (!hasPermission) { + // 将用户的目标路径传递过去,这样可以实现用户登录之后,直接跳转到目标页面 + uni.redirectTo({ + url: `/pages/index/index`, + }); + } + return hasPermission; +} + +export function setupPermission() { + // 注意:拦截uni.switchTab本身没有问题。但是在微信小程序端点击tabbar的底层逻辑并不是触发uni.switchTab。 + // 所以误认为拦截无效,此类场景的解决方案是在tabbar页面的页面生命周期onShow中处理。 + ["navigateTo", "redirectTo", "reLaunch", "switchTab"].forEach((item) => { + // https://uniapp.dcloud.net.cn/api/interceptor.html + uni.addInterceptor(item, { + // 页面跳转前进行拦截, invoke根据返回值进行判断是否继续执行跳转 + invoke(args) { + // args为所拦截api中的参数,比如拦截的是uni.redirectTo(OBJECT),则args对应的是OBJECT参数 + return hasPerm(args.url); + }, + }); + }); +} diff --git a/plugins/ui.js b/plugins/ui.js new file mode 100644 index 0000000..c292db3 --- /dev/null +++ b/plugins/ui.js @@ -0,0 +1,28 @@ +import uvUI from "@/uni_modules/uv-ui-tools"; + +export function setupUI(app) { + // UV扩展配置 https://www.uvui.cn/components/setting.html + app.use(uvUI); + // 调用setConfig方法,方法内部会进行对象属性深度合并,可以放心嵌套配置 + uni.$uv.setConfig({ + // 修改$uv.config对象的属性 + config: { + // 修改默认单位为rpx,相当于执行 uni.$uv.config.unit = 'rpx' + // 用于在传入组件大小参数为数值时,指定默认单位 + unit: "px", + }, + // 修改$uv.props对象的属性 + props: { + // 修改uv-text组件的size参数的默认值,注意:默认值都要用default声明 + text: { + color: { + default: "#303133", + }, + }, + // 其他组件属性配置,具体的参数名称可以去每个组件的props.js中进行查看 + // ...... + }, + }); +} + +export const $uv = uni.$uv; diff --git a/router/index.js b/router/index.js new file mode 100644 index 0000000..52f7240 --- /dev/null +++ b/router/index.js @@ -0,0 +1,91 @@ +import pagesJson from "@/pages.json"; + +// 路径常量 +export const HOME_PATH = "/pages/index/index"; +export const LOGIN_PATH = "/pages/login/login"; +export const ERROR404_PATH = "/pages/404/404"; + +/** + * 解析路由地址 + * @param {object} pagesJson + * @returns [{"path": "/pages/index/index","needLogin": false},...] + */ +function parseRoutes(pagesJson = {}) { + if (!pagesJson.pages) { + pagesJson.pages = []; + } + if (!pagesJson.subPackages) { + pagesJson.subPackages = []; + } + + function parsePages(pages = [], rootPath = "") { + const routes = []; + for (let i = 0; i < pages.length; i++) { + routes.push({ + path: rootPath ? `/${rootPath}/${pages[i].path}` : `/${pages[i].path}`, + needLogin: pages[i].needLogin === true, + }); + } + return routes; + } + + function parseSubPackages(subPackages = []) { + const routes = []; + for (let i = 0; i < subPackages.length; i++) { + routes.push(...parsePages(subPackages[i].pages, subPackages[i].root)); + } + return routes; + } + + return [ + ...parsePages(pagesJson.pages), + ...parseSubPackages(pagesJson.subPackages), + ]; +} +export const routes = parseRoutes(pagesJson); + +/** + * 当前路由 + * @returns {String} + */ +export function currentRoute() { + const pages = getCurrentPages(); + if (pages.length === 0) { + return; + } + const currentPage = pages[pages.length - 1]; + return currentPage?.$page?.fullPath || currentPage.route; +} + +/** + * 去除查询字符串 + * @param {String} path + * @returns + */ +export function removeQueryString(path = "") { + return path.split("?")[0]; +} + +/** + * 路径是否存在 + * @param {String} path + * @returns + */ +export function isPathExists(path = "") { + const cleanPath = removeQueryString(path); + return routes.some((item) => item.path === cleanPath); +} + +/** + * 是否是tabbar页面路径 + * @param {String} path + * @returns + */ +export function isTabBarPath(path = "") { + const cleanPath = removeQueryString(path); + return ( + pagesJson.tabBar?.list?.some( + (item) => `/${item.pagePath}` === cleanPath + ) === true + ); +} diff --git a/static/imgs/code.png b/static/imgs/code.png new file mode 100644 index 0000000..32b0a8f Binary files /dev/null and b/static/imgs/code.png differ diff --git a/static/imgs/indexImg.png b/static/imgs/indexImg.png new file mode 100644 index 0000000..ea39252 Binary files /dev/null and b/static/imgs/indexImg.png differ diff --git a/static/imgs/phone.png b/static/imgs/phone.png new file mode 100644 index 0000000..ee709aa Binary files /dev/null and b/static/imgs/phone.png differ diff --git a/static/json/regions.js b/static/json/regions.js new file mode 100644 index 0000000..8f05cea --- /dev/null +++ b/static/json/regions.js @@ -0,0 +1 @@ +export const regions = [{"id":"35","name":"河北省","code":"130000","parentId":"0","children":[{"id":"36","name":"石家庄市","code":"130100","parentId":"35","children":[{"id":"37","name":"长安区","code":"130102","parentId":"36"},{"id":"38","name":"桥西区","code":"130104","parentId":"36"},{"id":"39","name":"新华区","code":"130105","parentId":"36"},{"id":"40","name":"井陉矿区","code":"130107","parentId":"36"},{"id":"41","name":"裕华区","code":"130108","parentId":"36"},{"id":"42","name":"藁城区","code":"130109","parentId":"36"},{"id":"43","name":"鹿泉区","code":"130110","parentId":"36"},{"id":"44","name":"栾城区","code":"130111","parentId":"36"},{"id":"45","name":"井陉县","code":"130121","parentId":"36"},{"id":"46","name":"正定县","code":"130123","parentId":"36"},{"id":"47","name":"行唐县","code":"130125","parentId":"36"},{"id":"48","name":"灵寿县","code":"130126","parentId":"36"},{"id":"49","name":"高邑县","code":"130127","parentId":"36"},{"id":"50","name":"深泽县","code":"130128","parentId":"36"},{"id":"51","name":"赞皇县","code":"130129","parentId":"36"},{"id":"52","name":"无极县","code":"130130","parentId":"36"},{"id":"53","name":"平山县","code":"130131","parentId":"36"},{"id":"54","name":"元氏县","code":"130132","parentId":"36"},{"id":"55","name":"赵县","code":"130133","parentId":"36"},{"id":"56","name":"辛集市","code":"130181","parentId":"36"},{"id":"57","name":"晋州市","code":"130183","parentId":"36"},{"id":"58","name":"新乐市","code":"130184","parentId":"36"}]},{"id":"59","name":"唐山市","code":"130200","parentId":"35","children":[{"id":"60","name":"路南区","code":"130202","parentId":"59"},{"id":"61","name":"路北区","code":"130203","parentId":"59"},{"id":"62","name":"古冶区","code":"130204","parentId":"59"},{"id":"63","name":"开平区","code":"130205","parentId":"59"},{"id":"64","name":"丰南区","code":"130207","parentId":"59"},{"id":"65","name":"丰润区","code":"130208","parentId":"59"},{"id":"66","name":"曹妃甸区","code":"130209","parentId":"59"},{"id":"67","name":"滦县","code":"130223","parentId":"59"},{"id":"68","name":"滦南县","code":"130224","parentId":"59"},{"id":"69","name":"乐亭县","code":"130225","parentId":"59"},{"id":"70","name":"迁西县","code":"130227","parentId":"59"},{"id":"71","name":"玉田县","code":"130229","parentId":"59"},{"id":"72","name":"遵化市","code":"130281","parentId":"59"},{"id":"73","name":"迁安市","code":"130283","parentId":"59"}]},{"id":"74","name":"秦皇岛市","code":"130300","parentId":"35","children":[{"id":"75","name":"海港区","code":"130302","parentId":"74"},{"id":"76","name":"山海关区","code":"130303","parentId":"74"},{"id":"77","name":"北戴河区","code":"130304","parentId":"74"},{"id":"78","name":"抚宁区","code":"130306","parentId":"74"},{"id":"79","name":"青龙满族自治县","code":"130321","parentId":"74"},{"id":"80","name":"昌黎县","code":"130322","parentId":"74"},{"id":"81","name":"卢龙县","code":"130324","parentId":"74"}]},{"id":"82","name":"邯郸市","code":"130400","parentId":"35","children":[{"id":"83","name":"邯山区","code":"130402","parentId":"82"},{"id":"84","name":"丛台区","code":"130403","parentId":"82"},{"id":"85","name":"复兴区","code":"130404","parentId":"82"},{"id":"86","name":"峰峰矿区","code":"130406","parentId":"82"},{"id":"87","name":"肥乡区","code":"130407","parentId":"82"},{"id":"88","name":"永年区","code":"130408","parentId":"82"},{"id":"89","name":"临漳县","code":"130423","parentId":"82"},{"id":"90","name":"成安县","code":"130424","parentId":"82"},{"id":"91","name":"大名县","code":"130425","parentId":"82"},{"id":"92","name":"涉县","code":"130426","parentId":"82"},{"id":"93","name":"磁县","code":"130427","parentId":"82"},{"id":"94","name":"邱县","code":"130430","parentId":"82"},{"id":"95","name":"鸡泽县","code":"130431","parentId":"82"},{"id":"96","name":"广平县","code":"130432","parentId":"82"},{"id":"97","name":"馆陶县","code":"130433","parentId":"82"},{"id":"98","name":"魏县","code":"130434","parentId":"82"},{"id":"99","name":"曲周县","code":"130435","parentId":"82"},{"id":"100","name":"武安市","code":"130481","parentId":"82"}]},{"id":"101","name":"邢台市","code":"130500","parentId":"35","children":[{"id":"102","name":"桥东区","code":"130502","parentId":"101"},{"id":"103","name":"桥西区","code":"130503","parentId":"101"},{"id":"104","name":"邢台县","code":"130521","parentId":"101"},{"id":"105","name":"临城县","code":"130522","parentId":"101"},{"id":"106","name":"内丘县","code":"130523","parentId":"101"},{"id":"107","name":"柏乡县","code":"130524","parentId":"101"},{"id":"108","name":"隆尧县","code":"130525","parentId":"101"},{"id":"109","name":"任县","code":"130526","parentId":"101"},{"id":"110","name":"南和县","code":"130527","parentId":"101"},{"id":"111","name":"宁晋县","code":"130528","parentId":"101"},{"id":"112","name":"巨鹿县","code":"130529","parentId":"101"},{"id":"113","name":"新河县","code":"130530","parentId":"101"},{"id":"114","name":"广宗县","code":"130531","parentId":"101"},{"id":"115","name":"平乡县","code":"130532","parentId":"101"},{"id":"116","name":"威县","code":"130533","parentId":"101"},{"id":"117","name":"清河县","code":"130534","parentId":"101"},{"id":"118","name":"临西县","code":"130535","parentId":"101"},{"id":"119","name":"南宫市","code":"130581","parentId":"101"},{"id":"120","name":"沙河市","code":"130582","parentId":"101"}]},{"id":"121","name":"保定市","code":"130600","parentId":"35","children":[{"id":"122","name":"竞秀区","code":"130602","parentId":"121"},{"id":"123","name":"莲池区","code":"130606","parentId":"121"},{"id":"124","name":"满城区","code":"130607","parentId":"121"},{"id":"125","name":"清苑区","code":"130608","parentId":"121"},{"id":"126","name":"徐水区","code":"130609","parentId":"121"},{"id":"127","name":"涞水县","code":"130623","parentId":"121"},{"id":"128","name":"阜平县","code":"130624","parentId":"121"},{"id":"129","name":"定兴县","code":"130626","parentId":"121"},{"id":"130","name":"唐县","code":"130627","parentId":"121"},{"id":"131","name":"高阳县","code":"130628","parentId":"121"},{"id":"132","name":"容城县","code":"130629","parentId":"121"},{"id":"133","name":"涞源县","code":"130630","parentId":"121"},{"id":"134","name":"望都县","code":"130631","parentId":"121"},{"id":"135","name":"安新县","code":"130632","parentId":"121"},{"id":"136","name":"易县","code":"130633","parentId":"121"},{"id":"137","name":"曲阳县","code":"130634","parentId":"121"},{"id":"138","name":"蠡县","code":"130635","parentId":"121"},{"id":"139","name":"顺平县","code":"130636","parentId":"121"},{"id":"140","name":"博野县","code":"130637","parentId":"121"},{"id":"141","name":"雄县","code":"130638","parentId":"121"},{"id":"142","name":"涿州市","code":"130681","parentId":"121"},{"id":"143","name":"定州市","code":"130682","parentId":"121"},{"id":"144","name":"安国市","code":"130683","parentId":"121"},{"id":"145","name":"高碑店市","code":"130684","parentId":"121"}]},{"id":"146","name":"张家口市","code":"130700","parentId":"35","children":[{"id":"147","name":"桥东区","code":"130702","parentId":"146"},{"id":"148","name":"桥西区","code":"130703","parentId":"146"},{"id":"149","name":"宣化区","code":"130705","parentId":"146"},{"id":"150","name":"下花园区","code":"130706","parentId":"146"},{"id":"151","name":"万全区","code":"130708","parentId":"146"},{"id":"152","name":"崇礼区","code":"130709","parentId":"146"},{"id":"153","name":"张北县","code":"130722","parentId":"146"},{"id":"154","name":"康保县","code":"130723","parentId":"146"},{"id":"155","name":"沽源县","code":"130724","parentId":"146"},{"id":"156","name":"尚义县","code":"130725","parentId":"146"},{"id":"157","name":"蔚县","code":"130726","parentId":"146"},{"id":"158","name":"阳原县","code":"130727","parentId":"146"},{"id":"159","name":"怀安县","code":"130728","parentId":"146"},{"id":"160","name":"怀来县","code":"130730","parentId":"146"},{"id":"161","name":"涿鹿县","code":"130731","parentId":"146"},{"id":"162","name":"赤城县","code":"130732","parentId":"146"}]},{"id":"163","name":"承德市","code":"130800","parentId":"35","children":[{"id":"164","name":"双桥区","code":"130802","parentId":"163"},{"id":"165","name":"双滦区","code":"130803","parentId":"163"},{"id":"166","name":"鹰手营子矿区","code":"130804","parentId":"163"},{"id":"167","name":"承德县","code":"130821","parentId":"163"},{"id":"168","name":"兴隆县","code":"130822","parentId":"163"},{"id":"169","name":"滦平县","code":"130824","parentId":"163"},{"id":"170","name":"隆化县","code":"130825","parentId":"163"},{"id":"171","name":"丰宁满族自治县","code":"130826","parentId":"163"},{"id":"172","name":"宽城满族自治县","code":"130827","parentId":"163"},{"id":"173","name":"围场满族蒙古族自治县","code":"130828","parentId":"163"},{"id":"174","name":"平泉市","code":"130881","parentId":"163"}]},{"id":"175","name":"沧州市","code":"130900","parentId":"35","children":[{"id":"176","name":"新华区","code":"130902","parentId":"175"},{"id":"177","name":"运河区","code":"130903","parentId":"175"},{"id":"178","name":"沧县","code":"130921","parentId":"175"},{"id":"179","name":"青县","code":"130922","parentId":"175"},{"id":"180","name":"东光县","code":"130923","parentId":"175"},{"id":"181","name":"海兴县","code":"130924","parentId":"175"},{"id":"182","name":"盐山县","code":"130925","parentId":"175"},{"id":"183","name":"肃宁县","code":"130926","parentId":"175"},{"id":"184","name":"南皮县","code":"130927","parentId":"175"},{"id":"185","name":"吴桥县","code":"130928","parentId":"175"},{"id":"186","name":"献县","code":"130929","parentId":"175"},{"id":"187","name":"孟村回族自治县","code":"130930","parentId":"175"},{"id":"188","name":"泊头市","code":"130981","parentId":"175"},{"id":"189","name":"任丘市","code":"130982","parentId":"175"},{"id":"190","name":"黄骅市","code":"130983","parentId":"175"},{"id":"191","name":"河间市","code":"130984","parentId":"175"}]},{"id":"192","name":"廊坊市","code":"131000","parentId":"35","children":[{"id":"193","name":"安次区","code":"131002","parentId":"192"},{"id":"194","name":"广阳区","code":"131003","parentId":"192"},{"id":"195","name":"固安县","code":"131022","parentId":"192"},{"id":"196","name":"永清县","code":"131023","parentId":"192"},{"id":"197","name":"香河县","code":"131024","parentId":"192"},{"id":"198","name":"大城县","code":"131025","parentId":"192"},{"id":"199","name":"文安县","code":"131026","parentId":"192"},{"id":"200","name":"大厂回族自治县","code":"131028","parentId":"192"},{"id":"201","name":"霸州市","code":"131081","parentId":"192"},{"id":"202","name":"三河市","code":"131082","parentId":"192"}]},{"id":"203","name":"衡水市","code":"131100","parentId":"35","children":[{"id":"204","name":"桃城区","code":"131102","parentId":"203"},{"id":"205","name":"冀州区","code":"131103","parentId":"203"},{"id":"206","name":"枣强县","code":"131121","parentId":"203"},{"id":"207","name":"武邑县","code":"131122","parentId":"203"},{"id":"208","name":"武强县","code":"131123","parentId":"203"},{"id":"209","name":"饶阳县","code":"131124","parentId":"203"},{"id":"210","name":"安平县","code":"131125","parentId":"203"},{"id":"211","name":"故城县","code":"131126","parentId":"203"},{"id":"212","name":"景县","code":"131127","parentId":"203"},{"id":"213","name":"阜城县","code":"131128","parentId":"203"},{"id":"214","name":"深州市","code":"131182","parentId":"203"}]}]},{"id":"215","name":"山西省","code":"140000","parentId":"0","children":[{"id":"216","name":"太原市","code":"140100","parentId":"215","children":[{"id":"217","name":"小店区","code":"140105","parentId":"216"},{"id":"218","name":"迎泽区","code":"140106","parentId":"216"},{"id":"219","name":"杏花岭区","code":"140107","parentId":"216"},{"id":"220","name":"尖草坪区","code":"140108","parentId":"216"},{"id":"221","name":"万柏林区","code":"140109","parentId":"216"},{"id":"222","name":"晋源区","code":"140110","parentId":"216"},{"id":"223","name":"清徐县","code":"140121","parentId":"216"},{"id":"224","name":"阳曲县","code":"140122","parentId":"216"},{"id":"225","name":"娄烦县","code":"140123","parentId":"216"},{"id":"226","name":"古交市","code":"140181","parentId":"216"}]},{"id":"227","name":"大同市","code":"140200","parentId":"215","children":[{"id":"228","name":"城区","code":"140202","parentId":"227"},{"id":"229","name":"矿区","code":"140203","parentId":"227"},{"id":"230","name":"南郊区","code":"140211","parentId":"227"},{"id":"231","name":"新荣区","code":"140212","parentId":"227"},{"id":"232","name":"阳高县","code":"140221","parentId":"227"},{"id":"233","name":"天镇县","code":"140222","parentId":"227"},{"id":"234","name":"广灵县","code":"140223","parentId":"227"},{"id":"235","name":"灵丘县","code":"140224","parentId":"227"},{"id":"236","name":"浑源县","code":"140225","parentId":"227"},{"id":"237","name":"左云县","code":"140226","parentId":"227"},{"id":"238","name":"大同县","code":"140227","parentId":"227"}]},{"id":"239","name":"阳泉市","code":"140300","parentId":"215","children":[{"id":"240","name":"城区","code":"140302","parentId":"239"},{"id":"241","name":"矿区","code":"140303","parentId":"239"},{"id":"242","name":"郊区","code":"140311","parentId":"239"},{"id":"243","name":"平定县","code":"140321","parentId":"239"},{"id":"244","name":"盂县","code":"140322","parentId":"239"}]},{"id":"245","name":"长治市","code":"140400","parentId":"215","children":[{"id":"246","name":"城区","code":"140402","parentId":"245"},{"id":"247","name":"郊区","code":"140411","parentId":"245"},{"id":"248","name":"长治县","code":"140421","parentId":"245"},{"id":"249","name":"襄垣县","code":"140423","parentId":"245"},{"id":"250","name":"屯留县","code":"140424","parentId":"245"},{"id":"251","name":"平顺县","code":"140425","parentId":"245"},{"id":"252","name":"黎城县","code":"140426","parentId":"245"},{"id":"253","name":"壶关县","code":"140427","parentId":"245"},{"id":"254","name":"长子县","code":"140428","parentId":"245"},{"id":"255","name":"武乡县","code":"140429","parentId":"245"},{"id":"256","name":"沁县","code":"140430","parentId":"245"},{"id":"257","name":"沁源县","code":"140431","parentId":"245"},{"id":"258","name":"潞城市","code":"140481","parentId":"245"}]},{"id":"259","name":"晋城市","code":"140500","parentId":"215","children":[{"id":"260","name":"城区","code":"140502","parentId":"259"},{"id":"261","name":"沁水县","code":"140521","parentId":"259"},{"id":"262","name":"阳城县","code":"140522","parentId":"259"},{"id":"263","name":"陵川县","code":"140524","parentId":"259"},{"id":"264","name":"泽州县","code":"140525","parentId":"259"},{"id":"265","name":"高平市","code":"140581","parentId":"259"}]},{"id":"266","name":"朔州市","code":"140600","parentId":"215","children":[{"id":"267","name":"朔城区","code":"140602","parentId":"266"},{"id":"268","name":"平鲁区","code":"140603","parentId":"266"},{"id":"269","name":"山阴县","code":"140621","parentId":"266"},{"id":"270","name":"应县","code":"140622","parentId":"266"},{"id":"271","name":"右玉县","code":"140623","parentId":"266"},{"id":"272","name":"怀仁县","code":"140624","parentId":"266"}]},{"id":"273","name":"晋中市","code":"140700","parentId":"215","children":[{"id":"274","name":"榆次区","code":"140702","parentId":"273"},{"id":"275","name":"榆社县","code":"140721","parentId":"273"},{"id":"276","name":"左权县","code":"140722","parentId":"273"},{"id":"277","name":"和顺县","code":"140723","parentId":"273"},{"id":"278","name":"昔阳县","code":"140724","parentId":"273"},{"id":"279","name":"寿阳县","code":"140725","parentId":"273"},{"id":"280","name":"太谷县","code":"140726","parentId":"273"},{"id":"281","name":"祁县","code":"140727","parentId":"273"},{"id":"282","name":"平遥县","code":"140728","parentId":"273"},{"id":"283","name":"灵石县","code":"140729","parentId":"273"},{"id":"284","name":"介休市","code":"140781","parentId":"273"}]},{"id":"285","name":"运城市","code":"140800","parentId":"215","children":[{"id":"286","name":"盐湖区","code":"140802","parentId":"285"},{"id":"287","name":"临猗县","code":"140821","parentId":"285"},{"id":"288","name":"万荣县","code":"140822","parentId":"285"},{"id":"289","name":"闻喜县","code":"140823","parentId":"285"},{"id":"290","name":"稷山县","code":"140824","parentId":"285"},{"id":"291","name":"新绛县","code":"140825","parentId":"285"},{"id":"292","name":"绛县","code":"140826","parentId":"285"},{"id":"293","name":"垣曲县","code":"140827","parentId":"285"},{"id":"294","name":"夏县","code":"140828","parentId":"285"},{"id":"295","name":"平陆县","code":"140829","parentId":"285"},{"id":"296","name":"芮城县","code":"140830","parentId":"285"},{"id":"297","name":"永济市","code":"140881","parentId":"285"},{"id":"298","name":"河津市","code":"140882","parentId":"285"}]},{"id":"299","name":"忻州市","code":"140900","parentId":"215","children":[{"id":"300","name":"忻府区","code":"140902","parentId":"299"},{"id":"301","name":"定襄县","code":"140921","parentId":"299"},{"id":"302","name":"五台县","code":"140922","parentId":"299"},{"id":"303","name":"代县","code":"140923","parentId":"299"},{"id":"304","name":"繁峙县","code":"140924","parentId":"299"},{"id":"305","name":"宁武县","code":"140925","parentId":"299"},{"id":"306","name":"静乐县","code":"140926","parentId":"299"},{"id":"307","name":"神池县","code":"140927","parentId":"299"},{"id":"308","name":"五寨县","code":"140928","parentId":"299"},{"id":"309","name":"岢岚县","code":"140929","parentId":"299"},{"id":"310","name":"河曲县","code":"140930","parentId":"299"},{"id":"311","name":"保德县","code":"140931","parentId":"299"},{"id":"312","name":"偏关县","code":"140932","parentId":"299"},{"id":"313","name":"原平市","code":"140981","parentId":"299"}]},{"id":"314","name":"临汾市","code":"141000","parentId":"215","children":[{"id":"315","name":"尧都区","code":"141002","parentId":"314"},{"id":"316","name":"曲沃县","code":"141021","parentId":"314"},{"id":"317","name":"翼城县","code":"141022","parentId":"314"},{"id":"318","name":"襄汾县","code":"141023","parentId":"314"},{"id":"319","name":"洪洞县","code":"141024","parentId":"314"},{"id":"320","name":"古县","code":"141025","parentId":"314"},{"id":"321","name":"安泽县","code":"141026","parentId":"314"},{"id":"322","name":"浮山县","code":"141027","parentId":"314"},{"id":"323","name":"吉县","code":"141028","parentId":"314"},{"id":"324","name":"乡宁县","code":"141029","parentId":"314"},{"id":"325","name":"大宁县","code":"141030","parentId":"314"},{"id":"326","name":"隰县","code":"141031","parentId":"314"},{"id":"327","name":"永和县","code":"141032","parentId":"314"},{"id":"328","name":"蒲县","code":"141033","parentId":"314"},{"id":"329","name":"汾西县","code":"141034","parentId":"314"},{"id":"330","name":"侯马市","code":"141081","parentId":"314"},{"id":"331","name":"霍州市","code":"141082","parentId":"314"}]},{"id":"332","name":"吕梁市","code":"141100","parentId":"215","children":[{"id":"333","name":"离石区","code":"141102","parentId":"332"},{"id":"334","name":"文水县","code":"141121","parentId":"332"},{"id":"335","name":"交城县","code":"141122","parentId":"332"},{"id":"336","name":"兴县","code":"141123","parentId":"332"},{"id":"337","name":"临县","code":"141124","parentId":"332"},{"id":"338","name":"柳林县","code":"141125","parentId":"332"},{"id":"339","name":"石楼县","code":"141126","parentId":"332"},{"id":"340","name":"岚县","code":"141127","parentId":"332"},{"id":"341","name":"方山县","code":"141128","parentId":"332"},{"id":"342","name":"中阳县","code":"141129","parentId":"332"},{"id":"343","name":"交口县","code":"141130","parentId":"332"},{"id":"344","name":"孝义市","code":"141181","parentId":"332"},{"id":"345","name":"汾阳市","code":"141182","parentId":"332"}]}]},{"id":"346","name":"内蒙古自治区","code":"150000","parentId":"0","children":[{"id":"347","name":"呼和浩特市","code":"150100","parentId":"346","children":[{"id":"348","name":"新城区","code":"150102","parentId":"347"},{"id":"349","name":"回民区","code":"150103","parentId":"347"},{"id":"350","name":"玉泉区","code":"150104","parentId":"347"},{"id":"351","name":"赛罕区","code":"150105","parentId":"347"},{"id":"352","name":"土默特左旗","code":"150121","parentId":"347"},{"id":"353","name":"托克托县","code":"150122","parentId":"347"},{"id":"354","name":"和林格尔县","code":"150123","parentId":"347"},{"id":"355","name":"清水河县","code":"150124","parentId":"347"},{"id":"356","name":"武川县","code":"150125","parentId":"347"}]},{"id":"357","name":"包头市","code":"150200","parentId":"346","children":[{"id":"358","name":"东河区","code":"150202","parentId":"357"},{"id":"359","name":"昆都仑区","code":"150203","parentId":"357"},{"id":"360","name":"青山区","code":"150204","parentId":"357"},{"id":"361","name":"石拐区","code":"150205","parentId":"357"},{"id":"362","name":"白云鄂博矿区","code":"150206","parentId":"357"},{"id":"363","name":"九原区","code":"150207","parentId":"357"},{"id":"364","name":"土默特右旗","code":"150221","parentId":"357"},{"id":"365","name":"固阳县","code":"150222","parentId":"357"},{"id":"366","name":"达尔罕茂明安联合旗","code":"150223","parentId":"357"}]},{"id":"367","name":"乌海市","code":"150300","parentId":"346","children":[{"id":"368","name":"海勃湾区","code":"150302","parentId":"367"},{"id":"369","name":"海南区","code":"150303","parentId":"367"},{"id":"370","name":"乌达区","code":"150304","parentId":"367"}]},{"id":"371","name":"赤峰市","code":"150400","parentId":"346","children":[{"id":"372","name":"红山区","code":"150402","parentId":"371"},{"id":"373","name":"元宝山区","code":"150403","parentId":"371"},{"id":"374","name":"松山区","code":"150404","parentId":"371"},{"id":"375","name":"阿鲁科尔沁旗","code":"150421","parentId":"371"},{"id":"376","name":"巴林左旗","code":"150422","parentId":"371"},{"id":"377","name":"巴林右旗","code":"150423","parentId":"371"},{"id":"378","name":"林西县","code":"150424","parentId":"371"},{"id":"379","name":"克什克腾旗","code":"150425","parentId":"371"},{"id":"380","name":"翁牛特旗","code":"150426","parentId":"371"},{"id":"381","name":"喀喇沁旗","code":"150428","parentId":"371"},{"id":"382","name":"宁城县","code":"150429","parentId":"371"},{"id":"383","name":"敖汉旗","code":"150430","parentId":"371"}]},{"id":"384","name":"通辽市","code":"150500","parentId":"346","children":[{"id":"385","name":"科尔沁区","code":"150502","parentId":"384"},{"id":"386","name":"科尔沁左翼中旗","code":"150521","parentId":"384"},{"id":"387","name":"科尔沁左翼后旗","code":"150522","parentId":"384"},{"id":"388","name":"开鲁县","code":"150523","parentId":"384"},{"id":"389","name":"库伦旗","code":"150524","parentId":"384"},{"id":"390","name":"奈曼旗","code":"150525","parentId":"384"},{"id":"391","name":"扎鲁特旗","code":"150526","parentId":"384"},{"id":"392","name":"霍林郭勒市","code":"150581","parentId":"384"}]},{"id":"393","name":"鄂尔多斯市","code":"150600","parentId":"346","children":[{"id":"394","name":"东胜区","code":"150602","parentId":"393"},{"id":"395","name":"康巴什区","code":"150603","parentId":"393"},{"id":"396","name":"达拉特旗","code":"150621","parentId":"393"},{"id":"397","name":"准格尔旗","code":"150622","parentId":"393"},{"id":"398","name":"鄂托克前旗","code":"150623","parentId":"393"},{"id":"399","name":"鄂托克旗","code":"150624","parentId":"393"},{"id":"400","name":"杭锦旗","code":"150625","parentId":"393"},{"id":"401","name":"乌审旗","code":"150626","parentId":"393"},{"id":"402","name":"伊金霍洛旗","code":"150627","parentId":"393"}]},{"id":"403","name":"呼伦贝尔市","code":"150700","parentId":"346","children":[{"id":"404","name":"海拉尔区","code":"150702","parentId":"403"},{"id":"405","name":"扎赉诺尔区","code":"150703","parentId":"403"},{"id":"406","name":"阿荣旗","code":"150721","parentId":"403"},{"id":"407","name":"莫力达瓦达斡尔族自治旗","code":"150722","parentId":"403"},{"id":"408","name":"鄂伦春自治旗","code":"150723","parentId":"403"},{"id":"409","name":"鄂温克族自治旗","code":"150724","parentId":"403"},{"id":"410","name":"陈巴尔虎旗","code":"150725","parentId":"403"},{"id":"411","name":"新巴尔虎左旗","code":"150726","parentId":"403"},{"id":"412","name":"新巴尔虎右旗","code":"150727","parentId":"403"},{"id":"413","name":"满洲里市","code":"150781","parentId":"403"},{"id":"414","name":"牙克石市","code":"150782","parentId":"403"},{"id":"415","name":"扎兰屯市","code":"150783","parentId":"403"},{"id":"416","name":"额尔古纳市","code":"150784","parentId":"403"},{"id":"417","name":"根河市","code":"150785","parentId":"403"}]},{"id":"418","name":"巴彦淖尔市","code":"150800","parentId":"346","children":[{"id":"419","name":"临河区","code":"150802","parentId":"418"},{"id":"420","name":"五原县","code":"150821","parentId":"418"},{"id":"421","name":"磴口县","code":"150822","parentId":"418"},{"id":"422","name":"乌拉特前旗","code":"150823","parentId":"418"},{"id":"423","name":"乌拉特中旗","code":"150824","parentId":"418"},{"id":"424","name":"乌拉特后旗","code":"150825","parentId":"418"},{"id":"425","name":"杭锦后旗","code":"150826","parentId":"418"}]},{"id":"426","name":"乌兰察布市","code":"150900","parentId":"346","children":[{"id":"427","name":"集宁区","code":"150902","parentId":"426"},{"id":"428","name":"卓资县","code":"150921","parentId":"426"},{"id":"429","name":"化德县","code":"150922","parentId":"426"},{"id":"430","name":"商都县","code":"150923","parentId":"426"},{"id":"431","name":"兴和县","code":"150924","parentId":"426"},{"id":"432","name":"凉城县","code":"150925","parentId":"426"},{"id":"433","name":"察哈尔右翼前旗","code":"150926","parentId":"426"},{"id":"434","name":"察哈尔右翼中旗","code":"150927","parentId":"426"},{"id":"435","name":"察哈尔右翼后旗","code":"150928","parentId":"426"},{"id":"436","name":"四子王旗","code":"150929","parentId":"426"},{"id":"437","name":"丰镇市","code":"150981","parentId":"426"}]},{"id":"438","name":"兴安盟","code":"152200","parentId":"346","children":[{"id":"439","name":"乌兰浩特市","code":"152201","parentId":"438"},{"id":"440","name":"阿尔山市","code":"152202","parentId":"438"},{"id":"441","name":"科尔沁右翼前旗","code":"152221","parentId":"438"},{"id":"442","name":"科尔沁右翼中旗","code":"152222","parentId":"438"},{"id":"443","name":"扎赉特旗","code":"152223","parentId":"438"},{"id":"444","name":"突泉县","code":"152224","parentId":"438"}]},{"id":"445","name":"锡林郭勒盟","code":"152500","parentId":"346","children":[{"id":"446","name":"二连浩特市","code":"152501","parentId":"445"},{"id":"447","name":"锡林浩特市","code":"152502","parentId":"445"},{"id":"448","name":"阿巴嘎旗","code":"152522","parentId":"445"},{"id":"449","name":"苏尼特左旗","code":"152523","parentId":"445"},{"id":"450","name":"苏尼特右旗","code":"152524","parentId":"445"},{"id":"451","name":"东乌珠穆沁旗","code":"152525","parentId":"445"},{"id":"452","name":"西乌珠穆沁旗","code":"152526","parentId":"445"},{"id":"453","name":"太仆寺旗","code":"152527","parentId":"445"},{"id":"454","name":"镶黄旗","code":"152528","parentId":"445"},{"id":"455","name":"正镶白旗","code":"152529","parentId":"445"},{"id":"456","name":"正蓝旗","code":"152530","parentId":"445"},{"id":"457","name":"多伦县","code":"152531","parentId":"445"}]},{"id":"458","name":"阿拉善盟","code":"152900","parentId":"346","children":[{"id":"459","name":"阿拉善左旗","code":"152921","parentId":"458"},{"id":"460","name":"阿拉善右旗","code":"152922","parentId":"458"},{"id":"461","name":"额济纳旗","code":"152923","parentId":"458"}]}]},{"id":"462","name":"辽宁省","code":"210000","parentId":"0","children":[{"id":"463","name":"沈阳市","code":"210100","parentId":"462","children":[{"id":"464","name":"和平区","code":"210102","parentId":"463"},{"id":"465","name":"沈河区","code":"210103","parentId":"463"},{"id":"466","name":"大东区","code":"210104","parentId":"463"},{"id":"467","name":"皇姑区","code":"210105","parentId":"463"},{"id":"468","name":"铁西区","code":"210106","parentId":"463"},{"id":"469","name":"苏家屯区","code":"210111","parentId":"463"},{"id":"470","name":"浑南区","code":"210112","parentId":"463"},{"id":"471","name":"沈北新区","code":"210113","parentId":"463"},{"id":"472","name":"于洪区","code":"210114","parentId":"463"},{"id":"473","name":"辽中区","code":"210115","parentId":"463"},{"id":"474","name":"康平县","code":"210123","parentId":"463"},{"id":"475","name":"法库县","code":"210124","parentId":"463"},{"id":"476","name":"新民市","code":"210181","parentId":"463"}]},{"id":"477","name":"大连市","code":"210200","parentId":"462","children":[{"id":"478","name":"中山区","code":"210202","parentId":"477"},{"id":"479","name":"西岗区","code":"210203","parentId":"477"},{"id":"480","name":"沙河口区","code":"210204","parentId":"477"},{"id":"481","name":"甘井子区","code":"210211","parentId":"477"},{"id":"482","name":"旅顺口区","code":"210212","parentId":"477"},{"id":"483","name":"金普新区","code":"210213","parentId":"477"},{"id":"484","name":"普兰店区","code":"210214","parentId":"477"},{"id":"485","name":"长海县","code":"210224","parentId":"477"},{"id":"486","name":"瓦房店市","code":"210281","parentId":"477"},{"id":"487","name":"庄河市","code":"210283","parentId":"477"}]},{"id":"488","name":"鞍山市","code":"210300","parentId":"462","children":[{"id":"489","name":"铁东区","code":"210302","parentId":"488"},{"id":"490","name":"铁西区","code":"210303","parentId":"488"},{"id":"491","name":"立山区","code":"210304","parentId":"488"},{"id":"492","name":"千山区","code":"210311","parentId":"488"},{"id":"493","name":"台安县","code":"210321","parentId":"488"},{"id":"494","name":"岫岩满族自治县","code":"210323","parentId":"488"},{"id":"495","name":"海城市","code":"210381","parentId":"488"}]},{"id":"496","name":"抚顺市","code":"210400","parentId":"462","children":[{"id":"497","name":"新抚区","code":"210402","parentId":"496"},{"id":"498","name":"东洲区","code":"210403","parentId":"496"},{"id":"499","name":"望花区","code":"210404","parentId":"496"},{"id":"500","name":"顺城区","code":"210411","parentId":"496"},{"id":"501","name":"抚顺县","code":"210421","parentId":"496"},{"id":"502","name":"新宾满族自治县","code":"210422","parentId":"496"},{"id":"503","name":"清原满族自治县","code":"210423","parentId":"496"}]},{"id":"504","name":"本溪市","code":"210500","parentId":"462","children":[{"id":"505","name":"平山区","code":"210502","parentId":"504"},{"id":"506","name":"溪湖区","code":"210503","parentId":"504"},{"id":"507","name":"明山区","code":"210504","parentId":"504"},{"id":"508","name":"南芬区","code":"210505","parentId":"504"},{"id":"509","name":"本溪满族自治县","code":"210521","parentId":"504"},{"id":"510","name":"桓仁满族自治县","code":"210522","parentId":"504"}]},{"id":"511","name":"丹东市","code":"210600","parentId":"462","children":[{"id":"512","name":"元宝区","code":"210602","parentId":"511"},{"id":"513","name":"振兴区","code":"210603","parentId":"511"},{"id":"514","name":"振安区","code":"210604","parentId":"511"},{"id":"515","name":"宽甸满族自治县","code":"210624","parentId":"511"},{"id":"516","name":"东港市","code":"210681","parentId":"511"},{"id":"517","name":"凤城市","code":"210682","parentId":"511"}]},{"id":"518","name":"锦州市","code":"210700","parentId":"462","children":[{"id":"519","name":"古塔区","code":"210702","parentId":"518"},{"id":"520","name":"凌河区","code":"210703","parentId":"518"},{"id":"521","name":"太和区","code":"210711","parentId":"518"},{"id":"522","name":"黑山县","code":"210726","parentId":"518"},{"id":"523","name":"义县","code":"210727","parentId":"518"},{"id":"524","name":"凌海市","code":"210781","parentId":"518"},{"id":"525","name":"北镇市","code":"210782","parentId":"518"}]},{"id":"526","name":"营口市","code":"210800","parentId":"462","children":[{"id":"527","name":"站前区","code":"210802","parentId":"526"},{"id":"528","name":"西市区","code":"210803","parentId":"526"},{"id":"529","name":"鲅鱼圈区","code":"210804","parentId":"526"},{"id":"530","name":"老边区","code":"210811","parentId":"526"},{"id":"531","name":"盖州市","code":"210881","parentId":"526"},{"id":"532","name":"大石桥市","code":"210882","parentId":"526"}]},{"id":"533","name":"阜新市","code":"210900","parentId":"462","children":[{"id":"534","name":"海州区","code":"210902","parentId":"533"},{"id":"535","name":"新邱区","code":"210903","parentId":"533"},{"id":"536","name":"太平区","code":"210904","parentId":"533"},{"id":"537","name":"清河门区","code":"210905","parentId":"533"},{"id":"538","name":"细河区","code":"210911","parentId":"533"},{"id":"539","name":"阜新蒙古族自治县","code":"210921","parentId":"533"},{"id":"540","name":"彰武县","code":"210922","parentId":"533"}]},{"id":"541","name":"辽阳市","code":"211000","parentId":"462","children":[{"id":"542","name":"白塔区","code":"211002","parentId":"541"},{"id":"543","name":"文圣区","code":"211003","parentId":"541"},{"id":"544","name":"宏伟区","code":"211004","parentId":"541"},{"id":"545","name":"弓长岭区","code":"211005","parentId":"541"},{"id":"546","name":"太子河区","code":"211011","parentId":"541"},{"id":"547","name":"辽阳县","code":"211021","parentId":"541"},{"id":"548","name":"灯塔市","code":"211081","parentId":"541"}]},{"id":"549","name":"盘锦市","code":"211100","parentId":"462","children":[{"id":"550","name":"双台子区","code":"211102","parentId":"549"},{"id":"551","name":"兴隆台区","code":"211103","parentId":"549"},{"id":"552","name":"大洼区","code":"211104","parentId":"549"},{"id":"553","name":"盘山县","code":"211122","parentId":"549"}]},{"id":"554","name":"铁岭市","code":"211200","parentId":"462","children":[{"id":"555","name":"银州区","code":"211202","parentId":"554"},{"id":"556","name":"清河区","code":"211204","parentId":"554"},{"id":"557","name":"铁岭县","code":"211221","parentId":"554"},{"id":"558","name":"西丰县","code":"211223","parentId":"554"},{"id":"559","name":"昌图县","code":"211224","parentId":"554"},{"id":"560","name":"调兵山市","code":"211281","parentId":"554"},{"id":"561","name":"开原市","code":"211282","parentId":"554"}]},{"id":"562","name":"朝阳市","code":"211300","parentId":"462","children":[{"id":"563","name":"双塔区","code":"211302","parentId":"562"},{"id":"564","name":"龙城区","code":"211303","parentId":"562"},{"id":"565","name":"朝阳县","code":"211321","parentId":"562"},{"id":"566","name":"建平县","code":"211322","parentId":"562"},{"id":"567","name":"喀喇沁左翼蒙古族自治县","code":"211324","parentId":"562"},{"id":"568","name":"北票市","code":"211381","parentId":"562"},{"id":"569","name":"凌源市","code":"211382","parentId":"562"}]},{"id":"570","name":"葫芦岛市","code":"211400","parentId":"462","children":[{"id":"571","name":"连山区","code":"211402","parentId":"570"},{"id":"572","name":"龙港区","code":"211403","parentId":"570"},{"id":"573","name":"南票区","code":"211404","parentId":"570"},{"id":"574","name":"绥中县","code":"211421","parentId":"570"},{"id":"575","name":"建昌县","code":"211422","parentId":"570"},{"id":"576","name":"兴城市","code":"211481","parentId":"570"}]}]},{"id":"577","name":"吉林省","code":"220000","parentId":"0","children":[{"id":"578","name":"长春市","code":"220100","parentId":"577","children":[{"id":"579","name":"南关区","code":"220102","parentId":"578"},{"id":"580","name":"宽城区","code":"220103","parentId":"578"},{"id":"581","name":"朝阳区","code":"220104","parentId":"578"},{"id":"582","name":"二道区","code":"220105","parentId":"578"},{"id":"583","name":"绿园区","code":"220106","parentId":"578"},{"id":"584","name":"双阳区","code":"220112","parentId":"578"},{"id":"585","name":"九台区","code":"220113","parentId":"578"},{"id":"586","name":"农安县","code":"220122","parentId":"578"},{"id":"587","name":"榆树市","code":"220182","parentId":"578"},{"id":"588","name":"德惠市","code":"220183","parentId":"578"}]},{"id":"589","name":"吉林市","code":"220200","parentId":"577","children":[{"id":"590","name":"昌邑区","code":"220202","parentId":"589"},{"id":"591","name":"龙潭区","code":"220203","parentId":"589"},{"id":"592","name":"船营区","code":"220204","parentId":"589"},{"id":"593","name":"丰满区","code":"220211","parentId":"589"},{"id":"594","name":"永吉县","code":"220221","parentId":"589"},{"id":"595","name":"蛟河市","code":"220281","parentId":"589"},{"id":"596","name":"桦甸市","code":"220282","parentId":"589"},{"id":"597","name":"舒兰市","code":"220283","parentId":"589"},{"id":"598","name":"磐石市","code":"220284","parentId":"589"}]},{"id":"599","name":"四平市","code":"220300","parentId":"577","children":[{"id":"600","name":"铁西区","code":"220302","parentId":"599"},{"id":"601","name":"铁东区","code":"220303","parentId":"599"},{"id":"602","name":"梨树县","code":"220322","parentId":"599"},{"id":"603","name":"伊通满族自治县","code":"220323","parentId":"599"},{"id":"604","name":"公主岭市","code":"220381","parentId":"599"},{"id":"605","name":"双辽市","code":"220382","parentId":"599"}]},{"id":"606","name":"辽源市","code":"220400","parentId":"577","children":[{"id":"607","name":"龙山区","code":"220402","parentId":"606"},{"id":"608","name":"西安区","code":"220403","parentId":"606"},{"id":"609","name":"东丰县","code":"220421","parentId":"606"},{"id":"610","name":"东辽县","code":"220422","parentId":"606"}]},{"id":"611","name":"通化市","code":"220500","parentId":"577","children":[{"id":"612","name":"东昌区","code":"220502","parentId":"611"},{"id":"613","name":"二道江区","code":"220503","parentId":"611"},{"id":"614","name":"通化县","code":"220521","parentId":"611"},{"id":"615","name":"辉南县","code":"220523","parentId":"611"},{"id":"616","name":"柳河县","code":"220524","parentId":"611"},{"id":"617","name":"梅河口市","code":"220581","parentId":"611"},{"id":"618","name":"集安市","code":"220582","parentId":"611"}]},{"id":"619","name":"白山市","code":"220600","parentId":"577","children":[{"id":"620","name":"浑江区","code":"220602","parentId":"619"},{"id":"621","name":"江源区","code":"220605","parentId":"619"},{"id":"622","name":"抚松县","code":"220621","parentId":"619"},{"id":"623","name":"靖宇县","code":"220622","parentId":"619"},{"id":"624","name":"长白朝鲜族自治县","code":"220623","parentId":"619"},{"id":"625","name":"临江市","code":"220681","parentId":"619"}]},{"id":"626","name":"松原市","code":"220700","parentId":"577","children":[{"id":"627","name":"宁江区","code":"220702","parentId":"626"},{"id":"628","name":"前郭尔罗斯蒙古族自治县","code":"220721","parentId":"626"},{"id":"629","name":"长岭县","code":"220722","parentId":"626"},{"id":"630","name":"乾安县","code":"220723","parentId":"626"},{"id":"631","name":"扶余市","code":"220781","parentId":"626"}]},{"id":"632","name":"白城市","code":"220800","parentId":"577","children":[{"id":"633","name":"洮北区","code":"220802","parentId":"632"},{"id":"634","name":"镇赉县","code":"220821","parentId":"632"},{"id":"635","name":"通榆县","code":"220822","parentId":"632"},{"id":"636","name":"洮南市","code":"220881","parentId":"632"},{"id":"637","name":"大安市","code":"220882","parentId":"632"}]},{"id":"638","name":"延边朝鲜族自治州","code":"222400","parentId":"577","children":[{"id":"639","name":"延吉市","code":"222401","parentId":"638"},{"id":"640","name":"图们市","code":"222402","parentId":"638"},{"id":"641","name":"敦化市","code":"222403","parentId":"638"},{"id":"642","name":"珲春市","code":"222404","parentId":"638"},{"id":"643","name":"龙井市","code":"222405","parentId":"638"},{"id":"644","name":"和龙市","code":"222406","parentId":"638"},{"id":"645","name":"汪清县","code":"222424","parentId":"638"},{"id":"646","name":"安图县","code":"222426","parentId":"638"}]}]},{"id":"647","name":"黑龙江省","code":"230000","parentId":"0","children":[{"id":"648","name":"哈尔滨市","code":"230100","parentId":"647","children":[{"id":"649","name":"道里区","code":"230102","parentId":"648"},{"id":"650","name":"南岗区","code":"230103","parentId":"648"},{"id":"651","name":"道外区","code":"230104","parentId":"648"},{"id":"652","name":"平房区","code":"230108","parentId":"648"},{"id":"653","name":"松北区","code":"230109","parentId":"648"},{"id":"654","name":"香坊区","code":"230110","parentId":"648"},{"id":"655","name":"呼兰区","code":"230111","parentId":"648"},{"id":"656","name":"阿城区","code":"230112","parentId":"648"},{"id":"657","name":"双城区","code":"230113","parentId":"648"},{"id":"658","name":"依兰县","code":"230123","parentId":"648"},{"id":"659","name":"方正县","code":"230124","parentId":"648"},{"id":"660","name":"宾县","code":"230125","parentId":"648"},{"id":"661","name":"巴彦县","code":"230126","parentId":"648"},{"id":"662","name":"木兰县","code":"230127","parentId":"648"},{"id":"663","name":"通河县","code":"230128","parentId":"648"},{"id":"664","name":"延寿县","code":"230129","parentId":"648"},{"id":"665","name":"尚志市","code":"230183","parentId":"648"},{"id":"666","name":"五常市","code":"230184","parentId":"648"}]},{"id":"667","name":"齐齐哈尔市","code":"230200","parentId":"647","children":[{"id":"668","name":"龙沙区","code":"230202","parentId":"667"},{"id":"669","name":"建华区","code":"230203","parentId":"667"},{"id":"670","name":"铁锋区","code":"230204","parentId":"667"},{"id":"671","name":"昂昂溪区","code":"230205","parentId":"667"},{"id":"672","name":"富拉尔基区","code":"230206","parentId":"667"},{"id":"673","name":"碾子山区","code":"230207","parentId":"667"},{"id":"674","name":"梅里斯达斡尔族区","code":"230208","parentId":"667"},{"id":"675","name":"龙江县","code":"230221","parentId":"667"},{"id":"676","name":"依安县","code":"230223","parentId":"667"},{"id":"677","name":"泰来县","code":"230224","parentId":"667"},{"id":"678","name":"甘南县","code":"230225","parentId":"667"},{"id":"679","name":"富裕县","code":"230227","parentId":"667"},{"id":"680","name":"克山县","code":"230229","parentId":"667"},{"id":"681","name":"克东县","code":"230230","parentId":"667"},{"id":"682","name":"拜泉县","code":"230231","parentId":"667"},{"id":"683","name":"讷河市","code":"230281","parentId":"667"}]},{"id":"684","name":"鸡西市","code":"230300","parentId":"647","children":[{"id":"685","name":"鸡冠区","code":"230302","parentId":"684"},{"id":"686","name":"恒山区","code":"230303","parentId":"684"},{"id":"687","name":"滴道区","code":"230304","parentId":"684"},{"id":"688","name":"梨树区","code":"230305","parentId":"684"},{"id":"689","name":"城子河区","code":"230306","parentId":"684"},{"id":"690","name":"麻山区","code":"230307","parentId":"684"},{"id":"691","name":"鸡东县","code":"230321","parentId":"684"},{"id":"692","name":"虎林市","code":"230381","parentId":"684"},{"id":"693","name":"密山市","code":"230382","parentId":"684"}]},{"id":"694","name":"鹤岗市","code":"230400","parentId":"647","children":[{"id":"695","name":"向阳区","code":"230402","parentId":"694"},{"id":"696","name":"工农区","code":"230403","parentId":"694"},{"id":"697","name":"南山区","code":"230404","parentId":"694"},{"id":"698","name":"兴安区","code":"230405","parentId":"694"},{"id":"699","name":"东山区","code":"230406","parentId":"694"},{"id":"700","name":"兴山区","code":"230407","parentId":"694"},{"id":"701","name":"萝北县","code":"230421","parentId":"694"},{"id":"702","name":"绥滨县","code":"230422","parentId":"694"}]},{"id":"703","name":"双鸭山市","code":"230500","parentId":"647","children":[{"id":"704","name":"尖山区","code":"230502","parentId":"703"},{"id":"705","name":"岭东区","code":"230503","parentId":"703"},{"id":"706","name":"四方台区","code":"230505","parentId":"703"},{"id":"707","name":"宝山区","code":"230506","parentId":"703"},{"id":"708","name":"集贤县","code":"230521","parentId":"703"},{"id":"709","name":"友谊县","code":"230522","parentId":"703"},{"id":"710","name":"宝清县","code":"230523","parentId":"703"},{"id":"711","name":"饶河县","code":"230524","parentId":"703"}]},{"id":"712","name":"大庆市","code":"230600","parentId":"647","children":[{"id":"713","name":"萨尔图区","code":"230602","parentId":"712"},{"id":"714","name":"龙凤区","code":"230603","parentId":"712"},{"id":"715","name":"让胡路区","code":"230604","parentId":"712"},{"id":"716","name":"红岗区","code":"230605","parentId":"712"},{"id":"717","name":"大同区","code":"230606","parentId":"712"},{"id":"718","name":"肇州县","code":"230621","parentId":"712"},{"id":"719","name":"肇源县","code":"230622","parentId":"712"},{"id":"720","name":"林甸县","code":"230623","parentId":"712"},{"id":"721","name":"杜尔伯特蒙古族自治县","code":"230624","parentId":"712"}]},{"id":"722","name":"伊春市","code":"230700","parentId":"647","children":[{"id":"723","name":"伊春区","code":"230702","parentId":"722"},{"id":"724","name":"南岔区","code":"230703","parentId":"722"},{"id":"725","name":"友好区","code":"230704","parentId":"722"},{"id":"726","name":"西林区","code":"230705","parentId":"722"},{"id":"727","name":"翠峦区","code":"230706","parentId":"722"},{"id":"728","name":"新青区","code":"230707","parentId":"722"},{"id":"729","name":"美溪区","code":"230708","parentId":"722"},{"id":"730","name":"金山屯区","code":"230709","parentId":"722"},{"id":"731","name":"五营区","code":"230710","parentId":"722"},{"id":"732","name":"乌马河区","code":"230711","parentId":"722"},{"id":"733","name":"汤旺河区","code":"230712","parentId":"722"},{"id":"734","name":"带岭区","code":"230713","parentId":"722"},{"id":"735","name":"乌伊岭区","code":"230714","parentId":"722"},{"id":"736","name":"红星区","code":"230715","parentId":"722"},{"id":"737","name":"上甘岭区","code":"230716","parentId":"722"},{"id":"738","name":"嘉荫县","code":"230722","parentId":"722"},{"id":"739","name":"铁力市","code":"230781","parentId":"722"}]},{"id":"740","name":"佳木斯市","code":"230800","parentId":"647","children":[{"id":"741","name":"向阳区","code":"230803","parentId":"740"},{"id":"742","name":"前进区","code":"230804","parentId":"740"},{"id":"743","name":"东风区","code":"230805","parentId":"740"},{"id":"744","name":"郊区","code":"230811","parentId":"740"},{"id":"745","name":"桦南县","code":"230822","parentId":"740"},{"id":"746","name":"桦川县","code":"230826","parentId":"740"},{"id":"747","name":"汤原县","code":"230828","parentId":"740"},{"id":"748","name":"同江市","code":"230881","parentId":"740"},{"id":"749","name":"富锦市","code":"230882","parentId":"740"},{"id":"750","name":"抚远市","code":"230883","parentId":"740"}]},{"id":"751","name":"七台河市","code":"230900","parentId":"647","children":[{"id":"752","name":"新兴区","code":"230902","parentId":"751"},{"id":"753","name":"桃山区","code":"230903","parentId":"751"},{"id":"754","name":"茄子河区","code":"230904","parentId":"751"},{"id":"755","name":"勃利县","code":"230921","parentId":"751"}]},{"id":"756","name":"牡丹江市","code":"231000","parentId":"647","children":[{"id":"757","name":"东安区","code":"231002","parentId":"756"},{"id":"758","name":"阳明区","code":"231003","parentId":"756"},{"id":"759","name":"爱民区","code":"231004","parentId":"756"},{"id":"760","name":"西安区","code":"231005","parentId":"756"},{"id":"761","name":"林口县","code":"231025","parentId":"756"},{"id":"762","name":"绥芬河市","code":"231081","parentId":"756"},{"id":"763","name":"海林市","code":"231083","parentId":"756"},{"id":"764","name":"宁安市","code":"231084","parentId":"756"},{"id":"765","name":"穆棱市","code":"231085","parentId":"756"},{"id":"766","name":"东宁市","code":"231086","parentId":"756"}]},{"id":"767","name":"黑河市","code":"231100","parentId":"647","children":[{"id":"768","name":"爱辉区","code":"231102","parentId":"767"},{"id":"769","name":"嫩江县","code":"231121","parentId":"767"},{"id":"770","name":"逊克县","code":"231123","parentId":"767"},{"id":"771","name":"孙吴县","code":"231124","parentId":"767"},{"id":"772","name":"北安市","code":"231181","parentId":"767"},{"id":"773","name":"五大连池市","code":"231182","parentId":"767"}]},{"id":"774","name":"绥化市","code":"231200","parentId":"647","children":[{"id":"775","name":"北林区","code":"231202","parentId":"774"},{"id":"776","name":"望奎县","code":"231221","parentId":"774"},{"id":"777","name":"兰西县","code":"231222","parentId":"774"},{"id":"778","name":"青冈县","code":"231223","parentId":"774"},{"id":"779","name":"庆安县","code":"231224","parentId":"774"},{"id":"780","name":"明水县","code":"231225","parentId":"774"},{"id":"781","name":"绥棱县","code":"231226","parentId":"774"},{"id":"782","name":"安达市","code":"231281","parentId":"774"},{"id":"783","name":"肇东市","code":"231282","parentId":"774"},{"id":"784","name":"海伦市","code":"231283","parentId":"774"}]},{"id":"785","name":"大兴安岭地区","code":"232700","parentId":"647","children":[{"id":"786","name":"呼玛县","code":"232721","parentId":"785"},{"id":"787","name":"塔河县","code":"232722","parentId":"785"},{"id":"788","name":"漠河县","code":"232723","parentId":"785"}]}]},{"id":"806","name":"江苏省","code":"320000","parentId":"0","children":[{"id":"807","name":"南京市","code":"320100","parentId":"806","children":[{"id":"808","name":"玄武区","code":"320102","parentId":"807"},{"id":"809","name":"秦淮区","code":"320104","parentId":"807"},{"id":"810","name":"建邺区","code":"320105","parentId":"807"},{"id":"811","name":"鼓楼区","code":"320106","parentId":"807"},{"id":"812","name":"浦口区","code":"320111","parentId":"807"},{"id":"813","name":"栖霞区","code":"320113","parentId":"807"},{"id":"814","name":"雨花台区","code":"320114","parentId":"807"},{"id":"815","name":"江宁区","code":"320115","parentId":"807"},{"id":"816","name":"六合区","code":"320116","parentId":"807"},{"id":"817","name":"溧水区","code":"320117","parentId":"807"},{"id":"818","name":"高淳区","code":"320118","parentId":"807"}]},{"id":"819","name":"无锡市","code":"320200","parentId":"806","children":[{"id":"820","name":"锡山区","code":"320205","parentId":"819"},{"id":"821","name":"惠山区","code":"320206","parentId":"819"},{"id":"822","name":"滨湖区","code":"320211","parentId":"819"},{"id":"823","name":"梁溪区","code":"320213","parentId":"819"},{"id":"824","name":"新吴区","code":"320214","parentId":"819"},{"id":"825","name":"江阴市","code":"320281","parentId":"819"},{"id":"826","name":"宜兴市","code":"320282","parentId":"819"}]},{"id":"827","name":"徐州市","code":"320300","parentId":"806","children":[{"id":"828","name":"鼓楼区","code":"320302","parentId":"827"},{"id":"829","name":"云龙区","code":"320303","parentId":"827"},{"id":"830","name":"贾汪区","code":"320305","parentId":"827"},{"id":"831","name":"泉山区","code":"320311","parentId":"827"},{"id":"832","name":"铜山区","code":"320312","parentId":"827"},{"id":"833","name":"丰县","code":"320321","parentId":"827"},{"id":"834","name":"沛县","code":"320322","parentId":"827"},{"id":"835","name":"睢宁县","code":"320324","parentId":"827"},{"id":"836","name":"新沂市","code":"320381","parentId":"827"},{"id":"837","name":"邳州市","code":"320382","parentId":"827"}]},{"id":"838","name":"常州市","code":"320400","parentId":"806","children":[{"id":"839","name":"天宁区","code":"320402","parentId":"838"},{"id":"840","name":"钟楼区","code":"320404","parentId":"838"},{"id":"841","name":"新北区","code":"320411","parentId":"838"},{"id":"842","name":"武进区","code":"320412","parentId":"838"},{"id":"843","name":"金坛区","code":"320413","parentId":"838"},{"id":"844","name":"溧阳市","code":"320481","parentId":"838"}]},{"id":"845","name":"苏州市","code":"320500","parentId":"806","children":[{"id":"846","name":"虎丘区","code":"320505","parentId":"845"},{"id":"847","name":"吴中区","code":"320506","parentId":"845"},{"id":"848","name":"相城区","code":"320507","parentId":"845"},{"id":"849","name":"姑苏区","code":"320508","parentId":"845"},{"id":"850","name":"吴江区","code":"320509","parentId":"845"},{"id":"851","name":"常熟市","code":"320581","parentId":"845"},{"id":"852","name":"张家港市","code":"320582","parentId":"845"},{"id":"853","name":"昆山市","code":"320583","parentId":"845"},{"id":"854","name":"太仓市","code":"320585","parentId":"845"}]},{"id":"855","name":"南通市","code":"320600","parentId":"806","children":[{"id":"856","name":"崇川区","code":"320602","parentId":"855"},{"id":"857","name":"港闸区","code":"320611","parentId":"855"},{"id":"858","name":"通州区","code":"320612","parentId":"855"},{"id":"859","name":"海安县","code":"320621","parentId":"855"},{"id":"860","name":"如东县","code":"320623","parentId":"855"},{"id":"861","name":"启东市","code":"320681","parentId":"855"},{"id":"862","name":"如皋市","code":"320682","parentId":"855"},{"id":"863","name":"海门市","code":"320684","parentId":"855"}]},{"id":"864","name":"连云港市","code":"320700","parentId":"806","children":[{"id":"865","name":"连云区","code":"320703","parentId":"864"},{"id":"866","name":"海州区","code":"320706","parentId":"864"},{"id":"867","name":"赣榆区","code":"320707","parentId":"864"},{"id":"868","name":"东海县","code":"320722","parentId":"864"},{"id":"869","name":"灌云县","code":"320723","parentId":"864"},{"id":"870","name":"灌南县","code":"320724","parentId":"864"}]},{"id":"871","name":"淮安市","code":"320800","parentId":"806","children":[{"id":"872","name":"淮安区","code":"320803","parentId":"871"},{"id":"873","name":"淮阴区","code":"320804","parentId":"871"},{"id":"874","name":"清江浦区","code":"320812","parentId":"871"},{"id":"875","name":"洪泽区","code":"320813","parentId":"871"},{"id":"876","name":"涟水县","code":"320826","parentId":"871"},{"id":"877","name":"盱眙县","code":"320830","parentId":"871"},{"id":"878","name":"金湖县","code":"320831","parentId":"871"}]},{"id":"879","name":"盐城市","code":"320900","parentId":"806","children":[{"id":"880","name":"亭湖区","code":"320902","parentId":"879"},{"id":"881","name":"盐都区","code":"320903","parentId":"879"},{"id":"882","name":"大丰区","code":"320904","parentId":"879"},{"id":"883","name":"响水县","code":"320921","parentId":"879"},{"id":"884","name":"滨海县","code":"320922","parentId":"879"},{"id":"885","name":"阜宁县","code":"320923","parentId":"879"},{"id":"886","name":"射阳县","code":"320924","parentId":"879"},{"id":"887","name":"建湖县","code":"320925","parentId":"879"},{"id":"888","name":"东台市","code":"320981","parentId":"879"}]},{"id":"889","name":"扬州市","code":"321000","parentId":"806","children":[{"id":"890","name":"广陵区","code":"321002","parentId":"889"},{"id":"891","name":"邗江区","code":"321003","parentId":"889"},{"id":"892","name":"江都区","code":"321012","parentId":"889"},{"id":"893","name":"宝应县","code":"321023","parentId":"889"},{"id":"894","name":"仪征市","code":"321081","parentId":"889"},{"id":"895","name":"高邮市","code":"321084","parentId":"889"}]},{"id":"896","name":"镇江市","code":"321100","parentId":"806","children":[{"id":"897","name":"京口区","code":"321102","parentId":"896"},{"id":"898","name":"润州区","code":"321111","parentId":"896"},{"id":"899","name":"丹徒区","code":"321112","parentId":"896"},{"id":"900","name":"丹阳市","code":"321181","parentId":"896"},{"id":"901","name":"扬中市","code":"321182","parentId":"896"},{"id":"902","name":"句容市","code":"321183","parentId":"896"}]},{"id":"903","name":"泰州市","code":"321200","parentId":"806","children":[{"id":"904","name":"海陵区","code":"321202","parentId":"903"},{"id":"905","name":"高港区","code":"321203","parentId":"903"},{"id":"906","name":"姜堰区","code":"321204","parentId":"903"},{"id":"907","name":"兴化市","code":"321281","parentId":"903"},{"id":"908","name":"靖江市","code":"321282","parentId":"903"},{"id":"909","name":"泰兴市","code":"321283","parentId":"903"}]},{"id":"910","name":"宿迁市","code":"321300","parentId":"806","children":[{"id":"911","name":"宿城区","code":"321302","parentId":"910"},{"id":"912","name":"宿豫区","code":"321311","parentId":"910"},{"id":"913","name":"沭阳县","code":"321322","parentId":"910"},{"id":"914","name":"泗阳县","code":"321323","parentId":"910"},{"id":"915","name":"泗洪县","code":"321324","parentId":"910"}]}]},{"id":"916","name":"浙江省","code":"330000","parentId":"0","children":[{"id":"917","name":"杭州市","code":"330100","parentId":"916","children":[{"id":"918","name":"上城区","code":"330102","parentId":"917"},{"id":"919","name":"下城区","code":"330103","parentId":"917"},{"id":"920","name":"江干区","code":"330104","parentId":"917"},{"id":"921","name":"拱墅区","code":"330105","parentId":"917"},{"id":"922","name":"西湖区","code":"330106","parentId":"917"},{"id":"923","name":"滨江区","code":"330108","parentId":"917"},{"id":"924","name":"萧山区","code":"330109","parentId":"917"},{"id":"925","name":"余杭区","code":"330110","parentId":"917"},{"id":"926","name":"富阳区","code":"330111","parentId":"917"},{"id":"927","name":"临安区","code":"330112","parentId":"917"},{"id":"928","name":"桐庐县","code":"330122","parentId":"917"},{"id":"929","name":"淳安县","code":"330127","parentId":"917"},{"id":"930","name":"建德市","code":"330182","parentId":"917"}]},{"id":"931","name":"宁波市","code":"330200","parentId":"916","children":[{"id":"932","name":"海曙区","code":"330203","parentId":"931"},{"id":"933","name":"江北区","code":"330205","parentId":"931"},{"id":"934","name":"北仑区","code":"330206","parentId":"931"},{"id":"935","name":"镇海区","code":"330211","parentId":"931"},{"id":"936","name":"鄞州区","code":"330212","parentId":"931"},{"id":"937","name":"奉化区","code":"330213","parentId":"931"},{"id":"938","name":"象山县","code":"330225","parentId":"931"},{"id":"939","name":"宁海县","code":"330226","parentId":"931"},{"id":"940","name":"余姚市","code":"330281","parentId":"931"},{"id":"941","name":"慈溪市","code":"330282","parentId":"931"}]},{"id":"942","name":"温州市","code":"330300","parentId":"916","children":[{"id":"943","name":"鹿城区","code":"330302","parentId":"942"},{"id":"944","name":"龙湾区","code":"330303","parentId":"942"},{"id":"945","name":"瓯海区","code":"330304","parentId":"942"},{"id":"946","name":"洞头区","code":"330305","parentId":"942"},{"id":"947","name":"永嘉县","code":"330324","parentId":"942"},{"id":"948","name":"平阳县","code":"330326","parentId":"942"},{"id":"949","name":"苍南县","code":"330327","parentId":"942"},{"id":"950","name":"文成县","code":"330328","parentId":"942"},{"id":"951","name":"泰顺县","code":"330329","parentId":"942"},{"id":"952","name":"瑞安市","code":"330381","parentId":"942"},{"id":"953","name":"乐清市","code":"330382","parentId":"942"}]},{"id":"954","name":"嘉兴市","code":"330400","parentId":"916","children":[{"id":"955","name":"南湖区","code":"330402","parentId":"954"},{"id":"956","name":"秀洲区","code":"330411","parentId":"954"},{"id":"957","name":"嘉善县","code":"330421","parentId":"954"},{"id":"958","name":"海盐县","code":"330424","parentId":"954"},{"id":"959","name":"海宁市","code":"330481","parentId":"954"},{"id":"960","name":"平湖市","code":"330482","parentId":"954"},{"id":"961","name":"桐乡市","code":"330483","parentId":"954"}]},{"id":"962","name":"湖州市","code":"330500","parentId":"916","children":[{"id":"963","name":"吴兴区","code":"330502","parentId":"962"},{"id":"964","name":"南浔区","code":"330503","parentId":"962"},{"id":"965","name":"德清县","code":"330521","parentId":"962"},{"id":"966","name":"长兴县","code":"330522","parentId":"962"},{"id":"967","name":"安吉县","code":"330523","parentId":"962"}]},{"id":"968","name":"绍兴市","code":"330600","parentId":"916","children":[{"id":"969","name":"越城区","code":"330602","parentId":"968"},{"id":"970","name":"柯桥区","code":"330603","parentId":"968"},{"id":"971","name":"上虞区","code":"330604","parentId":"968"},{"id":"972","name":"新昌县","code":"330624","parentId":"968"},{"id":"973","name":"诸暨市","code":"330681","parentId":"968"},{"id":"974","name":"嵊州市","code":"330683","parentId":"968"}]},{"id":"975","name":"金华市","code":"330700","parentId":"916","children":[{"id":"976","name":"婺城区","code":"330702","parentId":"975"},{"id":"977","name":"金东区","code":"330703","parentId":"975"},{"id":"978","name":"武义县","code":"330723","parentId":"975"},{"id":"979","name":"浦江县","code":"330726","parentId":"975"},{"id":"980","name":"磐安县","code":"330727","parentId":"975"},{"id":"981","name":"兰溪市","code":"330781","parentId":"975"},{"id":"982","name":"义乌市","code":"330782","parentId":"975"},{"id":"983","name":"东阳市","code":"330783","parentId":"975"},{"id":"984","name":"永康市","code":"330784","parentId":"975"}]},{"id":"985","name":"衢州市","code":"330800","parentId":"916","children":[{"id":"986","name":"柯城区","code":"330802","parentId":"985"},{"id":"987","name":"衢江区","code":"330803","parentId":"985"},{"id":"988","name":"常山县","code":"330822","parentId":"985"},{"id":"989","name":"开化县","code":"330824","parentId":"985"},{"id":"990","name":"龙游县","code":"330825","parentId":"985"},{"id":"991","name":"江山市","code":"330881","parentId":"985"}]},{"id":"992","name":"舟山市","code":"330900","parentId":"916","children":[{"id":"993","name":"定海区","code":"330902","parentId":"992"},{"id":"994","name":"普陀区","code":"330903","parentId":"992"},{"id":"995","name":"岱山县","code":"330921","parentId":"992"},{"id":"996","name":"嵊泗县","code":"330922","parentId":"992"}]},{"id":"997","name":"台州市","code":"331000","parentId":"916","children":[{"id":"998","name":"椒江区","code":"331002","parentId":"997"},{"id":"999","name":"黄岩区","code":"331003","parentId":"997"},{"id":"1000","name":"路桥区","code":"331004","parentId":"997"},{"id":"1001","name":"三门县","code":"331022","parentId":"997"},{"id":"1002","name":"天台县","code":"331023","parentId":"997"},{"id":"1003","name":"仙居县","code":"331024","parentId":"997"},{"id":"1004","name":"温岭市","code":"331081","parentId":"997"},{"id":"1005","name":"临海市","code":"331082","parentId":"997"},{"id":"1006","name":"玉环市","code":"331083","parentId":"997"}]},{"id":"1007","name":"丽水市","code":"331100","parentId":"916","children":[{"id":"1008","name":"莲都区","code":"331102","parentId":"1007"},{"id":"1009","name":"青田县","code":"331121","parentId":"1007"},{"id":"1010","name":"缙云县","code":"331122","parentId":"1007"},{"id":"1011","name":"遂昌县","code":"331123","parentId":"1007"},{"id":"1012","name":"松阳县","code":"331124","parentId":"1007"},{"id":"1013","name":"云和县","code":"331125","parentId":"1007"},{"id":"1014","name":"庆元县","code":"331126","parentId":"1007"},{"id":"1015","name":"景宁畲族自治县","code":"331127","parentId":"1007"},{"id":"1016","name":"龙泉市","code":"331181","parentId":"1007"}]}]},{"id":"1017","name":"安徽省","code":"340000","parentId":"0","children":[{"id":"1018","name":"合肥市","code":"340100","parentId":"1017","children":[{"id":"1019","name":"瑶海区","code":"340102","parentId":"1018"},{"id":"1020","name":"庐阳区","code":"340103","parentId":"1018"},{"id":"1021","name":"蜀山区","code":"340104","parentId":"1018"},{"id":"1022","name":"包河区","code":"340111","parentId":"1018"},{"id":"1023","name":"长丰县","code":"340121","parentId":"1018"},{"id":"1024","name":"肥东县","code":"340122","parentId":"1018"},{"id":"1025","name":"肥西县","code":"340123","parentId":"1018"},{"id":"1026","name":"庐江县","code":"340124","parentId":"1018"},{"id":"1027","name":"巢湖市","code":"340181","parentId":"1018"}]},{"id":"1028","name":"芜湖市","code":"340200","parentId":"1017","children":[{"id":"1029","name":"镜湖区","code":"340202","parentId":"1028"},{"id":"1030","name":"弋江区","code":"340203","parentId":"1028"},{"id":"1031","name":"鸠江区","code":"340207","parentId":"1028"},{"id":"1032","name":"三山区","code":"340208","parentId":"1028"},{"id":"1033","name":"芜湖县","code":"340221","parentId":"1028"},{"id":"1034","name":"繁昌县","code":"340222","parentId":"1028"},{"id":"1035","name":"南陵县","code":"340223","parentId":"1028"},{"id":"1036","name":"无为县","code":"340225","parentId":"1028"}]},{"id":"1037","name":"蚌埠市","code":"340300","parentId":"1017","children":[{"id":"1038","name":"龙子湖区","code":"340302","parentId":"1037"},{"id":"1039","name":"蚌山区","code":"340303","parentId":"1037"},{"id":"1040","name":"禹会区","code":"340304","parentId":"1037"},{"id":"1041","name":"淮上区","code":"340311","parentId":"1037"},{"id":"1042","name":"怀远县","code":"340321","parentId":"1037"},{"id":"1043","name":"五河县","code":"340322","parentId":"1037"},{"id":"1044","name":"固镇县","code":"340323","parentId":"1037"}]},{"id":"1045","name":"淮南市","code":"340400","parentId":"1017","children":[{"id":"1046","name":"大通区","code":"340402","parentId":"1045"},{"id":"1047","name":"田家庵区","code":"340403","parentId":"1045"},{"id":"1048","name":"谢家集区","code":"340404","parentId":"1045"},{"id":"1049","name":"八公山区","code":"340405","parentId":"1045"},{"id":"1050","name":"潘集区","code":"340406","parentId":"1045"},{"id":"1051","name":"凤台县","code":"340421","parentId":"1045"},{"id":"1052","name":"寿县","code":"340422","parentId":"1045"}]},{"id":"1053","name":"马鞍山市","code":"340500","parentId":"1017","children":[{"id":"1054","name":"花山区","code":"340503","parentId":"1053"},{"id":"1055","name":"雨山区","code":"340504","parentId":"1053"},{"id":"1056","name":"博望区","code":"340506","parentId":"1053"},{"id":"1057","name":"当涂县","code":"340521","parentId":"1053"},{"id":"1058","name":"含山县","code":"340522","parentId":"1053"},{"id":"1059","name":"和县","code":"340523","parentId":"1053"}]},{"id":"1060","name":"淮北市","code":"340600","parentId":"1017","children":[{"id":"1061","name":"杜集区","code":"340602","parentId":"1060"},{"id":"1062","name":"相山区","code":"340603","parentId":"1060"},{"id":"1063","name":"烈山区","code":"340604","parentId":"1060"},{"id":"1064","name":"濉溪县","code":"340621","parentId":"1060"}]},{"id":"1065","name":"铜陵市","code":"340700","parentId":"1017","children":[{"id":"1066","name":"铜官区","code":"340705","parentId":"1065"},{"id":"1067","name":"义安区","code":"340706","parentId":"1065"},{"id":"1068","name":"郊区","code":"340711","parentId":"1065"},{"id":"1069","name":"枞阳县","code":"340722","parentId":"1065"}]},{"id":"1070","name":"安庆市","code":"340800","parentId":"1017","children":[{"id":"1071","name":"迎江区","code":"340802","parentId":"1070"},{"id":"1072","name":"大观区","code":"340803","parentId":"1070"},{"id":"1073","name":"宜秀区","code":"340811","parentId":"1070"},{"id":"1074","name":"怀宁县","code":"340822","parentId":"1070"},{"id":"1075","name":"潜山县","code":"340824","parentId":"1070"},{"id":"1076","name":"太湖县","code":"340825","parentId":"1070"},{"id":"1077","name":"宿松县","code":"340826","parentId":"1070"},{"id":"1078","name":"望江县","code":"340827","parentId":"1070"},{"id":"1079","name":"岳西县","code":"340828","parentId":"1070"},{"id":"1080","name":"桐城市","code":"340881","parentId":"1070"}]},{"id":"1081","name":"黄山市","code":"341000","parentId":"1017","children":[{"id":"1082","name":"屯溪区","code":"341002","parentId":"1081"},{"id":"1083","name":"黄山区","code":"341003","parentId":"1081"},{"id":"1084","name":"徽州区","code":"341004","parentId":"1081"},{"id":"1085","name":"歙县","code":"341021","parentId":"1081"},{"id":"1086","name":"休宁县","code":"341022","parentId":"1081"},{"id":"1087","name":"黟县","code":"341023","parentId":"1081"},{"id":"1088","name":"祁门县","code":"341024","parentId":"1081"}]},{"id":"1089","name":"滁州市","code":"341100","parentId":"1017","children":[{"id":"1090","name":"琅琊区","code":"341102","parentId":"1089"},{"id":"1091","name":"南谯区","code":"341103","parentId":"1089"},{"id":"1092","name":"来安县","code":"341122","parentId":"1089"},{"id":"1093","name":"全椒县","code":"341124","parentId":"1089"},{"id":"1094","name":"定远县","code":"341125","parentId":"1089"},{"id":"1095","name":"凤阳县","code":"341126","parentId":"1089"},{"id":"1096","name":"天长市","code":"341181","parentId":"1089"},{"id":"1097","name":"明光市","code":"341182","parentId":"1089"}]},{"id":"1098","name":"阜阳市","code":"341200","parentId":"1017","children":[{"id":"1099","name":"颍州区","code":"341202","parentId":"1098"},{"id":"1100","name":"颍东区","code":"341203","parentId":"1098"},{"id":"1101","name":"颍泉区","code":"341204","parentId":"1098"},{"id":"1102","name":"临泉县","code":"341221","parentId":"1098"},{"id":"1103","name":"太和县","code":"341222","parentId":"1098"},{"id":"1104","name":"阜南县","code":"341225","parentId":"1098"},{"id":"1105","name":"颍上县","code":"341226","parentId":"1098"},{"id":"1106","name":"界首市","code":"341282","parentId":"1098"}]},{"id":"1107","name":"宿州市","code":"341300","parentId":"1017","children":[{"id":"1108","name":"埇桥区","code":"341302","parentId":"1107"},{"id":"1109","name":"砀山县","code":"341321","parentId":"1107"},{"id":"1110","name":"萧县","code":"341322","parentId":"1107"},{"id":"1111","name":"灵璧县","code":"341323","parentId":"1107"},{"id":"1112","name":"泗县","code":"341324","parentId":"1107"}]},{"id":"1113","name":"六安市","code":"341500","parentId":"1017","children":[{"id":"1114","name":"金安区","code":"341502","parentId":"1113"},{"id":"1115","name":"裕安区","code":"341503","parentId":"1113"},{"id":"1116","name":"叶集区","code":"341504","parentId":"1113"},{"id":"1117","name":"霍邱县","code":"341522","parentId":"1113"},{"id":"1118","name":"舒城县","code":"341523","parentId":"1113"},{"id":"1119","name":"金寨县","code":"341524","parentId":"1113"},{"id":"1120","name":"霍山县","code":"341525","parentId":"1113"}]},{"id":"1121","name":"亳州市","code":"341600","parentId":"1017","children":[{"id":"1122","name":"谯城区","code":"341602","parentId":"1121"},{"id":"1123","name":"涡阳县","code":"341621","parentId":"1121"},{"id":"1124","name":"蒙城县","code":"341622","parentId":"1121"},{"id":"1125","name":"利辛县","code":"341623","parentId":"1121"}]},{"id":"1126","name":"池州市","code":"341700","parentId":"1017","children":[{"id":"1127","name":"贵池区","code":"341702","parentId":"1126"},{"id":"1128","name":"东至县","code":"341721","parentId":"1126"},{"id":"1129","name":"石台县","code":"341722","parentId":"1126"},{"id":"1130","name":"青阳县","code":"341723","parentId":"1126"}]},{"id":"1131","name":"宣城市","code":"341800","parentId":"1017","children":[{"id":"1132","name":"宣州区","code":"341802","parentId":"1131"},{"id":"1133","name":"郎溪县","code":"341821","parentId":"1131"},{"id":"1134","name":"广德县","code":"341822","parentId":"1131"},{"id":"1135","name":"泾县","code":"341823","parentId":"1131"},{"id":"1136","name":"绩溪县","code":"341824","parentId":"1131"},{"id":"1137","name":"旌德县","code":"341825","parentId":"1131"},{"id":"1138","name":"宁国市","code":"341881","parentId":"1131"}]}]},{"id":"1139","name":"福建省","code":"350000","parentId":"0","children":[{"id":"1140","name":"福州市","code":"350100","parentId":"1139","children":[{"id":"1141","name":"鼓楼区","code":"350102","parentId":"1140"},{"id":"1142","name":"台江区","code":"350103","parentId":"1140"},{"id":"1143","name":"仓山区","code":"350104","parentId":"1140"},{"id":"1144","name":"马尾区","code":"350105","parentId":"1140"},{"id":"1145","name":"晋安区","code":"350111","parentId":"1140"},{"id":"1146","name":"长乐区","code":"350112","parentId":"1140"},{"id":"1147","name":"闽侯县","code":"350121","parentId":"1140"},{"id":"1148","name":"连江县","code":"350122","parentId":"1140"},{"id":"1149","name":"罗源县","code":"350123","parentId":"1140"},{"id":"1150","name":"闽清县","code":"350124","parentId":"1140"},{"id":"1151","name":"永泰县","code":"350125","parentId":"1140"},{"id":"1152","name":"平潭县","code":"350128","parentId":"1140"},{"id":"1153","name":"福清市","code":"350181","parentId":"1140"}]},{"id":"1154","name":"厦门市","code":"350200","parentId":"1139","children":[{"id":"1155","name":"思明区","code":"350203","parentId":"1154"},{"id":"1156","name":"海沧区","code":"350205","parentId":"1154"},{"id":"1157","name":"湖里区","code":"350206","parentId":"1154"},{"id":"1158","name":"集美区","code":"350211","parentId":"1154"},{"id":"1159","name":"同安区","code":"350212","parentId":"1154"},{"id":"1160","name":"翔安区","code":"350213","parentId":"1154"}]},{"id":"1161","name":"莆田市","code":"350300","parentId":"1139","children":[{"id":"1162","name":"城厢区","code":"350302","parentId":"1161"},{"id":"1163","name":"涵江区","code":"350303","parentId":"1161"},{"id":"1164","name":"荔城区","code":"350304","parentId":"1161"},{"id":"1165","name":"秀屿区","code":"350305","parentId":"1161"},{"id":"1166","name":"仙游县","code":"350322","parentId":"1161"}]},{"id":"1167","name":"三明市","code":"350400","parentId":"1139","children":[{"id":"1168","name":"梅列区","code":"350402","parentId":"1167"},{"id":"1169","name":"三元区","code":"350403","parentId":"1167"},{"id":"1170","name":"明溪县","code":"350421","parentId":"1167"},{"id":"1171","name":"清流县","code":"350423","parentId":"1167"},{"id":"1172","name":"宁化县","code":"350424","parentId":"1167"},{"id":"1173","name":"大田县","code":"350425","parentId":"1167"},{"id":"1174","name":"尤溪县","code":"350426","parentId":"1167"},{"id":"1175","name":"沙县","code":"350427","parentId":"1167"},{"id":"1176","name":"将乐县","code":"350428","parentId":"1167"},{"id":"1177","name":"泰宁县","code":"350429","parentId":"1167"},{"id":"1178","name":"建宁县","code":"350430","parentId":"1167"},{"id":"1179","name":"永安市","code":"350481","parentId":"1167"}]},{"id":"1180","name":"泉州市","code":"350500","parentId":"1139","children":[{"id":"1181","name":"鲤城区","code":"350502","parentId":"1180"},{"id":"1182","name":"丰泽区","code":"350503","parentId":"1180"},{"id":"1183","name":"洛江区","code":"350504","parentId":"1180"},{"id":"1184","name":"泉港区","code":"350505","parentId":"1180"},{"id":"1185","name":"惠安县","code":"350521","parentId":"1180"},{"id":"1186","name":"安溪县","code":"350524","parentId":"1180"},{"id":"1187","name":"永春县","code":"350525","parentId":"1180"},{"id":"1188","name":"德化县","code":"350526","parentId":"1180"},{"id":"1189","name":"金门县","code":"350527","parentId":"1180"},{"id":"1190","name":"石狮市","code":"350581","parentId":"1180"},{"id":"1191","name":"晋江市","code":"350582","parentId":"1180"},{"id":"1192","name":"南安市","code":"350583","parentId":"1180"}]},{"id":"1193","name":"漳州市","code":"350600","parentId":"1139","children":[{"id":"1194","name":"芗城区","code":"350602","parentId":"1193"},{"id":"1195","name":"龙文区","code":"350603","parentId":"1193"},{"id":"1196","name":"云霄县","code":"350622","parentId":"1193"},{"id":"1197","name":"漳浦县","code":"350623","parentId":"1193"},{"id":"1198","name":"诏安县","code":"350624","parentId":"1193"},{"id":"1199","name":"长泰县","code":"350625","parentId":"1193"},{"id":"1200","name":"东山县","code":"350626","parentId":"1193"},{"id":"1201","name":"南靖县","code":"350627","parentId":"1193"},{"id":"1202","name":"平和县","code":"350628","parentId":"1193"},{"id":"1203","name":"华安县","code":"350629","parentId":"1193"},{"id":"1204","name":"龙海市","code":"350681","parentId":"1193"}]},{"id":"1205","name":"南平市","code":"350700","parentId":"1139","children":[{"id":"1206","name":"延平区","code":"350702","parentId":"1205"},{"id":"1207","name":"建阳区","code":"350703","parentId":"1205"},{"id":"1208","name":"顺昌县","code":"350721","parentId":"1205"},{"id":"1209","name":"浦城县","code":"350722","parentId":"1205"},{"id":"1210","name":"光泽县","code":"350723","parentId":"1205"},{"id":"1211","name":"松溪县","code":"350724","parentId":"1205"},{"id":"1212","name":"政和县","code":"350725","parentId":"1205"},{"id":"1213","name":"邵武市","code":"350781","parentId":"1205"},{"id":"1214","name":"武夷山市","code":"350782","parentId":"1205"},{"id":"1215","name":"建瓯市","code":"350783","parentId":"1205"}]},{"id":"1216","name":"龙岩市","code":"350800","parentId":"1139","children":[{"id":"1217","name":"新罗区","code":"350802","parentId":"1216"},{"id":"1218","name":"永定区","code":"350803","parentId":"1216"},{"id":"1219","name":"长汀县","code":"350821","parentId":"1216"},{"id":"1220","name":"上杭县","code":"350823","parentId":"1216"},{"id":"1221","name":"武平县","code":"350824","parentId":"1216"},{"id":"1222","name":"连城县","code":"350825","parentId":"1216"},{"id":"1223","name":"漳平市","code":"350881","parentId":"1216"}]},{"id":"1224","name":"宁德市","code":"350900","parentId":"1139","children":[{"id":"1225","name":"蕉城区","code":"350902","parentId":"1224"},{"id":"1226","name":"霞浦县","code":"350921","parentId":"1224"},{"id":"1227","name":"古田县","code":"350922","parentId":"1224"},{"id":"1228","name":"屏南县","code":"350923","parentId":"1224"},{"id":"1229","name":"寿宁县","code":"350924","parentId":"1224"},{"id":"1230","name":"周宁县","code":"350925","parentId":"1224"},{"id":"1231","name":"柘荣县","code":"350926","parentId":"1224"},{"id":"1232","name":"福安市","code":"350981","parentId":"1224"},{"id":"1233","name":"福鼎市","code":"350982","parentId":"1224"}]}]},{"id":"1234","name":"江西省","code":"360000","parentId":"0","children":[{"id":"1235","name":"南昌市","code":"360100","parentId":"1234","children":[{"id":"1236","name":"东湖区","code":"360102","parentId":"1235"},{"id":"1237","name":"西湖区","code":"360103","parentId":"1235"},{"id":"1238","name":"青云谱区","code":"360104","parentId":"1235"},{"id":"1239","name":"湾里区","code":"360105","parentId":"1235"},{"id":"1240","name":"青山湖区","code":"360111","parentId":"1235"},{"id":"1241","name":"新建区","code":"360112","parentId":"1235"},{"id":"1242","name":"南昌县","code":"360121","parentId":"1235"},{"id":"1243","name":"安义县","code":"360123","parentId":"1235"},{"id":"1244","name":"进贤县","code":"360124","parentId":"1235"}]},{"id":"1245","name":"景德镇市","code":"360200","parentId":"1234","children":[{"id":"1246","name":"昌江区","code":"360202","parentId":"1245"},{"id":"1247","name":"珠山区","code":"360203","parentId":"1245"},{"id":"1248","name":"浮梁县","code":"360222","parentId":"1245"},{"id":"1249","name":"乐平市","code":"360281","parentId":"1245"}]},{"id":"1250","name":"萍乡市","code":"360300","parentId":"1234","children":[{"id":"1251","name":"安源区","code":"360302","parentId":"1250"},{"id":"1252","name":"湘东区","code":"360313","parentId":"1250"},{"id":"1253","name":"莲花县","code":"360321","parentId":"1250"},{"id":"1254","name":"上栗县","code":"360322","parentId":"1250"},{"id":"1255","name":"芦溪县","code":"360323","parentId":"1250"}]},{"id":"1256","name":"九江市","code":"360400","parentId":"1234","children":[{"id":"1257","name":"濂溪区","code":"360402","parentId":"1256"},{"id":"1258","name":"浔阳区","code":"360403","parentId":"1256"},{"id":"1259","name":"柴桑区","code":"360404","parentId":"1256"},{"id":"1260","name":"武宁县","code":"360423","parentId":"1256"},{"id":"1261","name":"修水县","code":"360424","parentId":"1256"},{"id":"1262","name":"永修县","code":"360425","parentId":"1256"},{"id":"1263","name":"德安县","code":"360426","parentId":"1256"},{"id":"1264","name":"都昌县","code":"360428","parentId":"1256"},{"id":"1265","name":"湖口县","code":"360429","parentId":"1256"},{"id":"1266","name":"彭泽县","code":"360430","parentId":"1256"},{"id":"1267","name":"瑞昌市","code":"360481","parentId":"1256"},{"id":"1268","name":"共青城市","code":"360482","parentId":"1256"},{"id":"1269","name":"庐山市","code":"360483","parentId":"1256"}]},{"id":"1270","name":"新余市","code":"360500","parentId":"1234","children":[{"id":"1271","name":"渝水区","code":"360502","parentId":"1270"},{"id":"1272","name":"分宜县","code":"360521","parentId":"1270"}]},{"id":"1273","name":"鹰潭市","code":"360600","parentId":"1234","children":[{"id":"1274","name":"月湖区","code":"360602","parentId":"1273"},{"id":"1275","name":"余江县","code":"360622","parentId":"1273"},{"id":"1276","name":"贵溪市","code":"360681","parentId":"1273"}]},{"id":"1277","name":"赣州市","code":"360700","parentId":"1234","children":[{"id":"1278","name":"章贡区","code":"360702","parentId":"1277"},{"id":"1279","name":"南康区","code":"360703","parentId":"1277"},{"id":"1280","name":"赣县区","code":"360704","parentId":"1277"},{"id":"1281","name":"信丰县","code":"360722","parentId":"1277"},{"id":"1282","name":"大余县","code":"360723","parentId":"1277"},{"id":"1283","name":"上犹县","code":"360724","parentId":"1277"},{"id":"1284","name":"崇义县","code":"360725","parentId":"1277"},{"id":"1285","name":"安远县","code":"360726","parentId":"1277"},{"id":"1286","name":"龙南县","code":"360727","parentId":"1277"},{"id":"1287","name":"定南县","code":"360728","parentId":"1277"},{"id":"1288","name":"全南县","code":"360729","parentId":"1277"},{"id":"1289","name":"宁都县","code":"360730","parentId":"1277"},{"id":"1290","name":"于都县","code":"360731","parentId":"1277"},{"id":"1291","name":"兴国县","code":"360732","parentId":"1277"},{"id":"1292","name":"会昌县","code":"360733","parentId":"1277"},{"id":"1293","name":"寻乌县","code":"360734","parentId":"1277"},{"id":"1294","name":"石城县","code":"360735","parentId":"1277"},{"id":"1295","name":"瑞金市","code":"360781","parentId":"1277"}]},{"id":"1296","name":"吉安市","code":"360800","parentId":"1234","children":[{"id":"1297","name":"吉州区","code":"360802","parentId":"1296"},{"id":"1298","name":"青原区","code":"360803","parentId":"1296"},{"id":"1299","name":"吉安县","code":"360821","parentId":"1296"},{"id":"1300","name":"吉水县","code":"360822","parentId":"1296"},{"id":"1301","name":"峡江县","code":"360823","parentId":"1296"},{"id":"1302","name":"新干县","code":"360824","parentId":"1296"},{"id":"1303","name":"永丰县","code":"360825","parentId":"1296"},{"id":"1304","name":"泰和县","code":"360826","parentId":"1296"},{"id":"1305","name":"遂川县","code":"360827","parentId":"1296"},{"id":"1306","name":"万安县","code":"360828","parentId":"1296"},{"id":"1307","name":"安福县","code":"360829","parentId":"1296"},{"id":"1308","name":"永新县","code":"360830","parentId":"1296"},{"id":"1309","name":"井冈山市","code":"360881","parentId":"1296"}]},{"id":"1310","name":"宜春市","code":"360900","parentId":"1234","children":[{"id":"1311","name":"袁州区","code":"360902","parentId":"1310"},{"id":"1312","name":"奉新县","code":"360921","parentId":"1310"},{"id":"1313","name":"万载县","code":"360922","parentId":"1310"},{"id":"1314","name":"上高县","code":"360923","parentId":"1310"},{"id":"1315","name":"宜丰县","code":"360924","parentId":"1310"},{"id":"1316","name":"靖安县","code":"360925","parentId":"1310"},{"id":"1317","name":"铜鼓县","code":"360926","parentId":"1310"},{"id":"1318","name":"丰城市","code":"360981","parentId":"1310"},{"id":"1319","name":"樟树市","code":"360982","parentId":"1310"},{"id":"1320","name":"高安市","code":"360983","parentId":"1310"}]},{"id":"1321","name":"抚州市","code":"361000","parentId":"1234","children":[{"id":"1322","name":"临川区","code":"361002","parentId":"1321"},{"id":"1323","name":"东乡区","code":"361003","parentId":"1321"},{"id":"1324","name":"南城县","code":"361021","parentId":"1321"},{"id":"1325","name":"黎川县","code":"361022","parentId":"1321"},{"id":"1326","name":"南丰县","code":"361023","parentId":"1321"},{"id":"1327","name":"崇仁县","code":"361024","parentId":"1321"},{"id":"1328","name":"乐安县","code":"361025","parentId":"1321"},{"id":"1329","name":"宜黄县","code":"361026","parentId":"1321"},{"id":"1330","name":"金溪县","code":"361027","parentId":"1321"},{"id":"1331","name":"资溪县","code":"361028","parentId":"1321"},{"id":"1332","name":"广昌县","code":"361030","parentId":"1321"}]},{"id":"1333","name":"上饶市","code":"361100","parentId":"1234","children":[{"id":"1334","name":"信州区","code":"361102","parentId":"1333"},{"id":"1335","name":"广丰区","code":"361103","parentId":"1333"},{"id":"1336","name":"上饶县","code":"361121","parentId":"1333"},{"id":"1337","name":"玉山县","code":"361123","parentId":"1333"},{"id":"1338","name":"铅山县","code":"361124","parentId":"1333"},{"id":"1339","name":"横峰县","code":"361125","parentId":"1333"},{"id":"1340","name":"弋阳县","code":"361126","parentId":"1333"},{"id":"1341","name":"余干县","code":"361127","parentId":"1333"},{"id":"1342","name":"鄱阳县","code":"361128","parentId":"1333"},{"id":"1343","name":"万年县","code":"361129","parentId":"1333"},{"id":"1344","name":"婺源县","code":"361130","parentId":"1333"},{"id":"1345","name":"德兴市","code":"361181","parentId":"1333"}]}]},{"id":"1346","name":"山东省","code":"370000","parentId":"0","children":[{"id":"1347","name":"济南市","code":"370100","parentId":"1346","children":[{"id":"1348","name":"历下区","code":"370102","parentId":"1347"},{"id":"1349","name":"市中区","code":"370103","parentId":"1347"},{"id":"1350","name":"槐荫区","code":"370104","parentId":"1347"},{"id":"1351","name":"天桥区","code":"370105","parentId":"1347"},{"id":"1352","name":"历城区","code":"370112","parentId":"1347"},{"id":"1353","name":"长清区","code":"370113","parentId":"1347"},{"id":"1354","name":"章丘区","code":"370114","parentId":"1347"},{"id":"1355","name":"平阴县","code":"370124","parentId":"1347"},{"id":"1356","name":"济阳县","code":"370125","parentId":"1347"},{"id":"1357","name":"商河县","code":"370126","parentId":"1347"}]},{"id":"1358","name":"青岛市","code":"370200","parentId":"1346","children":[{"id":"1359","name":"市南区","code":"370202","parentId":"1358"},{"id":"1360","name":"市北区","code":"370203","parentId":"1358"},{"id":"1361","name":"黄岛区","code":"370211","parentId":"1358"},{"id":"1362","name":"崂山区","code":"370212","parentId":"1358"},{"id":"1363","name":"李沧区","code":"370213","parentId":"1358"},{"id":"1364","name":"城阳区","code":"370214","parentId":"1358"},{"id":"1365","name":"即墨区","code":"370215","parentId":"1358"},{"id":"1366","name":"胶州市","code":"370281","parentId":"1358"},{"id":"1367","name":"平度市","code":"370283","parentId":"1358"},{"id":"1368","name":"莱西市","code":"370285","parentId":"1358"}]},{"id":"1369","name":"淄博市","code":"370300","parentId":"1346","children":[{"id":"1370","name":"淄川区","code":"370302","parentId":"1369"},{"id":"1371","name":"张店区","code":"370303","parentId":"1369"},{"id":"1372","name":"博山区","code":"370304","parentId":"1369"},{"id":"1373","name":"临淄区","code":"370305","parentId":"1369"},{"id":"1374","name":"周村区","code":"370306","parentId":"1369"},{"id":"1375","name":"桓台县","code":"370321","parentId":"1369"},{"id":"1376","name":"高青县","code":"370322","parentId":"1369"},{"id":"1377","name":"沂源县","code":"370323","parentId":"1369"}]},{"id":"1378","name":"枣庄市","code":"370400","parentId":"1346","children":[{"id":"1379","name":"市中区","code":"370402","parentId":"1378"},{"id":"1380","name":"薛城区","code":"370403","parentId":"1378"},{"id":"1381","name":"峄城区","code":"370404","parentId":"1378"},{"id":"1382","name":"台儿庄区","code":"370405","parentId":"1378"},{"id":"1383","name":"山亭区","code":"370406","parentId":"1378"},{"id":"1384","name":"滕州市","code":"370481","parentId":"1378"}]},{"id":"1385","name":"东营市","code":"370500","parentId":"1346","children":[{"id":"1386","name":"东营区","code":"370502","parentId":"1385"},{"id":"1387","name":"河口区","code":"370503","parentId":"1385"},{"id":"1388","name":"垦利区","code":"370505","parentId":"1385"},{"id":"1389","name":"利津县","code":"370522","parentId":"1385"},{"id":"1390","name":"广饶县","code":"370523","parentId":"1385"}]},{"id":"1391","name":"烟台市","code":"370600","parentId":"1346","children":[{"id":"1392","name":"芝罘区","code":"370602","parentId":"1391"},{"id":"1393","name":"福山区","code":"370611","parentId":"1391"},{"id":"1394","name":"牟平区","code":"370612","parentId":"1391"},{"id":"1395","name":"莱山区","code":"370613","parentId":"1391"},{"id":"1396","name":"长岛县","code":"370634","parentId":"1391"},{"id":"1397","name":"龙口市","code":"370681","parentId":"1391"},{"id":"1398","name":"莱阳市","code":"370682","parentId":"1391"},{"id":"1399","name":"莱州市","code":"370683","parentId":"1391"},{"id":"1400","name":"蓬莱市","code":"370684","parentId":"1391"},{"id":"1401","name":"招远市","code":"370685","parentId":"1391"},{"id":"1402","name":"栖霞市","code":"370686","parentId":"1391"},{"id":"1403","name":"海阳市","code":"370687","parentId":"1391"}]},{"id":"1404","name":"潍坊市","code":"370700","parentId":"1346","children":[{"id":"1405","name":"潍城区","code":"370702","parentId":"1404"},{"id":"1406","name":"寒亭区","code":"370703","parentId":"1404"},{"id":"1407","name":"坊子区","code":"370704","parentId":"1404"},{"id":"1408","name":"奎文区","code":"370705","parentId":"1404"},{"id":"1409","name":"临朐县","code":"370724","parentId":"1404"},{"id":"1410","name":"昌乐县","code":"370725","parentId":"1404"},{"id":"1411","name":"青州市","code":"370781","parentId":"1404"},{"id":"1412","name":"诸城市","code":"370782","parentId":"1404"},{"id":"1413","name":"寿光市","code":"370783","parentId":"1404"},{"id":"1414","name":"安丘市","code":"370784","parentId":"1404"},{"id":"1415","name":"高密市","code":"370785","parentId":"1404"},{"id":"1416","name":"昌邑市","code":"370786","parentId":"1404"}]},{"id":"1417","name":"济宁市","code":"370800","parentId":"1346","children":[{"id":"1418","name":"任城区","code":"370811","parentId":"1417"},{"id":"1419","name":"兖州区","code":"370812","parentId":"1417"},{"id":"1420","name":"微山县","code":"370826","parentId":"1417"},{"id":"1421","name":"鱼台县","code":"370827","parentId":"1417"},{"id":"1422","name":"金乡县","code":"370828","parentId":"1417"},{"id":"1423","name":"嘉祥县","code":"370829","parentId":"1417"},{"id":"1424","name":"汶上县","code":"370830","parentId":"1417"},{"id":"1425","name":"泗水县","code":"370831","parentId":"1417"},{"id":"1426","name":"梁山县","code":"370832","parentId":"1417"},{"id":"1427","name":"曲阜市","code":"370881","parentId":"1417"},{"id":"1428","name":"邹城市","code":"370883","parentId":"1417"}]},{"id":"1429","name":"泰安市","code":"370900","parentId":"1346","children":[{"id":"1430","name":"泰山区","code":"370902","parentId":"1429"},{"id":"1431","name":"岱岳区","code":"370911","parentId":"1429"},{"id":"1432","name":"宁阳县","code":"370921","parentId":"1429"},{"id":"1433","name":"东平县","code":"370923","parentId":"1429"},{"id":"1434","name":"新泰市","code":"370982","parentId":"1429"},{"id":"1435","name":"肥城市","code":"370983","parentId":"1429"}]},{"id":"1436","name":"威海市","code":"371000","parentId":"1346","children":[{"id":"1437","name":"环翠区","code":"371002","parentId":"1436"},{"id":"1438","name":"文登区","code":"371003","parentId":"1436"},{"id":"1439","name":"荣成市","code":"371082","parentId":"1436"},{"id":"1440","name":"乳山市","code":"371083","parentId":"1436"}]},{"id":"1441","name":"日照市","code":"371100","parentId":"1346","children":[{"id":"1442","name":"东港区","code":"371102","parentId":"1441"},{"id":"1443","name":"岚山区","code":"371103","parentId":"1441"},{"id":"1444","name":"五莲县","code":"371121","parentId":"1441"},{"id":"1445","name":"莒县","code":"371122","parentId":"1441"}]},{"id":"1446","name":"莱芜市","code":"371200","parentId":"1346","children":[{"id":"1447","name":"莱城区","code":"371202","parentId":"1446"},{"id":"1448","name":"钢城区","code":"371203","parentId":"1446"}]},{"id":"1449","name":"临沂市","code":"371300","parentId":"1346","children":[{"id":"1450","name":"兰山区","code":"371302","parentId":"1449"},{"id":"1451","name":"罗庄区","code":"371311","parentId":"1449"},{"id":"1452","name":"河东区","code":"371312","parentId":"1449"},{"id":"1453","name":"沂南县","code":"371321","parentId":"1449"},{"id":"1454","name":"郯城县","code":"371322","parentId":"1449"},{"id":"1455","name":"沂水县","code":"371323","parentId":"1449"},{"id":"1456","name":"兰陵县","code":"371324","parentId":"1449"},{"id":"1457","name":"费县","code":"371325","parentId":"1449"},{"id":"1458","name":"平邑县","code":"371326","parentId":"1449"},{"id":"1459","name":"莒南县","code":"371327","parentId":"1449"},{"id":"1460","name":"蒙阴县","code":"371328","parentId":"1449"},{"id":"1461","name":"临沭县","code":"371329","parentId":"1449"}]},{"id":"1462","name":"德州市","code":"371400","parentId":"1346","children":[{"id":"1463","name":"德城区","code":"371402","parentId":"1462"},{"id":"1464","name":"陵城区","code":"371403","parentId":"1462"},{"id":"1465","name":"宁津县","code":"371422","parentId":"1462"},{"id":"1466","name":"庆云县","code":"371423","parentId":"1462"},{"id":"1467","name":"临邑县","code":"371424","parentId":"1462"},{"id":"1468","name":"齐河县","code":"371425","parentId":"1462"},{"id":"1469","name":"平原县","code":"371426","parentId":"1462"},{"id":"1470","name":"夏津县","code":"371427","parentId":"1462"},{"id":"1471","name":"武城县","code":"371428","parentId":"1462"},{"id":"1472","name":"乐陵市","code":"371481","parentId":"1462"},{"id":"1473","name":"禹城市","code":"371482","parentId":"1462"}]},{"id":"1474","name":"聊城市","code":"371500","parentId":"1346","children":[{"id":"1475","name":"东昌府区","code":"371502","parentId":"1474"},{"id":"1476","name":"阳谷县","code":"371521","parentId":"1474"},{"id":"1477","name":"莘县","code":"371522","parentId":"1474"},{"id":"1478","name":"茌平县","code":"371523","parentId":"1474"},{"id":"1479","name":"东阿县","code":"371524","parentId":"1474"},{"id":"1480","name":"冠县","code":"371525","parentId":"1474"},{"id":"1481","name":"高唐县","code":"371526","parentId":"1474"},{"id":"1482","name":"临清市","code":"371581","parentId":"1474"}]},{"id":"1483","name":"滨州市","code":"371600","parentId":"1346","children":[{"id":"1484","name":"滨城区","code":"371602","parentId":"1483"},{"id":"1485","name":"沾化区","code":"371603","parentId":"1483"},{"id":"1486","name":"惠民县","code":"371621","parentId":"1483"},{"id":"1487","name":"阳信县","code":"371622","parentId":"1483"},{"id":"1488","name":"无棣县","code":"371623","parentId":"1483"},{"id":"1489","name":"博兴县","code":"371625","parentId":"1483"},{"id":"1490","name":"邹平县","code":"371626","parentId":"1483"}]},{"id":"1491","name":"菏泽市","code":"371700","parentId":"1346","children":[{"id":"1492","name":"牡丹区","code":"371702","parentId":"1491"},{"id":"1493","name":"定陶区","code":"371703","parentId":"1491"},{"id":"1494","name":"曹县","code":"371721","parentId":"1491"},{"id":"1495","name":"单县","code":"371722","parentId":"1491"},{"id":"1496","name":"成武县","code":"371723","parentId":"1491"},{"id":"1497","name":"巨野县","code":"371724","parentId":"1491"},{"id":"1498","name":"郓城县","code":"371725","parentId":"1491"},{"id":"1499","name":"鄄城县","code":"371726","parentId":"1491"},{"id":"1500","name":"东明县","code":"371728","parentId":"1491"}]}]},{"id":"1501","name":"河南省","code":"410000","parentId":"0","children":[{"id":"1502","name":"郑州市","code":"410100","parentId":"1501","children":[{"id":"1503","name":"中原区","code":"410102","parentId":"1502"},{"id":"1504","name":"二七区","code":"410103","parentId":"1502"},{"id":"1505","name":"管城回族区","code":"410104","parentId":"1502"},{"id":"1506","name":"金水区","code":"410105","parentId":"1502"},{"id":"1507","name":"上街区","code":"410106","parentId":"1502"},{"id":"1508","name":"惠济区","code":"410108","parentId":"1502"},{"id":"1509","name":"中牟县","code":"410122","parentId":"1502"},{"id":"1510","name":"巩义市","code":"410181","parentId":"1502"},{"id":"1511","name":"荥阳市","code":"410182","parentId":"1502"},{"id":"1512","name":"新密市","code":"410183","parentId":"1502"},{"id":"1513","name":"新郑市","code":"410184","parentId":"1502"},{"id":"1514","name":"登封市","code":"410185","parentId":"1502"}]},{"id":"1515","name":"开封市","code":"410200","parentId":"1501","children":[{"id":"1516","name":"龙亭区","code":"410202","parentId":"1515"},{"id":"1517","name":"顺河回族区","code":"410203","parentId":"1515"},{"id":"1518","name":"鼓楼区","code":"410204","parentId":"1515"},{"id":"1519","name":"禹王台区","code":"410205","parentId":"1515"},{"id":"1520","name":"祥符区","code":"410212","parentId":"1515"},{"id":"1521","name":"杞县","code":"410221","parentId":"1515"},{"id":"1522","name":"通许县","code":"410222","parentId":"1515"},{"id":"1523","name":"尉氏县","code":"410223","parentId":"1515"},{"id":"1524","name":"兰考县","code":"410225","parentId":"1515"}]},{"id":"1525","name":"洛阳市","code":"410300","parentId":"1501","children":[{"id":"1526","name":"老城区","code":"410302","parentId":"1525"},{"id":"1527","name":"西工区","code":"410303","parentId":"1525"},{"id":"1528","name":"瀍河回族区","code":"410304","parentId":"1525"},{"id":"1529","name":"涧西区","code":"410305","parentId":"1525"},{"id":"1530","name":"吉利区","code":"410306","parentId":"1525"},{"id":"1531","name":"洛龙区","code":"410311","parentId":"1525"},{"id":"1532","name":"孟津县","code":"410322","parentId":"1525"},{"id":"1533","name":"新安县","code":"410323","parentId":"1525"},{"id":"1534","name":"栾川县","code":"410324","parentId":"1525"},{"id":"1535","name":"嵩县","code":"410325","parentId":"1525"},{"id":"1536","name":"汝阳县","code":"410326","parentId":"1525"},{"id":"1537","name":"宜阳县","code":"410327","parentId":"1525"},{"id":"1538","name":"洛宁县","code":"410328","parentId":"1525"},{"id":"1539","name":"伊川县","code":"410329","parentId":"1525"},{"id":"1540","name":"偃师市","code":"410381","parentId":"1525"}]},{"id":"1541","name":"平顶山市","code":"410400","parentId":"1501","children":[{"id":"1542","name":"新华区","code":"410402","parentId":"1541"},{"id":"1543","name":"卫东区","code":"410403","parentId":"1541"},{"id":"1544","name":"石龙区","code":"410404","parentId":"1541"},{"id":"1545","name":"湛河区","code":"410411","parentId":"1541"},{"id":"1546","name":"宝丰县","code":"410421","parentId":"1541"},{"id":"1547","name":"叶县","code":"410422","parentId":"1541"},{"id":"1548","name":"鲁山县","code":"410423","parentId":"1541"},{"id":"1549","name":"郏县","code":"410425","parentId":"1541"},{"id":"1550","name":"舞钢市","code":"410481","parentId":"1541"},{"id":"1551","name":"汝州市","code":"410482","parentId":"1541"}]},{"id":"1552","name":"安阳市","code":"410500","parentId":"1501","children":[{"id":"1553","name":"文峰区","code":"410502","parentId":"1552"},{"id":"1554","name":"北关区","code":"410503","parentId":"1552"},{"id":"1555","name":"殷都区","code":"410505","parentId":"1552"},{"id":"1556","name":"龙安区","code":"410506","parentId":"1552"},{"id":"1557","name":"安阳县","code":"410522","parentId":"1552"},{"id":"1558","name":"汤阴县","code":"410523","parentId":"1552"},{"id":"1559","name":"滑县","code":"410526","parentId":"1552"},{"id":"1560","name":"内黄县","code":"410527","parentId":"1552"},{"id":"1561","name":"林州市","code":"410581","parentId":"1552"}]},{"id":"1562","name":"鹤壁市","code":"410600","parentId":"1501","children":[{"id":"1563","name":"鹤山区","code":"410602","parentId":"1562"},{"id":"1564","name":"山城区","code":"410603","parentId":"1562"},{"id":"1565","name":"淇滨区","code":"410611","parentId":"1562"},{"id":"1566","name":"浚县","code":"410621","parentId":"1562"},{"id":"1567","name":"淇县","code":"410622","parentId":"1562"}]},{"id":"1568","name":"新乡市","code":"410700","parentId":"1501","children":[{"id":"1569","name":"红旗区","code":"410702","parentId":"1568"},{"id":"1570","name":"卫滨区","code":"410703","parentId":"1568"},{"id":"1571","name":"凤泉区","code":"410704","parentId":"1568"},{"id":"1572","name":"牧野区","code":"410711","parentId":"1568"},{"id":"1573","name":"新乡县","code":"410721","parentId":"1568"},{"id":"1574","name":"获嘉县","code":"410724","parentId":"1568"},{"id":"1575","name":"原阳县","code":"410725","parentId":"1568"},{"id":"1576","name":"延津县","code":"410726","parentId":"1568"},{"id":"1577","name":"封丘县","code":"410727","parentId":"1568"},{"id":"1578","name":"长垣县","code":"410728","parentId":"1568"},{"id":"1579","name":"卫辉市","code":"410781","parentId":"1568"},{"id":"1580","name":"辉县市","code":"410782","parentId":"1568"}]},{"id":"1581","name":"焦作市","code":"410800","parentId":"1501","children":[{"id":"1582","name":"解放区","code":"410802","parentId":"1581"},{"id":"1583","name":"中站区","code":"410803","parentId":"1581"},{"id":"1584","name":"马村区","code":"410804","parentId":"1581"},{"id":"1585","name":"山阳区","code":"410811","parentId":"1581"},{"id":"1586","name":"修武县","code":"410821","parentId":"1581"},{"id":"1587","name":"博爱县","code":"410822","parentId":"1581"},{"id":"1588","name":"武陟县","code":"410823","parentId":"1581"},{"id":"1589","name":"温县","code":"410825","parentId":"1581"},{"id":"1590","name":"沁阳市","code":"410882","parentId":"1581"},{"id":"1591","name":"孟州市","code":"410883","parentId":"1581"}]},{"id":"1592","name":"濮阳市","code":"410900","parentId":"1501","children":[{"id":"1593","name":"华龙区","code":"410902","parentId":"1592"},{"id":"1594","name":"清丰县","code":"410922","parentId":"1592"},{"id":"1595","name":"南乐县","code":"410923","parentId":"1592"},{"id":"1596","name":"范县","code":"410926","parentId":"1592"},{"id":"1597","name":"台前县","code":"410927","parentId":"1592"},{"id":"1598","name":"濮阳县","code":"410928","parentId":"1592"}]},{"id":"1599","name":"许昌市","code":"411000","parentId":"1501","children":[{"id":"1600","name":"魏都区","code":"411002","parentId":"1599"},{"id":"1601","name":"建安区","code":"411003","parentId":"1599"},{"id":"1602","name":"鄢陵县","code":"411024","parentId":"1599"},{"id":"1603","name":"襄城县","code":"411025","parentId":"1599"},{"id":"1604","name":"禹州市","code":"411081","parentId":"1599"},{"id":"1605","name":"长葛市","code":"411082","parentId":"1599"}]},{"id":"1606","name":"漯河市","code":"411100","parentId":"1501","children":[{"id":"1607","name":"源汇区","code":"411102","parentId":"1606"},{"id":"1608","name":"郾城区","code":"411103","parentId":"1606"},{"id":"1609","name":"召陵区","code":"411104","parentId":"1606"},{"id":"1610","name":"舞阳县","code":"411121","parentId":"1606"},{"id":"1611","name":"临颍县","code":"411122","parentId":"1606"}]},{"id":"1612","name":"三门峡市","code":"411200","parentId":"1501","children":[{"id":"1613","name":"湖滨区","code":"411202","parentId":"1612"},{"id":"1614","name":"陕州区","code":"411203","parentId":"1612"},{"id":"1615","name":"渑池县","code":"411221","parentId":"1612"},{"id":"1616","name":"卢氏县","code":"411224","parentId":"1612"},{"id":"1617","name":"义马市","code":"411281","parentId":"1612"},{"id":"1618","name":"灵宝市","code":"411282","parentId":"1612"}]},{"id":"1619","name":"南阳市","code":"411300","parentId":"1501","children":[{"id":"1620","name":"宛城区","code":"411302","parentId":"1619"},{"id":"1621","name":"卧龙区","code":"411303","parentId":"1619"},{"id":"1622","name":"南召县","code":"411321","parentId":"1619"},{"id":"1623","name":"方城县","code":"411322","parentId":"1619"},{"id":"1624","name":"西峡县","code":"411323","parentId":"1619"},{"id":"1625","name":"镇平县","code":"411324","parentId":"1619"},{"id":"1626","name":"内乡县","code":"411325","parentId":"1619"},{"id":"1627","name":"淅川县","code":"411326","parentId":"1619"},{"id":"1628","name":"社旗县","code":"411327","parentId":"1619"},{"id":"1629","name":"唐河县","code":"411328","parentId":"1619"},{"id":"1630","name":"新野县","code":"411329","parentId":"1619"},{"id":"1631","name":"桐柏县","code":"411330","parentId":"1619"},{"id":"1632","name":"邓州市","code":"411381","parentId":"1619"}]},{"id":"1633","name":"商丘市","code":"411400","parentId":"1501","children":[{"id":"1634","name":"梁园区","code":"411402","parentId":"1633"},{"id":"1635","name":"睢阳区","code":"411403","parentId":"1633"},{"id":"1636","name":"民权县","code":"411421","parentId":"1633"},{"id":"1637","name":"睢县","code":"411422","parentId":"1633"},{"id":"1638","name":"宁陵县","code":"411423","parentId":"1633"},{"id":"1639","name":"柘城县","code":"411424","parentId":"1633"},{"id":"1640","name":"虞城县","code":"411425","parentId":"1633"},{"id":"1641","name":"夏邑县","code":"411426","parentId":"1633"},{"id":"1642","name":"永城市","code":"411481","parentId":"1633"}]},{"id":"1643","name":"信阳市","code":"411500","parentId":"1501","children":[{"id":"1644","name":"浉河区","code":"411502","parentId":"1643"},{"id":"1645","name":"平桥区","code":"411503","parentId":"1643"},{"id":"1646","name":"罗山县","code":"411521","parentId":"1643"},{"id":"1647","name":"光山县","code":"411522","parentId":"1643"},{"id":"1648","name":"新县","code":"411523","parentId":"1643"},{"id":"1649","name":"商城县","code":"411524","parentId":"1643"},{"id":"1650","name":"固始县","code":"411525","parentId":"1643"},{"id":"1651","name":"潢川县","code":"411526","parentId":"1643"},{"id":"1652","name":"淮滨县","code":"411527","parentId":"1643"},{"id":"1653","name":"息县","code":"411528","parentId":"1643"}]},{"id":"1654","name":"周口市","code":"411600","parentId":"1501","children":[{"id":"1655","name":"川汇区","code":"411602","parentId":"1654"},{"id":"1656","name":"扶沟县","code":"411621","parentId":"1654"},{"id":"1657","name":"西华县","code":"411622","parentId":"1654"},{"id":"1658","name":"商水县","code":"411623","parentId":"1654"},{"id":"1659","name":"沈丘县","code":"411624","parentId":"1654"},{"id":"1660","name":"郸城县","code":"411625","parentId":"1654"},{"id":"1661","name":"淮阳县","code":"411626","parentId":"1654"},{"id":"1662","name":"太康县","code":"411627","parentId":"1654"},{"id":"1663","name":"鹿邑县","code":"411628","parentId":"1654"},{"id":"1664","name":"项城市","code":"411681","parentId":"1654"}]},{"id":"1665","name":"驻马店市","code":"411700","parentId":"1501","children":[{"id":"1666","name":"驿城区","code":"411702","parentId":"1665"},{"id":"1667","name":"西平县","code":"411721","parentId":"1665"},{"id":"1668","name":"上蔡县","code":"411722","parentId":"1665"},{"id":"1669","name":"平舆县","code":"411723","parentId":"1665"},{"id":"1670","name":"正阳县","code":"411724","parentId":"1665"},{"id":"1671","name":"确山县","code":"411725","parentId":"1665"},{"id":"1672","name":"泌阳县","code":"411726","parentId":"1665"},{"id":"1673","name":"汝南县","code":"411727","parentId":"1665"},{"id":"1674","name":"遂平县","code":"411728","parentId":"1665"},{"id":"1675","name":"新蔡县","code":"411729","parentId":"1665"}]},{"id":"1676","name":"济源市","code":"419001","parentId":"1501","children":[{"id":"3465","name":"辖区","code":"-1","parentId":"1676"}]}]},{"id":"1677","name":"湖北省","code":"420000","parentId":"0","children":[{"id":"1678","name":"武汉市","code":"420100","parentId":"1677","children":[{"id":"1679","name":"江岸区","code":"420102","parentId":"1678"},{"id":"1680","name":"江汉区","code":"420103","parentId":"1678"},{"id":"1681","name":"硚口区","code":"420104","parentId":"1678"},{"id":"1682","name":"汉阳区","code":"420105","parentId":"1678"},{"id":"1683","name":"武昌区","code":"420106","parentId":"1678"},{"id":"1684","name":"青山区","code":"420107","parentId":"1678"},{"id":"1685","name":"洪山区","code":"420111","parentId":"1678"},{"id":"1686","name":"东西湖区","code":"420112","parentId":"1678"},{"id":"1687","name":"汉南区","code":"420113","parentId":"1678"},{"id":"1688","name":"蔡甸区","code":"420114","parentId":"1678"},{"id":"1689","name":"江夏区","code":"420115","parentId":"1678"},{"id":"1690","name":"黄陂区","code":"420116","parentId":"1678"},{"id":"1691","name":"新洲区","code":"420117","parentId":"1678"}]},{"id":"1692","name":"黄石市","code":"420200","parentId":"1677","children":[{"id":"1693","name":"黄石港区","code":"420202","parentId":"1692"},{"id":"1694","name":"西塞山区","code":"420203","parentId":"1692"},{"id":"1695","name":"下陆区","code":"420204","parentId":"1692"},{"id":"1696","name":"铁山区","code":"420205","parentId":"1692"},{"id":"1697","name":"阳新县","code":"420222","parentId":"1692"},{"id":"1698","name":"大冶市","code":"420281","parentId":"1692"}]},{"id":"1699","name":"十堰市","code":"420300","parentId":"1677","children":[{"id":"1700","name":"茅箭区","code":"420302","parentId":"1699"},{"id":"1701","name":"张湾区","code":"420303","parentId":"1699"},{"id":"1702","name":"郧阳区","code":"420304","parentId":"1699"},{"id":"1703","name":"郧西县","code":"420322","parentId":"1699"},{"id":"1704","name":"竹山县","code":"420323","parentId":"1699"},{"id":"1705","name":"竹溪县","code":"420324","parentId":"1699"},{"id":"1706","name":"房县","code":"420325","parentId":"1699"},{"id":"1707","name":"丹江口市","code":"420381","parentId":"1699"}]},{"id":"1708","name":"宜昌市","code":"420500","parentId":"1677","children":[{"id":"1709","name":"西陵区","code":"420502","parentId":"1708"},{"id":"1710","name":"伍家岗区","code":"420503","parentId":"1708"},{"id":"1711","name":"点军区","code":"420504","parentId":"1708"},{"id":"1712","name":"猇亭区","code":"420505","parentId":"1708"},{"id":"1713","name":"夷陵区","code":"420506","parentId":"1708"},{"id":"1714","name":"远安县","code":"420525","parentId":"1708"},{"id":"1715","name":"兴山县","code":"420526","parentId":"1708"},{"id":"1716","name":"秭归县","code":"420527","parentId":"1708"},{"id":"1717","name":"长阳土家族自治县","code":"420528","parentId":"1708"},{"id":"1718","name":"五峰土家族自治县","code":"420529","parentId":"1708"},{"id":"1719","name":"宜都市","code":"420581","parentId":"1708"},{"id":"1720","name":"当阳市","code":"420582","parentId":"1708"},{"id":"1721","name":"枝江市","code":"420583","parentId":"1708"}]},{"id":"1722","name":"襄阳市","code":"420600","parentId":"1677","children":[{"id":"1723","name":"襄城区","code":"420602","parentId":"1722"},{"id":"1724","name":"樊城区","code":"420606","parentId":"1722"},{"id":"1725","name":"襄州区","code":"420607","parentId":"1722"},{"id":"1726","name":"南漳县","code":"420624","parentId":"1722"},{"id":"1727","name":"谷城县","code":"420625","parentId":"1722"},{"id":"1728","name":"保康县","code":"420626","parentId":"1722"},{"id":"1729","name":"老河口市","code":"420682","parentId":"1722"},{"id":"1730","name":"枣阳市","code":"420683","parentId":"1722"},{"id":"1731","name":"宜城市","code":"420684","parentId":"1722"}]},{"id":"1732","name":"鄂州市","code":"420700","parentId":"1677","children":[{"id":"1733","name":"梁子湖区","code":"420702","parentId":"1732"},{"id":"1734","name":"华容区","code":"420703","parentId":"1732"},{"id":"1735","name":"鄂城区","code":"420704","parentId":"1732"}]},{"id":"1736","name":"荆门市","code":"420800","parentId":"1677","children":[{"id":"1737","name":"东宝区","code":"420802","parentId":"1736"},{"id":"1738","name":"掇刀区","code":"420804","parentId":"1736"},{"id":"1739","name":"京山县","code":"420821","parentId":"1736"},{"id":"1740","name":"沙洋县","code":"420822","parentId":"1736"},{"id":"1741","name":"钟祥市","code":"420881","parentId":"1736"}]},{"id":"1742","name":"孝感市","code":"420900","parentId":"1677","children":[{"id":"1743","name":"孝南区","code":"420902","parentId":"1742"},{"id":"1744","name":"孝昌县","code":"420921","parentId":"1742"},{"id":"1745","name":"大悟县","code":"420922","parentId":"1742"},{"id":"1746","name":"云梦县","code":"420923","parentId":"1742"},{"id":"1747","name":"应城市","code":"420981","parentId":"1742"},{"id":"1748","name":"安陆市","code":"420982","parentId":"1742"},{"id":"1749","name":"汉川市","code":"420984","parentId":"1742"}]},{"id":"1750","name":"荆州市","code":"421000","parentId":"1677","children":[{"id":"1751","name":"沙市区","code":"421002","parentId":"1750"},{"id":"1752","name":"荆州区","code":"421003","parentId":"1750"},{"id":"1753","name":"公安县","code":"421022","parentId":"1750"},{"id":"1754","name":"监利县","code":"421023","parentId":"1750"},{"id":"1755","name":"江陵县","code":"421024","parentId":"1750"},{"id":"1756","name":"石首市","code":"421081","parentId":"1750"},{"id":"1757","name":"洪湖市","code":"421083","parentId":"1750"},{"id":"1758","name":"松滋市","code":"421087","parentId":"1750"}]},{"id":"1759","name":"黄冈市","code":"421100","parentId":"1677","children":[{"id":"1760","name":"黄州区","code":"421102","parentId":"1759"},{"id":"1761","name":"团风县","code":"421121","parentId":"1759"},{"id":"1762","name":"红安县","code":"421122","parentId":"1759"},{"id":"1763","name":"罗田县","code":"421123","parentId":"1759"},{"id":"1764","name":"英山县","code":"421124","parentId":"1759"},{"id":"1765","name":"浠水县","code":"421125","parentId":"1759"},{"id":"1766","name":"蕲春县","code":"421126","parentId":"1759"},{"id":"1767","name":"黄梅县","code":"421127","parentId":"1759"},{"id":"1768","name":"麻城市","code":"421181","parentId":"1759"},{"id":"1769","name":"武穴市","code":"421182","parentId":"1759"}]},{"id":"1770","name":"咸宁市","code":"421200","parentId":"1677","children":[{"id":"1771","name":"咸安区","code":"421202","parentId":"1770"},{"id":"1772","name":"嘉鱼县","code":"421221","parentId":"1770"},{"id":"1773","name":"通城县","code":"421222","parentId":"1770"},{"id":"1774","name":"崇阳县","code":"421223","parentId":"1770"},{"id":"1775","name":"通山县","code":"421224","parentId":"1770"},{"id":"1776","name":"赤壁市","code":"421281","parentId":"1770"}]},{"id":"1777","name":"随州市","code":"421300","parentId":"1677","children":[{"id":"1778","name":"曾都区","code":"421303","parentId":"1777"},{"id":"1779","name":"随县","code":"421321","parentId":"1777"},{"id":"1780","name":"广水市","code":"421381","parentId":"1777"}]},{"id":"1781","name":"恩施土家族苗族自治州","code":"422800","parentId":"1677","children":[{"id":"1782","name":"恩施市","code":"422801","parentId":"1781"},{"id":"1783","name":"利川市","code":"422802","parentId":"1781"},{"id":"1784","name":"建始县","code":"422822","parentId":"1781"},{"id":"1785","name":"巴东县","code":"422823","parentId":"1781"},{"id":"1786","name":"宣恩县","code":"422825","parentId":"1781"},{"id":"1787","name":"咸丰县","code":"422826","parentId":"1781"},{"id":"1788","name":"来凤县","code":"422827","parentId":"1781"},{"id":"1789","name":"鹤峰县","code":"422828","parentId":"1781"}]},{"id":"1790","name":"仙桃市","code":"429004","parentId":"1677","children":[{"id":"3466","name":"辖区","code":"-1","parentId":"1790"}]},{"id":"1791","name":"潜江市","code":"429005","parentId":"1677","children":[{"id":"3467","name":"辖区","code":"-1","parentId":"1791"}]},{"id":"1792","name":"天门市","code":"429006","parentId":"1677","children":[{"id":"3468","name":"辖区","code":"-1","parentId":"1792"}]},{"id":"1793","name":"神农架林区","code":"429021","parentId":"1677","children":[{"id":"3469","name":"辖区","code":"-1","parentId":"1793"}]}]},{"id":"1794","name":"湖南省","code":"430000","parentId":"0","children":[{"id":"1795","name":"长沙市","code":"430100","parentId":"1794","children":[{"id":"1796","name":"芙蓉区","code":"430102","parentId":"1795"},{"id":"1797","name":"天心区","code":"430103","parentId":"1795"},{"id":"1798","name":"岳麓区","code":"430104","parentId":"1795"},{"id":"1799","name":"开福区","code":"430105","parentId":"1795"},{"id":"1800","name":"雨花区","code":"430111","parentId":"1795"},{"id":"1801","name":"望城区","code":"430112","parentId":"1795"},{"id":"1802","name":"长沙县","code":"430121","parentId":"1795"},{"id":"1803","name":"浏阳市","code":"430181","parentId":"1795"},{"id":"1804","name":"宁乡市","code":"430182","parentId":"1795"}]},{"id":"1805","name":"株洲市","code":"430200","parentId":"1794","children":[{"id":"1806","name":"荷塘区","code":"430202","parentId":"1805"},{"id":"1807","name":"芦淞区","code":"430203","parentId":"1805"},{"id":"1808","name":"石峰区","code":"430204","parentId":"1805"},{"id":"1809","name":"天元区","code":"430211","parentId":"1805"},{"id":"1810","name":"株洲县","code":"430221","parentId":"1805"},{"id":"1811","name":"攸县","code":"430223","parentId":"1805"},{"id":"1812","name":"茶陵县","code":"430224","parentId":"1805"},{"id":"1813","name":"炎陵县","code":"430225","parentId":"1805"},{"id":"1814","name":"醴陵市","code":"430281","parentId":"1805"}]},{"id":"1815","name":"湘潭市","code":"430300","parentId":"1794","children":[{"id":"1816","name":"雨湖区","code":"430302","parentId":"1815"},{"id":"1817","name":"岳塘区","code":"430304","parentId":"1815"},{"id":"1818","name":"湘潭县","code":"430321","parentId":"1815"},{"id":"1819","name":"湘乡市","code":"430381","parentId":"1815"},{"id":"1820","name":"韶山市","code":"430382","parentId":"1815"}]},{"id":"1821","name":"衡阳市","code":"430400","parentId":"1794","children":[{"id":"1822","name":"珠晖区","code":"430405","parentId":"1821"},{"id":"1823","name":"雁峰区","code":"430406","parentId":"1821"},{"id":"1824","name":"石鼓区","code":"430407","parentId":"1821"},{"id":"1825","name":"蒸湘区","code":"430408","parentId":"1821"},{"id":"1826","name":"南岳区","code":"430412","parentId":"1821"},{"id":"1827","name":"衡阳县","code":"430421","parentId":"1821"},{"id":"1828","name":"衡南县","code":"430422","parentId":"1821"},{"id":"1829","name":"衡山县","code":"430423","parentId":"1821"},{"id":"1830","name":"衡东县","code":"430424","parentId":"1821"},{"id":"1831","name":"祁东县","code":"430426","parentId":"1821"},{"id":"1832","name":"耒阳市","code":"430481","parentId":"1821"},{"id":"1833","name":"常宁市","code":"430482","parentId":"1821"}]},{"id":"1834","name":"邵阳市","code":"430500","parentId":"1794","children":[{"id":"1835","name":"双清区","code":"430502","parentId":"1834"},{"id":"1836","name":"大祥区","code":"430503","parentId":"1834"},{"id":"1837","name":"北塔区","code":"430511","parentId":"1834"},{"id":"1838","name":"邵东县","code":"430521","parentId":"1834"},{"id":"1839","name":"新邵县","code":"430522","parentId":"1834"},{"id":"1840","name":"邵阳县","code":"430523","parentId":"1834"},{"id":"1841","name":"隆回县","code":"430524","parentId":"1834"},{"id":"1842","name":"洞口县","code":"430525","parentId":"1834"},{"id":"1843","name":"绥宁县","code":"430527","parentId":"1834"},{"id":"1844","name":"新宁县","code":"430528","parentId":"1834"},{"id":"1845","name":"城步苗族自治县","code":"430529","parentId":"1834"},{"id":"1846","name":"武冈市","code":"430581","parentId":"1834"}]},{"id":"1847","name":"岳阳市","code":"430600","parentId":"1794","children":[{"id":"1848","name":"岳阳楼区","code":"430602","parentId":"1847"},{"id":"1849","name":"云溪区","code":"430603","parentId":"1847"},{"id":"1850","name":"君山区","code":"430611","parentId":"1847"},{"id":"1851","name":"岳阳县","code":"430621","parentId":"1847"},{"id":"1852","name":"华容县","code":"430623","parentId":"1847"},{"id":"1853","name":"湘阴县","code":"430624","parentId":"1847"},{"id":"1854","name":"平江县","code":"430626","parentId":"1847"},{"id":"1855","name":"汨罗市","code":"430681","parentId":"1847"},{"id":"1856","name":"临湘市","code":"430682","parentId":"1847"}]},{"id":"1857","name":"常德市","code":"430700","parentId":"1794","children":[{"id":"1858","name":"武陵区","code":"430702","parentId":"1857"},{"id":"1859","name":"鼎城区","code":"430703","parentId":"1857"},{"id":"1860","name":"安乡县","code":"430721","parentId":"1857"},{"id":"1861","name":"汉寿县","code":"430722","parentId":"1857"},{"id":"1862","name":"澧县","code":"430723","parentId":"1857"},{"id":"1863","name":"临澧县","code":"430724","parentId":"1857"},{"id":"1864","name":"桃源县","code":"430725","parentId":"1857"},{"id":"1865","name":"石门县","code":"430726","parentId":"1857"},{"id":"1866","name":"津市市","code":"430781","parentId":"1857"}]},{"id":"1867","name":"张家界市","code":"430800","parentId":"1794","children":[{"id":"1868","name":"永定区","code":"430802","parentId":"1867"},{"id":"1869","name":"武陵源区","code":"430811","parentId":"1867"},{"id":"1870","name":"慈利县","code":"430821","parentId":"1867"},{"id":"1871","name":"桑植县","code":"430822","parentId":"1867"}]},{"id":"1872","name":"益阳市","code":"430900","parentId":"1794","children":[{"id":"1873","name":"资阳区","code":"430902","parentId":"1872"},{"id":"1874","name":"赫山区","code":"430903","parentId":"1872"},{"id":"1875","name":"南县","code":"430921","parentId":"1872"},{"id":"1876","name":"桃江县","code":"430922","parentId":"1872"},{"id":"1877","name":"安化县","code":"430923","parentId":"1872"},{"id":"1878","name":"沅江市","code":"430981","parentId":"1872"}]},{"id":"1879","name":"郴州市","code":"431000","parentId":"1794","children":[{"id":"1880","name":"北湖区","code":"431002","parentId":"1879"},{"id":"1881","name":"苏仙区","code":"431003","parentId":"1879"},{"id":"1882","name":"桂阳县","code":"431021","parentId":"1879"},{"id":"1883","name":"宜章县","code":"431022","parentId":"1879"},{"id":"1884","name":"永兴县","code":"431023","parentId":"1879"},{"id":"1885","name":"嘉禾县","code":"431024","parentId":"1879"},{"id":"1886","name":"临武县","code":"431025","parentId":"1879"},{"id":"1887","name":"汝城县","code":"431026","parentId":"1879"},{"id":"1888","name":"桂东县","code":"431027","parentId":"1879"},{"id":"1889","name":"安仁县","code":"431028","parentId":"1879"},{"id":"1890","name":"资兴市","code":"431081","parentId":"1879"}]},{"id":"1891","name":"永州市","code":"431100","parentId":"1794","children":[{"id":"1892","name":"零陵区","code":"431102","parentId":"1891"},{"id":"1893","name":"冷水滩区","code":"431103","parentId":"1891"},{"id":"1894","name":"祁阳县","code":"431121","parentId":"1891"},{"id":"1895","name":"东安县","code":"431122","parentId":"1891"},{"id":"1896","name":"双牌县","code":"431123","parentId":"1891"},{"id":"1897","name":"道县","code":"431124","parentId":"1891"},{"id":"1898","name":"江永县","code":"431125","parentId":"1891"},{"id":"1899","name":"宁远县","code":"431126","parentId":"1891"},{"id":"1900","name":"蓝山县","code":"431127","parentId":"1891"},{"id":"1901","name":"新田县","code":"431128","parentId":"1891"},{"id":"1902","name":"江华瑶族自治县","code":"431129","parentId":"1891"}]},{"id":"1903","name":"怀化市","code":"431200","parentId":"1794","children":[{"id":"1904","name":"鹤城区","code":"431202","parentId":"1903"},{"id":"1905","name":"中方县","code":"431221","parentId":"1903"},{"id":"1906","name":"沅陵县","code":"431222","parentId":"1903"},{"id":"1907","name":"辰溪县","code":"431223","parentId":"1903"},{"id":"1908","name":"溆浦县","code":"431224","parentId":"1903"},{"id":"1909","name":"会同县","code":"431225","parentId":"1903"},{"id":"1910","name":"麻阳苗族自治县","code":"431226","parentId":"1903"},{"id":"1911","name":"新晃侗族自治县","code":"431227","parentId":"1903"},{"id":"1912","name":"芷江侗族自治县","code":"431228","parentId":"1903"},{"id":"1913","name":"靖州苗族侗族自治县","code":"431229","parentId":"1903"},{"id":"1914","name":"通道侗族自治县","code":"431230","parentId":"1903"},{"id":"1915","name":"洪江市","code":"431281","parentId":"1903"}]},{"id":"1916","name":"娄底市","code":"431300","parentId":"1794","children":[{"id":"1917","name":"娄星区","code":"431302","parentId":"1916"},{"id":"1918","name":"双峰县","code":"431321","parentId":"1916"},{"id":"1919","name":"新化县","code":"431322","parentId":"1916"},{"id":"1920","name":"冷水江市","code":"431381","parentId":"1916"},{"id":"1921","name":"涟源市","code":"431382","parentId":"1916"}]},{"id":"1922","name":"湘西土家族苗族自治州","code":"433100","parentId":"1794","children":[{"id":"1923","name":"吉首市","code":"433101","parentId":"1922"},{"id":"1924","name":"泸溪县","code":"433122","parentId":"1922"},{"id":"1925","name":"凤凰县","code":"433123","parentId":"1922"},{"id":"1926","name":"花垣县","code":"433124","parentId":"1922"},{"id":"1927","name":"保靖县","code":"433125","parentId":"1922"},{"id":"1928","name":"古丈县","code":"433126","parentId":"1922"},{"id":"1929","name":"永顺县","code":"433127","parentId":"1922"},{"id":"1930","name":"龙山县","code":"433130","parentId":"1922"}]}]},{"id":"1931","name":"广东省","code":"440000","parentId":"0","children":[{"id":"1932","name":"广州市","code":"440100","parentId":"1931","children":[{"id":"1933","name":"荔湾区","code":"440103","parentId":"1932"},{"id":"1934","name":"越秀区","code":"440104","parentId":"1932"},{"id":"1935","name":"海珠区","code":"440105","parentId":"1932"},{"id":"1936","name":"天河区","code":"440106","parentId":"1932"},{"id":"1937","name":"白云区","code":"440111","parentId":"1932"},{"id":"1938","name":"黄埔区","code":"440112","parentId":"1932"},{"id":"1939","name":"番禺区","code":"440113","parentId":"1932"},{"id":"1940","name":"花都区","code":"440114","parentId":"1932"},{"id":"1941","name":"南沙区","code":"440115","parentId":"1932"},{"id":"1942","name":"从化区","code":"440117","parentId":"1932"},{"id":"1943","name":"增城区","code":"440118","parentId":"1932"}]},{"id":"1944","name":"韶关市","code":"440200","parentId":"1931","children":[{"id":"1945","name":"武江区","code":"440203","parentId":"1944"},{"id":"1946","name":"浈江区","code":"440204","parentId":"1944"},{"id":"1947","name":"曲江区","code":"440205","parentId":"1944"},{"id":"1948","name":"始兴县","code":"440222","parentId":"1944"},{"id":"1949","name":"仁化县","code":"440224","parentId":"1944"},{"id":"1950","name":"翁源县","code":"440229","parentId":"1944"},{"id":"1951","name":"乳源瑶族自治县","code":"440232","parentId":"1944"},{"id":"1952","name":"新丰县","code":"440233","parentId":"1944"},{"id":"1953","name":"乐昌市","code":"440281","parentId":"1944"},{"id":"1954","name":"南雄市","code":"440282","parentId":"1944"}]},{"id":"1955","name":"深圳市","code":"440300","parentId":"1931","children":[{"id":"1956","name":"罗湖区","code":"440303","parentId":"1955"},{"id":"1957","name":"福田区","code":"440304","parentId":"1955"},{"id":"1958","name":"南山区","code":"440305","parentId":"1955"},{"id":"1959","name":"宝安区","code":"440306","parentId":"1955"},{"id":"1960","name":"龙岗区","code":"440307","parentId":"1955"},{"id":"1961","name":"盐田区","code":"440308","parentId":"1955"},{"id":"1962","name":"龙华区","code":"440309","parentId":"1955"},{"id":"1963","name":"坪山区","code":"440310","parentId":"1955"},{"id":"3489","name":"光明区","code":"440311","parentId":"1955"}]},{"id":"1964","name":"珠海市","code":"440400","parentId":"1931","children":[{"id":"1965","name":"香洲区","code":"440402","parentId":"1964"},{"id":"1966","name":"斗门区","code":"440403","parentId":"1964"},{"id":"1967","name":"金湾区","code":"440404","parentId":"1964"}]},{"id":"1968","name":"汕头市","code":"440500","parentId":"1931","children":[{"id":"1969","name":"龙湖区","code":"440507","parentId":"1968"},{"id":"1970","name":"金平区","code":"440511","parentId":"1968"},{"id":"1971","name":"濠江区","code":"440512","parentId":"1968"},{"id":"1972","name":"潮阳区","code":"440513","parentId":"1968"},{"id":"1973","name":"潮南区","code":"440514","parentId":"1968"},{"id":"1974","name":"澄海区","code":"440515","parentId":"1968"},{"id":"1975","name":"南澳县","code":"440523","parentId":"1968"}]},{"id":"1976","name":"佛山市","code":"440600","parentId":"1931","children":[{"id":"1977","name":"禅城区","code":"440604","parentId":"1976"},{"id":"1978","name":"南海区","code":"440605","parentId":"1976"},{"id":"1979","name":"顺德区","code":"440606","parentId":"1976"},{"id":"1980","name":"三水区","code":"440607","parentId":"1976"},{"id":"1981","name":"高明区","code":"440608","parentId":"1976"}]},{"id":"1982","name":"江门市","code":"440700","parentId":"1931","children":[{"id":"1983","name":"蓬江区","code":"440703","parentId":"1982"},{"id":"1984","name":"江海区","code":"440704","parentId":"1982"},{"id":"1985","name":"新会区","code":"440705","parentId":"1982"},{"id":"1986","name":"台山市","code":"440781","parentId":"1982"},{"id":"1987","name":"开平市","code":"440783","parentId":"1982"},{"id":"1988","name":"鹤山市","code":"440784","parentId":"1982"},{"id":"1989","name":"恩平市","code":"440785","parentId":"1982"}]},{"id":"1990","name":"湛江市","code":"440800","parentId":"1931","children":[{"id":"1991","name":"赤坎区","code":"440802","parentId":"1990"},{"id":"1992","name":"霞山区","code":"440803","parentId":"1990"},{"id":"1993","name":"坡头区","code":"440804","parentId":"1990"},{"id":"1994","name":"麻章区","code":"440811","parentId":"1990"},{"id":"1995","name":"遂溪县","code":"440823","parentId":"1990"},{"id":"1996","name":"徐闻县","code":"440825","parentId":"1990"},{"id":"1997","name":"廉江市","code":"440881","parentId":"1990"},{"id":"1998","name":"雷州市","code":"440882","parentId":"1990"},{"id":"1999","name":"吴川市","code":"440883","parentId":"1990"}]},{"id":"2000","name":"茂名市","code":"440900","parentId":"1931","children":[{"id":"2001","name":"茂南区","code":"440902","parentId":"2000"},{"id":"2002","name":"电白区","code":"440904","parentId":"2000"},{"id":"2003","name":"高州市","code":"440981","parentId":"2000"},{"id":"2004","name":"化州市","code":"440982","parentId":"2000"},{"id":"2005","name":"信宜市","code":"440983","parentId":"2000"}]},{"id":"2006","name":"肇庆市","code":"441200","parentId":"1931","children":[{"id":"2007","name":"端州区","code":"441202","parentId":"2006"},{"id":"2008","name":"鼎湖区","code":"441203","parentId":"2006"},{"id":"2009","name":"高要区","code":"441204","parentId":"2006"},{"id":"2010","name":"广宁县","code":"441223","parentId":"2006"},{"id":"2011","name":"怀集县","code":"441224","parentId":"2006"},{"id":"2012","name":"封开县","code":"441225","parentId":"2006"},{"id":"2013","name":"德庆县","code":"441226","parentId":"2006"},{"id":"2014","name":"四会市","code":"441284","parentId":"2006"}]},{"id":"2015","name":"惠州市","code":"441300","parentId":"1931","children":[{"id":"2016","name":"惠城区","code":"441302","parentId":"2015"},{"id":"2017","name":"惠阳区","code":"441303","parentId":"2015"},{"id":"2018","name":"博罗县","code":"441322","parentId":"2015"},{"id":"2019","name":"惠东县","code":"441323","parentId":"2015"},{"id":"2020","name":"龙门县","code":"441324","parentId":"2015"}]},{"id":"2021","name":"梅州市","code":"441400","parentId":"1931","children":[{"id":"2022","name":"梅江区","code":"441402","parentId":"2021"},{"id":"2023","name":"梅县区","code":"441403","parentId":"2021"},{"id":"2024","name":"大埔县","code":"441422","parentId":"2021"},{"id":"2025","name":"丰顺县","code":"441423","parentId":"2021"},{"id":"2026","name":"五华县","code":"441424","parentId":"2021"},{"id":"2027","name":"平远县","code":"441426","parentId":"2021"},{"id":"2028","name":"蕉岭县","code":"441427","parentId":"2021"},{"id":"2029","name":"兴宁市","code":"441481","parentId":"2021"}]},{"id":"2030","name":"汕尾市","code":"441500","parentId":"1931","children":[{"id":"2031","name":"城区","code":"441502","parentId":"2030"},{"id":"2032","name":"海丰县","code":"441521","parentId":"2030"},{"id":"2033","name":"陆河县","code":"441523","parentId":"2030"},{"id":"2034","name":"陆丰市","code":"441581","parentId":"2030"}]},{"id":"2035","name":"河源市","code":"441600","parentId":"1931","children":[{"id":"2036","name":"源城区","code":"441602","parentId":"2035"},{"id":"2037","name":"紫金县","code":"441621","parentId":"2035"},{"id":"2038","name":"龙川县","code":"441622","parentId":"2035"},{"id":"2039","name":"连平县","code":"441623","parentId":"2035"},{"id":"2040","name":"和平县","code":"441624","parentId":"2035"},{"id":"2041","name":"东源县","code":"441625","parentId":"2035"}]},{"id":"2042","name":"阳江市","code":"441700","parentId":"1931","children":[{"id":"2043","name":"江城区","code":"441702","parentId":"2042"},{"id":"2044","name":"阳东区","code":"441704","parentId":"2042"},{"id":"2045","name":"阳西县","code":"441721","parentId":"2042"},{"id":"2046","name":"阳春市","code":"441781","parentId":"2042"}]},{"id":"2047","name":"清远市","code":"441800","parentId":"1931","children":[{"id":"2048","name":"清城区","code":"441802","parentId":"2047"},{"id":"2049","name":"清新区","code":"441803","parentId":"2047"},{"id":"2050","name":"佛冈县","code":"441821","parentId":"2047"},{"id":"2051","name":"阳山县","code":"441823","parentId":"2047"},{"id":"2052","name":"连山壮族瑶族自治县","code":"441825","parentId":"2047"},{"id":"2053","name":"连南瑶族自治县","code":"441826","parentId":"2047"},{"id":"2054","name":"英德市","code":"441881","parentId":"2047"},{"id":"2055","name":"连州市","code":"441882","parentId":"2047"}]},{"id":"2056","name":"东莞市","code":"441900","parentId":"1931","children":[{"id":"3449","code":"441901","name":"辖区","parentId":"2056"}]},{"id":"2057","name":"中山市","code":"442000","parentId":"1931","children":[{"id":"3450","code":"442001","name":"辖区","parentId":"2057"}]},{"id":"2058","name":"潮州市","code":"445100","parentId":"1931","children":[{"id":"2059","name":"湘桥区","code":"445102","parentId":"2058"},{"id":"2060","name":"潮安区","code":"445103","parentId":"2058"},{"id":"2061","name":"饶平县","code":"445122","parentId":"2058"}]},{"id":"2062","name":"揭阳市","code":"445200","parentId":"1931","children":[{"id":"2063","name":"榕城区","code":"445202","parentId":"2062"},{"id":"2064","name":"揭东区","code":"445203","parentId":"2062"},{"id":"2065","name":"揭西县","code":"445222","parentId":"2062"},{"id":"2066","name":"惠来县","code":"445224","parentId":"2062"},{"id":"2067","name":"普宁市","code":"445281","parentId":"2062"}]},{"id":"2068","name":"云浮市","code":"445300","parentId":"1931","children":[{"id":"2069","name":"云城区","code":"445302","parentId":"2068"},{"id":"2070","name":"云安区","code":"445303","parentId":"2068"},{"id":"2071","name":"新兴县","code":"445321","parentId":"2068"},{"id":"2072","name":"郁南县","code":"445322","parentId":"2068"},{"id":"2073","name":"罗定市","code":"445381","parentId":"2068"}]}]},{"id":"2074","name":"广西壮族自治区","code":"450000","parentId":"0","children":[{"id":"2075","name":"南宁市","code":"450100","parentId":"2074","children":[{"id":"2076","name":"兴宁区","code":"450102","parentId":"2075"},{"id":"2077","name":"青秀区","code":"450103","parentId":"2075"},{"id":"2078","name":"江南区","code":"450105","parentId":"2075"},{"id":"2079","name":"西乡塘区","code":"450107","parentId":"2075"},{"id":"2080","name":"良庆区","code":"450108","parentId":"2075"},{"id":"2081","name":"邕宁区","code":"450109","parentId":"2075"},{"id":"2082","name":"武鸣区","code":"450110","parentId":"2075"},{"id":"2083","name":"隆安县","code":"450123","parentId":"2075"},{"id":"2084","name":"马山县","code":"450124","parentId":"2075"},{"id":"2085","name":"上林县","code":"450125","parentId":"2075"},{"id":"2086","name":"宾阳县","code":"450126","parentId":"2075"},{"id":"2087","name":"横县","code":"450127","parentId":"2075"}]},{"id":"2088","name":"柳州市","code":"450200","parentId":"2074","children":[{"id":"2089","name":"城中区","code":"450202","parentId":"2088"},{"id":"2090","name":"鱼峰区","code":"450203","parentId":"2088"},{"id":"2091","name":"柳南区","code":"450204","parentId":"2088"},{"id":"2092","name":"柳北区","code":"450205","parentId":"2088"},{"id":"2093","name":"柳江区","code":"450206","parentId":"2088"},{"id":"2094","name":"柳城县","code":"450222","parentId":"2088"},{"id":"2095","name":"鹿寨县","code":"450223","parentId":"2088"},{"id":"2096","name":"融安县","code":"450224","parentId":"2088"},{"id":"2097","name":"融水苗族自治县","code":"450225","parentId":"2088"},{"id":"2098","name":"三江侗族自治县","code":"450226","parentId":"2088"}]},{"id":"2099","name":"桂林市","code":"450300","parentId":"2074","children":[{"id":"2100","name":"秀峰区","code":"450302","parentId":"2099"},{"id":"2101","name":"叠彩区","code":"450303","parentId":"2099"},{"id":"2102","name":"象山区","code":"450304","parentId":"2099"},{"id":"2103","name":"七星区","code":"450305","parentId":"2099"},{"id":"2104","name":"雁山区","code":"450311","parentId":"2099"},{"id":"2105","name":"临桂区","code":"450312","parentId":"2099"},{"id":"2106","name":"阳朔县","code":"450321","parentId":"2099"},{"id":"2107","name":"灵川县","code":"450323","parentId":"2099"},{"id":"2108","name":"全州县","code":"450324","parentId":"2099"},{"id":"2109","name":"兴安县","code":"450325","parentId":"2099"},{"id":"2110","name":"永福县","code":"450326","parentId":"2099"},{"id":"2111","name":"灌阳县","code":"450327","parentId":"2099"},{"id":"2112","name":"龙胜各族自治县","code":"450328","parentId":"2099"},{"id":"2113","name":"资源县","code":"450329","parentId":"2099"},{"id":"2114","name":"平乐县","code":"450330","parentId":"2099"},{"id":"2115","name":"荔浦县","code":"450331","parentId":"2099"},{"id":"2116","name":"恭城瑶族自治县","code":"450332","parentId":"2099"}]},{"id":"2117","name":"梧州市","code":"450400","parentId":"2074","children":[{"id":"2118","name":"万秀区","code":"450403","parentId":"2117"},{"id":"2119","name":"长洲区","code":"450405","parentId":"2117"},{"id":"2120","name":"龙圩区","code":"450406","parentId":"2117"},{"id":"2121","name":"苍梧县","code":"450421","parentId":"2117"},{"id":"2122","name":"藤县","code":"450422","parentId":"2117"},{"id":"2123","name":"蒙山县","code":"450423","parentId":"2117"},{"id":"2124","name":"岑溪市","code":"450481","parentId":"2117"}]},{"id":"2125","name":"北海市","code":"450500","parentId":"2074","children":[{"id":"2126","name":"海城区","code":"450502","parentId":"2125"},{"id":"2127","name":"银海区","code":"450503","parentId":"2125"},{"id":"2128","name":"铁山港区","code":"450512","parentId":"2125"},{"id":"2129","name":"合浦县","code":"450521","parentId":"2125"}]},{"id":"2130","name":"防城港市","code":"450600","parentId":"2074","children":[{"id":"2131","name":"港口区","code":"450602","parentId":"2130"},{"id":"2132","name":"防城区","code":"450603","parentId":"2130"},{"id":"2133","name":"上思县","code":"450621","parentId":"2130"},{"id":"2134","name":"东兴市","code":"450681","parentId":"2130"}]},{"id":"2135","name":"钦州市","code":"450700","parentId":"2074","children":[{"id":"2136","name":"钦南区","code":"450702","parentId":"2135"},{"id":"2137","name":"钦北区","code":"450703","parentId":"2135"},{"id":"2138","name":"灵山县","code":"450721","parentId":"2135"},{"id":"2139","name":"浦北县","code":"450722","parentId":"2135"}]},{"id":"2140","name":"贵港市","code":"450800","parentId":"2074","children":[{"id":"2141","name":"港北区","code":"450802","parentId":"2140"},{"id":"2142","name":"港南区","code":"450803","parentId":"2140"},{"id":"2143","name":"覃塘区","code":"450804","parentId":"2140"},{"id":"2144","name":"平南县","code":"450821","parentId":"2140"},{"id":"2145","name":"桂平市","code":"450881","parentId":"2140"}]},{"id":"2146","name":"玉林市","code":"450900","parentId":"2074","children":[{"id":"2147","name":"玉州区","code":"450902","parentId":"2146"},{"id":"2148","name":"福绵区","code":"450903","parentId":"2146"},{"id":"2149","name":"容县","code":"450921","parentId":"2146"},{"id":"2150","name":"陆川县","code":"450922","parentId":"2146"},{"id":"2151","name":"博白县","code":"450923","parentId":"2146"},{"id":"2152","name":"兴业县","code":"450924","parentId":"2146"},{"id":"2153","name":"北流市","code":"450981","parentId":"2146"}]},{"id":"2154","name":"百色市","code":"451000","parentId":"2074","children":[{"id":"2155","name":"右江区","code":"451002","parentId":"2154"},{"id":"2156","name":"田阳县","code":"451021","parentId":"2154"},{"id":"2157","name":"田东县","code":"451022","parentId":"2154"},{"id":"2158","name":"平果县","code":"451023","parentId":"2154"},{"id":"2159","name":"德保县","code":"451024","parentId":"2154"},{"id":"2160","name":"那坡县","code":"451026","parentId":"2154"},{"id":"2161","name":"凌云县","code":"451027","parentId":"2154"},{"id":"2162","name":"乐业县","code":"451028","parentId":"2154"},{"id":"2163","name":"田林县","code":"451029","parentId":"2154"},{"id":"2164","name":"西林县","code":"451030","parentId":"2154"},{"id":"2165","name":"隆林各族自治县","code":"451031","parentId":"2154"},{"id":"2166","name":"靖西市","code":"451081","parentId":"2154"}]},{"id":"2167","name":"贺州市","code":"451100","parentId":"2074","children":[{"id":"2168","name":"八步区","code":"451102","parentId":"2167"},{"id":"2169","name":"平桂区","code":"451103","parentId":"2167"},{"id":"2170","name":"昭平县","code":"451121","parentId":"2167"},{"id":"2171","name":"钟山县","code":"451122","parentId":"2167"},{"id":"2172","name":"富川瑶族自治县","code":"451123","parentId":"2167"}]},{"id":"2173","name":"河池市","code":"451200","parentId":"2074","children":[{"id":"2174","name":"金城江区","code":"451202","parentId":"2173"},{"id":"2175","name":"宜州区","code":"451203","parentId":"2173"},{"id":"2176","name":"南丹县","code":"451221","parentId":"2173"},{"id":"2177","name":"天峨县","code":"451222","parentId":"2173"},{"id":"2178","name":"凤山县","code":"451223","parentId":"2173"},{"id":"2179","name":"东兰县","code":"451224","parentId":"2173"},{"id":"2180","name":"罗城仫佬族自治县","code":"451225","parentId":"2173"},{"id":"2181","name":"环江毛南族自治县","code":"451226","parentId":"2173"},{"id":"2182","name":"巴马瑶族自治县","code":"451227","parentId":"2173"},{"id":"2183","name":"都安瑶族自治县","code":"451228","parentId":"2173"},{"id":"2184","name":"大化瑶族自治县","code":"451229","parentId":"2173"}]},{"id":"2185","name":"来宾市","code":"451300","parentId":"2074","children":[{"id":"2186","name":"兴宾区","code":"451302","parentId":"2185"},{"id":"2187","name":"忻城县","code":"451321","parentId":"2185"},{"id":"2188","name":"象州县","code":"451322","parentId":"2185"},{"id":"2189","name":"武宣县","code":"451323","parentId":"2185"},{"id":"2190","name":"金秀瑶族自治县","code":"451324","parentId":"2185"},{"id":"2191","name":"合山市","code":"451381","parentId":"2185"}]},{"id":"2192","name":"崇左市","code":"451400","parentId":"2074","children":[{"id":"2193","name":"江州区","code":"451402","parentId":"2192"},{"id":"2194","name":"扶绥县","code":"451421","parentId":"2192"},{"id":"2195","name":"宁明县","code":"451422","parentId":"2192"},{"id":"2196","name":"龙州县","code":"451423","parentId":"2192"},{"id":"2197","name":"大新县","code":"451424","parentId":"2192"},{"id":"2198","name":"天等县","code":"451425","parentId":"2192"},{"id":"2199","name":"凭祥市","code":"451481","parentId":"2192"}]}]},{"id":"2200","name":"海南省","code":"460000","parentId":"0","children":[{"id":"2201","name":"海口市","code":"460100","parentId":"2200","children":[{"id":"2202","name":"秀英区","code":"460105","parentId":"2201"},{"id":"2203","name":"龙华区","code":"460106","parentId":"2201"},{"id":"2204","name":"琼山区","code":"460107","parentId":"2201"},{"id":"2205","name":"美兰区","code":"460108","parentId":"2201"}]},{"id":"2206","name":"三亚市","code":"460200","parentId":"2200","children":[{"id":"2207","name":"海棠区","code":"460202","parentId":"2206"},{"id":"2208","name":"吉阳区","code":"460203","parentId":"2206"},{"id":"2209","name":"天涯区","code":"460204","parentId":"2206"},{"id":"2210","name":"崖州区","code":"460205","parentId":"2206"}]},{"id":"2211","name":"三沙市","code":"460300","parentId":"2200","children":[{"id":"2212","name":"西沙群岛","code":"460321","parentId":"2211"},{"id":"2213","name":"南沙群岛","code":"460322","parentId":"2211"},{"id":"2214","name":"中沙群岛","code":"460323","parentId":"2211"},{"id":"2215","name":"永乐群岛","code":"460324","parentId":"2211"}]},{"id":"2216","name":"儋州市","code":"460400","parentId":"2200","children":[{"id":"3449","name":"辖区","code":"460401","parentId":"2216"}]},{"id":"2217","name":"五指山市","code":"469001","parentId":"2200","children":[{"id":"3450","name":"辖区","code":"-1","parentId":"2217"}]},{"id":"2218","name":"琼海市","code":"469002","parentId":"2200","children":[{"id":"3451","name":"辖区","code":"-1","parentId":"2218"}]},{"id":"2219","name":"文昌市","code":"469005","parentId":"2200","children":[{"id":"3452","name":"辖区","code":"-1","parentId":"2219"}]},{"id":"2220","name":"万宁市","code":"469006","parentId":"2200","children":[{"id":"3453","name":"辖区","code":"-1","parentId":"2220"}]},{"id":"2221","name":"东方市","code":"469007","parentId":"2200","children":[{"id":"3454","name":"辖区","code":"-1","parentId":"2221"}]},{"id":"2222","name":"定安县","code":"469021","parentId":"2200","children":[{"id":"3455","name":"辖区","code":"-1","parentId":"2222"}]},{"id":"2223","name":"屯昌县","code":"469022","parentId":"2200","children":[{"id":"3456","name":"辖区","code":"-1","parentId":"2223"}]},{"id":"2224","name":"澄迈县","code":"469023","parentId":"2200","children":[{"id":"3457","name":"辖区","code":"-1","parentId":"2224"}]},{"id":"2225","name":"临高县","code":"469024","parentId":"2200","children":[{"id":"3458","name":"辖区","code":"-1","parentId":"2225"}]},{"id":"2226","name":"白沙黎族自治县","code":"469025","parentId":"2200","children":[{"id":"3459","name":"辖区","code":"-1","parentId":"2226"}]},{"id":"2227","name":"昌江黎族自治县","code":"469026","parentId":"2200","children":[{"id":"3460","name":"辖区","code":"-1","parentId":"2227"}]},{"id":"2228","name":"乐东黎族自治县","code":"469027","parentId":"2200","children":[{"id":"3461","name":"辖区","code":"-1","parentId":"2228"}]},{"id":"2229","name":"陵水黎族自治县","code":"469028","parentId":"2200","children":[{"id":"3462","name":"辖区","code":"-1","parentId":"2229"}]},{"id":"2230","name":"保亭黎族苗族自治县","code":"469029","parentId":"2200","children":[{"id":"3463","name":"辖区","code":"-1","parentId":"2230"}]},{"id":"2231","name":"琼中黎族苗族自治县","code":"469030","parentId":"2200","children":[{"id":"3464","name":"辖区","code":"-1","parentId":"2231"}]}]},{"id":"2271","name":"四川省","code":"510000","parentId":"0","children":[{"id":"2272","name":"成都市","code":"510100","parentId":"2271","children":[{"id":"2273","name":"锦江区","code":"510104","parentId":"2272"},{"id":"2274","name":"青羊区","code":"510105","parentId":"2272"},{"id":"2275","name":"金牛区","code":"510106","parentId":"2272"},{"id":"2276","name":"武侯区","code":"510107","parentId":"2272"},{"id":"2277","name":"成华区","code":"510108","parentId":"2272"},{"id":"2278","name":"龙泉驿区","code":"510112","parentId":"2272"},{"id":"2279","name":"青白江区","code":"510113","parentId":"2272"},{"id":"2280","name":"新都区","code":"510114","parentId":"2272"},{"id":"2281","name":"温江区","code":"510115","parentId":"2272"},{"id":"2282","name":"双流区","code":"510116","parentId":"2272"},{"id":"2283","name":"郫都区","code":"510117","parentId":"2272"},{"id":"2284","name":"金堂县","code":"510121","parentId":"2272"},{"id":"2285","name":"大邑县","code":"510129","parentId":"2272"},{"id":"2286","name":"蒲江县","code":"510131","parentId":"2272"},{"id":"2287","name":"新津县","code":"510132","parentId":"2272"},{"id":"2288","name":"都江堰市","code":"510181","parentId":"2272"},{"id":"2289","name":"彭州市","code":"510182","parentId":"2272"},{"id":"2290","name":"邛崃市","code":"510183","parentId":"2272"},{"id":"2291","name":"崇州市","code":"510184","parentId":"2272"},{"id":"2292","name":"简阳市","code":"510185","parentId":"2272"}]},{"id":"2293","name":"自贡市","code":"510300","parentId":"2271","children":[{"id":"2294","name":"自流井区","code":"510302","parentId":"2293"},{"id":"2295","name":"贡井区","code":"510303","parentId":"2293"},{"id":"2296","name":"大安区","code":"510304","parentId":"2293"},{"id":"2297","name":"沿滩区","code":"510311","parentId":"2293"},{"id":"2298","name":"荣县","code":"510321","parentId":"2293"},{"id":"2299","name":"富顺县","code":"510322","parentId":"2293"}]},{"id":"2300","name":"攀枝花市","code":"510400","parentId":"2271","children":[{"id":"2301","name":"东区","code":"510402","parentId":"2300"},{"id":"2302","name":"西区","code":"510403","parentId":"2300"},{"id":"2303","name":"仁和区","code":"510411","parentId":"2300"},{"id":"2304","name":"米易县","code":"510421","parentId":"2300"},{"id":"2305","name":"盐边县","code":"510422","parentId":"2300"}]},{"id":"2306","name":"泸州市","code":"510500","parentId":"2271","children":[{"id":"2307","name":"江阳区","code":"510502","parentId":"2306"},{"id":"2308","name":"纳溪区","code":"510503","parentId":"2306"},{"id":"2309","name":"龙马潭区","code":"510504","parentId":"2306"},{"id":"2310","name":"泸县","code":"510521","parentId":"2306"},{"id":"2311","name":"合江县","code":"510522","parentId":"2306"},{"id":"2312","name":"叙永县","code":"510524","parentId":"2306"},{"id":"2313","name":"古蔺县","code":"510525","parentId":"2306"}]},{"id":"2314","name":"德阳市","code":"510600","parentId":"2271","children":[{"id":"2315","name":"旌阳区","code":"510603","parentId":"2314"},{"id":"2316","name":"中江县","code":"510623","parentId":"2314"},{"id":"2317","name":"罗江县","code":"510626","parentId":"2314"},{"id":"2318","name":"广汉市","code":"510681","parentId":"2314"},{"id":"2319","name":"什邡市","code":"510682","parentId":"2314"},{"id":"2320","name":"绵竹市","code":"510683","parentId":"2314"}]},{"id":"2321","name":"绵阳市","code":"510700","parentId":"2271","children":[{"id":"2322","name":"涪城区","code":"510703","parentId":"2321"},{"id":"2323","name":"游仙区","code":"510704","parentId":"2321"},{"id":"2324","name":"安州区","code":"510705","parentId":"2321"},{"id":"2325","name":"三台县","code":"510722","parentId":"2321"},{"id":"2326","name":"盐亭县","code":"510723","parentId":"2321"},{"id":"2327","name":"梓潼县","code":"510725","parentId":"2321"},{"id":"2328","name":"北川羌族自治县","code":"510726","parentId":"2321"},{"id":"2329","name":"平武县","code":"510727","parentId":"2321"},{"id":"2330","name":"江油市","code":"510781","parentId":"2321"}]},{"id":"2331","name":"广元市","code":"510800","parentId":"2271","children":[{"id":"2332","name":"利州区","code":"510802","parentId":"2331"},{"id":"2333","name":"昭化区","code":"510811","parentId":"2331"},{"id":"2334","name":"朝天区","code":"510812","parentId":"2331"},{"id":"2335","name":"旺苍县","code":"510821","parentId":"2331"},{"id":"2336","name":"青川县","code":"510822","parentId":"2331"},{"id":"2337","name":"剑阁县","code":"510823","parentId":"2331"},{"id":"2338","name":"苍溪县","code":"510824","parentId":"2331"}]},{"id":"2339","name":"遂宁市","code":"510900","parentId":"2271","children":[{"id":"2340","name":"船山区","code":"510903","parentId":"2339"},{"id":"2341","name":"安居区","code":"510904","parentId":"2339"},{"id":"2342","name":"蓬溪县","code":"510921","parentId":"2339"},{"id":"2343","name":"射洪县","code":"510922","parentId":"2339"},{"id":"2344","name":"大英县","code":"510923","parentId":"2339"}]},{"id":"2345","name":"内江市","code":"511000","parentId":"2271","children":[{"id":"2346","name":"市中区","code":"511002","parentId":"2345"},{"id":"2347","name":"东兴区","code":"511011","parentId":"2345"},{"id":"2348","name":"威远县","code":"511024","parentId":"2345"},{"id":"2349","name":"资中县","code":"511025","parentId":"2345"},{"id":"2350","name":"隆昌市","code":"511083","parentId":"2345"}]},{"id":"2351","name":"乐山市","code":"511100","parentId":"2271","children":[{"id":"2352","name":"市中区","code":"511102","parentId":"2351"},{"id":"2353","name":"沙湾区","code":"511111","parentId":"2351"},{"id":"2354","name":"五通桥区","code":"511112","parentId":"2351"},{"id":"2355","name":"金口河区","code":"511113","parentId":"2351"},{"id":"2356","name":"犍为县","code":"511123","parentId":"2351"},{"id":"2357","name":"井研县","code":"511124","parentId":"2351"},{"id":"2358","name":"夹江县","code":"511126","parentId":"2351"},{"id":"2359","name":"沐川县","code":"511129","parentId":"2351"},{"id":"2360","name":"峨边彝族自治县","code":"511132","parentId":"2351"},{"id":"2361","name":"马边彝族自治县","code":"511133","parentId":"2351"},{"id":"2362","name":"峨眉山市","code":"511181","parentId":"2351"}]},{"id":"2363","name":"南充市","code":"511300","parentId":"2271","children":[{"id":"2364","name":"顺庆区","code":"511302","parentId":"2363"},{"id":"2365","name":"高坪区","code":"511303","parentId":"2363"},{"id":"2366","name":"嘉陵区","code":"511304","parentId":"2363"},{"id":"2367","name":"南部县","code":"511321","parentId":"2363"},{"id":"2368","name":"营山县","code":"511322","parentId":"2363"},{"id":"2369","name":"蓬安县","code":"511323","parentId":"2363"},{"id":"2370","name":"仪陇县","code":"511324","parentId":"2363"},{"id":"2371","name":"西充县","code":"511325","parentId":"2363"},{"id":"2372","name":"阆中市","code":"511381","parentId":"2363"}]},{"id":"2373","name":"眉山市","code":"511400","parentId":"2271","children":[{"id":"2374","name":"东坡区","code":"511402","parentId":"2373"},{"id":"2375","name":"彭山区","code":"511403","parentId":"2373"},{"id":"2376","name":"仁寿县","code":"511421","parentId":"2373"},{"id":"2377","name":"洪雅县","code":"511423","parentId":"2373"},{"id":"2378","name":"丹棱县","code":"511424","parentId":"2373"},{"id":"2379","name":"青神县","code":"511425","parentId":"2373"}]},{"id":"2380","name":"宜宾市","code":"511500","parentId":"2271","children":[{"id":"2381","name":"翠屏区","code":"511502","parentId":"2380"},{"id":"2382","name":"南溪区","code":"511503","parentId":"2380"},{"id":"2383","name":"宜宾县","code":"511521","parentId":"2380"},{"id":"2384","name":"江安县","code":"511523","parentId":"2380"},{"id":"2385","name":"长宁县","code":"511524","parentId":"2380"},{"id":"2386","name":"高县","code":"511525","parentId":"2380"},{"id":"2387","name":"珙县","code":"511526","parentId":"2380"},{"id":"2388","name":"筠连县","code":"511527","parentId":"2380"},{"id":"2389","name":"兴文县","code":"511528","parentId":"2380"},{"id":"2390","name":"屏山县","code":"511529","parentId":"2380"}]},{"id":"2391","name":"广安市","code":"511600","parentId":"2271","children":[{"id":"2392","name":"广安区","code":"511602","parentId":"2391"},{"id":"2393","name":"前锋区","code":"511603","parentId":"2391"},{"id":"2394","name":"岳池县","code":"511621","parentId":"2391"},{"id":"2395","name":"武胜县","code":"511622","parentId":"2391"},{"id":"2396","name":"邻水县","code":"511623","parentId":"2391"},{"id":"2397","name":"华蓥市","code":"511681","parentId":"2391"}]},{"id":"2398","name":"达州市","code":"511700","parentId":"2271","children":[{"id":"2399","name":"通川区","code":"511702","parentId":"2398"},{"id":"2400","name":"达川区","code":"511703","parentId":"2398"},{"id":"2401","name":"宣汉县","code":"511722","parentId":"2398"},{"id":"2402","name":"开江县","code":"511723","parentId":"2398"},{"id":"2403","name":"大竹县","code":"511724","parentId":"2398"},{"id":"2404","name":"渠县","code":"511725","parentId":"2398"},{"id":"2405","name":"万源市","code":"511781","parentId":"2398"}]},{"id":"2406","name":"雅安市","code":"511800","parentId":"2271","children":[{"id":"2407","name":"雨城区","code":"511802","parentId":"2406"},{"id":"2408","name":"名山区","code":"511803","parentId":"2406"},{"id":"2409","name":"荥经县","code":"511822","parentId":"2406"},{"id":"2410","name":"汉源县","code":"511823","parentId":"2406"},{"id":"2411","name":"石棉县","code":"511824","parentId":"2406"},{"id":"2412","name":"天全县","code":"511825","parentId":"2406"},{"id":"2413","name":"芦山县","code":"511826","parentId":"2406"},{"id":"2414","name":"宝兴县","code":"511827","parentId":"2406"}]},{"id":"2415","name":"巴中市","code":"511900","parentId":"2271","children":[{"id":"2416","name":"巴州区","code":"511902","parentId":"2415"},{"id":"2417","name":"恩阳区","code":"511903","parentId":"2415"},{"id":"2418","name":"通江县","code":"511921","parentId":"2415"},{"id":"2419","name":"南江县","code":"511922","parentId":"2415"},{"id":"2420","name":"平昌县","code":"511923","parentId":"2415"}]},{"id":"2421","name":"资阳市","code":"512000","parentId":"2271","children":[{"id":"2422","name":"雁江区","code":"512002","parentId":"2421"},{"id":"2423","name":"安岳县","code":"512021","parentId":"2421"},{"id":"2424","name":"乐至县","code":"512022","parentId":"2421"}]},{"id":"2425","name":"阿坝藏族羌族自治州","code":"513200","parentId":"2271","children":[{"id":"2426","name":"马尔康市","code":"513201","parentId":"2425"},{"id":"2427","name":"汶川县","code":"513221","parentId":"2425"},{"id":"2428","name":"理县","code":"513222","parentId":"2425"},{"id":"2429","name":"茂县","code":"513223","parentId":"2425"},{"id":"2430","name":"松潘县","code":"513224","parentId":"2425"},{"id":"2431","name":"九寨沟县","code":"513225","parentId":"2425"},{"id":"2432","name":"金川县","code":"513226","parentId":"2425"},{"id":"2433","name":"小金县","code":"513227","parentId":"2425"},{"id":"2434","name":"黑水县","code":"513228","parentId":"2425"},{"id":"2435","name":"壤塘县","code":"513230","parentId":"2425"},{"id":"2436","name":"阿坝县","code":"513231","parentId":"2425"},{"id":"2437","name":"若尔盖县","code":"513232","parentId":"2425"},{"id":"2438","name":"红原县","code":"513233","parentId":"2425"}]},{"id":"2439","name":"甘孜藏族自治州","code":"513300","parentId":"2271","children":[{"id":"2440","name":"康定市","code":"513301","parentId":"2439"},{"id":"2441","name":"泸定县","code":"513322","parentId":"2439"},{"id":"2442","name":"丹巴县","code":"513323","parentId":"2439"},{"id":"2443","name":"九龙县","code":"513324","parentId":"2439"},{"id":"2444","name":"雅江县","code":"513325","parentId":"2439"},{"id":"2445","name":"道孚县","code":"513326","parentId":"2439"},{"id":"2446","name":"炉霍县","code":"513327","parentId":"2439"},{"id":"2447","name":"甘孜县","code":"513328","parentId":"2439"},{"id":"2448","name":"新龙县","code":"513329","parentId":"2439"},{"id":"2449","name":"德格县","code":"513330","parentId":"2439"},{"id":"2450","name":"白玉县","code":"513331","parentId":"2439"},{"id":"2451","name":"石渠县","code":"513332","parentId":"2439"},{"id":"2452","name":"色达县","code":"513333","parentId":"2439"},{"id":"2453","name":"理塘县","code":"513334","parentId":"2439"},{"id":"2454","name":"巴塘县","code":"513335","parentId":"2439"},{"id":"2455","name":"乡城县","code":"513336","parentId":"2439"},{"id":"2456","name":"稻城县","code":"513337","parentId":"2439"},{"id":"2457","name":"得荣县","code":"513338","parentId":"2439"}]},{"id":"2458","name":"凉山彝族自治州","code":"513400","parentId":"2271","children":[{"id":"2459","name":"西昌市","code":"513401","parentId":"2458"},{"id":"2460","name":"木里藏族自治县","code":"513422","parentId":"2458"},{"id":"2461","name":"盐源县","code":"513423","parentId":"2458"},{"id":"2462","name":"德昌县","code":"513424","parentId":"2458"},{"id":"2463","name":"会理县","code":"513425","parentId":"2458"},{"id":"2464","name":"会东县","code":"513426","parentId":"2458"},{"id":"2465","name":"宁南县","code":"513427","parentId":"2458"},{"id":"2466","name":"普格县","code":"513428","parentId":"2458"},{"id":"2467","name":"布拖县","code":"513429","parentId":"2458"},{"id":"2468","name":"金阳县","code":"513430","parentId":"2458"},{"id":"2469","name":"昭觉县","code":"513431","parentId":"2458"},{"id":"2470","name":"喜德县","code":"513432","parentId":"2458"},{"id":"2471","name":"冕宁县","code":"513433","parentId":"2458"},{"id":"2472","name":"越西县","code":"513434","parentId":"2458"},{"id":"2473","name":"甘洛县","code":"513435","parentId":"2458"},{"id":"2474","name":"美姑县","code":"513436","parentId":"2458"},{"id":"2475","name":"雷波县","code":"513437","parentId":"2458"}]}]},{"id":"2476","name":"贵州省","code":"520000","parentId":"0","children":[{"id":"2477","name":"贵阳市","code":"520100","parentId":"2476","children":[{"id":"2478","name":"南明区","code":"520102","parentId":"2477"},{"id":"2479","name":"云岩区","code":"520103","parentId":"2477"},{"id":"2480","name":"花溪区","code":"520111","parentId":"2477"},{"id":"2481","name":"乌当区","code":"520112","parentId":"2477"},{"id":"2482","name":"白云区","code":"520113","parentId":"2477"},{"id":"2483","name":"观山湖区","code":"520115","parentId":"2477"},{"id":"2484","name":"开阳县","code":"520121","parentId":"2477"},{"id":"2485","name":"息烽县","code":"520122","parentId":"2477"},{"id":"2486","name":"修文县","code":"520123","parentId":"2477"},{"id":"2487","name":"清镇市","code":"520181","parentId":"2477"}]},{"id":"2488","name":"六盘水市","code":"520200","parentId":"2476","children":[{"id":"2489","name":"钟山区","code":"520201","parentId":"2488"},{"id":"2490","name":"六枝特区","code":"520203","parentId":"2488"},{"id":"2491","name":"水城县","code":"520221","parentId":"2488"},{"id":"2492","name":"盘州市","code":"520281","parentId":"2488"}]},{"id":"2493","name":"遵义市","code":"520300","parentId":"2476","children":[{"id":"2494","name":"红花岗区","code":"520302","parentId":"2493"},{"id":"2495","name":"汇川区","code":"520303","parentId":"2493"},{"id":"2496","name":"播州区","code":"520304","parentId":"2493"},{"id":"2497","name":"桐梓县","code":"520322","parentId":"2493"},{"id":"2498","name":"绥阳县","code":"520323","parentId":"2493"},{"id":"2499","name":"正安县","code":"520324","parentId":"2493"},{"id":"2500","name":"道真仡佬族苗族自治县","code":"520325","parentId":"2493"},{"id":"2501","name":"务川仡佬族苗族自治县","code":"520326","parentId":"2493"},{"id":"2502","name":"凤冈县","code":"520327","parentId":"2493"},{"id":"2503","name":"湄潭县","code":"520328","parentId":"2493"},{"id":"2504","name":"余庆县","code":"520329","parentId":"2493"},{"id":"2505","name":"习水县","code":"520330","parentId":"2493"},{"id":"2506","name":"赤水市","code":"520381","parentId":"2493"},{"id":"2507","name":"仁怀市","code":"520382","parentId":"2493"}]},{"id":"2508","name":"安顺市","code":"520400","parentId":"2476","children":[{"id":"2509","name":"西秀区","code":"520402","parentId":"2508"},{"id":"2510","name":"平坝区","code":"520403","parentId":"2508"},{"id":"2511","name":"普定县","code":"520422","parentId":"2508"},{"id":"2512","name":"镇宁布依族苗族自治县","code":"520423","parentId":"2508"},{"id":"2513","name":"关岭布依族苗族自治县","code":"520424","parentId":"2508"},{"id":"2514","name":"紫云苗族布依族自治县","code":"520425","parentId":"2508"}]},{"id":"2515","name":"毕节市","code":"520500","parentId":"2476","children":[{"id":"2516","name":"七星关区","code":"520502","parentId":"2515"},{"id":"2517","name":"大方县","code":"520521","parentId":"2515"},{"id":"2518","name":"黔西县","code":"520522","parentId":"2515"},{"id":"2519","name":"金沙县","code":"520523","parentId":"2515"},{"id":"2520","name":"织金县","code":"520524","parentId":"2515"},{"id":"2521","name":"纳雍县","code":"520525","parentId":"2515"},{"id":"2522","name":"威宁彝族回族苗族自治县","code":"520526","parentId":"2515"},{"id":"2523","name":"赫章县","code":"520527","parentId":"2515"}]},{"id":"2524","name":"铜仁市","code":"520600","parentId":"2476","children":[{"id":"2525","name":"碧江区","code":"520602","parentId":"2524"},{"id":"2526","name":"万山区","code":"520603","parentId":"2524"},{"id":"2527","name":"江口县","code":"520621","parentId":"2524"},{"id":"2528","name":"玉屏侗族自治县","code":"520622","parentId":"2524"},{"id":"2529","name":"石阡县","code":"520623","parentId":"2524"},{"id":"2530","name":"思南县","code":"520624","parentId":"2524"},{"id":"2531","name":"印江土家族苗族自治县","code":"520625","parentId":"2524"},{"id":"2532","name":"德江县","code":"520626","parentId":"2524"},{"id":"2533","name":"沿河土家族自治县","code":"520627","parentId":"2524"},{"id":"2534","name":"松桃苗族自治县","code":"520628","parentId":"2524"}]},{"id":"2535","name":"黔西南布依族苗族自治州","code":"522300","parentId":"2476","children":[{"id":"2536","name":"兴义市","code":"522301","parentId":"2535"},{"id":"2537","name":"兴仁县","code":"522322","parentId":"2535"},{"id":"2538","name":"普安县","code":"522323","parentId":"2535"},{"id":"2539","name":"晴隆县","code":"522324","parentId":"2535"},{"id":"2540","name":"贞丰县","code":"522325","parentId":"2535"},{"id":"2541","name":"望谟县","code":"522326","parentId":"2535"},{"id":"2542","name":"册亨县","code":"522327","parentId":"2535"},{"id":"2543","name":"安龙县","code":"522328","parentId":"2535"}]},{"id":"2544","name":"黔东南苗族侗族自治州","code":"522600","parentId":"2476","children":[{"id":"2545","name":"凯里市","code":"522601","parentId":"2544"},{"id":"2546","name":"黄平县","code":"522622","parentId":"2544"},{"id":"2547","name":"施秉县","code":"522623","parentId":"2544"},{"id":"2548","name":"三穗县","code":"522624","parentId":"2544"},{"id":"2549","name":"镇远县","code":"522625","parentId":"2544"},{"id":"2550","name":"岑巩县","code":"522626","parentId":"2544"},{"id":"2551","name":"天柱县","code":"522627","parentId":"2544"},{"id":"2552","name":"锦屏县","code":"522628","parentId":"2544"},{"id":"2553","name":"剑河县","code":"522629","parentId":"2544"},{"id":"2554","name":"台江县","code":"522630","parentId":"2544"},{"id":"2555","name":"黎平县","code":"522631","parentId":"2544"},{"id":"2556","name":"榕江县","code":"522632","parentId":"2544"},{"id":"2557","name":"从江县","code":"522633","parentId":"2544"},{"id":"2558","name":"雷山县","code":"522634","parentId":"2544"},{"id":"2559","name":"麻江县","code":"522635","parentId":"2544"},{"id":"2560","name":"丹寨县","code":"522636","parentId":"2544"}]},{"id":"2561","name":"黔南布依族苗族自治州","code":"522700","parentId":"2476","children":[{"id":"2562","name":"都匀市","code":"522701","parentId":"2561"},{"id":"2563","name":"福泉市","code":"522702","parentId":"2561"},{"id":"2564","name":"荔波县","code":"522722","parentId":"2561"},{"id":"2565","name":"贵定县","code":"522723","parentId":"2561"},{"id":"2566","name":"瓮安县","code":"522725","parentId":"2561"},{"id":"2567","name":"独山县","code":"522726","parentId":"2561"},{"id":"2568","name":"平塘县","code":"522727","parentId":"2561"},{"id":"2569","name":"罗甸县","code":"522728","parentId":"2561"},{"id":"2570","name":"长顺县","code":"522729","parentId":"2561"},{"id":"2571","name":"龙里县","code":"522730","parentId":"2561"},{"id":"2572","name":"惠水县","code":"522731","parentId":"2561"},{"id":"2573","name":"三都水族自治县","code":"522732","parentId":"2561"}]}]},{"id":"2574","name":"云南省","code":"530000","parentId":"0","children":[{"id":"2575","name":"昆明市","code":"530100","parentId":"2574","children":[{"id":"2576","name":"五华区","code":"530102","parentId":"2575"},{"id":"2577","name":"盘龙区","code":"530103","parentId":"2575"},{"id":"2578","name":"官渡区","code":"530111","parentId":"2575"},{"id":"2579","name":"西山区","code":"530112","parentId":"2575"},{"id":"2580","name":"东川区","code":"530113","parentId":"2575"},{"id":"2581","name":"呈贡区","code":"530114","parentId":"2575"},{"id":"2582","name":"晋宁区","code":"530115","parentId":"2575"},{"id":"2583","name":"富民县","code":"530124","parentId":"2575"},{"id":"2584","name":"宜良县","code":"530125","parentId":"2575"},{"id":"2585","name":"石林彝族自治县","code":"530126","parentId":"2575"},{"id":"2586","name":"嵩明县","code":"530127","parentId":"2575"},{"id":"2587","name":"禄劝彝族苗族自治县","code":"530128","parentId":"2575"},{"id":"2588","name":"寻甸回族彝族自治县","code":"530129","parentId":"2575"},{"id":"2589","name":"安宁市","code":"530181","parentId":"2575"}]},{"id":"2590","name":"曲靖市","code":"530300","parentId":"2574","children":[{"id":"2591","name":"麒麟区","code":"530302","parentId":"2590"},{"id":"2592","name":"沾益区","code":"530303","parentId":"2590"},{"id":"2593","name":"马龙县","code":"530321","parentId":"2590"},{"id":"2594","name":"陆良县","code":"530322","parentId":"2590"},{"id":"2595","name":"师宗县","code":"530323","parentId":"2590"},{"id":"2596","name":"罗平县","code":"530324","parentId":"2590"},{"id":"2597","name":"富源县","code":"530325","parentId":"2590"},{"id":"2598","name":"会泽县","code":"530326","parentId":"2590"},{"id":"2599","name":"宣威市","code":"530381","parentId":"2590"}]},{"id":"2600","name":"玉溪市","code":"530400","parentId":"2574","children":[{"id":"2601","name":"红塔区","code":"530402","parentId":"2600"},{"id":"2602","name":"江川区","code":"530403","parentId":"2600"},{"id":"2603","name":"澄江县","code":"530422","parentId":"2600"},{"id":"2604","name":"通海县","code":"530423","parentId":"2600"},{"id":"2605","name":"华宁县","code":"530424","parentId":"2600"},{"id":"2606","name":"易门县","code":"530425","parentId":"2600"},{"id":"2607","name":"峨山彝族自治县","code":"530426","parentId":"2600"},{"id":"2608","name":"新平彝族傣族自治县","code":"530427","parentId":"2600"},{"id":"2609","name":"元江哈尼族彝族傣族自治县","code":"530428","parentId":"2600"}]},{"id":"2610","name":"保山市","code":"530500","parentId":"2574","children":[{"id":"2611","name":"隆阳区","code":"530502","parentId":"2610"},{"id":"2612","name":"施甸县","code":"530521","parentId":"2610"},{"id":"2613","name":"龙陵县","code":"530523","parentId":"2610"},{"id":"2614","name":"昌宁县","code":"530524","parentId":"2610"},{"id":"2615","name":"腾冲市","code":"530581","parentId":"2610"}]},{"id":"2616","name":"昭通市","code":"530600","parentId":"2574","children":[{"id":"2617","name":"昭阳区","code":"530602","parentId":"2616"},{"id":"2618","name":"鲁甸县","code":"530621","parentId":"2616"},{"id":"2619","name":"巧家县","code":"530622","parentId":"2616"},{"id":"2620","name":"盐津县","code":"530623","parentId":"2616"},{"id":"2621","name":"大关县","code":"530624","parentId":"2616"},{"id":"2622","name":"永善县","code":"530625","parentId":"2616"},{"id":"2623","name":"绥江县","code":"530626","parentId":"2616"},{"id":"2624","name":"镇雄县","code":"530627","parentId":"2616"},{"id":"2625","name":"彝良县","code":"530628","parentId":"2616"},{"id":"2626","name":"威信县","code":"530629","parentId":"2616"},{"id":"2627","name":"水富县","code":"530630","parentId":"2616"}]},{"id":"2628","name":"丽江市","code":"530700","parentId":"2574","children":[{"id":"2629","name":"古城区","code":"530702","parentId":"2628"},{"id":"2630","name":"玉龙纳西族自治县","code":"530721","parentId":"2628"},{"id":"2631","name":"永胜县","code":"530722","parentId":"2628"},{"id":"2632","name":"华坪县","code":"530723","parentId":"2628"},{"id":"2633","name":"宁蒗彝族自治县","code":"530724","parentId":"2628"}]},{"id":"2634","name":"普洱市","code":"530800","parentId":"2574","children":[{"id":"2635","name":"思茅区","code":"530802","parentId":"2634"},{"id":"2636","name":"宁洱哈尼族彝族自治县","code":"530821","parentId":"2634"},{"id":"2637","name":"墨江哈尼族自治县","code":"530822","parentId":"2634"},{"id":"2638","name":"景东彝族自治县","code":"530823","parentId":"2634"},{"id":"2639","name":"景谷傣族彝族自治县","code":"530824","parentId":"2634"},{"id":"2640","name":"镇沅彝族哈尼族拉祜族自治县","code":"530825","parentId":"2634"},{"id":"2641","name":"江城哈尼族彝族自治县","code":"530826","parentId":"2634"},{"id":"2642","name":"孟连傣族拉祜族佤族自治县","code":"530827","parentId":"2634"},{"id":"2643","name":"澜沧拉祜族自治县","code":"530828","parentId":"2634"},{"id":"2644","name":"西盟佤族自治县","code":"530829","parentId":"2634"}]},{"id":"2645","name":"临沧市","code":"530900","parentId":"2574","children":[{"id":"2646","name":"临翔区","code":"530902","parentId":"2645"},{"id":"2647","name":"凤庆县","code":"530921","parentId":"2645"},{"id":"2648","name":"云县","code":"530922","parentId":"2645"},{"id":"2649","name":"永德县","code":"530923","parentId":"2645"},{"id":"2650","name":"镇康县","code":"530924","parentId":"2645"},{"id":"2651","name":"双江拉祜族佤族布朗族傣族自治县","code":"530925","parentId":"2645"},{"id":"2652","name":"耿马傣族佤族自治县","code":"530926","parentId":"2645"},{"id":"2653","name":"沧源佤族自治县","code":"530927","parentId":"2645"}]},{"id":"2654","name":"楚雄彝族自治州","code":"532300","parentId":"2574","children":[{"id":"2655","name":"楚雄市","code":"532301","parentId":"2654"},{"id":"2656","name":"双柏县","code":"532322","parentId":"2654"},{"id":"2657","name":"牟定县","code":"532323","parentId":"2654"},{"id":"2658","name":"南华县","code":"532324","parentId":"2654"},{"id":"2659","name":"姚安县","code":"532325","parentId":"2654"},{"id":"2660","name":"大姚县","code":"532326","parentId":"2654"},{"id":"2661","name":"永仁县","code":"532327","parentId":"2654"},{"id":"2662","name":"元谋县","code":"532328","parentId":"2654"},{"id":"2663","name":"武定县","code":"532329","parentId":"2654"},{"id":"2664","name":"禄丰县","code":"532331","parentId":"2654"}]},{"id":"2665","name":"红河哈尼族彝族自治州","code":"532500","parentId":"2574","children":[{"id":"2666","name":"个旧市","code":"532501","parentId":"2665"},{"id":"2667","name":"开远市","code":"532502","parentId":"2665"},{"id":"2668","name":"蒙自市","code":"532503","parentId":"2665"},{"id":"2669","name":"弥勒市","code":"532504","parentId":"2665"},{"id":"2670","name":"屏边苗族自治县","code":"532523","parentId":"2665"},{"id":"2671","name":"建水县","code":"532524","parentId":"2665"},{"id":"2672","name":"石屏县","code":"532525","parentId":"2665"},{"id":"2673","name":"泸西县","code":"532527","parentId":"2665"},{"id":"2674","name":"元阳县","code":"532528","parentId":"2665"},{"id":"2675","name":"红河县","code":"532529","parentId":"2665"},{"id":"2676","name":"金平苗族瑶族傣族自治县","code":"532530","parentId":"2665"},{"id":"2677","name":"绿春县","code":"532531","parentId":"2665"},{"id":"2678","name":"河口瑶族自治县","code":"532532","parentId":"2665"}]},{"id":"2679","name":"文山壮族苗族自治州","code":"532600","parentId":"2574","children":[{"id":"2680","name":"文山市","code":"532601","parentId":"2679"},{"id":"2681","name":"砚山县","code":"532622","parentId":"2679"},{"id":"2682","name":"西畴县","code":"532623","parentId":"2679"},{"id":"2683","name":"麻栗坡县","code":"532624","parentId":"2679"},{"id":"2684","name":"马关县","code":"532625","parentId":"2679"},{"id":"2685","name":"丘北县","code":"532626","parentId":"2679"},{"id":"2686","name":"广南县","code":"532627","parentId":"2679"},{"id":"2687","name":"富宁县","code":"532628","parentId":"2679"}]},{"id":"2688","name":"西双版纳傣族自治州","code":"532800","parentId":"2574","children":[{"id":"2689","name":"景洪市","code":"532801","parentId":"2688"},{"id":"2690","name":"勐海县","code":"532822","parentId":"2688"},{"id":"2691","name":"勐腊县","code":"532823","parentId":"2688"}]},{"id":"2692","name":"大理白族自治州","code":"532900","parentId":"2574","children":[{"id":"2693","name":"大理市","code":"532901","parentId":"2692"},{"id":"2694","name":"漾濞彝族自治县","code":"532922","parentId":"2692"},{"id":"2695","name":"祥云县","code":"532923","parentId":"2692"},{"id":"2696","name":"宾川县","code":"532924","parentId":"2692"},{"id":"2697","name":"弥渡县","code":"532925","parentId":"2692"},{"id":"2698","name":"南涧彝族自治县","code":"532926","parentId":"2692"},{"id":"2699","name":"巍山彝族回族自治县","code":"532927","parentId":"2692"},{"id":"2700","name":"永平县","code":"532928","parentId":"2692"},{"id":"2701","name":"云龙县","code":"532929","parentId":"2692"},{"id":"2702","name":"洱源县","code":"532930","parentId":"2692"},{"id":"2703","name":"剑川县","code":"532931","parentId":"2692"},{"id":"2704","name":"鹤庆县","code":"532932","parentId":"2692"}]},{"id":"2705","name":"德宏傣族景颇族自治州","code":"533100","parentId":"2574","children":[{"id":"2706","name":"瑞丽市","code":"533102","parentId":"2705"},{"id":"2707","name":"芒市","code":"533103","parentId":"2705"},{"id":"2708","name":"梁河县","code":"533122","parentId":"2705"},{"id":"2709","name":"盈江县","code":"533123","parentId":"2705"},{"id":"2710","name":"陇川县","code":"533124","parentId":"2705"}]},{"id":"2711","name":"怒江傈僳族自治州","code":"533300","parentId":"2574","children":[{"id":"2712","name":"泸水市","code":"533301","parentId":"2711"},{"id":"2713","name":"福贡县","code":"533323","parentId":"2711"},{"id":"2714","name":"贡山独龙族怒族自治县","code":"533324","parentId":"2711"},{"id":"2715","name":"兰坪白族普米族自治县","code":"533325","parentId":"2711"}]},{"id":"2716","name":"迪庆藏族自治州","code":"533400","parentId":"2574","children":[{"id":"2717","name":"香格里拉市","code":"533401","parentId":"2716"},{"id":"2718","name":"德钦县","code":"533422","parentId":"2716"},{"id":"2719","name":"维西傈僳族自治县","code":"533423","parentId":"2716"}]}]},{"id":"2720","name":"西藏自治区","code":"540000","parentId":"0","children":[{"id":"2721","name":"拉萨市","code":"540100","parentId":"2720","children":[{"id":"2722","name":"城关区","code":"540102","parentId":"2721"},{"id":"2723","name":"堆龙德庆区","code":"540103","parentId":"2721"},{"id":"2724","name":"达孜区","code":"540104","parentId":"2721"},{"id":"2725","name":"林周县","code":"540121","parentId":"2721"},{"id":"2726","name":"当雄县","code":"540122","parentId":"2721"},{"id":"2727","name":"尼木县","code":"540123","parentId":"2721"},{"id":"2728","name":"曲水县","code":"540124","parentId":"2721"},{"id":"2729","name":"墨竹工卡县","code":"540127","parentId":"2721"}]},{"id":"2730","name":"日喀则市","code":"540200","parentId":"2720","children":[{"id":"2731","name":"桑珠孜区","code":"540202","parentId":"2730"},{"id":"2732","name":"南木林县","code":"540221","parentId":"2730"},{"id":"2733","name":"江孜县","code":"540222","parentId":"2730"},{"id":"2734","name":"定日县","code":"540223","parentId":"2730"},{"id":"2735","name":"萨迦县","code":"540224","parentId":"2730"},{"id":"2736","name":"拉孜县","code":"540225","parentId":"2730"},{"id":"2737","name":"昂仁县","code":"540226","parentId":"2730"},{"id":"2738","name":"谢通门县","code":"540227","parentId":"2730"},{"id":"2739","name":"白朗县","code":"540228","parentId":"2730"},{"id":"2740","name":"仁布县","code":"540229","parentId":"2730"},{"id":"2741","name":"康马县","code":"540230","parentId":"2730"},{"id":"2742","name":"定结县","code":"540231","parentId":"2730"},{"id":"2743","name":"仲巴县","code":"540232","parentId":"2730"},{"id":"2744","name":"亚东县","code":"540233","parentId":"2730"},{"id":"2745","name":"吉隆县","code":"540234","parentId":"2730"},{"id":"2746","name":"聂拉木县","code":"540235","parentId":"2730"},{"id":"2747","name":"萨嘎县","code":"540236","parentId":"2730"},{"id":"2748","name":"岗巴县","code":"540237","parentId":"2730"}]},{"id":"2749","name":"昌都市","code":"540300","parentId":"2720","children":[{"id":"2750","name":"卡若区","code":"540302","parentId":"2749"},{"id":"2751","name":"江达县","code":"540321","parentId":"2749"},{"id":"2752","name":"贡觉县","code":"540322","parentId":"2749"},{"id":"2753","name":"类乌齐县","code":"540323","parentId":"2749"},{"id":"2754","name":"丁青县","code":"540324","parentId":"2749"},{"id":"2755","name":"察雅县","code":"540325","parentId":"2749"},{"id":"2756","name":"八宿县","code":"540326","parentId":"2749"},{"id":"2757","name":"左贡县","code":"540327","parentId":"2749"},{"id":"2758","name":"芒康县","code":"540328","parentId":"2749"},{"id":"2759","name":"洛隆县","code":"540329","parentId":"2749"},{"id":"2760","name":"边坝县","code":"540330","parentId":"2749"}]},{"id":"2761","name":"林芝市","code":"540400","parentId":"2720","children":[{"id":"2762","name":"巴宜区","code":"540402","parentId":"2761"},{"id":"2763","name":"工布江达县","code":"540421","parentId":"2761"},{"id":"2764","name":"米林县","code":"540422","parentId":"2761"},{"id":"2765","name":"墨脱县","code":"540423","parentId":"2761"},{"id":"2766","name":"波密县","code":"540424","parentId":"2761"},{"id":"2767","name":"察隅县","code":"540425","parentId":"2761"},{"id":"2768","name":"朗县","code":"540426","parentId":"2761"}]},{"id":"2769","name":"山南市","code":"540500","parentId":"2720","children":[{"id":"2770","name":"乃东区","code":"540502","parentId":"2769"},{"id":"2771","name":"扎囊县","code":"540521","parentId":"2769"},{"id":"2772","name":"贡嘎县","code":"540522","parentId":"2769"},{"id":"2773","name":"桑日县","code":"540523","parentId":"2769"},{"id":"2774","name":"琼结县","code":"540524","parentId":"2769"},{"id":"2775","name":"曲松县","code":"540525","parentId":"2769"},{"id":"2776","name":"措美县","code":"540526","parentId":"2769"},{"id":"2777","name":"洛扎县","code":"540527","parentId":"2769"},{"id":"2778","name":"加查县","code":"540528","parentId":"2769"},{"id":"2779","name":"隆子县","code":"540529","parentId":"2769"},{"id":"2780","name":"错那县","code":"540530","parentId":"2769"},{"id":"2781","name":"浪卡子县","code":"540531","parentId":"2769"}]},{"id":"2782","name":"那曲市","code":"540600","parentId":"2720","children":[{"id":"2783","name":"色尼区","code":"540602","parentId":"2782"},{"id":"2784","name":"嘉黎县","code":"540621","parentId":"2782"},{"id":"2785","name":"比如县","code":"540622","parentId":"2782"},{"id":"2786","name":"聂荣县","code":"540623","parentId":"2782"},{"id":"2787","name":"安多县","code":"540624","parentId":"2782"},{"id":"2788","name":"申扎县","code":"540625","parentId":"2782"},{"id":"2789","name":"索县","code":"540626","parentId":"2782"},{"id":"2790","name":"班戈县","code":"540627","parentId":"2782"},{"id":"2791","name":"巴青县","code":"540628","parentId":"2782"},{"id":"2792","name":"尼玛县","code":"540629","parentId":"2782"},{"id":"2793","name":"双湖县","code":"540630","parentId":"2782"}]},{"id":"2794","name":"阿里地区","code":"542500","parentId":"2720","children":[{"id":"2795","name":"普兰县","code":"542521","parentId":"2794"},{"id":"2796","name":"札达县","code":"542522","parentId":"2794"},{"id":"2797","name":"噶尔县","code":"542523","parentId":"2794"},{"id":"2798","name":"日土县","code":"542524","parentId":"2794"},{"id":"2799","name":"革吉县","code":"542525","parentId":"2794"},{"id":"2800","name":"改则县","code":"542526","parentId":"2794"},{"id":"2801","name":"措勤县","code":"542527","parentId":"2794"}]}]},{"id":"2802","name":"陕西省","code":"610000","parentId":"0","children":[{"id":"2803","name":"西安市","code":"610100","parentId":"2802","children":[{"id":"2804","name":"新城区","code":"610102","parentId":"2803"},{"id":"2805","name":"碑林区","code":"610103","parentId":"2803"},{"id":"2806","name":"莲湖区","code":"610104","parentId":"2803"},{"id":"2807","name":"灞桥区","code":"610111","parentId":"2803"},{"id":"2808","name":"未央区","code":"610112","parentId":"2803"},{"id":"2809","name":"雁塔区","code":"610113","parentId":"2803"},{"id":"2810","name":"阎良区","code":"610114","parentId":"2803"},{"id":"2811","name":"临潼区","code":"610115","parentId":"2803"},{"id":"2812","name":"长安区","code":"610116","parentId":"2803"},{"id":"2813","name":"高陵区","code":"610117","parentId":"2803"},{"id":"2814","name":"鄠邑区","code":"610118","parentId":"2803"},{"id":"2815","name":"蓝田县","code":"610122","parentId":"2803"},{"id":"2816","name":"周至县","code":"610124","parentId":"2803"}]},{"id":"2817","name":"铜川市","code":"610200","parentId":"2802","children":[{"id":"2818","name":"王益区","code":"610202","parentId":"2817"},{"id":"2819","name":"印台区","code":"610203","parentId":"2817"},{"id":"2820","name":"耀州区","code":"610204","parentId":"2817"},{"id":"2821","name":"宜君县","code":"610222","parentId":"2817"}]},{"id":"2822","name":"宝鸡市","code":"610300","parentId":"2802","children":[{"id":"2823","name":"渭滨区","code":"610302","parentId":"2822"},{"id":"2824","name":"金台区","code":"610303","parentId":"2822"},{"id":"2825","name":"陈仓区","code":"610304","parentId":"2822"},{"id":"2826","name":"凤翔县","code":"610322","parentId":"2822"},{"id":"2827","name":"岐山县","code":"610323","parentId":"2822"},{"id":"2828","name":"扶风县","code":"610324","parentId":"2822"},{"id":"2829","name":"眉县","code":"610326","parentId":"2822"},{"id":"2830","name":"陇县","code":"610327","parentId":"2822"},{"id":"2831","name":"千阳县","code":"610328","parentId":"2822"},{"id":"2832","name":"麟游县","code":"610329","parentId":"2822"},{"id":"2833","name":"凤县","code":"610330","parentId":"2822"},{"id":"2834","name":"太白县","code":"610331","parentId":"2822"}]},{"id":"2835","name":"咸阳市","code":"610400","parentId":"2802","children":[{"id":"2836","name":"秦都区","code":"610402","parentId":"2835"},{"id":"2837","name":"杨陵区","code":"610403","parentId":"2835"},{"id":"2838","name":"渭城区","code":"610404","parentId":"2835"},{"id":"2839","name":"三原县","code":"610422","parentId":"2835"},{"id":"2840","name":"泾阳县","code":"610423","parentId":"2835"},{"id":"2841","name":"乾县","code":"610424","parentId":"2835"},{"id":"2842","name":"礼泉县","code":"610425","parentId":"2835"},{"id":"2843","name":"永寿县","code":"610426","parentId":"2835"},{"id":"2844","name":"彬县","code":"610427","parentId":"2835"},{"id":"2845","name":"长武县","code":"610428","parentId":"2835"},{"id":"2846","name":"旬邑县","code":"610429","parentId":"2835"},{"id":"2847","name":"淳化县","code":"610430","parentId":"2835"},{"id":"2848","name":"武功县","code":"610431","parentId":"2835"},{"id":"2849","name":"兴平市","code":"610481","parentId":"2835"}]},{"id":"2850","name":"渭南市","code":"610500","parentId":"2802","children":[{"id":"2851","name":"临渭区","code":"610502","parentId":"2850"},{"id":"2852","name":"华州区","code":"610503","parentId":"2850"},{"id":"2853","name":"潼关县","code":"610522","parentId":"2850"},{"id":"2854","name":"大荔县","code":"610523","parentId":"2850"},{"id":"2855","name":"合阳县","code":"610524","parentId":"2850"},{"id":"2856","name":"澄城县","code":"610525","parentId":"2850"},{"id":"2857","name":"蒲城县","code":"610526","parentId":"2850"},{"id":"2858","name":"白水县","code":"610527","parentId":"2850"},{"id":"2859","name":"富平县","code":"610528","parentId":"2850"},{"id":"2860","name":"韩城市","code":"610581","parentId":"2850"},{"id":"2861","name":"华阴市","code":"610582","parentId":"2850"}]},{"id":"2862","name":"延安市","code":"610600","parentId":"2802","children":[{"id":"2863","name":"宝塔区","code":"610602","parentId":"2862"},{"id":"2864","name":"安塞区","code":"610603","parentId":"2862"},{"id":"2865","name":"延长县","code":"610621","parentId":"2862"},{"id":"2866","name":"延川县","code":"610622","parentId":"2862"},{"id":"2867","name":"子长县","code":"610623","parentId":"2862"},{"id":"2868","name":"志丹县","code":"610625","parentId":"2862"},{"id":"2869","name":"吴起县","code":"610626","parentId":"2862"},{"id":"2870","name":"甘泉县","code":"610627","parentId":"2862"},{"id":"2871","name":"富县","code":"610628","parentId":"2862"},{"id":"2872","name":"洛川县","code":"610629","parentId":"2862"},{"id":"2873","name":"宜川县","code":"610630","parentId":"2862"},{"id":"2874","name":"黄龙县","code":"610631","parentId":"2862"},{"id":"2875","name":"黄陵县","code":"610632","parentId":"2862"}]},{"id":"2876","name":"汉中市","code":"610700","parentId":"2802","children":[{"id":"2877","name":"汉台区","code":"610702","parentId":"2876"},{"id":"2878","name":"南郑区","code":"610703","parentId":"2876"},{"id":"2879","name":"城固县","code":"610722","parentId":"2876"},{"id":"2880","name":"洋县","code":"610723","parentId":"2876"},{"id":"2881","name":"西乡县","code":"610724","parentId":"2876"},{"id":"2882","name":"勉县","code":"610725","parentId":"2876"},{"id":"2883","name":"宁强县","code":"610726","parentId":"2876"},{"id":"2884","name":"略阳县","code":"610727","parentId":"2876"},{"id":"2885","name":"镇巴县","code":"610728","parentId":"2876"},{"id":"2886","name":"留坝县","code":"610729","parentId":"2876"},{"id":"2887","name":"佛坪县","code":"610730","parentId":"2876"}]},{"id":"2888","name":"榆林市","code":"610800","parentId":"2802","children":[{"id":"2889","name":"榆阳区","code":"610802","parentId":"2888"},{"id":"2890","name":"横山区","code":"610803","parentId":"2888"},{"id":"2891","name":"府谷县","code":"610822","parentId":"2888"},{"id":"2892","name":"靖边县","code":"610824","parentId":"2888"},{"id":"2893","name":"定边县","code":"610825","parentId":"2888"},{"id":"2894","name":"绥德县","code":"610826","parentId":"2888"},{"id":"2895","name":"米脂县","code":"610827","parentId":"2888"},{"id":"2896","name":"佳县","code":"610828","parentId":"2888"},{"id":"2897","name":"吴堡县","code":"610829","parentId":"2888"},{"id":"2898","name":"清涧县","code":"610830","parentId":"2888"},{"id":"2899","name":"子洲县","code":"610831","parentId":"2888"},{"id":"2900","name":"神木市","code":"610881","parentId":"2888"}]},{"id":"2901","name":"安康市","code":"610900","parentId":"2802","children":[{"id":"2902","name":"汉滨区","code":"610902","parentId":"2901"},{"id":"2903","name":"汉阴县","code":"610921","parentId":"2901"},{"id":"2904","name":"石泉县","code":"610922","parentId":"2901"},{"id":"2905","name":"宁陕县","code":"610923","parentId":"2901"},{"id":"2906","name":"紫阳县","code":"610924","parentId":"2901"},{"id":"2907","name":"岚皋县","code":"610925","parentId":"2901"},{"id":"2908","name":"平利县","code":"610926","parentId":"2901"},{"id":"2909","name":"镇坪县","code":"610927","parentId":"2901"},{"id":"2910","name":"旬阳县","code":"610928","parentId":"2901"},{"id":"2911","name":"白河县","code":"610929","parentId":"2901"}]},{"id":"2912","name":"商洛市","code":"611000","parentId":"2802","children":[{"id":"2913","name":"商州区","code":"611002","parentId":"2912"},{"id":"2914","name":"洛南县","code":"611021","parentId":"2912"},{"id":"2915","name":"丹凤县","code":"611022","parentId":"2912"},{"id":"2916","name":"商南县","code":"611023","parentId":"2912"},{"id":"2917","name":"山阳县","code":"611024","parentId":"2912"},{"id":"2918","name":"镇安县","code":"611025","parentId":"2912"},{"id":"2919","name":"柞水县","code":"611026","parentId":"2912"}]}]},{"id":"2920","name":"甘肃省","code":"620000","parentId":"0","children":[{"id":"2921","name":"兰州市","code":"620100","parentId":"2920","children":[{"id":"2922","name":"城关区","code":"620102","parentId":"2921"},{"id":"2923","name":"七里河区","code":"620103","parentId":"2921"},{"id":"2924","name":"西固区","code":"620104","parentId":"2921"},{"id":"2925","name":"安宁区","code":"620105","parentId":"2921"},{"id":"2926","name":"红古区","code":"620111","parentId":"2921"},{"id":"2927","name":"永登县","code":"620121","parentId":"2921"},{"id":"2928","name":"皋兰县","code":"620122","parentId":"2921"},{"id":"2929","name":"榆中县","code":"620123","parentId":"2921"}]},{"id":"2930","name":"嘉峪关市","code":"620200","parentId":"2920","children":[{"id":"3470","name":"辖区","code":"-1","parentId":"2930"}]},{"id":"2931","name":"金昌市","code":"620300","parentId":"2920","children":[{"id":"2932","name":"金川区","code":"620302","parentId":"2931"},{"id":"2933","name":"永昌县","code":"620321","parentId":"2931"}]},{"id":"2934","name":"白银市","code":"620400","parentId":"2920","children":[{"id":"2935","name":"白银区","code":"620402","parentId":"2934"},{"id":"2936","name":"平川区","code":"620403","parentId":"2934"},{"id":"2937","name":"靖远县","code":"620421","parentId":"2934"},{"id":"2938","name":"会宁县","code":"620422","parentId":"2934"},{"id":"2939","name":"景泰县","code":"620423","parentId":"2934"}]},{"id":"2940","name":"天水市","code":"620500","parentId":"2920","children":[{"id":"2941","name":"秦州区","code":"620502","parentId":"2940"},{"id":"2942","name":"麦积区","code":"620503","parentId":"2940"},{"id":"2943","name":"清水县","code":"620521","parentId":"2940"},{"id":"2944","name":"秦安县","code":"620522","parentId":"2940"},{"id":"2945","name":"甘谷县","code":"620523","parentId":"2940"},{"id":"2946","name":"武山县","code":"620524","parentId":"2940"},{"id":"2947","name":"张家川回族自治县","code":"620525","parentId":"2940"}]},{"id":"2948","name":"武威市","code":"620600","parentId":"2920","children":[{"id":"2949","name":"凉州区","code":"620602","parentId":"2948"},{"id":"2950","name":"民勤县","code":"620621","parentId":"2948"},{"id":"2951","name":"古浪县","code":"620622","parentId":"2948"},{"id":"2952","name":"天祝藏族自治县","code":"620623","parentId":"2948"}]},{"id":"2953","name":"张掖市","code":"620700","parentId":"2920","children":[{"id":"2954","name":"甘州区","code":"620702","parentId":"2953"},{"id":"2955","name":"肃南裕固族自治县","code":"620721","parentId":"2953"},{"id":"2956","name":"民乐县","code":"620722","parentId":"2953"},{"id":"2957","name":"临泽县","code":"620723","parentId":"2953"},{"id":"2958","name":"高台县","code":"620724","parentId":"2953"},{"id":"2959","name":"山丹县","code":"620725","parentId":"2953"}]},{"id":"2960","name":"平凉市","code":"620800","parentId":"2920","children":[{"id":"2961","name":"崆峒区","code":"620802","parentId":"2960"},{"id":"2962","name":"泾川县","code":"620821","parentId":"2960"},{"id":"2963","name":"灵台县","code":"620822","parentId":"2960"},{"id":"2964","name":"崇信县","code":"620823","parentId":"2960"},{"id":"2965","name":"华亭县","code":"620824","parentId":"2960"},{"id":"2966","name":"庄浪县","code":"620825","parentId":"2960"},{"id":"2967","name":"静宁县","code":"620826","parentId":"2960"}]},{"id":"2968","name":"酒泉市","code":"620900","parentId":"2920","children":[{"id":"2969","name":"肃州区","code":"620902","parentId":"2968"},{"id":"2970","name":"金塔县","code":"620921","parentId":"2968"},{"id":"2971","name":"瓜州县","code":"620922","parentId":"2968"},{"id":"2972","name":"肃北蒙古族自治县","code":"620923","parentId":"2968"},{"id":"2973","name":"阿克塞哈萨克族自治县","code":"620924","parentId":"2968"},{"id":"2974","name":"玉门市","code":"620981","parentId":"2968"},{"id":"2975","name":"敦煌市","code":"620982","parentId":"2968"}]},{"id":"2976","name":"庆阳市","code":"621000","parentId":"2920","children":[{"id":"2977","name":"西峰区","code":"621002","parentId":"2976"},{"id":"2978","name":"庆城县","code":"621021","parentId":"2976"},{"id":"2979","name":"环县","code":"621022","parentId":"2976"},{"id":"2980","name":"华池县","code":"621023","parentId":"2976"},{"id":"2981","name":"合水县","code":"621024","parentId":"2976"},{"id":"2982","name":"正宁县","code":"621025","parentId":"2976"},{"id":"2983","name":"宁县","code":"621026","parentId":"2976"},{"id":"2984","name":"镇原县","code":"621027","parentId":"2976"}]},{"id":"2985","name":"定西市","code":"621100","parentId":"2920","children":[{"id":"2986","name":"安定区","code":"621102","parentId":"2985"},{"id":"2987","name":"通渭县","code":"621121","parentId":"2985"},{"id":"2988","name":"陇西县","code":"621122","parentId":"2985"},{"id":"2989","name":"渭源县","code":"621123","parentId":"2985"},{"id":"2990","name":"临洮县","code":"621124","parentId":"2985"},{"id":"2991","name":"漳县","code":"621125","parentId":"2985"},{"id":"2992","name":"岷县","code":"621126","parentId":"2985"}]},{"id":"2993","name":"陇南市","code":"621200","parentId":"2920","children":[{"id":"2994","name":"武都区","code":"621202","parentId":"2993"},{"id":"2995","name":"成县","code":"621221","parentId":"2993"},{"id":"2996","name":"文县","code":"621222","parentId":"2993"},{"id":"2997","name":"宕昌县","code":"621223","parentId":"2993"},{"id":"2998","name":"康县","code":"621224","parentId":"2993"},{"id":"2999","name":"西和县","code":"621225","parentId":"2993"},{"id":"3000","name":"礼县","code":"621226","parentId":"2993"},{"id":"3001","name":"徽县","code":"621227","parentId":"2993"},{"id":"3002","name":"两当县","code":"621228","parentId":"2993"}]},{"id":"3003","name":"临夏回族自治州","code":"622900","parentId":"2920","children":[{"id":"3004","name":"临夏市","code":"622901","parentId":"3003"},{"id":"3005","name":"临夏县","code":"622921","parentId":"3003"},{"id":"3006","name":"康乐县","code":"622922","parentId":"3003"},{"id":"3007","name":"永靖县","code":"622923","parentId":"3003"},{"id":"3008","name":"广河县","code":"622924","parentId":"3003"},{"id":"3009","name":"和政县","code":"622925","parentId":"3003"},{"id":"3010","name":"东乡族自治县","code":"622926","parentId":"3003"},{"id":"3011","name":"积石山保安族东乡族撒拉族自治县","code":"622927","parentId":"3003"}]},{"id":"3012","name":"甘南藏族自治州","code":"623000","parentId":"2920","children":[{"id":"3013","name":"合作市","code":"623001","parentId":"3012"},{"id":"3014","name":"临潭县","code":"623021","parentId":"3012"},{"id":"3015","name":"卓尼县","code":"623022","parentId":"3012"},{"id":"3016","name":"舟曲县","code":"623023","parentId":"3012"},{"id":"3017","name":"迭部县","code":"623024","parentId":"3012"},{"id":"3018","name":"玛曲县","code":"623025","parentId":"3012"},{"id":"3019","name":"碌曲县","code":"623026","parentId":"3012"},{"id":"3020","name":"夏河县","code":"623027","parentId":"3012"}]}]},{"id":"3021","name":"青海省","code":"630000","parentId":"0","children":[{"id":"3022","name":"西宁市","code":"630100","parentId":"3021","children":[{"id":"3023","name":"城东区","code":"630102","parentId":"3022"},{"id":"3024","name":"城中区","code":"630103","parentId":"3022"},{"id":"3025","name":"城西区","code":"630104","parentId":"3022"},{"id":"3026","name":"城北区","code":"630105","parentId":"3022"},{"id":"3027","name":"大通回族土族自治县","code":"630121","parentId":"3022"},{"id":"3028","name":"湟中县","code":"630122","parentId":"3022"},{"id":"3029","name":"湟源县","code":"630123","parentId":"3022"}]},{"id":"3030","name":"海东市","code":"630200","parentId":"3021","children":[{"id":"3031","name":"乐都区","code":"630202","parentId":"3030"},{"id":"3032","name":"平安区","code":"630203","parentId":"3030"},{"id":"3033","name":"民和回族土族自治县","code":"630222","parentId":"3030"},{"id":"3034","name":"互助土族自治县","code":"630223","parentId":"3030"},{"id":"3035","name":"化隆回族自治县","code":"630224","parentId":"3030"},{"id":"3036","name":"循化撒拉族自治县","code":"630225","parentId":"3030"}]},{"id":"3037","name":"海北藏族自治州","code":"632200","parentId":"3021","children":[{"id":"3038","name":"门源回族自治县","code":"632221","parentId":"3037"},{"id":"3039","name":"祁连县","code":"632222","parentId":"3037"},{"id":"3040","name":"海晏县","code":"632223","parentId":"3037"},{"id":"3041","name":"刚察县","code":"632224","parentId":"3037"}]},{"id":"3042","name":"黄南藏族自治州","code":"632300","parentId":"3021","children":[{"id":"3043","name":"同仁县","code":"632321","parentId":"3042"},{"id":"3044","name":"尖扎县","code":"632322","parentId":"3042"},{"id":"3045","name":"泽库县","code":"632323","parentId":"3042"},{"id":"3046","name":"河南蒙古族自治县","code":"632324","parentId":"3042"}]},{"id":"3047","name":"海南藏族自治州","code":"632500","parentId":"3021","children":[{"id":"3048","name":"共和县","code":"632521","parentId":"3047"},{"id":"3049","name":"同德县","code":"632522","parentId":"3047"},{"id":"3050","name":"贵德县","code":"632523","parentId":"3047"},{"id":"3051","name":"兴海县","code":"632524","parentId":"3047"},{"id":"3052","name":"贵南县","code":"632525","parentId":"3047"}]},{"id":"3053","name":"果洛藏族自治州","code":"632600","parentId":"3021","children":[{"id":"3054","name":"玛沁县","code":"632621","parentId":"3053"},{"id":"3055","name":"班玛县","code":"632622","parentId":"3053"},{"id":"3056","name":"甘德县","code":"632623","parentId":"3053"},{"id":"3057","name":"达日县","code":"632624","parentId":"3053"},{"id":"3058","name":"久治县","code":"632625","parentId":"3053"},{"id":"3059","name":"玛多县","code":"632626","parentId":"3053"}]},{"id":"3060","name":"玉树藏族自治州","code":"632700","parentId":"3021","children":[{"id":"3061","name":"玉树市","code":"632701","parentId":"3060"},{"id":"3062","name":"杂多县","code":"632722","parentId":"3060"},{"id":"3063","name":"称多县","code":"632723","parentId":"3060"},{"id":"3064","name":"治多县","code":"632724","parentId":"3060"},{"id":"3065","name":"囊谦县","code":"632725","parentId":"3060"},{"id":"3066","name":"曲麻莱县","code":"632726","parentId":"3060"}]},{"id":"3067","name":"海西蒙古族藏族自治州","code":"632800","parentId":"3021","children":[{"id":"3068","name":"格尔木市","code":"632801","parentId":"3067"},{"id":"3069","name":"德令哈市","code":"632802","parentId":"3067"},{"id":"3070","name":"乌兰县","code":"632821","parentId":"3067"},{"id":"3071","name":"都兰县","code":"632822","parentId":"3067"},{"id":"3072","name":"天峻县","code":"632823","parentId":"3067"}]}]},{"id":"3073","name":"宁夏回族自治区","code":"640000","parentId":"0","children":[{"id":"3074","name":"银川市","code":"640100","parentId":"3073","children":[{"id":"3075","name":"兴庆区","code":"640104","parentId":"3074"},{"id":"3076","name":"西夏区","code":"640105","parentId":"3074"},{"id":"3077","name":"金凤区","code":"640106","parentId":"3074"},{"id":"3078","name":"永宁县","code":"640121","parentId":"3074"},{"id":"3079","name":"贺兰县","code":"640122","parentId":"3074"},{"id":"3080","name":"灵武市","code":"640181","parentId":"3074"}]},{"id":"3081","name":"石嘴山市","code":"640200","parentId":"3073","children":[{"id":"3082","name":"大武口区","code":"640202","parentId":"3081"},{"id":"3083","name":"惠农区","code":"640205","parentId":"3081"},{"id":"3084","name":"平罗县","code":"640221","parentId":"3081"}]},{"id":"3085","name":"吴忠市","code":"640300","parentId":"3073","children":[{"id":"3086","name":"利通区","code":"640302","parentId":"3085"},{"id":"3087","name":"红寺堡区","code":"640303","parentId":"3085"},{"id":"3088","name":"盐池县","code":"640323","parentId":"3085"},{"id":"3089","name":"同心县","code":"640324","parentId":"3085"},{"id":"3090","name":"青铜峡市","code":"640381","parentId":"3085"}]},{"id":"3091","name":"固原市","code":"640400","parentId":"3073","children":[{"id":"3092","name":"原州区","code":"640402","parentId":"3091"},{"id":"3093","name":"西吉县","code":"640422","parentId":"3091"},{"id":"3094","name":"隆德县","code":"640423","parentId":"3091"},{"id":"3095","name":"泾源县","code":"640424","parentId":"3091"},{"id":"3096","name":"彭阳县","code":"640425","parentId":"3091"}]},{"id":"3097","name":"中卫市","code":"640500","parentId":"3073","children":[{"id":"3098","name":"沙坡头区","code":"640502","parentId":"3097"},{"id":"3099","name":"中宁县","code":"640521","parentId":"3097"},{"id":"3100","name":"海原县","code":"640522","parentId":"3097"}]}]},{"id":"3101","name":"新疆维吾尔自治区","code":"650000","parentId":"0","children":[{"id":"3102","name":"乌鲁木齐市","code":"650100","parentId":"3101","children":[{"id":"3103","name":"天山区","code":"650102","parentId":"3102"},{"id":"3104","name":"沙依巴克区","code":"650103","parentId":"3102"},{"id":"3105","name":"新市区","code":"650104","parentId":"3102"},{"id":"3106","name":"水磨沟区","code":"650105","parentId":"3102"},{"id":"3107","name":"头屯河区","code":"650106","parentId":"3102"},{"id":"3108","name":"达坂城区","code":"650107","parentId":"3102"},{"id":"3109","name":"米东区","code":"650109","parentId":"3102"},{"id":"3110","name":"乌鲁木齐县","code":"650121","parentId":"3102"}]},{"id":"3111","name":"克拉玛依市","code":"650200","parentId":"3101","children":[{"id":"3112","name":"独山子区","code":"650202","parentId":"3111"},{"id":"3113","name":"克拉玛依区","code":"650203","parentId":"3111"},{"id":"3114","name":"白碱滩区","code":"650204","parentId":"3111"},{"id":"3115","name":"乌尔禾区","code":"650205","parentId":"3111"}]},{"id":"3116","name":"吐鲁番市","code":"650400","parentId":"3101","children":[{"id":"3117","name":"高昌区","code":"650402","parentId":"3116"},{"id":"3118","name":"鄯善县","code":"650421","parentId":"3116"},{"id":"3119","name":"托克逊县","code":"650422","parentId":"3116"}]},{"id":"3120","name":"哈密市","code":"650500","parentId":"3101","children":[{"id":"3121","name":"伊州区","code":"650502","parentId":"3120"},{"id":"3122","name":"巴里坤哈萨克自治县","code":"650521","parentId":"3120"},{"id":"3123","name":"伊吾县","code":"650522","parentId":"3120"}]},{"id":"3124","name":"昌吉回族自治州","code":"652300","parentId":"3101","children":[{"id":"3125","name":"昌吉市","code":"652301","parentId":"3124"},{"id":"3126","name":"阜康市","code":"652302","parentId":"3124"},{"id":"3127","name":"呼图壁县","code":"652323","parentId":"3124"},{"id":"3128","name":"玛纳斯县","code":"652324","parentId":"3124"},{"id":"3129","name":"奇台县","code":"652325","parentId":"3124"},{"id":"3130","name":"吉木萨尔县","code":"652327","parentId":"3124"},{"id":"3131","name":"木垒哈萨克自治县","code":"652328","parentId":"3124"}]},{"id":"3132","name":"博尔塔拉蒙古自治州","code":"652700","parentId":"3101","children":[{"id":"3133","name":"博乐市","code":"652701","parentId":"3132"},{"id":"3134","name":"阿拉山口市","code":"652702","parentId":"3132"},{"id":"3135","name":"精河县","code":"652722","parentId":"3132"},{"id":"3136","name":"温泉县","code":"652723","parentId":"3132"}]},{"id":"3137","name":"巴音郭楞蒙古自治州","code":"652800","parentId":"3101","children":[{"id":"3138","name":"库尔勒市","code":"652801","parentId":"3137"},{"id":"3139","name":"轮台县","code":"652822","parentId":"3137"},{"id":"3140","name":"尉犁县","code":"652823","parentId":"3137"},{"id":"3141","name":"若羌县","code":"652824","parentId":"3137"},{"id":"3142","name":"且末县","code":"652825","parentId":"3137"},{"id":"3143","name":"焉耆回族自治县","code":"652826","parentId":"3137"},{"id":"3144","name":"和静县","code":"652827","parentId":"3137"},{"id":"3145","name":"和硕县","code":"652828","parentId":"3137"},{"id":"3146","name":"博湖县","code":"652829","parentId":"3137"}]},{"id":"3147","name":"阿克苏地区","code":"652900","parentId":"3101","children":[{"id":"3148","name":"阿克苏市","code":"652901","parentId":"3147"},{"id":"3149","name":"温宿县","code":"652922","parentId":"3147"},{"id":"3150","name":"库车县","code":"652923","parentId":"3147"},{"id":"3151","name":"沙雅县","code":"652924","parentId":"3147"},{"id":"3152","name":"新和县","code":"652925","parentId":"3147"},{"id":"3153","name":"拜城县","code":"652926","parentId":"3147"},{"id":"3154","name":"乌什县","code":"652927","parentId":"3147"},{"id":"3155","name":"阿瓦提县","code":"652928","parentId":"3147"},{"id":"3156","name":"柯坪县","code":"652929","parentId":"3147"}]},{"id":"3157","name":"克孜勒苏柯尔克孜自治州","code":"653000","parentId":"3101","children":[{"id":"3158","name":"阿图什市","code":"653001","parentId":"3157"},{"id":"3159","name":"阿克陶县","code":"653022","parentId":"3157"},{"id":"3160","name":"阿合奇县","code":"653023","parentId":"3157"},{"id":"3161","name":"乌恰县","code":"653024","parentId":"3157"}]},{"id":"3162","name":"喀什地区","code":"653100","parentId":"3101","children":[{"id":"3163","name":"喀什市","code":"653101","parentId":"3162"},{"id":"3164","name":"疏附县","code":"653121","parentId":"3162"},{"id":"3165","name":"疏勒县","code":"653122","parentId":"3162"},{"id":"3166","name":"英吉沙县","code":"653123","parentId":"3162"},{"id":"3167","name":"泽普县","code":"653124","parentId":"3162"},{"id":"3168","name":"莎车县","code":"653125","parentId":"3162"},{"id":"3169","name":"叶城县","code":"653126","parentId":"3162"},{"id":"3170","name":"麦盖提县","code":"653127","parentId":"3162"},{"id":"3171","name":"岳普湖县","code":"653128","parentId":"3162"},{"id":"3172","name":"伽师县","code":"653129","parentId":"3162"},{"id":"3173","name":"巴楚县","code":"653130","parentId":"3162"},{"id":"3174","name":"塔什库尔干塔吉克自治县","code":"653131","parentId":"3162"}]},{"id":"3175","name":"和田地区","code":"653200","parentId":"3101","children":[{"id":"3176","name":"和田市","code":"653201","parentId":"3175"},{"id":"3177","name":"和田县","code":"653221","parentId":"3175"},{"id":"3178","name":"墨玉县","code":"653222","parentId":"3175"},{"id":"3179","name":"皮山县","code":"653223","parentId":"3175"},{"id":"3180","name":"洛浦县","code":"653224","parentId":"3175"},{"id":"3181","name":"策勒县","code":"653225","parentId":"3175"},{"id":"3182","name":"于田县","code":"653226","parentId":"3175"},{"id":"3183","name":"民丰县","code":"653227","parentId":"3175"}]},{"id":"3184","name":"伊犁哈萨克自治州","code":"654000","parentId":"3101","children":[{"id":"3185","name":"伊宁市","code":"654002","parentId":"3184"},{"id":"3186","name":"奎屯市","code":"654003","parentId":"3184"},{"id":"3187","name":"霍尔果斯市","code":"654004","parentId":"3184"},{"id":"3188","name":"伊宁县","code":"654021","parentId":"3184"},{"id":"3189","name":"察布查尔锡伯自治县","code":"654022","parentId":"3184"},{"id":"3190","name":"霍城县","code":"654023","parentId":"3184"},{"id":"3191","name":"巩留县","code":"654024","parentId":"3184"},{"id":"3192","name":"新源县","code":"654025","parentId":"3184"},{"id":"3193","name":"昭苏县","code":"654026","parentId":"3184"},{"id":"3194","name":"特克斯县","code":"654027","parentId":"3184"},{"id":"3195","name":"尼勒克县","code":"654028","parentId":"3184"}]},{"id":"3196","name":"塔城地区","code":"654200","parentId":"3101","children":[{"id":"3197","name":"塔城市","code":"654201","parentId":"3196"},{"id":"3198","name":"乌苏市","code":"654202","parentId":"3196"},{"id":"3199","name":"额敏县","code":"654221","parentId":"3196"},{"id":"3200","name":"沙湾县","code":"654223","parentId":"3196"},{"id":"3201","name":"托里县","code":"654224","parentId":"3196"},{"id":"3202","name":"裕民县","code":"654225","parentId":"3196"},{"id":"3203","name":"和布克赛尔蒙古自治县","code":"654226","parentId":"3196"}]},{"id":"3204","name":"阿勒泰地区","code":"654300","parentId":"3101","children":[{"id":"3205","name":"阿勒泰市","code":"654301","parentId":"3204"},{"id":"3206","name":"布尔津县","code":"654321","parentId":"3204"},{"id":"3207","name":"富蕴县","code":"654322","parentId":"3204"},{"id":"3208","name":"福海县","code":"654323","parentId":"3204"},{"id":"3209","name":"哈巴河县","code":"654324","parentId":"3204"},{"id":"3210","name":"青河县","code":"654325","parentId":"3204"},{"id":"3211","name":"吉木乃县","code":"654326","parentId":"3204"}]},{"id":"3212","name":"石河子市","code":"659001","parentId":"3101","children":[{"id":"3472","name":"辖区","code":"-1","parentId":"3212"}]},{"id":"3213","name":"阿拉尔市","code":"659002","parentId":"3101","children":[{"id":"3474","name":"辖区","code":"-1","parentId":"3213"}]},{"id":"3214","name":"图木舒克市","code":"659003","parentId":"3101","children":[{"id":"3476","name":"辖区","code":"-1","parentId":"3214"}]},{"id":"3215","name":"五家渠市","code":"659004","parentId":"3101","children":[{"id":"3478","name":"辖区","code":"-1","parentId":"3215"}]},{"id":"3216","name":"北屯市","code":"659005","parentId":"3101","children":[{"id":"3480","name":"辖区","code":"-1","parentId":"3216"}]},{"id":"3217","name":"铁门关市","code":"659006","parentId":"3101","children":[{"id":"3482","name":"辖区","code":"-1","parentId":"3217"}]},{"id":"3218","name":"双河市","code":"659007","parentId":"3101","children":[{"id":"3484","name":"辖区","code":"-1","parentId":"3218"}]},{"id":"3219","name":"可克达拉市","code":"659008","parentId":"3101","children":[{"id":"3486","name":"辖区","code":"-1","parentId":"3219"}]},{"id":"3220","name":"昆玉市","code":"659009","parentId":"3101","children":[{"id":"3488","name":"辖区","code":"-1","parentId":"3220"}]}]},{"id":"3221","name":"台湾省","code":"710000","parentId":"0","children":[{"id":"3222","name":"台北市","code":"710100","parentId":"3221","children":[{"id":"3223","name":"中正区","code":"710101","parentId":"3222"},{"id":"3224","name":"大同区","code":"710102","parentId":"3222"},{"id":"3225","name":"中山区","code":"710103","parentId":"3222"},{"id":"3226","name":"万华区","code":"710104","parentId":"3222"},{"id":"3227","name":"信义区","code":"710105","parentId":"3222"},{"id":"3228","name":"松山区","code":"710106","parentId":"3222"},{"id":"3229","name":"大安区","code":"710107","parentId":"3222"},{"id":"3230","name":"南港区","code":"710108","parentId":"3222"},{"id":"3231","name":"北投区","code":"710109","parentId":"3222"},{"id":"3232","name":"内湖区","code":"710110","parentId":"3222"},{"id":"3233","name":"士林区","code":"710111","parentId":"3222"},{"id":"3234","name":"文山区","code":"710112","parentId":"3222"}]},{"id":"3235","name":"新北市","code":"710200","parentId":"3221","children":[{"id":"3236","name":"板桥区","code":"710201","parentId":"3235"},{"id":"3237","name":"土城区","code":"710202","parentId":"3235"},{"id":"3238","name":"新庄区","code":"710203","parentId":"3235"},{"id":"3239","name":"新店区","code":"710204","parentId":"3235"},{"id":"3240","name":"深坑区","code":"710205","parentId":"3235"},{"id":"3241","name":"石碇区","code":"710206","parentId":"3235"},{"id":"3242","name":"坪林区","code":"710207","parentId":"3235"},{"id":"3243","name":"乌来区","code":"710208","parentId":"3235"},{"id":"3244","name":"五股区","code":"710209","parentId":"3235"},{"id":"3245","name":"八里区","code":"710210","parentId":"3235"},{"id":"3246","name":"林口区","code":"710211","parentId":"3235"},{"id":"3247","name":"淡水区","code":"710212","parentId":"3235"},{"id":"3248","name":"中和区","code":"710213","parentId":"3235"},{"id":"3249","name":"永和区","code":"710214","parentId":"3235"},{"id":"3250","name":"三重区","code":"710215","parentId":"3235"},{"id":"3251","name":"芦洲区","code":"710216","parentId":"3235"},{"id":"3252","name":"泰山区","code":"710217","parentId":"3235"},{"id":"3253","name":"树林区","code":"710218","parentId":"3235"},{"id":"3254","name":"莺歌区","code":"710219","parentId":"3235"},{"id":"3255","name":"三峡区","code":"710220","parentId":"3235"},{"id":"3256","name":"汐止区","code":"710221","parentId":"3235"},{"id":"3257","name":"金山区","code":"710222","parentId":"3235"},{"id":"3258","name":"万里区","code":"710223","parentId":"3235"},{"id":"3259","name":"三芝区","code":"710224","parentId":"3235"},{"id":"3260","name":"石门区","code":"710225","parentId":"3235"},{"id":"3261","name":"瑞芳区","code":"710226","parentId":"3235"},{"id":"3262","name":"贡寮区","code":"710227","parentId":"3235"},{"id":"3263","name":"双溪区","code":"710228","parentId":"3235"},{"id":"3264","name":"平溪区","code":"710229","parentId":"3235"}]},{"id":"3265","name":"桃园市","code":"710300","parentId":"3221","children":[{"id":"3266","name":"桃园区","code":"710301","parentId":"3265"},{"id":"3267","name":"中坜区","code":"710302","parentId":"3265"},{"id":"3268","name":"平镇区","code":"710303","parentId":"3265"},{"id":"3269","name":"八德区","code":"710304","parentId":"3265"},{"id":"3270","name":"杨梅区","code":"710305","parentId":"3265"},{"id":"3271","name":"芦竹区","code":"710306","parentId":"3265"},{"id":"3272","name":"大溪区","code":"710307","parentId":"3265"},{"id":"3273","name":"龙潭区","code":"710308","parentId":"3265"},{"id":"3274","name":"龟山区","code":"710309","parentId":"3265"},{"id":"3275","name":"大园区","code":"710310","parentId":"3265"},{"id":"3276","name":"观音区","code":"710311","parentId":"3265"},{"id":"3277","name":"新屋区","code":"710312","parentId":"3265"},{"id":"3278","name":"复兴区","code":"710313","parentId":"3265"}]},{"id":"3279","name":"台中市","code":"710400","parentId":"3221","children":[{"id":"3280","name":"中区","code":"710401","parentId":"3279"},{"id":"3281","name":"东区","code":"710402","parentId":"3279"},{"id":"3282","name":"西区","code":"710403","parentId":"3279"},{"id":"3283","name":"南区","code":"710404","parentId":"3279"},{"id":"3284","name":"北区","code":"710405","parentId":"3279"},{"id":"3285","name":"西屯区","code":"710406","parentId":"3279"},{"id":"3286","name":"南屯区","code":"710407","parentId":"3279"},{"id":"3287","name":"北屯区","code":"710408","parentId":"3279"},{"id":"3288","name":"丰原区","code":"710409","parentId":"3279"},{"id":"3289","name":"大里区","code":"710410","parentId":"3279"},{"id":"3290","name":"太平区","code":"710411","parentId":"3279"},{"id":"3291","name":"东势区","code":"710412","parentId":"3279"},{"id":"3292","name":"大甲区","code":"710413","parentId":"3279"},{"id":"3293","name":"清水区","code":"710414","parentId":"3279"},{"id":"3294","name":"沙鹿区","code":"710415","parentId":"3279"},{"id":"3295","name":"梧栖区","code":"710416","parentId":"3279"},{"id":"3296","name":"后里区","code":"710417","parentId":"3279"},{"id":"3297","name":"神冈区","code":"710418","parentId":"3279"},{"id":"3298","name":"潭子区","code":"710419","parentId":"3279"},{"id":"3299","name":"大雅区","code":"710420","parentId":"3279"},{"id":"3300","name":"新小区","code":"710421","parentId":"3279"},{"id":"3301","name":"石冈区","code":"710422","parentId":"3279"},{"id":"3302","name":"外埔区","code":"710423","parentId":"3279"},{"id":"3303","name":"大安区","code":"710424","parentId":"3279"},{"id":"3304","name":"乌日区","code":"710425","parentId":"3279"},{"id":"3305","name":"大肚区","code":"710426","parentId":"3279"},{"id":"3306","name":"龙井区","code":"710427","parentId":"3279"},{"id":"3307","name":"雾峰区","code":"710428","parentId":"3279"},{"id":"3308","name":"和平区","code":"710429","parentId":"3279"}]},{"id":"3309","name":"台南市","code":"710500","parentId":"3221","children":[{"id":"3310","name":"中西区","code":"710501","parentId":"3309"},{"id":"3311","name":"东区","code":"710502","parentId":"3309"},{"id":"3312","name":"南区","code":"710503","parentId":"3309"},{"id":"3313","name":"北区","code":"710504","parentId":"3309"},{"id":"3314","name":"安平区","code":"710505","parentId":"3309"},{"id":"3315","name":"安南区","code":"710506","parentId":"3309"},{"id":"3316","name":"永康区","code":"710507","parentId":"3309"},{"id":"3317","name":"归仁区","code":"710508","parentId":"3309"},{"id":"3318","name":"新化区","code":"710509","parentId":"3309"},{"id":"3319","name":"左镇区","code":"710510","parentId":"3309"},{"id":"3320","name":"玉井区","code":"710511","parentId":"3309"},{"id":"3321","name":"楠西区","code":"710512","parentId":"3309"},{"id":"3322","name":"南化区","code":"710513","parentId":"3309"},{"id":"3323","name":"仁德区","code":"710514","parentId":"3309"},{"id":"3324","name":"关庙区","code":"710515","parentId":"3309"},{"id":"3325","name":"龙崎区","code":"710516","parentId":"3309"},{"id":"3326","name":"官田区","code":"710517","parentId":"3309"},{"id":"3327","name":"麻豆区","code":"710518","parentId":"3309"},{"id":"3328","name":"佳里区","code":"710519","parentId":"3309"},{"id":"3329","name":"西港区","code":"710520","parentId":"3309"},{"id":"3330","name":"七股区","code":"710521","parentId":"3309"},{"id":"3331","name":"将军区","code":"710522","parentId":"3309"},{"id":"3332","name":"学甲区","code":"710523","parentId":"3309"},{"id":"3333","name":"北门区","code":"710524","parentId":"3309"},{"id":"3334","name":"新营区","code":"710525","parentId":"3309"},{"id":"3335","name":"后壁区","code":"710526","parentId":"3309"},{"id":"3336","name":"白河区","code":"710527","parentId":"3309"},{"id":"3337","name":"东山区","code":"710528","parentId":"3309"},{"id":"3338","name":"六甲区","code":"710529","parentId":"3309"},{"id":"3339","name":"下营区","code":"710530","parentId":"3309"},{"id":"3340","name":"柳营区","code":"710531","parentId":"3309"},{"id":"3341","name":"盐水区","code":"710532","parentId":"3309"},{"id":"3342","name":"善化区","code":"710533","parentId":"3309"},{"id":"3343","name":"大内区","code":"710534","parentId":"3309"},{"id":"3344","name":"山上区","code":"710535","parentId":"3309"},{"id":"3345","name":"新市区","code":"710536","parentId":"3309"},{"id":"3346","name":"安定区","code":"710537","parentId":"3309"}]},{"id":"3347","name":"高雄市","code":"710600","parentId":"3221","children":[{"id":"3348","name":"楠梓区","code":"710601","parentId":"3347"},{"id":"3349","name":"左营区","code":"710602","parentId":"3347"},{"id":"3350","name":"鼓山区","code":"710603","parentId":"3347"},{"id":"3351","name":"三民区","code":"710604","parentId":"3347"},{"id":"3352","name":"盐埕区","code":"710605","parentId":"3347"},{"id":"3353","name":"前金区","code":"710606","parentId":"3347"},{"id":"3354","name":"新兴区","code":"710607","parentId":"3347"},{"id":"3355","name":"苓雅区","code":"710608","parentId":"3347"},{"id":"3356","name":"前镇区","code":"710609","parentId":"3347"},{"id":"3357","name":"旗津区","code":"710610","parentId":"3347"},{"id":"3358","name":"小港区","code":"710611","parentId":"3347"},{"id":"3359","name":"凤山区","code":"710612","parentId":"3347"},{"id":"3360","name":"大寮区","code":"710613","parentId":"3347"},{"id":"3361","name":"鸟松区","code":"710614","parentId":"3347"},{"id":"3362","name":"林园区","code":"710615","parentId":"3347"},{"id":"3363","name":"仁武区","code":"710616","parentId":"3347"},{"id":"3364","name":"大树区","code":"710617","parentId":"3347"},{"id":"3365","name":"大社区","code":"710618","parentId":"3347"},{"id":"3366","name":"冈山区","code":"710619","parentId":"3347"},{"id":"3367","name":"路竹区","code":"710620","parentId":"3347"},{"id":"3368","name":"桥头区","code":"710621","parentId":"3347"},{"id":"3369","name":"梓官区","code":"710622","parentId":"3347"},{"id":"3370","name":"弥陀区","code":"710623","parentId":"3347"},{"id":"3371","name":"永安区","code":"710624","parentId":"3347"},{"id":"3372","name":"燕巢区","code":"710625","parentId":"3347"},{"id":"3373","name":"阿莲区","code":"710626","parentId":"3347"},{"id":"3374","name":"茄萣区","code":"710627","parentId":"3347"},{"id":"3375","name":"湖内区","code":"710628","parentId":"3347"},{"id":"3376","name":"旗山区","code":"710629","parentId":"3347"},{"id":"3377","name":"美浓区","code":"710630","parentId":"3347"},{"id":"3378","name":"内门区","code":"710631","parentId":"3347"},{"id":"3379","name":"杉林区","code":"710632","parentId":"3347"},{"id":"3380","name":"甲仙区","code":"710633","parentId":"3347"},{"id":"3381","name":"六龟区","code":"710634","parentId":"3347"},{"id":"3382","name":"茂林区","code":"710635","parentId":"3347"},{"id":"3383","name":"桃源区","code":"710636","parentId":"3347"},{"id":"3384","name":"那玛夏区","code":"710637","parentId":"3347"}]},{"id":"3385","name":"基隆市","code":"710700","parentId":"3221","children":[{"id":"3386","name":"中正区","code":"710701","parentId":"3385"},{"id":"3387","name":"七堵区","code":"710702","parentId":"3385"},{"id":"3388","name":"暖暖区","code":"710703","parentId":"3385"},{"id":"3389","name":"仁爱区","code":"710704","parentId":"3385"},{"id":"3390","name":"中山区","code":"710705","parentId":"3385"},{"id":"3391","name":"安乐区","code":"710706","parentId":"3385"},{"id":"3392","name":"信义区","code":"710707","parentId":"3385"}]},{"id":"3393","name":"新竹市","code":"710800","parentId":"3221","children":[{"id":"3394","name":"东区","code":"710801","parentId":"3393"},{"id":"3395","name":"北区","code":"710802","parentId":"3393"},{"id":"3396","name":"香山区","code":"710803","parentId":"3393"}]},{"id":"3397","name":"嘉义市","code":"710900","parentId":"3221","children":[{"id":"3398","name":"东区","code":"710901","parentId":"3397"},{"id":"3399","name":"西区","code":"710902","parentId":"3397"}]},{"id":"3400","name":"宜兰县","code":"719001","parentId":"3221","children":[]},{"id":"3401","name":"新竹县","code":"719002","parentId":"3221","children":[]},{"id":"3402","name":"苗栗县","code":"719003","parentId":"3221","children":[]},{"id":"3403","name":"彰化县","code":"719004","parentId":"3221","children":[]},{"id":"3404","name":"南投县","code":"719005","parentId":"3221","children":[]},{"id":"3405","name":"嘉义县","code":"719006","parentId":"3221","children":[]},{"id":"3406","name":"云林县","code":"719007","parentId":"3221","children":[]},{"id":"3407","name":"屏东县","code":"719008","parentId":"3221","children":[]},{"id":"3408","name":"台东县","code":"719009","parentId":"3221","children":[]},{"id":"3409","name":"花莲县","code":"719010","parentId":"3221","children":[]},{"id":"3410","name":"澎湖县","code":"719011","parentId":"3221","children":[]},{"id":"3411","name":"金门县","code":"719012","parentId":"3221","children":[]},{"id":"3412","name":"连江县","code":"719013","parentId":"3221","children":[]}]},{"id":"3432","name":"中国澳门","code":"820000","parentId":"0","children":[{"id":"3446","name":"澳门半岛","code":"8201","parentId":"3432","children":[{"id":"3433","name":"花地玛堂区","code":"820101","parentId":"3446"},{"id":"3434","name":"圣安多尼堂区","code":"820102","parentId":"3446"},{"id":"3435","name":"大堂区","code":"820103","parentId":"3446"},{"id":"3436","name":"望德堂区","code":"820104","parentId":"3446"},{"id":"3437","name":"风顺堂区","code":"820105","parentId":"3446"},{"id":"3441","name":"澳门新城","code":"820109","parentId":"3446"}]},{"id":"3447","name":"离岛","code":"8202","parentId":"3432","children":[{"id":"3438","name":"嘉模堂区","code":"820106","parentId":"3447"},{"id":"3439","name":"圣方济各堂区","code":"820107","parentId":"3447"},{"id":"3440","name":"路氹城","code":"820108","parentId":"3447"}]}]},{"id":"3442","name":"北京","code":"100","parentId":"0","children":[{"id":"1","name":"北京市","code":"110000","parentId":"3442","children":[{"id":"2","name":"东城区","code":"110101","parentId":"1"},{"id":"3","name":"西城区","code":"110102","parentId":"1"},{"id":"4","name":"朝阳区","code":"110105","parentId":"1"},{"id":"5","name":"丰台区","code":"110106","parentId":"1"},{"id":"6","name":"石景山区","code":"110107","parentId":"1"},{"id":"7","name":"海淀区","code":"110108","parentId":"1"},{"id":"8","name":"门头沟区","code":"110109","parentId":"1"},{"id":"9","name":"房山区","code":"110111","parentId":"1"},{"id":"10","name":"通州区","code":"110112","parentId":"1"},{"id":"11","name":"顺义区","code":"110113","parentId":"1"},{"id":"12","name":"昌平区","code":"110114","parentId":"1"},{"id":"13","name":"大兴区","code":"110115","parentId":"1"},{"id":"14","name":"怀柔区","code":"110116","parentId":"1"},{"id":"15","name":"平谷区","code":"110117","parentId":"1"},{"id":"16","name":"密云区","code":"110118","parentId":"1"},{"id":"17","name":"延庆区","code":"110119","parentId":"1"}]}]},{"id":"3443","name":"天津","code":"120","parentId":"0","children":[{"id":"18","name":"天津市","code":"120000","parentId":"3443","children":[{"id":"19","name":"和平区","code":"120101","parentId":"18"},{"id":"20","name":"河东区","code":"120102","parentId":"18"},{"id":"21","name":"河西区","code":"120103","parentId":"18"},{"id":"22","name":"南开区","code":"120104","parentId":"18"},{"id":"23","name":"河北区","code":"120105","parentId":"18"},{"id":"24","name":"红桥区","code":"120106","parentId":"18"},{"id":"25","name":"东丽区","code":"120110","parentId":"18"},{"id":"26","name":"西青区","code":"120111","parentId":"18"},{"id":"27","name":"津南区","code":"120112","parentId":"18"},{"id":"28","name":"北辰区","code":"120113","parentId":"18"},{"id":"29","name":"武清区","code":"120114","parentId":"18"},{"id":"30","name":"宝坻区","code":"120115","parentId":"18"},{"id":"31","name":"滨海新区","code":"120116","parentId":"18"},{"id":"32","name":"宁河区","code":"120117","parentId":"18"},{"id":"33","name":"静海区","code":"120118","parentId":"18"},{"id":"34","name":"蓟州区","code":"120119","parentId":"18"}]}]},{"id":"3444","name":"重庆","code":"500","parentId":"0","children":[{"id":"2232","name":"重庆市","code":"500000","parentId":"3444","children":[{"id":"2233","name":"万州区","code":"500101","parentId":"2232"},{"id":"2234","name":"涪陵区","code":"500102","parentId":"2232"},{"id":"2235","name":"渝中区","code":"500103","parentId":"2232"},{"id":"2236","name":"大渡口区","code":"500104","parentId":"2232"},{"id":"2237","name":"江北区","code":"500105","parentId":"2232"},{"id":"2238","name":"沙坪坝区","code":"500106","parentId":"2232"},{"id":"2239","name":"九龙坡区","code":"500107","parentId":"2232"},{"id":"2240","name":"南岸区","code":"500108","parentId":"2232"},{"id":"2241","name":"北碚区","code":"500109","parentId":"2232"},{"id":"2242","name":"綦江区","code":"500110","parentId":"2232"},{"id":"2243","name":"大足区","code":"500111","parentId":"2232"},{"id":"2244","name":"渝北区","code":"500112","parentId":"2232"},{"id":"2245","name":"巴南区","code":"500113","parentId":"2232"},{"id":"2246","name":"黔江区","code":"500114","parentId":"2232"},{"id":"2247","name":"长寿区","code":"500115","parentId":"2232"},{"id":"2248","name":"江津区","code":"500116","parentId":"2232"},{"id":"2249","name":"合川区","code":"500117","parentId":"2232"},{"id":"2250","name":"永川区","code":"500118","parentId":"2232"},{"id":"2251","name":"南川区","code":"500119","parentId":"2232"},{"id":"2252","name":"璧山区","code":"500120","parentId":"2232"},{"id":"2253","name":"铜梁区","code":"500151","parentId":"2232"},{"id":"2254","name":"潼南区","code":"500152","parentId":"2232"},{"id":"2255","name":"荣昌区","code":"500153","parentId":"2232"},{"id":"2256","name":"开州区","code":"500154","parentId":"2232"},{"id":"2257","name":"梁平区","code":"500155","parentId":"2232"},{"id":"2258","name":"武隆区","code":"500156","parentId":"2232"},{"id":"2259","name":"城口县","code":"500229","parentId":"2232"},{"id":"2260","name":"丰都县","code":"500230","parentId":"2232"},{"id":"2261","name":"垫江县","code":"500231","parentId":"2232"},{"id":"2262","name":"忠县","code":"500233","parentId":"2232"},{"id":"2263","name":"云阳县","code":"500235","parentId":"2232"},{"id":"2264","name":"奉节县","code":"500236","parentId":"2232"},{"id":"2265","name":"巫山县","code":"500237","parentId":"2232"},{"id":"2266","name":"巫溪县","code":"500238","parentId":"2232"},{"id":"2267","name":"石柱土家族自治县","code":"500240","parentId":"2232"},{"id":"2268","name":"秀山土家族苗族自治县","code":"500241","parentId":"2232"},{"id":"2269","name":"酉阳土家族苗族自治县","code":"500242","parentId":"2232"},{"id":"2270","name":"彭水苗族土家族自治县","code":"500243","parentId":"2232"}]}]},{"id":"3445","name":"上海","code":"140","parentId":"0","children":[{"id":"789","name":"上海市","code":"310000","parentId":"3445","children":[{"id":"790","name":"黄浦区","code":"310101","parentId":"789"},{"id":"791","name":"徐汇区","code":"310104","parentId":"789"},{"id":"792","name":"长宁区","code":"310105","parentId":"789"},{"id":"793","name":"静安区","code":"310106","parentId":"789"},{"id":"794","name":"普陀区","code":"310107","parentId":"789"},{"id":"795","name":"虹口区","code":"310109","parentId":"789"},{"id":"796","name":"杨浦区","code":"310110","parentId":"789"},{"id":"797","name":"闵行区","code":"310112","parentId":"789"},{"id":"798","name":"宝山区","code":"310113","parentId":"789"},{"id":"799","name":"嘉定区","code":"310114","parentId":"789"},{"id":"800","name":"浦东新区","code":"310115","parentId":"789"},{"id":"801","name":"金山区","code":"310116","parentId":"789"},{"id":"802","name":"松江区","code":"310117","parentId":"789"},{"id":"803","name":"青浦区","code":"310118","parentId":"789"},{"id":"804","name":"奉贤区","code":"310120","parentId":"789"},{"id":"805","name":"崇明区","code":"310151","parentId":"789"}]}]},{"id":"3448","name":"中国香港","code":"810","parentId":"0","children":[{"id":"3413","name":"香港特别行政区","code":"810000","parentId":"3448","children":[{"id":"3414","name":"中西区","code":"810101","parentId":"3413"},{"id":"3415","name":"湾仔区","code":"810102","parentId":"3413"},{"id":"3416","name":"东区","code":"810103","parentId":"3413"},{"id":"3417","name":"南区","code":"810104","parentId":"3413"},{"id":"3418","name":"油尖旺区","code":"810105","parentId":"3413"},{"id":"3419","name":"深水埗区","code":"810106","parentId":"3413"},{"id":"3420","name":"九龙城区","code":"810107","parentId":"3413"},{"id":"3421","name":"黄大仙区","code":"810108","parentId":"3413"},{"id":"3422","name":"观塘区","code":"810109","parentId":"3413"},{"id":"3423","name":"北区","code":"810110","parentId":"3413"},{"id":"3424","name":"大埔区","code":"810111","parentId":"3413"},{"id":"3425","name":"沙田区","code":"810112","parentId":"3413"},{"id":"3426","name":"西贡区","code":"810113","parentId":"3413"},{"id":"3427","name":"荃湾区","code":"810114","parentId":"3413"},{"id":"3428","name":"屯门区","code":"810115","parentId":"3413"},{"id":"3429","name":"元朗区","code":"810116","parentId":"3413"},{"id":"3430","name":"葵青区","code":"810117","parentId":"3413"},{"id":"3431","name":"离岛区","code":"810118","parentId":"3413"}]}]}] \ No newline at end of file diff --git a/static/tabbar/appointment.png b/static/tabbar/appointment.png new file mode 100644 index 0000000..bce22f4 Binary files /dev/null and b/static/tabbar/appointment.png differ diff --git a/static/tabbar/appointment_HL.png b/static/tabbar/appointment_HL.png new file mode 100644 index 0000000..22a7b6f Binary files /dev/null and b/static/tabbar/appointment_HL.png differ diff --git a/static/tabbar/index.png b/static/tabbar/index.png new file mode 100644 index 0000000..9628d7c Binary files /dev/null and b/static/tabbar/index.png differ diff --git a/static/tabbar/index_HL.png b/static/tabbar/index_HL.png new file mode 100644 index 0000000..720fd2c Binary files /dev/null and b/static/tabbar/index_HL.png differ diff --git a/static/tabbar/mine.png b/static/tabbar/mine.png new file mode 100644 index 0000000..661f254 Binary files /dev/null and b/static/tabbar/mine.png differ diff --git a/static/tabbar/mine_HL.png b/static/tabbar/mine_HL.png new file mode 100644 index 0000000..4c95b8d Binary files /dev/null and b/static/tabbar/mine_HL.png differ diff --git a/store/index.js b/store/index.js new file mode 100644 index 0000000..3cc02ea --- /dev/null +++ b/store/index.js @@ -0,0 +1,12 @@ +import { createPinia } from "pinia"; + +const store = createPinia(); + +export function setupStore(app) { + app.use(store); +} + +export { store }; + +export * from "./modules/user"; +export * from "./modules/auth"; diff --git a/store/modules/auth.js b/store/modules/auth.js new file mode 100644 index 0000000..7efae03 --- /dev/null +++ b/store/modules/auth.js @@ -0,0 +1,69 @@ +import AuthAPI from "@/api/modules/auth"; +import { store } from "@/store"; +import { cache } from "@/utils/cache"; +import { defineStore } from "pinia"; +import { computed, ref, watch } from "vue"; + +export const useAuthStore = defineStore("auth", () => { + const ACCESS_TOKEN_KEY = "accessToken"; + const REFRESH_TOKEN_KEY = "refreshToken"; + const accessToken = ref(cache(ACCESS_TOKEN_KEY) ?? ""); + const refreshToken = ref(cache(REFRESH_TOKEN_KEY) ?? ""); + const isLoggedIn = computed(() => !!accessToken.value); + + watch(accessToken, (newValue) => cache(ACCESS_TOKEN_KEY, newValue || null)); + watch(refreshToken, (newValue) => cache(REFRESH_TOKEN_KEY, newValue || null)); + + // 注册 + async function signUp(payload) { + const response = await AuthAPI.signUp(payload); + const prefix = response.tokenType ? `${response.tokenType} ` : ""; + accessToken.value = prefix + response.accessToken; + refreshToken.value = prefix + response.refreshToken; + return response; + } + + // 登录 + async function signIn(payload) { + const response = await AuthAPI.signIn(payload); + const prefix = response.tokenType ? `${response.tokenType} ` : ""; + accessToken.value = prefix + response.accessToken; + refreshToken.value = prefix + response.refreshToken; + return response; + } + + // 登出 + function signOut() { + accessToken.value = ""; + refreshToken.value = ""; + } + + // 刷新token + async function refresh(payload) { + const response = await AuthAPI.refreshToken(payload); + const prefix = response.tokenType ? `${response.tokenType} ` : ""; + accessToken.value = prefix + response.accessToken; + return response; + } + + function setAccessToken(payload) { + accessToken.value = payload; + } + + return { + accessToken, + refreshToken, + isLoggedIn, + signUp, + signIn, + signOut, + refresh, + setAccessToken + }; +}); + +// 手动提供给 useStore() 函数 pinia 实例 +// https://pinia.vuejs.org/zh/core-concepts/outside-component-usage.html#using-a-store-outside-of-a-component +export function useAuthStoreHook() { + return useAuthStore(store); +} diff --git a/store/modules/user.js b/store/modules/user.js new file mode 100644 index 0000000..4f7f219 --- /dev/null +++ b/store/modules/user.js @@ -0,0 +1,32 @@ +import { defineStore } from "pinia"; +import { ref, watch } from "vue"; +import { cache } from "@/utils/cache"; + +export const useUserStore = defineStore("user", () => { + const userInfo = ref(cache('USERINFO_KEY') ? JSON.parse(cache('USERINFO_KEY')) : { + username: "", + }); + +const adressInfo = ref(cache('ADRESS_KEY') ? JSON.parse(cache('ADRESS_KEY')) : { + latitude: "", + longitude: "", + adress: "", + }); + +watch(userInfo, (newValue) => cache('USERINFO_KEY', newValue ? JSON.stringify(newValue) : null)); +watch(adressInfo, (newValue) => cache('ADRESS_KEY', newValue ? JSON.stringify(newValue) : null)); + +function setUserInfo(payload) { + userInfo.value = payload; +} +function setAdressInfo(payload) { + adressInfo.value = payload; +} + + return { + userInfo, + setUserInfo, + adressInfo, + setAdressInfo + }; +}); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..8e0f510 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,33 @@ +{ + "compilerOptions": { + "allowJs": true, + "allowSyntheticDefaultImports": true, + "baseUrl": ".", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "importHelpers": true, + "jsx": "preserve", + "jsxFactory": "h", + "jsxFragmentFactory": "Fragment", + "jsxImportSource": "vue", + "lib": ["esnext", "dom"], + "module": "esnext", + "moduleResolution": "bundler", + "noEmit": true, + "noImplicitThis": true, + "noLib": false, + "paths": { + "@/*": ["./*"] + }, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "target": "esnext", + "types": ["@dcloudio/types"], + "useDefineForClassFields": true, + "verbatimModuleSyntax": true + }, + "exclude": ["node_modules", "uni_modules", "unpackage", "**/*.js"], + "include": ["**/*.{ts,vue}"] +} diff --git a/uni.scss b/uni.scss new file mode 100644 index 0000000..519260d --- /dev/null +++ b/uni.scss @@ -0,0 +1,79 @@ +/** + * 这里是uni-app内置的常用样式变量 + * + * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 + * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App + * + */ + +/** + * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能 + * + * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 + */ + +/* 颜色变量 */ + +/* 行为相关颜色 */ +$uni-color-primary: #007aff; +$uni-color-success: #4cd964; +$uni-color-warning: #f0ad4e; +$uni-color-error: #dd524d; + +/* 文字基本颜色 */ +$uni-text-color: #333; //基本色 +$uni-text-color-inverse: #fff; //反色 +$uni-text-color-grey: #999; //辅助灰色,如加载更多的提示信息 +$uni-text-color-placeholder: #808080; +$uni-text-color-disable: #c0c0c0; + +/* 背景颜色 */ +$uni-bg-color: #ffffff; +$uni-bg-color-grey: #f8f8f8; +$uni-bg-color-hover: #f1f1f1; //点击状态颜色 +$uni-bg-color-mask: rgba(0, 0, 0, 0.4); //遮罩颜色 + +/* 边框颜色 */ +$uni-border-color: #c8c7cc; + +/* 尺寸变量 */ + +/* 文字尺寸 */ +$uni-font-size-sm: 12px; +$uni-font-size-base: 14px; +$uni-font-size-lg: 16px; + +/* 图片尺寸 */ +$uni-img-size-sm: 20px; +$uni-img-size-base: 26px; +$uni-img-size-lg: 40px; + +/* Border Radius */ +$uni-border-radius-sm: 2px; +$uni-border-radius-base: 3px; +$uni-border-radius-lg: 6px; +$uni-border-radius-circle: 50%; + +/* 水平间距 */ +$uni-spacing-row-sm: 5px; +$uni-spacing-row-base: 10px; +$uni-spacing-row-lg: 15px; + +/* 垂直间距 */ +$uni-spacing-col-sm: 4px; +$uni-spacing-col-base: 8px; +$uni-spacing-col-lg: 12px; + +/* 透明度 */ +$uni-opacity-disabled: 0.3; // 组件禁用态的透明度 + +/* 文章场景相关 */ +$uni-color-title: #2c405a; // 文章标题颜色 +$uni-font-size-title: 20px; +$uni-color-subtitle: #555555; // 二级标题颜色 +$uni-font-size-subtitle: 26px; +$uni-color-paragraph: #3f536e; // 文章段落颜色 +$uni-font-size-paragraph: 15px; + +/* uv-ui主题 */ +@import "@/uni_modules/uv-ui-tools/theme.scss"; diff --git a/uni_modules/uv-action-sheet/changelog.md b/uni_modules/uv-action-sheet/changelog.md new file mode 100644 index 0000000..ab3545e --- /dev/null +++ b/uni_modules/uv-action-sheet/changelog.md @@ -0,0 +1,7 @@ +## 1.0.2(2023-07-02) +uv-action-sheet 由于弹出层uv-popup的修改,打开和关闭方法更改,详情参考文档:https://www.uvui.cn/components/actionSheet.html +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-action-sheet 底部操作菜单 diff --git a/uni_modules/uv-action-sheet/components/uv-action-sheet/props.js b/uni_modules/uv-action-sheet/components/uv-action-sheet/props.js new file mode 100644 index 0000000..8adffee --- /dev/null +++ b/uni_modules/uv-action-sheet/components/uv-action-sheet/props.js @@ -0,0 +1,50 @@ +export default { + props: { + // 标题,有值则显示,同时会显示关闭按钮 + title: { + type: String, + default: '' + }, + // 选项上方的描述信息 + description: { + type: String, + default: '' + }, + // 数据 + actions: { + type: Array, + default: () => [] + }, + // 取消按钮的文字,不为空时显示按钮 + cancelText: { + type: String, + default: '' + }, + // 点击某个菜单项时是否关闭弹窗 + closeOnClickAction: { + type: Boolean, + default: true + }, + // 处理底部安全区(默认true) + safeAreaInsetBottom: { + type: Boolean, + default: true + }, + // 小程序的打开方式 + openType: { + type: String, + default: '' + }, + // 点击遮罩是否允许关闭 (默认true) + closeOnClickOverlay: { + type: Boolean, + default: true + }, + // 圆角值 + round: { + type: [Boolean, String, Number], + default: 0 + }, + ...uni.$uv?.props?.actionSheet + } +} \ No newline at end of file diff --git a/uni_modules/uv-action-sheet/components/uv-action-sheet/uv-action-sheet.vue b/uni_modules/uv-action-sheet/components/uv-action-sheet/uv-action-sheet.vue new file mode 100644 index 0000000..edca089 --- /dev/null +++ b/uni_modules/uv-action-sheet/components/uv-action-sheet/uv-action-sheet.vue @@ -0,0 +1,280 @@ + + + + + + diff --git a/uni_modules/uv-action-sheet/package.json b/uni_modules/uv-action-sheet/package.json new file mode 100644 index 0000000..e7b6173 --- /dev/null +++ b/uni_modules/uv-action-sheet/package.json @@ -0,0 +1,92 @@ +{ + "id": "uv-action-sheet", + "displayName": "uv-action-sheet 底部操作菜单 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.2", + "description": "该组件用于从底部弹出一个操作菜单,供用户选择并返回结果。本组件功能类似于uni的uni.showActionSheet API,配置更加灵活,所有平台都表现一致。", + "keywords": [ + "action-sheet", + "uvui", + "uv-ui", + "操作菜单", + "菜单选择" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-popup", + "uv-icon", + "uv-line", + "uv-loading-icon", + "uv-gap" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-action-sheet/readme.md b/uni_modules/uv-action-sheet/readme.md new file mode 100644 index 0000000..9ea5487 --- /dev/null +++ b/uni_modules/uv-action-sheet/readme.md @@ -0,0 +1,13 @@ +## ActionSheet 操作菜单 + +> **组件名:uv-action-sheet** + +本组件用于从底部弹出一个操作菜单,供用户选择并返回结果。 + +本组件功能类似于uni的uni.showActionSheet API,配置更加灵活,所有平台都表现一致。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-album/changelog.md b/uni_modules/uv-album/changelog.md new file mode 100644 index 0000000..42ab5e2 --- /dev/null +++ b/uni_modules/uv-album/changelog.md @@ -0,0 +1,10 @@ +## 1.0.4(2023-12-06) +1. 阻止事件冒泡处理 +## 1.0.3(2023-10-23) +1. 修复报错的BUG +## 1.0.2(2023-10-23) +1. 修复设置singleSize、multipleSize、space等值带单位,存在不显示的BUG +## 1.0.1(2023-09-13) +1. 添加依赖 +## 1.0.0(2023-08-30) +1. 新增uv-album相册组件 diff --git a/uni_modules/uv-album/components/uv-album/uv-album.vue b/uni_modules/uv-album/components/uv-album/uv-album.vue new file mode 100644 index 0000000..835d792 --- /dev/null +++ b/uni_modules/uv-album/components/uv-album/uv-album.vue @@ -0,0 +1,312 @@ + + + + \ No newline at end of file diff --git a/uni_modules/uv-album/package.json b/uni_modules/uv-album/package.json new file mode 100644 index 0000000..700602f --- /dev/null +++ b/uni_modules/uv-album/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-album", + "displayName": "uv-album 相册 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.4", + "description": "本组件提供一个类似相册的功能,让开发者开发起来更加得心应手,功能齐全,灵活配置可以,开箱即用。减少重复的模板代码", + "keywords": [ + "album", + "uv-ui", + "uvui", + "相册", + "图片" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-text" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-album/readme.md b/uni_modules/uv-album/readme.md new file mode 100644 index 0000000..edd2f0b --- /dev/null +++ b/uni_modules/uv-album/readme.md @@ -0,0 +1,21 @@ +# Album 相册 + +> **组件名:uv-album** + +本组件提供一个类似相册的功能,让开发者开发起来更加得心应手。 + +功能齐全,灵活配置可以,开箱即用。减少重复的模板代码。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-alert/changelog.md b/uni_modules/uv-alert/changelog.md new file mode 100644 index 0000000..71cca03 --- /dev/null +++ b/uni_modules/uv-alert/changelog.md @@ -0,0 +1,7 @@ +## 1.0.2(2023-06-01) +1. 修复点击触发两次实践的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-alert 警告提示组件 diff --git a/uni_modules/uv-alert/components/uv-alert/props.js b/uni_modules/uv-alert/components/uv-alert/props.js new file mode 100644 index 0000000..cc8edc1 --- /dev/null +++ b/uni_modules/uv-alert/components/uv-alert/props.js @@ -0,0 +1,45 @@ +export default { + props: { + // 显示文字 + title: { + type: String, + default: '' + }, + // 主题,success/warning/info/error + type: { + type: String, + default: 'warning' + }, + // 辅助性文字 + description: { + type: String, + default: '' + }, + // 是否可关闭 + closable: { + type: Boolean, + default: false + }, + // 是否显示图标 + showIcon: { + type: Boolean, + default: false + }, + // 浅或深色调,light-浅色,dark-深色 + effect: { + type: String, + default: 'light' + }, + // 文字是否居中 + center: { + type: Boolean, + default: false + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: 14 + }, + ...uni.$uv?.props?.alert + } +} \ No newline at end of file diff --git a/uni_modules/uv-alert/components/uv-alert/uv-alert.vue b/uni_modules/uv-alert/components/uv-alert/uv-alert.vue new file mode 100644 index 0000000..ba3965e --- /dev/null +++ b/uni_modules/uv-alert/components/uv-alert/uv-alert.vue @@ -0,0 +1,246 @@ + + + + + diff --git a/uni_modules/uv-alert/package.json b/uni_modules/uv-alert/package.json new file mode 100644 index 0000000..34bec20 --- /dev/null +++ b/uni_modules/uv-alert/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-alert", + "displayName": "uv-alert 警告提示 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.2", + "description": "uv-alert 警告提示,展现需要关注的信息。灵活配置,功能齐全,兼容全端", + "keywords": [ + "alert", + "uvui", + "uv-ui", + "警告提示" + ], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-transition", + "uv-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-alert/readme.md b/uni_modules/uv-alert/readme.md new file mode 100644 index 0000000..63dda76 --- /dev/null +++ b/uni_modules/uv-alert/readme.md @@ -0,0 +1,15 @@ +## Alert 警告提示 + +> **组件名:uv-alert** + +警告提示,展现需要关注的信息。 + +当某个页面需要向用户显示警告的信息时。 + +非浮层的静态展现形式,始终展现,不会自动消失,用户可以点击关闭。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-avatar/changelog.md b/uni_modules/uv-avatar/changelog.md new file mode 100644 index 0000000..8631c86 --- /dev/null +++ b/uni_modules/uv-avatar/changelog.md @@ -0,0 +1,13 @@ +## 1.0.5(2023-12-06) +1. 优化 +## 1.0.4(2023-12-06) +1. 优化 +## 1.0.3(2023-12-06) +1. 阻止事件冒泡处理,单个头像模式 +## 1.0.2(2023-12-06) +1. 阻止事件冒泡处理 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-avatar 头像组件 diff --git a/uni_modules/uv-avatar/components/uv-avatar-group/props.js b/uni_modules/uv-avatar/components/uv-avatar-group/props.js new file mode 100644 index 0000000..a610ab4 --- /dev/null +++ b/uni_modules/uv-avatar/components/uv-avatar-group/props.js @@ -0,0 +1,53 @@ +export default { + props: { + // 头像图片组 + urls: { + type: Array, + default: () => [] + }, + // 最多展示的头像数量 + maxCount: { + type: [String, Number], + default: 5 + }, + // 头像形状 + shape: { + type: String, + default: 'circle' + }, + // 图片裁剪模式 + mode: { + type: String, + default: 'scaleToFill' + }, + // 超出maxCount时是否显示查看更多的提示 + showMore: { + type: Boolean, + default: true + }, + // 头像大小 + size: { + type: [String, Number], + default: 40 + }, + // 指定从数组的对象元素中读取哪个属性作为图片地址 + keyName: { + type: String, + default: '' + }, + // 头像之间的遮挡比例 + gap: { + type: [String, Number], + validator(value) { + return value >= 0 && value <= 1 + }, + default: 0.5 + }, + // 需额外显示的值 + extraValue: { + type: [Number, String], + default: 0 + }, + ...uni.$uv?.props?.avatarGroup + } +} \ No newline at end of file diff --git a/uni_modules/uv-avatar/components/uv-avatar-group/uv-avatar-group.vue b/uni_modules/uv-avatar/components/uv-avatar-group/uv-avatar-group.vue new file mode 100644 index 0000000..59481f6 --- /dev/null +++ b/uni_modules/uv-avatar/components/uv-avatar-group/uv-avatar-group.vue @@ -0,0 +1,106 @@ + + + + + diff --git a/uni_modules/uv-avatar/components/uv-avatar/props.js b/uni_modules/uv-avatar/components/uv-avatar/props.js new file mode 100644 index 0000000..6c8d725 --- /dev/null +++ b/uni_modules/uv-avatar/components/uv-avatar/props.js @@ -0,0 +1,80 @@ +import { range } from '@/uni_modules/uv-ui-tools/libs/function/test.js' +export default { + props: { + // 头像图片路径(不能为相对路径) + src: { + type: String, + default: '' + }, + // 头像形状,circle-圆形,square-方形 + shape: { + type: String, + default: 'circle' + }, + // 头像尺寸 + size: { + type: [String, Number], + default: 40 + }, + // 裁剪模式 + mode: { + type: String, + default: 'scaleToFill' + }, + // 显示的文字 + text: { + type: String, + default: '' + }, + // 背景色 + bgColor: { + type: String, + default: '#c0c4cc' + }, + // 文字颜色 + color: { + type: String, + default: '#fff' + }, + // 文字大小 + fontSize: { + type: [String, Number], + default: 18 + }, + // 显示的图标 + icon: { + type: String, + default: '' + }, + // 显示小程序头像,只对百度,微信,QQ小程序有效 + mpAvatar: { + type: Boolean, + default: false + }, + // 是否使用随机背景色 + randomBgColor: { + type: Boolean, + default: false + }, + // 加载失败的默认头像(组件有内置默认图片) + defaultUrl: { + type: String, + default: '' + }, + // 如果配置了randomBgColor为true,且配置了此值,则从默认的背景色数组中取出对应索引的颜色值,取值0-19之间 + colorIndex: { + type: [String, Number], + // 校验参数规则,索引在0-19之间 + validator(n) { + return range(n, [0, 19]) || n === '' + }, + default: '' + }, + // 组件标识符 + name: { + type: String, + default: '' + }, + ...uni.$uv?.props?.avatar + } +} \ No newline at end of file diff --git a/uni_modules/uv-avatar/components/uv-avatar/uv-avatar.vue b/uni_modules/uv-avatar/components/uv-avatar/uv-avatar.vue new file mode 100644 index 0000000..0959d6a --- /dev/null +++ b/uni_modules/uv-avatar/components/uv-avatar/uv-avatar.vue @@ -0,0 +1,175 @@ + + + + + diff --git a/uni_modules/uv-avatar/package.json b/uni_modules/uv-avatar/package.json new file mode 100644 index 0000000..e77ab68 --- /dev/null +++ b/uni_modules/uv-avatar/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-avatar", + "displayName": "uv-avatar 头像 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.5", + "description": "uv-avatar 本组件一般用于展示头像的地方,如个人中心,或者评论列表页的用户头像展示等场所。", + "keywords": [ + "uv-avatar", + "uvui", + "uv-ui", + "avatar", + "头像" + ], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon", + "uv-text" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-avatar/readme.md b/uni_modules/uv-avatar/readme.md new file mode 100644 index 0000000..1f068eb --- /dev/null +++ b/uni_modules/uv-avatar/readme.md @@ -0,0 +1,11 @@ +## Avatar 头像 + +> **组件名:uv-avatar** + +本组件一般用于展示头像的地方,如个人中心,或者评论列表页的用户头像展示等场所。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-back-top/changelog.md b/uni_modules/uv-back-top/changelog.md new file mode 100644 index 0000000..9772262 --- /dev/null +++ b/uni_modules/uv-back-top/changelog.md @@ -0,0 +1,8 @@ +## 1.0.2(2023-07-03) +1. 优化插槽自定义内容部分 +2. 增加backToTop方法说明 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-back-top 返回顶部 diff --git a/uni_modules/uv-back-top/components/uv-back-top/props.js b/uni_modules/uv-back-top/components/uv-back-top/props.js new file mode 100644 index 0000000..74daff4 --- /dev/null +++ b/uni_modules/uv-back-top/components/uv-back-top/props.js @@ -0,0 +1,58 @@ +export default { + props: { + // 返回顶部的形状,circle-圆形,square-方形 + mode: { + type: String, + default: 'circle' + }, + // 自定义图标 + icon: { + type: String, + default: 'arrow-upward' + }, + // 提示文字 + text: { + type: String, + default: '' + }, + // 返回顶部滚动时间 + duration: { + type: [String, Number], + default: 100 + }, + // 滚动距离 + scrollTop: { + type: [String, Number], + default: 0 + }, + // 距离顶部多少距离显示,单位px + top: { + type: [String, Number], + default: 400 + }, + // 返回顶部按钮到底部的距离,单位px + bottom: { + type: [String, Number], + default: 100 + }, + // 返回顶部按钮到右边的距离,单位px + right: { + type: [String, Number], + default: 20 + }, + // 层级 + zIndex: { + type: [String, Number], + default: 9 + }, + // 图标的样式,对象形式 + iconStyle: { + type: Object, + default: () => ({ + color: '#909399', + fontSize: '19px' + }) + }, + ...uni.$uv?.props?.backtop + } +} \ No newline at end of file diff --git a/uni_modules/uv-back-top/components/uv-back-top/uv-back-top.vue b/uni_modules/uv-back-top/components/uv-back-top/uv-back-top.vue new file mode 100644 index 0000000..fad73d4 --- /dev/null +++ b/uni_modules/uv-back-top/components/uv-back-top/uv-back-top.vue @@ -0,0 +1,116 @@ + + + + + \ No newline at end of file diff --git a/uni_modules/uv-back-top/package.json b/uni_modules/uv-back-top/package.json new file mode 100644 index 0000000..a2035a5 --- /dev/null +++ b/uni_modules/uv-back-top/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-back-top", + "displayName": "uv-back-top 返回顶部 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.2", + "description": "返回顶部 组件一个用于长页面,滑动一定距离后,出现返回顶部按钮,方便快速返回顶部的场景。", + "keywords": [ + "uv-back-top", + "uvui", + "uv-ui", + "avatar", + "返回顶部" + ], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon", + "uv-transition" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-back-top/readme.md b/uni_modules/uv-back-top/readme.md new file mode 100644 index 0000000..d6a2aec --- /dev/null +++ b/uni_modules/uv-back-top/readme.md @@ -0,0 +1,11 @@ +## BackTop 返回顶部 + +> **组件名:uv-back-top** + +该组件一个用于长页面,滑动一定距离后,出现返回顶部按钮,方便快速返回顶部的场景。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-badge/changelog.md b/uni_modules/uv-badge/changelog.md new file mode 100644 index 0000000..b0ba104 --- /dev/null +++ b/uni_modules/uv-badge/changelog.md @@ -0,0 +1,7 @@ +## 1.0.2(2023-06-04) +1. 修复type等属性为null的时候不显示徽标的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-badge 徽标数,数字角标 diff --git a/uni_modules/uv-badge/components/uv-badge/props.js b/uni_modules/uv-badge/components/uv-badge/props.js new file mode 100644 index 0000000..c6369c3 --- /dev/null +++ b/uni_modules/uv-badge/components/uv-badge/props.js @@ -0,0 +1,73 @@ +export default { + props: { + // 是否显示圆点 + isDot: { + type: Boolean, + default: false + }, + // 显示的内容 + value: { + type: [Number, String], + default: '' + }, + // 是否显示 + show: { + type: Boolean, + default: true + }, + // 最大值,超过最大值会显示 '{max}+' + max: { + type: [Number, String], + default: 999 + }, + // 主题类型,error|warning|success|primary + type: { + type: [String,undefined,null], + default: 'error' + }, + // 当数值为 0 时,是否展示 Badge + showZero: { + type: Boolean, + default: false + }, + // 背景颜色,优先级比type高,如设置,type参数会失效 + bgColor: { + type: [String, null], + default: null + }, + // 字体颜色 + color: { + type: [String, null], + default: null + }, + // 徽标形状,circle-四角均为圆角,horn-左下角为直角 + shape: { + type: [String,undefined,null], + default: 'circle' + }, + // 设置数字的显示方式,overflow|ellipsis|limit + // overflow会根据max字段判断,超出显示`${max}+` + // ellipsis会根据max判断,超出显示`${max}...` + // limit会依据1000作为判断条件,超出1000,显示`${value/1000}K`,比如2.2k、3.34w,最多保留2位小数 + numberType: { + type: [String,undefined,null], + default: 'overflow' + }, + // 设置badge的位置偏移,格式为 [x, y],也即设置的为top和right的值,absolute为true时有效 + offset: { + type: Array, + default: () => [] + }, + // 是否反转背景和字体颜色 + inverted: { + type: Boolean, + default: false + }, + // 是否绝对定位 + absolute: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.badge + } +} \ No newline at end of file diff --git a/uni_modules/uv-badge/components/uv-badge/uv-badge.vue b/uni_modules/uv-badge/components/uv-badge/uv-badge.vue new file mode 100644 index 0000000..f7d3911 --- /dev/null +++ b/uni_modules/uv-badge/components/uv-badge/uv-badge.vue @@ -0,0 +1,176 @@ + + + + + diff --git a/uni_modules/uv-badge/package.json b/uni_modules/uv-badge/package.json new file mode 100644 index 0000000..5a81386 --- /dev/null +++ b/uni_modules/uv-badge/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-badge", + "displayName": "uv-badge 徽标数,数字角标 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.2", + "description": "徽标数一般用于图标右上角显示未读的消息数量,提示用户点击,有圆点和圆包含文字两种形式。", + "keywords": [ + "uv-badge", + "uvui", + "uv-ui", + "徽标数", + "数字角标" + ], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-badge/readme.md b/uni_modules/uv-badge/readme.md new file mode 100644 index 0000000..cf597eb --- /dev/null +++ b/uni_modules/uv-badge/readme.md @@ -0,0 +1,11 @@ +## Badge 徽标数 + +> **组件名:uv-badge** + +该组件一般用于图标右上角显示未读的消息数量,提示用户点击,有圆点和圆包含文字两种形式。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-button/changelog.md b/uni_modules/uv-button/changelog.md new file mode 100644 index 0000000..11e954e --- /dev/null +++ b/uni_modules/uv-button/changelog.md @@ -0,0 +1,33 @@ +## 1.0.15(2023-12-20) +1. 优化 +## 1.0.14(2023-12-06) +1. 优化 +## 1.0.13(2023-12-06) +1. 阻止事件冒泡处理 +## 1.0.12(2023-10-19) +1. 增加后置插槽 +## 1.0.11(2023-09-21) +1. 修复通过customStyle修改按钮宽度,组件中最外层节点不改变的问题 +## 1.0.10(2023-09-15) +1. 按钮支持open-type="agreePrivacyAuthorization" +## 1.0.9(2023-09-11) +1. 增加参数iconSize,用于控制图标的大小 +## 1.0.8(2023-09-10) +1. 修复多个按钮在一行宽度不正常的BUG +## 1.0.7(2023-09-07) +1. 修复warning颜色对应错误的BUG +## 1.0.6(2023-07-25) +1. 增加customTextStyle属性,方便自定义文字样式 +## 1.0.5(2023-07-20) +1. 解决微信小程序动态设置hover-class点击态不消失的BUG +## 1.0.4(2023-06-29) +1. 修改上次更新出现nvue报错异常 +## 1.0.3(2023-06-28) + 修复:设置open-type="chooseAvatar"等值不生效的BUG +## 1.0.2(2023-06-01) +1. 修复按钮点击触发两次的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-button 按钮 diff --git a/uni_modules/uv-button/components/uv-button/nvue.scss b/uni_modules/uv-button/components/uv-button/nvue.scss new file mode 100644 index 0000000..be6c16e --- /dev/null +++ b/uni_modules/uv-button/components/uv-button/nvue.scss @@ -0,0 +1,46 @@ +$uv-button-active-opacity:0.75 !default; +$uv-button-loading-text-margin-left:4px !default; +$uv-button-text-color: #FFFFFF !default; +$uv-button-text-plain-error-color:$uv-error !default; +$uv-button-text-plain-warning-color:$uv-warning !default; +$uv-button-text-plain-success-color:$uv-success !default; +$uv-button-text-plain-info-color:$uv-info !default; +$uv-button-text-plain-primary-color:$uv-primary !default; +.uv-button { + &--active { + opacity: $uv-button-active-opacity; + } + + &--active--plain { + background-color: rgb(217, 217, 217); + } + + &__loading-text { + margin-left:$uv-button-loading-text-margin-left; + } + + &__text, + &__loading-text { + color:$uv-button-text-color; + } + + &__text--plain--error { + color:$uv-button-text-plain-error-color; + } + + &__text--plain--warning { + color:$uv-button-text-plain-warning-color; + } + + &__text--plain--success{ + color:$uv-button-text-plain-success-color; + } + + &__text--plain--info { + color:$uv-button-text-plain-info-color; + } + + &__text--plain--primary { + color:$uv-button-text-plain-primary-color; + } +} \ No newline at end of file diff --git a/uni_modules/uv-button/components/uv-button/props.js b/uni_modules/uv-button/components/uv-button/props.js new file mode 100644 index 0000000..6275ad5 --- /dev/null +++ b/uni_modules/uv-button/components/uv-button/props.js @@ -0,0 +1,163 @@ +export default { + props: { + // 是否细边框 + hairline: { + type: Boolean, + default: true + }, + // 按钮的预置样式,info,primary,error,warning,success + type: { + type: String, + default: 'info' + }, + // 按钮尺寸,large,normal,small,mini + size: { + type: String, + default: 'normal' + }, + // 按钮形状,circle(两边为半圆),square(带圆角) + shape: { + type: String, + default: 'square' + }, + // 按钮是否镂空 + plain: { + type: Boolean, + default: false + }, + // 是否禁止状态 + disabled: { + type: Boolean, + default: false + }, + // 是否加载中 + loading: { + type: Boolean, + default: false + }, + // 加载中提示文字 + loadingText: { + type: [String, Number], + default: '' + }, + // 加载状态图标类型 + loadingMode: { + type: String, + default: 'spinner' + }, + // 加载图标大小 + loadingSize: { + type: [String, Number], + default: 14 + }, + // 开放能力,具体请看uniapp稳定关于button组件部分说明 + // https://uniapp.dcloud.io/component/button + openType: { + type: String, + default: '' + }, + // 用于
组件,点击分别会触发 组件的 submit/reset 事件 + // 取值为submit(提交表单),reset(重置表单) + formType: { + type: String, + default: '' + }, + // 打开 APP 时,向 APP 传递的参数,open-type=launchApp时有效 + // 只微信小程序、QQ小程序有效 + appParameter: { + type: String, + default: '' + }, + // 指定是否阻止本节点的祖先节点出现点击态,微信小程序有效 + hoverStopPropagation: { + type: Boolean, + default: true + }, + // 指定返回用户信息的语言,zh_CN 简体中文,zh_TW 繁体中文,en 英文。只微信小程序有效 + lang: { + type: String, + default: 'en' + }, + // 会话来源,open-type="contact"时有效。只微信小程序有效 + sessionFrom: { + type: String, + default: '' + }, + // 会话内消息卡片标题,open-type="contact"时有效 + // 默认当前标题,只微信小程序有效 + sendMessageTitle: { + type: String, + default: '' + }, + // 会话内消息卡片点击跳转小程序路径,open-type="contact"时有效 + // 默认当前分享路径,只微信小程序有效 + sendMessagePath: { + type: String, + default: '' + }, + // 会话内消息卡片图片,open-type="contact"时有效 + // 默认当前页面截图,只微信小程序有效 + sendMessageImg: { + type: String, + default: '' + }, + // 是否显示会话内消息卡片,设置此参数为 true,用户进入客服会话会在右下角显示"可能要发送的小程序"提示, + // 用户点击后可以快速发送小程序消息,open-type="contact"时有效 + showMessageCard: { + type: Boolean, + default: true + }, + // 额外传参参数,用于小程序的data-xxx属性,通过target.dataset.name获取 + dataName: { + type: String, + default: '' + }, + // 节流,一定时间内只能触发一次 + throttleTime: { + type: [String, Number], + default: 0 + }, + // 按住后多久出现点击态,单位毫秒 + hoverStartTime: { + type: [String, Number], + default: 0 + }, + // 手指松开后点击态保留时间,单位毫秒 + hoverStayTime: { + type: [String, Number], + default: 200 + }, + // 按钮文字,之所以通过props传入,是因为slot传入的话 + // nvue中无法控制文字的样式 + text: { + type: [String, Number], + default: '' + }, + // 按钮图标 + icon: { + type: String, + default: '' + }, + // 按钮图标大小 + iconSize: { + type: [String, Number], + default: '' + }, + // 按钮图标颜色 + iconColor: { + type: String, + default: '#000000' + }, + // 按钮颜色,支持传入linear-gradient渐变色 + color: { + type: String, + default: '' + }, + // 自定义按钮文本样式 + customTextStyle: { + type: [Object,String], + default: '' + }, + ...uni.$uv?.props?.button + } +} diff --git a/uni_modules/uv-button/components/uv-button/uv-button.vue b/uni_modules/uv-button/components/uv-button/uv-button.vue new file mode 100644 index 0000000..3a2470a --- /dev/null +++ b/uni_modules/uv-button/components/uv-button/uv-button.vue @@ -0,0 +1,528 @@ + + + + + diff --git a/uni_modules/uv-button/components/uv-button/vue.scss b/uni_modules/uv-button/components/uv-button/vue.scss new file mode 100644 index 0000000..7a089be --- /dev/null +++ b/uni_modules/uv-button/components/uv-button/vue.scss @@ -0,0 +1,93 @@ +@import '@/uni_modules/uv-ui-tools/libs/css/color.scss'; +// nvue下hover-class无效 +$uv-button-before-top:50% !default; +$uv-button-before-left:50% !default; +$uv-button-before-width:100% !default; +$uv-button-before-height:100% !default; +$uv-button-before-transform:translate(-50%, -50%) !default; +$uv-button-before-opacity:0 !default; +$uv-button-before-background-color:#000 !default; +$uv-button-before-border-color:#000 !default; +$uv-button-active-before-opacity:.15 !default; +$uv-button-icon-margin-left:4px !default; +$uv-button-plain-uv-button-info-color:$uv-info; +$uv-button-plain-uv-button-success-color:$uv-success; +$uv-button-plain-uv-button-error-color:$uv-error; +$uv-button-plain-uv-button-warning-color:$uv-warning; + +.uv-button-wrapper { + position: relative; + &--dis { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + z-index: 9; + } +} + +.uv-button { + width: 100%; + + &__text { + white-space: nowrap; + line-height: 1; + } + + &:before { + position: absolute; + top:$uv-button-before-top; + left:$uv-button-before-left; + width:$uv-button-before-width; + height:$uv-button-before-height; + border: inherit; + border-radius: inherit; + transform:$uv-button-before-transform; + opacity:$uv-button-before-opacity; + content: " "; + background-color:$uv-button-before-background-color; + border-color:$uv-button-before-border-color; + } + + &--active { + &:before { + opacity: .15 + } + } + + &__icon+&__text:not(:empty), + &__loading-text { + margin-left:$uv-button-icon-margin-left; + } + + &--plain { + &.uv-button--primary { + color: $uv-primary; + } + } + + &--plain { + &.uv-button--info { + color:$uv-button-plain-uv-button-info-color; + } + } + + &--plain { + &.uv-button--success { + color:$uv-button-plain-uv-button-success-color; + } + } + + &--plain { + &.uv-button--error { + color:$uv-button-plain-uv-button-error-color; + } + } + + &--plain { + &.uv-button--warning { + color:$uv-button-plain-uv-button-warning-color; + } + } +} diff --git a/uni_modules/uv-button/package.json b/uni_modules/uv-button/package.json new file mode 100644 index 0000000..c2a4a17 --- /dev/null +++ b/uni_modules/uv-button/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-button", + "displayName": "uv-button 按钮 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.15", + "description": "按钮组件内部实现以uni-app的button组件为基础,进行二次封装,灵活配置,功能齐全,兼容全端。", + "keywords": [ + "uv-button", + "uvui", + "uv-ui", + "button", + "按钮" + ], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-loading-icon", + "uv-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-button/readme.md b/uni_modules/uv-button/readme.md new file mode 100644 index 0000000..124a7f4 --- /dev/null +++ b/uni_modules/uv-button/readme.md @@ -0,0 +1,19 @@ +## Button 按钮 + +> **组件名:uv-button** + +该组件内部实现以`uni-app`的`button`组件为基础,进行二次封装,灵活配置,功能齐全,兼容全端。灵活配置,内置状态设置,开箱即用。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-calendar/changelog.md b/uni_modules/uv-calendar/changelog.md new file mode 100644 index 0000000..581562a --- /dev/null +++ b/uni_modules/uv-calendar/changelog.md @@ -0,0 +1,16 @@ +## 1.0.6(2023-11-03) +1. **该版本不再维护**,推荐使用新版本[https://ext.dcloud.net.cn/plugin?name=uv-calendars](https://ext.dcloud.net.cn/plugin?name=uv-calendars) +## 1.0.5(2023-07-02) +uv-calendar 由于弹出层uv-popup的修改,打开和关闭方法更改,详情参考文档:https://www.uvui.cn/components/calendar.html +## 1.0.4(2023-06-15) +1. formatter格式化中增加topInfo参数 +## 1.0.3(2023-06-08) +1. 增加点击日期change回调 +2. 优化 +## 1.0.2(2023-06-05) +1. 修改多个时间选择的时候存在反选的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-calendar 日历 diff --git a/uni_modules/uv-calendar/components/uv-calendar/calendar.js b/uni_modules/uv-calendar/components/uv-calendar/calendar.js new file mode 100644 index 0000000..e006dea --- /dev/null +++ b/uni_modules/uv-calendar/components/uv-calendar/calendar.js @@ -0,0 +1,546 @@ +/** +* @1900-2100区间内的公历、农历互转 +* @charset UTF-8 +* @github https://github.com/jjonline/calendar.js +* @Author Jea杨(JJonline@JJonline.Cn) +* @Time 2014-7-21 +* @Time 2016-8-13 Fixed 2033hex、Attribution Annals +* @Time 2016-9-25 Fixed lunar LeapMonth Param Bug +* @Time 2017-7-24 Fixed use getTerm Func Param Error.use solar year,NOT lunar year +* @Version 1.0.3 +* @公历转农历:calendar.solar2lunar(1987,11,01); //[you can ignore params of prefix 0] +* @农历转公历:calendar.lunar2solar(1987,09,10); //[you can ignore params of prefix 0] +*/ +/* eslint-disable */ +var calendar = { + + /** + * 农历1900-2100的润大小信息表 + * @Array Of Property + * @return Hex + */ + lunarInfo: [0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, // 1900-1909 + 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, // 1910-1919 + 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, // 1920-1929 + 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, // 1930-1939 + 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, // 1940-1949 + 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5b0, 0x14573, 0x052b0, 0x0a9a8, 0x0e950, 0x06aa0, // 1950-1959 + 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, // 1960-1969 + 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b6a0, 0x195a6, // 1970-1979 + 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, // 1980-1989 + 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x05ac0, 0x0ab60, 0x096d5, 0x092e0, // 1990-1999 + 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, // 2000-2009 + 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, // 2010-2019 + 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, // 2020-2029 + 0x05aa0, 0x076a3, 0x096d0, 0x04afb, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, // 2030-2039 + 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0, // 2040-2049 + /** Add By JJonline@JJonline.Cn**/ + 0x14b63, 0x09370, 0x049f8, 0x04970, 0x064b0, 0x168a6, 0x0ea50, 0x06b20, 0x1a6c4, 0x0aae0, // 2050-2059 + 0x0a2e0, 0x0d2e3, 0x0c960, 0x0d557, 0x0d4a0, 0x0da50, 0x05d55, 0x056a0, 0x0a6d0, 0x055d4, // 2060-2069 + 0x052d0, 0x0a9b8, 0x0a950, 0x0b4a0, 0x0b6a6, 0x0ad50, 0x055a0, 0x0aba4, 0x0a5b0, 0x052b0, // 2070-2079 + 0x0b273, 0x06930, 0x07337, 0x06aa0, 0x0ad50, 0x14b55, 0x04b60, 0x0a570, 0x054e4, 0x0d160, // 2080-2089 + 0x0e968, 0x0d520, 0x0daa0, 0x16aa6, 0x056d0, 0x04ae0, 0x0a9d4, 0x0a2d0, 0x0d150, 0x0f252, // 2090-2099 + 0x0d520], // 2100 + + /** + * 公历每个月份的天数普通表 + * @Array Of Property + * @return Number + */ + solarMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], + + /** + * 天干地支之天干速查表 + * @Array Of Property trans["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"] + * @return Cn string + */ + Gan: ['\u7532', '\u4e59', '\u4e19', '\u4e01', '\u620a', '\u5df1', '\u5e9a', '\u8f9b', '\u58ec', '\u7678'], + + /** + * 天干地支之地支速查表 + * @Array Of Property + * @trans["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"] + * @return Cn string + */ + Zhi: ['\u5b50', '\u4e11', '\u5bc5', '\u536f', '\u8fb0', '\u5df3', '\u5348', '\u672a', '\u7533', '\u9149', '\u620c', '\u4ea5'], + + /** + * 天干地支之地支速查表<=>生肖 + * @Array Of Property + * @trans["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"] + * @return Cn string + */ + Animals: ['\u9f20', '\u725b', '\u864e', '\u5154', '\u9f99', '\u86c7', '\u9a6c', '\u7f8a', '\u7334', '\u9e21', '\u72d7', '\u732a'], + + /** + * 24节气速查表 + * @Array Of Property + * @trans["小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"] + * @return Cn string + */ + solarTerm: ['\u5c0f\u5bd2', '\u5927\u5bd2', '\u7acb\u6625', '\u96e8\u6c34', '\u60ca\u86f0', '\u6625\u5206', '\u6e05\u660e', '\u8c37\u96e8', '\u7acb\u590f', '\u5c0f\u6ee1', '\u8292\u79cd', '\u590f\u81f3', '\u5c0f\u6691', '\u5927\u6691', '\u7acb\u79cb', '\u5904\u6691', '\u767d\u9732', '\u79cb\u5206', '\u5bd2\u9732', '\u971c\u964d', '\u7acb\u51ac', '\u5c0f\u96ea', '\u5927\u96ea', '\u51ac\u81f3'], + + /** + * 1900-2100各年的24节气日期速查表 + * @Array Of Property + * @return 0x string For splice + */ + sTermInfo: ['9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', + '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', + 'b027097bd097c36b0b6fc9274c91aa', '9778397bd19801ec9210c965cc920e', '97b6b97bd19801ec95f8c965cc920f', + '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd197c36c9210c9274c91aa', + '97b6b97bd19801ec95f8c965cc920e', '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', + '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec95f8c965cc920e', '97bcf97c3598082c95f8e1cfcc920f', + '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', + '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c359801ec95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd097bd07f595b0b6fc920fb0722', + '9778397bd097c36b0b6fc9210c8dc2', '9778397bd19801ec9210c9274c920e', '97b6b97bd19801ec95f8c965cc920f', + '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', + '97b6b97bd19801ec95f8c965cc920f', '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', + '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bd07f1487f595b0b0bc920fb0722', + '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f531b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf7f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '9778397bd097c36b0b6fc9210c91aa', '97b6b97bd197c36c9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', + '97b6b7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', + '9778397bd097c36b0b70c9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b7f0e47f531b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '9778397bd097c36b0b6fc9210c91aa', '97b6b7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '977837f0e37f149b0723b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c35b0b6fc9210c8dc2', + '977837f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc9210c8dc2', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '977837f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', + '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '977837f0e37f14998082b0723b06bd', '7f07e7f0e37f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f595b0b0bb0b6fb0722', '7f0e37f0e37f14898082b0723b02d5', + '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f531b0b0bb0b6fb0722', + '7f0e37f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e37f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', + '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f149b0723b0787b0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0723b06bd', + '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', '7f0e37f0e366aa89801eb072297c35', + '7ec967f0e37f14998082b0723b06bd', '7f07e7f0e37f14998083b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14898082b0723b02d5', '7f07e7f0e37f14998082b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66aa89801e9808297c35', '665f67f0e37f14898082b0723b02d5', + '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66a449801e9808297c35', + '665f67f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e36665b66a449801e9808297c35', '665f67f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e26665b66a449801e9808297c35', '665f67f0e37f1489801eb072297c35', + '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722'], + + /** + * 数字转中文速查表 + * @Array Of Property + * @trans ['日','一','二','三','四','五','六','七','八','九','十'] + * @return Cn string + */ + nStr1: ['\u65e5', '\u4e00', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341'], + + /** + * 日期转农历称呼速查表 + * @Array Of Property + * @trans ['初','十','廿','卅'] + * @return Cn string + */ + nStr2: ['\u521d', '\u5341', '\u5eff', '\u5345'], + + /** + * 月份转农历称呼速查表 + * @Array Of Property + * @trans ['正','一','二','三','四','五','六','七','八','九','十','冬','腊'] + * @return Cn string + */ + nStr3: ['\u6b63', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341', '\u51ac', '\u814a'], + + /** + * 返回农历y年一整年的总天数 + * @param lunar Year + * @return Number + * @eg:var count = calendar.lYearDays(1987) ;//count=387 + */ + lYearDays: function (y) { + var i; var sum = 348 + for (i = 0x8000; i > 0x8; i >>= 1) { sum += (this.lunarInfo[y - 1900] & i) ? 1 : 0 } + return (sum + this.leapDays(y)) + }, + + /** + * 返回农历y年闰月是哪个月;若y年没有闰月 则返回0 + * @param lunar Year + * @return Number (0-12) + * @eg:var leapMonth = calendar.leapMonth(1987) ;//leapMonth=6 + */ + leapMonth: function (y) { // 闰字编码 \u95f0 + return (this.lunarInfo[y - 1900] & 0xf) + }, + + /** + * 返回农历y年闰月的天数 若该年没有闰月则返回0 + * @param lunar Year + * @return Number (0、29、30) + * @eg:var leapMonthDay = calendar.leapDays(1987) ;//leapMonthDay=29 + */ + leapDays: function (y) { + if (this.leapMonth(y)) { + return ((this.lunarInfo[y - 1900] & 0x10000) ? 30 : 29) + } + return (0) + }, + + /** + * 返回农历y年m月(非闰月)的总天数,计算m为闰月时的天数请使用leapDays方法 + * @param lunar Year + * @return Number (-1、29、30) + * @eg:var MonthDay = calendar.monthDays(1987,9) ;//MonthDay=29 + */ + monthDays: function (y, m) { + if (m > 12 || m < 1) { return -1 }// 月份参数从1至12,参数错误返回-1 + return ((this.lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29) + }, + + /** + * 返回公历(!)y年m月的天数 + * @param solar Year + * @return Number (-1、28、29、30、31) + * @eg:var solarMonthDay = calendar.leapDays(1987) ;//solarMonthDay=30 + */ + solarDays: function (y, m) { + if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1 + var ms = m - 1 + if (ms == 1) { // 2月份的闰平规律测算后确认返回28或29 + return (((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)) ? 29 : 28) + } else { + return (this.solarMonth[ms]) + } + }, + + /** + * 农历年份转换为干支纪年 + * @param lYear 农历年的年份数 + * @return Cn string + */ + toGanZhiYear: function (lYear) { + var ganKey = (lYear - 3) % 10 + var zhiKey = (lYear - 3) % 12 + if (ganKey == 0) ganKey = 10// 如果余数为0则为最后一个天干 + if (zhiKey == 0) zhiKey = 12// 如果余数为0则为最后一个地支 + return this.Gan[ganKey - 1] + this.Zhi[zhiKey - 1] + }, + + /** + * 公历月、日判断所属星座 + * @param cMonth [description] + * @param cDay [description] + * @return Cn string + */ + toAstro: function (cMonth, cDay) { + var s = '\u9b54\u7faf\u6c34\u74f6\u53cc\u9c7c\u767d\u7f8a\u91d1\u725b\u53cc\u5b50\u5de8\u87f9\u72ee\u5b50\u5904\u5973\u5929\u79e4\u5929\u874e\u5c04\u624b\u9b54\u7faf' + var arr = [20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22] + return s.substr(cMonth * 2 - (cDay < arr[cMonth - 1] ? 2 : 0), 2) + '\u5ea7'// 座 + }, + + /** + * 传入offset偏移量返回干支 + * @param offset 相对甲子的偏移量 + * @return Cn string + */ + toGanZhi: function (offset) { + return this.Gan[offset % 10] + this.Zhi[offset % 12] + }, + + /** + * 传入公历(!)y年获得该年第n个节气的公历日期 + * @param y公历年(1900-2100);n二十四节气中的第几个节气(1~24);从n=1(小寒)算起 + * @return day Number + * @eg:var _24 = calendar.getTerm(1987,3) ;//_24=4;意即1987年2月4日立春 + */ + getTerm: function (y, n) { + if (y < 1900 || y > 2100) { return -1 } + if (n < 1 || n > 24) { return -1 } + var _table = this.sTermInfo[y - 1900] + var _info = [ + parseInt('0x' + _table.substr(0, 5)).toString(), + parseInt('0x' + _table.substr(5, 5)).toString(), + parseInt('0x' + _table.substr(10, 5)).toString(), + parseInt('0x' + _table.substr(15, 5)).toString(), + parseInt('0x' + _table.substr(20, 5)).toString(), + parseInt('0x' + _table.substr(25, 5)).toString() + ] + var _calday = [ + _info[0].substr(0, 1), + _info[0].substr(1, 2), + _info[0].substr(3, 1), + _info[0].substr(4, 2), + + _info[1].substr(0, 1), + _info[1].substr(1, 2), + _info[1].substr(3, 1), + _info[1].substr(4, 2), + + _info[2].substr(0, 1), + _info[2].substr(1, 2), + _info[2].substr(3, 1), + _info[2].substr(4, 2), + + _info[3].substr(0, 1), + _info[3].substr(1, 2), + _info[3].substr(3, 1), + _info[3].substr(4, 2), + + _info[4].substr(0, 1), + _info[4].substr(1, 2), + _info[4].substr(3, 1), + _info[4].substr(4, 2), + + _info[5].substr(0, 1), + _info[5].substr(1, 2), + _info[5].substr(3, 1), + _info[5].substr(4, 2) + ] + return parseInt(_calday[n - 1]) + }, + + /** + * 传入农历数字月份返回汉语通俗表示法 + * @param lunar month + * @return Cn string + * @eg:var cnMonth = calendar.toChinaMonth(12) ;//cnMonth='腊月' + */ + toChinaMonth: function (m) { // 月 => \u6708 + if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1 + var s = this.nStr3[m - 1] + s += '\u6708'// 加上月字 + return s + }, + + /** + * 传入农历日期数字返回汉字表示法 + * @param lunar day + * @return Cn string + * @eg:var cnDay = calendar.toChinaDay(21) ;//cnMonth='廿一' + */ + toChinaDay: function (d) { // 日 => \u65e5 + var s + switch (d) { + case 10: + s = '\u521d\u5341'; break + case 20: + s = '\u4e8c\u5341'; break + break + case 30: + s = '\u4e09\u5341'; break + break + default: + s = this.nStr2[Math.floor(d / 10)] + s += this.nStr1[d % 10] + } + return (s) + }, + + /** + * 年份转生肖[!仅能大致转换] => 精确划分生肖分界线是“立春” + * @param y year + * @return Cn string + * @eg:var animal = calendar.getAnimal(1987) ;//animal='兔' + */ + getAnimal: function (y) { + return this.Animals[(y - 4) % 12] + }, + + /** + * 传入阳历年月日获得详细的公历、农历object信息 <=>JSON + * @param y solar year + * @param m solar month + * @param d solar day + * @return JSON object + * @eg:console.log(calendar.solar2lunar(1987,11,01)); + */ + solar2lunar: function (y, m, d) { // 参数区间1900.1.31~2100.12.31 + // 年份限定、上限 + if (y < 1900 || y > 2100) { + return -1// undefined转换为数字变为NaN + } + // 公历传参最下限 + if (y == 1900 && m == 1 && d < 31) { + return -1 + } + // 未传参 获得当天 + if (!y) { + var objDate = new Date() + } else { + var objDate = new Date(y, parseInt(m) - 1, d) + } + var i; var leap = 0; var temp = 0 + // 修正ymd参数 + var y = objDate.getFullYear() + var m = objDate.getMonth() + 1 + var d = objDate.getDate() + var offset = (Date.UTC(objDate.getFullYear(), objDate.getMonth(), objDate.getDate()) - Date.UTC(1900, 0, 31)) / 86400000 + for (i = 1900; i < 2101 && offset > 0; i++) { + temp = this.lYearDays(i) + offset -= temp + } + if (offset < 0) { + offset += temp; i-- + } + + // 是否今天 + var isTodayObj = new Date() + var isToday = false + if (isTodayObj.getFullYear() == y && isTodayObj.getMonth() + 1 == m && isTodayObj.getDate() == d) { + isToday = true + } + // 星期几 + var nWeek = objDate.getDay() + var cWeek = this.nStr1[nWeek] + // 数字表示周几顺应天朝周一开始的惯例 + if (nWeek == 0) { + nWeek = 7 + } + // 农历年 + var year = i + var leap = this.leapMonth(i) // 闰哪个月 + var isLeap = false + + // 效验闰月 + for (i = 1; i < 13 && offset > 0; i++) { + // 闰月 + if (leap > 0 && i == (leap + 1) && isLeap == false) { + --i + isLeap = true; temp = this.leapDays(year) // 计算农历闰月天数 + } else { + temp = this.monthDays(year, i)// 计算农历普通月天数 + } + // 解除闰月 + if (isLeap == true && i == (leap + 1)) { isLeap = false } + offset -= temp + } + // 闰月导致数组下标重叠取反 + if (offset == 0 && leap > 0 && i == leap + 1) { + if (isLeap) { + isLeap = false + } else { + isLeap = true; --i + } + } + if (offset < 0) { + offset += temp; --i + } + // 农历月 + var month = i + // 农历日 + var day = offset + 1 + // 天干地支处理 + var sm = m - 1 + var gzY = this.toGanZhiYear(year) + + // 当月的两个节气 + // bugfix-2017-7-24 11:03:38 use lunar Year Param `y` Not `year` + var firstNode = this.getTerm(y, (m * 2 - 1))// 返回当月「节」为几日开始 + var secondNode = this.getTerm(y, (m * 2))// 返回当月「节」为几日开始 + + // 依据12节气修正干支月 + var gzM = this.toGanZhi((y - 1900) * 12 + m + 11) + if (d >= firstNode) { + gzM = this.toGanZhi((y - 1900) * 12 + m + 12) + } + + // 传入的日期的节气与否 + var isTerm = false + var Term = null + if (firstNode == d) { + isTerm = true + Term = this.solarTerm[m * 2 - 2] + } + if (secondNode == d) { + isTerm = true + Term = this.solarTerm[m * 2 - 1] + } + // 日柱 当月一日与 1900/1/1 相差天数 + var dayCyclical = Date.UTC(y, sm, 1, 0, 0, 0, 0) / 86400000 + 25567 + 10 + var gzD = this.toGanZhi(dayCyclical + d - 1) + // 该日期所属的星座 + var astro = this.toAstro(m, d) + + return { 'lYear': year, 'lMonth': month, 'lDay': day, 'Animal': this.getAnimal(year), 'IMonthCn': (isLeap ? '\u95f0' : '') + this.toChinaMonth(month), 'IDayCn': this.toChinaDay(day), 'cYear': y, 'cMonth': m, 'cDay': d, 'gzYear': gzY, 'gzMonth': gzM, 'gzDay': gzD, 'isToday': isToday, 'isLeap': isLeap, 'nWeek': nWeek, 'ncWeek': '\u661f\u671f' + cWeek, 'isTerm': isTerm, 'Term': Term, 'astro': astro } + }, + + /** + * 传入农历年月日以及传入的月份是否闰月获得详细的公历、农历object信息 <=>JSON + * @param y lunar year + * @param m lunar month + * @param d lunar day + * @param isLeapMonth lunar month is leap or not.[如果是农历闰月第四个参数赋值true即可] + * @return JSON object + * @eg:console.log(calendar.lunar2solar(1987,9,10)); + */ + lunar2solar: function (y, m, d, isLeapMonth) { // 参数区间1900.1.31~2100.12.1 + var isLeapMonth = !!isLeapMonth + var leapOffset = 0 + var leapMonth = this.leapMonth(y) + var leapDay = this.leapDays(y) + if (isLeapMonth && (leapMonth != m)) { return -1 }// 传参要求计算该闰月公历 但该年得出的闰月与传参的月份并不同 + if (y == 2100 && m == 12 && d > 1 || y == 1900 && m == 1 && d < 31) { return -1 }// 超出了最大极限值 + var day = this.monthDays(y, m) + var _day = day + // bugFix 2016-9-25 + // if month is leap, _day use leapDays method + if (isLeapMonth) { + _day = this.leapDays(y, m) + } + if (y < 1900 || y > 2100 || d > _day) { return -1 }// 参数合法性效验 + + // 计算农历的时间差 + var offset = 0 + for (var i = 1900; i < y; i++) { + offset += this.lYearDays(i) + } + var leap = 0; var isAdd = false + for (var i = 1; i < m; i++) { + leap = this.leapMonth(y) + if (!isAdd) { // 处理闰月 + if (leap <= i && leap > 0) { + offset += this.leapDays(y); isAdd = true + } + } + offset += this.monthDays(y, i) + } + // 转换闰月农历 需补充该年闰月的前一个月的时差 + if (isLeapMonth) { offset += day } + // 1900年农历正月一日的公历时间为1900年1月30日0时0分0秒(该时间也是本农历的最开始起始点) + var stmap = Date.UTC(1900, 1, 30, 0, 0, 0) + var calObj = new Date((offset + d - 31) * 86400000 + stmap) + var cY = calObj.getUTCFullYear() + var cM = calObj.getUTCMonth() + 1 + var cD = calObj.getUTCDate() + + return this.solar2lunar(cY, cM, cD) + } +} + +export default calendar diff --git a/uni_modules/uv-calendar/components/uv-calendar/header.vue b/uni_modules/uv-calendar/components/uv-calendar/header.vue new file mode 100644 index 0000000..d7daa7b --- /dev/null +++ b/uni_modules/uv-calendar/components/uv-calendar/header.vue @@ -0,0 +1,104 @@ + + + + + diff --git a/uni_modules/uv-calendar/components/uv-calendar/month.vue b/uni_modules/uv-calendar/components/uv-calendar/month.vue new file mode 100644 index 0000000..1a649bc --- /dev/null +++ b/uni_modules/uv-calendar/components/uv-calendar/month.vue @@ -0,0 +1,616 @@ + + + + + diff --git a/uni_modules/uv-calendar/components/uv-calendar/props.js b/uni_modules/uv-calendar/components/uv-calendar/props.js new file mode 100644 index 0000000..c359293 --- /dev/null +++ b/uni_modules/uv-calendar/components/uv-calendar/props.js @@ -0,0 +1,145 @@ +export default { + props: { + // 日历顶部标题 + title: { + type: String, + default: '日期选择' + }, + // 是否显示标题 + showTitle: { + type: Boolean, + default: true + }, + // 是否显示副标题 + showSubtitle: { + type: Boolean, + default: true + }, + // 日期类型选择,single-选择单个日期,multiple-可以选择多个日期,range-选择日期范围 + mode: { + type: String, + default: 'single' + }, + // mode=range时,第一个日期底部的提示文字 + startText: { + type: String, + default: '开始' + }, + // mode=range时,最后一个日期底部的提示文字 + endText: { + type: String, + default: '结束' + }, + // 自定义列表 + customList: { + type: Array, + default: () => [] + }, + // 主题色,对底部按钮和选中日期有效 + color: { + type: String, + default: '#3c9cff' + }, + // 最小的可选日期 + minDate: { + type: [String, Number], + default: 0 + }, + // 最大可选日期 + maxDate: { + type: [String, Number], + default: 0 + }, + // 默认选中的日期,mode为multiple或range是必须为数组格式 + defaultDate: { + type: [Array, String, Date, null], + default: null + }, + // mode=multiple时,最多可选多少个日期 + maxCount: { + type: [String, Number], + default: Number.MAX_SAFE_INTEGER + }, + // 日期行高 + rowHeight: { + type: [String, Number], + default: 56 + }, + // 日期格式化函数 + formatter: { + type: [Function, null], + default: null + }, + // 是否显示农历 + showLunar: { + type: Boolean, + default: false + }, + // 是否显示月份背景色 + showMark: { + type: Boolean, + default: true + }, + // 确定按钮的文字 + confirmText: { + type: String, + default: '确定' + }, + // 确认按钮处于禁用状态时的文字 + confirmDisabledText: { + type: String, + default: '确定' + }, + // 是否允许点击遮罩关闭日历 + closeOnClickOverlay: { + type: Boolean, + default: false + }, + // 是否允许点击确认按钮关闭日历 + closeOnClickConfirm: { + type: Boolean, + default: true + }, + // 是否为只读状态,只读状态下禁止选择日期 + readonly: { + type: Boolean, + default: false + }, + // 是否展示确认按钮 + showConfirm: { + type: Boolean, + default: true + }, + // 日期区间最多可选天数,默认无限制,mode = range时有效 Infinity + maxRange: { + type: [Number, String], + default: Number.MAX_SAFE_INTEGER + }, + // 范围选择超过最多可选天数时的提示文案,mode = range时有效 + rangePrompt: { + type: String, + default: '' + }, + // 范围选择超过最多可选天数时,是否展示提示文案,mode = range时有效 + showRangePrompt: { + type: Boolean, + default: true + }, + // 是否允许日期范围的起止时间为同一天,mode = range时有效 + allowSameDay: { + type: Boolean, + default: false + }, + // 圆角值 + round: { + type: [Boolean, String, Number], + default: 0 + }, + // 最多展示月份数量 + monthNum: { + type: [Number, String], + default: 3 + }, + ...uni.$uv?.props?.calendar + } +} \ No newline at end of file diff --git a/uni_modules/uv-calendar/components/uv-calendar/uv-calendar.vue b/uni_modules/uv-calendar/components/uv-calendar/uv-calendar.vue new file mode 100644 index 0000000..626e833 --- /dev/null +++ b/uni_modules/uv-calendar/components/uv-calendar/uv-calendar.vue @@ -0,0 +1,390 @@ + + + + + diff --git a/uni_modules/uv-calendar/package.json b/uni_modules/uv-calendar/package.json new file mode 100644 index 0000000..03d8812 --- /dev/null +++ b/uni_modules/uv-calendar/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-calendar", + "displayName": "uv-calendar 日历 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.6", + "description": "日历组件用于单个选择日期,范围选择日期等,日历被包裹在底部弹起的容器中,灵活配置,功能齐全,兼容全端。强烈推荐使用最新版日历组件,在下方跳入。", + "keywords": [ + "uv-calendar", + "uvui", + "uv-ui", + "calendar", + "日历" + ], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-button", + "uv-popup" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-calendar/readme.md b/uni_modules/uv-calendar/readme.md new file mode 100644 index 0000000..3c2de54 --- /dev/null +++ b/uni_modules/uv-calendar/readme.md @@ -0,0 +1,21 @@ +## Calendar 日历 + +> **组件名:uv-calendar** + +此组件用于单个选择日期,范围选择日期等,日历被包裹在底部弹起的容器中。灵活配置,功能齐全,兼容全端。 + +## 温馨提示:该组件不再更新,强烈推荐使用最新版日历组件:[https://www.uvui.cn/components/calendars.html](https://www.uvui.cn/components/calendars.html)。基于 `uv-ui` 插件市场首款多功能日历组件,不仅可以查看、选择日期,还可以选择任意范围内的日期、打点操作、自定义主题颜色、自定义文案、农历显示等。追求的就是完美。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-calendars/changelog.md b/uni_modules/uv-calendars/changelog.md new file mode 100644 index 0000000..b3b2e38 --- /dev/null +++ b/uni_modules/uv-calendars/changelog.md @@ -0,0 +1,40 @@ +## 1.0.15(2023-11-08) +1. 增加readonly属性,是否为只读状态,只读状态下禁止选择日期 +## 1.0.14(2023-10-12) +1. 修复selected没有设置了info或者info设置为空字符串后,文本则无法恢复BUG +## 1.0.13(2023-09-19) +1. 修复range模式下,selected设置了info后选中后,导致文本不恢复的问题 +2. 修复multiple模式下,selected自定义信息的颜色没变,依然是白色 +## 1.0.12(2023-09-14) +1. 优化 +## 1.0.11(2023-09-14) +1. 增加allowSameDay参数,是否允许日期范围的起止时间为同一天,mode = range时有效 +2. 修复在vue2+小程序渲染时闪烁的问题 +## 1.0.10(2023-09-07) +1. 修复国际化失效的BUG +## 1.0.9(2023-09-01) +1. 修复在pages.json中设置easycom会报错的BUG +## 1.0.8(2023-08-29) +1. 修复mainjs中设置setConfig修改属性不生效的问题,出自评论区:https://ext.dcloud.net.cn/plugin?id=12287 +## 1.0.7(2023-08-26) +1. 去除range参数,由mode="range"替换 +2. 新增mode参数,不传 / multiple / range,分别为单日期, 多个日期,选择日期范围 +3. 与uv-calendar选择日期的功能保持一致 +## 1.0.6(2023-08-25) +1. 修复点击返回今天按钮时,monthSwitch方法回调参数返回月份不是当天对应月份:https://github.com/climblee/uv-ui/issues/7 +## 1.0.5(2023-08-13) +1. 修复选择月份弹窗层级的问题 +## 1.0.4(2023-08-06) +1. 优化 +## 1.0.3(2023-08-06) +1. 修复高度不对的BUG +2. 修复文案在小屏幕的BUG +## 1.0.2(2023-08-05) +1. 增加startText参数 +2. 增加endText参数 +3. 增加selected中的参数 +4. 优化日历范围选择 +## 1.0.1(2023-08-04) +1. 修复 自定义主题时 颜色错误的BUG +## 1.0.0(2023-08-03) +1. 新增 uv-calendars 新版日历发布 diff --git a/uni_modules/uv-calendars/components/uv-calendars/calendar-body.vue b/uni_modules/uv-calendars/components/uv-calendars/calendar-body.vue new file mode 100644 index 0000000..b675fbd --- /dev/null +++ b/uni_modules/uv-calendars/components/uv-calendars/calendar-body.vue @@ -0,0 +1,376 @@ + + + + + \ No newline at end of file diff --git a/uni_modules/uv-calendars/components/uv-calendars/calendar-item.vue b/uni_modules/uv-calendars/components/uv-calendars/calendar-item.vue new file mode 100644 index 0000000..862d068 --- /dev/null +++ b/uni_modules/uv-calendars/components/uv-calendars/calendar-item.vue @@ -0,0 +1,248 @@ + + + \ No newline at end of file diff --git a/uni_modules/uv-calendars/components/uv-calendars/calendar.js b/uni_modules/uv-calendars/components/uv-calendars/calendar.js new file mode 100644 index 0000000..b8d7d6f --- /dev/null +++ b/uni_modules/uv-calendars/components/uv-calendars/calendar.js @@ -0,0 +1,546 @@ +/** +* @1900-2100区间内的公历、农历互转 +* @charset UTF-8 +* @github https://github.com/jjonline/calendar.js +* @Author Jea杨(JJonline@JJonline.Cn) +* @Time 2014-7-21 +* @Time 2016-8-13 Fixed 2033hex、Attribution Annals +* @Time 2016-9-25 Fixed lunar LeapMonth Param Bug +* @Time 2017-7-24 Fixed use getTerm Func Param Error.use solar year,NOT lunar year +* @Version 1.0.3 +* @公历转农历:calendar.solar2lunar(1987,11,01); //[you can ignore params of prefix 0] +* @农历转公历:calendar.lunar2solar(1987,09,10); //[you can ignore params of prefix 0] +*/ +/* eslint-disable */ +var calendar = { + + /** + * 农历1900-2100的润大小信息表 + * @Array Of Property + * @return Hex + */ + lunarInfo: [0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, // 1900-1909 + 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, // 1910-1919 + 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, // 1920-1929 + 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, // 1930-1939 + 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, // 1940-1949 + 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5b0, 0x14573, 0x052b0, 0x0a9a8, 0x0e950, 0x06aa0, // 1950-1959 + 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, // 1960-1969 + 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b6a0, 0x195a6, // 1970-1979 + 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, // 1980-1989 + 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x05ac0, 0x0ab60, 0x096d5, 0x092e0, // 1990-1999 + 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, // 2000-2009 + 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, // 2010-2019 + 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, // 2020-2029 + 0x05aa0, 0x076a3, 0x096d0, 0x04afb, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, // 2030-2039 + 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0, // 2040-2049 + /** Add By JJonline@JJonline.Cn**/ + 0x14b63, 0x09370, 0x049f8, 0x04970, 0x064b0, 0x168a6, 0x0ea50, 0x06b20, 0x1a6c4, 0x0aae0, // 2050-2059 + 0x0a2e0, 0x0d2e3, 0x0c960, 0x0d557, 0x0d4a0, 0x0da50, 0x05d55, 0x056a0, 0x0a6d0, 0x055d4, // 2060-2069 + 0x052d0, 0x0a9b8, 0x0a950, 0x0b4a0, 0x0b6a6, 0x0ad50, 0x055a0, 0x0aba4, 0x0a5b0, 0x052b0, // 2070-2079 + 0x0b273, 0x06930, 0x07337, 0x06aa0, 0x0ad50, 0x14b55, 0x04b60, 0x0a570, 0x054e4, 0x0d160, // 2080-2089 + 0x0e968, 0x0d520, 0x0daa0, 0x16aa6, 0x056d0, 0x04ae0, 0x0a9d4, 0x0a2d0, 0x0d150, 0x0f252, // 2090-2099 + 0x0d520], // 2100 + + /** + * 公历每个月份的天数普通表 + * @Array Of Property + * @return Number + */ + solarMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], + + /** + * 天干地支之天干速查表 + * @Array Of Property trans["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"] + * @return Cn string + */ + Gan: ['\u7532', '\u4e59', '\u4e19', '\u4e01', '\u620a', '\u5df1', '\u5e9a', '\u8f9b', '\u58ec', '\u7678'], + + /** + * 天干地支之地支速查表 + * @Array Of Property + * @trans["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"] + * @return Cn string + */ + Zhi: ['\u5b50', '\u4e11', '\u5bc5', '\u536f', '\u8fb0', '\u5df3', '\u5348', '\u672a', '\u7533', '\u9149', '\u620c', '\u4ea5'], + + /** + * 天干地支之地支速查表<=>生肖 + * @Array Of Property + * @trans["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"] + * @return Cn string + */ + Animals: ['\u9f20', '\u725b', '\u864e', '\u5154', '\u9f99', '\u86c7', '\u9a6c', '\u7f8a', '\u7334', '\u9e21', '\u72d7', '\u732a'], + + /** + * 24节气速查表 + * @Array Of Property + * @trans["小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"] + * @return Cn string + */ + solarTerm: ['\u5c0f\u5bd2', '\u5927\u5bd2', '\u7acb\u6625', '\u96e8\u6c34', '\u60ca\u86f0', '\u6625\u5206', '\u6e05\u660e', '\u8c37\u96e8', '\u7acb\u590f', '\u5c0f\u6ee1', '\u8292\u79cd', '\u590f\u81f3', '\u5c0f\u6691', '\u5927\u6691', '\u7acb\u79cb', '\u5904\u6691', '\u767d\u9732', '\u79cb\u5206', '\u5bd2\u9732', '\u971c\u964d', '\u7acb\u51ac', '\u5c0f\u96ea', '\u5927\u96ea', '\u51ac\u81f3'], + + /** + * 1900-2100各年的24节气日期速查表 + * @Array Of Property + * @return 0x string For splice + */ + sTermInfo: ['9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', + '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', + 'b027097bd097c36b0b6fc9274c91aa', '9778397bd19801ec9210c965cc920e', '97b6b97bd19801ec95f8c965cc920f', + '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd197c36c9210c9274c91aa', + '97b6b97bd19801ec95f8c965cc920e', '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', + '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec95f8c965cc920e', '97bcf97c3598082c95f8e1cfcc920f', + '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', + '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c359801ec95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd097bd07f595b0b6fc920fb0722', + '9778397bd097c36b0b6fc9210c8dc2', '9778397bd19801ec9210c9274c920e', '97b6b97bd19801ec95f8c965cc920f', + '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', + '97b6b97bd19801ec95f8c965cc920f', '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', + '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bd07f1487f595b0b0bc920fb0722', + '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f531b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf7f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '9778397bd097c36b0b6fc9210c91aa', '97b6b97bd197c36c9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', + '97b6b7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', + '9778397bd097c36b0b70c9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b7f0e47f531b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '9778397bd097c36b0b6fc9210c91aa', '97b6b7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '977837f0e37f149b0723b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c35b0b6fc9210c8dc2', + '977837f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc9210c8dc2', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '977837f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', + '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '977837f0e37f14998082b0723b06bd', '7f07e7f0e37f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f595b0b0bb0b6fb0722', '7f0e37f0e37f14898082b0723b02d5', + '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f531b0b0bb0b6fb0722', + '7f0e37f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e37f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', + '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f149b0723b0787b0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0723b06bd', + '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', '7f0e37f0e366aa89801eb072297c35', + '7ec967f0e37f14998082b0723b06bd', '7f07e7f0e37f14998083b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14898082b0723b02d5', '7f07e7f0e37f14998082b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66aa89801e9808297c35', '665f67f0e37f14898082b0723b02d5', + '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66a449801e9808297c35', + '665f67f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e36665b66a449801e9808297c35', '665f67f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e26665b66a449801e9808297c35', '665f67f0e37f1489801eb072297c35', + '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722'], + + /** + * 数字转中文速查表 + * @Array Of Property + * @trans ['日','一','二','三','四','五','六','七','八','九','十'] + * @return Cn string + */ + nStr1: ['\u65e5', '\u4e00', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341'], + + /** + * 日期转农历称呼速查表 + * @Array Of Property + * @trans ['初','十','廿','卅'] + * @return Cn string + */ + nStr2: ['\u521d', '\u5341', '\u5eff', '\u5345'], + + /** + * 月份转农历称呼速查表 + * @Array Of Property + * @trans ['正','一','二','三','四','五','六','七','八','九','十','冬','腊'] + * @return Cn string + */ + nStr3: ['\u6b63', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341', '\u51ac', '\u814a'], + + /** + * 返回农历y年一整年的总天数 + * @param lunar Year + * @return Number + * @eg:var count = calendar.lYearDays(1987) ;//count=387 + */ + lYearDays: function (y) { + var i; var sum = 348 + for (i = 0x8000; i > 0x8; i >>= 1) { sum += (this.lunarInfo[y - 1900] & i) ? 1 : 0 } + return (sum + this.leapDays(y)) + }, + + /** + * 返回农历y年闰月是哪个月;若y年没有闰月 则返回0 + * @param lunar Year + * @return Number (0-12) + * @eg:var leapMonth = calendar.leapMonth(1987) ;//leapMonth=6 + */ + leapMonth: function (y) { // 闰字编码 \u95f0 + return (this.lunarInfo[y - 1900] & 0xf) + }, + + /** + * 返回农历y年闰月的天数 若该年没有闰月则返回0 + * @param lunar Year + * @return Number (0、29、30) + * @eg:var leapMonthDay = calendar.leapDays(1987) ;//leapMonthDay=29 + */ + leapDays: function (y) { + if (this.leapMonth(y)) { + return ((this.lunarInfo[y - 1900] & 0x10000) ? 30 : 29) + } + return (0) + }, + + /** + * 返回农历y年m月(非闰月)的总天数,计算m为闰月时的天数请使用leapDays方法 + * @param lunar Year + * @return Number (-1、29、30) + * @eg:var MonthDay = calendar.monthDays(1987,9) ;//MonthDay=29 + */ + monthDays: function (y, m) { + if (m > 12 || m < 1) { return -1 }// 月份参数从1至12,参数错误返回-1 + return ((this.lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29) + }, + + /** + * 返回公历(!)y年m月的天数 + * @param solar Year + * @return Number (-1、28、29、30、31) + * @eg:var solarMonthDay = calendar.leapDays(1987) ;//solarMonthDay=30 + */ + solarDays: function (y, m) { + if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1 + var ms = m - 1 + if (ms == 1) { // 2月份的闰平规律测算后确认返回28或29 + return (((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)) ? 29 : 28) + } else { + return (this.solarMonth[ms]) + } + }, + + /** + * 农历年份转换为干支纪年 + * @param lYear 农历年的年份数 + * @return Cn string + */ + toGanZhiYear: function (lYear) { + var ganKey = (lYear - 3) % 10 + var zhiKey = (lYear - 3) % 12 + if (ganKey == 0) ganKey = 10// 如果余数为0则为最后一个天干 + if (zhiKey == 0) zhiKey = 12// 如果余数为0则为最后一个地支 + return this.Gan[ganKey - 1] + this.Zhi[zhiKey - 1] + }, + + /** + * 公历月、日判断所属星座 + * @param cMonth [description] + * @param cDay [description] + * @return Cn string + */ + toAstro: function (cMonth, cDay) { + var s = '\u9b54\u7faf\u6c34\u74f6\u53cc\u9c7c\u767d\u7f8a\u91d1\u725b\u53cc\u5b50\u5de8\u87f9\u72ee\u5b50\u5904\u5973\u5929\u79e4\u5929\u874e\u5c04\u624b\u9b54\u7faf' + var arr = [20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22] + return s.substr(cMonth * 2 - (cDay < arr[cMonth - 1] ? 2 : 0), 2) + '\u5ea7'// 座 + }, + + /** + * 传入offset偏移量返回干支 + * @param offset 相对甲子的偏移量 + * @return Cn string + */ + toGanZhi: function (offset) { + return this.Gan[offset % 10] + this.Zhi[offset % 12] + }, + + /** + * 传入公历(!)y年获得该年第n个节气的公历日期 + * @param y公历年(1900-2100);n二十四节气中的第几个节气(1~24);从n=1(小寒)算起 + * @return day Number + * @eg:var _24 = calendar.getTerm(1987,3) ;//_24=4;意即1987年2月4日立春 + */ + getTerm: function (y, n) { + if (y < 1900 || y > 2100) { return -1 } + if (n < 1 || n > 24) { return -1 } + var _table = this.sTermInfo[y - 1900] + var _info = [ + parseInt('0x' + _table.substr(0, 5)).toString(), + parseInt('0x' + _table.substr(5, 5)).toString(), + parseInt('0x' + _table.substr(10, 5)).toString(), + parseInt('0x' + _table.substr(15, 5)).toString(), + parseInt('0x' + _table.substr(20, 5)).toString(), + parseInt('0x' + _table.substr(25, 5)).toString() + ] + var _calday = [ + _info[0].substr(0, 1), + _info[0].substr(1, 2), + _info[0].substr(3, 1), + _info[0].substr(4, 2), + + _info[1].substr(0, 1), + _info[1].substr(1, 2), + _info[1].substr(3, 1), + _info[1].substr(4, 2), + + _info[2].substr(0, 1), + _info[2].substr(1, 2), + _info[2].substr(3, 1), + _info[2].substr(4, 2), + + _info[3].substr(0, 1), + _info[3].substr(1, 2), + _info[3].substr(3, 1), + _info[3].substr(4, 2), + + _info[4].substr(0, 1), + _info[4].substr(1, 2), + _info[4].substr(3, 1), + _info[4].substr(4, 2), + + _info[5].substr(0, 1), + _info[5].substr(1, 2), + _info[5].substr(3, 1), + _info[5].substr(4, 2) + ] + return parseInt(_calday[n - 1]) + }, + + /** + * 传入农历数字月份返回汉语通俗表示法 + * @param lunar month + * @return Cn string + * @eg:var cnMonth = calendar.toChinaMonth(12) ;//cnMonth='腊月' + */ + toChinaMonth: function (m) { // 月 => \u6708 + if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1 + var s = this.nStr3[m - 1] + s += '\u6708'// 加上月字 + return s + }, + + /** + * 传入农历日期数字返回汉字表示法 + * @param lunar day + * @return Cn string + * @eg:var cnDay = calendar.toChinaDay(21) ;//cnMonth='廿一' + */ + toChinaDay: function (d) { // 日 => \u65e5 + var s + switch (d) { + case 10: + s = '\u521d\u5341'; break + case 20: + s = '\u4e8c\u5341'; break + break + case 30: + s = '\u4e09\u5341'; break + break + default : + s = this.nStr2[Math.floor(d / 10)] + s += this.nStr1[d % 10] + } + return (s) + }, + + /** + * 年份转生肖[!仅能大致转换] => 精确划分生肖分界线是“立春” + * @param y year + * @return Cn string + * @eg:var animal = calendar.getAnimal(1987) ;//animal='兔' + */ + getAnimal: function (y) { + return this.Animals[(y - 4) % 12] + }, + + /** + * 传入阳历年月日获得详细的公历、农历object信息 <=>JSON + * @param y solar year + * @param m solar month + * @param d solar day + * @return JSON object + * @eg:console.log(calendar.solar2lunar(1987,11,01)); + */ + solar2lunar: function (y, m, d) { // 参数区间1900.1.31~2100.12.31 + // 年份限定、上限 + if (y < 1900 || y > 2100) { + return -1// undefined转换为数字变为NaN + } + // 公历传参最下限 + if (y == 1900 && m == 1 && d < 31) { + return -1 + } + // 未传参 获得当天 + if (!y) { + var objDate = new Date() + } else { + var objDate = new Date(y, parseInt(m) - 1, d) + } + var i; var leap = 0; var temp = 0 + // 修正ymd参数 + var y = objDate.getFullYear() + var m = objDate.getMonth() + 1 + var d = objDate.getDate() + var offset = (Date.UTC(objDate.getFullYear(), objDate.getMonth(), objDate.getDate()) - Date.UTC(1900, 0, 31)) / 86400000 + for (i = 1900; i < 2101 && offset > 0; i++) { + temp = this.lYearDays(i) + offset -= temp + } + if (offset < 0) { + offset += temp; i-- + } + + // 是否今天 + var isTodayObj = new Date() + var isToday = false + if (isTodayObj.getFullYear() == y && isTodayObj.getMonth() + 1 == m && isTodayObj.getDate() == d) { + isToday = true + } + // 星期几 + var nWeek = objDate.getDay() + var cWeek = this.nStr1[nWeek] + // 数字表示周几顺应天朝周一开始的惯例 + if (nWeek == 0) { + nWeek = 7 + } + // 农历年 + var year = i + var leap = this.leapMonth(i) // 闰哪个月 + var isLeap = false + + // 效验闰月 + for (i = 1; i < 13 && offset > 0; i++) { + // 闰月 + if (leap > 0 && i == (leap + 1) && isLeap == false) { + --i + isLeap = true; temp = this.leapDays(year) // 计算农历闰月天数 + } else { + temp = this.monthDays(year, i)// 计算农历普通月天数 + } + // 解除闰月 + if (isLeap == true && i == (leap + 1)) { isLeap = false } + offset -= temp + } + // 闰月导致数组下标重叠取反 + if (offset == 0 && leap > 0 && i == leap + 1) { + if (isLeap) { + isLeap = false + } else { + isLeap = true; --i + } + } + if (offset < 0) { + offset += temp; --i + } + // 农历月 + var month = i + // 农历日 + var day = offset + 1 + // 天干地支处理 + var sm = m - 1 + var gzY = this.toGanZhiYear(year) + + // 当月的两个节气 + // bugfix-2017-7-24 11:03:38 use lunar Year Param `y` Not `year` + var firstNode = this.getTerm(y, (m * 2 - 1))// 返回当月「节」为几日开始 + var secondNode = this.getTerm(y, (m * 2))// 返回当月「节」为几日开始 + + // 依据12节气修正干支月 + var gzM = this.toGanZhi((y - 1900) * 12 + m + 11) + if (d >= firstNode) { + gzM = this.toGanZhi((y - 1900) * 12 + m + 12) + } + + // 传入的日期的节气与否 + var isTerm = false + var Term = null + if (firstNode == d) { + isTerm = true + Term = this.solarTerm[m * 2 - 2] + } + if (secondNode == d) { + isTerm = true + Term = this.solarTerm[m * 2 - 1] + } + // 日柱 当月一日与 1900/1/1 相差天数 + var dayCyclical = Date.UTC(y, sm, 1, 0, 0, 0, 0) / 86400000 + 25567 + 10 + var gzD = this.toGanZhi(dayCyclical + d - 1) + // 该日期所属的星座 + var astro = this.toAstro(m, d) + + return { 'lYear': year, 'lMonth': month, 'lDay': day, 'Animal': this.getAnimal(year), 'IMonthCn': (isLeap ? '\u95f0' : '') + this.toChinaMonth(month), 'IDayCn': this.toChinaDay(day), 'cYear': y, 'cMonth': m, 'cDay': d, 'gzYear': gzY, 'gzMonth': gzM, 'gzDay': gzD, 'isToday': isToday, 'isLeap': isLeap, 'nWeek': nWeek, 'ncWeek': '\u661f\u671f' + cWeek, 'isTerm': isTerm, 'Term': Term, 'astro': astro } + }, + + /** + * 传入农历年月日以及传入的月份是否闰月获得详细的公历、农历object信息 <=>JSON + * @param y lunar year + * @param m lunar month + * @param d lunar day + * @param isLeapMonth lunar month is leap or not.[如果是农历闰月第四个参数赋值true即可] + * @return JSON object + * @eg:console.log(calendar.lunar2solar(1987,9,10)); + */ + lunar2solar: function (y, m, d, isLeapMonth) { // 参数区间1900.1.31~2100.12.1 + var isLeapMonth = !!isLeapMonth + var leapOffset = 0 + var leapMonth = this.leapMonth(y) + var leapDay = this.leapDays(y) + if (isLeapMonth && (leapMonth != m)) { return -1 }// 传参要求计算该闰月公历 但该年得出的闰月与传参的月份并不同 + if (y == 2100 && m == 12 && d > 1 || y == 1900 && m == 1 && d < 31) { return -1 }// 超出了最大极限值 + var day = this.monthDays(y, m) + var _day = day + // bugFix 2016-9-25 + // if month is leap, _day use leapDays method + if (isLeapMonth) { + _day = this.leapDays(y, m) + } + if (y < 1900 || y > 2100 || d > _day) { return -1 }// 参数合法性效验 + + // 计算农历的时间差 + var offset = 0 + for (var i = 1900; i < y; i++) { + offset += this.lYearDays(i) + } + var leap = 0; var isAdd = false + for (var i = 1; i < m; i++) { + leap = this.leapMonth(y) + if (!isAdd) { // 处理闰月 + if (leap <= i && leap > 0) { + offset += this.leapDays(y); isAdd = true + } + } + offset += this.monthDays(y, i) + } + // 转换闰月农历 需补充该年闰月的前一个月的时差 + if (isLeapMonth) { offset += day } + // 1900年农历正月一日的公历时间为1900年1月30日0时0分0秒(该时间也是本农历的最开始起始点) + var stmap = Date.UTC(1900, 1, 30, 0, 0, 0) + var calObj = new Date((offset + d - 31) * 86400000 + stmap) + var cY = calObj.getUTCFullYear() + var cM = calObj.getUTCMonth() + 1 + var cD = calObj.getUTCDate() + + return this.solar2lunar(cY, cM, cD) + } +} + +export default calendar diff --git a/uni_modules/uv-calendars/components/uv-calendars/i18n/en.json b/uni_modules/uv-calendars/components/uv-calendars/i18n/en.json new file mode 100644 index 0000000..c83e8b2 --- /dev/null +++ b/uni_modules/uv-calendars/components/uv-calendars/i18n/en.json @@ -0,0 +1,12 @@ +{ + "uv-calender.ok": "ok", + "uv-calender.cancel": "cancel", + "uv-calender.today": "today", + "uv-calender.MON": "MON", + "uv-calender.TUE": "TUE", + "uv-calender.WED": "WED", + "uv-calender.THU": "THU", + "uv-calender.FRI": "FRI", + "uv-calender.SAT": "SAT", + "uv-calender.SUN": "SUN" +} diff --git a/uni_modules/uv-calendars/components/uv-calendars/i18n/index.js b/uni_modules/uv-calendars/components/uv-calendars/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/uni_modules/uv-calendars/components/uv-calendars/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/uni_modules/uv-calendars/components/uv-calendars/i18n/zh-Hans.json b/uni_modules/uv-calendars/components/uv-calendars/i18n/zh-Hans.json new file mode 100644 index 0000000..03c5486 --- /dev/null +++ b/uni_modules/uv-calendars/components/uv-calendars/i18n/zh-Hans.json @@ -0,0 +1,12 @@ +{ + "uv-calender.ok": "确定", + "uv-calender.cancel": "取消", + "uv-calender.today": "今日", + "uv-calender.SUN": "日", + "uv-calender.MON": "一", + "uv-calender.TUE": "二", + "uv-calender.WED": "三", + "uv-calender.THU": "四", + "uv-calender.FRI": "五", + "uv-calender.SAT": "六" +} diff --git a/uni_modules/uv-calendars/components/uv-calendars/i18n/zh-Hant.json b/uni_modules/uv-calendars/components/uv-calendars/i18n/zh-Hant.json new file mode 100644 index 0000000..95cf29e --- /dev/null +++ b/uni_modules/uv-calendars/components/uv-calendars/i18n/zh-Hant.json @@ -0,0 +1,12 @@ +{ + "uv-calender.ok": "確定", + "uv-calender.cancel": "取消", + "uv-calender.today": "今日", + "uv-calender.SUN": "日", + "uv-calender.MON": "一", + "uv-calender.TUE": "二", + "uv-calender.WED": "三", + "uv-calender.THU": "四", + "uv-calender.FRI": "五", + "uv-calender.SAT": "六" +} diff --git a/uni_modules/uv-calendars/components/uv-calendars/util.js b/uni_modules/uv-calendars/components/uv-calendars/util.js new file mode 100644 index 0000000..ae1c6d6 --- /dev/null +++ b/uni_modules/uv-calendars/components/uv-calendars/util.js @@ -0,0 +1,435 @@ +import CALENDAR from './calendar.js' +class Calendar { + constructor({ + date, + selected, + startDate, + endDate, + range, + multiple, + allowSameDay + } = {}) { + // 当前日期 + this.date = this.getDate(new Date()) // 当前初入日期 + // 打点信息 + this.selected = selected || []; + // 范围开始 + this.startDate = startDate + // 范围结束 + this.endDate = endDate + this.range = range + this.multiple = multiple + this.allowSameDay = allowSameDay + // 多选状态 + this.cleanRangeStatus() + // 范围状态 + this.cleanMultipleStatus() + // 每周日期 + this.weeks = {} + // this._getWeek(this.date.fullDate) + } + /** + * 设置日期 + * @param {Object} date + */ + setDate(date, status) { + if (this.range && status == 'init') { + this.cleanRangeStatus(); + if (Array.isArray(date)) { + this.rangeStatus.before = date[0]; + this.rangeStatus.after = date.length > 1 ? date[date.length - 1] : ''; + if (this.rangeStatus.after && this.dateCompare(this.rangeStatus.before, this.rangeStatus.after)) { + this.rangeStatus.data = this.geDateAll(this.rangeStatus.before, this.rangeStatus.after) + } + this.selectDate = this.getDate(date[0]) + this._getWeek(this.selectDate.fullDate) + } else { + this.selectDate = this.getDate(date) + this.rangeStatus.before = this.selectDate.fullDate; + this._getWeek(this.selectDate.fullDate) + } + } else if (this.multiple && status == 'init') { + this.cleanMultipleStatus(); + if (Array.isArray(date)) { + this.multipleStatus.data = date; + this.selectDate = this.getDate(date[0]) + this._getWeek(this.selectDate.fullDate) + } else { + this.selectDate = this.getDate(date) + this.multipleStatus.data = [this.selectDate.fullDate]; + this._getWeek(this.selectDate.fullDate) + } + } else { + if (Array.isArray(date)) { + this.selectDate = this.getDate(date[0]) + this._getWeek(this.selectDate.fullDate) + } else { + this.selectDate = this.getDate(date) + this._getWeek(this.selectDate.fullDate) + } + } + } + /** + * 清理多选状态 + */ + cleanRangeStatus() { + this.rangeStatus = { + before: '', + after: '', + data: [] + } + } + /** + * 清理多选状态 + */ + cleanMultipleStatus() { + this.multipleStatus = { + data: [] + } + } + /** + * 重置开始日期 + */ + resetSatrtDate(startDate) { + // 范围开始 + this.startDate = startDate + } + /** + * 重置结束日期 + */ + resetEndDate(endDate) { + // 范围结束 + this.endDate = endDate + } + /** + * 获取任意时间 + */ + getDate(date, AddDayCount = 0, str = 'day') { + if (!date) { + date = new Date() + } + if (typeof date !== 'object') { + date = date.replace(/-/g, '/') + } + const dd = new Date(date) + switch (str) { + case 'day': + dd.setDate(dd.getDate() + AddDayCount) // 获取AddDayCount天后的日期 + break + case 'month': + if (dd.getDate() === 31 && AddDayCount > 0) { + dd.setDate(dd.getDate() + AddDayCount) + } else { + const preMonth = dd.getMonth() + dd.setMonth(preMonth + AddDayCount) // 获取AddDayCount天后的日期 + const nextMonth = dd.getMonth() + // 处理 pre 切换月份目标月份为2月没有当前日(30 31) 切换错误问题 + if (AddDayCount < 0 && preMonth !== 0 && nextMonth - preMonth > AddDayCount) { + dd.setMonth(nextMonth + (nextMonth - preMonth + AddDayCount)) + } + // 处理 next 切换月份目标月份为2月没有当前日(30 31) 切换错误问题 + if (AddDayCount > 0 && nextMonth - preMonth > AddDayCount) { + dd.setMonth(nextMonth - (nextMonth - preMonth - AddDayCount)) + } + } + break + case 'year': + dd.setFullYear(dd.getFullYear() + AddDayCount) // 获取AddDayCount天后的日期 + break + } + const y = dd.getFullYear() + const m = dd.getMonth() + 1 < 10 ? '0' + (dd.getMonth() + 1) : dd.getMonth() + 1 // 获取当前月份的日期,不足10补0 + const d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate() // 获取当前几号,不足10补0 + return { + fullDate: y + '-' + m + '-' + d, + year: y, + month: m, + date: d, + day: dd.getDay() + } + } + /** + * 获取上月剩余天数 + */ + _getLastMonthDays(firstDay, full) { + let dateArr = [] + for (let i = firstDay; i > 0; i--) { + const beforeDate = new Date(full.year, full.month - 1, -i + 1).getDate() + dateArr.push({ + date: beforeDate, + month: full.month - 1, + lunar: this.getlunar(full.year, full.month - 1, beforeDate), + disable: true + }) + } + return dateArr + } + /** + * 获取本月天数 + */ + _currentMonthDys(dateData, full) { + let dateArr = [] + let fullDate = this.date.fullDate + for (let i = 1; i <= dateData; i++) { + let nowDate = full.year + '-' + (full.month < 10 ? full.month : full.month) + '-' + (i < 10 ? '0' + i : i) + // 是否今天 + let isDay = fullDate === nowDate + // 获取打点信息 + let info = this.selected && this.selected.find((item) => { + if (this.dateEqual(nowDate, item.date)) { + return item + } + }) + // 日期禁用 + let disableBefore = true + let disableAfter = true + if (this.startDate) { + // let dateCompBefore = this.dateCompare(this.startDate, fullDate) + // disableBefore = this.dateCompare(dateCompBefore ? this.startDate : fullDate, nowDate) + disableBefore = this.dateCompare(this.startDate, nowDate) + } + if (this.endDate) { + // let dateCompAfter = this.dateCompare(fullDate, this.endDate) + // disableAfter = this.dateCompare(nowDate, dateCompAfter ? this.endDate : fullDate) + disableAfter = this.dateCompare(nowDate, this.endDate) + } + let ranges = this.rangeStatus.data + let checked = false + let rangesStatus = -1 + if (this.range) { + if (ranges) { + rangesStatus = ranges.findIndex((item) => { + return this.dateEqual(item, nowDate) + }) + } + if (rangesStatus !== -1) { + checked = true + } + } + let multiples = this.multipleStatus.data + let checked_multiple = false + let multiplesStatus = -1 + if (this.multiple) { + if (multiples) { + multiplesStatus = multiples.findIndex((item) => { + return this.dateEqual(item, nowDate) + }) + } + if (multiplesStatus !== -1) { + checked_multiple = true + } + } + let data = { + fullDate: nowDate, + year: full.year, + date: i, + range: this.range ? checked : false, + multiple: this.multiple ? checked_multiple : false, + beforeRange: this.dateEqual(this.rangeStatus.before, nowDate), + afterRange: this.dateEqual(this.rangeStatus.after, nowDate), + dateEqual: this.range && checked && this.dateEqual(this.rangeStatus.before, this.rangeStatus.after), + month: full.month, + lunar: this.getlunar(full.year, full.month, i), + disable: !(disableBefore && disableAfter), + isDay + } + if (info) { + data.extraInfo = info + } + dateArr.push(data) + } + return dateArr + } + /** + * 获取下月天数 + */ + _getNextMonthDays(surplus, full) { + let dateArr = [] + for (let i = 1; i < surplus + 1; i++) { + dateArr.push({ + date: i, + month: Number(full.month) + 1, + lunar: this.getlunar(full.year, Number(full.month) + 1, i), + disable: true + }) + } + return dateArr + } + /** + * 获取当前日期详情 + * @param {Object} date + */ + getInfo(date) { + if (!date) { + date = new Date() + } else if (Array.isArray(date)) { + date = date[0] + } + const dateInfo = this.canlender.find(item => item.fullDate === this.getDate(date).fullDate) + return dateInfo + } + /** + * 比较时间大小 + */ + dateCompare(startDate, endDate) { + // 计算截止时间 + startDate = new Date(startDate.replace('-', '/').replace('-', '/')) + // 计算详细项的截止时间 + endDate = new Date(endDate.replace('-', '/').replace('-', '/')) + if (startDate <= endDate) { + return true + } else { + return false + } + } + /** + * 比较时间是否相等 + */ + dateEqual(before, after) { + // 计算截止时间 + before = new Date(before.replace('-', '/').replace('-', '/')) + // 计算详细项的截止时间 + after = new Date(after.replace('-', '/').replace('-', '/')) + if (before.getTime() - after.getTime() === 0) { + return true + } else { + return false + } + } + /** + * 比较after时间是否大于before时间 + */ + dateAfterLgBefore(before, after) { + // 计算截止时间 + before = new Date(before.replace('-', '/').replace('-', '/')) + // 计算详细项的截止时间 + after = new Date(after.replace('-', '/').replace('-', '/')) + if (after.getTime() - before.getTime() > 0) { + return true + } else { + return false + } + } + /** + * 获取日期范围内所有日期 + * @param {Object} begin + * @param {Object} end + */ + geDateAll(begin, end) { + var arr = [] + var ab = begin.split('-') + var ae = end.split('-') + var db = new Date() + db.setFullYear(ab[0], ab[1] - 1, ab[2]) + var de = new Date() + de.setFullYear(ae[0], ae[1] - 1, ae[2]) + var unixDb = db.getTime() - 24 * 60 * 60 * 1000 + var unixDe = de.getTime() - 24 * 60 * 60 * 1000 + for (var k = unixDb; k <= unixDe;) { + k = k + 24 * 60 * 60 * 1000 + arr.push(this.getDate(new Date(parseInt(k))).fullDate) + } + return arr + } + /** + * 计算阴历日期显示 + */ + getlunar(year, month, date) { + return CALENDAR.solar2lunar(year, month, date) + } + /** + * 设置打点 + */ + setSelectInfo(data, value) { + this.selected = value + this._getWeek(data) + } + /** + * 获取多选状态 + */ + setMultiple(fullDate) { + if (!this.multiple) return + let multiples = this.multipleStatus.data; + const findIndex = multiples.findIndex(item => this.dateEqual(fullDate, item)); + if (findIndex < 0) { + this.multipleStatus.data = this.multipleStatus.data.concat([fullDate]); + } else { + this.multipleStatus.data.splice(findIndex, 1); + } + this._getWeek(fullDate) + } + /** + * 获取范围状态 + */ + setRange(fullDate) { + let { + before, + after + } = this.rangeStatus + if (!this.range) return + if (before && after) { + this.cleanRangeStatus(); + this.rangeStatus.before = fullDate + } else { + if (!before) { + this.rangeStatus.before = fullDate + } else { + if (this.allowSameDay && this.dateEqual(before, fullDate)) { + this.rangeStatus.after = fullDate + } else if (!this.dateAfterLgBefore(this.rangeStatus.before, fullDate)) { + this.cleanRangeStatus(); + this.rangeStatus.before = fullDate + this._getWeek(fullDate) + return; + } + this.rangeStatus.after = fullDate + if (this.dateCompare(this.rangeStatus.before, this.rangeStatus.after)) { + this.rangeStatus.data = this.geDateAll(this.rangeStatus.before, this.rangeStatus.after); + } else { + this.rangeStatus.data = this.geDateAll(this.rangeStatus.after, this.rangeStatus.before); + } + } + } + this._getWeek(fullDate) + } + /** + * 获取每周数据 + * @param {Object} dateData + */ + _getWeek(dateData) { + const { + year, + month + } = this.getDate(dateData) + let firstDay = new Date(year, month - 1, 1).getDay() + let currentDay = new Date(year, month, 0).getDate() + let dates = { + lastMonthDays: this._getLastMonthDays(firstDay, this.getDate(dateData)), // 上个月末尾几天 + currentMonthDys: this._currentMonthDys(currentDay, this.getDate(dateData)), // 本月天数 + nextMonthDays: [], // 下个月开始几天 + weeks: [] + } + let canlender = [] + const surplus = 42 - (dates.lastMonthDays.length + dates.currentMonthDys.length) + dates.nextMonthDays = this._getNextMonthDays(surplus, this.getDate(dateData)) + canlender = canlender.concat(dates.lastMonthDays, dates.currentMonthDys, dates.nextMonthDays) + let weeks = {} + // 拼接数组 上个月开始几天 + 本月天数+ 下个月开始几天 + for (let i = 0; i < canlender.length; i++) { + if (i % 7 === 0) { + weeks[parseInt(i / 7)] = new Array(7) + } + weeks[parseInt(i / 7)][i % 7] = canlender[i] + } + this.canlender = canlender + this.weeks = weeks + } + //静态方法 + // static init(date) { + // if (!this.instance) { + // this.instance = new Calendar(date); + // } + // return this.instance; + // } +} +export default Calendar \ No newline at end of file diff --git a/uni_modules/uv-calendars/components/uv-calendars/uv-calendars.vue b/uni_modules/uv-calendars/components/uv-calendars/uv-calendars.vue new file mode 100644 index 0000000..8d5b377 --- /dev/null +++ b/uni_modules/uv-calendars/components/uv-calendars/uv-calendars.vue @@ -0,0 +1,452 @@ + + + \ No newline at end of file diff --git a/uni_modules/uv-calendars/package.json b/uni_modules/uv-calendars/package.json new file mode 100644 index 0000000..7153510 --- /dev/null +++ b/uni_modules/uv-calendars/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-calendars", + "displayName": "uv-calendars 最新日历 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.15", + "description": "新版本uv-calendars,不仅拥有老版本的所有功能,还增加了更加适用的插入页面等强大功能,且更加简洁。查看日期、选择单个或多个或任意范围日期,打点操作,自定义文案,自定义主题等强大功能。", + "keywords": [ + "uv-ui", + "uvui", + "日历", + "打卡", + "日历选择" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration":{ + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-popup", + "uv-toolbar" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-calendars/readme.md b/uni_modules/uv-calendars/readme.md new file mode 100644 index 0000000..d986eb9 --- /dev/null +++ b/uni_modules/uv-calendars/readme.md @@ -0,0 +1,23 @@ +## Calendars 全新日历 + +> **组件名:uv-calendars** + +为了解决老版本`uv-calendar`性能问题,特别是对日期选择范围有很大限制,体验不友好等缺点。于是有了新版日历组件。 + +新版本`uv-calendars`,不仅拥有老版本的所有功能,还增加了更加适用的插入页面等强大功能,且更加简洁。查看日期、选择单个或多个或任意范围日期,打点操作,自定义文案,自定义主题等强大功能。 + +常用场景:酒店日期预订、火车机票选择购买日期、上下班打卡等。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-cell/changelog.md b/uni_modules/uv-cell/changelog.md new file mode 100644 index 0000000..c342b0c --- /dev/null +++ b/uni_modules/uv-cell/changelog.md @@ -0,0 +1,13 @@ +## 1.0.5(2023-12-06) +1. 修复uv-cell right-icon插槽编译到APP端不显示的BUG,问题来源:https://gitee.com/climblee/uv-ui/issues/I8LXZI +## 1.0.4(2023-09-19) +1. 增加cellStyle参数,方便自定义单元格的样式 +## 1.0.3(2023-07-03) +去除插槽判断,避免某些平台不显示的BUG +## 1.0.2(2023-06-21) +1. 优化 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-cell 单元格 diff --git a/uni_modules/uv-cell/components/uv-cell-group/props.js b/uni_modules/uv-cell/components/uv-cell-group/props.js new file mode 100644 index 0000000..57deb4c --- /dev/null +++ b/uni_modules/uv-cell/components/uv-cell-group/props.js @@ -0,0 +1,15 @@ +export default { + props: { + // 分组标题 + title: { + type: String, + default: '' + }, + // 是否显示外边框 + border: { + type: Boolean, + default: true + }, + ...uni.$uv?.props?.cellGroup + } +} \ No newline at end of file diff --git a/uni_modules/uv-cell/components/uv-cell-group/uv-cell-group.vue b/uni_modules/uv-cell/components/uv-cell-group/uv-cell-group.vue new file mode 100644 index 0000000..0f17865 --- /dev/null +++ b/uni_modules/uv-cell/components/uv-cell-group/uv-cell-group.vue @@ -0,0 +1,63 @@ + + + + + + diff --git a/uni_modules/uv-cell/components/uv-cell/props.js b/uni_modules/uv-cell/components/uv-cell/props.js new file mode 100644 index 0000000..6579636 --- /dev/null +++ b/uni_modules/uv-cell/components/uv-cell/props.js @@ -0,0 +1,116 @@ +export default { + props: { + // 标题 + title: { + type: [String, Number], + default: '' + }, + // 标题下方的描述信息 + label: { + type: [String, Number], + default: '' + }, + // 右侧的内容 + value: { + type: [String, Number], + default: '' + }, + // 左侧图标名称,或者图片链接(本地文件建议使用绝对地址) + icon: { + type: String, + default: '' + }, + // 是否禁用cell + disabled: { + type: Boolean, + default: false + }, + // 是否显示下边框 + border: { + type: Boolean, + default: true + }, + // 内容是否垂直居中(主要是针对右侧的value部分) + center: { + type: Boolean, + default: true + }, + // 点击后跳转的URL地址 + url: { + type: String, + default: '' + }, + // 链接跳转的方式,内部使用的是uvui封装的route方法,可能会进行拦截操作 + linkType: { + type: String, + default: 'navigateTo' + }, + // 是否开启点击反馈(表现为点击时加上灰色背景) + clickable: { + type: Boolean, + default: false + }, + // 是否展示右侧箭头并开启点击反馈 + isLink: { + type: Boolean, + default: false + }, + // 是否显示表单状态下的必填星号(此组件可能会内嵌入input组件) + required: { + type: Boolean, + default: false + }, + // 右侧的图标箭头 + rightIcon: { + type: String, + default: 'arrow-right' + }, + // 右侧箭头的方向,可选值为:left,up,down + arrowDirection: { + type: String, + default: '' + }, + // 左侧图标样式 + iconStyle: { + type: [Object, String], + default: () => { + return {} + } + }, + // 右侧箭头图标的样式 + rightIconStyle: { + type: [Object, String], + default: () => { + return {} + } + }, + // 标题的样式 + titleStyle: { + type: [Object, String], + default: () => { + return {} + } + }, + // 单位元的大小,可选值为large + size: { + type: String, + default: '' + }, + // 点击cell是否阻止事件传播 + stop: { + type: Boolean, + default: true + }, + // 标识符,cell被点击时返回 + name: { + type: [Number, String], + default: '' + }, + // 单元格自定义样式 + cellStyle: { + type: [Object, String], + default: () => {} + }, + ...uni.$uv?.props?.cell + } +} \ No newline at end of file diff --git a/uni_modules/uv-cell/components/uv-cell/uv-cell.vue b/uni_modules/uv-cell/components/uv-cell/uv-cell.vue new file mode 100644 index 0000000..bdd268e --- /dev/null +++ b/uni_modules/uv-cell/components/uv-cell/uv-cell.vue @@ -0,0 +1,209 @@ + + + + + \ No newline at end of file diff --git a/uni_modules/uv-cell/package.json b/uni_modules/uv-cell/package.json new file mode 100644 index 0000000..8ff5cf6 --- /dev/null +++ b/uni_modules/uv-cell/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-cell", + "displayName": "uv-cell 单元格 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.5", + "description": "cell单元格一般用于一组列表的情况,比如个人中心页,设置页等。", + "keywords": [ + "uv-cell", + "uvui", + "uv-ui", + "单元格", + "设置页" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon", + "uv-line" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-cell/readme.md b/uni_modules/uv-cell/readme.md new file mode 100644 index 0000000..3ea9937 --- /dev/null +++ b/uni_modules/uv-cell/readme.md @@ -0,0 +1,11 @@ +## Cell 单元格 + +> **组件名:uv-cell** + +cell单元格一般用于一组列表的情况,比如个人中心页,设置页等。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-checkbox/changelog.md b/uni_modules/uv-checkbox/changelog.md new file mode 100644 index 0000000..2a142ce --- /dev/null +++ b/uni_modules/uv-checkbox/changelog.md @@ -0,0 +1,34 @@ +## 1.0.14(2023-11-04) +1. 修复label文字较多不分行的问题 +## 1.0.13(2023-10-11) +1. 优化同类问题:https://gitee.com/climblee/uv-ui/issues/I872VD +## 1.0.12(2023-09-22) +1. 修复change回调中v-model值不更新的BUG +## 1.0.11(2023-09-01) +1. 修复点击空隙处无效的问题 +2. label支持插槽下可点击 +## 1.0.10(2023-08-27) +1. 修复label设置布尔值不生效的BUG +## 1.0.9(2023-08-16) +1. 解决数据多不换行的BUG +## 1.0.8(2023-07-13) +1. 修复 uv-checkbox设置value属性不生效的BUG +## 1.0.7(2023-07-05) +修复vue3模式下,动态修改v-model绑定的值无效的BUG +## 1.0.6(2023-06-29) +1. 增加label插槽,与radio保持一致 +2. 优化文档 +## 1.0.5(2023-06-12) +1. 修复1.0.4改出的问题 +## 1.0.4(2023-06-08) +1. 复选框修复全局设置不生效的BUG +## 1.0.3(2023-06-06) +1. uv-checkbox-group 兼容自定义样式customStyle,方便通过样式调整整体位置等; +2. .uv-checkbox-group--row增加flex-wrap: wrap;允许换行 +## 1.0.2(2023-05-30) +1. 修复error报错的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-checkbox 复选框 diff --git a/uni_modules/uv-checkbox/components/uv-checkbox-group/props.js b/uni_modules/uv-checkbox/components/uv-checkbox-group/props.js new file mode 100644 index 0000000..47bf005 --- /dev/null +++ b/uni_modules/uv-checkbox/components/uv-checkbox-group/props.js @@ -0,0 +1,84 @@ +export default { + props: { + // 绑定的值 + value: { + type: Array, + default: () => [] + }, + modelValue: { + type: Array, + default: () => [] + }, + // 标识符 + name: { + type: String, + default: '' + }, + // 形状,circle-圆形,square-方形 + shape: { + type: String, + default: 'square' + }, + // 是否禁用全部checkbox + disabled: { + type: Boolean, + default: false + }, + // 选中状态下的颜色,如设置此值,将会覆盖parent的activeColor值 + activeColor: { + type: String, + default: '#2979ff' + }, + // 未选中的颜色 + inactiveColor: { + type: String, + default: '#c8c9cc' + }, + // 整个组件的尺寸,默认px + size: { + type: [String, Number], + default: 18 + }, + // 布局方式,row-横向,column-纵向 + placement: { + type: String, + default: 'row' + }, + // label的字体大小,px单位 + labelSize: { + type: [String, Number], + default: 14 + }, + // label的字体颜色 + labelColor: { + type: [String], + default: '#303133' + }, + // 是否禁止点击文本操作 + labelDisabled: { + type: Boolean, + default: false + }, + // 图标颜色 + iconColor: { + type: String, + default: '#fff' + }, + // 图标的大小,单位px + iconSize: { + type: [String, Number], + default: 12 + }, + // 勾选图标的对齐方式,left-左边,right-右边 + iconPlacement: { + type: String, + default: 'left' + }, + // 竖向配列时,是否显示下划线 + borderBottom: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.checkboxGroup + } +} \ No newline at end of file diff --git a/uni_modules/uv-checkbox/components/uv-checkbox-group/uv-checkbox-group.vue b/uni_modules/uv-checkbox/components/uv-checkbox-group/uv-checkbox-group.vue new file mode 100644 index 0000000..d5ea81f --- /dev/null +++ b/uni_modules/uv-checkbox/components/uv-checkbox-group/uv-checkbox-group.vue @@ -0,0 +1,119 @@ + + + + + diff --git a/uni_modules/uv-checkbox/components/uv-checkbox/props.js b/uni_modules/uv-checkbox/components/uv-checkbox/props.js new file mode 100644 index 0000000..58ec890 --- /dev/null +++ b/uni_modules/uv-checkbox/components/uv-checkbox/props.js @@ -0,0 +1,70 @@ +export default { + props: { + // checkbox的名称 + name: { + type: [String, Number, Boolean], + default: '' + }, + // 形状,square为方形,circle为圆型 + shape: { + type: String, + default: '' + }, + // 整体的大小 + size: { + type: [String, Number], + default: '' + }, + // 是否默认选中 + checked: { + type: Boolean, + default: false + }, + // 是否禁用 + disabled: { + type: [String, Boolean], + default: '' + }, + // 选中状态下的颜色,如设置此值,将会覆盖parent的activeColor值 + activeColor: { + type: String, + default: '' + }, + // 未选中的颜色 + inactiveColor: { + type: String, + default: '' + }, + // 图标的大小,单位px + iconSize: { + type: [String, Number], + default: '' + }, + // 图标颜色 + iconColor: { + type: String, + default: '' + }, + // label提示文字,因为nvue下,直接slot进来的文字,由于特殊的结构,无法修改样式 + label: { + type: [String, Number, Boolean], + default: '' + }, + // label的字体大小,px单位 + labelSize: { + type: [String, Number], + default: '' + }, + // label的颜色 + labelColor: { + type: String, + default: '' + }, + // 是否禁止点击提示语选中复选框 + labelDisabled: { + type: [String, Boolean], + default: '' + }, + ...uni.$uv?.props?.checkbox + } +} \ No newline at end of file diff --git a/uni_modules/uv-checkbox/components/uv-checkbox/uv-checkbox.vue b/uni_modules/uv-checkbox/components/uv-checkbox/uv-checkbox.vue new file mode 100644 index 0000000..dfd1912 --- /dev/null +++ b/uni_modules/uv-checkbox/components/uv-checkbox/uv-checkbox.vue @@ -0,0 +1,370 @@ + + + + + diff --git a/uni_modules/uv-checkbox/package.json b/uni_modules/uv-checkbox/package.json new file mode 100644 index 0000000..44944d9 --- /dev/null +++ b/uni_modules/uv-checkbox/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-checkbox", + "displayName": "uv-checkbox 复选框 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.14", + "description": "复选框组件一般用于需要多个选择的场景,该组件功能完整,使用方便。", + "keywords": [ + "uv-checkbox", + "uvui", + "uv-ui", + "checkbox", + "复选框" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-checkbox/readme.md b/uni_modules/uv-checkbox/readme.md new file mode 100644 index 0000000..43b6f2e --- /dev/null +++ b/uni_modules/uv-checkbox/readme.md @@ -0,0 +1,19 @@ +## Checkbox 复选框 + +> **组件名:uv-checkbox** + +复选框组件一般用于需要多个选择的场景,该组件功能完整,使用方便。可配合 `uv-form` 组件进行表单验证等场景使用。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-code-input/changelog.md b/uni_modules/uv-code-input/changelog.md new file mode 100644 index 0000000..1fefc03 --- /dev/null +++ b/uni_modules/uv-code-input/changelog.md @@ -0,0 +1,13 @@ +## 1.0.5(2023-08-05) +在vue2模式下,v-model设置为0时不生效的BUG +## 1.0.4(2023-07-13) +1. 修复value/v-model更改不生效的BUG +## 1.0.3(2023-06-28) +修复:使用:disabledKeyboard="true"属性,事件全部失效的BUG +## 1.0.2(2023-06-23) +优化下边框 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-code-input 验证码输入 diff --git a/uni_modules/uv-code-input/components/uv-code-input/props.js b/uni_modules/uv-code-input/components/uv-code-input/props.js new file mode 100644 index 0000000..4a5e460 --- /dev/null +++ b/uni_modules/uv-code-input/components/uv-code-input/props.js @@ -0,0 +1,83 @@ +export default { + props: { + value: { + type: [String, Number], + default: '' + }, + modelValue: { + type: [String, Number], + default: '' + }, + // 键盘弹起时,是否自动上推页面 + adjustPosition: { + type: Boolean, + default: true + }, + // 最大输入长度 + maxlength: { + type: [String, Number], + default: 6 + }, + // 是否用圆点填充 + dot: { + type: Boolean, + default: false + }, + // 显示模式,box-盒子模式,line-底部横线模式 + mode: { + type: String, + default: 'box' + }, + // 是否细边框 + hairline: { + type: Boolean, + default: false + }, + // 字符间的距离 + space: { + type: [String, Number], + default: 10 + }, + // 是否自动获取焦点 + focus: { + type: Boolean, + default: false + }, + // 字体是否加粗 + bold: { + type: Boolean, + default: false + }, + // 字体颜色 + color: { + type: String, + default: '#606266' + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: 18 + }, + // 输入框的大小,宽等于高 + size: { + type: [String, Number], + default: 35 + }, + // 是否隐藏原生键盘,如果想用自定义键盘的话,需设置此参数为true + disabledKeyboard: { + type: Boolean, + default: false + }, + // 边框和线条颜色 + borderColor: { + type: String, + default: '#c9cacc' + }, + // 是否禁止输入"."符号 + disabledDot: { + type: Boolean, + default: true + }, + ...uni.$uv?.props?.codeInput + } +} \ No newline at end of file diff --git a/uni_modules/uv-code-input/components/uv-code-input/uv-code-input.vue b/uni_modules/uv-code-input/components/uv-code-input/uv-code-input.vue new file mode 100644 index 0000000..14ad8a2 --- /dev/null +++ b/uni_modules/uv-code-input/components/uv-code-input/uv-code-input.vue @@ -0,0 +1,272 @@ + + + + \ No newline at end of file diff --git a/uni_modules/uv-code-input/package.json b/uni_modules/uv-code-input/package.json new file mode 100644 index 0000000..ab8762c --- /dev/null +++ b/uni_modules/uv-code-input/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-code-input", + "displayName": "uv-code-input 验证码输入 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.5", + "description": "验证码输入组件一般用于验证用户短信验证码的场景,输入框或横线多种模式可选。", + "keywords": [ + "uv-code-input", + "uvui", + "uv-ui", + "code", + "验证码输入" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-code-input/readme.md b/uni_modules/uv-code-input/readme.md new file mode 100644 index 0000000..aa5b0a1 --- /dev/null +++ b/uni_modules/uv-code-input/readme.md @@ -0,0 +1,19 @@ +## CodeInput 验证码输入框 + +> **组件名:uv-code-input** + +该组件一般用于验证用户短信验证码的场景,输入框或横线多种模式可选。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-code/changelog.md b/uni_modules/uv-code/changelog.md new file mode 100644 index 0000000..7054a25 --- /dev/null +++ b/uni_modules/uv-code/changelog.md @@ -0,0 +1,9 @@ +## 1.0.3(2023-10-13) +1. 优化 +## 1.0.2(2023-10-13) +1. unmounted兼容vue3 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-code 验证码倒计时 diff --git a/uni_modules/uv-code/components/uv-code/props.js b/uni_modules/uv-code/components/uv-code/props.js new file mode 100644 index 0000000..afc9d3c --- /dev/null +++ b/uni_modules/uv-code/components/uv-code/props.js @@ -0,0 +1,35 @@ +export default { + props: { + // 倒计时总秒数 + seconds: { + type: [String, Number], + default: 60 + }, + // 尚未开始时提示 + startText: { + type: String, + default: '获取验证码' + }, + // 正在倒计时中的提示 + changeText: { + type: String, + default: 'X秒重新获取' + }, + // 倒计时结束时的提示 + endText: { + type: String, + default: '重新获取' + }, + // 是否在H5刷新或各端返回再进入时继续倒计时 + keepRunning: { + type: Boolean, + default: false + }, + // 为了区分多个页面,或者一个页面多个倒计时组件本地存储的继续倒计时变了 + uniqueKey: { + type: String, + default: '' + }, + ...uni.$uv?.props?.code + } +} \ No newline at end of file diff --git a/uni_modules/uv-code/components/uv-code/uv-code.vue b/uni_modules/uv-code/components/uv-code/uv-code.vue new file mode 100644 index 0000000..de02c83 --- /dev/null +++ b/uni_modules/uv-code/components/uv-code/uv-code.vue @@ -0,0 +1,136 @@ + + \ No newline at end of file diff --git a/uni_modules/uv-code/package.json b/uni_modules/uv-code/package.json new file mode 100644 index 0000000..d4392c0 --- /dev/null +++ b/uni_modules/uv-code/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-code", + "displayName": "uv-code 验证码倒计时 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.3", + "description": "考虑到用户实际发送验证码的场景,可能是一个按钮,也可能是一段文字,提示语各有不同,所以本组件不提供界面显示,只提供倒计时文本,由用户将文本嵌入到具体的场景。", + "keywords": [ + "uv-code", + "uvui", + "uv-ui", + "code", + "验证码倒计时" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-code/readme.md b/uni_modules/uv-code/readme.md new file mode 100644 index 0000000..cf2eb51 --- /dev/null +++ b/uni_modules/uv-code/readme.md @@ -0,0 +1,11 @@ +## Code 验证码输入框 + +> **组件名:uv-code** + +考虑到用户实际发送验证码的场景,可能是一个按钮,也可能是一段文字,提示语各有不同,所以本组件不提供界面显示,只提供倒计时文本,由用户将文本嵌入到具体的场景。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-collapse/changelog.md b/uni_modules/uv-collapse/changelog.md new file mode 100644 index 0000000..0219560 --- /dev/null +++ b/uni_modules/uv-collapse/changelog.md @@ -0,0 +1,5 @@ +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-collapse 折叠面板 diff --git a/uni_modules/uv-collapse/components/uv-collapse-item/props.js b/uni_modules/uv-collapse/components/uv-collapse-item/props.js new file mode 100644 index 0000000..18983c1 --- /dev/null +++ b/uni_modules/uv-collapse/components/uv-collapse-item/props.js @@ -0,0 +1,60 @@ +export default { + props: { + // 标题 + title: { + type: String, + default: '' + }, + // 标题右侧内容 + value: { + type: String, + default: '' + }, + // 标题下方的描述信息 + label: { + type: String, + default: '' + }, + // 是否禁用折叠面板 + disabled: { + type: Boolean, + default: false + }, + // 是否展示右侧箭头并开启点击反馈 + isLink: { + type: Boolean, + default: true + }, + // 是否开启点击反馈 + clickable: { + type: Boolean, + default: true + }, + // 是否显示内边框 + border: { + type: Boolean, + default: true + }, + // 标题的对齐方式 + align: { + type: String, + default: 'left' + }, + // 唯一标识符 + name: { + type: [String, Number], + default: '' + }, + // 标题左侧图片,可为绝对路径的图片或内置图标 + icon: { + type: String, + default: '' + }, + // 面板展开收起的过渡时间,单位ms + duration: { + type: Number, + default: 300 + }, + ...uni.$uv?.props?.collapseItem + } +} \ No newline at end of file diff --git a/uni_modules/uv-collapse/components/uv-collapse-item/uv-collapse-item.vue b/uni_modules/uv-collapse/components/uv-collapse-item/uv-collapse-item.vue new file mode 100644 index 0000000..840f28d --- /dev/null +++ b/uni_modules/uv-collapse/components/uv-collapse-item/uv-collapse-item.vue @@ -0,0 +1,229 @@ + + + + + diff --git a/uni_modules/uv-collapse/components/uv-collapse/props.js b/uni_modules/uv-collapse/components/uv-collapse/props.js new file mode 100644 index 0000000..70fa04c --- /dev/null +++ b/uni_modules/uv-collapse/components/uv-collapse/props.js @@ -0,0 +1,20 @@ +export default { + props: { + // 当前展开面板的name,非手风琴模式:[],手风琴模式:string | number + value: { + type: [String, Number, Array, null], + default: null + }, + // 是否手风琴模式 + accordion: { + type: Boolean, + default: false + }, + // 是否显示外边框 + border: { + type: Boolean, + default: true + }, + ...uni.$uv?.props?.collapse + } +} \ No newline at end of file diff --git a/uni_modules/uv-collapse/components/uv-collapse/uv-collapse.vue b/uni_modules/uv-collapse/components/uv-collapse/uv-collapse.vue new file mode 100644 index 0000000..5e5c96d --- /dev/null +++ b/uni_modules/uv-collapse/components/uv-collapse/uv-collapse.vue @@ -0,0 +1,86 @@ + + + diff --git a/uni_modules/uv-collapse/package.json b/uni_modules/uv-collapse/package.json new file mode 100644 index 0000000..cf9565f --- /dev/null +++ b/uni_modules/uv-collapse/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-collapse", + "displayName": "uv-collapse 折叠面板 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.1", + "description": "折叠面板组件,通过折叠面板收纳内容区域,点击可展开收起,多功能参数可配置。", + "keywords": [ + "uv-collapse", + "uvui", + "uv-ui", + "collapse", + "折叠面板" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-line", + "uv-cell" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-collapse/readme.md b/uni_modules/uv-collapse/readme.md new file mode 100644 index 0000000..cb340ba --- /dev/null +++ b/uni_modules/uv-collapse/readme.md @@ -0,0 +1,11 @@ +## Collapse 折叠面板 + +> **组件名:uv-collapse** + +通过折叠面板收纳内容区域,点击可展开收起,多功能参数可配置。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-count-down/changelog.md b/uni_modules/uv-count-down/changelog.md new file mode 100644 index 0000000..44392c2 --- /dev/null +++ b/uni_modules/uv-count-down/changelog.md @@ -0,0 +1,9 @@ +## 1.0.3(2023-10-13) +1. unmounted兼容vue3 +## 1.0.2(2023-06-20) +1. 增加外部样式customStyle参数 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-count-down 倒计时 diff --git a/uni_modules/uv-count-down/components/uv-count-down/props.js b/uni_modules/uv-count-down/components/uv-count-down/props.js new file mode 100644 index 0000000..c5b5461 --- /dev/null +++ b/uni_modules/uv-count-down/components/uv-count-down/props.js @@ -0,0 +1,25 @@ +export default { + props: { + // 倒计时时长,单位ms + time: { + type: [String, Number], + default: 0 + }, + // 时间格式,DD-日,HH-时,mm-分,ss-秒,SSS-毫秒 + format: { + type: String, + default: 'HH:mm:ss' + }, + // 是否自动开始倒计时 + autoStart: { + type: Boolean, + default: true + }, + // 是否展示毫秒倒计时 + millisecond: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.countDown + } +} \ No newline at end of file diff --git a/uni_modules/uv-count-down/components/uv-count-down/utils.js b/uni_modules/uv-count-down/components/uv-count-down/utils.js new file mode 100644 index 0000000..8c75005 --- /dev/null +++ b/uni_modules/uv-count-down/components/uv-count-down/utils.js @@ -0,0 +1,62 @@ +// 补0,如1 -> 01 +function padZero(num, targetLength = 2) { + let str = `${num}` + while (str.length < targetLength) { + str = `0${str}` + } + return str +} +const SECOND = 1000 +const MINUTE = 60 * SECOND +const HOUR = 60 * MINUTE +const DAY = 24 * HOUR +export function parseTimeData(time) { + const days = Math.floor(time / DAY) + const hours = Math.floor((time % DAY) / HOUR) + const minutes = Math.floor((time % HOUR) / MINUTE) + const seconds = Math.floor((time % MINUTE) / SECOND) + const milliseconds = Math.floor(time % SECOND) + return { + days, + hours, + minutes, + seconds, + milliseconds + } +} +export function parseFormat(format, timeData) { + let { + days, + hours, + minutes, + seconds, + milliseconds + } = timeData + // 如果格式化字符串中不存在DD(天),则将天的时间转为小时中去 + if (format.indexOf('DD') === -1) { + hours += days * 24 + } else { + // 对天补0 + format = format.replace('DD', padZero(days)) + } + // 其他同理于DD的格式化处理方式 + if (format.indexOf('HH') === -1) { + minutes += hours * 60 + } else { + format = format.replace('HH', padZero(hours)) + } + if (format.indexOf('mm') === -1) { + seconds += minutes * 60 + } else { + format = format.replace('mm', padZero(minutes)) + } + if (format.indexOf('ss') === -1) { + milliseconds += seconds * 1000 + } else { + format = format.replace('ss', padZero(seconds)) + } + return format.replace('SSS', padZero(milliseconds, 3)) +} +export function isSameSecond(time1, time2) { + return Math.floor(time1 / 1000) === Math.floor(time2 / 1000) +} diff --git a/uni_modules/uv-count-down/components/uv-count-down/uv-count-down.vue b/uni_modules/uv-count-down/components/uv-count-down/uv-count-down.vue new file mode 100644 index 0000000..a758d31 --- /dev/null +++ b/uni_modules/uv-count-down/components/uv-count-down/uv-count-down.vue @@ -0,0 +1,169 @@ + + + \ No newline at end of file diff --git a/uni_modules/uv-count-down/package.json b/uni_modules/uv-count-down/package.json new file mode 100644 index 0000000..da501f1 --- /dev/null +++ b/uni_modules/uv-count-down/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-count-down", + "displayName": "uv-count-down 倒计时 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.3", + "description": "该倒计时组件一般使用于某个活动的截止时间上,通过数字的变化,给用户明确的时间感受,提示用户进行某一个行为操作。", + "keywords": [ + "uv-count-down", + "uvui", + "uv-ui", + "countDown", + "倒计时" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-count-down/readme.md b/uni_modules/uv-count-down/readme.md new file mode 100644 index 0000000..0f326a8 --- /dev/null +++ b/uni_modules/uv-count-down/readme.md @@ -0,0 +1,11 @@ +## CountDown 倒计时 + +> **组件名:uv-count-down** + +该组件一般使用于某个活动的截止时间上,通过数字的变化,给用户明确的时间感受,提示用户进行某一个行为操作。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-count-to/changelog.md b/uni_modules/uv-count-to/changelog.md new file mode 100644 index 0000000..cf323f9 --- /dev/null +++ b/uni_modules/uv-count-to/changelog.md @@ -0,0 +1,13 @@ +## 1.0.4(2023-06-20) +1. 优化 +## 1.0.3(2023-06-20) +1. 修复继续滚动的函数 +2. 修复其他 +## 1.0.2(2023-06-20) +1. 适配px和rpx的单位 +2. 适配customStyle参数 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-count-to 数字滚动 diff --git a/uni_modules/uv-count-to/components/uv-count-to/props.js b/uni_modules/uv-count-to/components/uv-count-to/props.js new file mode 100644 index 0000000..498371a --- /dev/null +++ b/uni_modules/uv-count-to/components/uv-count-to/props.js @@ -0,0 +1,60 @@ +export default { + props: { + // 开始的数值,默认从0增长到某一个数 + startVal: { + type: [String, Number], + default: 0 + }, + // 要滚动的目标数值,必须 + endVal: { + type: [String, Number], + default: 0 + }, + // 滚动到目标数值的动画持续时间,单位为毫秒(ms) + duration: { + type: [String, Number], + default: 2000 + }, + // 设置数值后是否自动开始滚动 + autoplay: { + type: Boolean, + default: true + }, + // 要显示的小数位数 + decimals: { + type: [String, Number], + default: 0 + }, + // 是否在即将到达目标数值的时候,使用缓慢滚动的效果 + useEasing: { + type: Boolean, + default: true + }, + // 十进制分割 + decimal: { + type: [String, Number], + default: '.' + }, + // 字体颜色 + color: { + type: String, + default: '#606266' + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: 22 + }, + // 是否加粗字体 + bold: { + type: Boolean, + default: false + }, + // 千位分隔符,类似金额的分割(¥23,321.05中的",") + separator: { + type: String, + default: '' + }, + ...uni.$uv?.props?.countTo + } +} \ No newline at end of file diff --git a/uni_modules/uv-count-to/components/uv-count-to/uv-count-to.vue b/uni_modules/uv-count-to/components/uv-count-to/uv-count-to.vue new file mode 100644 index 0000000..5f34167 --- /dev/null +++ b/uni_modules/uv-count-to/components/uv-count-to/uv-count-to.vue @@ -0,0 +1,187 @@ + + + + + diff --git a/uni_modules/uv-count-to/package.json b/uni_modules/uv-count-to/package.json new file mode 100644 index 0000000..1ed07dc --- /dev/null +++ b/uni_modules/uv-count-to/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-count-to", + "displayName": "uv-count-to 数字滚动 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.4", + "description": "该数字滚动组件一般用于需要滚动数字到某一个值的场景,目标要求是一个递增的值,一种数字上升的视觉冲击效果。", + "keywords": [ + "countTo", + "uvui", + "uv-ui", + "数字滚动", + "数字变化" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-count-to/readme.md b/uni_modules/uv-count-to/readme.md new file mode 100644 index 0000000..5d5f996 --- /dev/null +++ b/uni_modules/uv-count-to/readme.md @@ -0,0 +1,11 @@ +## CountTo 数字滚动 + +> **组件名:uv-count-to** + +该组件一般用于需要滚动数字到某一个值的场景,目标要求是一个递增的值。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-datetime-picker/changelog.md b/uni_modules/uv-datetime-picker/changelog.md new file mode 100644 index 0000000..44784c6 --- /dev/null +++ b/uni_modules/uv-datetime-picker/changelog.md @@ -0,0 +1,28 @@ +## 1.0.12(2023-11-27) +1. 增加round圆角属性 +## 1.0.11(2023-10-11) +1. 修复设置minDate出现选择错乱的BUG +## 1.0.10(2023-09-01) +1. 增加clearDate参数,是否清除上次选择,默认false +## 1.0.9(2023-08-31) +1. 增加mode="year",方便只选择年 +## 1.0.8(2023-07-17) +1. 优化文档 +2. 优化其他 +## 1.0.7(2023-07-13) +1. 修复 uv-datetime-picker 设置value属性不生效的BUG +## 1.0.6(2023-07-05) +修复vue3模式下,动态修改v-model绑定的值无效的BUG +## 1.0.5(2023-07-02) +uv-datetime-picker 由于弹出层uv-popup的修改,打开和关闭方法更改,详情参考文档:https://www.uvui.cn/components/datetimePicker.html +## 1.0.4(2023-06-29) +1. 修复抖音小程序报错的BUG +## 1.0.3(2023-06-07) +1. 取消defaultIndex参数,传该值没实际意义,后续更新文档 +## 1.0.2(2023-06-02) +1. 修复v-model重新赋值不更新的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-datetime-picker 时间选择器 diff --git a/uni_modules/uv-datetime-picker/components/uv-datetime-picker/props.js b/uni_modules/uv-datetime-picker/components/uv-datetime-picker/props.js new file mode 100644 index 0000000..6031d84 --- /dev/null +++ b/uni_modules/uv-datetime-picker/components/uv-datetime-picker/props.js @@ -0,0 +1,130 @@ +export default { + props: { + value: { + type: [String, Number], + default: '' + }, + modelValue: { + type: [String, Number], + default: '' + }, + // 是否打开组件 + show: { + type: Boolean, + default: false + }, + // 是否展示顶部的操作栏 + showToolbar: { + type: Boolean, + default: true + }, + // 顶部标题 + title: { + type: String, + default: '' + }, + // 展示格式,mode=date为日期选择,mode=time为时间选择,mode=year-month为年月选择,mode=datetime为日期时间选择 + mode: { + type: String, + default: 'datetime' + }, + // 可选的最大时间 + maxDate: { + type: Number, + // 最大默认值为后10年 + default: new Date(new Date().getFullYear() + 10, 0, 1).getTime() + }, + // 可选的最小时间 + minDate: { + type: Number, + // 最小默认值为前10年 + default: new Date(new Date().getFullYear() - 10, 0, 1).getTime() + }, + // 可选的最小小时,仅mode=time有效 + minHour: { + type: Number, + default: 0 + }, + // 可选的最大小时,仅mode=time有效 + maxHour: { + type: Number, + default: 23 + }, + // 可选的最小分钟,仅mode=time有效 + minMinute: { + type: Number, + default: 0 + }, + // 可选的最大分钟,仅mode=time有效 + maxMinute: { + type: Number, + default: 59 + }, + // 选项过滤函数 + filter: { + type: [Function, null], + default: null + }, + // 选项格式化函数 + formatter: { + type: [Function, null], + default: null + }, + // 是否显示加载中状态 + loading: { + type: Boolean, + default: false + }, + // 各列中,单个选项的高度 + itemHeight: { + type: [String, Number], + default: 44 + }, + // 取消按钮的文字 + cancelText: { + type: String, + default: '取消' + }, + // 确认按钮的文字 + confirmText: { + type: String, + default: '确认' + }, + // 取消按钮的颜色 + cancelColor: { + type: String, + default: '#909193' + }, + // 确认按钮的颜色 + confirmColor: { + type: String, + default: '#3c9cff' + }, + // 每列中可见选项的数量 + visibleItemCount: { + type: [String, Number], + default: 5 + }, + // 是否允许点击遮罩关闭选择器 + closeOnClickOverlay: { + type: Boolean, + default: true + }, + // 是否允许点击确认关闭选择器 + closeOnClickConfirm: { + type: Boolean, + default: true + }, + // 是否清空上次选择内容 + clearDate: { + type: Boolean, + default: false + }, + // 圆角 + round: { + type: [String, Number], + default: 0 + }, + ...uni.$uv?.props?.datetimePicker + } +} \ No newline at end of file diff --git a/uni_modules/uv-datetime-picker/components/uv-datetime-picker/uv-datetime-picker.vue b/uni_modules/uv-datetime-picker/components/uv-datetime-picker/uv-datetime-picker.vue new file mode 100644 index 0000000..45600dd --- /dev/null +++ b/uni_modules/uv-datetime-picker/components/uv-datetime-picker/uv-datetime-picker.vue @@ -0,0 +1,355 @@ + + \ No newline at end of file diff --git a/uni_modules/uv-datetime-picker/package.json b/uni_modules/uv-datetime-picker/package.json new file mode 100644 index 0000000..adbba14 --- /dev/null +++ b/uni_modules/uv-datetime-picker/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-datetime-picker", + "displayName": "uv-datetime-picker 时间选择器 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.12", + "description": "时间选择器组件用于时间日期,主要用于年月日时分的选择,具体选择的精确度由参数控制。", + "keywords": [ + "datetime-picker", + "uvui", + "uv-ui", + "datetime", + "时间选择" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-picker" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-datetime-picker/readme.md b/uni_modules/uv-datetime-picker/readme.md new file mode 100644 index 0000000..0db9d9c --- /dev/null +++ b/uni_modules/uv-datetime-picker/readme.md @@ -0,0 +1,19 @@ +## DatetimePicker 时间选择器 + +> **组件名:uv-datetime-picker** + +此选择器用于时间日期,主要用于年月日时分的选择,具体选择的精确度由参数控制。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-divider/changelog.md b/uni_modules/uv-divider/changelog.md new file mode 100644 index 0000000..9ff8c52 --- /dev/null +++ b/uni_modules/uv-divider/changelog.md @@ -0,0 +1,11 @@ +## 1.0.4(2023-12-06) +1. 优化 +## 1.0.3(2023-12-06) +1. 阻止事件冒泡问题 +## 1.0.2(2023-06-01) +1. 修复点击触发两次事件的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-divider 分割线 diff --git a/uni_modules/uv-divider/components/uv-divider/props.js b/uni_modules/uv-divider/components/uv-divider/props.js new file mode 100644 index 0000000..7b97c2c --- /dev/null +++ b/uni_modules/uv-divider/components/uv-divider/props.js @@ -0,0 +1,45 @@ +export default { + props: { + // 是否虚线 + dashed: { + type: Boolean, + default: false + }, + // 是否细线 + hairline: { + type: Boolean, + default: true + }, + // 是否以点替代文字,优先于text字段起作用 + dot: { + type: Boolean, + default: false + }, + // 内容文本的位置,left-左边,center-中间,right-右边 + textPosition: { + type: String, + default: 'center' + }, + // 文本内容 + text: { + type: [String, Number], + default: '' + }, + // 文本大小 + textSize: { + type: [String, Number], + default: 14 + }, + // 文本颜色 + textColor: { + type: String, + default: '#909399' + }, + // 线条颜色 + lineColor: { + type: String, + default: '#dcdfe6' + }, + ...uni.$uv?.props?.divider + } +} \ No newline at end of file diff --git a/uni_modules/uv-divider/components/uv-divider/uv-divider.vue b/uni_modules/uv-divider/components/uv-divider/uv-divider.vue new file mode 100644 index 0000000..ba0dfa7 --- /dev/null +++ b/uni_modules/uv-divider/components/uv-divider/uv-divider.vue @@ -0,0 +1,113 @@ + + + \ No newline at end of file diff --git a/uni_modules/uv-divider/package.json b/uni_modules/uv-divider/package.json new file mode 100644 index 0000000..a54b458 --- /dev/null +++ b/uni_modules/uv-divider/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-divider", + "displayName": "uv-divider 分割线 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.4", + "description": "区隔内容的分割线,一般用于页面底部没有更多的提示。", + "keywords": [ + "divider", + "uvui", + "uv-ui", + "分割线", + "没有更多" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-line" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-divider/readme.md b/uni_modules/uv-divider/readme.md new file mode 100644 index 0000000..2384cba --- /dev/null +++ b/uni_modules/uv-divider/readme.md @@ -0,0 +1,11 @@ +## Divider 分割线 + +> **组件名:uv-divider** + +区隔内容的分割线,一般用于页面底部"没有更多"的提示。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-drop-down/changelog.md b/uni_modules/uv-drop-down/changelog.md new file mode 100644 index 0000000..637c605 --- /dev/null +++ b/uni_modules/uv-drop-down/changelog.md @@ -0,0 +1,13 @@ +## 1.0.5(2024-01-02) +1. 修复parentData不变的BUG +## 1.0.4(2023-09-28) +1. 增加uv-sticky依赖 +## 1.0.3(2023-08-29) +1. 修复自定义内容,点击自定义内容时会自动关闭弹窗的问题 +## 1.0.2(2023-08-22) +1. 优化 +## 1.0.1(2023-08-22) +1. 增加@change回调,返回弹窗关闭状态 +2. 增加init方法,方便位置改变进行调整 +## 1.0.0(2023-07-30) +新增uv-drop-down 下拉筛选组件 diff --git a/uni_modules/uv-drop-down/components/uv-drop-down-item/uv-drop-down-item.vue b/uni_modules/uv-drop-down/components/uv-drop-down-item/uv-drop-down-item.vue new file mode 100644 index 0000000..9438a57 --- /dev/null +++ b/uni_modules/uv-drop-down/components/uv-drop-down-item/uv-drop-down-item.vue @@ -0,0 +1,169 @@ + + + \ No newline at end of file diff --git a/uni_modules/uv-drop-down/components/uv-drop-down-popup/uv-drop-down-popup.vue b/uni_modules/uv-drop-down/components/uv-drop-down-popup/uv-drop-down-popup.vue new file mode 100644 index 0000000..6a1efc8 --- /dev/null +++ b/uni_modules/uv-drop-down/components/uv-drop-down-popup/uv-drop-down-popup.vue @@ -0,0 +1,242 @@ + + + \ No newline at end of file diff --git a/uni_modules/uv-drop-down/components/uv-drop-down/uv-drop-down.vue b/uni_modules/uv-drop-down/components/uv-drop-down/uv-drop-down.vue new file mode 100644 index 0000000..9978b40 --- /dev/null +++ b/uni_modules/uv-drop-down/components/uv-drop-down/uv-drop-down.vue @@ -0,0 +1,135 @@ + + + \ No newline at end of file diff --git a/uni_modules/uv-drop-down/package.json b/uni_modules/uv-drop-down/package.json new file mode 100644 index 0000000..f4ad683 --- /dev/null +++ b/uni_modules/uv-drop-down/package.json @@ -0,0 +1,91 @@ +{ + "id": "uv-drop-down", + "displayName": "uv-drop-down 下拉筛选 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.5", + "description": "该组件主要提供筛选下拉筛选框,内置基础筛选功能,可以根据自己的需求自定义筛选项", + "keywords": [ + "uv-drop-down", + "uvui", + "uv-ui", + "下拉筛选", + "筛选" + ], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon", + "uv-text", + "uv-transition", + "uv-sticky" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-drop-down/readme.md b/uni_modules/uv-drop-down/readme.md new file mode 100644 index 0000000..31cbd24 --- /dev/null +++ b/uni_modules/uv-drop-down/readme.md @@ -0,0 +1,23 @@ +## DropDown 下拉筛选 + +> **组件名:uv-drop-down** + +该组件主要提供筛选下拉筛选框,内置基础筛选功能,可以根据自己的需求自定义筛选项。 + +为了兼容app-nvue,需要内置三个组件进行配合使用,uv-drop-down属于菜单项(其实还包括子组件uv-drop-down-item),uv-drop-down-popup属于筛选框。 + +只需要做简单的约定式配置,即可使用该功能,兼容性良好,已经在多端进行了多次测试。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-empty/changelog.md b/uni_modules/uv-empty/changelog.md new file mode 100644 index 0000000..a1cc2ad --- /dev/null +++ b/uni_modules/uv-empty/changelog.md @@ -0,0 +1,13 @@ +## 1.0.5(2023-12-20) +1. 优化 +## 1.0.4(2023-08-04) +1. icon支持base64图片 +## 1.0.3(2023-07-17) +1. 修复 uv-empty 恢复设置mode属性的内置图标 +## 1.0.2(2023-07-03) +去除插槽判断,避免某些平台不显示的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-empty 内容为空 diff --git a/uni_modules/uv-empty/components/uv-empty/props.js b/uni_modules/uv-empty/components/uv-empty/props.js new file mode 100644 index 0000000..26c282d --- /dev/null +++ b/uni_modules/uv-empty/components/uv-empty/props.js @@ -0,0 +1,60 @@ +export default { + props: { + // 内置图标名称,或图片路径,建议绝对路径 + icon: { + type: String, + default: '' + }, + // 提示文字 + text: { + type: String, + default: '' + }, + // 文字颜色 + textColor: { + type: String, + default: '#c0c4cc' + }, + // 文字大小 + textSize: { + type: [String, Number], + default: 14 + }, + // 图标的颜色 + iconColor: { + type: String, + default: '#c0c4cc' + }, + // 图标的大小 + iconSize: { + type: [String, Number], + default: 90 + }, + // 选择预置的图标类型 + mode: { + type: String, + default: 'data' + }, + // 图标宽度,单位px + width: { + type: [String, Number], + default: 160 + }, + // 图标高度,单位px + height: { + type: [String, Number], + default: 160 + }, + // 是否显示组件 + show: { + type: Boolean, + default: true + }, + // 组件距离上一个元素之间的距离,默认px单位 + marginTop: { + type: [String, Number], + default: 0 + }, + ...uni.$uv?.props?.empty + } +} \ No newline at end of file diff --git a/uni_modules/uv-empty/components/uv-empty/uv-empty.vue b/uni_modules/uv-empty/components/uv-empty/uv-empty.vue new file mode 100644 index 0000000..22a9264 --- /dev/null +++ b/uni_modules/uv-empty/components/uv-empty/uv-empty.vue @@ -0,0 +1,126 @@ + + + \ No newline at end of file diff --git a/uni_modules/uv-empty/package.json b/uni_modules/uv-empty/package.json new file mode 100644 index 0000000..e10f451 --- /dev/null +++ b/uni_modules/uv-empty/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-empty", + "displayName": "uv-empty 内容为空 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.5", + "description": "该组件用于需要加载内容,但是加载的第一页数据就为空,提示一个 没有内容 的场景, 我们精心挑选了十几个场景的图标,方便您使用。", + "keywords": [ + "empty", + "uvui", + "uv-ui", + "空数据", + "暂无数据" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-empty/readme.md b/uni_modules/uv-empty/readme.md new file mode 100644 index 0000000..ecef14d --- /dev/null +++ b/uni_modules/uv-empty/readme.md @@ -0,0 +1,19 @@ +## Empty 内容为空 + +> **组件名:uv-empty** + +该组件用于需要加载内容,但是加载的第一页数据就为空,提示一个"没有内容"的场景, 我们精心挑选了十几个场景的图标,方便您使用。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-form/changelog.md b/uni_modules/uv-form/changelog.md new file mode 100644 index 0000000..b229bca --- /dev/null +++ b/uni_modules/uv-form/changelog.md @@ -0,0 +1,23 @@ +## 1.0.9(2023-08-14) +1. 修复设置labelWidth属性时,节点渲染有闪动的BUG +## 1.0.8(2023-08-13) +1. 修复未设置rules的情况下报错的BUG +2. 优化错误提示 +## 1.0.7(2023-08-10) +1. 修复在vue3+setup语法糖中错误文字动画错乱 +## 1.0.6(2023-07-17) +1. 优化文档 +2. 优化其他 +## 1.0.5(2023-07-03) +去除插槽判断,避免某些平台不显示的BUG +## 1.0.4(2023-07-02) +uv-form 由于弹出层uv-transition的修改,组件内部做了相应的修改,参数不变。 +## 1.0.3(2023-06-18) +1. 修改某些情况下的BUG +## 1.0.2(2023-06-15) +1. 修复支付宝报错的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-form 表单 diff --git a/uni_modules/uv-form/components/uv-form-item/props.js b/uni_modules/uv-form/components/uv-form-item/props.js new file mode 100644 index 0000000..00a26bc --- /dev/null +++ b/uni_modules/uv-form/components/uv-form-item/props.js @@ -0,0 +1,49 @@ +export default { + props: { + // input的label提示语 + label: { + type: String, + default: '' + }, + // 绑定的值 + prop: { + type: String, + default: '' + }, + // 是否显示表单域的下划线边框 + borderBottom: { + type: [Boolean], + default: false + }, + // label的位置,left-左边,top-上边 + labelPosition: { + type: String, + default: '' + }, + // label的宽度,单位px + labelWidth: { + type: [String, Number], + default: '' + }, + // 右侧图标 + rightIcon: { + type: String, + default: '' + }, + // 左侧图标 + leftIcon: { + type: String, + default: '' + }, + // 是否显示左边的必填星号,只作显示用,具体校验必填的逻辑,请在rules中配置 + required: { + type: Boolean, + default: false + }, + leftIconStyle: { + type: [String, Object], + default: '' + }, + ...uni.$uv?.props?.formItem + } +} \ No newline at end of file diff --git a/uni_modules/uv-form/components/uv-form-item/uv-form-item.vue b/uni_modules/uv-form/components/uv-form-item/uv-form-item.vue new file mode 100644 index 0000000..25d93ea --- /dev/null +++ b/uni_modules/uv-form/components/uv-form-item/uv-form-item.vue @@ -0,0 +1,226 @@ + + + + \ No newline at end of file diff --git a/uni_modules/uv-form/components/uv-form/props.js b/uni_modules/uv-form/components/uv-form/props.js new file mode 100644 index 0000000..6cffb95 --- /dev/null +++ b/uni_modules/uv-form/components/uv-form/props.js @@ -0,0 +1,46 @@ +export default { + props: { + // 当前form的需要验证字段的集合 + model: { + type: Object, + default: () => ({}) + }, + // 验证规则 + rules: { + type: [Object, Function, Array], + default: () => ({}) + }, + // 有错误时的提示方式,message-提示信息,toast-进行toast提示 + // border-bottom-下边框呈现红色,none-无提示 + errorType: { + type: String, + default: 'message' + }, + // 是否显示表单域的下划线边框 + borderBottom: { + type: Boolean, + default: true + }, + // label的位置,left-左边,top-上边 + labelPosition: { + type: String, + default: 'left' + }, + // label的宽度,单位px + labelWidth: { + type: [String, Number], + default: 45 + }, + // lable字体的对齐方式 + labelAlign: { + type: String, + default: 'left' + }, + // lable的样式,对象形式 + labelStyle: { + type: Object, + default: () => ({}) + }, + ...uni.$uv?.props?.form + } +} \ No newline at end of file diff --git a/uni_modules/uv-form/components/uv-form/uv-form.vue b/uni_modules/uv-form/components/uv-form/uv-form.vue new file mode 100644 index 0000000..bc0876f --- /dev/null +++ b/uni_modules/uv-form/components/uv-form/uv-form.vue @@ -0,0 +1,209 @@ + + + \ No newline at end of file diff --git a/uni_modules/uv-form/components/uv-form/valid.js b/uni_modules/uv-form/components/uv-form/valid.js new file mode 100644 index 0000000..9e114df --- /dev/null +++ b/uni_modules/uv-form/components/uv-form/valid.js @@ -0,0 +1,1343 @@ +function _extends() { + _extends = Object.assign || function (target) { + for (let i = 1; i < arguments.length; i++) { + const source = arguments[i] + + for (const key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key] + } + } + } + + return target + } + + return _extends.apply(this, arguments) +} + +/* eslint no-console:0 */ +const formatRegExp = /%[sdj%]/g +let warning = function warning() {} // don't print warning message when in production env or node runtime + +if (typeof process !== 'undefined' && process.env && process.env.NODE_ENV !== 'production' && typeof window + !== 'undefined' && typeof document !== 'undefined') { + warning = function warning(type, errors) { + if (typeof console !== 'undefined' && console.warn) { + if (errors.every((e) => typeof e === 'string')) { + console.warn(type, errors) + } + } + } +} + +function convertFieldsError(errors) { + if (!errors || !errors.length) return null + const fields = {} + errors.forEach((error) => { + const { field } = error + fields[field] = fields[field] || [] + fields[field].push(error) + }) + return fields +} + +function format() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key] + } + + let i = 1 + const f = args[0] + const len = args.length + + if (typeof f === 'function') { + return f.apply(null, args.slice(1)) + } + + if (typeof f === 'string') { + let str = String(f).replace(formatRegExp, (x) => { + if (x === '%%') { + return '%' + } + + if (i >= len) { + return x + } + + switch (x) { + case '%s': + return String(args[i++]) + + case '%d': + return Number(args[i++]) + + case '%j': + try { + return JSON.stringify(args[i++]) + } catch (_) { + return '[Circular]' + } + + break + + default: + return x + } + }) + + for (let arg = args[i]; i < len; arg = args[++i]) { + str += ` ${arg}` + } + + return str + } + + return f +} + +function isNativeStringType(type) { + return type === 'string' || type === 'url' || type === 'hex' || type === 'email' || type === 'pattern' +} + +function isEmptyValue(value, type) { + if (value === undefined || value === null) { + return true + } + + if (type === 'array' && Array.isArray(value) && !value.length) { + return true + } + + if (isNativeStringType(type) && typeof value === 'string' && !value) { + return true + } + + return false +} + +function asyncParallelArray(arr, func, callback) { + const results = [] + let total = 0 + const arrLength = arr.length + + function count(errors) { + results.push.apply(results, errors) + total++ + + if (total === arrLength) { + callback(results) + } + } + + arr.forEach((a) => { + func(a, count) + }) +} + +function asyncSerialArray(arr, func, callback) { + let index = 0 + const arrLength = arr.length + + function next(errors) { + if (errors && errors.length) { + callback(errors) + return + } + + const original = index + index += 1 + + if (original < arrLength) { + func(arr[original], next) + } else { + callback([]) + } + } + + next([]) +} + +function flattenObjArr(objArr) { + const ret = [] + Object.keys(objArr).forEach((k) => { + ret.push.apply(ret, objArr[k]) + }) + return ret +} + +function asyncMap(objArr, option, func, callback) { + if (option.first) { + const _pending = new Promise((resolve, reject) => { + const next = function next(errors) { + callback(errors) + return errors.length ? reject({ + errors, + fields: convertFieldsError(errors) + }) : resolve() + } + + const flattenArr = flattenObjArr(objArr) + asyncSerialArray(flattenArr, func, next) + }) + + _pending.catch((e) => e) + + return _pending + } + + let firstFields = option.firstFields || [] + + if (firstFields === true) { + firstFields = Object.keys(objArr) + } + + const objArrKeys = Object.keys(objArr) + const objArrLength = objArrKeys.length + let total = 0 + const results = [] + const pending = new Promise((resolve, reject) => { + const next = function next(errors) { + results.push.apply(results, errors) + total++ + + if (total === objArrLength) { + callback(results) + return results.length ? reject({ + errors: results, + fields: convertFieldsError(results) + }) : resolve() + } + } + + if (!objArrKeys.length) { + callback(results) + resolve() + } + + objArrKeys.forEach((key) => { + const arr = objArr[key] + + if (firstFields.indexOf(key) !== -1) { + asyncSerialArray(arr, func, next) + } else { + asyncParallelArray(arr, func, next) + } + }) + }) + pending.catch((e) => e) + return pending +} + +function complementError(rule) { + return function (oe) { + if (oe && oe.message) { + oe.field = oe.field || rule.fullField + return oe + } + + return { + message: typeof oe === 'function' ? oe() : oe, + field: oe.field || rule.fullField + } + } +} + +function deepMerge(target, source) { + if (source) { + for (const s in source) { + if (source.hasOwnProperty(s)) { + const value = source[s] + + if (typeof value === 'object' && typeof target[s] === 'object') { + target[s] = { ...target[s], ...value } + } else { + target[s] = value + } + } + } + } + + return target +} + +/** + * Rule for validating required fields. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param source The source object being validated. + * @param errors An array of errors that this rule may add + * validation errors to. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function required(rule, value, source, errors, options, type) { + if (rule.required && (!source.hasOwnProperty(rule.field) || isEmptyValue(value, type || rule.type))) { + errors.push(format(options.messages.required, rule.fullField)) + } +} + +/** + * Rule for validating whitespace. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param source The source object being validated. + * @param errors An array of errors that this rule may add + * validation errors to. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function whitespace(rule, value, source, errors, options) { + if (/^\s+$/.test(value) || value === '') { + errors.push(format(options.messages.whitespace, rule.fullField)) + } +} + +/* eslint max-len:0 */ + +const pattern = { + // http://emailregex.com/ + email: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/, + url: new RegExp( + '^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$', + 'i' + ), + hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i +} +var types = { + integer: function integer(value) { + return /^(-)?\d+$/.test(value); + }, + float: function float(value) { + return /^(-)?\d+(\.\d+)?$/.test(value); + }, + array: function array(value) { + return Array.isArray(value) + }, + regexp: function regexp(value) { + if (value instanceof RegExp) { + return true + } + + try { + return !!new RegExp(value) + } catch (e) { + return false + } + }, + date: function date(value) { + return typeof value.getTime === 'function' && typeof value.getMonth === 'function' && typeof value.getYear + === 'function' + }, + number: function number(value) { + if (isNaN(value)) { + return false + } + + // 修改源码,将字符串数值先转为数值 + return typeof +value === 'number' + }, + object: function object(value) { + return typeof value === 'object' && !types.array(value) + }, + method: function method(value) { + return typeof value === 'function' + }, + email: function email(value) { + return typeof value === 'string' && !!value.match(pattern.email) && value.length < 255 + }, + url: function url(value) { + return typeof value === 'string' && !!value.match(pattern.url) + }, + hex: function hex(value) { + return typeof value === 'string' && !!value.match(pattern.hex) + } +} +/** + * Rule for validating the type of a value. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param source The source object being validated. + * @param errors An array of errors that this rule may add + * validation errors to. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function type(rule, value, source, errors, options) { + if (rule.required && value === undefined) { + required(rule, value, source, errors, options) + return + } + + const custom = ['integer', 'float', 'array', 'regexp', 'object', 'method', 'email', 'number', 'date', 'url', 'hex'] + const ruleType = rule.type + + if (custom.indexOf(ruleType) > -1) { + if (!types[ruleType](value)) { + errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type)) + } // straight typeof check + } else if (ruleType && typeof value !== rule.type) { + errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type)) + } +} + +/** + * Rule for validating minimum and maximum allowed values. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param source The source object being validated. + * @param errors An array of errors that this rule may add + * validation errors to. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function range(rule, value, source, errors, options) { + const len = typeof rule.len === 'number' + const min = typeof rule.min === 'number' + const max = typeof rule.max === 'number' // 正则匹配码点范围从U+010000一直到U+10FFFF的文字(补充平面Supplementary Plane) + + const spRegexp = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g + let val = value + let key = null + const num = typeof value === 'number' + const str = typeof value === 'string' + const arr = Array.isArray(value) + + if (num) { + key = 'number' + } else if (str) { + key = 'string' + } else if (arr) { + key = 'array' + } // if the value is not of a supported type for range validation + // the validation rule rule should use the + // type property to also test for a particular type + + if (!key) { + return false + } + + if (arr) { + val = value.length + } + + if (str) { + // 处理码点大于U+010000的文字length属性不准确的bug,如"𠮷𠮷𠮷".lenght !== 3 + val = value.replace(spRegexp, '_').length + } + + if (len) { + if (val !== rule.len) { + errors.push(format(options.messages[key].len, rule.fullField, rule.len)) + } + } else if (min && !max && val < rule.min) { + errors.push(format(options.messages[key].min, rule.fullField, rule.min)) + } else if (max && !min && val > rule.max) { + errors.push(format(options.messages[key].max, rule.fullField, rule.max)) + } else if (min && max && (val < rule.min || val > rule.max)) { + errors.push(format(options.messages[key].range, rule.fullField, rule.min, rule.max)) + } +} + +const ENUM = 'enum' +/** + * Rule for validating a value exists in an enumerable list. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param source The source object being validated. + * @param errors An array of errors that this rule may add + * validation errors to. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function enumerable(rule, value, source, errors, options) { + rule[ENUM] = Array.isArray(rule[ENUM]) ? rule[ENUM] : [] + + if (rule[ENUM].indexOf(value) === -1) { + errors.push(format(options.messages[ENUM], rule.fullField, rule[ENUM].join(', '))) + } +} + +/** + * Rule for validating a regular expression pattern. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param source The source object being validated. + * @param errors An array of errors that this rule may add + * validation errors to. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function pattern$1(rule, value, source, errors, options) { + if (rule.pattern) { + if (rule.pattern instanceof RegExp) { + // if a RegExp instance is passed, reset `lastIndex` in case its `global` + // flag is accidentally set to `true`, which in a validation scenario + // is not necessary and the result might be misleading + rule.pattern.lastIndex = 0 + + if (!rule.pattern.test(value)) { + errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern)) + } + } else if (typeof rule.pattern === 'string') { + const _pattern = new RegExp(rule.pattern) + + if (!_pattern.test(value)) { + errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern)) + } + } + } +} + +const rules = { + required, + whitespace, + type, + range, + enum: enumerable, + pattern: pattern$1 +} + +/** + * Performs validation for string types. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function string(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value, 'string') && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options, 'string') + + if (!isEmptyValue(value, 'string')) { + rules.type(rule, value, source, errors, options) + rules.range(rule, value, source, errors, options) + rules.pattern(rule, value, source, errors, options) + + if (rule.whitespace === true) { + rules.whitespace(rule, value, source, errors, options) + } + } + } + + callback(errors) +} + +/** + * Validates a function. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function method(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options) + + if (value !== undefined) { + rules.type(rule, value, source, errors, options) + } + } + + callback(errors) +} + +/** + * Validates a number. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function number(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (value === '') { + value = undefined + } + + if (isEmptyValue(value) && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options) + + if (value !== undefined) { + rules.type(rule, value, source, errors, options) + rules.range(rule, value, source, errors, options) + } + } + + callback(errors) +} + +/** + * Validates a boolean. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function _boolean(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options) + + if (value !== undefined) { + rules.type(rule, value, source, errors, options) + } + } + + callback(errors) +} + +/** + * Validates the regular expression type. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function regexp(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options) + + if (!isEmptyValue(value)) { + rules.type(rule, value, source, errors, options) + } + } + + callback(errors) +} + +/** + * Validates a number is an integer. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function integer(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options) + + if (value !== undefined) { + rules.type(rule, value, source, errors, options) + rules.range(rule, value, source, errors, options) + } + } + + callback(errors) +} + +/** + * Validates a number is a floating point number. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function floatFn(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options) + + if (value !== undefined) { + rules.type(rule, value, source, errors, options) + rules.range(rule, value, source, errors, options) + } + } + + callback(errors) +} + +/** + * Validates an array. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function array(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value, 'array') && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options, 'array') + + if (!isEmptyValue(value, 'array')) { + rules.type(rule, value, source, errors, options) + rules.range(rule, value, source, errors, options) + } + } + + callback(errors) +} + +/** + * Validates an object. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function object(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options) + + if (value !== undefined) { + rules.type(rule, value, source, errors, options) + } + } + + callback(errors) +} + +const ENUM$1 = 'enum' +/** + * Validates an enumerable list. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function enumerable$1(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options) + + if (value !== undefined) { + rules[ENUM$1](rule, value, source, errors, options) + } + } + + callback(errors) +} + +/** + * Validates a regular expression pattern. + * + * Performs validation when a rule only contains + * a pattern property but is not declared as a string type. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function pattern$2(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value, 'string') && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options) + + if (!isEmptyValue(value, 'string')) { + rules.pattern(rule, value, source, errors, options) + } + } + + callback(errors) +} + +function date(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options) + + if (!isEmptyValue(value)) { + let dateObject + + if (typeof value === 'number') { + dateObject = new Date(value) + } else { + dateObject = value + } + + rules.type(rule, dateObject, source, errors, options) + + if (dateObject) { + rules.range(rule, dateObject.getTime(), source, errors, options) + } + } + } + + callback(errors) +} + +function required$1(rule, value, callback, source, options) { + const errors = [] + const type = Array.isArray(value) ? 'array' : typeof value + rules.required(rule, value, source, errors, options, type) + callback(errors) +} + +function type$1(rule, value, callback, source, options) { + const ruleType = rule.type + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value, ruleType) && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options, ruleType) + + if (!isEmptyValue(value, ruleType)) { + rules.type(rule, value, source, errors, options) + } + } + + callback(errors) +} + +/** + * Performs validation for any type. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function any(rule, value, callback, source, options) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options) + } + + callback(errors) +} + +const validators = { + string, + method, + number, + boolean: _boolean, + regexp, + integer, + float: floatFn, + array, + object, + enum: enumerable$1, + pattern: pattern$2, + date, + url: type$1, + hex: type$1, + email: type$1, + required: required$1, + any +} + +function newMessages() { + return { + default: 'Validation error on field %s', + required: '%s is required', + enum: '%s must be one of %s', + whitespace: '%s cannot be empty', + date: { + format: '%s date %s is invalid for format %s', + parse: '%s date could not be parsed, %s is invalid ', + invalid: '%s date %s is invalid' + }, + types: { + string: '%s is not a %s', + method: '%s is not a %s (function)', + array: '%s is not an %s', + object: '%s is not an %s', + number: '%s is not a %s', + date: '%s is not a %s', + boolean: '%s is not a %s', + integer: '%s is not an %s', + float: '%s is not a %s', + regexp: '%s is not a valid %s', + email: '%s is not a valid %s', + url: '%s is not a valid %s', + hex: '%s is not a valid %s' + }, + string: { + len: '%s must be exactly %s characters', + min: '%s must be at least %s characters', + max: '%s cannot be longer than %s characters', + range: '%s must be between %s and %s characters' + }, + number: { + len: '%s must equal %s', + min: '%s cannot be less than %s', + max: '%s cannot be greater than %s', + range: '%s must be between %s and %s' + }, + array: { + len: '%s must be exactly %s in length', + min: '%s cannot be less than %s in length', + max: '%s cannot be greater than %s in length', + range: '%s must be between %s and %s in length' + }, + pattern: { + mismatch: '%s value %s does not match pattern %s' + }, + clone: function clone() { + const cloned = JSON.parse(JSON.stringify(this)) + cloned.clone = this.clone + return cloned + } + } +} +const messages = newMessages() + +/** + * Encapsulates a validation schema. + * + * @param descriptor An object declaring validation rules + * for this schema. + */ + +function Schema(descriptor) { + this.rules = null + this._messages = messages + this.define(descriptor) +} + +Schema.prototype = { + messages: function messages(_messages) { + if (_messages) { + this._messages = deepMerge(newMessages(), _messages) + } + + return this._messages + }, + define: function define(rules) { + if (!rules) { + throw new Error('Cannot configure a schema with no rules') + } + + if (typeof rules !== 'object' || Array.isArray(rules)) { + throw new Error('Rules must be an object') + } + + this.rules = {} + let z + let item + + for (z in rules) { + if (rules.hasOwnProperty(z)) { + item = rules[z] + this.rules[z] = Array.isArray(item) ? item : [item] + } + } + }, + validate: function validate(source_, o, oc) { + const _this = this + + if (o === void 0) { + o = {} + } + + if (oc === void 0) { + oc = function oc() {} + } + + let source = source_ + let options = o + let callback = oc + + if (typeof options === 'function') { + callback = options + options = {} + } + + if (!this.rules || Object.keys(this.rules).length === 0) { + if (callback) { + callback() + } + + return Promise.resolve() + } + + function complete(results) { + let i + let errors = [] + let fields = {} + + function add(e) { + if (Array.isArray(e)) { + let _errors + + errors = (_errors = errors).concat.apply(_errors, e) + } else { + errors.push(e) + } + } + + for (i = 0; i < results.length; i++) { + add(results[i]) + } + + if (!errors.length) { + errors = null + fields = null + } else { + fields = convertFieldsError(errors) + } + + callback(errors, fields) + } + + if (options.messages) { + let messages$1 = this.messages() + + if (messages$1 === messages) { + messages$1 = newMessages() + } + + deepMerge(messages$1, options.messages) + options.messages = messages$1 + } else { + options.messages = this.messages() + } + + let arr + let value + const series = {} + const keys = options.keys || Object.keys(this.rules) + keys.forEach((z) => { + arr = _this.rules[z] + value = source[z] + arr.forEach((r) => { + let rule = r + + if (typeof rule.transform === 'function') { + if (source === source_) { + source = { ...source } + } + + value = source[z] = rule.transform(value) + } + + if (typeof rule === 'function') { + rule = { + validator: rule + } + } else { + rule = { ...rule } + } + + rule.validator = _this.getValidationMethod(rule) + rule.field = z + rule.fullField = rule.fullField || z + rule.type = _this.getType(rule) + + if (!rule.validator) { + return + } + + series[z] = series[z] || [] + series[z].push({ + rule, + value, + source, + field: z + }) + }) + }) + const errorFields = {} + return asyncMap(series, options, (data, doIt) => { + const { rule } = data + let deep = (rule.type === 'object' || rule.type === 'array') && (typeof rule.fields === 'object' || typeof rule.defaultField + === 'object') + deep = deep && (rule.required || !rule.required && data.value) + rule.field = data.field + + function addFullfield(key, schema) { + return { ...schema, fullField: `${rule.fullField}.${key}` } + } + + function cb(e) { + if (e === void 0) { + e = [] + } + + let errors = e + + if (!Array.isArray(errors)) { + errors = [errors] + } + + if (!options.suppressWarning && errors.length) { + Schema.warning('async-validator:', errors) + } + + if (errors.length && rule.message) { + errors = [].concat(rule.message) + } + + errors = errors.map(complementError(rule)) + + if (options.first && errors.length) { + errorFields[rule.field] = 1 + return doIt(errors) + } + + if (!deep) { + doIt(errors) + } else { + // if rule is required but the target object + // does not exist fail at the rule level and don't + // go deeper + if (rule.required && !data.value) { + if (rule.message) { + errors = [].concat(rule.message).map(complementError(rule)) + } else if (options.error) { + errors = [options.error(rule, format(options.messages.required, rule.field))] + } else { + errors = [] + } + + return doIt(errors) + } + + let fieldsSchema = {} + + if (rule.defaultField) { + for (const k in data.value) { + if (data.value.hasOwnProperty(k)) { + fieldsSchema[k] = rule.defaultField + } + } + } + + fieldsSchema = { ...fieldsSchema, ...data.rule.fields } + + for (const f in fieldsSchema) { + if (fieldsSchema.hasOwnProperty(f)) { + const fieldSchema = Array.isArray(fieldsSchema[f]) ? fieldsSchema[f] : [fieldsSchema[f]] + fieldsSchema[f] = fieldSchema.map(addFullfield.bind(null, f)) + } + } + + const schema = new Schema(fieldsSchema) + schema.messages(options.messages) + + if (data.rule.options) { + data.rule.options.messages = options.messages + data.rule.options.error = options.error + } + + schema.validate(data.value, data.rule.options || options, (errs) => { + const finalErrors = [] + + if (errors && errors.length) { + finalErrors.push.apply(finalErrors, errors) + } + + if (errs && errs.length) { + finalErrors.push.apply(finalErrors, errs) + } + + doIt(finalErrors.length ? finalErrors : null) + }) + } + } + + let res + + if (rule.asyncValidator) { + res = rule.asyncValidator(rule, data.value, cb, data.source, options) + } else if (rule.validator) { + res = rule.validator(rule, data.value, cb, data.source, options) + + if (res === true) { + cb() + } else if (res === false) { + cb(rule.message || `${rule.field} fails`) + } else if (res instanceof Array) { + cb(res) + } else if (res instanceof Error) { + cb(res.message) + } + } + + if (res && res.then) { + res.then(() => cb(), (e) => cb(e)) + } + }, (results) => { + complete(results) + }) + }, + getType: function getType(rule) { + if (rule.type === undefined && rule.pattern instanceof RegExp) { + rule.type = 'pattern' + } + + if (typeof rule.validator !== 'function' && rule.type && !validators.hasOwnProperty(rule.type)) { + throw new Error(format('Unknown rule type %s', rule.type)) + } + + return rule.type || 'string' + }, + getValidationMethod: function getValidationMethod(rule) { + if (typeof rule.validator === 'function') { + return rule.validator + } + + const keys = Object.keys(rule) + const messageIndex = keys.indexOf('message') + + if (messageIndex !== -1) { + keys.splice(messageIndex, 1) + } + + if (keys.length === 1 && keys[0] === 'required') { + return validators.required + } + + return validators[this.getType(rule)] || false + } +} + +Schema.register = function register(type, validator) { + if (typeof validator !== 'function') { + throw new Error('Cannot register a validator by type, validator is not a function') + } + + validators[type] = validator +} + +Schema.warning = warning +Schema.messages = messages + +export default Schema +// # sourceMappingURL=index.js.map diff --git a/uni_modules/uv-form/package.json b/uni_modules/uv-form/package.json new file mode 100644 index 0000000..5e612c2 --- /dev/null +++ b/uni_modules/uv-form/package.json @@ -0,0 +1,93 @@ +{ + "id": "uv-form", + "displayName": "uv-form 表单 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.9", + "description": "此组件一般用于表单场景,可以配置Input输入框,Textarea文本域,Checkbox复选框,Radio单选框,开关选择器等,进行表单验证等。", + "keywords": [ + "form", + "uvui", + "uv-ui", + "表单", + "表单验证" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon", + "uv-line", + "uv-transition", + "uv-action-sheet", + "uv-input", + "uv-button" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-form/readme.md b/uni_modules/uv-form/readme.md new file mode 100644 index 0000000..0458a6a --- /dev/null +++ b/uni_modules/uv-form/readme.md @@ -0,0 +1,19 @@ +## Form 表单 + +> **组件名:uv-form** + +此组件一般用于表单场景,可以配置`Input`输入框,`Textarea`文本域,`Checkbox`复选框,`Radio`单选框,开关选择器等,进行表单验证等。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-gap/changelog.md b/uni_modules/uv-gap/changelog.md new file mode 100644 index 0000000..7d603b4 --- /dev/null +++ b/uni_modules/uv-gap/changelog.md @@ -0,0 +1,5 @@ +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +1. 新增间隔槽组件 diff --git a/uni_modules/uv-gap/components/uv-gap/props.js b/uni_modules/uv-gap/components/uv-gap/props.js new file mode 100644 index 0000000..0ad787c --- /dev/null +++ b/uni_modules/uv-gap/components/uv-gap/props.js @@ -0,0 +1,25 @@ +export default { + props: { + // 背景颜色(默认transparent) + bgColor: { + type: String, + default: 'transparent' + }, + // 分割槽高度,单位px(默认20) + height: { + type: [String, Number], + default: 20 + }, + // 与上一个组件的距离 + marginTop: { + type: [String, Number], + default: 0 + }, + // 与下一个组件的距离 + marginBottom: { + type: [String, Number], + default: 0 + }, + ...uni.$uv?.props?.gap + } +} \ No newline at end of file diff --git a/uni_modules/uv-gap/components/uv-gap/uv-gap.vue b/uni_modules/uv-gap/components/uv-gap/uv-gap.vue new file mode 100644 index 0000000..55720a1 --- /dev/null +++ b/uni_modules/uv-gap/components/uv-gap/uv-gap.vue @@ -0,0 +1,36 @@ + + + diff --git a/uni_modules/uv-gap/package.json b/uni_modules/uv-gap/package.json new file mode 100644 index 0000000..3a17ec3 --- /dev/null +++ b/uni_modules/uv-gap/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-gap", + "displayName": "uv-gap 间隔槽 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.1", + "description": "该组件一般用于内容块之间的用一个灰色块隔开的场景,方便用户风格统一,减少工作量。", + "keywords": [ + "gap", + "uvui", + "uv-ui", + "间隔槽", + "内容块" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-gap/readme.md b/uni_modules/uv-gap/readme.md new file mode 100644 index 0000000..dedd565 --- /dev/null +++ b/uni_modules/uv-gap/readme.md @@ -0,0 +1,12 @@ +## Gap 间隔槽 + +> **组件名:uv-gap** + +该组件一般用于内容块之间的用一个灰色块隔开的场景,方便用户风格统一,减少工作量。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 + diff --git a/uni_modules/uv-grid/changelog.md b/uni_modules/uv-grid/changelog.md new file mode 100644 index 0000000..8c61261 --- /dev/null +++ b/uni_modules/uv-grid/changelog.md @@ -0,0 +1,21 @@ +## 1.0.9(2023-12-06) +1. 优化 +## 1.0.8(2023-12-06) +1. 阻止事件冒泡问题 +## 1.0.7(2023-10-13) +1. unmounted兼容vue3 +## 1.0.6(2023-08-14) +1. 修复初始的时候闪动的BUG +## 1.0.5(2023-06-22) +1. 优化修改 +## 1.0.4(2023-06-21) +1. 修复BUG +## 1.0.3(2023-06-01) +1. 修复点击触发两次事件的BUG +## 1.0.2(2023-05-23) +1. 优化 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-grid 宫格布局 diff --git a/uni_modules/uv-grid/components/uv-grid-item/props.js b/uni_modules/uv-grid/components/uv-grid-item/props.js new file mode 100644 index 0000000..6b86298 --- /dev/null +++ b/uni_modules/uv-grid/components/uv-grid-item/props.js @@ -0,0 +1,15 @@ +export default { + props: { + // 宫格的name + name: { + type: [String, Number, null], + default: null + }, + // 背景颜色 + bgColor: { + type: String, + default: 'transparent' + }, + ...uni.$uv?.props?.gridItem + } +} \ No newline at end of file diff --git a/uni_modules/uv-grid/components/uv-grid-item/uv-grid-item.vue b/uni_modules/uv-grid/components/uv-grid-item/uv-grid-item.vue new file mode 100644 index 0000000..9412852 --- /dev/null +++ b/uni_modules/uv-grid/components/uv-grid-item/uv-grid-item.vue @@ -0,0 +1,226 @@ + + + + + diff --git a/uni_modules/uv-grid/components/uv-grid/props.js b/uni_modules/uv-grid/components/uv-grid/props.js new file mode 100644 index 0000000..d5f8474 --- /dev/null +++ b/uni_modules/uv-grid/components/uv-grid/props.js @@ -0,0 +1,20 @@ +export default { + props: { + // 分成几列 + col: { + type: [String, Number], + default: 3 + }, + // 是否显示边框 + border: { + type: Boolean, + default: false + }, + // 宫格对齐方式,表现为数量少的时候,靠左,居中,还是靠右 + align: { + type: String, + default: 'left' + }, + ...uni.$uv?.props?.grid + } +} \ No newline at end of file diff --git a/uni_modules/uv-grid/components/uv-grid/uv-grid.vue b/uni_modules/uv-grid/components/uv-grid/uv-grid.vue new file mode 100644 index 0000000..0314b18 --- /dev/null +++ b/uni_modules/uv-grid/components/uv-grid/uv-grid.vue @@ -0,0 +1,100 @@ + + + + + diff --git a/uni_modules/uv-grid/package.json b/uni_modules/uv-grid/package.json new file mode 100644 index 0000000..0c93379 --- /dev/null +++ b/uni_modules/uv-grid/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-grid", + "displayName": "uv-grid 宫格布局 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.9", + "description": "uv-grid 宫格组件一般用于同时展示多个同类项目的场景,可以给宫格的项目设置徽标组件(badge),或者图标等,也可以扩展为左右滑动的轮播形式。", + "keywords": [ + "uv-grid", + "uvui", + "uv-ui", + "宫格布局", + "grid" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-grid/readme.md b/uni_modules/uv-grid/readme.md new file mode 100644 index 0000000..cd13cef --- /dev/null +++ b/uni_modules/uv-grid/readme.md @@ -0,0 +1,17 @@ +## Grid 宫格布局 + +> **组件名:uv-grid** + +宫格组件一般用于同时展示多个同类项目的场景,可以给宫格的项目设置徽标组件(badge),或者图标等,也可以扩展为左右滑动的轮播形式。 + +# 查看文档 + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-icon/changelog.md b/uni_modules/uv-icon/changelog.md new file mode 100644 index 0000000..c610827 --- /dev/null +++ b/uni_modules/uv-icon/changelog.md @@ -0,0 +1,31 @@ +## 1.0.13(2023-12-06) +1. 优化 +## 1.0.12(2023-12-06) +1. 阻止事件冒泡处理 +## 1.0.11(2023-10-29) +1. imgMode默认值改成aspectFit +## 1.0.10(2023-08-13) +1. 优化nvue,方便自定义图标 +## 1.0.9(2023-07-28) +1. 修改几个对应错误图标的BUG +## 1.0.8(2023-07-24) +1. 优化 支持base64图片 +## 1.0.7(2023-07-17) +1. 修复 uv-icon 恢复uv-empty相关的图标 +## 1.0.6(2023-07-13) +1. 修复icon设置name属性对应图标错误的BUG +## 1.0.5(2023-07-04) +1. 更新图标,删除一些不常用的图标 +2. 删除base64,修改成ttf文件引入读取图标 +3. 自定义图标文档说明:https://www.uvui.cn/guide/customIcon.html +## 1.0.4(2023-07-03) +1. 修复主题颜色在APP不生效的BUG +## 1.0.3(2023-05-24) +1. 将线上ttf字体包替换成base64,避免加载时或者网络差时候显示白色方块 +## 1.0.2(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.1(2023-05-10) +1. 修复小程序中异常显示 +## 1.0.0(2023-05-04) +新发版 diff --git a/uni_modules/uv-icon/components/uv-icon/icons.js b/uni_modules/uv-icon/components/uv-icon/icons.js new file mode 100644 index 0000000..8469a2d --- /dev/null +++ b/uni_modules/uv-icon/components/uv-icon/icons.js @@ -0,0 +1,160 @@ +export default { + 'uvicon-level': 'e68f', + 'uvicon-checkbox-mark': 'e659', + 'uvicon-folder': 'e694', + 'uvicon-movie': 'e67c', + 'uvicon-star-fill': 'e61e', + 'uvicon-star': 'e618', + 'uvicon-phone-fill': 'e6ac', + 'uvicon-phone': 'e6ba', + 'uvicon-apple-fill': 'e635', + 'uvicon-backspace': 'e64d', + 'uvicon-attach': 'e640', + 'uvicon-empty-data': 'e671', + 'uvicon-empty-address': 'e68a', + 'uvicon-empty-favor': 'e662', + 'uvicon-empty-car': 'e657', + 'uvicon-empty-order': 'e66b', + 'uvicon-empty-list': 'e672', + 'uvicon-empty-search': 'e677', + 'uvicon-empty-permission': 'e67d', + 'uvicon-empty-news': 'e67e', + 'uvicon-empty-history': 'e685', + 'uvicon-empty-coupon': 'e69b', + 'uvicon-empty-page': 'e60e', + 'uvicon-empty-wifi-off': 'e6cc', + 'uvicon-reload': 'e627', + 'uvicon-order': 'e695', + 'uvicon-server-man': 'e601', + 'uvicon-search': 'e632', + 'uvicon-more-dot-fill': 'e66f', + 'uvicon-scan': 'e631', + 'uvicon-map': 'e665', + 'uvicon-map-fill': 'e6a8', + 'uvicon-tags': 'e621', + 'uvicon-tags-fill': 'e613', + 'uvicon-eye': 'e664', + 'uvicon-eye-fill': 'e697', + 'uvicon-eye-off': 'e69c', + 'uvicon-eye-off-outline': 'e688', + 'uvicon-mic': 'e66d', + 'uvicon-mic-off': 'e691', + 'uvicon-calendar': 'e65c', + 'uvicon-trash': 'e623', + 'uvicon-trash-fill': 'e6ce', + 'uvicon-play-left': 'e6bf', + 'uvicon-play-right': 'e6b3', + 'uvicon-minus': 'e614', + 'uvicon-plus': 'e625', + 'uvicon-info-circle': 'e69f', + 'uvicon-info-circle-fill': 'e6a7', + 'uvicon-question-circle': 'e622', + 'uvicon-question-circle-fill': 'e6bc', + 'uvicon-close': 'e65a', + 'uvicon-checkmark': 'e64a', + 'uvicon-checkmark-circle': 'e643', + 'uvicon-checkmark-circle-fill': 'e668', + 'uvicon-setting': 'e602', + 'uvicon-setting-fill': 'e6d0', + 'uvicon-heart': 'e6a2', + 'uvicon-heart-fill': 'e68b', + 'uvicon-camera': 'e642', + 'uvicon-camera-fill': 'e650', + 'uvicon-more-circle': 'e69e', + 'uvicon-more-circle-fill': 'e684', + 'uvicon-chat': 'e656', + 'uvicon-chat-fill': 'e63f', + 'uvicon-bag': 'e647', + 'uvicon-error-circle': 'e66e', + 'uvicon-error-circle-fill': 'e655', + 'uvicon-close-circle': 'e64e', + 'uvicon-close-circle-fill': 'e666', + 'uvicon-share': 'e629', + 'uvicon-share-fill': 'e6bb', + 'uvicon-share-square': 'e6c4', + 'uvicon-shopping-cart': 'e6cb', + 'uvicon-shopping-cart-fill': 'e630', + 'uvicon-bell': 'e651', + 'uvicon-bell-fill': 'e604', + 'uvicon-list': 'e690', + 'uvicon-list-dot': 'e6a9', + 'uvicon-zhifubao-circle-fill': 'e617', + 'uvicon-weixin-circle-fill': 'e6cd', + 'uvicon-weixin-fill': 'e620', + 'uvicon-qq-fill': 'e608', + 'uvicon-qq-circle-fill': 'e6b9', + 'uvicon-moments-circel-fill': 'e6c2', + 'uvicon-moments': 'e6a0', + 'uvicon-car': 'e64f', + 'uvicon-car-fill': 'e648', + 'uvicon-warning-fill': 'e6c7', + 'uvicon-warning': 'e6c1', + 'uvicon-clock-fill': 'e64b', + 'uvicon-clock': 'e66c', + 'uvicon-edit-pen': 'e65d', + 'uvicon-edit-pen-fill': 'e679', + 'uvicon-email': 'e673', + 'uvicon-email-fill': 'e683', + 'uvicon-minus-circle': 'e6a5', + 'uvicon-plus-circle': 'e603', + 'uvicon-plus-circle-fill': 'e611', + 'uvicon-file-text': 'e687', + 'uvicon-file-text-fill': 'e67f', + 'uvicon-pushpin': 'e6d1', + 'uvicon-pushpin-fill': 'e6b6', + 'uvicon-grid': 'e68c', + 'uvicon-grid-fill': 'e698', + 'uvicon-play-circle': 'e6af', + 'uvicon-play-circle-fill': 'e62a', + 'uvicon-pause-circle-fill': 'e60c', + 'uvicon-pause': 'e61c', + 'uvicon-pause-circle': 'e696', + 'uvicon-gift-fill': 'e6b0', + 'uvicon-gift': 'e680', + 'uvicon-kefu-ermai': 'e660', + 'uvicon-server-fill': 'e610', + 'uvicon-coupon-fill': 'e64c', + 'uvicon-coupon': 'e65f', + 'uvicon-integral': 'e693', + 'uvicon-integral-fill': 'e6b1', + 'uvicon-home-fill': 'e68e', + 'uvicon-home': 'e67b', + 'uvicon-account': 'e63a', + 'uvicon-account-fill': 'e653', + 'uvicon-thumb-down-fill': 'e628', + 'uvicon-thumb-down': 'e60a', + 'uvicon-thumb-up': 'e612', + 'uvicon-thumb-up-fill': 'e62c', + 'uvicon-lock-fill': 'e6a6', + 'uvicon-lock-open': 'e68d', + 'uvicon-lock-opened-fill': 'e6a1', + 'uvicon-lock': 'e69d', + 'uvicon-red-packet': 'e6c3', + 'uvicon-photo-fill': 'e6b4', + 'uvicon-photo': 'e60d', + 'uvicon-volume-off-fill': 'e6c8', + 'uvicon-volume-off': 'e6bd', + 'uvicon-volume-fill': 'e624', + 'uvicon-volume': 'e605', + 'uvicon-download': 'e670', + 'uvicon-arrow-up-fill': 'e636', + 'uvicon-arrow-down-fill': 'e638', + 'uvicon-play-left-fill': 'e6ae', + 'uvicon-play-right-fill': 'e6ad', + 'uvicon-arrow-downward': 'e634', + 'uvicon-arrow-leftward': 'e63b', + 'uvicon-arrow-rightward': 'e644', + 'uvicon-arrow-upward': 'e641', + 'uvicon-arrow-down': 'e63e', + 'uvicon-arrow-right': 'e63c', + 'uvicon-arrow-left': 'e646', + 'uvicon-arrow-up': 'e633', + 'uvicon-skip-back-left': 'e6c5', + 'uvicon-skip-forward-right': 'e61f', + 'uvicon-arrow-left-double': 'e637', + 'uvicon-man': 'e675', + 'uvicon-woman': 'e626', + 'uvicon-en': 'e6b8', + 'uvicon-twitte': 'e607', + 'uvicon-twitter-circle-fill': 'e6cf' +} \ No newline at end of file diff --git a/uni_modules/uv-icon/components/uv-icon/props.js b/uni_modules/uv-icon/components/uv-icon/props.js new file mode 100644 index 0000000..7668cf9 --- /dev/null +++ b/uni_modules/uv-icon/components/uv-icon/props.js @@ -0,0 +1,90 @@ +export default { + props: { + // 图标类名 + name: { + type: String, + default: '' + }, + // 图标颜色,可接受主题色 + color: { + type: String, + default: '#606266' + }, + // 字体大小,单位px + size: { + type: [String, Number], + default: '16px' + }, + // 是否显示粗体 + bold: { + type: Boolean, + default: false + }, + // 点击图标的时候传递事件出去的index(用于区分点击了哪一个) + index: { + type: [String, Number], + default: null + }, + // 触摸图标时的类名 + hoverClass: { + type: String, + default: '' + }, + // 自定义扩展前缀,方便用户扩展自己的图标库 + customPrefix: { + type: String, + default: 'uvicon' + }, + // 图标右边或者下面的文字 + label: { + type: [String, Number], + default: '' + }, + // label的位置,只能右边或者下边 + labelPos: { + type: String, + default: 'right' + }, + // label的大小 + labelSize: { + type: [String, Number], + default: '15px' + }, + // label的颜色 + labelColor: { + type: String, + default: '#606266' + }, + // label与图标的距离 + space: { + type: [String, Number], + default: '3px' + }, + // 图片的mode + imgMode: { + type: String, + default: 'aspectFit' + }, + // 用于显示图片小图标时,图片的宽度 + width: { + type: [String, Number], + default: '' + }, + // 用于显示图片小图标时,图片的高度 + height: { + type: [String, Number], + default: '' + }, + // 用于解决某些情况下,让图标垂直居中的用途 + top: { + type: [String, Number], + default: 0 + }, + // 是否阻止事件传播 + stop: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.icon + } +} \ No newline at end of file diff --git a/uni_modules/uv-icon/components/uv-icon/uv-icon.vue b/uni_modules/uv-icon/components/uv-icon/uv-icon.vue new file mode 100644 index 0000000..d61c9e5 --- /dev/null +++ b/uni_modules/uv-icon/components/uv-icon/uv-icon.vue @@ -0,0 +1,226 @@ + + + + + \ No newline at end of file diff --git a/uni_modules/uv-icon/components/uv-icon/uvicons.ttf b/uni_modules/uv-icon/components/uv-icon/uvicons.ttf new file mode 100644 index 0000000..9aedef8 Binary files /dev/null and b/uni_modules/uv-icon/components/uv-icon/uvicons.ttf differ diff --git a/uni_modules/uv-icon/package.json b/uni_modules/uv-icon/package.json new file mode 100644 index 0000000..0a838d5 --- /dev/null +++ b/uni_modules/uv-icon/package.json @@ -0,0 +1,83 @@ +{ + "id": "uv-icon", + "displayName": "uv-icon 图标 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.13", + "description": "基于字体的图标集,包含了大多数常见场景的图标,支持自定义,支持自定义图片图标等。可自定义颜色、大小。", + "keywords": [ + "uv-ui,uvui,uv-icon,icon,图标,字体图标" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-icon/readme.md b/uni_modules/uv-icon/readme.md new file mode 100644 index 0000000..d526e1a --- /dev/null +++ b/uni_modules/uv-icon/readme.md @@ -0,0 +1,15 @@ +## uv-icon 图标库 + +> **组件名:uv-icon** + +基于字体的图标集,包含了大多数常见场景的图标,支持自定义,支持自定义图片图标等。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 diff --git a/uni_modules/uv-image/changelog.md b/uni_modules/uv-image/changelog.md new file mode 100644 index 0000000..e5a633d --- /dev/null +++ b/uni_modules/uv-image/changelog.md @@ -0,0 +1,36 @@ +## 1.0.16(2023-12-21) +1. 修复设置show-menu-by-longpress不生效的BUG +## 1.0.15(2023-12-06) +1. 优化 +## 1.0.14(2023-12-06) +1. 阻止事件冒泡问题 +## 1.0.13(2023-11-15) +1. 修复webp之前未使用的BUG +## 1.0.12(2023-10-11) +1. 修复懒加载报错:https://gitee.com/climblee/uv-ui/issues/I869JS +## 1.0.11(2023-08-31) +1. 修复设置widthFix时出现显示不全的BUG +2. 修复抖音等平台在width和height属性改变时出现不显示的BUG +## 1.0.10(2023-08-29) +1. 修复异步修改宽高不生效的问题,问题来源:https://gitee.com/climblee/uv-ui/issues/I7WUQ3 +## 1.0.9(2023-08-21) +1. 修复设置宽高为百分比不生效的BUG +## 1.0.8(2023-07-24) +1. 优化 nvue模式下增加cellChild参数,是否在list中cell节点下,nvue中cell下建议设置成true +## 1.0.7(2023-07-02) +修复VUE3模式下可能不显示的BUG +## 1.0.6(2023-07-02) +优化修改 +## 1.0.5(2023-06-28) +修复duration属性不生效的BUG +## 1.0.4(2023-05-27) +1. 修复可能报错的问题 +## 1.0.3(2023-05-24) +1. 去掉template中存在的this.导致头条小程序编译警告 +## 1.0.2(2023-05-23) +1. 优化 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-image 图片 diff --git a/uni_modules/uv-image/components/uv-image/props.js b/uni_modules/uv-image/components/uv-image/props.js new file mode 100644 index 0000000..6ef04a5 --- /dev/null +++ b/uni_modules/uv-image/components/uv-image/props.js @@ -0,0 +1,95 @@ +export default { + props: { + // 图片地址 + src: { + type: String, + default: '' + }, + // 裁剪模式 + mode: { + type: String, + default: 'aspectFill' + }, + // 宽度,单位任意 + width: { + type: [String, Number], + default: '300' + }, + // 高度,单位任意 + height: { + type: [String, Number], + default: '225' + }, + // 图片形状,circle-圆形,square-方形 + shape: { + type: String, + default: 'square' + }, + // 圆角,单位任意 + radius: { + type: [String, Number], + default: 0 + }, + // 是否懒加载,微信小程序、App、百度小程序、字节跳动小程序 + lazyLoad: { + type: Boolean, + default: true + }, + // 是否开启observer懒加载,nvue不生效 + observeLazyLoad: { + type: Boolean, + default: false + }, + // 开启长按图片显示识别微信小程序码菜单 + showMenuByLongpress: { + type: Boolean, + default: true + }, + // 加载中的图标,或者小图片 + loadingIcon: { + type: String, + default: 'photo' + }, + // 加载失败的图标,或者小图片 + errorIcon: { + type: String, + default: 'error-circle' + }, + // 是否显示加载中的图标或者自定义的slot + showLoading: { + type: Boolean, + default: true + }, + // 是否显示加载错误的图标或者自定义的slot + showError: { + type: Boolean, + default: true + }, + // 是否需要淡入效果 + fade: { + type: Boolean, + default: true + }, + // 只支持网络资源,只对微信小程序有效 + webp: { + type: Boolean, + default: false + }, + // 过渡时间,单位ms + duration: { + type: [String, Number], + default: 500 + }, + // 背景颜色,用于深色页面加载图片时,为了和背景色融合 + bgColor: { + type: String, + default: '#f3f4f6' + }, + // nvue模式下 是否直接显示,在uv-list等cell下面使用就需要设置 + cellChild: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.image + } +} \ No newline at end of file diff --git a/uni_modules/uv-image/components/uv-image/uv-image.vue b/uni_modules/uv-image/components/uv-image/uv-image.vue new file mode 100644 index 0000000..2ab4a78 --- /dev/null +++ b/uni_modules/uv-image/components/uv-image/uv-image.vue @@ -0,0 +1,287 @@ + + + + + diff --git a/uni_modules/uv-image/package.json b/uni_modules/uv-image/package.json new file mode 100644 index 0000000..796089e --- /dev/null +++ b/uni_modules/uv-image/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-image", + "displayName": "uv-image 图片 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.16", + "description": "uv-image 此组件为uni-app的image组件的加强版,在继承了原有功能外,增加observer懒加载功能,还支持淡入动画、加载中、加载失败提示、圆角值和形状等。", + "keywords": [ + "uv-image", + "uvui", + "uv-ui", + "image", + "图片" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-transition", + "uv-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-image/readme.md b/uni_modules/uv-image/readme.md new file mode 100644 index 0000000..0ecc120 --- /dev/null +++ b/uni_modules/uv-image/readme.md @@ -0,0 +1,15 @@ +## Image 图片 + +> **组件名:uv-image** + +此组件为`uni-app`的`image`组件的加强版,在继承了原有功能外,增加`observer`懒加载功能,还支持淡入动画、加载中、加载失败提示、圆角值和形状等。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 diff --git a/uni_modules/uv-index-list/changelog.md b/uni_modules/uv-index-list/changelog.md new file mode 100644 index 0000000..deda715 --- /dev/null +++ b/uni_modules/uv-index-list/changelog.md @@ -0,0 +1,18 @@ +## 1.0.7(2023-11-07) +1. 修复sticky属性不生效的BUG +## 1.0.6(2023-09-01) +1. 修复设置customNavHeight导致定位不准确的BUG +## 1.0.5(2023-08-23) +1. 修复ios端快速滑动+点击右侧导航会出现白屏的BUG +## 1.0.4(2023-07-25) +1. 修复全局设置成rpx存在的高度BUG +2. 修复其他BUG +## 1.0.3(2023-07-03) +去除插槽判断,避免某些平台不显示的BUG +## 1.0.2(2023-05-27) +1. select事件修复 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-index-list 索引列表 diff --git a/uni_modules/uv-index-list/components/uv-index-anchor/props.js b/uni_modules/uv-index-list/components/uv-index-anchor/props.js new file mode 100644 index 0000000..9ec949e --- /dev/null +++ b/uni_modules/uv-index-list/components/uv-index-anchor/props.js @@ -0,0 +1,30 @@ +export default { + props: { + // 列表锚点文本内容 + text: { + type: [String, Number], + default: '' + }, + // 列表锚点文字颜色 + color: { + type: String, + default: '#606266' + }, + // 列表锚点文字大小,单位默认px + size: { + type: [String, Number], + default: 14 + }, + // 列表锚点背景颜色 + bgColor: { + type: String, + default: '#dedede' + }, + // 列表锚点高度,单位默认px + height: { + type: [String, Number], + default: 32 + }, + ...uni.$uv?.props?.indexAnchor + } +} \ No newline at end of file diff --git a/uni_modules/uv-index-list/components/uv-index-anchor/uv-index-anchor.vue b/uni_modules/uv-index-list/components/uv-index-anchor/uv-index-anchor.vue new file mode 100644 index 0000000..e566aa7 --- /dev/null +++ b/uni_modules/uv-index-list/components/uv-index-anchor/uv-index-anchor.vue @@ -0,0 +1,98 @@ + + + + + diff --git a/uni_modules/uv-index-list/components/uv-index-item/uv-index-item.vue b/uni_modules/uv-index-list/components/uv-index-item/uv-index-item.vue new file mode 100644 index 0000000..f6e8901 --- /dev/null +++ b/uni_modules/uv-index-list/components/uv-index-item/uv-index-item.vue @@ -0,0 +1,87 @@ + + + + + diff --git a/uni_modules/uv-index-list/components/uv-index-list/props.js b/uni_modules/uv-index-list/components/uv-index-list/props.js new file mode 100644 index 0000000..0cf6356 --- /dev/null +++ b/uni_modules/uv-index-list/components/uv-index-list/props.js @@ -0,0 +1,30 @@ +export default { + props: { + // 右边锚点非激活的颜色 + inactiveColor: { + type: String, + default: '#606266' + }, + // 右边锚点激活的颜色 + activeColor: { + type: String, + default: '#5677fc' + }, + // 索引字符列表,数组形式 + indexList: { + type: Array, + default: () => [] + }, + // 是否开启锚点自动吸顶 + sticky: { + type: Boolean, + default: true + }, + // 自定义导航栏的高度 + customNavHeight: { + type: [String, Number], + default: 0 + }, + ...uni.$uv?.props?.indexList + } +} \ No newline at end of file diff --git a/uni_modules/uv-index-list/components/uv-index-list/uv-index-list.vue b/uni_modules/uv-index-list/components/uv-index-list/uv-index-list.vue new file mode 100644 index 0000000..e610323 --- /dev/null +++ b/uni_modules/uv-index-list/components/uv-index-list/uv-index-list.vue @@ -0,0 +1,461 @@ + + + + + diff --git a/uni_modules/uv-index-list/package.json b/uni_modules/uv-index-list/package.json new file mode 100644 index 0000000..133736b --- /dev/null +++ b/uni_modules/uv-index-list/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-index-list", + "displayName": "uv-index-list 索引列表 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.7", + "description": "该组件用于展示索引列表,右侧带索引的列表,方便快速定位到具体内容,通常用于城市/机场选择等场景。类似于微信通讯录页面", + "keywords": [ + "uv-index-list", + "uvui", + "uv-ui", + "index-list", + "索引列表" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-transition" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-index-list/readme.md b/uni_modules/uv-index-list/readme.md new file mode 100644 index 0000000..605741c --- /dev/null +++ b/uni_modules/uv-index-list/readme.md @@ -0,0 +1,19 @@ +## IndexList 索引列表 + +> **组件名:uv-index-list** + +用于展示索引列表,右侧带索引的列表,方便快速定位到具体内容,通常用于城市/机场选择等场景,类似于微信通讯录页面。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-input/changelog.md b/uni_modules/uv-input/changelog.md new file mode 100644 index 0000000..2b354d0 --- /dev/null +++ b/uni_modules/uv-input/changelog.md @@ -0,0 +1,29 @@ +## 1.0.13(2023-12-06) +1. 优化 +## 1.0.12(2023-12-06) +1. 阻止事件冒泡问题 +## 1.0.11(2023-11-10) +1. 调整清除按钮样式的marginLeft,避免微信上多数情况触发不了的BUG +## 1.0.10(2023-10-07) +1. 修复搜狗输入法下存在不可清空的情况 +## 1.0.9(2023-09-14) +1. 修复H5等情况设置禁用或可读情况下,点击事件无效的问题 +## 1.0.8(2023-08-22) +1. 修复无法@keyboardheightchange无法获取键盘高度的BUG +## 1.0.7(2023-08-18) +1. 修复ios端不能输入的BUG +## 1.0.6(2023-08-05) +1. 修复在vue2模式下,v-model设置为0时不生效的BUG +## 1.0.5(2023-07-18) +1. 修复在微信小程序端清除内容存在不能清除的BUG +## 1.0.4(2023-07-13) +1. 修复value/v-model更改不生效的BUG +## 1.0.3(2023-07-03) +去除插槽判断,避免某些平台不显示的BUG +## 1.0.2(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.1(2023-05-12) +1. 修复vue3双向绑定的BUG +## 1.0.0(2023-05-10) +uv-input 输入框 diff --git a/uni_modules/uv-input/components/uv-input/props.js b/uni_modules/uv-input/components/uv-input/props.js new file mode 100644 index 0000000..e969493 --- /dev/null +++ b/uni_modules/uv-input/components/uv-input/props.js @@ -0,0 +1,175 @@ +export default { + props: { + value: { + type: [String, Number], + default: '' + }, + modelValue: { + type: [String, Number], + default: '' + }, + // 输入框类型 + // number-数字输入键盘,app-vue下可以输入浮点数,app-nvue和小程序平台下只能输入整数 + // idcard-身份证输入键盘,微信、支付宝、百度、QQ小程序 + // digit-带小数点的数字键盘,App的nvue页面、微信、支付宝、百度、头条、QQ小程序 + // text-文本输入键盘 + type: { + type: String, + default: 'text' + }, + // 是否禁用输入框 + disabled: { + type: Boolean, + default: false + }, + // 禁用状态时的背景色 + disabledColor: { + type: String, + default: '#f5f7fa' + }, + // 是否显示清除控件 + clearable: { + type: Boolean, + default: false + }, + // 是否密码类型 + password: { + type: Boolean, + default: false + }, + // 最大输入长度,设置为 -1 的时候不限制最大长度 + maxlength: { + type: [String, Number], + default: -1 + }, + // 输入框为空时的占位符 + placeholder: { + type: String, + default: null + }, + // 指定placeholder的样式类,注意页面或组件的style中写了scoped时,需要在类名前写/deep/ + placeholderClass: { + type: String, + default: 'input-placeholder' + }, + // 指定placeholder的样式 + placeholderStyle: { + type: [String, Object], + default: 'color: #c0c4cc' + }, + // 设置右下角按钮的文字,有效值:send|search|next|go|done,兼容性详见uni-app文档 + // https://uniapp.dcloud.io/component/input + // https://uniapp.dcloud.io/component/textarea + confirmType: { + type: String, + default: 'done' + }, + // 点击键盘右下角按钮时是否保持键盘不收起,H5无效 + confirmHold: { + type: Boolean, + default: false + }, + // focus时,点击页面的时候不收起键盘,微信小程序有效 + holdKeyboard: { + type: Boolean, + default: false + }, + // 自动获取焦点 + // 在 H5 平台能否聚焦以及软键盘是否跟随弹出,取决于当前浏览器本身的实现。nvue 页面不支持,需使用组件的 focus()、blur() 方法控制焦点 + focus: { + type: Boolean, + default: false + }, + // 键盘收起时,是否自动失去焦点,目前仅App3.0.0+有效 + autoBlur: { + type: Boolean, + default: false + }, + // 指定focus时光标的位置 + cursor: { + type: [String, Number], + default: -1 + }, + // 输入框聚焦时底部与键盘的距离 + cursorSpacing: { + type: [String, Number], + default: 30 + }, + // 光标起始位置,自动聚集时有效,需与selection-end搭配使用 + selectionStart: { + type: [String, Number], + default: -1 + }, + // 光标结束位置,自动聚集时有效,需与selection-start搭配使用 + selectionEnd: { + type: [String, Number], + default: -1 + }, + // 键盘弹起时,是否自动上推页面 + adjustPosition: { + type: Boolean, + default: true + }, + // 输入框内容对齐方式,可选值为:left|center|right + inputAlign: { + type: String, + default: 'left' + }, + // 输入框字体的大小 + fontSize: { + type: [String, Number], + default: '14px' + }, + // 输入框字体颜色 + color: { + type: String, + default: '#303133' + }, + // 输入框前置图标 + prefixIcon: { + type: String, + default: '' + }, + // 前置图标样式,对象或字符串 + prefixIconStyle: { + type: [String, Object], + default: '' + }, + // 输入框后置图标 + suffixIcon: { + type: String, + default: '' + }, + // 后置图标样式,对象或字符串 + suffixIconStyle: { + type: [String, Object], + default: '' + }, + // 边框类型,surround-四周边框,bottom-底部边框,none-无边框 + border: { + type: String, + default: 'surround' + }, + // 是否只读,与disabled不同之处在于disabled会置灰组件,而readonly则不会 + readonly: { + type: Boolean, + default: false + }, + // 输入框形状,circle-圆形,square-方形 + shape: { + type: String, + default: 'square' + }, + // 用于处理或者过滤输入框内容的方法 + formatter: { + type: [Function, null], + default: null + }, + // 是否忽略组件内对文本合成系统事件的处理 + ignoreCompositionEvent: { + type: Boolean, + default: true + }, + ...uni.$uv?.props?.input + } +} \ No newline at end of file diff --git a/uni_modules/uv-input/components/uv-input/uv-input.vue b/uni_modules/uv-input/components/uv-input/uv-input.vue new file mode 100644 index 0000000..20c1801 --- /dev/null +++ b/uni_modules/uv-input/components/uv-input/uv-input.vue @@ -0,0 +1,348 @@ + + + + + \ No newline at end of file diff --git a/uni_modules/uv-input/package.json b/uni_modules/uv-input/package.json new file mode 100644 index 0000000..6981fa9 --- /dev/null +++ b/uni_modules/uv-input/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-input", + "displayName": "uv-input 输入框 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.13", + "description": "uv-input 该组件为一个输入框,默认没有边框和样式,是专门为配合表单组件uv-form而设计的,利用它可以快速实现表单验证,输入内容,下拉选择等功能。", + "keywords": [ + "uv-input", + "uvui", + "uv-ui", + "input", + "输入框" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-input/readme.md b/uni_modules/uv-input/readme.md new file mode 100644 index 0000000..00f47e4 --- /dev/null +++ b/uni_modules/uv-input/readme.md @@ -0,0 +1,19 @@ +## Input 输入框 + +> **组件名:uv-input** + +此组件为一个输入框,默认没有边框和样式,是专门为配合表单组件uv-form而设计的,利用它可以快速实现表单验证,输入内容,下拉选择等功能。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-keyboard/changelog.md b/uni_modules/uv-keyboard/changelog.md new file mode 100644 index 0000000..1d1be01 --- /dev/null +++ b/uni_modules/uv-keyboard/changelog.md @@ -0,0 +1,17 @@ +## 1.0.5(2023-10-12) +1. 增加disKeys参数,mode = "car"下,被禁用的键,如:['I','O'] +2. 增加customabc参数,mode = "car"下,是否启用自定义中英文切换内容模式,为了兼容支付宝等小程序不兼容嵌套插槽,导致同时显示自定义内容和原始内容 +3. 增加ref方法changeCarMode,mode = "car"下, 调用此方法可以切换中英文模式 +4. 增加@changeCarInputMode,mode = "car"下,调用此方法可以进行切换中英文 +5. 增加插槽abc,mode = "car"下,自定义中英文切换内容,具体参考[车牌键盘自定义中英文切换及禁用键等设置](https://www.uvui.cn/components/keyboard.html#车牌键盘自定义中英文切换及禁用键等设置) +## 1.0.4(2023-09-04) +1. 优化,修改文件名称 +## 1.0.3(2023-09-04) +1. 修复键盘change回调事件产生冲突的BUG +## 1.0.2(2023-07-02) +uv-keyboard 由于弹出层uv-popup的修改,打开和关闭方法更改,详情参考文档:https://www.uvui.cn/components/keyboard.html +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-keyboard 键盘 diff --git a/uni_modules/uv-keyboard/components/uv-keyboard-car/props.js b/uni_modules/uv-keyboard/components/uv-keyboard-car/props.js new file mode 100644 index 0000000..3dd93cc --- /dev/null +++ b/uni_modules/uv-keyboard/components/uv-keyboard-car/props.js @@ -0,0 +1,24 @@ +export default { + props: { + // 是否打乱键盘按键的顺序 + random: { + type: Boolean, + default: false + }, + // 输入一个中文后,是否自动切换到英文 + autoChange: { + type: Boolean, + default: false + }, + // 被禁用的键 + disKeys: { + type: Array, + default: ()=>[] + }, + // 是否自定义abc + customabc: { + type: Boolean, + default: false + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-keyboard/components/uv-keyboard-car/uv-keyboard-car.vue b/uni_modules/uv-keyboard/components/uv-keyboard-car/uv-keyboard-car.vue new file mode 100644 index 0000000..e99e910 --- /dev/null +++ b/uni_modules/uv-keyboard/components/uv-keyboard-car/uv-keyboard-car.vue @@ -0,0 +1,347 @@ + + + + + diff --git a/uni_modules/uv-keyboard/components/uv-keyboard-number/props.js b/uni_modules/uv-keyboard/components/uv-keyboard-number/props.js new file mode 100644 index 0000000..60d63d4 --- /dev/null +++ b/uni_modules/uv-keyboard/components/uv-keyboard-number/props.js @@ -0,0 +1,19 @@ +export default { + props: { + // 键盘的类型,number-数字键盘,card-身份证键盘 + mode: { + type: String, + default: 'number' + }, + // 是否显示键盘的"."符号 + dotDisabled: { + type: Boolean, + default: false + }, + // 是否打乱键盘按键的顺序 + random: { + type: Boolean, + default: false + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-keyboard/components/uv-keyboard-number/uv-keyboard-number.vue b/uni_modules/uv-keyboard/components/uv-keyboard-number/uv-keyboard-number.vue new file mode 100644 index 0000000..b7c0b8b --- /dev/null +++ b/uni_modules/uv-keyboard/components/uv-keyboard-number/uv-keyboard-number.vue @@ -0,0 +1,201 @@ + + + + + diff --git a/uni_modules/uv-keyboard/components/uv-keyboard/props.js b/uni_modules/uv-keyboard/components/uv-keyboard/props.js new file mode 100644 index 0000000..05dd76a --- /dev/null +++ b/uni_modules/uv-keyboard/components/uv-keyboard/props.js @@ -0,0 +1,95 @@ +export default { + props: { + // 键盘的类型,number-数字键盘,card-身份证键盘,car-车牌号键盘 + mode: { + type: String, + default: 'number' + }, + // 是否显示键盘的"."符号 + dotDisabled: { + type: Boolean, + default: false + }, + // 是否显示顶部工具条 + tooltip: { + type: Boolean, + default: true + }, + // 是否显示工具条中间的提示 + showTips: { + type: Boolean, + default: true + }, + // 工具条中间的提示文字 + tips: { + type: String, + default: '' + }, + // 是否显示工具条左边的"取消"按钮 + showCancel: { + type: Boolean, + default: true + }, + // 是否显示工具条右边的"完成"按钮 + showConfirm: { + type: Boolean, + default: true + }, + // 是否打乱键盘按键的顺序 + random: { + type: Boolean, + default: false + }, + // 是否开启底部安全区适配,开启的话,会在iPhoneX机型底部添加一定的内边距 + safeAreaInsetBottom: { + type: Boolean, + default: true + }, + // 是否允许通过点击遮罩关闭键盘 + closeOnClickOverlay: { + type: Boolean, + default: true + }, + // 是否允许点击确认按钮关闭组件 + closeOnClickConfirm: { + type: Boolean, + default: true + }, + // 是否显示遮罩,某些时候数字键盘时,用户希望看到自己的数值,所以可能不想要遮罩 + overlay: { + type: Boolean, + default: true + }, + // z-index值 + zIndex: { + type: [String, Number], + default: 10075 + }, + // 取消按钮的文字 + cancelText: { + type: String, + default: '取消' + }, + // 确认按钮的文字 + confirmText: { + type: String, + default: '确定' + }, + // 输入一个中文后,是否自动切换到英文 + autoChange: { + type: Boolean, + default: false + }, + // 被禁用的键 + disKeys: { + type: Array, + default: ()=>[] + }, + // 是否自定义abc + customabc: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.keyboard + } +} \ No newline at end of file diff --git a/uni_modules/uv-keyboard/components/uv-keyboard/uv-keyboard.vue b/uni_modules/uv-keyboard/components/uv-keyboard/uv-keyboard.vue new file mode 100644 index 0000000..60b15bf --- /dev/null +++ b/uni_modules/uv-keyboard/components/uv-keyboard/uv-keyboard.vue @@ -0,0 +1,180 @@ + + + + + diff --git a/uni_modules/uv-keyboard/package.json b/uni_modules/uv-keyboard/package.json new file mode 100644 index 0000000..69844c6 --- /dev/null +++ b/uni_modules/uv-keyboard/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-keyboard", + "displayName": "uv-keyboard 键盘 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.5", + "description": "uv-keyboard 该组件为自定义的键盘面板,内含了数字键盘,车牌号键,身份证号键盘3种模式,都有可以打乱按键顺序的选项。", + "keywords": [ + "uv-keyboard", + "uvui", + "uv-ui", + "keyboard", + "键盘" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-popup", + "uv-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-keyboard/readme.md b/uni_modules/uv-keyboard/readme.md new file mode 100644 index 0000000..9cbef6c --- /dev/null +++ b/uni_modules/uv-keyboard/readme.md @@ -0,0 +1,19 @@ +## Keyboard 键盘 + +> **组件名:uv-keyboard** + +该组件为自定义的键盘面板,内含了数字键盘,车牌号键,身份证号键盘3种模式,都有可以打乱按键顺序的选项。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-line-progress/changelog.md b/uni_modules/uv-line-progress/changelog.md new file mode 100644 index 0000000..975acce --- /dev/null +++ b/uni_modules/uv-line-progress/changelog.md @@ -0,0 +1,7 @@ +## 1.0.2(2023-06-20) +1. 适配height参数携带单位 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-line-progress 线形进度条 diff --git a/uni_modules/uv-line-progress/components/uv-line-progress/props.js b/uni_modules/uv-line-progress/components/uv-line-progress/props.js new file mode 100644 index 0000000..23138c7 --- /dev/null +++ b/uni_modules/uv-line-progress/components/uv-line-progress/props.js @@ -0,0 +1,29 @@ +export default { + props: { + // 激活部分的颜色 + activeColor: { + type: String, + default: '#19be6b' + }, + inactiveColor: { + type: String, + default: '#ececec' + }, + // 进度百分比,数值 + percentage: { + type: [String, Number], + default: 0 + }, + // 是否在进度条内部显示百分比的值 + showText: { + type: Boolean, + default: true + }, + // 进度条的高度,单位px + height: { + type: [String, Number], + default: 12 + }, + ...uni.$uv?.props?.lineProgress + } +} \ No newline at end of file diff --git a/uni_modules/uv-line-progress/components/uv-line-progress/uv-line-progress.vue b/uni_modules/uv-line-progress/components/uv-line-progress/uv-line-progress.vue new file mode 100644 index 0000000..229c2aa --- /dev/null +++ b/uni_modules/uv-line-progress/components/uv-line-progress/uv-line-progress.vue @@ -0,0 +1,146 @@ + + + + + diff --git a/uni_modules/uv-line-progress/package.json b/uni_modules/uv-line-progress/package.json new file mode 100644 index 0000000..01e550e --- /dev/null +++ b/uni_modules/uv-line-progress/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-line-progress", + "displayName": "uv-line-progress 线形进度条 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.2", + "description": "uv-line-progress 该组件展示操作或任务的当前进度,比如上传文件,是一个线形的进度条。", + "keywords": [ + "uv-line-progress", + "uvui", + "uv-ui", + "progress", + "进度条" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-line-progress/readme.md b/uni_modules/uv-line-progress/readme.md new file mode 100644 index 0000000..98e5d49 --- /dev/null +++ b/uni_modules/uv-line-progress/readme.md @@ -0,0 +1,11 @@ +## LineProgress 线形进度条 + +> **组件名:uv-line-progress** + +展示操作或任务的当前进度,比如上传文件,是一个线形的进度条。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-line/changelog.md b/uni_modules/uv-line/changelog.md new file mode 100644 index 0000000..5eb7ba8 --- /dev/null +++ b/uni_modules/uv-line/changelog.md @@ -0,0 +1,5 @@ +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +1. 新增线条组件 diff --git a/uni_modules/uv-line/components/uv-line/props.js b/uni_modules/uv-line/components/uv-line/props.js new file mode 100644 index 0000000..75b1007 --- /dev/null +++ b/uni_modules/uv-line/components/uv-line/props.js @@ -0,0 +1,34 @@ +export default { + props: { + color: { + type: String, + default: '#d6d7d9' + }, + // 长度,竖向时表现为高度,横向时表现为长度,可以为百分比,带px单位的值等 + length: { + type: [String, Number], + default: '100%' + }, + // 线条方向,col-竖向,row-横向 + direction: { + type: String, + default: 'row' + }, + // 是否显示细边框 + hairline: { + type: Boolean, + default: true + }, + // 线条与上下左右元素的间距,字符串形式,如"30px"、"20px 30px" + margin: { + type: [String, Number], + default: 0 + }, + // 是否虚线,true-虚线,false-实线 + dashed: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.line + } +} \ No newline at end of file diff --git a/uni_modules/uv-line/components/uv-line/uv-line.vue b/uni_modules/uv-line/components/uv-line/uv-line.vue new file mode 100644 index 0000000..866c507 --- /dev/null +++ b/uni_modules/uv-line/components/uv-line/uv-line.vue @@ -0,0 +1,60 @@ + + + + + diff --git a/uni_modules/uv-line/package.json b/uni_modules/uv-line/package.json new file mode 100644 index 0000000..036446a --- /dev/null +++ b/uni_modules/uv-line/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-line", + "displayName": "uv-line 线条 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.1", + "description": "uv-line 此组件一般用于显示一根线条,用于分隔内容块,有横向和竖向两种模式,且能设置0.5px线条,使用也很简单。", + "keywords": [ + "uv-line", + "uvui", + "uv-ui", + "line", + "线条" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-line/readme.md b/uni_modules/uv-line/readme.md new file mode 100644 index 0000000..e47533c --- /dev/null +++ b/uni_modules/uv-line/readme.md @@ -0,0 +1,11 @@ +## Line 线条 + +> **组件名:uv-line** + +此组件一般用于显示一根线条,用于分隔内容块,有横向和竖向两种模式,且能设置0.5px线条,使用也很简单。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-link/changelog.md b/uni_modules/uv-link/changelog.md new file mode 100644 index 0000000..ce52f84 --- /dev/null +++ b/uni_modules/uv-link/changelog.md @@ -0,0 +1,7 @@ +## 1.0.2(2023-08-13) +1. 修复报错的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-link 超链接组件 diff --git a/uni_modules/uv-link/components/uv-link/props.js b/uni_modules/uv-link/components/uv-link/props.js new file mode 100644 index 0000000..b3f56a1 --- /dev/null +++ b/uni_modules/uv-link/components/uv-link/props.js @@ -0,0 +1,40 @@ +export default { + props: { + // 文字颜色 + color: { + type: String, + default: '' + }, + // 字体大小,单位px + fontSize: { + type: [String, Number], + default: 14 + }, + // 是否显示下划线 + underLine: { + type: Boolean, + default: false + }, + // 要跳转的链接 + href: { + type: String, + default: '' + }, + // 小程序中复制到粘贴板的提示语 + mpTips: { + type: String, + default: '链接已复制,请在浏览器打开' + }, + // 下划线颜色 + lineColor: { + type: String, + default: '' + }, + // 超链接的问题,不使用slot形式传入,是因为nvue下无法修改颜色 + text: { + type: String, + default: '' + }, + ...uni.$uv?.props?.link + } +} \ No newline at end of file diff --git a/uni_modules/uv-link/components/uv-link/uv-link.vue b/uni_modules/uv-link/components/uv-link/uv-link.vue new file mode 100644 index 0000000..4c9258e --- /dev/null +++ b/uni_modules/uv-link/components/uv-link/uv-link.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/uni_modules/uv-link/package.json b/uni_modules/uv-link/package.json new file mode 100644 index 0000000..1b115f4 --- /dev/null +++ b/uni_modules/uv-link/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-link", + "displayName": "uv-link 超链接 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.2", + "description": "uv-link 该组件为超链接组件", + "keywords": [ + "uv-link", + "uvui", + "uv-ui", + "link", + "超链接" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-link/readme.md b/uni_modules/uv-link/readme.md new file mode 100644 index 0000000..6e8ce92 --- /dev/null +++ b/uni_modules/uv-link/readme.md @@ -0,0 +1,11 @@ +## Link 超链接 + +> **组件名:uv-link** + +该组件为超链接组件,在不同平台有不同表现形式。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-list/changelog.md b/uni_modules/uv-list/changelog.md new file mode 100644 index 0000000..6c130f0 --- /dev/null +++ b/uni_modules/uv-list/changelog.md @@ -0,0 +1,25 @@ +## 1.0.9(2023-11-10) +1. 修复设置ellipsis不生效的BUG +## 1.0.8(2023-09-20) +1. listItem优化可使用customStyle变量进行样式控制 +## 1.0.7(2023-08-29) +1. 修复边框的BUG +## 1.0.6(2023-08-16) +1. 修复switch开关返回undefined的问题 +2. 优化初始化可能导致的闪动 +## 1.0.5(2023-08-07) +1. 修复分包页面在ios端,nvue编译不能滚动的BUG +## 1.0.4(2023-08-04) +1. nvue修复 触底不触发事件的BUG +2. 更新文档说明事件触发 +## 1.0.3(2023-07-28) +1. 修改可能造成样式污染的BUG +## 1.0.2(2023-07-26) +1. 全面重构,用法与之前保持一致,参数全部变化 +2. 新增多个功能参数,方便一键构建列表 +3. List列表组件,包含基本列表样式、默认插槽机制、可扩展插槽机制、长列表性能优化、多端兼容。 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-list 列表 diff --git a/uni_modules/uv-list/components/uv-list-item/uv-list-item.vue b/uni_modules/uv-list/components/uv-list-item/uv-list-item.vue new file mode 100644 index 0000000..193b48d --- /dev/null +++ b/uni_modules/uv-list/components/uv-list-item/uv-list-item.vue @@ -0,0 +1,535 @@ + + + + + \ No newline at end of file diff --git a/uni_modules/uv-list/components/uv-list/uv-list.vue b/uni_modules/uv-list/components/uv-list/uv-list.vue new file mode 100644 index 0000000..3f3e5c2 --- /dev/null +++ b/uni_modules/uv-list/components/uv-list/uv-list.vue @@ -0,0 +1,147 @@ + + + + diff --git a/uni_modules/uv-list/package.json b/uni_modules/uv-list/package.json new file mode 100644 index 0000000..1b1156c --- /dev/null +++ b/uni_modules/uv-list/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-list", + "displayName": "uv-list 列表 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.9", + "description": "uv-list 多功能高性能列表组件", + "keywords": [ + "uv-list", + "uvui", + "uv-ui", + "list", + "列表" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-list/readme.md b/uni_modules/uv-list/readme.md new file mode 100644 index 0000000..930cbd4 --- /dev/null +++ b/uni_modules/uv-list/readme.md @@ -0,0 +1,27 @@ +## List 列表 + +> **组件名:uv-list** + +List列表组件,包含基本列表样式、默认插槽机制、可扩展插槽机制、长列表性能优化、多端兼容。 + +在vue页面里,它默认使用页面级滚动,这样做的目的是性能更加友好。在app-nvue页面里,它默认使用原生list组件滚动,这样的长列表,在滚动出屏幕外后,系统会回收不可见区域的渲染内存资源,不会造成滚动越长手机越卡的问题。 + +uv-list组件是父容器,里面的核心是uv-list-item子组件,它代表列表中的一个可重复行,子组件可以无限循环。 + +uv-list-item有很多风格,uv-list-item组件通过内置的属性,满足一些常用的场景。当内置属性不满足需求时,可以通过扩展插槽来自定义列表内容,插槽包括:默认插槽(完全自定义内容)、具名插槽(header | body | footer),根据需求进行扩展。 + +内置属性可以覆盖的场景包括:导航列表、设置列表、小图标列表等,其他不能满足的场景使用插槽进行扩展。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-load-more/changelog.md b/uni_modules/uv-load-more/changelog.md new file mode 100644 index 0000000..a2e0fed --- /dev/null +++ b/uni_modules/uv-load-more/changelog.md @@ -0,0 +1,7 @@ +## 1.0.2(2023-06-21) +1. 优化customStyle属性 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-load-more 加载更多 diff --git a/uni_modules/uv-load-more/components/uv-load-more/props.js b/uni_modules/uv-load-more/components/uv-load-more/props.js new file mode 100644 index 0000000..c6bc287 --- /dev/null +++ b/uni_modules/uv-load-more/components/uv-load-more/props.js @@ -0,0 +1,95 @@ +export default { + props: { + // 组件状态,loadmore-加载前的状态,loading-加载中的状态,nomore-没有更多的状态 + status: { + type: String, + default: 'loadmore' + }, + // 组件背景色 + bgColor: { + type: String, + default: 'transparent' + }, + // 是否显示加载中的图标 + icon: { + type: Boolean, + default: true + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: 14 + }, + // 图标大小 + iconSize: { + type: [String, Number], + default: 16 + }, + // 字体颜色 + color: { + type: String, + default: '#606266' + }, + // 加载中状态的图标,spinner-花朵状图标,circle-圆圈状,semicircle-半圆 + loadingIcon: { + type: String, + default: 'spinner' + }, + // 加载前的提示语 + loadmoreText: { + type: String, + default: '加载更多' + }, + // 加载中提示语 + loadingText: { + type: String, + default: '正在加载...' + }, + // 没有更多的提示语 + nomoreText: { + type: String, + default: '没有更多了' + }, + // 在“没有更多”状态下,是否显示粗点 + isDot: { + type: Boolean, + default: false + }, + // 加载中图标的颜色 + iconColor: { + type: String, + default: '#b7b7b7' + }, + // 上边距 + marginTop: { + type: [String, Number], + default: 10 + }, + // 下边距 + marginBottom: { + type: [String, Number], + default: 10 + }, + // 高度,单位px + height: { + type: [String, Number], + default: 'auto' + }, + // 是否显示左边分割线 + line: { + type: Boolean, + default: false + }, + // 线条颜色 + lineColor: { + type: String, + default: '#E6E8EB' + }, + // 是否虚线,true-虚线,false-实线 + dashed: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.loadmore + } +} \ No newline at end of file diff --git a/uni_modules/uv-load-more/components/uv-load-more/uv-load-more.vue b/uni_modules/uv-load-more/components/uv-load-more/uv-load-more.vue new file mode 100644 index 0000000..2b5057c --- /dev/null +++ b/uni_modules/uv-load-more/components/uv-load-more/uv-load-more.vue @@ -0,0 +1,152 @@ + + + + + diff --git a/uni_modules/uv-load-more/package.json b/uni_modules/uv-load-more/package.json new file mode 100644 index 0000000..bc502e3 --- /dev/null +++ b/uni_modules/uv-load-more/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-load-more", + "displayName": "uv-load-more 加载更多 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.2", + "description": "uv-load-more 此组件一般用于标识页面底部加载数据时的状态,共有三种状态:加载前、加载中、加载后。", + "keywords": [ + "uv-load-more", + "uvui", + "uv-ui", + "more", + "加载更多" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-line", + "uv-loading-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-load-more/readme.md b/uni_modules/uv-load-more/readme.md new file mode 100644 index 0000000..2e9334e --- /dev/null +++ b/uni_modules/uv-load-more/readme.md @@ -0,0 +1,11 @@ +## LoadMore 加载更多 + +> **组件名:uv-load-more** + +此组件一般用于标识页面底部加载数据时的状态,共有三种状态:加载前、加载中、加载后。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-loading-icon/changelog.md b/uni_modules/uv-loading-icon/changelog.md new file mode 100644 index 0000000..f17e074 --- /dev/null +++ b/uni_modules/uv-loading-icon/changelog.md @@ -0,0 +1,9 @@ +## 1.0.3(2023-08-14) +1. 新增参数textStyle,自定义文本样式 +## 1.0.2(2023-06-27) +优化 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +1. 新增uv-loading-icon组件 diff --git a/uni_modules/uv-loading-icon/components/uv-loading-icon/props.js b/uni_modules/uv-loading-icon/components/uv-loading-icon/props.js new file mode 100644 index 0000000..4ef0e94 --- /dev/null +++ b/uni_modules/uv-loading-icon/components/uv-loading-icon/props.js @@ -0,0 +1,67 @@ +export default { + props: { + // 是否显示组件 + show: { + type: Boolean, + default: true + }, + // 颜色 + color: { + type: String, + default: '#909193' + }, + // 提示文字颜色 + textColor: { + type: String, + default: '#909193' + }, + // 文字和图标是否垂直排列 + vertical: { + type: Boolean, + default: false + }, + // 模式选择,circle-圆形,spinner-花朵形,semicircle-半圆形 + mode: { + type: String, + default: 'spinner' + }, + // 图标大小,单位默认px + size: { + type: [String, Number], + default: 24 + }, + // 文字大小 + textSize: { + type: [String, Number], + default: 15 + }, + // 文字样式 + textStyle: { + type: Object, + default () { + return {} + } + }, + // 文字内容 + text: { + type: [String, Number], + default: '' + }, + // 动画模式 https://www.runoob.com/cssref/css3-pr-animation-timing-function.html + timingFunction: { + type: String, + default: 'linear' + }, + // 动画执行周期时间 + duration: { + type: [String, Number], + default: 1200 + }, + // mode=circle时的暗边颜色 + inactiveColor: { + type: String, + default: '' + }, + ...uni.$uv?.props?.loadingIcon + } +} \ No newline at end of file diff --git a/uni_modules/uv-loading-icon/components/uv-loading-icon/uv-loading-icon.vue b/uni_modules/uv-loading-icon/components/uv-loading-icon/uv-loading-icon.vue new file mode 100644 index 0000000..5650470 --- /dev/null +++ b/uni_modules/uv-loading-icon/components/uv-loading-icon/uv-loading-icon.vue @@ -0,0 +1,347 @@ + + + + + diff --git a/uni_modules/uv-loading-icon/package.json b/uni_modules/uv-loading-icon/package.json new file mode 100644 index 0000000..1485897 --- /dev/null +++ b/uni_modules/uv-loading-icon/package.json @@ -0,0 +1,87 @@ +{ + "id": "uv-loading-icon", + "displayName": "uv-loading-icon 加载动画 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.3", + "description": "此组件为一个小动画,目前用在uv-ui的uv-load-more加载更多等组件,还可以运用在项目中正在加载状态场景。", + "keywords": [ + "uv-loading-icon", + "uvui", + "uv-ui", + "loading", + "加载动画" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-loading-icon/readme.md b/uni_modules/uv-loading-icon/readme.md new file mode 100644 index 0000000..7b0cf0f --- /dev/null +++ b/uni_modules/uv-loading-icon/readme.md @@ -0,0 +1,19 @@ +## LoadingIcon 加载动画 + +> **组件名:uv-loading-icon** + +此组件为一个小动画,目前用在 `uv-ui` 的 `uv-load-more` 加载更多等组件,还可以运用在项目中正在加载状态场景。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-loading-page/changelog.md b/uni_modules/uv-loading-page/changelog.md new file mode 100644 index 0000000..4b7ef61 --- /dev/null +++ b/uni_modules/uv-loading-page/changelog.md @@ -0,0 +1,11 @@ +## 1.0.4(2024-01-20) +1. 修改上版本带出的问题 +## 1.0.3(2024-01-15) +1. 重构,避免初始加载的时候先显示页面的问题 +## 1.0.2(2023-07-02) +uv-loading-page 由于弹出层uv-transition的修改,组件内部做了相应的修改,参数不变。 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-loading-page 加载页 diff --git a/uni_modules/uv-loading-page/components/uv-loading-page/props.js b/uni_modules/uv-loading-page/components/uv-loading-page/props.js new file mode 100644 index 0000000..f1a8a06 --- /dev/null +++ b/uni_modules/uv-loading-page/components/uv-loading-page/props.js @@ -0,0 +1,55 @@ +export default { + props: { + // 提示内容 + loadingText: { + type: [String, Number], + default: '' + }, + // 文字上方用于替换loading动画的图片 + image: { + type: String, + default: '' + }, + // 加载动画的模式,circle-圆形,spinner-花朵形,semicircle-半圆形 + loadingMode: { + type: String, + default: 'circle' + }, + // 是否加载中 + loading: { + type: Boolean, + default: false + }, + // 背景色 + bgColor: { + type: String, + default: '#fff' + }, + // 文字颜色 + color: { + type: String, + default: '#C8C8C8' + }, + // 文字大小 + fontSize: { + type: [String, Number], + default: 16 + }, + // 图标大小 + iconSize: { + type: [String, Number], + default: 26 + }, + // 加载中图标的颜色,只能rgb或者十六进制颜色值 + loadingColor: { + type: String, + default: '#C8C8C8' + }, + // 过渡时间 + duration: { + type: [String, Number], + default: 300 + }, + ...uni.$uv?.props?.loadingPage + } +} \ No newline at end of file diff --git a/uni_modules/uv-loading-page/components/uv-loading-page/uv-loading-page.vue b/uni_modules/uv-loading-page/components/uv-loading-page/uv-loading-page.vue new file mode 100644 index 0000000..8fb26d1 --- /dev/null +++ b/uni_modules/uv-loading-page/components/uv-loading-page/uv-loading-page.vue @@ -0,0 +1,96 @@ + + + \ No newline at end of file diff --git a/uni_modules/uv-loading-page/package.json b/uni_modules/uv-loading-page/package.json new file mode 100644 index 0000000..cc9b171 --- /dev/null +++ b/uni_modules/uv-loading-page/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-loading-page", + "displayName": "uv-loading-page 加载页 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.4", + "description": "uv-loading-page 该组件是一个页面级的加载效果,可以在页面初始化数据等场景使用,与骨架屏有相似之处。", + "keywords": [ + "uv-loading-page", + "uvui", + "uv-ui", + "page", + "loading" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-transition", + "uv-loading-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-loading-page/readme.md b/uni_modules/uv-loading-page/readme.md new file mode 100644 index 0000000..3a5dd96 --- /dev/null +++ b/uni_modules/uv-loading-page/readme.md @@ -0,0 +1,11 @@ +## LoadingPage 加载页 + +> **组件名:uv-loading-page** + +该组件是一个页面级的加载效果,可以在页面初始化数据等场景使用,与骨架屏有相似之处。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-modal/changelog.md b/uni_modules/uv-modal/changelog.md new file mode 100644 index 0000000..d532286 --- /dev/null +++ b/uni_modules/uv-modal/changelog.md @@ -0,0 +1,28 @@ +## 1.0.11(2023-12-20) +1. 优化 +## 1.0.10(2023-12-19) +1. 修复confirm中快速使用closeLoading关闭加载状态失效的BUG +## 1.0.9(2023-11-28) +1. 修复上版本引出的确认和取消按钮均不显示,还有高度的BUG +## 1.0.8(2023-09-08) +1. 修复两个按钮之间竖线不显示的问题 +2. uv-ui项目自定义按钮示例修改 +## 1.0.7(2023-08-30) +1. 增加align参数,设置文本对齐方式,left center right +2. 增加textStyle参数,设置文本样式 +## 1.0.6(2023-08-23) +1. 修复异步loading时,确认回调还会一直触发 +## 1.0.5(2023-07-03) +去除插槽判断,避免某些平台不显示的BUG +## 1.0.4(2023-07-02) +uv-modal 由于弹出层uv-popup的修改,打开和关闭方法更改,详情参考文档:https://www.uvui.cn/components/modal.html +## 1.0.3(2023-06-29) +1. 增加closeLoading方法,方便异步加载手动取消 +2. 更新文档 +## 1.0.2(2023-06-11) +1. 新增zIndex参数 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-modal 模态框 diff --git a/uni_modules/uv-modal/components/uv-modal/props.js b/uni_modules/uv-modal/components/uv-modal/props.js new file mode 100644 index 0000000..6cb1f41 --- /dev/null +++ b/uni_modules/uv-modal/components/uv-modal/props.js @@ -0,0 +1,90 @@ +export default { + props: { + // 标题 + title: { + type: [String], + default: '' + }, + // 弹窗内容 + content: { + type: String, + default: '' + }, + // 确认文案 + confirmText: { + type: String, + default: '确认' + }, + // 取消文案 + cancelText: { + type: String, + default: '取消' + }, + // 是否显示确认按钮 + showConfirmButton: { + type: Boolean, + default: true + }, + // 是否显示取消按钮 + showCancelButton: { + type: Boolean, + default: false + }, + // 确认按钮颜色 + confirmColor: { + type: String, + default: '#2979ff' + }, + // 取消文字颜色 + cancelColor: { + type: String, + default: '#606266' + }, + // 对调确认和取消的位置 + buttonReverse: { + type: Boolean, + default: false + }, + // 是否开启缩放效果 + zoom: { + type: Boolean, + default: true + }, + // 层级 + zIndex: { + type: [String, Number], + default: 10075 + }, + // 是否异步关闭,只对确定按钮有效 + asyncClose: { + type: Boolean, + default: false + }, + // 是否允许点击遮罩关闭modal + closeOnClickOverlay: { + type: Boolean, + default: true + }, + // 给一个负的margin-top,往上偏移,避免和键盘重合的情况 + negativeTop: { + type: [String, Number], + default: 0 + }, + // modal宽度,不支持百分比,可以数值,px,rpx单位 + width: { + type: [String, Number], + default: '650rpx' + }, + // 文本对齐方式,默认left + align: { + type: String, + default: 'left' + }, + // 文本自定义样式 + textStyle: { + type: [Object, String], + default: '' + }, + ...uni.$uv?.props?.modal + } +} \ No newline at end of file diff --git a/uni_modules/uv-modal/components/uv-modal/uv-modal.vue b/uni_modules/uv-modal/components/uv-modal/uv-modal.vue new file mode 100644 index 0000000..4577b99 --- /dev/null +++ b/uni_modules/uv-modal/components/uv-modal/uv-modal.vue @@ -0,0 +1,245 @@ + + + + + diff --git a/uni_modules/uv-modal/package.json b/uni_modules/uv-modal/package.json new file mode 100644 index 0000000..2a815c0 --- /dev/null +++ b/uni_modules/uv-modal/package.json @@ -0,0 +1,90 @@ +{ + "id": "uv-modal", + "displayName": "uv-modal 模态框 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.11", + "description": "支持自定义内容,与uniapp提供的API uni.showModal类似,但是功能更强大,更加灵活", + "keywords": [ + "uv-modal", + "uvui", + "uv-ui", + "modal", + "模态框" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-popup", + "uv-line", + "uv-loading-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-modal/readme.md b/uni_modules/uv-modal/readme.md new file mode 100644 index 0000000..e1aec02 --- /dev/null +++ b/uni_modules/uv-modal/readme.md @@ -0,0 +1,23 @@ +## Modal 模态框 + +> **组件名:uv-modal** + +弹出模态框,常用于消息提示、消息确认、在当前页面内完成特定的交互操作。 + +特性:支持自定义内容,与uniapp提供的API `uni.showModal` 类似,但是功能更强大,更加灵活。 + +运用场景:弹窗验证码输入等场景 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-navbar/changelog.md b/uni_modules/uv-navbar/changelog.md new file mode 100644 index 0000000..01cc4fd --- /dev/null +++ b/uni_modules/uv-navbar/changelog.md @@ -0,0 +1,17 @@ +## 1.0.7(2023-08-16) +1. 修复ios可能存在点击返回按钮点不到的情况 +## 1.0.6(2023-08-07) +1. 修复nvue在ios端可能存在背景图样式错乱的BUG +## 1.0.5(2023-08-04) +1. bgColor设置背景图片,增加imgMode属性 +## 1.0.4(2023-08-01) +1. bgColor属性支持背景图片,在线图片或base64图片都可以 +## 1.0.3(2023-07-03) +去除插槽判断,避免某些平台不显示的BUG +## 1.0.2(2023-06-05) +1. 兼容渐变背景色 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-navbar 自定义导航栏 diff --git a/uni_modules/uv-navbar/components/uv-navbar/props.js b/uni_modules/uv-navbar/components/uv-navbar/props.js new file mode 100644 index 0000000..47fe150 --- /dev/null +++ b/uni_modules/uv-navbar/components/uv-navbar/props.js @@ -0,0 +1,89 @@ +export default { + props: { + // 是否开启顶部安全区适配 + safeAreaInsetTop: { + type: Boolean, + default: true + }, + // 固定在顶部时,是否生成一个等高元素,以防止塌陷 + placeholder: { + type: Boolean, + default: false + }, + // 是否固定在顶部 + fixed: { + type: Boolean, + default: true + }, + // 是否显示下边框 + border: { + type: Boolean, + default: false + }, + // 左边的图标 + leftIcon: { + type: String, + default: 'arrow-left' + }, + // 左边的提示文字 + leftText: { + type: String, + default: '' + }, + // 左右的提示文字 + rightText: { + type: String, + default: '' + }, + // 右边的图标 + rightIcon: { + type: String, + default: '' + }, + // 标题 + title: { + type: [String, Number], + default: '' + }, + // 背景颜色 + bgColor: { + type: String, + default: '#ffffff' + }, + imgMode: { + type: String, + default: 'aspectFill' + }, + // 标题的宽度 + titleWidth: { + type: [String, Number], + default: '400rpx' + }, + // 导航栏高度 + height: { + type: [String, Number], + default: '44px' + }, + // 左侧返回图标的大小 + leftIconSize: { + type: [String, Number], + default: 20 + }, + // 左侧返回图标的颜色 + leftIconColor: { + type: String, + default: '#303133' + }, + // 点击左侧区域(返回图标),是否自动返回上一页 + autoBack: { + type: Boolean, + default: false + }, + // 标题的样式,对象或字符串 + titleStyle: { + type: [String, Object], + default: '' + }, + ...uni.$uv?.props?.navbar + } +} \ No newline at end of file diff --git a/uni_modules/uv-navbar/components/uv-navbar/uv-navbar.vue b/uni_modules/uv-navbar/components/uv-navbar/uv-navbar.vue new file mode 100644 index 0000000..a46ad7a --- /dev/null +++ b/uni_modules/uv-navbar/components/uv-navbar/uv-navbar.vue @@ -0,0 +1,245 @@ + + + + + diff --git a/uni_modules/uv-navbar/package.json b/uni_modules/uv-navbar/package.json new file mode 100644 index 0000000..8d429de --- /dev/null +++ b/uni_modules/uv-navbar/package.json @@ -0,0 +1,89 @@ +{ + "id": "uv-navbar", + "displayName": "uv-navbar 自定义导航栏 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.7", + "description": "uv-navbar 此组件一般用于在特殊情况下,需要自定义导航栏的时候用到,一般建议使用自带的原生导航栏。", + "keywords": [ + "uv-navbar", + "uvui", + "uv-ui", + "navbar", + "自定义导航栏" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon", + "uv-status-bar" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-navbar/readme.md b/uni_modules/uv-navbar/readme.md new file mode 100644 index 0000000..412ea7b --- /dev/null +++ b/uni_modules/uv-navbar/readme.md @@ -0,0 +1,19 @@ +## Navbar 自定义导航栏 + +> **组件名:uv-navbar** + +此组件一般用于在特殊情况下,需要自定义导航栏的时候用到,一般建议使用自带的原生导航栏,支持渐变色、透明色、图片背景。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-no-network/changelog.md b/uni_modules/uv-no-network/changelog.md new file mode 100644 index 0000000..b6fc0ed --- /dev/null +++ b/uni_modules/uv-no-network/changelog.md @@ -0,0 +1,5 @@ +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-no-network 无网络提示 diff --git a/uni_modules/uv-no-network/components/uv-no-network/props.js b/uni_modules/uv-no-network/components/uv-no-network/props.js new file mode 100644 index 0000000..595b1fc --- /dev/null +++ b/uni_modules/uv-no-network/components/uv-no-network/props.js @@ -0,0 +1,20 @@ +export default { + props: { + // 页面文字提示 + tips: { + type: String, + default: '哎呀,网络信号丢失' + }, + // 一个z-index值,用于设置没有网络这个组件的层次,因为页面可能会有其他定位的元素层级过高,导致此组件被覆盖 + zIndex: { + type: [String, Number], + default: '' + }, + // image 没有网络的图片提示 + image: { + type: String, + default: 'data:image/png;base64,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' + }, + ...uni.$uv?.props?.noNetwork + } +} \ No newline at end of file diff --git a/uni_modules/uv-no-network/components/uv-no-network/uv-no-network.vue b/uni_modules/uv-no-network/components/uv-no-network/uv-no-network.vue new file mode 100644 index 0000000..5f134fa --- /dev/null +++ b/uni_modules/uv-no-network/components/uv-no-network/uv-no-network.vue @@ -0,0 +1,222 @@ + + + + + diff --git a/uni_modules/uv-no-network/package.json b/uni_modules/uv-no-network/package.json new file mode 100644 index 0000000..cb48aa9 --- /dev/null +++ b/uni_modules/uv-no-network/package.json @@ -0,0 +1,90 @@ +{ + "id": "uv-no-network", + "displayName": "uv-no-network 无网络提示 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.1", + "description": "uv-no-network 该组件在没有任何网络的情况下,显示在内容上方,无需任何配置,引入即可,内部自动处理所有功能和事件。", + "keywords": [ + "uv-no-network", + "uvui", + "uv-ui", + "network", + "无网络" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-overlay", + "uv-icon", + "uv-button" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-no-network/readme.md b/uni_modules/uv-no-network/readme.md new file mode 100644 index 0000000..0e4a1a2 --- /dev/null +++ b/uni_modules/uv-no-network/readme.md @@ -0,0 +1,11 @@ +## NoNetwork 无网络提示 + +> **组件名:uv-no-network** + +该组件在没有任何网络的情况下,显示在内容上方,无需任何配置,引入即可,内部自动处理所有功能和事件。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-notice-bar/changelog.md b/uni_modules/uv-notice-bar/changelog.md new file mode 100644 index 0000000..cdfec7d --- /dev/null +++ b/uni_modules/uv-notice-bar/changelog.md @@ -0,0 +1,19 @@ +## 1.0.7(2023-10-13) +1. unmounted兼容vue3 +## 1.0.6(2023-08-03) +1. 竖向滚动时候增加change回调 +## 1.0.5(2023-07-21) +1. 增加icon类型,支持设置false不显示图标 +2. 优化文档 +## 1.0.4(2023-07-03) +1. 增加disableScroll 属性,禁止自动滚动 +2. 优化文档 +## 1.0.3(2023-06-04) +1. 修复text传值为null报错的问题 +## 1.0.2(2023-05-30) +1. 修复error报错的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-notice-bar 滚动通知 diff --git a/uni_modules/uv-notice-bar/components/uv-column-notice/props.js b/uni_modules/uv-notice-bar/components/uv-column-notice/props.js new file mode 100644 index 0000000..d93917c --- /dev/null +++ b/uni_modules/uv-notice-bar/components/uv-column-notice/props.js @@ -0,0 +1,61 @@ +export default { + props: { + // 显示的内容,字符串 + text: { + type: [Array], + default: '' + }, + // 是否显示左侧的音量图标 + icon: { + type: [String, Boolean, null], + default: 'volume' + }, + // 通告模式,link-显示右箭头,closable-显示右侧关闭图标 + mode: { + type: String, + default: '' + }, + // 文字颜色,各图标也会使用文字颜色 + color: { + type: String, + default: '#f9ae3d' + }, + // 背景颜色 + bgColor: { + type: String, + default: '#fdf6ec' + }, + // 字体大小,单位px + fontSize: { + type: [String, Number], + default: 14 + }, + // 水平滚动时的滚动速度,即每秒滚动多少px(px),这有利于控制文字无论多少时,都能有一个恒定的速度 + speed: { + type: [String, Number], + default: 80 + }, + // direction = row时,是否使用步进形式滚动 + step: { + type: Boolean, + default: false + }, + // 滚动一个周期的时间长,单位ms + duration: { + type: [String, Number], + default: 1500 + }, + // 是否禁止用手滑动切换,仅`direction="column"生效` + // 目前HX2.6.11,只支持App 2.5.5+、H5 2.5.5+、支付宝小程序、字节跳动小程序 + disableTouch: { + type: Boolean, + default: true + }, + // 是否禁止滚动,仅`direction="column"生效` + disableScroll: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.columnNotice + } +} \ No newline at end of file diff --git a/uni_modules/uv-notice-bar/components/uv-column-notice/uv-column-notice.vue b/uni_modules/uv-notice-bar/components/uv-column-notice/uv-column-notice.vue new file mode 100644 index 0000000..73c6bfc --- /dev/null +++ b/uni_modules/uv-notice-bar/components/uv-column-notice/uv-column-notice.vue @@ -0,0 +1,176 @@ + + + + + diff --git a/uni_modules/uv-notice-bar/components/uv-notice-bar/props.js b/uni_modules/uv-notice-bar/components/uv-notice-bar/props.js new file mode 100644 index 0000000..3fe0b44 --- /dev/null +++ b/uni_modules/uv-notice-bar/components/uv-notice-bar/props.js @@ -0,0 +1,76 @@ +export default { + props: { + // 显示的内容,数组 + text: { + type: [Array, String], + default: () => [] + }, + // 通告滚动模式,row-横向滚动,column-竖向滚动 + direction: { + type: String, + default: 'row' + }, + // direction = row时,是否使用步进形式滚动 + step: { + type: Boolean, + default: false + }, + // 是否显示左侧的音量图标 + icon: { + type: [String, Boolean, null], + default: 'volume' + }, + // 通告模式,link-显示右箭头,closable-显示右侧关闭图标 + mode: { + type: String, + default: '' + }, + // 文字颜色,各图标也会使用文字颜色 + color: { + type: String, + default: '#f9ae3d' + }, + // 背景颜色 + bgColor: { + type: String, + default: '#fdf6ec' + }, + // 水平滚动时的滚动速度,即每秒滚动多少px(px),这有利于控制文字无论多少时,都能有一个恒定的速度 + speed: { + type: [String, Number], + default: 80 + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: 14 + }, + // 滚动一个周期的时间长,单位ms + duration: { + type: [String, Number], + default: 2000 + }, + // 跳转的页面路径 + url: { + type: String, + default: '' + }, + // 页面跳转的类型 + linkType: { + type: String, + default: 'navigateTo' + }, + // 是否禁止用手滑动切换 + // 目前HX2.6.11,只支持App 2.5.5+、H5 2.5.5+、支付宝小程序、字节跳动小程序 + disableTouch: { + type: Boolean, + default: true + }, + // 是否禁止滚动,仅`direction="column"生效` + disableScroll: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.noticeBar + } +} \ No newline at end of file diff --git a/uni_modules/uv-notice-bar/components/uv-notice-bar/uv-notice-bar.vue b/uni_modules/uv-notice-bar/components/uv-notice-bar/uv-notice-bar.vue new file mode 100644 index 0000000..14dd7c5 --- /dev/null +++ b/uni_modules/uv-notice-bar/components/uv-notice-bar/uv-notice-bar.vue @@ -0,0 +1,110 @@ + + + + diff --git a/uni_modules/uv-notice-bar/components/uv-row-notice/props.js b/uni_modules/uv-notice-bar/components/uv-row-notice/props.js new file mode 100644 index 0000000..cba1823 --- /dev/null +++ b/uni_modules/uv-notice-bar/components/uv-row-notice/props.js @@ -0,0 +1,40 @@ +export default { + props: { + // 显示的内容,字符串 + text: { + type: String, + default: '' + }, + // 是否显示左侧的音量图标 + icon: { + type: [String, Boolean, null], + default: 'volume' + }, + // 通告模式,link-显示右箭头,closable-显示右侧关闭图标 + mode: { + type: String, + default: '' + }, + // 文字颜色,各图标也会使用文字颜色 + color: { + type: String, + default: '#f9ae3d' + }, + // 背景颜色 + bgColor: { + type: String, + default: '#fdf6ec' + }, + // 字体大小,单位px + fontSize: { + type: [String, Number], + default: 14 + }, + // 水平滚动时的滚动速度,即每秒滚动多少px(rpx),这有利于控制文字无论多少时,都能有一个恒定的速度 + speed: { + type: [String, Number], + default: 80 + }, + ...uni.$uv?.props?.rowNotice + } +} \ No newline at end of file diff --git a/uni_modules/uv-notice-bar/components/uv-row-notice/uv-row-notice.vue b/uni_modules/uv-notice-bar/components/uv-row-notice/uv-row-notice.vue new file mode 100644 index 0000000..16117dd --- /dev/null +++ b/uni_modules/uv-notice-bar/components/uv-row-notice/uv-row-notice.vue @@ -0,0 +1,341 @@ + + + + diff --git a/uni_modules/uv-notice-bar/package.json b/uni_modules/uv-notice-bar/package.json new file mode 100644 index 0000000..f1bca29 --- /dev/null +++ b/uni_modules/uv-notice-bar/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-notice-bar", + "displayName": "uv-notice-bar 滚动通知 全面兼容vue3+2、app、h5、小程序等多端", + "version": "1.0.7", + "description": "uv-notice-bar 该组件用于滚动通告场景,有多种模式可供选择。", + "keywords": [ + "uv-notice-bar", + "uvui", + "uv-ui", + "notice", + "滚动公告" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-notice-bar/readme.md b/uni_modules/uv-notice-bar/readme.md new file mode 100644 index 0000000..61eb131 --- /dev/null +++ b/uni_modules/uv-notice-bar/readme.md @@ -0,0 +1,19 @@ +## NoticeBar 滚动通知 + +> **组件名:uv-notice-bar** + +该组件用于滚动通告场景,有多种模式可供选择。灵活配置,开箱即用。 + +# 查看文档 + +## [下载完整示例项目](https://ext.dcloud.net.cn/plugin?name=uv-ui) (请不要 下载插件ZIP) + +### [更多插件,请关注uv-ui组件库](https://ext.dcloud.net.cn/plugin?name=uv-ui) + + + +![image](https://mp-a667b617-c5f1-4a2d-9a54-683a67cff588.cdn.bspapp.com/uv-ui/banner.png) + + + +#### 如使用过程中有任何问题反馈,或者您对uv-ui有一些好的建议,欢迎加入uv-ui官方交流群:官方QQ群 \ No newline at end of file diff --git a/uni_modules/uv-notify/changelog.md b/uni_modules/uv-notify/changelog.md new file mode 100644 index 0000000..5d818ba --- /dev/null +++ b/uni_modules/uv-notify/changelog.md @@ -0,0 +1,9 @@ +## 1.0.3(2023-10-13) +1. unmounted兼容vue3 +## 1.0.2(2023-07-02) +uv-notify 由于弹出层uv-popup的修改,打开和关闭方法更改,详情参考文档:https://www.uvui.cn/components/notify.html +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-notify 消息提示 diff --git a/uni_modules/uv-notify/components/uv-notify/props.js b/uni_modules/uv-notify/components/uv-notify/props.js new file mode 100644 index 0000000..5728276 --- /dev/null +++ b/uni_modules/uv-notify/components/uv-notify/props.js @@ -0,0 +1,45 @@ +export default { + props: { + // 到顶部的距离 + top: { + type: [String, Number], + default: 0 + }, + // type主题,primary,success,warning,error + type: { + type: String, + default: 'primary' + }, + // 字体颜色 + color: { + type: String, + default: '#ffffff' + }, + // 背景颜色 + bgColor: { + type: String, + default: '' + }, + // 展示的文字内容 + message: { + type: String, + default: '' + }, + // 展示时长,为0时不消失,单位ms + duration: { + type: [String, Number], + default: 3000 + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: 15 + }, + // 是否留出顶部安全距离(状态栏高度) + safeAreaInsetTop: { + type: Boolean, + default: false + }, + ...uni.$uv?.props?.notify + } +} \ No newline at end of file diff --git a/uni_modules/uv-notify/components/uv-notify/uv-notify.vue b/uni_modules/uv-notify/components/uv-notify/uv-notify.vue new file mode 100644 index 0000000..96c1566 --- /dev/null +++ b/uni_modules/uv-notify/components/uv-notify/uv-notify.vue @@ -0,0 +1,220 @@ + + + + + diff --git a/uni_modules/uv-notify/package.json b/uni_modules/uv-notify/package.json new file mode 100644 index 0000000..921949b --- /dev/null +++ b/uni_modules/uv-notify/package.json @@ -0,0 +1,90 @@ +{ + "id": "uv-notify", + "displayName": "uv-notify 消息提示 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.3", + "description": "uv-notify 该组件一般用于页面顶部向下滑出一个提示,后自动收起的场景。", + "keywords": [ + "uv-notify", + "uvui", + "uv-ui", + "notify", + "消息提示" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-status-bar", + "uv-overlay", + "uv-transition" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-notify/readme.md b/uni_modules/uv-notify/readme.md new file mode 100644 index 0000000..482344a --- /dev/null +++ b/uni_modules/uv-notify/readme.md @@ -0,0 +1,11 @@ +## Notify 消息提示 + +> **组件名:uv-notify** + +该组件一般用于页面顶部向下滑出一个提示,后自动收起的场景。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-number-box/changelog.md b/uni_modules/uv-number-box/changelog.md new file mode 100644 index 0000000..3f07995 --- /dev/null +++ b/uni_modules/uv-number-box/changelog.md @@ -0,0 +1,7 @@ +## 1.0.2(2023-07-13) +1. 修复 uv-number-box设置value属性不生效的BUG +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-number-box 步进器 diff --git a/uni_modules/uv-number-box/components/uv-number-box/props.js b/uni_modules/uv-number-box/components/uv-number-box/props.js new file mode 100644 index 0000000..64b633b --- /dev/null +++ b/uni_modules/uv-number-box/components/uv-number-box/props.js @@ -0,0 +1,113 @@ +export default { + props: { + value: { + type: [String, Number], + default: 0 + }, + modelValue: { + type: [String, Number], + default: 0 + }, + // 步进器标识符,在change回调返回 + name: { + type: [String, Number], + default: '' + }, + // 最小值 + min: { + type: [String, Number], + default: 1 + }, + // 最大值 + max: { + type: [String, Number], + default: Number.MAX_SAFE_INTEGER + }, + // 加减的步长,可为小数 + step: { + type: [String, Number], + default: 1 + }, + // 是否只允许输入整数 + integer: { + type: Boolean, + default: false + }, + // 是否禁用,包括输入框,加减按钮 + disabled: { + type: Boolean, + default: false + }, + // 是否禁用输入框 + disabledInput: { + type: Boolean, + default: false + }, + // 是否开启异步变更,开启后需要手动控制输入值 + asyncChange: { + type: Boolean, + default: false + }, + // 输入框宽度,单位为px + inputWidth: { + type: [String, Number], + default: 35 + }, + // 是否显示减少按钮 + showMinus: { + type: Boolean, + default: true + }, + // 是否显示增加按钮 + showPlus: { + type: Boolean, + default: true + }, + // 显示的小数位数 + decimalLength: { + type: [String, Number, null], + default: null + }, + // 是否开启长按加减手势 + longPress: { + type: Boolean, + default: true + }, + // 输入框文字和加减按钮图标的颜色 + color: { + type: String, + default: '#323233' + }, + // 按钮大小,宽高等于此值,单位px,输入框高度和此值保持一致 + buttonSize: { + type: [String, Number], + default: 30 + }, + // 输入框和按钮的背景颜色 + bgColor: { + type: String, + default: '#EBECEE' + }, + // 指定光标于键盘的距离,避免键盘遮挡输入框,单位px + cursorSpacing: { + type: [String, Number], + default: 100 + }, + // 是否禁用增加按钮 + disablePlus: { + type: Boolean, + default: false + }, + // 是否禁用减少按钮 + disableMinus: { + type: Boolean, + default: false + }, + // 加减按钮图标的样式 + iconStyle: { + type: [Object, String], + default: '' + }, + ...uni.$uv?.props?.numberBox + } +} \ No newline at end of file diff --git a/uni_modules/uv-number-box/components/uv-number-box/uv-number-box.vue b/uni_modules/uv-number-box/components/uv-number-box/uv-number-box.vue new file mode 100644 index 0000000..6937e89 --- /dev/null +++ b/uni_modules/uv-number-box/components/uv-number-box/uv-number-box.vue @@ -0,0 +1,395 @@ + + + + \ No newline at end of file diff --git a/uni_modules/uv-number-box/package.json b/uni_modules/uv-number-box/package.json new file mode 100644 index 0000000..771e6eb --- /dev/null +++ b/uni_modules/uv-number-box/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-number-box", + "displayName": "uv-number-box 步进器 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.2", + "description": "uv-number-box 该组件一般用于商城购物选择物品数量的场景。", + "keywords": [ + "uv-number-box", + "uvui", + "uv-ui", + "number", + "步进器" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-icon" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-number-box/readme.md b/uni_modules/uv-number-box/readme.md new file mode 100644 index 0000000..6b83da9 --- /dev/null +++ b/uni_modules/uv-number-box/readme.md @@ -0,0 +1,11 @@ +## NumberBox 步进器 + +> **组件名:uv-number-box** + +该组件一般用于商城购物选择物品数量的场景。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-overlay/changelog.md b/uni_modules/uv-overlay/changelog.md new file mode 100644 index 0000000..ff14713 --- /dev/null +++ b/uni_modules/uv-overlay/changelog.md @@ -0,0 +1,9 @@ +## 1.0.3(2023-07-02) +uv-overlay 由于弹出层uv-transition的修改,组件内部做了相应的修改,参数不变。 +## 1.0.2(2023-06-29) +1. 优化,H5端禁止穿透滚动 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +1. 新增uv-overlay组件 diff --git a/uni_modules/uv-overlay/components/uv-overlay/props.js b/uni_modules/uv-overlay/components/uv-overlay/props.js new file mode 100644 index 0000000..267c613 --- /dev/null +++ b/uni_modules/uv-overlay/components/uv-overlay/props.js @@ -0,0 +1,25 @@ +export default { + props: { + // 是否显示遮罩 + show: { + type: Boolean, + default: false + }, + // 层级z-index + zIndex: { + type: [String, Number], + default: 10070 + }, + // 遮罩的过渡时间,单位为ms + duration: { + type: [String, Number], + default: 300 + }, + // 不透明度值,当做rgba的第四个参数 + opacity: { + type: [String, Number], + default: 0.5 + }, + ...uni.$uv?.props?.overlay + } +} \ No newline at end of file diff --git a/uni_modules/uv-overlay/components/uv-overlay/uv-overlay.vue b/uni_modules/uv-overlay/components/uv-overlay/uv-overlay.vue new file mode 100644 index 0000000..53568c0 --- /dev/null +++ b/uni_modules/uv-overlay/components/uv-overlay/uv-overlay.vue @@ -0,0 +1,85 @@ + + + + diff --git a/uni_modules/uv-overlay/package.json b/uni_modules/uv-overlay/package.json new file mode 100644 index 0000000..a664f3a --- /dev/null +++ b/uni_modules/uv-overlay/package.json @@ -0,0 +1,88 @@ +{ + "id": "uv-overlay", + "displayName": "uv-overlay 遮罩层 全面兼容小程序、nvue、vue2、vue3等多端", + "version": "1.0.3", + "description": "uv-overlay 创建一个遮罩层,用于强调特定的页面元素,并阻止用户对遮罩下层的内容进行操作,一般用于弹窗场景,uv-popup、uv-toast、uv-tooltip等组件就是用了该组件。", + "keywords": [ + "uv-overlay", + "uvui", + "uv-ui", + "overlay", + "遮罩层" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [ + "uv-ui-tools", + "uv-transition" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uv-overlay/readme.md b/uni_modules/uv-overlay/readme.md new file mode 100644 index 0000000..4e8af4b --- /dev/null +++ b/uni_modules/uv-overlay/readme.md @@ -0,0 +1,11 @@ +## Overlay 遮罩层 + +> **组件名:uv-overlay** + +创建一个遮罩层,用于强调特定的页面元素,并阻止用户对遮罩下层的内容进行操作,一般用于弹窗场景,uv-popup、uv-toast、uv-tooltip等组件就是用了该组件。 + +### 查看文档 + +### [完整示例项目下载 | 关注更多组件](https://ext.dcloud.net.cn/plugin?name=uv-ui) + +#### 如使用过程中有任何问题,或者您对uv-ui有一些好的建议,欢迎加入 uv-ui 交流群:uv-ui、官方QQ群 diff --git a/uni_modules/uv-parse/changelog.md b/uni_modules/uv-parse/changelog.md new file mode 100644 index 0000000..4575e07 --- /dev/null +++ b/uni_modules/uv-parse/changelog.md @@ -0,0 +1,13 @@ +## 1.0.4(2023-07-17) +1. 优化文档 +2. 优化其他 +## 1.0.3(2023-06-19) +1. 修复nvue模式下不显示的BUG +## 1.0.2(2023-06-02) +1. 修复可能存在的BUG +2. 优化 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-parse 富文本解析器 diff --git a/uni_modules/uv-parse/components/uv-parse/node/node.vue b/uni_modules/uv-parse/components/uv-parse/node/node.vue new file mode 100644 index 0000000..5857077 --- /dev/null +++ b/uni_modules/uv-parse/components/uv-parse/node/node.vue @@ -0,0 +1,576 @@ +