/* * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development"). * This devtool is neither made for production nor for readable output files. * It uses "eval()" calls to create a separate source file in the browser devtools. * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) * or disable the default devtool with "devtool: false". * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). */ (self["webpackChunkshiweisuzhou"] = self["webpackChunkshiweisuzhou"] || []).push([["src_components_common_AddressFormDialog_vue"],{ /***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/common/AddressFormDialog.vue?vue&type=script&lang=js": /*!*******************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/common/AddressFormDialog.vue?vue&type=script&lang=js ***! \*******************************************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/core-js/modules/es.iterator.constructor.js\");\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_iterator_filter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.iterator.filter.js */ \"./node_modules/core-js/modules/es.iterator.filter.js\");\n/* harmony import */ var core_js_modules_es_iterator_filter_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_filter_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.iterator.find.js */ \"./node_modules/core-js/modules/es.iterator.find.js\");\n/* harmony import */ var core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_2__);\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: \"AddressFormDialog\",\n props: {\n visible: {\n type: Boolean,\n default: false\n },\n type: {\n type: String,\n required: true,\n validator: val => [\"add\", \"edit\"].includes(val)\n },\n initialData: {\n type: Object,\n default: () => ({})\n }\n },\n data() {\n const validateMobile = (rule, value, callback) => {\n if (!value) {\n return callback(new Error(\"请输入手机号码\"));\n } else if (!/^1[3-9]\\d{9}$/.test(value)) {\n return callback(new Error(\"请输入正确的11位手机号码\"));\n } else {\n callback();\n }\n };\n const validateRegion = (rule, value, callback) => {\n if (!this.form.province_id || !this.form.city_id || !this.form.district_id) {\n return callback(new Error(\"请完整选择省市区\"));\n }\n callback();\n };\n return {\n form: {\n id: null,\n username: \"\",\n detail_addr: \"\",\n mobile: \"\",\n province_id: null,\n city_id: null,\n district_id: null,\n region: \"\"\n },\n rules: {\n username: [{\n required: true,\n message: \"请输入收货人姓名\",\n trigger: \"blur\"\n }, {\n max: 10,\n message: \"姓名不能超过10个字符\",\n trigger: \"blur\"\n }],\n region: [{\n required: true,\n validator: validateRegion,\n trigger: \"change\"\n }],\n detail_addr: [{\n required: true,\n message: \"请输入详细地址\",\n trigger: \"blur\"\n }, {\n max: 500,\n message: \"详细地址不能超过500个字符\",\n trigger: \"blur\"\n }],\n mobile: [{\n required: true,\n validator: validateMobile,\n trigger: \"blur\"\n }]\n },\n regionData: []\n };\n },\n computed: {\n provinces() {\n return this.regionData.filter(item => item.level === 1);\n },\n cities() {\n if (!this.form.province_id) return [];\n return this.regionData.filter(item => item.level === 2 && item.pid === this.form.province_id);\n },\n districts() {\n if (!this.form.city_id) return [];\n return this.regionData.filter(item => item.level === 3 && item.pid === this.form.city_id);\n }\n },\n watch: {\n visible(val) {\n if (val) {\n this.initForm();\n }\n },\n initialData: {\n handler() {\n if (this.visible) {\n this.initForm();\n }\n },\n deep: true\n }\n },\n mounted() {\n this.getRegionData();\n },\n methods: {\n // 获取地区数据\n async getRegionData() {\n try {\n const res = await this.post({}, \"/api/uservice/user/getAreas\");\n if (res && res.data) {\n this.regionData = res.data;\n } else {\n this.$message.error(\"获取地区数据失败\");\n }\n } catch (error) {\n console.error(\"获取地区数据出错:\", error);\n this.$message.error(\"获取地区数据时发生错误\");\n }\n },\n initForm() {\n this.$nextTick(() => {\n if (this.$refs.addressForm) {\n this.$refs.addressForm.resetFields();\n }\n this.form = {\n id: this.type === \"edit\" ? this.initialData.id : null,\n username: this.initialData.username || \"\",\n detail_addr: this.initialData.detail_addr || \"\",\n mobile: this.initialData.mobile || \"\",\n province_id: this.initialData.province_id || null,\n city_id: this.initialData.city_id || null,\n district_id: this.initialData.district_id || null,\n region: this.initialData.region || \"\"\n };\n\n // 如果没有ID信息再尝试通过文本匹配\n if (this.type === \"edit\" && this.initialData.region && !this.form.province_id) {\n this.echoRegionSelection(this.initialData.region);\n }\n });\n },\n echoRegionSelection(regionText) {\n const regions = regionText.split(\" \");\n if (regions.length < 3) return;\n const province = this.provinces.find(p => p.name === regions[0]);\n if (province) {\n this.form.province_id = province.id;\n this.$nextTick(() => {\n const city = this.cities.find(c => c.name === regions[1]);\n if (city) {\n this.form.city_id = city.id;\n this.$nextTick(() => {\n const district = this.districts.find(d => d.name === regions[2]);\n if (district) {\n this.form.district_id = district.id;\n }\n });\n }\n });\n }\n },\n handleProvinceChange() {\n this.form.city_id = null;\n this.form.district_id = null;\n },\n handleCityChange() {\n this.form.district_id = null;\n },\n saveAddress() {\n this.$refs.addressForm.validate(async valid => {\n if (!valid) return;\n const province = this.provinces.find(p => p.id === this.form.province_id);\n const city = this.cities.find(c => c.id === this.form.city_id);\n const district = this.districts.find(d => d.id === this.form.district_id);\n if (!(province && city && district)) {\n this.$message.warning(\"地区信息不完整\");\n return;\n }\n const formData = {\n ...this.form,\n region: `${province.name} ${city.name} ${district.name}`\n };\n this.$emit(\"save\", formData);\n this.handleClose();\n });\n },\n handleClose() {\n this.$emit(\"update:visible\", false);\n }\n }\n});\n\n//# sourceURL=webpack://shiweisuzhou/./src/components/common/AddressFormDialog.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options\n}"); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/common/AddressFormDialog.vue?vue&type=template&id=96545de8&scoped=true": /*!***************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet[1].rules[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/common/AddressFormDialog.vue?vue&type=template&id=96545de8&scoped=true ***! \***************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ render: function() { return /* binding */ render; },\n/* harmony export */ staticRenderFns: function() { return /* binding */ staticRenderFns; }\n/* harmony export */ });\nvar render = function render() {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"el-dialog\", {\n attrs: {\n title: `${_vm.type === \"add\" ? \"新增\" : \"编辑\"}收货地址`,\n visible: _vm.visible,\n width: \"700px\"\n },\n on: {\n close: _vm.handleClose\n }\n }, [_c(\"el-form\", {\n ref: \"addressForm\",\n attrs: {\n model: _vm.form,\n rules: _vm.rules,\n \"label-width\": \"100px\",\n size: \"small\"\n }\n }, [_c(\"el-form-item\", {\n attrs: {\n label: \"收货人\",\n prop: \"username\"\n }\n }, [_c(\"el-input\", {\n attrs: {\n placeholder: \"请填写收货人姓名,限制10个字符\",\n maxlength: \"10\"\n },\n model: {\n value: _vm.form.username,\n callback: function ($$v) {\n _vm.$set(_vm.form, \"username\", $$v);\n },\n expression: \"form.username\"\n }\n })], 1), _c(\"el-form-item\", {\n attrs: {\n label: \"所在地区\",\n prop: \"region\"\n }\n }, [_c(\"div\", {\n staticClass: \"region-selector\"\n }, [_c(\"el-select\", {\n staticClass: \"region-select\",\n attrs: {\n placeholder: \"选择省份/直辖市\"\n },\n on: {\n change: _vm.handleProvinceChange\n },\n model: {\n value: _vm.form.province_id,\n callback: function ($$v) {\n _vm.$set(_vm.form, \"province_id\", $$v);\n },\n expression: \"form.province_id\"\n }\n }, _vm._l(_vm.provinces, function (province) {\n return _c(\"el-option\", {\n key: province.id,\n attrs: {\n label: province.name,\n value: province.id\n }\n });\n }), 1), _c(\"el-select\", {\n staticClass: \"region-select\",\n attrs: {\n placeholder: \"选择城市\",\n disabled: !_vm.form.province_id\n },\n on: {\n change: _vm.handleCityChange\n },\n model: {\n value: _vm.form.city_id,\n callback: function ($$v) {\n _vm.$set(_vm.form, \"city_id\", $$v);\n },\n expression: \"form.city_id\"\n }\n }, _vm._l(_vm.cities, function (city) {\n return _c(\"el-option\", {\n key: city.id,\n attrs: {\n label: city.name,\n value: city.id\n }\n });\n }), 1), _c(\"el-select\", {\n staticClass: \"region-select\",\n attrs: {\n placeholder: \"选择县区\",\n disabled: !_vm.form.city_id\n },\n model: {\n value: _vm.form.district_id,\n callback: function ($$v) {\n _vm.$set(_vm.form, \"district_id\", $$v);\n },\n expression: \"form.district_id\"\n }\n }, _vm._l(_vm.districts, function (district) {\n return _c(\"el-option\", {\n key: district.id,\n attrs: {\n label: district.name,\n value: district.id\n }\n });\n }), 1)], 1)]), _c(\"el-form-item\", {\n attrs: {\n label: \"详细地址\",\n prop: \"detail_addr\"\n }\n }, [_c(\"el-input\", {\n attrs: {\n placeholder: \"请填写详细地址,限制500个字符\",\n maxlength: \"500\"\n },\n model: {\n value: _vm.form.detail_addr,\n callback: function ($$v) {\n _vm.$set(_vm.form, \"detail_addr\", $$v);\n },\n expression: \"form.detail_addr\"\n }\n })], 1), _c(\"el-form-item\", {\n attrs: {\n label: \"手机号码\",\n prop: \"mobile\"\n }\n }, [_c(\"el-input\", {\n attrs: {\n placeholder: \"请填写手机号码,限制11位数字\",\n maxlength: \"11\",\n oninput: \"value=value.replace(/[^\\\\d]/g,'')\"\n },\n model: {\n value: _vm.form.mobile,\n callback: function ($$v) {\n _vm.$set(_vm.form, \"mobile\", $$v);\n },\n expression: \"form.mobile\"\n }\n })], 1)], 1), _c(\"div\", {\n staticClass: \"dialog-footer\",\n attrs: {\n slot: \"footer\"\n },\n slot: \"footer\"\n }, [_c(\"el-button\", {\n attrs: {\n size: \"small\"\n },\n on: {\n click: _vm.handleClose\n }\n }, [_vm._v(\"取消\")]), _c(\"el-button\", {\n attrs: {\n size: \"small\",\n type: \"primary\"\n },\n on: {\n click: _vm.saveAddress\n }\n }, [_vm._v(\"保存\")])], 1)], 1);\n};\nvar staticRenderFns = [];\nrender._withStripped = true;\n\n\n//# sourceURL=webpack://shiweisuzhou/./src/components/common/AddressFormDialog.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use%5B0%5D!./node_modules/@vue/vue-loader-v15/lib/loaders/templateLoader.js??ruleSet%5B1%5D.rules%5B3%5D!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options\n}"); /***/ }), /***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/common/AddressFormDialog.vue?vue&type=style&index=0&id=96545de8&lang=scss&scoped=true": /*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/common/AddressFormDialog.vue?vue&type=style&index=0&id=96545de8&lang=scss&scoped=true ***! \******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".region-selector[data-v-96545de8] {\\n display: flex;\\n gap: 10px;\\n flex-wrap: wrap;\\n}\\n.region-select[data-v-96545de8] {\\n min-width: 180px;\\n flex: 1;\\n max-width: 30%;\\n}\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://shiweisuzhou/./src/components/common/AddressFormDialog.vue?./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use%5B1%5D!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use%5B2%5D!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use%5B3%5D!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options\n}"); /***/ }), /***/ "./node_modules/vue-style-loader/index.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/common/AddressFormDialog.vue?vue&type=style&index=0&id=96545de8&lang=scss&scoped=true": /*!************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/vue-style-loader/index.js??clonedRuleSet-22.use[0]!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-22.use[1]!./node_modules/@vue/vue-loader-v15/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-22.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-22.use[3]!./node_modules/@vue/vue-loader-v15/lib/index.js??vue-loader-options!./src/components/common/AddressFormDialog.vue?vue&type=style&index=0&id=96545de8&lang=scss&scoped=true ***! \************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { eval("{// style-loader: Adds some css to the DOM by adding a