/* * 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_views_Register_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/views/Register.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/views/Register.vue?vue&type=script&lang=js ***! \**********************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: \"RegisterPage\",\n data() {\n // 密码强度校验函数\n const validatePassword = (rule, value, callback) => {\n if (!/^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{8,30}$/.test(value)) {\n callback(new Error(\"请输入8-30位密码,必须同时包含字母和数字\"));\n } else {\n callback();\n }\n };\n\n // 用户名校验函数\n const validateUsername = (rule, value, callback) => {\n if (!/^(?!_+$)(?!\\d+$)[a-zA-Z0-9_]{4,32}$/.test(value)) {\n callback(new Error(\"请输入4-32位字符,只能包含字母、数字和下划线,不能为纯数字/纯下划线\"));\n } else {\n callback();\n }\n };\n return {\n form: {\n phone: \"\",\n code: \"\",\n username: \"\",\n password: \"\",\n confirmPassword: \"\"\n },\n rules: {\n phone: [{\n required: true,\n message: \"请输入手机号码\",\n trigger: \"blur\"\n }, {\n pattern: /^1\\d{10}$/,\n message: \"请输入正确的手机号码格式\",\n trigger: \"blur\"\n }],\n code: [{\n required: true,\n message: \"请输入验证码\",\n trigger: \"blur\"\n }, {\n pattern: /^\\d{6}$/,\n message: \"请输入6位数字验证码\",\n trigger: \"blur\"\n }],\n username: [{\n required: true,\n message: \"请输入用户名\",\n trigger: \"blur\"\n }, {\n validator: validateUsername,\n trigger: \"blur\"\n }],\n password: [{\n required: true,\n message: \"请输入密码\",\n trigger: \"blur\"\n }, {\n validator: validatePassword,\n trigger: \"blur\"\n }],\n confirmPassword: [{\n required: true,\n message: \"请确认密码\",\n trigger: \"blur\"\n }, {\n validator: (rule, value, callback) => {\n if (value !== this.form.password) {\n callback(new Error(\"两次输入密码不一致\"));\n } else {\n callback();\n }\n },\n trigger: \"blur\"\n }]\n },\n agreement: false,\n // 协议勾选状态\n codeBtnText: \"获取验证码\",\n codeBtnDisabled: false,\n submitting: false,\n // 注册按钮加载状态\n countdown: 60 // 验证码倒计时\n };\n },\n methods: {\n // 获取验证码\n handleGetCode() {\n if (!this.form.phone) {\n this.$message.warning(\"请先输入手机号码\");\n return;\n }\n // 模拟接口请求\n this.codeBtnDisabled = true;\n this.codeBtnText = `重新发送(${this.countdown}s)`;\n const timer = setInterval(() => {\n this.countdown--;\n this.codeBtnText = `重新发送(${this.countdown}s)`;\n if (this.countdown <= 0) {\n clearInterval(timer);\n this.codeBtnText = \"获取验证码\";\n this.codeBtnDisabled = false;\n this.countdown = 60;\n }\n }, 1000);\n // 实际项目中可替换为:\n // axios.post('/api/sendCode', { phone: this.form.phone }).then(res => {})\n },\n // 密码输入实时校验(可选)\n handlePasswordInput() {\n // 可在此实现密码强度实时反馈\n },\n // 注册提交\n handleRegister() {\n this.$refs.registerForm.validate(valid => {\n if (valid && this.agreement) {\n this.submitting = true;\n // 模拟注册请求\n setTimeout(() => {\n this.$message.success(\"注册成功!\");\n this.submitting = false;\n // 实际项目中可替换为:\n // axios.post('/api/register', this.form).then(res => {\n // this.$router.push('/login')\n // })\n }, 1500);\n } else if (!this.agreement) {\n this.$message.warning(\"请勾选用户协议\");\n }\n });\n }\n }\n});\n\n//# sourceURL=webpack://shiweisuzhou/./src/views/Register.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/views/Register.vue?vue&type=template&id=63ae9146&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/views/Register.vue?vue&type=template&id=63ae9146&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(\"div\", {\n staticClass: \"register-page\"\n }, [_vm._m(0), _c(\"div\", {\n staticClass: \"form-container\"\n }, [_c(\"h2\", {\n staticClass: \"form-title\"\n }, [_vm._v(\"注册页\")]), _c(\"el-form\", {\n ref: \"registerForm\",\n staticClass: \"register-form\",\n attrs: {\n model: _vm.form,\n rules: _vm.rules,\n \"label-width\": \"80px\"\n }\n }, [_c(\"el-form-item\", {\n attrs: {\n label: \"手机号码\",\n prop: \"phone\"\n }\n }, [_c(\"el-input\", {\n attrs: {\n placeholder: \"请输入手机号码\",\n clearable: \"\",\n \"prefix-icon\": \"el-icon-phone\"\n },\n model: {\n value: _vm.form.phone,\n callback: function ($$v) {\n _vm.$set(_vm.form, \"phone\", $$v);\n },\n expression: \"form.phone\"\n }\n })], 1), _c(\"el-form-item\", {\n attrs: {\n label: \"手机验证码\",\n prop: \"code\"\n }\n }, [_c(\"el-input\", {\n staticStyle: {\n width: \"60%\"\n },\n attrs: {\n placeholder: \"请输入验证码\",\n clearable: \"\",\n \"prefix-icon\": \"el-icon-message\"\n },\n model: {\n value: _vm.form.code,\n callback: function ($$v) {\n _vm.$set(_vm.form, \"code\", $$v);\n },\n expression: \"form.code\"\n }\n }), _c(\"el-button\", {\n staticClass: \"code-btn\",\n attrs: {\n type: \"success\",\n disabled: _vm.codeBtnDisabled\n },\n on: {\n click: _vm.handleGetCode\n }\n }, [_vm._v(\" \" + _vm._s(_vm.codeBtnText) + \" \")])], 1), _c(\"el-form-item\", {\n attrs: {\n label: \"用户名\",\n prop: \"username\"\n }\n }, [_c(\"el-input\", {\n attrs: {\n placeholder: \"账户唯一识别,可用来登录\",\n clearable: \"\",\n \"prefix-icon\": \"el-icon-user\"\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 }), _c(\"div\", {\n staticClass: \"form-tip\"\n }, [_vm._v(\" 请输入4-32位字符,只能包含英文字母、数字和下划线,不能为纯数字/不能为纯下划线 \")])], 1), _c(\"el-form-item\", {\n attrs: {\n label: \"设重密码\",\n prop: \"password\"\n }\n }, [_c(\"el-input\", {\n attrs: {\n type: \"password\",\n placeholder: \"请设置登录密码\",\n clearable: \"\",\n \"prefix-icon\": \"el-icon-lock\"\n },\n on: {\n input: _vm.handlePasswordInput\n },\n model: {\n value: _vm.form.password,\n callback: function ($$v) {\n _vm.$set(_vm.form, \"password\", $$v);\n },\n expression: \"form.password\"\n }\n }), _c(\"div\", {\n staticClass: \"form-tip\"\n }, [_vm._v(\" 请输入8-30位密码,密码必须同时包含字母和数字 \")])], 1), _c(\"el-form-item\", {\n attrs: {\n label: \"确认密码\",\n prop: \"confirmPassword\"\n }\n }, [_c(\"el-input\", {\n attrs: {\n type: \"password\",\n placeholder: \"请再次输入登录密码\",\n clearable: \"\",\n \"prefix-icon\": \"el-icon-lock\"\n },\n model: {\n value: _vm.form.confirmPassword,\n callback: function ($$v) {\n _vm.$set(_vm.form, \"confirmPassword\", $$v);\n },\n expression: \"form.confirmPassword\"\n }\n }), _c(\"div\", {\n staticClass: \"form-tip\"\n }, [_vm._v(\"请与上方填写的密码保持一致\")])], 1), _c(\"el-form-item\", [_c(\"el-checkbox\", {\n staticClass: \"agreement-checkbox\",\n model: {\n value: _vm.agreement,\n callback: function ($$v) {\n _vm.agreement = $$v;\n },\n expression: \"agreement\"\n }\n }, [_vm._v(\" 我已阅读并同意 \"), _c(\"router-link\", {\n staticClass: \"protocol-link\",\n attrs: {\n to: \"javascript:;\"\n }\n }, [_vm._v(\"《用户注册协议》\")]), _vm._v(\" 《\"), _c(\"router-link\", {\n staticClass: \"protocol-link\",\n attrs: {\n to: \"javascript:;\"\n }\n }, [_vm._v(\"隐私协议\")]), _vm._v(\"》 \")], 1)], 1), _c(\"el-form-item\", [_c(\"el-button\", {\n staticClass: \"register-btn\",\n attrs: {\n type: \"primary\",\n disabled: !_vm.agreement || _vm.submitting\n },\n on: {\n click: _vm.handleRegister\n }\n }, [_vm._v(\" \" + _vm._s(_vm.submitting ? \"注册中...\" : \"立即注册\") + \" \")])], 1), false ? 0 : _vm._e()], 1)], 1)]);\n};\nvar staticRenderFns = [function () {\n var _vm = this,\n _c = _vm._self._c;\n return _c(\"div\", {\n staticClass: \"header\"\n }, [_c(\"div\", {\n staticClass: \"logo-area\"\n }, [_c(\"img\", {\n staticClass: \"logo-img\",\n attrs: {\n src: __webpack_require__(/*! @/assets/logo.png */ \"./src/assets/logo.png\"),\n alt: \"logo\"\n }\n }), _c(\"span\", {\n staticClass: \"domain\"\n }, [_vm._v(\"yunming.com\")])]), _c(\"div\", {\n staticClass: \"hotline\"\n }, [_vm._v(\"400-123-4xxx\")])]);\n}];\nrender._withStripped = true;\n\n\n//# sourceURL=webpack://shiweisuzhou/./src/views/Register.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/views/Register.vue?vue&type=style&index=0&id=63ae9146&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/views/Register.vue?vue&type=style&index=0&id=63ae9146&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, \".register-page[data-v-63ae9146] {\\n min-height: 100vh;\\n background-color: #fff;\\n padding: 40px 20px;\\n}\\n.register-page .header[data-v-63ae9146] {\\n display: flex;\\n align-items: center;\\n justify-content: space-between;\\n margin-bottom: 40px;\\n}\\n.register-page .header .logo-area[data-v-63ae9146] {\\n display: flex;\\n align-items: center;\\n}\\n.register-page .header .logo-area .logo-img[data-v-63ae9146] {\\n height: 40px;\\n margin-right: 10px;\\n}\\n.register-page .header .logo-area .domain[data-v-63ae9146] {\\n font-size: 14px;\\n color: #999;\\n}\\n.register-page .header .hotline[data-v-63ae9146] {\\n font-size: 14px;\\n color: #666;\\n}\\n.register-page .form-container[data-v-63ae9146] {\\n max-width: 600px;\\n margin: 0 auto;\\n}\\n.register-page .form-container .form-title[data-v-63ae9146] {\\n font-size: 20px;\\n font-weight: bold;\\n margin-bottom: 30px;\\n color: #333;\\n}\\n.register-page .form-container .el-form-item[data-v-63ae9146] {\\n margin-bottom: 20px;\\n}\\n.register-page .form-container .code-btn[data-v-63ae9146] {\\n margin-left: 10px;\\n padding: 0 20px;\\n height: 40px;\\n}\\n.register-page .form-container .form-tip[data-v-63ae9146] {\\n font-size: 12px;\\n color: #999;\\n margin-top: 4px;\\n line-height: 1.4;\\n}\\n.register-page .form-container .agreement-checkbox[data-v-63ae9146] {\\n font-size: 12px;\\n color: #666;\\n}\\n.register-page .form-container .agreement-checkbox .protocol-link[data-v-63ae9146] {\\n color: #ff4d4f;\\n text-decoration: underline;\\n margin: 0 4px;\\n}\\n.register-page .form-container .register-btn[data-v-63ae9146] {\\n width: 100%;\\n background-color: #c00;\\n border: none;\\n}\\n.register-page .form-container .register-btn[data-v-63ae9146]:hover {\\n background-color: #a00;\\n}\\n.register-page .form-container .bottom-tip[data-v-63ae9146] {\\n text-align: center;\\n margin-top: 20px;\\n font-size: 12px;\\n color: #666;\\n}\\n.register-page .form-container .bottom-tip .supplier-link[data-v-63ae9146] {\\n color: #ff4d4f;\\n text-decoration: underline;\\n}\", \"\"]);\n// Exports\n/* harmony default export */ __webpack_exports__[\"default\"] = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://shiweisuzhou/./src/views/Register.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/views/Register.vue?vue&type=style&index=0&id=63ae9146&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/views/Register.vue?vue&type=style&index=0&id=63ae9146&lang=scss&scoped=true ***! \***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { eval("{// style-loader: Adds some css to the DOM by adding a