{"id":4838,"date":"2024-11-19T21:46:13","date_gmt":"2024-11-19T13:46:13","guid":{"rendered":"https:\/\/blog.odjbinail.cn\/?p=4838"},"modified":"2024-11-19T21:46:15","modified_gmt":"2024-11-19T13:46:15","slug":"uniapp%e5%b0%8f%e7%a8%8b%e5%ba%8f%e4%bd%bf%e7%94%a8picker%e7%bb%84%e4%bb%b6%e5%ae%9e%e7%8e%b0%e7%9c%81%e5%b8%82%e5%8c%ba%e8%a1%97%e9%81%93%e5%9b%9b%e7%ba%a7%e8%81%94%e5%8a%a8","status":"publish","type":"post","link":"https:\/\/blog.odjbinail.cn\/?p=4838","title":{"rendered":"uniapp\u5c0f\u7a0b\u5e8f\u4f7f\u7528picker\u7ec4\u4ef6\u5b9e\u73b0\u7701\u5e02\u533a\u8857\u9053\u56db\u7ea7\u8054\u52a8"},"content":{"rendered":"<h2>\u7248\u672c\u8bf4\u660e<\/h2>\n<ul>\n<li>vue3<\/li>\n<li>ts \u8bed\u8a00<\/li>\n<\/ul>\n<h2>\u4f7f\u7528\u8bf4\u660e<\/h2>\n<ul>\n<li>\u9700\u8981\u51c6\u5907\u4e00\u4efd\u7701\u5e02\u533a\u8857\u9053 json \u6570\u636e<\/li>\n<li>\u5982\u679c\u9700\u8981\u9ed8\u8ba4\u663e\u793a\u6307\u5b9a\u7684\u7701\u5e02\u533a\u8857\u9053, \u7136\u540e\u56de\u663e\u5230 picker \u9009\u62e9\u6846\u4e2d, \u5728\u81ea\u5b9a\u4e49 cityPicker \u7ec4\u4ef6\u4e2d\u9700\u8981\u83b7\u53d6\u7701\u5e02\u533a\u8857\u9053\u5b57\u7b26\u4e32 ( \u4f8b\u5982: \u56db\u5ddd\u7701\u6210\u90fd\u5e02\u6b66\u4faf\u533a\u7389\u6797\u8857\u9053 )<\/li>\n<li>\u8c03\u7528 setDefaultValue \u65b9\u6cd5\u8bbe\u7f6e\u9ed8\u8ba4\u503c, \u8be6\u89c1\u4ee3\u7801<\/li>\n<\/ul>\n<h2>\u5f15\u5165\u7701\u5e02\u533a\u8857\u9053 json \u6570\u636e<\/h2>\n<ul>\n<li>\u5148\u5728 utils \u76ee\u5f55\u4e0b\u5efa\u7acb city.js \u6587\u4ef6, \u5b58\u50a8\u7701\u5e02\u533a\u8857\u9053 json \u6570\u636e, \u7136\u540e\u5bfc\u51fa export, \u65b9\u4fbf cityPicker \u7ec4\u4ef6\u83b7\u53d6<\/li>\n<li>city.js \u6587\u4ef6 \u81ea\u53d6<\/li>\n<\/ul>\n<p>\u94fe\u63a5: <a href=\"https:\/\/pan.baidu.com\/s\/12_xTL9u3-3mGMF-SgJib-g?pwd=b9xn\">https:\/\/pan.baidu.com\/s\/12_xTL9u3-3mGMF-SgJib-g?pwd=b9xn<\/a><br \/>\n\u63d0\u53d6\u7801: b9xn <\/p>\n<h2>cityPicker \u7ec4\u4ef6\u5b8c\u6574\u4ee3\u7801<\/h2>\n<pre class=\"prettyprint linenums\" ><code>&lt;template&gt;\n    &lt;view&gt;\n        &lt;picker mode=&quot;multiSelector&quot; :range=&quot;multiArray&quot; :value=&quot;selectedIndex&quot; @change=&quot;onChange&quot; @columnchange=&quot;onColumnChange&quot; @cancel=&quot;pickerCancel(addressInfo)&quot;&gt;\n            &lt;view class=&quot;picker&quot; v-if=&quot;selectedValue[0]&quot;&gt;\n                {{ selectedValue[0] + &#039;-&#039; + selectedValue[1] + &#039;-&#039; + selectedValue[2] + &#039;-&#039; + selectedValue[3] }}\n            &lt;\/view&gt;\n            &lt;view v-else&gt;&lt;\/view&gt;\n        &lt;\/picker&gt;\n    &lt;\/view&gt;\n&lt;\/template&gt;\n\n&lt;script lang=&quot;ts&quot;&gt;\nimport { defineComponent, ref, getCurrentInstance, watch, onMounted, inject } from &#039;vue&#039;;\nimport jsonData from &#039;..\/..\/utils\/city.js&#039;;\n\nexport default defineComponent({\n    props: [&#039;address&#039;],\n    setup(props) {\n        const { proxy } = getCurrentInstance();\n        const multiArray = ref([[], [], [], []]);\n        const selectedIndex = ref([0, 0, 0, 0]);\n        const selectedValue = ref([&#039;&#039;, &#039;&#039;, &#039;&#039;, &#039;&#039;]);\n        const addressInfo = ref([]);\n\n        const areaData = jsonData;\n        onMounted(() =&gt; {\n            initMultiArray();\n            \/\/ \u8bbe\u7f6e\u9ed8\u8ba4\u503c\n            let address = uni.getStorageSync(&#039;defautAddress&#039;);\n            const regex = \/(.+\u7701)(.+\u5e02)(.+\u533a)(.+)\/;\n            address = address.match(regex);\n            const newAddreeArray = [];\n            newAddreeArray.push(address[1]);\n            newAddreeArray.push(address[2]);\n            newAddreeArray.push(address[3]);\n            newAddreeArray.push(address[4]);\n            addressInfo.value = newAddreeArray;\n            selectedValue.value = addressInfo.value;\n            pickerCancel(addressInfo.value);\n        });\n\n        const pickerCancel = (editScreenVis) =&gt; {\n            \/\/ console.log(&#039;editScreenVis&#039;, editScreenVis);\n            if (editScreenVis &amp;&amp; editScreenVis.length &gt; 0) {\n                setDefaultValue(editScreenVis[0], editScreenVis[1], editScreenVis[2], editScreenVis[3]);\n            } else {\n                setDefaultValue(&#039;\u56db\u5ddd\u7701&#039;, &#039;\u6210\u90fd\u5e02&#039;, &#039;\u6b66\u4faf\u533a&#039;, &#039;\u7389\u6797\u8857\u9053&#039;);\n            }\n        };\n        \/\/\u521d\u59cb\u6570\u636e\n        const initMultiArray = () =&gt; {\n            const provinces = Object.keys(areaData);\n            const cities = Object.keys(areaData[provinces[0]] || {});\n            const districts = Object.keys(areaData[provinces[0]][cities[0]] || {});\n            const streets = areaData[provinces[0]][cities[0]][districts[0]] || [];\n            multiArray.value = [provinces, cities, districts, streets];\n        };\n\n        const setDefaultValue = (defaultProvince: string, defaultCity: string, defaultDistrict: string, defaultStreet: string) =&gt; {\n            const provinceIndex = multiArray.value[0].indexOf(defaultProvince);\n            let defaultCityArray = [];\n            let defaultDistrictArray = [];\n            let defaultStreetArray = [];\n            let cityArray = [];\n            let districtArray = [];\n            let streetArray = [];\n            let cityIndex = 0;\n            let streetIndex = 0;\n            let districtIndex = 0;\n            for (let key in areaData) {\n                if (key == defaultProvince) {\n                    defaultCityArray = areaData[key];\n                }\n            }\n            for (let key in defaultCityArray) {\n                cityArray.push(key);\n                multiArray.value[1] = cityArray;\n                cityIndex = multiArray.value[1].indexOf(defaultCity);\n                if (key == defaultCity) {\n                    defaultDistrictArray = defaultCityArray[key];\n                }\n            }\n\n            for (let key in defaultDistrictArray) {\n                districtArray.push(key);\n                multiArray.value[2] = districtArray;\n                districtIndex = multiArray.value[2].indexOf(defaultDistrict);\n                if (key == defaultDistrict) {\n                    defaultStreetArray = defaultDistrictArray[key];\n                }\n            }\n            multiArray.value[3] = defaultStreetArray;\n            streetIndex = multiArray.value[3].indexOf(defaultStreet);\n            let arr = [];\n            arr.push(provinceIndex);\n            arr.push(cityIndex);\n            arr.push(districtIndex);\n            arr.push(streetIndex);\n            selectedIndex.value = arr;\n        };\n\n        const onColumnChange = (e: any) =&gt; {\n            const { column, value } = e.detail;\n            selectedIndex.value[column] = value;\n\n            if (column === 0) {\n                \/\/ \u7701\u4efd\u53d8\u5316\n                selectedIndex.value = [value, 0, 0, 0];\n            } else if (column === 1) {\n                \/\/ \u57ce\u5e02\u53d8\u5316\n                selectedIndex.value = [selectedIndex.value[0], value, 0, 0];\n            } else if (column === 2) {\n                \/\/ \u533a\u53bf\u53d8\u5316\n                selectedIndex.value = [selectedIndex.value[0], selectedIndex.value[1], value, 0];\n            }\n\n            updateMultiArray();\n        };\n\n        const updateMultiArray = () =&gt; {\n            const currentProvince = multiArray.value[0][selectedIndex.value[0]];\n            const currentCity = multiArray.value[1][selectedIndex.value[1]];\n            const currentDistrict = multiArray.value[2][selectedIndex.value[2]];\n\n            const newCities = Object.keys(areaData[currentProvince] || {});\n            const newDistricts = newCities.length &gt; 0 ? Object.keys(areaData[currentProvince]?.[currentCity] || {}) : [];\n            const newStreets = newDistricts.length &gt; 0 ? areaData[currentProvince]?.[currentCity]?.[currentDistrict] || [] : [];\n\n            multiArray.value = [multiArray.value[0], newCities, newDistricts, newStreets];\n        };\n\n        const onChange = (e: any) =&gt; {\n            const { value } = e.detail;\n            selectedIndex.value = value;\n            selectedValue.value = [multiArray.value[0][value[0]], multiArray.value[1][value[1]], multiArray.value[2][value[2]], multiArray.value[3][value[3]]];\n        };\n\n        return {\n            multiArray,\n            selectedValue,\n            onColumnChange,\n            onChange,\n            selectedIndex,\n            setDefaultValue,\n            pickerCancel,\n            addressInfo\n        };\n    }\n});\n&lt;\/script&gt;\n\n&lt;style scoped&gt;\n.picker {\n    width: 100%;\n}\n&lt;\/style&gt;\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u7248\u672c\u8bf4\u660e vue3 ts \u8bed\u8a00 \u4f7f\u7528\u8bf4\u660e \u9700\u8981\u51c6\u5907\u4e00\u4efd\u7701\u5e02\u533a\u8857\u9053 json \u6570\u636e \u5982\u679c\u9700\u8981\u9ed8\u8ba4\u663e\u793a\u6307\u5b9a\u7684\u7701\u5e02\u533a [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-4838","post","type-post","status-publish","format-standard","hentry","category-1"],"_links":{"self":[{"href":"https:\/\/blog.odjbinail.cn\/index.php?rest_route=\/wp\/v2\/posts\/4838","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.odjbinail.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.odjbinail.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.odjbinail.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.odjbinail.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4838"}],"version-history":[{"count":8,"href":"https:\/\/blog.odjbinail.cn\/index.php?rest_route=\/wp\/v2\/posts\/4838\/revisions"}],"predecessor-version":[{"id":4846,"href":"https:\/\/blog.odjbinail.cn\/index.php?rest_route=\/wp\/v2\/posts\/4838\/revisions\/4846"}],"wp:attachment":[{"href":"https:\/\/blog.odjbinail.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4838"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.odjbinail.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4838"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.odjbinail.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4838"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}