if (typeof Promise !== "undefined" && !Promise.prototype.finally) { Promise.prototype.finally = function(callback) { const promise = this.constructor; return this.then( (value) => promise.resolve(callback()).then(() => value), (reason) => promise.resolve(callback()).then(() => { throw reason; }) ); }; } ; if (typeof uni !== "undefined" && uni && uni.requireGlobal) { const global = uni.requireGlobal(); ArrayBuffer = global.ArrayBuffer; Int8Array = global.Int8Array; Uint8Array = global.Uint8Array; Uint8ClampedArray = global.Uint8ClampedArray; Int16Array = global.Int16Array; Uint16Array = global.Uint16Array; Int32Array = global.Int32Array; Uint32Array = global.Uint32Array; Float32Array = global.Float32Array; Float64Array = global.Float64Array; BigInt64Array = global.BigInt64Array; BigUint64Array = global.BigUint64Array; } ; if (uni.restoreGlobal) { uni.restoreGlobal(Vue, weex, plus, setTimeout, clearTimeout, setInterval, clearInterval); } (function(vue) { "use strict"; const _export_sfc = (sfc, props) => { const target = sfc.__vccOpts || sfc; for (const [key, val] of props) { target[key] = val; } return target; }; const _sfc_main$C = { name: "privacy-popup", props: { visible: { type: Boolean, default: false }, title: { type: String, default: "协议标题" }, content: { type: String, // 备用,主要用 slot default: "" } }, methods: { close() { this.$emit("close"); } } }; function _sfc_render$B(_ctx, _cache, $props, $setup, $data, $options) { return $props.visible ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "popup-mask", onClick: _cache[2] || (_cache[2] = vue.withModifiers(() => { }, ["stop"])) }, [ vue.createElementVNode("view", { class: "popup-content" }, [ vue.createElementVNode("view", { class: "popup-header" }, [ vue.createElementVNode( "text", { class: "popup-title" }, vue.toDisplayString($props.title), 1 /* TEXT */ ), vue.createElementVNode("view", { class: "close-icon", onClick: _cache[0] || (_cache[0] = (...args) => $options.close && $options.close(...args)) }, "×") ]), vue.createElementVNode("scroll-view", { "scroll-y": "", class: "popup-body" }, [ vue.renderSlot(_ctx.$slots, "default", {}, () => [ vue.createElementVNode( "text", { class: "default-text" }, vue.toDisplayString($props.content), 1 /* TEXT */ ) ], true) ]), vue.createElementVNode("view", { class: "popup-footer" }, [ vue.createElementVNode("button", { class: "confirm-btn", onClick: _cache[1] || (_cache[1] = (...args) => $options.close && $options.close(...args)) }, "我知道了") ]) ]) ])) : vue.createCommentVNode("v-if", true); } const __easycom_0 = /* @__PURE__ */ _export_sfc(_sfc_main$C, [["render", _sfc_render$B], ["__scopeId", "data-v-af3fbef1"], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/components/privacy-popup/privacy-popup.vue"]]); function formatAppLog(type, filename, ...args) { if (uni.__log__) { uni.__log__(type, filename, ...args); } else { console[type].apply(console, [...args, filename]); } } function resolveEasycom(component, easycom) { return typeof component === "string" ? easycom : component; } const BASE_URL = "http://192.168.1.118:8080"; const CLIENT_ID = "3"; const PLATFORM_CODE = "FlfAppPlatformCodeX9kR7mT3wQ5vZ8nB1jY6pD4sL0hC2gA"; const PLATFORM_ID = 2; const TENANT_ID = "000000"; const TOKEN_KEY = "fulfiller_token"; const USER_INFO_KEY = "fulfiller_user_info"; function getToken() { return uni.getStorageSync(TOKEN_KEY) || ""; } function setToken(token) { uni.setStorageSync(TOKEN_KEY, token); } function removeToken() { uni.removeStorageSync(TOKEN_KEY); } function isLoggedIn() { return !!getToken(); } function removeUserInfo() { uni.removeStorageSync(USER_INFO_KEY); } function clearAuth() { removeToken(); removeUserInfo(); } function request(options = {}) { const { url, method = "GET", data, header = {}, needToken = true } = options; const headers = { "Content-Type": "application/json;charset=utf-8", "clientid": CLIENT_ID, "X-Platform-Code": PLATFORM_CODE, ...header }; if (needToken) { const token = getToken(); if (token) { headers["Authorization"] = "Bearer " + token; } } return new Promise((resolve, reject) => { uni.request({ url: BASE_URL + url, method: method.toUpperCase(), data, header: headers, success: (res) => { const statusCode = res.statusCode; const result = res.data; if (statusCode === 401) { clearAuth(); uni.showToast({ title: "登录已过期,请重新登录", icon: "none" }); setTimeout(() => { uni.reLaunch({ url: "/pages/login/login" }); }, 1500); return reject(new Error("未授权")); } if (statusCode !== 200) { const msg = (result == null ? void 0 : result.msg) || `请求失败(${statusCode})`; uni.showToast({ title: msg, icon: "none" }); return reject(new Error(msg)); } if (result.code !== void 0 && result.code !== 200) { const msg = result.msg || "操作失败"; uni.showToast({ title: msg, icon: "none" }); return reject(new Error(msg)); } resolve(result); }, fail: (err) => { uni.showToast({ title: "网络异常,请稍后重试", icon: "none" }); reject(err); } }); }); } function loginByPassword(username, password) { return request({ url: "/auth/login", method: "POST", needToken: false, data: { tenantId: TENANT_ID, platformId: PLATFORM_ID, username, password, clientId: CLIENT_ID, grantType: "fulfiller_password" // 使用履约者专用认证策略 } }); } function loginBySms(phonenumber, smsCode) { return request({ url: "/auth/login", method: "POST", needToken: false, data: { tenantId: TENANT_ID, platformId: PLATFORM_ID, phonenumber, smsCode, clientId: CLIENT_ID, grantType: "fulfiller_sms" // 使用履约者专用认证策略 } }); } function sendSmsCode(phonenumber) { return request({ url: "/resource/sms/code", method: "GET", needToken: false, data: { phonenumber } }); } function logout() { return request({ url: "/auth/logout", method: "POST" }); } const logic$9 = { data() { return { currentTab: 0, // 0: 免密, 1: 密码 mobile: "", code: "", password: "", showPassword: false, isAgreed: false, countDown: 0, timer: null, showAgreementModal: false, agreementTitle: "", agreementContent: "", loginLoading: false }; }, methods: { showAgreement(type) { this.agreementTitle = type === 1 ? "用户服务协议" : "隐私政策"; if (type === 1) { this.agreementContent = "1. 服务条款\n欢迎使用宠宝平台。您在使用本服务时需遵守以下条款...\n\n2. 用户责任\n用户需对自己的行为负责...\n\n3. 账号管理\n请妥善保管您的账号密码..."; } else { this.agreementContent = "1. 信息收集\n为了提供服务,我们需要收集您的手机号、地理位置、设备信息等必要数据。\n\n2. 信息使用\n您的位置信息将用于订单匹配和路径规划;您的联系方式将用于接单通知和客户沟通。\n\n3. 信息保护\n我们将采取严格的安全措施保护您的个人信息,未经授权不会向第三方披露。"; } this.showAgreementModal = true; }, async getVerifyCode() { if (this.currentTab === 1) return; if (this.countDown > 0) return; if (!this.mobile || this.mobile.length !== 11) { uni.showToast({ title: "请输入正确的手机号", icon: "none" }); return; } try { const res = await sendSmsCode(this.mobile); this.countDown = 60; this.timer = setInterval(() => { this.countDown--; if (this.countDown <= 0) { clearInterval(this.timer); } }, 1e3); const devCode = res.data; if (devCode) { this.code = devCode; uni.showToast({ title: "验证码: " + devCode, icon: "none", duration: 3e3 }); } else { uni.showToast({ title: "验证码已发送", icon: "none" }); } } catch (err) { formatAppLog("error", "at pages/login/logic.js:60", "发送验证码失败:", err); } }, async handleLogin() { var _a; if (!this.isAgreed) { uni.showToast({ title: "请先同意用户协议", icon: "none" }); return; } if (!this.mobile) { uni.showToast({ title: "请输入手机号", icon: "none" }); return; } if (this.currentTab === 0) { if (!this.code) { uni.showToast({ title: "请输入验证码", icon: "none" }); return; } } else { if (!this.password) { uni.showToast({ title: "请输入密码", icon: "none" }); return; } } if (this.loginLoading) return; this.loginLoading = true; try { let res; if (this.currentTab === 0) { res = await loginBySms(this.mobile, this.code); } else { res = await loginByPassword(this.mobile, this.password); } const token = ((_a = res.data) == null ? void 0 : _a.access_token) || res.access_token; if (token) { setToken(token); } uni.showToast({ title: "登录成功", icon: "success" }); setTimeout(() => { uni.switchTab({ url: "/pages/home/index" }); }, 1e3); } catch (err) { formatAppLog("error", "at pages/login/logic.js:114", "登录失败:", err); } finally { this.loginLoading = false; } }, goToRecruit() { uni.navigateTo({ url: "/pages/recruit/landing" }); }, goToForgotPwd() { uni.navigateTo({ url: "/pages/login/reset-pwd-verify" }); } } }; const _imports_0$4 = "/static/header.png"; const _imports_1$8 = "/static/logo.png"; const _sfc_main$B = { ...logic$9, components: { PrivacyPopup: __easycom_0 } }; function _sfc_render$A(_ctx, _cache, $props, $setup, $data, $options) { const _component_privacy_popup = resolveEasycom(vue.resolveDynamicComponent("privacy-popup"), __easycom_0); return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createElementVNode("view", { class: "banner-area" }, [ vue.createElementVNode("image", { class: "banner-img", src: _imports_0$4, mode: "widthFix" }) ]), vue.createElementVNode("view", { class: "content-card" }, [ vue.createElementVNode("view", { class: "logo-wrapper" }, [ vue.createElementVNode("image", { class: "logo-img", src: _imports_1$8, mode: "widthFix" }) ]), vue.createElementVNode("view", { class: "tabs" }, [ vue.createElementVNode( "view", { class: vue.normalizeClass(["tab-item", { active: _ctx.currentTab === 0 }]), onClick: _cache[0] || (_cache[0] = ($event) => _ctx.currentTab = 0) }, [ vue.createElementVNode("text", { class: "tab-text" }, "免密登录"), _ctx.currentTab === 0 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "tab-indicator" })) : vue.createCommentVNode("v-if", true) ], 2 /* CLASS */ ), vue.createElementVNode("view", { class: "divider" }), vue.createElementVNode( "view", { class: vue.normalizeClass(["tab-item", { active: _ctx.currentTab === 1 }]), onClick: _cache[1] || (_cache[1] = ($event) => _ctx.currentTab = 1) }, [ vue.createElementVNode("text", { class: "tab-text" }, "密码登录"), _ctx.currentTab === 1 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "tab-indicator" })) : vue.createCommentVNode("v-if", true) ], 2 /* CLASS */ ) ]), vue.createElementVNode("view", { class: "form-area" }, [ vue.createElementVNode("view", { class: "input-group" }, [ vue.createElementVNode("view", { class: "area-code" }, [ vue.createElementVNode("text", null, "+86"), vue.createElementVNode("text", { class: "arrow" }, "﹀") ]), vue.withDirectives(vue.createElementVNode( "input", { class: "input", type: "number", placeholder: "手机号", "placeholder-style": "color: #ccc", "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => _ctx.mobile = $event), maxlength: "11" }, null, 512 /* NEED_PATCH */ ), [ [vue.vModelText, _ctx.mobile] ]) ]), _ctx.currentTab === 0 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "input-group" }, [ vue.withDirectives(vue.createElementVNode( "input", { class: "input", type: "number", placeholder: "验证码", "placeholder-style": "color: #ccc", "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => _ctx.code = $event), maxlength: "6" }, null, 512 /* NEED_PATCH */ ), [ [vue.vModelText, _ctx.code] ]), vue.createElementVNode("view", { class: "get-code-btn", onClick: _cache[4] || (_cache[4] = (...args) => _ctx.getVerifyCode && _ctx.getVerifyCode(...args)) }, [ vue.createElementVNode( "text", { class: "code-text" }, vue.toDisplayString(_ctx.countDown > 0 ? `${_ctx.countDown}s后重试` : "获取验证码"), 1 /* TEXT */ ) ]) ])) : vue.createCommentVNode("v-if", true), _ctx.currentTab === 1 ? (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "input-group" }, [ vue.withDirectives(vue.createElementVNode("input", { class: "input", password: !_ctx.showPassword, type: "text", placeholder: "请输入密码", "placeholder-style": "color: #ccc", "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => _ctx.password = $event) }, null, 8, ["password"]), [ [vue.vModelText, _ctx.password] ]), vue.createElementVNode("view", { class: "eye-icon", onClick: _cache[6] || (_cache[6] = ($event) => _ctx.showPassword = !_ctx.showPassword) }, [ _ctx.showPassword ? (vue.openBlock(), vue.createElementBlock("svg", { key: 0, class: "svg-icon", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, [ vue.createElementVNode("path", { d: "M12 4.5C7 4.5 2.73 7.61 1 12C2.73 16.39 7 19.5 12 19.5C17 19.5 21.27 16.39 23 12C21.27 7.61 17 4.5 12 4.5ZM12 17C9.24 17 7 14.76 7 12C7 9.24 9.24 7 12 7C14.76 7 17 9.24 17 12C17 14.76 14.76 17 12 17ZM12 9C10.34 9 9 10.34 9 12C9 13.66 10.34 15 12 15C13.66 15 15 13.66 15 12C15 10.34 13.66 9 12 9Z", fill: "#CCCCCC" }) ])) : (vue.openBlock(), vue.createElementBlock("svg", { key: 1, class: "svg-icon", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, [ vue.createElementVNode("path", { d: "M12 7C7 7 2.73 10.11 1 14.5", stroke: "#CCCCCC", "stroke-width": "2", "stroke-linecap": "round" }), vue.createElementVNode("path", { d: "M23 14.5C21.27 10.11 17 7 12 7", stroke: "#CCCCCC", "stroke-width": "2", "stroke-linecap": "round" }), vue.createElementVNode("path", { d: "M12 7V4", stroke: "#CCCCCC", "stroke-width": "2", "stroke-linecap": "round" }), vue.createElementVNode("path", { d: "M16 8L18 5", stroke: "#CCCCCC", "stroke-width": "2", "stroke-linecap": "round" }), vue.createElementVNode("path", { d: "M8 8L6 5", stroke: "#CCCCCC", "stroke-width": "2", "stroke-linecap": "round" }), vue.createElementVNode("path", { d: "M20 10L22 8", stroke: "#CCCCCC", "stroke-width": "2", "stroke-linecap": "round" }), vue.createElementVNode("path", { d: "M4 10L2 8", stroke: "#CCCCCC", "stroke-width": "2", "stroke-linecap": "round" }) ])) ]) ])) : vue.createCommentVNode("v-if", true), _ctx.currentTab === 1 ? (vue.openBlock(), vue.createElementBlock("view", { key: 2, class: "forgot-pwd" }, [ vue.createElementVNode("text", { onClick: _cache[7] || (_cache[7] = (...args) => _ctx.goToForgotPwd && _ctx.goToForgotPwd(...args)) }, "忘记密码?") ])) : vue.createCommentVNode("v-if", true), vue.createElementVNode("button", { class: "login-btn", onClick: _cache[8] || (_cache[8] = (...args) => _ctx.handleLogin && _ctx.handleLogin(...args)) }, "登 录"), vue.createElementVNode("view", { class: "agreement" }, [ vue.createElementVNode( "view", { class: vue.normalizeClass(["checkbox", { checked: _ctx.isAgreed }]), onClick: _cache[9] || (_cache[9] = ($event) => _ctx.isAgreed = !_ctx.isAgreed) }, [ _ctx.isAgreed ? (vue.openBlock(), vue.createElementBlock("text", { key: 0, class: "check-mark" }, "✓")) : vue.createCommentVNode("v-if", true) ], 2 /* CLASS */ ), vue.createElementVNode("text", { class: "agree-text" }, [ vue.createTextVNode(" 我已经阅读并同意 "), vue.createElementVNode("text", { class: "link", onClick: _cache[10] || (_cache[10] = vue.withModifiers(($event) => _ctx.showAgreement(1), ["stop"])) }, "《用户服务协议》"), vue.createTextVNode(" 和 "), vue.createElementVNode("text", { class: "link", onClick: _cache[11] || (_cache[11] = vue.withModifiers(($event) => _ctx.showAgreement(2), ["stop"])) }, "《隐私政策》") ]) ]) ]), vue.createElementVNode("view", { class: "footer-recruit", onClick: _cache[12] || (_cache[12] = (...args) => _ctx.goToRecruit && _ctx.goToRecruit(...args)) }, [ vue.createElementVNode("view", { class: "recruit-badge" }, [ (vue.openBlock(), vue.createElementBlock("svg", { class: "svg-icon flag-icon", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", style: { "width": "30rpx", "height": "30rpx" } }, [ vue.createElementVNode("path", { d: "M4 14V4H18L17 9L18 14H4Z", stroke: "#FF5722", "stroke-width": "2", "stroke-linejoin": "round" }), vue.createElementVNode("path", { d: "M4 22V14", stroke: "#FF5722", "stroke-width": "2", "stroke-linecap": "round" }) ])), vue.createElementVNode("text", null, " 宠宝履约者招募") ]) ]), vue.createVNode(_component_privacy_popup, { visible: _ctx.showAgreementModal, title: _ctx.agreementTitle, content: _ctx.agreementContent, onClose: _cache[13] || (_cache[13] = ($event) => _ctx.showAgreementModal = false) }, null, 8, ["visible", "title", "content"]) ]) ]); } const PagesLoginLogin = /* @__PURE__ */ _export_sfc(_sfc_main$B, [["render", _sfc_render$A], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/login/login.vue"]]); const logic$8 = { data() { return { statusBarHeight: 20 // 默认状态栏高度 }; }, onLoad() { const sysInfo = uni.getSystemInfoSync(); this.statusBarHeight = sysInfo.statusBarHeight || 20; }, methods: { goBack() { const pages = getCurrentPages(); if (pages.length > 1) { uni.navigateBack(); } else { uni.reLaunch({ url: "/pages/login/login" }); } }, goToForm() { uni.navigateTo({ url: "/pages/recruit/form" }); } } }; const _sfc_main$A = logic$8; function _sfc_render$z(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createElementVNode( "view", { style: vue.normalizeStyle({ height: _ctx.statusBarHeight + "px" }) }, null, 4 /* STYLE */ ), vue.createElementVNode("view", { class: "nav-bar" }, [ vue.createElementVNode("view", { class: "back-icon", onClick: _cache[0] || (_cache[0] = (...args) => _ctx.goBack && _ctx.goBack(...args)) }, "‹") ]), vue.createElementVNode("view", { class: "header-area" }, [ vue.createElementVNode("text", { class: "main-title" }, "加入宠宝履约者"), vue.createElementVNode("text", { class: "sub-title" }, "月薪最高可达1.5万元") ]), vue.createElementVNode("view", { class: "content-card" }, [ vue.createElementVNode("view", { class: "benefit-item" }, [ vue.createElementVNode("view", { class: "icon-circle icon-money" }, [ vue.createElementVNode("text", { class: "icon-text" }, "¥") ]), vue.createElementVNode("view", { class: "info" }, [ vue.createElementVNode("text", { class: "item-title" }, "1、收入可观"), vue.createElementVNode("text", { class: "item-desc" }, "小默配送为您提供一种全新的赚钱选择,利用空闲时间,获得更多收入。") ]) ]), vue.createElementVNode("view", { class: "benefit-item" }, [ vue.createElementVNode("view", { class: "icon-circle icon-loc" }, [ vue.createElementVNode("text", { class: "icon-text" }, "📍") ]), vue.createElementVNode("view", { class: "info" }, [ vue.createElementVNode("text", { class: "item-title" }, "2、地点灵活"), vue.createElementVNode("text", { class: "item-desc" }, "小默配送覆盖国内各城市与港澳台等地,您可随时就近使用。") ]) ]), vue.createElementVNode("view", { class: "benefit-item" }, [ vue.createElementVNode("view", { class: "icon-circle icon-clock" }, [ vue.createElementVNode("text", { class: "icon-text" }, "🕒") ]), vue.createElementVNode("view", { class: "info" }, [ vue.createElementVNode("text", { class: "item-title" }, "3、时间自由"), vue.createElementVNode("text", { class: "item-desc" }, "不必再受繁琐事务约束,加入小默配送,自由分配个人时间,为自己工作。") ]) ]) ]), vue.createElementVNode("view", { class: "footer-area" }, [ vue.createElementVNode("button", { class: "join-btn", onClick: _cache[1] || (_cache[1] = (...args) => _ctx.goToForm && _ctx.goToForm(...args)) }, "我要加入"), vue.createElementVNode("view", { class: "faq" }, [ vue.createElementVNode("text", { class: "help-icon" }, "?"), vue.createTextVNode(" 常见问题 ") ]) ]) ]); } const PagesRecruitLanding = /* @__PURE__ */ _export_sfc(_sfc_main$A, [["render", _sfc_render$z], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/recruit/landing.vue"]]); function getMyProfile() { return request({ url: "/fulfiller/fulfiller/my", method: "GET" }); } function submitAudit(data) { return request({ url: "/fulfiller/app/audit/submit", method: "POST", needToken: false, data }); } function getAreaChildren(parentId = 0) { return request({ url: "/fulfiller/app/area/children", method: "GET", needToken: false, data: { parentId } }); } function uploadFile(filePath) { return new Promise((resolve, reject) => { const token = uni.getStorageSync("fulfiller_token"); uni.uploadFile({ url: BASE_URL + "/fulfiller/app/upload", filePath, name: "file", header: { "clientid": CLIENT_ID, "X-Platform-Code": PLATFORM_CODE, "Authorization": token ? `Bearer ${token}` : "" }, success: (res) => { try { const data = JSON.parse(res.data); if (data.code === 200) { resolve(data); } else { uni.showToast({ title: data.msg || "上传失败", icon: "none" }); reject(data); } } catch (e) { reject(e); } }, fail: (err) => { uni.showToast({ title: "上传失败", icon: "none" }); reject(err); } }); }); } function updateAvatar(avatar) { return request({ url: "/fulfiller/fulfiller/my/avatar", method: "PUT", data: { avatar } }); } function updateName(name) { return request({ url: "/fulfiller/fulfiller/my/name", method: "PUT", data: { name } }); } function updateStatus(status) { return request({ url: "/fulfiller/fulfiller/my/status", method: "PUT", data: { status } }); } function updateCity(cityCode, cityName) { return request({ url: "/fulfiller/fulfiller/my/city", method: "PUT", data: { cityCode, cityName } }); } function getAuthInfo() { return request({ url: "/fulfiller/fulfiller/my/auth", method: "GET" }); } function updatePhone(phone, code) { return request({ url: "/fulfiller/fulfiller/my/phone", method: "PUT", data: { phone, code } }); } function updatePassword(oldPassword, newPassword) { return request({ url: "/fulfiller/fulfiller/my/password", method: "PUT", data: { oldPassword, newPassword } }); } function deleteAccount() { return request({ url: "/fulfiller/fulfiller/my/account", method: "DELETE" }); } function updateAuthInfo(data) { return request({ url: "/fulfiller/fulfiller/my/auth", method: "POST", data }); } function getPendingOrders(params) { return request({ url: "/order/subOrder/listPendingAccept", method: "GET", data: params }); } function acceptOrder(orderId) { return request({ url: "/order/subOrder/accept", method: "PUT", data: { orderId } }); } function getOrderCount() { return request({ url: "/order/subOrder/count", method: "GET" }); } function getMyOrders(params) { return request({ url: "/order/subOrder/listOnMyOrder", method: "GET", data: params }); } function getOrderInfo(id) { return request({ url: `/order/subOrder/getInfo?id=${id}`, method: "GET" }); } function getOrderLogs(orderId) { return request({ url: `/order/subOrderLog/list?orderId=${orderId}`, method: "GET" }); } function clockIn(data) { return request({ url: "/order/subOrder/clockIn", method: "PUT", data }); } const logic$7 = { data() { return { formData: { mobile: "", code: "", name: "", gender: 1, // 1男 2女 birthday: "", password: "", serviceType: [], city: "", station: "", stationId: null }, showPwd: false, isAgreed: false, serviceTypes: ["宠物接送", "上门喂遛", "上门洗护"], // 验证码倒计时 countDown: 0, timer: null, // 日期选择器相关 showPicker: false, years: [], months: [], days: [], pickerValue: [0, 0, 0], tempYear: 0, tempMonth: 0, tempDay: 0, // 城市选择器相关(从后端加载) showCityPicker: false, selectStep: 0, selectedPathway: [], currentList: [], selectedCityId: null, // 站点选择器相关(从后端加载) showStationPicker: false, stationList: [], // 协议弹窗 showPrivacy: false, privacyTitle: "", privacyContent: "" }; }, created() { this.initDateData(); }, beforeDestroy() { if (this.timer) clearInterval(this.timer); }, methods: { initDateData() { const now = /* @__PURE__ */ new Date(); const currentYear = now.getFullYear(); for (let i = 1980; i <= currentYear + 5; i++) { this.years.push(i); } for (let i = 1; i <= 12; i++) { this.months.push(i); } for (let i = 1; i <= 31; i++) { this.days.push(i); } }, // 打开选择器 openPicker() { const dateStr = this.formData.birthday || "2000-01-01"; const [y, m, d] = dateStr.split("-").map(Number); const yIndex = this.years.indexOf(y); const mIndex = this.months.indexOf(m); const dIndex = this.days.indexOf(d); this.pickerValue = [ yIndex > -1 ? yIndex : 0, mIndex > -1 ? mIndex : 0, dIndex > -1 ? dIndex : 0 ]; this.tempYear = this.years[this.pickerValue[0]]; this.tempMonth = this.months[this.pickerValue[1]]; this.tempDay = this.days[this.pickerValue[2]]; this.showPicker = true; }, closePicker() { this.showPicker = false; }, onPickerChange(e) { const val = e.detail.value; this.tempYear = this.years[val[0]]; this.tempMonth = this.months[val[1]]; this.tempDay = this.days[val[2]]; }, confirmPicker() { const mStr = this.tempMonth < 10 ? "0" + this.tempMonth : this.tempMonth; const dStr = this.tempDay < 10 ? "0" + this.tempDay : this.tempDay; this.formData.birthday = `${this.tempYear}-${mStr}-${dStr}`; this.closePicker(); }, toggleService(item) { const idx = this.formData.serviceType.indexOf(item); if (idx > -1) { this.formData.serviceType.splice(idx, 1); } else { this.formData.serviceType.push(item); } }, // 验证码 async getVerifyCode() { if (this.countDown > 0) return; if (!this.formData.mobile || this.formData.mobile.length !== 11) { uni.showToast({ title: "请输入正确的手机号", icon: "none" }); return; } try { const res = await sendSmsCode(this.formData.mobile); this.countDown = 60; this.timer = setInterval(() => { this.countDown--; if (this.countDown <= 0) clearInterval(this.timer); }, 1e3); const devCode = res.data; if (devCode) { this.formData.code = devCode; uni.showToast({ title: "验证码: " + devCode, icon: "none", duration: 3e3 }); } else { uni.showToast({ title: "验证码已发送", icon: "none" }); } } catch (err) { formatAppLog("error", "at pages/recruit/logic.js:154", "发送验证码失败:", err); } }, // 城市选择器 logic(从后端加载) async openCityPicker() { this.showCityPicker = true; if (this.selectedPathway.length === 0) { await this.resetCityPicker(); } }, async resetCityPicker() { this.selectStep = 0; this.selectedPathway = []; await this.loadAreaChildren(0); }, closeCityPicker() { this.showCityPicker = false; }, async loadAreaChildren(parentId) { try { const res = await getAreaChildren(parentId); this.currentList = (res.data || []).filter((item) => item.type !== 2).map((item) => ({ id: item.id, name: item.name, type: item.type, parentId: item.parentId })); } catch (err) { formatAppLog("error", "at pages/recruit/logic.js:186", "加载区域数据失败:", err); this.currentList = []; } }, async selectCityItem(item) { this.selectedPathway[this.selectStep] = item; if (item.type === 0) { this.selectStep++; this.selectedPathway = this.selectedPathway.slice(0, this.selectStep); await this.loadAreaChildren(item.id); if (this.currentList.length === 0) { this.selectedCityId = item.id; this.confirmCity(); } } else { this.selectedCityId = item.id; this.confirmCity(); } }, async jumpToStep(step) { this.selectStep = step; if (step === 0) { await this.loadAreaChildren(0); } else { const parent = this.selectedPathway[step - 1]; if (parent) { await this.loadAreaChildren(parent.id); } } }, confirmCity() { const fullPath = this.selectedPathway.map((i) => i.name).join(" "); this.formData.city = fullPath; this.formData.station = ""; this.formData.stationId = null; const lastSelected = this.selectedPathway[this.selectedPathway.length - 1]; if (lastSelected) { this.loadStations(lastSelected.id); } this.closeCityPicker(); }, // 站点选择器(从后端加载,只取type=2的站点) async loadStations(parentId) { try { const res = await getAreaChildren(parentId); this.stationList = (res.data || []).filter((item) => item.type === 2).map((item) => ({ id: item.id, name: item.name })); } catch (err) { formatAppLog("error", "at pages/recruit/logic.js:245", "加载站点数据失败:", err); this.stationList = []; } }, openStationPicker() { if (this.stationList.length === 0) { uni.showToast({ title: "请先选择工作城市", icon: "none" }); return; } this.showStationPicker = true; }, closeStationPicker() { this.showStationPicker = false; }, selectStation(item) { this.formData.station = item.name; this.formData.stationId = item.id; this.closeStationPicker(); }, openPrivacy() { this.privacyTitle = "宠宝履约者说明"; this.privacyContent = "1. 履约职责\n作为宠宝履约者,您需要按照平台标准完成宠物接送、喂遛或洗护服务,确保宠物安全与健康。\n\n2. 结算方式\n服务费用将根据订单类型和距离计算,定期结算至您的账户。具体结算周期请查看钱包说明。\n\n3. 行为规范\n请在这个过程中保持专业,穿着整洁,礼貌待人。严禁虐待宠物,违反者将承担法律责任。"; this.showPrivacy = true; }, goToAuth() { if (!this.isAgreed) { uni.showToast({ title: "请勾选协议", icon: "none" }); return; } if (!this.formData.mobile || this.formData.mobile.length !== 11) { uni.showToast({ title: "请输入正确的手机号", icon: "none" }); return; } if (!this.formData.name) { uni.showToast({ title: "请输入姓名", icon: "none" }); return; } if (this.formData.serviceType.length === 0) { uni.showToast({ title: "请选择服务类型", icon: "none" }); return; } uni.setStorageSync("recruit_form_data", JSON.stringify(this.formData)); const services = JSON.stringify(this.formData.serviceType); uni.navigateTo({ url: `/pages/recruit/auth?services=${services}` }); } } }; const _sfc_main$z = { ...logic$7, components: { PrivacyPopup: __easycom_0 } }; function _sfc_render$y(_ctx, _cache, $props, $setup, $data, $options) { const _component_privacy_popup = resolveEasycom(vue.resolveDynamicComponent("privacy-popup"), __easycom_0); return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createElementVNode("view", { class: "card" }, [ vue.createElementVNode("view", { class: "form-item" }, [ vue.createElementVNode("text", { class: "label" }, "手机号"), vue.createElementVNode("view", { class: "input-box" }, [ vue.createElementVNode("view", { class: "prefix-area" }, [ vue.createElementVNode("text", { class: "prefix" }, "+86"), vue.createElementVNode("text", { class: "arrow-down" }, "﹀") ]), vue.withDirectives(vue.createElementVNode( "input", { class: "input", type: "number", "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => _ctx.formData.mobile = $event) }, null, 512 /* NEED_PATCH */ ), [ [vue.vModelText, _ctx.formData.mobile] ]) ]) ]), vue.createElementVNode("view", { class: "form-item" }, [ vue.createElementVNode("text", { class: "label" }, "验证码"), vue.createElementVNode("view", { class: "input-box" }, [ vue.withDirectives(vue.createElementVNode( "input", { class: "input", type: "number", "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => _ctx.formData.code = $event), placeholder: "验证码" }, null, 512 /* NEED_PATCH */ ), [ [vue.vModelText, _ctx.formData.code] ]), vue.createElementVNode( "text", { class: "get-code-text", onClick: _cache[2] || (_cache[2] = (...args) => _ctx.getVerifyCode && _ctx.getVerifyCode(...args)) }, vue.toDisplayString(_ctx.countDown > 0 ? _ctx.countDown + "s" : "获取验证码"), 1 /* TEXT */ ) ]) ]), vue.createElementVNode("view", { class: "form-item" }, [ vue.createElementVNode("text", { class: "label" }, "姓名"), vue.createElementVNode("view", { class: "input-box" }, [ vue.withDirectives(vue.createElementVNode( "input", { class: "input", type: "text", "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => _ctx.formData.name = $event) }, null, 512 /* NEED_PATCH */ ), [ [vue.vModelText, _ctx.formData.name] ]) ]) ]), vue.createElementVNode("view", { class: "form-item" }, [ vue.createElementVNode("text", { class: "label" }, "性别"), vue.createElementVNode("view", { class: "gender-group" }, [ vue.createElementVNode("view", { class: "radio-item", onClick: _cache[4] || (_cache[4] = ($event) => _ctx.formData.gender = 1) }, [ vue.createElementVNode( "text", { class: vue.normalizeClass(["radio-icon", { active: _ctx.formData.gender === 1 }]) }, vue.toDisplayString(_ctx.formData.gender === 1 ? "♂" : "○"), 3 /* TEXT, CLASS */ ), vue.createElementVNode( "text", { class: vue.normalizeClass(["radio-label", { active: _ctx.formData.gender === 1 }]) }, " 男", 2 /* CLASS */ ) ]), vue.createElementVNode("view", { class: "radio-item", onClick: _cache[5] || (_cache[5] = ($event) => _ctx.formData.gender = 2) }, [ vue.createElementVNode( "text", { class: vue.normalizeClass(["radio-icon", { active: _ctx.formData.gender === 2 }]) }, vue.toDisplayString(_ctx.formData.gender === 2 ? "♀" : "○"), 3 /* TEXT, CLASS */ ), vue.createElementVNode( "text", { class: vue.normalizeClass(["radio-label", { active: _ctx.formData.gender === 2 }]) }, " 女", 2 /* CLASS */ ) ]) ]) ]), vue.createElementVNode("view", { class: "form-item" }, [ vue.createElementVNode("text", { class: "label" }, "生日"), vue.createElementVNode("view", { class: "input-box", onClick: _cache[6] || (_cache[6] = (...args) => _ctx.openPicker && _ctx.openPicker(...args)) }, [ vue.createElementVNode( "text", null, vue.toDisplayString(_ctx.formData.birthday || "请选择生日"), 1 /* TEXT */ ), (vue.openBlock(), vue.createElementBlock("svg", { class: "arrow-right", style: { "width": "24rpx", "height": "24rpx", "margin-left": "auto" }, viewBox: "0 0 1024 1024", version: "1.1", xmlns: "http://www.w3.org/2000/svg" }, [ vue.createElementVNode("path", { d: "M340.864 149.312a30.592 30.592 0 0 0 0 42.752L652.736 512 340.864 831.872a30.592 30.592 0 0 0 0 42.752 29.12 29.12 0 0 0 41.728 0L714.24 534.336a32 32 0 0 0 0-45.056L382.592 149.312a29.12 29.12 0 0 0-41.728 0z", fill: "#CCCCCC" }) ])) ]) ]), vue.createElementVNode("view", { class: "form-item" }, [ vue.createElementVNode("text", { class: "label" }, "密码"), vue.createElementVNode("view", { class: "input-box" }, [ vue.withDirectives(vue.createElementVNode("input", { class: "input", password: !_ctx.showPwd, "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => _ctx.formData.password = $event), placeholder: "设置登录密码" }, null, 8, ["password"]), [ [vue.vModelText, _ctx.formData.password] ]), vue.createElementVNode("view", { class: "monkey-icon", onClick: _cache[8] || (_cache[8] = ($event) => _ctx.showPwd = !_ctx.showPwd) }, [ _ctx.showPwd ? (vue.openBlock(), vue.createElementBlock("svg", { key: 0, class: "svg-icon", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, [ vue.createElementVNode("path", { d: "M12 4.5C7 4.5 2.73 7.61 1 12C2.73 16.39 7 19.5 12 19.5C17 19.5 21.27 16.39 23 12C21.27 7.61 17 4.5 12 4.5ZM12 17C9.24 17 7 14.76 7 12C7 9.24 9.24 7 12 7C14.76 7 17 9.24 17 12C17 14.76 14.76 17 12 17ZM12 9C10.34 9 9 10.34 9 12C9 13.66 10.34 15 12 15C13.66 15 15 13.66 15 12C15 10.34 13.66 9 12 9Z", fill: "#CCCCCC" }) ])) : (vue.openBlock(), vue.createElementBlock("svg", { key: 1, class: "svg-icon", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, [ vue.createElementVNode("path", { d: "M12 7C7 7 2.73 10.11 1 14.5", stroke: "#CCCCCC", "stroke-width": "2", "stroke-linecap": "round" }), vue.createElementVNode("path", { d: "M23 14.5C21.27 10.11 17 7 12 7", stroke: "#CCCCCC", "stroke-width": "2", "stroke-linecap": "round" }), vue.createElementVNode("path", { d: "M12 7V4", stroke: "#CCCCCC", "stroke-width": "2", "stroke-linecap": "round" }), vue.createElementVNode("path", { d: "M16 8L18 5", stroke: "#CCCCCC", "stroke-width": "2", "stroke-linecap": "round" }), vue.createElementVNode("path", { d: "M8 8L6 5", stroke: "#CCCCCC", "stroke-width": "2", "stroke-linecap": "round" }), vue.createElementVNode("path", { d: "M20 10L22 8", stroke: "#CCCCCC", "stroke-width": "2", "stroke-linecap": "round" }), vue.createElementVNode("path", { d: "M4 10L2 8", stroke: "#CCCCCC", "stroke-width": "2", "stroke-linecap": "round" }) ])) ]) ]) ]) ]), vue.createElementVNode("view", { class: "card" }, [ vue.createElementVNode("view", { class: "section-title" }, "服务类型"), vue.createElementVNode("view", { class: "service-types" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(_ctx.serviceTypes, (item, index) => { return vue.openBlock(), vue.createElementBlock("view", { class: vue.normalizeClass(["type-btn", { selected: _ctx.formData.serviceType.includes(item) }]), key: index, onClick: ($event) => _ctx.toggleService(item) }, vue.toDisplayString(item), 11, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ]), vue.createElementVNode("view", { class: "form-item" }, [ vue.createElementVNode("text", { class: "label" }, "工作城市"), vue.createElementVNode("view", { class: "input-box", onClick: _cache[9] || (_cache[9] = (...args) => _ctx.openCityPicker && _ctx.openCityPicker(...args)) }, [ vue.createElementVNode( "text", { style: vue.normalizeStyle({ color: _ctx.formData.city ? "#333" : "#ccc" }) }, vue.toDisplayString(_ctx.formData.city || "请选择工作城市"), 5 /* TEXT, STYLE */ ), (vue.openBlock(), vue.createElementBlock("svg", { class: "arrow-right", style: { "width": "24rpx", "height": "24rpx", "margin-left": "auto" }, viewBox: "0 0 1024 1024", version: "1.1", xmlns: "http://www.w3.org/2000/svg" }, [ vue.createElementVNode("path", { d: "M340.864 149.312a30.592 30.592 0 0 0 0 42.752L652.736 512 340.864 831.872a30.592 30.592 0 0 0 0 42.752 29.12 29.12 0 0 0 41.728 0L714.24 534.336a32 32 0 0 0 0-45.056L382.592 149.312a29.12 29.12 0 0 0-41.728 0z", fill: "#CCCCCC" }) ])) ]) ]), vue.createElementVNode("view", { class: "form-item" }, [ vue.createElementVNode("text", { class: "label" }, "服务站点"), vue.createElementVNode("view", { class: "input-box", onClick: _cache[10] || (_cache[10] = (...args) => _ctx.openStationPicker && _ctx.openStationPicker(...args)) }, [ vue.createElementVNode( "text", { style: vue.normalizeStyle({ color: _ctx.formData.station ? "#333" : "#ccc" }) }, vue.toDisplayString(_ctx.formData.station || "请选择服务站点"), 5 /* TEXT, STYLE */ ), (vue.openBlock(), vue.createElementBlock("svg", { class: "arrow-right", style: { "width": "24rpx", "height": "24rpx", "margin-left": "auto" }, viewBox: "0 0 1024 1024", version: "1.1", xmlns: "http://www.w3.org/2000/svg" }, [ vue.createElementVNode("path", { d: "M340.864 149.312a30.592 30.592 0 0 0 0 42.752L652.736 512 340.864 831.872a30.592 30.592 0 0 0 0 42.752 29.12 29.12 0 0 0 41.728 0L714.24 534.336a32 32 0 0 0 0-45.056L382.592 149.312a29.12 29.12 0 0 0-41.728 0z", fill: "#CCCCCC" }) ])) ]) ]) ]), vue.createElementVNode( "view", { class: vue.normalizeClass(["picker-mask", { show: _ctx.showCityPicker }]), onClick: _cache[14] || (_cache[14] = (...args) => _ctx.closeCityPicker && _ctx.closeCityPicker(...args)) }, [ vue.createElementVNode("view", { class: "picker-content", onClick: _cache[13] || (_cache[13] = vue.withModifiers(() => { }, ["stop"])) }, [ vue.createElementVNode("view", { class: "picker-header" }, [ vue.createElementVNode("text", { class: "picker-btn-cancel", onClick: _cache[11] || (_cache[11] = (...args) => _ctx.closeCityPicker && _ctx.closeCityPicker(...args)) }, "取消"), vue.createElementVNode("text", { class: "picker-title" }, "请选择工作城市"), vue.createElementVNode("text", { class: "picker-btn-confirm", onClick: _cache[12] || (_cache[12] = (...args) => _ctx.confirmCity && _ctx.confirmCity(...args)) }, "确定") ]), vue.createElementVNode("view", { class: "picker-body" }, [ vue.createElementVNode("view", { class: "timeline-area" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(_ctx.selectedPathway, (item, index) => { return vue.openBlock(), vue.createElementBlock("view", { class: "timeline-item", key: index, onClick: ($event) => _ctx.jumpToStep(index) }, [ vue.createElementVNode("view", { class: "timeline-dot" }), vue.createElementVNode( "text", null, vue.toDisplayString(item.name), 1 /* TEXT */ ) ], 8, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )), _ctx.selectStep === _ctx.selectedPathway.length ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "timeline-item active" }, [ vue.createElementVNode("view", { class: "timeline-dot" }), vue.createElementVNode("text", null, "请选择") ])) : vue.createCommentVNode("v-if", true) ]), vue.createElementVNode("scroll-view", { "scroll-y": "", class: "list-area" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(_ctx.currentList, (item, index) => { return vue.openBlock(), vue.createElementBlock("view", { class: "list-item", key: item.id, onClick: ($event) => _ctx.selectCityItem(item) }, vue.toDisplayString(item.name), 9, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )), _ctx.currentList.length === 0 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, style: { "padding": "20rpx", "color": "#999" } }, " 无数据 ")) : vue.createCommentVNode("v-if", true) ]) ]) ]) ], 2 /* CLASS */ ), vue.createElementVNode( "view", { class: vue.normalizeClass(["picker-mask", { show: _ctx.showStationPicker }]), onClick: _cache[17] || (_cache[17] = (...args) => _ctx.closeStationPicker && _ctx.closeStationPicker(...args)) }, [ vue.createElementVNode("view", { class: "picker-content", onClick: _cache[16] || (_cache[16] = vue.withModifiers(() => { }, ["stop"])) }, [ vue.createElementVNode("view", { class: "picker-header", style: { "justify-content": "center", "position": "relative" } }, [ vue.createElementVNode("text", { class: "picker-btn-cancel", style: { "position": "absolute", "left": "30rpx" }, onClick: _cache[15] || (_cache[15] = (...args) => _ctx.closeStationPicker && _ctx.closeStationPicker(...args)) }, "取消"), vue.createElementVNode("text", { class: "picker-title" }, "选择服务站点") ]), vue.createElementVNode("scroll-view", { "scroll-y": "", class: "picker-list" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(_ctx.stationList, (item, index) => { return vue.openBlock(), vue.createElementBlock("view", { class: "station-item", key: index, onClick: ($event) => _ctx.selectStation(item) }, vue.toDisplayString(item.name), 9, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ]) ]) ], 2 /* CLASS */ ), vue.createElementVNode("view", { class: "footer-actions" }, [ vue.createElementVNode("view", { class: "agreement-row" }, [ vue.createElementVNode( "view", { class: vue.normalizeClass(["checkbox", { checked: _ctx.isAgreed }]), onClick: _cache[18] || (_cache[18] = ($event) => _ctx.isAgreed = !_ctx.isAgreed) }, [ _ctx.isAgreed ? (vue.openBlock(), vue.createElementBlock("text", { key: 0, class: "check-mark" }, "✓")) : vue.createCommentVNode("v-if", true) ], 2 /* CLASS */ ), vue.createElementVNode("text", { class: "agree-text" }, [ vue.createTextVNode("我已阅读并同意 "), vue.createElementVNode("text", { style: { "color": "#2979ff" }, onClick: _cache[19] || (_cache[19] = vue.withModifiers((...args) => _ctx.openPrivacy && _ctx.openPrivacy(...args), ["stop"])) }, "《宠宝履约者说明》") ]) ]), vue.createElementVNode("view", { class: "footer-btn-area" }, [ vue.createElementVNode("button", { class: "submit-btn", onClick: _cache[20] || (_cache[20] = (...args) => _ctx.goToAuth && _ctx.goToAuth(...args)) }, "下一步,实名认证") ]) ]), vue.createElementVNode( "view", { class: vue.normalizeClass(["picker-mask", { show: _ctx.showPicker }]), onClick: _cache[25] || (_cache[25] = (...args) => _ctx.closePicker && _ctx.closePicker(...args)) }, [ vue.createElementVNode("view", { class: "picker-content", onClick: _cache[24] || (_cache[24] = vue.withModifiers(() => { }, ["stop"])) }, [ vue.createElementVNode("view", { class: "picker-header" }, [ vue.createElementVNode("text", { class: "picker-btn-cancel", onClick: _cache[21] || (_cache[21] = (...args) => _ctx.closePicker && _ctx.closePicker(...args)) }, "取消"), vue.createElementVNode("text", { class: "picker-title" }, "选择出生日期"), vue.createElementVNode("text", { class: "picker-btn-confirm", onClick: _cache[22] || (_cache[22] = (...args) => _ctx.confirmPicker && _ctx.confirmPicker(...args)) }, "确定") ]), vue.createElementVNode("picker-view", { class: "picker-view", "indicator-style": "height: 50px;", value: _ctx.pickerValue, onChange: _cache[23] || (_cache[23] = (...args) => _ctx.onPickerChange && _ctx.onPickerChange(...args)) }, [ vue.createElementVNode("picker-view-column", null, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(_ctx.years, (item, index) => { return vue.openBlock(), vue.createElementBlock( "view", { class: "picker-item", key: index }, vue.toDisplayString(item) + "年", 1 /* TEXT */ ); }), 128 /* KEYED_FRAGMENT */ )) ]), vue.createElementVNode("picker-view-column", null, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(_ctx.months, (item, index) => { return vue.openBlock(), vue.createElementBlock( "view", { class: "picker-item", key: index }, vue.toDisplayString(item) + "月", 1 /* TEXT */ ); }), 128 /* KEYED_FRAGMENT */ )) ]), vue.createElementVNode("picker-view-column", null, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(_ctx.days, (item, index) => { return vue.openBlock(), vue.createElementBlock( "view", { class: "picker-item", key: index }, vue.toDisplayString(item) + "日", 1 /* TEXT */ ); }), 128 /* KEYED_FRAGMENT */ )) ]) ], 40, ["value"]) ]) ], 2 /* CLASS */ ), vue.createVNode(_component_privacy_popup, { visible: _ctx.showPrivacy, title: _ctx.privacyTitle, content: _ctx.privacyContent, onClose: _cache[26] || (_cache[26] = ($event) => _ctx.showPrivacy = false) }, null, 8, ["visible", "title", "content"]) ]); } const PagesRecruitForm = /* @__PURE__ */ _export_sfc(_sfc_main$z, [["render", _sfc_render$y], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/recruit/form.vue"]]); const logic$6 = { data() { return { formData: { idType: "居民身份证", name: "", idNumber: "", expiryDate: "" }, idCardFront: "", // 身份证正面本地预览路径 idCardBack: "", // 身份证反面本地预览路径 idCardFrontOssId: "", // 身份证正面 OSS ID idCardBackOssId: "", // 身份证反面 OSS ID showDatePicker: false, pickerValue: [0, 0, 0], // YYYY-MM-DD years: [], months: [], days: [], serviceType: [] // 接收上一页的服务类型 }; }, onLoad(options) { if (options.services) { try { this.serviceType = JSON.parse(options.services); } catch (e) { formatAppLog("error", "at pages/recruit/auth_logic.js:29", "Parse services failed", e); } } this.initDateData(); this.restoreAuthData(); }, methods: { // --- 日期选择器逻辑 (简化版, 仅示意) --- initDateData() { const date = /* @__PURE__ */ new Date(); const year = date.getFullYear(); for (let i = year; i <= year + 20; i++) { this.years.push(i); } for (let i = 1; i <= 12; i++) { this.months.push(i); } for (let i = 1; i <= 31; i++) { this.days.push(i); } }, openDatePicker() { }, onDateChange(e) { this.formData.expiryDate = e.detail.value; }, // --- 数据持久化(防止返回上一级丢失) --- restoreAuthData() { try { const saved = uni.getStorageSync("recruit_auth_data"); if (saved) { const d = JSON.parse(saved); this.formData.name = d.name || ""; this.formData.idNumber = d.idNumber || ""; this.formData.expiryDate = d.expiryDate || ""; this.idCardFront = d.idCardFront || ""; this.idCardBack = d.idCardBack || ""; this.idCardFrontOssId = d.idCardFrontOssId || ""; this.idCardBackOssId = d.idCardBackOssId || ""; } } catch (e) { formatAppLog("error", "at pages/recruit/auth_logic.js:76", "恢复认证数据失败", e); } }, saveAuthData() { try { uni.setStorageSync("recruit_auth_data", JSON.stringify({ name: this.formData.name, idNumber: this.formData.idNumber, expiryDate: this.formData.expiryDate, idCardFront: this.idCardFront, idCardBack: this.idCardBack, idCardFrontOssId: this.idCardFrontOssId, idCardBackOssId: this.idCardBackOssId })); } catch (e) { formatAppLog("error", "at pages/recruit/auth_logic.js:91", "保存认证数据失败", e); } }, // --- 图片上传(选择后自动上传到OSS) --- chooseImage(side) { uni.chooseImage({ count: 1, sizeType: ["compressed"], sourceType: ["album", "camera"], success: async (res) => { const tempPath = res.tempFilePaths[0]; if (side === "front") { this.idCardFront = tempPath; } else { this.idCardBack = tempPath; } try { uni.showLoading({ title: "上传中..." }); const uploadRes = await uploadFile(tempPath); if (side === "front") { this.idCardFrontOssId = uploadRes.data.ossId; } else { this.idCardBackOssId = uploadRes.data.ossId; } uni.hideLoading(); this.saveAuthData(); } catch (err) { uni.hideLoading(); formatAppLog("error", "at pages/recruit/auth_logic.js:121", "上传身份证图片失败:", err); } } }); }, // --- 提交 --- goToQualifications() { this.saveAuthData(); try { const stored = uni.getStorageSync("recruit_form_data"); if (stored) { const data = JSON.parse(stored); data.realName = this.formData.name; data.idNumber = this.formData.idNumber; data.expiryDate = this.formData.expiryDate; data.idCardFrontOssId = this.idCardFrontOssId; data.idCardBackOssId = this.idCardBackOssId; uni.setStorageSync("recruit_form_data", JSON.stringify(data)); } } catch (e) { formatAppLog("error", "at pages/recruit/auth_logic.js:158", "保存认证数据失败", e); } const services = JSON.stringify(this.serviceType); uni.navigateTo({ url: `/pages/recruit/qualifications?services=${services}` }); } } }; const _sfc_main$y = logic$6; function _sfc_render$x(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "auth-container" }, [ vue.createElementVNode("view", { class: "top-tip" }, "请确保身份信息的准确,以免影响后续履约费用结算。"), vue.createElementVNode("view", { class: "form-card" }, [ vue.createElementVNode("view", { class: "form-item" }, [ vue.createElementVNode("text", { class: "label" }, "证件类型"), vue.createElementVNode("view", { class: "read-only-text" }, "居民身份证") ]), vue.createElementVNode("view", { class: "form-item" }, [ vue.createElementVNode("text", { class: "label" }, "真实姓名"), vue.createElementVNode("view", { class: "gray-input-box" }, [ vue.withDirectives(vue.createElementVNode( "input", { class: "input-area", type: "text", "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => _ctx.formData.name = $event), placeholder: "证件姓名", "placeholder-class": "input-placeholder" }, null, 512 /* NEED_PATCH */ ), [ [vue.vModelText, _ctx.formData.name] ]) ]) ]), vue.createElementVNode("view", { class: "form-item" }, [ vue.createElementVNode("text", { class: "label" }, "证件号码"), vue.createElementVNode("view", { class: "gray-input-box" }, [ vue.withDirectives(vue.createElementVNode( "input", { class: "input-area", type: "idcard", "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => _ctx.formData.idNumber = $event), placeholder: "身份证号", "placeholder-class": "input-placeholder" }, null, 512 /* NEED_PATCH */ ), [ [vue.vModelText, _ctx.formData.idNumber] ]) ]) ]), vue.createElementVNode("view", { class: "form-item" }, [ vue.createElementVNode("text", { class: "label" }, "有效日期"), vue.createElementVNode("view", { class: "gray-input-box" }, [ vue.createElementVNode( "picker", { mode: "date", onChange: _cache[2] || (_cache[2] = (...args) => _ctx.onDateChange && _ctx.onDateChange(...args)), style: { "width": "100%" } }, [ vue.createElementVNode( "view", { class: vue.normalizeClass(["input-area", { "input-placeholder": !_ctx.formData.expiryDate }]) }, vue.toDisplayString(_ctx.formData.expiryDate || "选择有效结束期限"), 3 /* TEXT, CLASS */ ) ], 32 /* NEED_HYDRATION */ ), (vue.openBlock(), vue.createElementBlock("svg", { class: "arrow-right", viewBox: "0 0 1024 1024", version: "1.1", xmlns: "http://www.w3.org/2000/svg" }, [ vue.createElementVNode("path", { d: "M340.864 149.312a30.592 30.592 0 0 0 0 42.752L652.736 512 340.864 831.872a30.592 30.592 0 0 0 0 42.752 29.12 29.12 0 0 0 41.728 0L714.24 534.336a32 32 0 0 0 0-45.056L382.592 149.312a29.12 29.12 0 0 0-41.728 0z", fill: "#CCCCCC" }) ])) ]) ]) ]), vue.createElementVNode("view", { class: "upload-card" }, [ vue.createElementVNode("view", { class: "upload-box", onClick: _cache[3] || (_cache[3] = ($event) => _ctx.chooseImage("front")) }, [ _ctx.idCardFront ? (vue.openBlock(), vue.createElementBlock("image", { key: 0, src: _ctx.idCardFront, class: "preview-img", mode: "aspectFill" }, null, 8, ["src"])) : (vue.openBlock(), vue.createElementBlock( vue.Fragment, { key: 1 }, [ (vue.openBlock(), vue.createElementBlock("svg", { class: "camera-icon", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, [ vue.createElementVNode("path", { d: "M12 12C14.7614 12 17 9.76142 17 7C17 4.23858 14.7614 2 12 2C9.23858 2 7 4.23858 7 7C7 9.76142 9.23858 12 12 12Z", fill: "#E0E0E0" }), vue.createElementVNode("circle", { cx: "12", cy: "12", r: "3", stroke: "#CCCCCC", "stroke-width": "2" }), vue.createElementVNode("path", { d: "M20 6H17.82L16.4 4.47C15.96 4 15.34 3.73 14.68 3.73H9.32C8.66 3.73 8.04 4 7.6 4.47L6.18 6H4C2.9 6 2 6.9 2 8V18C2 19.1 2.9 20 4 20H20C21.1 20 22 19.1 22 18V8C22 6.9 21.1 6 20 6ZM12 17C9.24 17 7 14.76 7 12C7 9.24 9.24 7 12 7C14.76 7 17 9.24 17 12C17 14.76 14.76 17 12 17Z", fill: "#CCCCCC" }) ])), vue.createElementVNode("text", { class: "upload-text" }, "点击上传") ], 64 /* STABLE_FRAGMENT */ )) ]), vue.createElementVNode("text", { class: "card-label" }, "证件带照片面") ]), vue.createElementVNode("view", { class: "upload-card" }, [ vue.createElementVNode("view", { class: "upload-box", onClick: _cache[4] || (_cache[4] = ($event) => _ctx.chooseImage("back")) }, [ _ctx.idCardBack ? (vue.openBlock(), vue.createElementBlock("image", { key: 0, src: _ctx.idCardBack, class: "preview-img", mode: "aspectFill" }, null, 8, ["src"])) : (vue.openBlock(), vue.createElementBlock( vue.Fragment, { key: 1 }, [ (vue.openBlock(), vue.createElementBlock("svg", { class: "camera-icon", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" }, [ vue.createElementVNode("path", { d: "M20 6H17.82L16.4 4.47C15.96 4 15.34 3.73 14.68 3.73H9.32C8.66 3.73 8.04 4 7.6 4.47L6.18 6H4C2.9 6 2 6.9 2 8V18C2 19.1 2.9 20 4 20H20C21.1 20 22 19.1 22 18V8C22 6.9 21.1 6 20 6ZM12 17C9.24 17 7 14.76 7 12C7 9.24 9.24 7 12 7C14.76 7 17 9.24 17 12C17 14.76 14.76 17 12 17Z", fill: "#CCCCCC" }) ])), vue.createElementVNode("text", { class: "upload-text" }, "点击上传") ], 64 /* STABLE_FRAGMENT */ )) ]), vue.createElementVNode("text", { class: "card-label" }, "证件国徽面") ]), vue.createElementVNode("view", { class: "footer-btn-area" }, [ vue.createElementVNode("button", { class: "next-btn", onClick: _cache[5] || (_cache[5] = (...args) => _ctx.goToQualifications && _ctx.goToQualifications(...args)) }, "下一步,完善资质") ]) ]); } const PagesRecruitAuth = /* @__PURE__ */ _export_sfc(_sfc_main$y, [["render", _sfc_render$x], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/recruit/auth.vue"]]); const logic$5 = { data() { return { serviceTypes: [], // 从上一页传递过来的服务类型列表 qualifications: {}, // 存储本地预览路径 { '宠物接送': ['path1', ...], ... } qualOssIds: {} // 存储OSS ID { '宠物接送': ['id1', ...], ... } }; }, onLoad(options) { if (options.services) { try { this.serviceTypes = JSON.parse(options.services); this.serviceTypes.forEach((type) => { this.qualifications[type] = []; this.qualOssIds[type] = []; }); } catch (e) { formatAppLog("error", "at pages/recruit/qualifications_logic.js:21", "Parse services failed", e); } } }, methods: { chooseImage(serviceName) { uni.chooseImage({ count: 9, sizeType: ["compressed"], sourceType: ["album", "camera"], success: async (res) => { if (!this.qualifications[serviceName]) { this.qualifications[serviceName] = []; this.qualOssIds[serviceName] = []; } for (const tempPath of res.tempFilePaths) { this.qualifications[serviceName].push(tempPath); this.$forceUpdate(); try { const uploadRes = await uploadFile(tempPath); this.qualOssIds[serviceName].push(uploadRes.data.ossId); } catch (err) { formatAppLog("error", "at pages/recruit/qualifications_logic.js:44", "上传资质图片失败:", err); } } } }); }, deleteImage(serviceName, index) { this.qualifications[serviceName].splice(index, 1); if (this.qualOssIds[serviceName]) { this.qualOssIds[serviceName].splice(index, 1); } this.$forceUpdate(); }, goBackToForm() { const pages = getCurrentPages(); if (pages.length > 2) { uni.navigateBack({ delta: 2 }); } else { uni.reLaunch({ url: "/pages/recruit/form" }); } }, async submit() { let recruitData = {}; try { const stored = uni.getStorageSync("recruit_form_data"); if (stored) { recruitData = JSON.parse(stored); } } catch (e) { formatAppLog("error", "at pages/recruit/qualifications_logic.js:80", "读取招募表单数据失败", e); } const allQualOssIds = []; Object.values(this.qualOssIds).forEach((ids) => { allQualOssIds.push(...ids); }); const auditData = { name: recruitData.name || "", phone: recruitData.mobile || "", password: recruitData.password || "", gender: recruitData.gender === 1 ? "0" : "1", birthday: recruitData.birthday || "", serviceTypes: JSON.stringify(recruitData.serviceType || []), city: recruitData.city || "", stationId: recruitData.stationId || null, realName: recruitData.realName || "", idCard: recruitData.idNumber || "", idValidDate: recruitData.expiryDate || "", idCardFront: recruitData.idCardFrontOssId || null, idCardBack: recruitData.idCardBackOssId || null, qualifications: JSON.stringify(allQualOssIds) }; uni.showLoading({ title: "提交中..." }); try { await submitAudit(auditData); uni.hideLoading(); uni.reLaunch({ url: "/pages/recruit/success" }); } catch (err) { uni.hideLoading(); formatAppLog("error", "at pages/recruit/qualifications_logic.js:116", "提交申请失败:", err); } } } }; const _sfc_main$x = logic$5; function _sfc_render$w(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "qual-container" }, [ vue.createElementVNode("view", { class: "top-tip" }, "根据国家政策要求,请尽快完成实名认证与健康认证,否则无法开展配送业务。我们承诺将严格保管好您的个人信息。"), _ctx.serviceTypes.length === 0 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "empty-state" }, [ vue.createElementVNode("text", { class: "empty-tip" }, "请返回第一步选择服务类型"), vue.createElementVNode("button", { class: "back-btn", onClick: _cache[0] || (_cache[0] = (...args) => _ctx.goBackToForm && _ctx.goBackToForm(...args)) }, "返回选择") ])) : vue.createCommentVNode("v-if", true), (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(_ctx.serviceTypes, (type, index) => { return vue.openBlock(), vue.createElementBlock("view", { class: "qual-card", key: index }, [ vue.createElementVNode( "view", { class: "card-title" }, vue.toDisplayString(type) + "服务资质", 1 /* TEXT */ ), vue.createElementVNode("view", { class: "upload-wrapper" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(_ctx.qualifications[type], (img, imgIndex) => { return vue.openBlock(), vue.createElementBlock("view", { class: "img-item", key: imgIndex }, [ vue.createElementVNode("image", { src: img, class: "preview-img", mode: "aspectFill", onClick: ($event) => _ctx.previewImage(type, imgIndex) }, null, 8, ["src", "onClick"]), vue.createElementVNode("view", { class: "delete-btn", onClick: vue.withModifiers(($event) => _ctx.deleteImage(type, imgIndex), ["stop"]) }, "×", 8, ["onClick"]) ]); }), 128 /* KEYED_FRAGMENT */ )), vue.createElementVNode("view", { class: "upload-box", onClick: ($event) => _ctx.chooseImage(type) }, [ vue.createElementVNode("text", { class: "plus-icon" }, "+"), vue.createElementVNode("text", { class: "upload-text" }, "上传") ], 8, ["onClick"]) ]) ]); }), 128 /* KEYED_FRAGMENT */ )), vue.createElementVNode("view", { class: "footer-actions" }, [ vue.createElementVNode("button", { class: "submit-btn", onClick: _cache[1] || (_cache[1] = (...args) => _ctx.submit && _ctx.submit(...args)) }, "立即提交") ]) ]); } const PagesRecruitQualifications = /* @__PURE__ */ _export_sfc(_sfc_main$x, [["render", _sfc_render$w], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/recruit/qualifications.vue"]]); const logic$4 = { data() { return { station: "民治街道第一站", name: "张三哥", phone: "+8613612345678" }; }, methods: { goHome() { uni.reLaunch({ url: "/pages/login/login" }); } } }; const _sfc_main$w = logic$4; function _sfc_render$v(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "success-container" }, [ vue.createElementVNode("view", { class: "icon-area" }, [ (vue.openBlock(), vue.createElementBlock("svg", { class: "success-icon", viewBox: "0 0 1024 1024", version: "1.1", xmlns: "http://www.w3.org/2000/svg" }, [ vue.createElementVNode("path", { d: "M512 0C229.23 0 0 229.23 0 512s229.23 512 512 512 512-229.23 512-512S794.77 0 512 0z m0 960C264.58 960 64 759.42 64 512S264.58 64 512 64s448 200.58 448 448-200.58 448-448 448z", fill: "#64D01D" }), vue.createElementVNode("path", { d: "M743.08 335.78c-12.23-12.24-32.07-12.24-44.3 0L426.6 607.96 325.22 506.58c-12.24-12.24-32.07-12.24-44.3 0-12.24 12.24-12.24 32.07 0 44.3l124.58 124.58c6.12 6.12 14.14 9.17 22.15 9.17s16.03-3.05 22.15-9.17L743.08 380.08c12.24-12.24 12.24-32.07 0-44.3z", fill: "#64D01D" }) ])), vue.createElementVNode("text", { class: "main-title" }, "提交成功") ]), vue.createElementVNode("text", { class: "sub-tip" }, "请保持手机畅通,等待平台工作人员与您联系"), vue.createElementVNode("view", { class: "info-card" }, [ vue.createElementVNode("view", { class: "info-item" }, [ vue.createElementVNode("text", { class: "label" }, "服务站点:"), vue.createElementVNode( "text", { class: "value" }, vue.toDisplayString(_ctx.station), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "info-item" }, [ vue.createElementVNode("text", { class: "label" }, "报 名 人 :"), vue.createElementVNode( "text", { class: "value" }, vue.toDisplayString(_ctx.name), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "info-item" }, [ vue.createElementVNode("text", { class: "label" }, "联系手机:"), vue.createElementVNode( "text", { class: "value" }, vue.toDisplayString(_ctx.phone), 1 /* TEXT */ ) ]) ]), vue.createElementVNode("view", { class: "footer-btn", onClick: _cache[0] || (_cache[0] = (...args) => _ctx.goHome && _ctx.goHome(...args)) }, "我知道了") ]); } const PagesRecruitSuccess = /* @__PURE__ */ _export_sfc(_sfc_main$w, [["render", _sfc_render$v], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/recruit/success.vue"]]); const _sfc_main$v = { data() { return { mobile: "", code: "", countDown: 0, timer: null }; }, computed: { mobileMask() { if (!this.mobile) return ""; return this.mobile.replace(/(\d{3})\d{4}(\d{4})/, "$1****$2"); } }, onLoad(options) { if (options.mobile) { this.mobile = options.mobile; } else { this.mobile = "13412346783"; } }, methods: { getVerifyCode() { if (this.countDown > 0) return; this.countDown = 60; this.timer = setInterval(() => { this.countDown--; if (this.countDown <= 0) { clearInterval(this.timer); } }, 1e3); uni.showToast({ title: "验证码已发送", icon: "none" }); }, nextStep() { if (!this.code) { uni.showToast({ title: "请输入验证码", icon: "none" }); return; } uni.navigateTo({ url: "/pages/login/reset-pwd-set" }); } } }; function _sfc_render$u(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "reset-container" }, [ vue.createElementVNode("view", { class: "content" }, [ vue.createElementVNode( "view", { class: "tip-text" }, "请输入 +86 " + vue.toDisplayString($options.mobileMask) + " 收到的短信验证码,进行验证~", 1 /* TEXT */ ), vue.createElementVNode("view", { class: "input-group" }, [ vue.createElementVNode("text", { class: "label" }, "验证码"), vue.createElementVNode("view", { class: "input-wrapper" }, [ vue.withDirectives(vue.createElementVNode( "input", { class: "code-input", type: "number", maxlength: "6", "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $data.code = $event) }, null, 512 /* NEED_PATCH */ ), [ [vue.vModelText, $data.code] ]), vue.createElementVNode("view", { class: "get-code-btn", onClick: _cache[1] || (_cache[1] = (...args) => $options.getVerifyCode && $options.getVerifyCode(...args)) }, [ vue.createElementVNode( "text", { class: "btn-text" }, vue.toDisplayString($data.countDown > 0 ? `${$data.countDown}s` : "获取验证码"), 1 /* TEXT */ ) ]) ]) ]), vue.createElementVNode("button", { class: "next-btn", onClick: _cache[2] || (_cache[2] = (...args) => $options.nextStep && $options.nextStep(...args)) }, "下一步") ]) ]); } const PagesLoginResetPwdVerify = /* @__PURE__ */ _export_sfc(_sfc_main$v, [["render", _sfc_render$u], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/login/reset-pwd-verify.vue"]]); const _sfc_main$u = { data() { return { pwd1: "", pwd2: "" }; }, methods: { confirmReset() { if (!this.pwd1 || !this.pwd2) { uni.showToast({ title: "请输入密码", icon: "none" }); return; } if (this.pwd1 !== this.pwd2) { uni.showToast({ title: "两次密码不一致", icon: "none" }); return; } uni.showToast({ title: "重置成功", icon: "success" }); setTimeout(() => { uni.navigateBack({ delta: 2 // 返回到登录页 }); }, 1500); } } }; function _sfc_render$t(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "reset-container" }, [ vue.createElementVNode("view", { class: "content" }, [ vue.createElementVNode("view", { class: "tip-text" }, "请输入新密码,并重新登录验证"), vue.createElementVNode("view", { class: "input-form" }, [ vue.createElementVNode("view", { class: "input-row" }, [ vue.withDirectives(vue.createElementVNode( "input", { class: "pwd-input", type: "text", password: "", placeholder: "限12-20位字母和数字组合", "placeholder-style": "color:#ccc", "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $data.pwd1 = $event) }, null, 512 /* NEED_PATCH */ ), [ [vue.vModelText, $data.pwd1] ]) ]), vue.createElementVNode("view", { class: "divider" }), vue.createElementVNode("view", { class: "input-row" }, [ vue.withDirectives(vue.createElementVNode( "input", { class: "pwd-input", type: "text", password: "", placeholder: "限12-20位字母和数字组合", "placeholder-style": "color:#ccc", "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $data.pwd2 = $event) }, null, 512 /* NEED_PATCH */ ), [ [vue.vModelText, $data.pwd2] ]) ]), vue.createElementVNode("view", { class: "divider" }) ]), vue.createElementVNode("button", { class: "confirm-btn", onClick: _cache[2] || (_cache[2] = (...args) => $options.confirmReset && $options.confirmReset(...args)) }, "确定") ]) ]); } const PagesLoginResetPwdSet = /* @__PURE__ */ _export_sfc(_sfc_main$u, [["render", _sfc_render$t], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/login/reset-pwd-set.vue"]]); function getServiceList() { return request({ url: "/service/list/listOnTaskHall", method: "GET" }); } const logic$3 = { data() { return { taskList: [], currentFilter: "default", // default, distance, time filterCondition: "筛选条件", sortDistance: "asc", // asc, desc sortTime: "asc", scrollTop: 0, // Track scroll position isFilterShow: false, tempFilter: { service: null, distance: "全部", amount: "全部" }, activeFilter: { service: null, distance: "全部", amount: "全部" }, workStatus: "working", // working | resting showConfirmModal: false, showPetModal: false, currentPetInfo: {}, showRejectModal: false, rejectReason: "", currentOrder: null, showAcceptConfirmModal: false, showNavModal: false, navTargetItem: null, navTargetPointType: "", profile: null, profileLoading: false, serviceList: [], orderStats: { total: 0, reject: 0, award: 0, punishment: 0 } }; }, onPageScroll(e) { this.scrollTop = e.scrollTop; }, onLoad() { this.checkWorkStatus(); this.loadServiceList(); this.loadTaskList(); }, onShow() { this.checkWorkStatus(); if (isLoggedIn()) { this.loadProfile(); this.loadOrderStats(); } }, methods: { async loadProfile() { if (this.profileLoading) return; this.profileLoading = true; try { const res = await getMyProfile(); this.profile = res.data || null; } catch (err) { formatAppLog("error", "at pages/home/logic.js:71", "获取个人信息失败:", err); } finally { this.profileLoading = false; } }, async loadServiceList() { try { const res = await getServiceList(); this.serviceList = res.data || []; } catch (err) { formatAppLog("error", "at pages/home/logic.js:81", "获取服务类型失败:", err); } }, async loadOrderStats() { try { const res = await getOrderCount(); this.orderStats = res.data || { total: 0, reject: 0, award: 0, punishment: 0 }; } catch (err) { formatAppLog("error", "at pages/home/logic.js:89", "获取订单统计失败:", err); } }, checkWorkStatus() { const status = uni.getStorageSync("workStatus"); if (status) { this.workStatus = status; } else { this.workStatus = "working"; uni.setStorageSync("workStatus", "working"); } }, toggleFilter() { if (this.workStatus === "resting") return; this.isFilterShow = !this.isFilterShow; }, goToWorkStatus() { uni.navigateTo({ url: "/pages/home/work-status" }); }, startWork() { this.showConfirmModal = true; }, confirmStartWork() { this.workStatus = "working"; uni.setStorageSync("workStatus", "working"); this.loadTaskList(); this.showConfirmModal = false; uni.showToast({ title: "已开始接单", icon: "success" }); }, closeConfirmModal() { this.showConfirmModal = false; }, showPetProfile(item) { this.currentPetInfo = item; this.showPetModal = true; }, closePetProfile() { this.showPetModal = false; }, openRejectModal(item) { this.currentOrder = item; this.rejectReason = ""; this.showRejectModal = true; }, closeRejectModal() { this.showRejectModal = false; this.currentOrder = null; }, confirmReject() { if (!this.rejectReason.trim()) { uni.showToast({ title: "请输入拒绝理由", icon: "none" }); return; } uni.showToast({ title: "已拒绝接单", icon: "success" }); this.showRejectModal = false; }, openAcceptModal(item) { this.currentOrder = item; this.showAcceptConfirmModal = true; }, closeAcceptModal() { this.showAcceptConfirmModal = false; this.currentOrder = null; }, async confirmAccept() { var _a; if (!((_a = this.currentOrder) == null ? void 0 : _a.id)) return; try { await acceptOrder(this.currentOrder.id); uni.showToast({ title: "接单成功", icon: "success" }); this.showAcceptConfirmModal = false; this.currentOrder = null; this.loadTaskList(); this.loadProfile(); } catch (err) { formatAppLog("error", "at pages/home/logic.js:167", "接单失败:", err); uni.showToast({ title: "接单失败", icon: "none" }); } }, openNavigation(item, pointType) { this.navTargetItem = item; this.navTargetPointType = pointType; this.showNavModal = true; }, closeNavModal() { this.showNavModal = false; }, chooseMap(mapType) { let item = this.navTargetItem; let pointType = this.navTargetPointType; let name = pointType === "start" ? item.startLocation : item.endLocation; let address = pointType === "start" ? item.startAddress : item.endAddress; this.showNavModal = false; uni.openLocation({ latitude: 30.52, // Mock lat longitude: 114.31, // Mock lng name: name || "目的地", address: address || "默认地址", success: function() { formatAppLog("log", "at pages/home/logic.js:193", "打开导航成功: " + mapType); } }); }, selectService(type) { this.tempFilter.service = type; }, selectDistance(type) { this.tempFilter.distance = type; }, selectAmount(type) { this.tempFilter.amount = type; }, resetFilter() { this.tempFilter = { service: null, distance: "全部", amount: "全部" }; }, confirmFilter() { this.activeFilter = { ...this.tempFilter }; this.isFilterShow = false; uni.showToast({ title: "筛选已生效", icon: "none" }); }, closeFilter() { this.isFilterShow = false; }, goToDetail(item) { formatAppLog("log", "at pages/home/logic.js:223", "Go to detail", item); }, async loadTaskList() { try { const params = { service: this.activeFilter.service, minPrice: this.getMinPrice(), maxPrice: this.getMaxPrice(), pageNum: 1, pageSize: 20 }; const res = await getPendingOrders(params); this.taskList = (res.rows || []).map((item) => this.transformOrder(item)); } catch (err) { formatAppLog("error", "at pages/home/logic.js:237", "获取订单列表失败:", err); uni.showToast({ title: "加载失败", icon: "none" }); this.taskList = []; } }, getMinPrice() { const amount = this.activeFilter.amount; if (amount === "100以下") return 0; if (amount === "100-200") return 1e4; if (amount === "200-500") return 2e4; if (amount === "500以上") return 5e4; return void 0; }, getMaxPrice() { const amount = this.activeFilter.amount; if (amount === "100以下") return 1e4; if (amount === "100-200") return 2e4; if (amount === "200-500") return 5e4; return void 0; }, transformOrder(item) { const service = this.serviceList.find((s) => s.id === item.service); const serviceText = (service == null ? void 0 : service.name) || "未知"; const serviceIcon = (service == null ? void 0 : service.icon) || ""; const mode = (service == null ? void 0 : service.mode) || 0; const isRoundTrip = mode === 1; return { id: item.id, type: isRoundTrip ? 1 : item.service, typeText: serviceText, typeIcon: serviceIcon, price: (item.price / 100).toFixed(2), timeLabel: isRoundTrip ? "取货时间" : "服务时间", time: item.serviceTime, petAvatar: "/static/dog.png", petName: item.petName, petBreed: item.breed, petGender: "M", petAge: "", petWeight: "", petPersonality: "", petHobby: "", petRemark: "", petTags: [], petLogs: [], startLocation: isRoundTrip ? item.fromAddress : "", startAddress: isRoundTrip ? item.fromAddress : "", startDistance: "0km", endLocation: item.customerName + " " + item.customerPhone, endAddress: item.toAddress, endDistance: "0km", serviceContent: "", remark: item.remark || "" }; }, setFilter(type) { this.currentFilter = type; if (type === "distance") { this.sortDistance = this.sortDistance === "asc" ? "desc" : "asc"; uni.showToast({ title: `按距离${this.sortDistance === "asc" ? "升序" : "降序"}`, icon: "none" }); } else if (type === "time") { this.sortTime = this.sortTime === "asc" ? "desc" : "asc"; uni.showToast({ title: `按时间${this.sortTime === "asc" ? "升序" : "降序"}`, icon: "none" }); } }, showFilterDropdown() { this.toggleFilter(); } } }; const _imports_0$3 = "/static/icons/bell.svg"; const _imports_3$2 = "/static/icons/nav_arrow.svg"; const _imports_2$3 = "/static/empty-rest.png"; const _sfc_main$t = { ...logic$3 }; function _sfc_render$s(_ctx, _cache, $props, $setup, $data, $options) { var _a, _b, _c; return vue.openBlock(), vue.createElementBlock( vue.Fragment, null, [ vue.createElementVNode("view", { class: "container" }, [ vue.createElementVNode( "view", { class: "custom-nav-bar", style: vue.normalizeStyle({ backgroundColor: _ctx.scrollTop > 20 ? "#fff" : "transparent" }) }, [ vue.createElementVNode("text", { class: "nav-title" }, "任务中心") ], 4 /* STYLE */ ), vue.createElementVNode("view", { class: "nav-bg" }, [ vue.createElementVNode("view", { class: "bg-circle-left" }), vue.createElementVNode("view", { class: "bg-circle-right" }) ]), vue.createElementVNode("view", { class: "header-section" }, [ vue.createElementVNode("view", { class: "user-info" }, [ vue.createElementVNode("image", { class: "avatar", src: ((_a = _ctx.profile) == null ? void 0 : _a.avatarUrl) || "/static/touxiang.png", mode: "aspectFill" }, null, 8, ["src"]), vue.createElementVNode("view", { class: "info-content" }, [ vue.createElementVNode("view", { class: "top-row" }, [ vue.createElementVNode( "text", { class: "name" }, vue.toDisplayString(((_b = _ctx.profile) == null ? void 0 : _b.name) || "未登录"), 1 /* TEXT */ ), vue.createElementVNode( "view", { class: vue.normalizeClass(["status-pill", { "resting": _ctx.workStatus === "resting" }]), onClick: _cache[0] || (_cache[0] = (...args) => _ctx.goToWorkStatus && _ctx.goToWorkStatus(...args)) }, [ vue.createElementVNode("view", { class: "status-dot-bg" }, [ _ctx.workStatus === "working" ? (vue.openBlock(), vue.createElementBlock("text", { key: 0, class: "check-mark" }, "✔")) : (vue.openBlock(), vue.createElementBlock("text", { key: 1, class: "check-mark", style: { "font-size": "16rpx", "line-height": "20rpx" } }, "✕")) ]), vue.createElementVNode( "text", { class: "status-text" }, vue.toDisplayString(_ctx.workStatus === "working" ? "接单中" : "正在休息"), 1 /* TEXT */ ), vue.createElementVNode("text", { class: "arrow-down" }, "▼") ], 2 /* CLASS */ ) ]), vue.createElementVNode("view", { class: "bottom-row" }, [ vue.createElementVNode( "text", { class: "city-label" }, "接单城市:" + vue.toDisplayString(((_c = _ctx.profile) == null ? void 0 : _c.cityName) || "暂无"), 1 /* TEXT */ ), vue.createElementVNode("text", { class: "city-arrow" }, ">") ]) ]), vue.createElementVNode("view", { class: "notification-box" }, [ vue.createElementVNode("image", { class: "bell-img", src: _imports_0$3 }), vue.createElementVNode("view", { class: "badge-count" }, "2") ]) ]), vue.createElementVNode("view", { class: "stats-card" }, [ vue.createElementVNode("view", { class: "stat-item" }, [ vue.createElementVNode( "text", { class: "num" }, vue.toDisplayString(_ctx.orderStats.total), 1 /* TEXT */ ), vue.createElementVNode("text", { class: "label" }, "累计接单") ]), vue.createElementVNode("view", { class: "divider" }), vue.createElementVNode("view", { class: "stat-item" }, [ vue.createElementVNode( "text", { class: "num" }, vue.toDisplayString(_ctx.orderStats.reject), 1 /* TEXT */ ), vue.createElementVNode("text", { class: "label" }, "拒接订单") ]), vue.createElementVNode("view", { class: "divider" }), vue.createElementVNode("view", { class: "stat-item" }, [ vue.createElementVNode( "text", { class: "num" }, vue.toDisplayString(_ctx.orderStats.award), 1 /* TEXT */ ), vue.createElementVNode("text", { class: "label" }, "奖励订单") ]), vue.createElementVNode("view", { class: "divider" }), vue.createElementVNode("view", { class: "stat-item" }, [ vue.createElementVNode( "text", { class: "num" }, vue.toDisplayString(_ctx.orderStats.punishment), 1 /* TEXT */ ), vue.createElementVNode("text", { class: "label" }, "惩罚订单") ]) ]) ]), vue.createElementVNode("view", { class: "task-header" }, [ vue.createElementVNode( "view", { class: "header-inner", style: vue.normalizeStyle({ backgroundColor: _ctx.scrollTop > 300 || _ctx.isFilterShow ? "#fff" : "transparent" }) }, [ vue.createElementVNode("view", { class: "left-title" }, [ vue.createElementVNode("view", { class: "orange-bar" }), vue.createElementVNode("text", { class: "title" }, "任务大厅"), vue.createElementVNode( "text", { class: "count" }, "- (" + vue.toDisplayString(_ctx.taskList.length) + "单)", 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "filter-options" }, [ vue.createElementVNode( "view", { class: vue.normalizeClass(["filter-item", { active: _ctx.currentFilter === "distance" }]), onClick: _cache[1] || (_cache[1] = ($event) => _ctx.setFilter("distance")) }, [ vue.createTextVNode(" 距离 "), vue.createElementVNode("view", { class: "sort-icon" }, [ vue.createElementVNode( "view", { class: vue.normalizeClass(["up", { active: _ctx.currentFilter === "distance" && _ctx.sortDistance === "asc" }]) }, null, 2 /* CLASS */ ), vue.createElementVNode( "view", { class: vue.normalizeClass(["down", { active: _ctx.currentFilter === "distance" && _ctx.sortDistance === "desc" }]) }, null, 2 /* CLASS */ ) ]) ], 2 /* CLASS */ ), vue.createElementVNode( "view", { class: vue.normalizeClass(["filter-item", { active: _ctx.currentFilter === "time" }]), onClick: _cache[2] || (_cache[2] = ($event) => _ctx.setFilter("time")) }, [ vue.createTextVNode(" 时间 "), vue.createElementVNode("view", { class: "sort-icon" }, [ vue.createElementVNode( "view", { class: vue.normalizeClass(["up", { active: _ctx.currentFilter === "time" && _ctx.sortTime === "asc" }]) }, null, 2 /* CLASS */ ), vue.createElementVNode( "view", { class: vue.normalizeClass(["down", { active: _ctx.currentFilter === "time" && _ctx.sortTime === "desc" }]) }, null, 2 /* CLASS */ ) ]) ], 2 /* CLASS */ ), vue.createElementVNode("view", { class: "dropdown", onClick: _cache[3] || (_cache[3] = (...args) => _ctx.showFilterDropdown && _ctx.showFilterDropdown(...args)) }, [ vue.createElementVNode("text", null, "筛选条件"), vue.createElementVNode("text", { class: "arrow-down" }, "﹀") ]) ]) ], 4 /* STYLE */ ), _ctx.isFilterShow ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "filter-mask", onClick: _cache[4] || (_cache[4] = (...args) => _ctx.closeFilter && _ctx.closeFilter(...args)) })) : vue.createCommentVNode("v-if", true), vue.createElementVNode( "view", { class: vue.normalizeClass(["filter-panel", { show: _ctx.isFilterShow }]) }, [ vue.createElementVNode("view", { class: "filter-section" }, [ vue.createElementVNode("text", { class: "section-title" }, "服务类型"), vue.createElementVNode("view", { class: "options-grid" }, [ vue.createElementVNode( "view", { class: vue.normalizeClass(["option-btn", { active: _ctx.tempFilter.service === null }]), onClick: _cache[5] || (_cache[5] = ($event) => _ctx.selectService(null)) }, "全部", 2 /* CLASS */ ), (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(_ctx.serviceList, (item) => { return vue.openBlock(), vue.createElementBlock("view", { class: vue.normalizeClass(["option-btn", { active: _ctx.tempFilter.service === item.id }]), key: item.id, onClick: ($event) => _ctx.selectService(item.id) }, vue.toDisplayString(item.name), 11, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ]) ]), vue.createElementVNode("view", { class: "filter-section" }, [ vue.createElementVNode("text", { class: "section-title" }, "距离"), vue.createElementVNode("view", { class: "options-grid" }, [ vue.createElementVNode( "view", { class: vue.normalizeClass(["option-btn", { active: _ctx.tempFilter.distance === "全部" }]), onClick: _cache[6] || (_cache[6] = ($event) => _ctx.selectDistance("全部")) }, "全部", 2 /* CLASS */ ), vue.createElementVNode( "view", { class: vue.normalizeClass(["option-btn", { active: _ctx.tempFilter.distance === "2公里内" }]), onClick: _cache[7] || (_cache[7] = ($event) => _ctx.selectDistance("2公里内")) }, "2公里内", 2 /* CLASS */ ), vue.createElementVNode( "view", { class: vue.normalizeClass(["option-btn", { active: _ctx.tempFilter.distance === "5公里内" }]), onClick: _cache[8] || (_cache[8] = ($event) => _ctx.selectDistance("5公里内")) }, "5公里内", 2 /* CLASS */ ), vue.createElementVNode( "view", { class: vue.normalizeClass(["option-btn", { active: _ctx.tempFilter.distance === "10公里内" }]), onClick: _cache[9] || (_cache[9] = ($event) => _ctx.selectDistance("10公里内")) }, "10公里内", 2 /* CLASS */ ), vue.createElementVNode( "view", { class: vue.normalizeClass(["option-btn", { active: _ctx.tempFilter.distance === "20公里内" }]), onClick: _cache[10] || (_cache[10] = ($event) => _ctx.selectDistance("20公里内")) }, "20公里内", 2 /* CLASS */ ), vue.createElementVNode( "view", { class: vue.normalizeClass(["option-btn", { active: _ctx.tempFilter.distance === "50公里内" }]), onClick: _cache[11] || (_cache[11] = ($event) => _ctx.selectDistance("50公里内")) }, "50公里内", 2 /* CLASS */ ) ]) ]), vue.createElementVNode("view", { class: "filter-section" }, [ vue.createElementVNode("text", { class: "section-title" }, "金额"), vue.createElementVNode("view", { class: "options-grid" }, [ vue.createElementVNode( "view", { class: vue.normalizeClass(["option-btn", { active: _ctx.tempFilter.amount === "全部" }]), onClick: _cache[12] || (_cache[12] = ($event) => _ctx.selectAmount("全部")) }, "全部", 2 /* CLASS */ ), vue.createElementVNode( "view", { class: vue.normalizeClass(["option-btn", { active: _ctx.tempFilter.amount === "100以下" }]), onClick: _cache[13] || (_cache[13] = ($event) => _ctx.selectAmount("100以下")) }, "100以下", 2 /* CLASS */ ), vue.createElementVNode( "view", { class: vue.normalizeClass(["option-btn", { active: _ctx.tempFilter.amount === "100-200" }]), onClick: _cache[14] || (_cache[14] = ($event) => _ctx.selectAmount("100-200")) }, "100-200", 2 /* CLASS */ ), vue.createElementVNode( "view", { class: vue.normalizeClass(["option-btn", { active: _ctx.tempFilter.amount === "200-500" }]), onClick: _cache[15] || (_cache[15] = ($event) => _ctx.selectAmount("200-500")) }, "200-500", 2 /* CLASS */ ), vue.createElementVNode( "view", { class: vue.normalizeClass(["option-btn", { active: _ctx.tempFilter.amount === "500以上" }]), onClick: _cache[16] || (_cache[16] = ($event) => _ctx.selectAmount("500以上")) }, "500以上", 2 /* CLASS */ ) ]) ]), vue.createElementVNode("view", { class: "filter-actions" }, [ vue.createElementVNode("button", { class: "action-btn reset", onClick: _cache[17] || (_cache[17] = (...args) => _ctx.resetFilter && _ctx.resetFilter(...args)) }, "重置"), vue.createElementVNode("button", { class: "action-btn confirm", onClick: _cache[18] || (_cache[18] = (...args) => _ctx.confirmFilter && _ctx.confirmFilter(...args)) }, "确认") ]) ], 2 /* CLASS */ ) ]), _ctx.workStatus === "working" ? (vue.openBlock(), vue.createElementBlock("scroll-view", { key: 0, "scroll-y": "", class: "task-list" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(_ctx.taskList, (item, index) => { return vue.openBlock(), vue.createElementBlock("view", { class: "task-card", key: index, onClick: ($event) => _ctx.goToDetail(item) }, [ vue.createElementVNode("view", { class: "card-header" }, [ vue.createElementVNode("view", { class: "type-badge" }, [ vue.createElementVNode("image", { class: "type-icon", src: item.typeIcon }, null, 8, ["src"]), vue.createElementVNode( "text", { class: "type-text" }, vue.toDisplayString(item.typeText), 1 /* TEXT */ ) ]), vue.createElementVNode( "text", { class: "price" }, "¥" + vue.toDisplayString(item.price), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "card-body" }, [ vue.createElementVNode("view", { class: "time-row" }, [ vue.createElementVNode( "text", { class: "label" }, vue.toDisplayString(item.timeLabel) + ":", 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "value" }, vue.toDisplayString(item.time), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "pet-card" }, [ vue.createElementVNode("image", { class: "pet-avatar", src: item.petAvatar, mode: "aspectFill" }, null, 8, ["src"]), vue.createElementVNode("view", { class: "pet-info" }, [ vue.createElementVNode( "text", { class: "pet-name" }, vue.toDisplayString(item.petName), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "pet-breed" }, "品种: " + vue.toDisplayString(item.petBreed), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "pet-profile-btn", onClick: vue.withModifiers(($event) => _ctx.showPetProfile(item), ["stop"]) }, "宠物档案", 8, ["onClick"]) ]), vue.createElementVNode("view", { class: "route-info" }, [ item.type === 1 ? (vue.openBlock(), vue.createElementBlock( vue.Fragment, { key: 0 }, [ vue.createElementVNode("view", { class: "route-item", onClick: vue.withModifiers(($event) => _ctx.openNavigation(item, "start"), ["stop"]) }, [ vue.createElementVNode("view", { class: "icon-circle start" }, "取"), vue.createElementVNode("view", { class: "route-line-vertical" }), vue.createElementVNode("view", { class: "address-box" }, [ vue.createElementVNode( "text", { class: "addr-title" }, vue.toDisplayString(item.startLocation), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "addr-desc" }, vue.toDisplayString(item.startAddress), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "distance-tag" }, [ vue.createElementVNode( "text", null, vue.toDisplayString(item.startDistance), 1 /* TEXT */ ), vue.createElementVNode("image", { class: "nav-arrow", src: _imports_3$2 }) ]) ], 8, ["onClick"]), vue.createElementVNode("view", { class: "route-item", onClick: vue.withModifiers(($event) => _ctx.openNavigation(item, "end"), ["stop"]) }, [ vue.createElementVNode("view", { class: "icon-circle end" }, "送"), vue.createElementVNode("view", { class: "address-box" }, [ vue.createElementVNode( "text", { class: "addr-title" }, vue.toDisplayString(item.endLocation), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "addr-desc" }, vue.toDisplayString(item.endAddress), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "distance-tag" }, [ vue.createElementVNode( "text", null, vue.toDisplayString(item.endDistance), 1 /* TEXT */ ), vue.createElementVNode("image", { class: "nav-arrow", src: _imports_3$2 }) ]) ], 8, ["onClick"]) ], 64 /* STABLE_FRAGMENT */ )) : (vue.openBlock(), vue.createElementBlock( vue.Fragment, { key: 1 }, [ vue.createElementVNode("view", { class: "route-item", onClick: vue.withModifiers(($event) => _ctx.openNavigation(item, "end"), ["stop"]) }, [ vue.createElementVNode("view", { class: "icon-circle service" }, "服"), vue.createElementVNode("view", { class: "address-box" }, [ vue.createElementVNode( "text", { class: "addr-title" }, vue.toDisplayString(item.endLocation), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "addr-desc" }, vue.toDisplayString(item.endAddress), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "distance-tag" }, [ vue.createElementVNode( "text", null, vue.toDisplayString(item.endDistance), 1 /* TEXT */ ), vue.createElementVNode("image", { class: "nav-arrow", src: _imports_3$2 }) ]) ], 8, ["onClick"]), item.serviceContent ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "service-content" }, [ vue.createElementVNode("text", { class: "content-label" }, "服务内容:"), vue.createElementVNode( "text", null, vue.toDisplayString(item.serviceContent), 1 /* TEXT */ ) ])) : vue.createCommentVNode("v-if", true) ], 64 /* STABLE_FRAGMENT */ )) ]), item.remark ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "remark-box" }, [ vue.createElementVNode( "text", null, "备注:" + vue.toDisplayString(item.remark), 1 /* TEXT */ ) ])) : vue.createCommentVNode("v-if", true) ]), vue.createElementVNode("view", { class: "action-btns" }, [ vue.createElementVNode("button", { class: "btn reject", onClick: vue.withModifiers(($event) => _ctx.openRejectModal(item), ["stop"]) }, "拒绝", 8, ["onClick"]), vue.createElementVNode("button", { class: "btn accept", onClick: vue.withModifiers(($event) => _ctx.openAcceptModal(item), ["stop"]) }, "接单", 8, ["onClick"]) ]) ], 8, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )), vue.createElementVNode("view", { style: { "height": "120rpx" } }) ])) : (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "empty-state" }, [ vue.createElementVNode("image", { class: "empty-icon", src: _imports_2$3, mode: "aspectFit" }), vue.createElementVNode("text", { class: "empty-text" }, "当前处于休息中,暂时无法接单"), vue.createElementVNode("button", { class: "start-work-btn", onClick: _cache[19] || (_cache[19] = (...args) => _ctx.startWork && _ctx.startWork(...args)) }, "开工接单") ])), _ctx.showConfirmModal ? (vue.openBlock(), vue.createElementBlock("view", { key: 2, class: "modal-mask" }, [ vue.createElementVNode("view", { class: "custom-modal" }, [ vue.createElementVNode("text", { class: "modal-title" }, "提示"), vue.createElementVNode("text", { class: "modal-content" }, "是否确定结束休息,开始接单?"), vue.createElementVNode("view", { class: "modal-btns" }, [ vue.createElementVNode("button", { class: "modal-btn cancel", onClick: _cache[20] || (_cache[20] = (...args) => _ctx.closeConfirmModal && _ctx.closeConfirmModal(...args)) }, "取消"), vue.createElementVNode("button", { class: "modal-btn confirm", onClick: _cache[21] || (_cache[21] = (...args) => _ctx.confirmStartWork && _ctx.confirmStartWork(...args)) }, "确定") ]) ]) ])) : vue.createCommentVNode("v-if", true), _ctx.showPetModal ? (vue.openBlock(), vue.createElementBlock("view", { key: 3, class: "pet-modal-mask", onClick: _cache[25] || (_cache[25] = (...args) => _ctx.closePetProfile && _ctx.closePetProfile(...args)) }, [ vue.createElementVNode("view", { class: "pet-modal-content", onClick: _cache[24] || (_cache[24] = vue.withModifiers(() => { }, ["stop"])) }, [ vue.createElementVNode("view", { class: "pet-modal-header" }, [ vue.createElementVNode("text", { class: "pet-modal-title" }, "宠物档案"), vue.createElementVNode("view", { class: "close-icon-btn", onClick: _cache[22] || (_cache[22] = (...args) => _ctx.closePetProfile && _ctx.closePetProfile(...args)) }, "×") ]), vue.createElementVNode("scroll-view", { "scroll-y": "", class: "pet-modal-scroll" }, [ vue.createElementVNode("view", { class: "pet-base-info" }, [ vue.createElementVNode("image", { class: "pm-avatar", src: _ctx.currentPetInfo.petAvatar, mode: "aspectFill" }, null, 8, ["src"]), vue.createElementVNode("view", { class: "pm-info-text" }, [ vue.createElementVNode("view", { class: "pm-name-row" }, [ vue.createElementVNode( "text", { class: "pm-name" }, vue.toDisplayString(_ctx.currentPetInfo.petName), 1 /* TEXT */ ), _ctx.currentPetInfo.petGender === "M" ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "pm-gender" }, [ vue.createElementVNode("text", { class: "gender-icon" }, "♂"), vue.createElementVNode("text", null, "公") ])) : _ctx.currentPetInfo.petGender === "F" ? (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "pm-gender female" }, [ vue.createElementVNode("text", { class: "gender-icon" }, "♀"), vue.createElementVNode("text", null, "母") ])) : vue.createCommentVNode("v-if", true) ]), vue.createElementVNode( "text", { class: "pm-breed" }, "品种:" + vue.toDisplayString(_ctx.currentPetInfo.petBreed), 1 /* TEXT */ ) ]) ]), vue.createElementVNode("view", { class: "pm-detail-grid" }, [ vue.createElementVNode("view", { class: "pm-grid-item half" }, [ vue.createElementVNode("text", { class: "pm-label" }, "年龄"), vue.createElementVNode( "text", { class: "pm-val" }, vue.toDisplayString(_ctx.currentPetInfo.petAge || "未知"), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "pm-grid-item half" }, [ vue.createElementVNode("text", { class: "pm-label" }, "体重"), vue.createElementVNode( "text", { class: "pm-val" }, vue.toDisplayString(_ctx.currentPetInfo.petWeight || "未知"), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "pm-grid-item full" }, [ vue.createElementVNode("text", { class: "pm-label" }, "性格"), vue.createElementVNode( "text", { class: "pm-val" }, vue.toDisplayString(_ctx.currentPetInfo.petPersonality || "无"), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "pm-grid-item full" }, [ vue.createElementVNode("text", { class: "pm-label" }, "爱好"), vue.createElementVNode( "text", { class: "pm-val" }, vue.toDisplayString(_ctx.currentPetInfo.petHobby || "无"), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "pm-grid-item full" }, [ vue.createElementVNode("text", { class: "pm-label" }, "备注"), vue.createElementVNode( "text", { class: "pm-val" }, vue.toDisplayString(_ctx.currentPetInfo.petRemark || "无特殊过敏史"), 1 /* TEXT */ ) ]) ]), _ctx.currentPetInfo.petTags && _ctx.currentPetInfo.petTags.length > 0 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "pm-tags" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(_ctx.currentPetInfo.petTags, (tag, index) => { return vue.openBlock(), vue.createElementBlock( "view", { class: "pm-tag", key: index }, vue.toDisplayString(tag), 1 /* TEXT */ ); }), 128 /* KEYED_FRAGMENT */ )) ])) : vue.createCommentVNode("v-if", true), vue.createElementVNode("view", { class: "pm-section-title" }, [ vue.createElementVNode("view", { class: "orange-bar" }), vue.createElementVNode("text", null, "备注日志") ]), vue.createElementVNode("view", { class: "pm-log-list" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(_ctx.currentPetInfo.petLogs, (log, lIndex) => { return vue.openBlock(), vue.createElementBlock("view", { class: "pm-log-item", key: lIndex }, [ vue.createElementVNode( "text", { class: "pm-log-date" }, vue.toDisplayString(log.date), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "pm-log-text" }, vue.toDisplayString(log.content), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "pm-log-recorder" }, vue.toDisplayString(log.recorder === "系统记录" ? "" : "记录人: ") + vue.toDisplayString(log.recorder), 1 /* TEXT */ ) ]); }), 128 /* KEYED_FRAGMENT */ )) ]), vue.createElementVNode("view", { style: { "height": "40rpx" } }), vue.createElementVNode("button", { class: "pm-bottom-close", onClick: _cache[23] || (_cache[23] = (...args) => _ctx.closePetProfile && _ctx.closePetProfile(...args)) }, "关闭"), vue.createElementVNode("view", { style: { "height": "20rpx" } }) ]) ]) ])) : vue.createCommentVNode("v-if", true) ]), _ctx.showRejectModal ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "modal-mask" }, [ vue.createElementVNode("view", { class: "custom-modal" }, [ vue.createElementVNode("text", { class: "modal-title" }, "拒绝接单"), vue.withDirectives(vue.createElementVNode( "textarea", { class: "reject-textarea", "onUpdate:modelValue": _cache[26] || (_cache[26] = ($event) => _ctx.rejectReason = $event), placeholder: "请输入拒绝理由(必填)", maxlength: "100" }, null, 512 /* NEED_PATCH */ ), [ [vue.vModelText, _ctx.rejectReason] ]), vue.createElementVNode("view", { class: "modal-btns mt-30" }, [ vue.createElementVNode("button", { class: "modal-btn cancel", onClick: _cache[27] || (_cache[27] = (...args) => _ctx.closeRejectModal && _ctx.closeRejectModal(...args)) }, "取消"), vue.createElementVNode("button", { class: "modal-btn confirm", onClick: _cache[28] || (_cache[28] = (...args) => _ctx.confirmReject && _ctx.confirmReject(...args)) }, "提交") ]) ]) ])) : vue.createCommentVNode("v-if", true), _ctx.showAcceptConfirmModal ? (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "modal-mask" }, [ vue.createElementVNode("view", { class: "custom-modal" }, [ vue.createElementVNode("text", { class: "modal-title" }, "接单确认"), vue.createElementVNode("view", { class: "modal-content-box" }, [ vue.createElementVNode("text", { class: "modal-content-main" }, "请确认是否接收此订单?"), vue.createElementVNode("text", { class: "modal-content-sub" }, "接单后请尽快通过电话联系用户") ]), vue.createElementVNode("view", { class: "modal-btns mt-30" }, [ vue.createElementVNode("button", { class: "modal-btn cancel", onClick: _cache[29] || (_cache[29] = (...args) => _ctx.closeAcceptModal && _ctx.closeAcceptModal(...args)) }, "再想想"), vue.createElementVNode("button", { class: "modal-btn confirm", onClick: _cache[30] || (_cache[30] = (...args) => _ctx.confirmAccept && _ctx.confirmAccept(...args)) }, "确认接单") ]) ]) ])) : vue.createCommentVNode("v-if", true), _ctx.showNavModal ? (vue.openBlock(), vue.createElementBlock("view", { key: 2, class: "nav-modal-mask", onClick: _cache[36] || (_cache[36] = (...args) => _ctx.closeNavModal && _ctx.closeNavModal(...args)) }, [ vue.createElementVNode("view", { class: "nav-action-sheet", onClick: _cache[35] || (_cache[35] = vue.withModifiers(() => { }, ["stop"])) }, [ vue.createElementVNode("view", { class: "nav-sheet-title" }, "选择地图进行导航"), vue.createElementVNode("view", { class: "nav-sheet-item", onClick: _cache[31] || (_cache[31] = ($event) => _ctx.chooseMap("高德")) }, "高德地图"), vue.createElementVNode("view", { class: "nav-sheet-item", onClick: _cache[32] || (_cache[32] = ($event) => _ctx.chooseMap("腾讯")) }, "腾讯地图"), vue.createElementVNode("view", { class: "nav-sheet-item", onClick: _cache[33] || (_cache[33] = ($event) => _ctx.chooseMap("百度")) }, "百度地图"), vue.createElementVNode("view", { class: "nav-sheet-gap" }), vue.createElementVNode("view", { class: "nav-sheet-item cancel", onClick: _cache[34] || (_cache[34] = (...args) => _ctx.closeNavModal && _ctx.closeNavModal(...args)) }, "取消") ]) ])) : vue.createCommentVNode("v-if", true) ], 64 /* STABLE_FRAGMENT */ ); } const PagesHomeIndex = /* @__PURE__ */ _export_sfc(_sfc_main$t, [["render", _sfc_render$s], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/home/index.vue"]]); const _sfc_main$s = { data() { return { status: "working" // working | resting }; }, onShow() { const savedStatus = uni.getStorageSync("workStatus"); if (savedStatus) { this.status = savedStatus; } }, methods: { toggleStatus() { if (this.status === "working") { this.status = "resting"; uni.setStorageSync("workStatus", "resting"); } else { this.status = "working"; uni.setStorageSync("workStatus", "working"); } } } }; function _sfc_render$r(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createElementVNode("view", { class: "signboard-container" }, [ vue.createElementVNode("view", { class: "rope" }), vue.createElementVNode("view", { class: "nail" }), vue.createElementVNode( "view", { class: vue.normalizeClass(["board", { "resting": $data.status === "resting" }]) }, [ vue.createElementVNode("view", { class: "screw top-left" }), vue.createElementVNode("view", { class: "screw top-right" }), vue.createElementVNode("view", { class: "screw bottom-left" }), vue.createElementVNode("view", { class: "screw bottom-right" }), vue.createElementVNode("view", { class: "board-inner" }, [ vue.createElementVNode( "text", { class: "status-text" }, vue.toDisplayString($data.status === "working" ? "接单中" : "休息中"), 1 /* TEXT */ ) ]) ], 2 /* CLASS */ ) ]), vue.createElementVNode("view", { class: "status-desc" }, [ vue.createElementVNode( "text", null, vue.toDisplayString($data.status === "working" ? "当前处于工作接单中,正常接收新订单" : "当前处于休息状态,暂停接收新订单"), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "action-area" }, [ vue.createElementVNode( "button", { class: vue.normalizeClass(["action-btn", { "stop": $data.status === "working", "stopped": $data.status === "resting" }]), onClick: _cache[0] || (_cache[0] = (...args) => $options.toggleStatus && $options.toggleStatus(...args)) }, vue.toDisplayString($data.status === "working" ? "停止接单" : "已停止接单"), 3 /* TEXT, CLASS */ ), vue.createElementVNode("view", { class: "tips" }, [ $data.status === "working" ? (vue.openBlock(), vue.createElementBlock("text", { key: 0 }, "当您希望长时间不再接收订单时,请点击上方按钮停止接单,开启后需手动恢复。")) : (vue.openBlock(), vue.createElementBlock("text", { key: 1 }, "点击上方按钮恢复接单,开始接收新的任务推送。")) ]) ]) ]); } const PagesHomeWorkStatus = /* @__PURE__ */ _export_sfc(_sfc_main$s, [["render", _sfc_render$r], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/home/work-status.vue"]]); const logic$2 = { data() { return { currentTab: 0, tabs: ["待接送/服务", "配送/服务中", "已完成", "已拒绝"], typeFilterOptions: ["全部类型"], currentTypeFilterIdx: 0, activeDropdown: 0, hasTimeFilter: false, currentMonth: "2026年2月", weekDays: ["日", "一", "二", "三", "四", "五", "六"], calendarDays: [], selectedDateRange: [], allOrderList: [], serviceList: [], searchContent: "", startServiceTime: "", endServiceTime: "", showPetModal: false, currentPetInfo: {}, showNavModal: false, navTargetItem: null, navTargetPointType: "", activeCallItem: null, showRemarkInput: false, remarkText: "" }; }, created() { this.initCalendar(); }, async onLoad() { await this.loadServiceList(); await this.loadOrders(); }, onShow() { this.loadOrders(); }, watch: { currentTab() { this.loadOrders(); }, currentTypeFilterIdx() { this.loadOrders(); } }, computed: { orderList() { return this.allOrderList; } }, methods: { async loadServiceList() { try { const res = await getServiceList(); this.serviceList = res.data || []; this.typeFilterOptions = ["全部类型", ...this.serviceList.map((s) => s.name)]; } catch (err) { formatAppLog("error", "at pages/orders/logic.js:62", "获取服务类型失败:", err); } }, async loadOrders() { var _a; try { const statusMap = { 0: 2, 1: 3, 2: 5, 3: null }; const serviceId = this.currentTypeFilterIdx > 0 ? (_a = this.serviceList[this.currentTypeFilterIdx - 1]) == null ? void 0 : _a.id : void 0; const params = { status: statusMap[this.currentTab], content: this.searchContent || void 0, service: serviceId, startServiceTime: this.startServiceTime || void 0, endServiceTime: this.endServiceTime || void 0 }; formatAppLog("log", "at pages/orders/logic.js:76", "订单列表请求参数:", params); const res = await getMyOrders(params); formatAppLog("log", "at pages/orders/logic.js:78", "订单列表响应:", res); const orders = res.rows || []; formatAppLog("log", "at pages/orders/logic.js:80", "订单数量:", orders.length); this.allOrderList = orders.map((order) => this.transformOrder(order, this.currentTab)); } catch (err) { formatAppLog("error", "at pages/orders/logic.js:83", "获取订单列表失败:", err); this.allOrderList = []; } }, transformOrder(order, tabIndex) { const service = this.serviceList.find((s) => s.id === order.service); const serviceText = (service == null ? void 0 : service.name) || "未知"; const serviceIcon = (service == null ? void 0 : service.icon) || "/static/icons/car.svg"; const mode = (service == null ? void 0 : service.mode) || 0; const isRoundTrip = mode === 1; let statusText = "接单"; if (tabIndex === 0) { statusText = "接单"; } else if (tabIndex === 1) { statusText = isRoundTrip ? "出发" : "开始"; } else if (tabIndex === 2) { statusText = "已完成"; } else if (tabIndex === 3) { statusText = "已拒绝"; } return { id: order.id, type: isRoundTrip ? 1 : 2, typeText: serviceText, typeIcon: serviceIcon, statusText, price: (order.price / 100).toFixed(2), timeLabel: isRoundTrip ? "取货时间" : "服务时间", time: order.serviceTime || "", petAvatar: "/static/dog.png", petName: order.petName || "", petBreed: order.breed || "", startLocation: order.fromAddress || "", startAddress: order.fromAddress || "", startDistance: "0km", endLocation: (order.customerName || "") + " " + (order.customerPhone || ""), endAddress: order.toAddress || "", endDistance: "0km", serviceContent: order.remark || "", remark: order.remark || "" }; }, getDisplayStatus(item) { if (item.statusText === "已完成") return "已完成"; if (item.statusText === "已拒绝") return "已拒绝"; if (item.statusText === "接单") { return item.type === 1 ? "待接送" : "待服务"; } return item.type === 1 ? "配送中" : "服务中"; }, getStatusClass(item) { let display = this.getDisplayStatus(item); if (display === "已完成") return "finish"; if (display === "已拒绝") return "reject"; if (display === "配送中" || display === "服务中") return "processing"; return "highlight"; }, goToDetail(item) { uni.navigateTo({ url: `/pages/orders/detail?id=${item.id}` }); }, showPetProfile(item) { this.currentPetInfo = { ...item, petGender: "M", petAge: "2岁", petWeight: "15kg", petPersonality: "活泼亲人,精力旺盛", petHobby: "喜欢追飞盘,爱吃肉干", petRemark: "肠胃较弱,不能乱喂零食;出门易爆冲,请拉紧牵引绳。", petTags: ["拉响警报", "不能吃鸡肉", "精力旺盛"], petLogs: [ { date: "2026-02-09 14:00", content: "今天遛弯拉了两次粑粑,精神状态很好。", recorder: "王阿姨" }, { date: "2026-02-08 10:30", content: "有些挑食,剩了小半碗狗粮。", recorder: "李师傅" }, { date: "2026-02-05 09:00", content: "建档。", recorder: "系统记录" } ] }; this.showPetModal = true; }, closePetProfile() { this.showPetModal = false; }, openNavigation(item, pointType) { this.navTargetItem = item; this.navTargetPointType = pointType; this.showNavModal = true; }, closeNavModal() { this.showNavModal = false; }, chooseMap(mapType) { let item = this.navTargetItem; let pointType = this.navTargetPointType; let name = pointType === "start" ? item.startLocation : item.endLocation; let address = pointType === "start" ? item.startAddress : item.endAddress; this.showNavModal = false; uni.openLocation({ latitude: 30.52, longitude: 114.31, name: name || "目的地", address: address || "默认地址", success: function() { formatAppLog("log", "at pages/orders/logic.js:186", "打开导航成功: " + mapType); } }); }, toggleCallMenu(item) { if (this.activeCallItem === item) { this.activeCallItem = null; } else { this.activeCallItem = item; } }, closeCallMenu() { this.activeCallItem = null; }, doCall(type) { let phoneNum = ""; if (type === "merchant") { phoneNum = "18900008451"; } else if (type === "customer") { phoneNum = "13800000001"; } if (phoneNum) { uni.makePhoneCall({ phoneNumber: phoneNum }); } this.activeCallItem = null; }, reportAbnormal(item) { uni.navigateTo({ url: "/pages/orders/anomaly?orderId=" + (item.id || "") }); }, toggleDropdown(idx) { if (this.activeDropdown === idx) { this.activeDropdown = 0; } else { this.activeDropdown = idx; } }, closeDropdown() { this.activeDropdown = 0; }, selectType(index) { this.currentTypeFilterIdx = index; this.closeDropdown(); }, initCalendar() { let days = []; for (let i = 1; i <= 28; i++) { days.push(i); } this.calendarDays = days; this.selectedDateRange = [2, 4]; }, prevMonth() { uni.showToast({ title: "上个月", icon: "none" }); }, nextMonth() { uni.showToast({ title: "下个月", icon: "none" }); }, selectDateItem(day) { if (this.selectedDateRange.length === 2) { this.selectedDateRange = [day]; } else if (this.selectedDateRange.length === 1) { let start = this.selectedDateRange[0]; if (day > start) { this.selectedDateRange = [start, day]; } else if (day < start) { this.selectedDateRange = [day, start]; } else { this.selectedDateRange = []; } } else { this.selectedDateRange = [day]; } }, getDateClass(day) { if (this.selectedDateRange.length === 0) return ""; if (this.selectedDateRange.length === 1) { return day === this.selectedDateRange[0] ? "is-start" : ""; } let start = this.selectedDateRange[0]; let end = this.selectedDateRange[1]; if (day === start) return "is-start"; if (day === end) return "is-end"; if (day > start && day < end) return "is-between"; return ""; }, resetTimeFilter() { this.hasTimeFilter = false; this.selectedDateRange = []; uni.showToast({ title: "已重置服务时间", icon: "none" }); this.closeDropdown(); }, confirmTimeFilter() { if (this.selectedDateRange.length === 0) { uni.showToast({ title: "请先选择日期", icon: "none" }); return; } let text = this.selectedDateRange.length === 2 ? `${this.selectedDateRange[0]}日-${this.selectedDateRange[1]}日` : `${this.selectedDateRange[0]}日`; uni.showToast({ title: "已应用: " + text, icon: "none" }); this.hasTimeFilter = true; this.closeDropdown(); }, getMainActionText(item) { return "查看详情"; }, mainAction(item) { uni.navigateTo({ url: `/pages/orders/detail?id=${item.id}` }); }, openRemarkInput() { this.remarkText = ""; this.showRemarkInput = true; }, closeRemarkInput() { this.showRemarkInput = false; this.remarkText = ""; }, submitRemark() { const text = this.remarkText.trim(); if (!text) { uni.showToast({ title: "备注内容不能为空", icon: "none" }); return; } const now = /* @__PURE__ */ new Date(); const dateStr = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, "0")}-${String(now.getDate()).padStart(2, "0")} ${String(now.getHours()).padStart(2, "0")}:${String(now.getMinutes()).padStart(2, "0")}`; if (!this.currentPetInfo.petLogs) { this.$set(this.currentPetInfo, "petLogs", []); } this.currentPetInfo.petLogs.unshift({ date: dateStr, content: text, recorder: "我" }); uni.showToast({ title: "备注已添加", icon: "success" }); this.closeRemarkInput(); } } }; const _sfc_main$r = { ...logic$2 }; function _sfc_render$q(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock( vue.Fragment, null, [ vue.createElementVNode("view", { class: "container" }, [ vue.createElementVNode("view", { class: "sticky-header" }, [ vue.createElementVNode("view", { class: "status-tabs" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(_ctx.tabs, (tab, index) => { return vue.openBlock(), vue.createElementBlock("view", { class: vue.normalizeClass(["tab-item", { active: _ctx.currentTab === index }]), key: index, onClick: ($event) => _ctx.currentTab = index }, [ vue.createElementVNode( "text", null, vue.toDisplayString(tab), 1 /* TEXT */ ), _ctx.currentTab === index ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "indicator" })) : vue.createCommentVNode("v-if", true) ], 10, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ]), vue.createElementVNode("view", { class: "search-bar" }, [ vue.createElementVNode("view", { class: "search-input-box" }, [ vue.createElementVNode("input", { class: "search-input", placeholder: "搜索地址/电话/姓名", "placeholder-class": "ph-style" }) ]) ]), vue.createElementVNode("view", { class: "filter-wrapper" }, [ vue.createElementVNode("view", { class: "filter-bar" }, [ vue.createElementVNode( "view", { class: vue.normalizeClass(["filter-item", { "active": _ctx.activeDropdown === 1 }]), onClick: _cache[0] || (_cache[0] = ($event) => _ctx.toggleDropdown(1)) }, [ vue.createElementVNode( "text", { class: vue.normalizeClass({ "active-text": _ctx.activeDropdown === 1 || _ctx.currentTypeFilterIdx > 0 }) }, vue.toDisplayString(_ctx.currentTypeFilterIdx > 0 ? _ctx.typeFilterOptions[_ctx.currentTypeFilterIdx] : "全部类型"), 3 /* TEXT, CLASS */ ), vue.createElementVNode( "view", { class: vue.normalizeClass(["triangle", _ctx.activeDropdown === 1 ? "up" : "down"]) }, null, 2 /* CLASS */ ) ], 2 /* CLASS */ ), vue.createElementVNode( "view", { class: vue.normalizeClass(["filter-item", { "active": _ctx.activeDropdown === 2 }]), onClick: _cache[1] || (_cache[1] = ($event) => _ctx.toggleDropdown(2)) }, [ vue.createElementVNode( "text", { class: vue.normalizeClass({ "active-text": _ctx.activeDropdown === 2 || _ctx.hasTimeFilter }) }, "服务时间", 2 /* CLASS */ ), vue.createElementVNode( "view", { class: vue.normalizeClass(["triangle", _ctx.activeDropdown === 2 ? "up" : "down"]) }, null, 2 /* CLASS */ ) ], 2 /* CLASS */ ) ]), _ctx.activeDropdown !== 0 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "dropdown-mask", onClick: _cache[2] || (_cache[2] = (...args) => _ctx.closeDropdown && _ctx.closeDropdown(...args)) })) : vue.createCommentVNode("v-if", true), _ctx.activeDropdown === 1 ? (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "dropdown-panel" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(_ctx.typeFilterOptions, (item, index) => { return vue.openBlock(), vue.createElementBlock("view", { class: vue.normalizeClass(["type-option", { "selected": _ctx.currentTypeFilterIdx === index }]), key: index, onClick: ($event) => _ctx.selectType(index) }, [ vue.createElementVNode( "text", null, vue.toDisplayString(item), 1 /* TEXT */ ) ], 10, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ])) : vue.createCommentVNode("v-if", true), _ctx.activeDropdown === 2 ? (vue.openBlock(), vue.createElementBlock("view", { key: 2, class: "dropdown-panel calendar-panel" }, [ vue.createElementVNode("view", { class: "custom-calendar-container" }, [ vue.createElementVNode("view", { class: "cal-header" }, [ vue.createElementVNode("text", { class: "cal-nav-btn", onClick: _cache[3] || (_cache[3] = (...args) => _ctx.prevMonth && _ctx.prevMonth(...args)) }, "‹"), vue.createElementVNode( "text", { class: "cal-title" }, vue.toDisplayString(_ctx.currentMonth), 1 /* TEXT */ ), vue.createElementVNode("text", { class: "cal-nav-btn", onClick: _cache[4] || (_cache[4] = (...args) => _ctx.nextMonth && _ctx.nextMonth(...args)) }, "›") ]), vue.createElementVNode("view", { class: "cal-weekdays" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(_ctx.weekDays, (wk, idx) => { return vue.openBlock(), vue.createElementBlock( "text", { key: idx, class: "wk-item" }, vue.toDisplayString(wk), 1 /* TEXT */ ); }), 128 /* KEYED_FRAGMENT */ )) ]), vue.createElementVNode("view", { class: "cal-body" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(_ctx.calendarDays, (day, idx) => { return vue.openBlock(), vue.createElementBlock("view", { key: idx, class: vue.normalizeClass(["cal-day-box", _ctx.getDateClass(day)]), onClick: ($event) => _ctx.selectDateItem(day) }, [ vue.createElementVNode( "view", { class: "cal-day-text" }, vue.toDisplayString(day), 1 /* TEXT */ ) ], 10, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ]) ]), vue.createElementVNode("view", { class: "calendar-actions" }, [ vue.createElementVNode("button", { class: "cal-btn reset", onClick: _cache[5] || (_cache[5] = (...args) => _ctx.resetTimeFilter && _ctx.resetTimeFilter(...args)) }, "重置"), vue.createElementVNode("button", { class: "cal-btn confirm", onClick: _cache[6] || (_cache[6] = (...args) => _ctx.confirmTimeFilter && _ctx.confirmTimeFilter(...args)) }, "确定") ]) ])) : vue.createCommentVNode("v-if", true) ]) ]), vue.createElementVNode("scroll-view", { "scroll-y": "", class: "order-list" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(_ctx.orderList, (item, index) => { return vue.openBlock(), vue.createElementBlock("view", { class: "order-card", key: index, onClick: ($event) => _ctx.goToDetail(item) }, [ vue.createElementVNode("view", { class: "card-header" }, [ vue.createElementVNode("view", { class: "type-badge" }, [ vue.createElementVNode("image", { class: "type-icon", src: item.typeIcon }, null, 8, ["src"]), vue.createElementVNode( "text", { class: "type-text" }, vue.toDisplayString(item.typeText), 1 /* TEXT */ ) ]), vue.createElementVNode( "text", { class: vue.normalizeClass(["status-badge", _ctx.getStatusClass(item)]) }, vue.toDisplayString(_ctx.getDisplayStatus(item)), 3 /* TEXT, CLASS */ ) ]), vue.createElementVNode("view", { class: "card-body" }, [ vue.createElementVNode("view", { class: "time-row" }, [ vue.createElementVNode("view", { class: "time-col" }, [ vue.createElementVNode( "text", { class: "label" }, vue.toDisplayString(item.timeLabel) + ":", 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "value" }, vue.toDisplayString(item.time), 1 /* TEXT */ ) ]), vue.createElementVNode( "text", { class: "price" }, "¥" + vue.toDisplayString(item.price), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "pet-card" }, [ vue.createElementVNode("image", { class: "pet-avatar", src: item.petAvatar, mode: "aspectFill" }, null, 8, ["src"]), vue.createElementVNode("view", { class: "pet-info" }, [ vue.createElementVNode( "text", { class: "pet-name" }, vue.toDisplayString(item.petName), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "pet-breed" }, "品种: " + vue.toDisplayString(item.petBreed), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "pet-profile-btn", onClick: vue.withModifiers(($event) => _ctx.showPetProfile(item), ["stop"]) }, "宠物档案", 8, ["onClick"]) ]), vue.createElementVNode("view", { class: "route-info" }, [ item.type === 1 ? (vue.openBlock(), vue.createElementBlock( vue.Fragment, { key: 0 }, [ vue.createElementVNode("view", { class: "route-item", onClick: vue.withModifiers(($event) => _ctx.openNavigation(item, "start"), ["stop"]) }, [ vue.createElementVNode("view", { class: "icon-circle start" }, "起"), vue.createElementVNode("view", { class: "route-line-vertical" }), vue.createElementVNode("view", { class: "address-box" }, [ vue.createElementVNode( "text", { class: "addr-title" }, vue.toDisplayString(item.startLocation), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "addr-desc" }, vue.toDisplayString(item.startAddress), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "distance-tag" }, [ vue.createElementVNode( "text", { class: "distance-text" }, vue.toDisplayString(item.startDistance), 1 /* TEXT */ ), vue.createElementVNode("view", { class: "nav-icon-circle" }, [ vue.createElementVNode("image", { class: "nav-arrow", src: _imports_3$2 }) ]) ]) ], 8, ["onClick"]), vue.createElementVNode("view", { class: "route-item", onClick: vue.withModifiers(($event) => _ctx.openNavigation(item, "end"), ["stop"]) }, [ vue.createElementVNode("view", { class: "icon-circle end" }, "终"), vue.createElementVNode("view", { class: "address-box" }, [ vue.createElementVNode( "text", { class: "addr-title" }, vue.toDisplayString(item.endLocation), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "addr-desc" }, vue.toDisplayString(item.endAddress), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "distance-tag" }, [ vue.createElementVNode( "text", { class: "distance-text" }, vue.toDisplayString(item.endDistance), 1 /* TEXT */ ), vue.createElementVNode("view", { class: "nav-icon-circle" }, [ vue.createElementVNode("image", { class: "nav-arrow", src: _imports_3$2 }) ]) ]) ], 8, ["onClick"]) ], 64 /* STABLE_FRAGMENT */ )) : (vue.openBlock(), vue.createElementBlock( vue.Fragment, { key: 1 }, [ vue.createElementVNode("view", { class: "route-item", onClick: vue.withModifiers(($event) => _ctx.openNavigation(item, "end"), ["stop"]) }, [ vue.createElementVNode("view", { class: "icon-circle service" }, "服"), vue.createElementVNode("view", { class: "address-box" }, [ vue.createElementVNode( "text", { class: "addr-title" }, vue.toDisplayString(item.endLocation), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "addr-desc" }, vue.toDisplayString(item.endAddress), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "distance-tag" }, [ vue.createElementVNode( "text", { class: "distance-text" }, vue.toDisplayString(item.endDistance), 1 /* TEXT */ ), vue.createElementVNode("view", { class: "nav-icon-circle" }, [ vue.createElementVNode("image", { class: "nav-arrow", src: _imports_3$2 }) ]) ]) ], 8, ["onClick"]), item.serviceContent ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "service-content" }, [ vue.createElementVNode("text", { class: "content-label" }, "服务内容:"), vue.createElementVNode( "text", null, vue.toDisplayString(item.serviceContent), 1 /* TEXT */ ) ])) : vue.createCommentVNode("v-if", true) ], 64 /* STABLE_FRAGMENT */ )) ]), item.remark ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "remark-box" }, [ vue.createElementVNode( "text", null, "备注:" + vue.toDisplayString(item.remark), 1 /* TEXT */ ) ])) : vue.createCommentVNode("v-if", true) ]), ["接单", "到达", "出发", "开始", "送达", "结束"].includes(item.statusText) ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "action-btns" }, [ vue.createElementVNode("view", { class: "action-left" }, [ vue.createElementVNode("button", { class: "btn normal", onClick: vue.withModifiers(($event) => _ctx.toggleCallMenu(item), ["stop"]) }, "一键拨号", 8, ["onClick"]), _ctx.activeCallItem === item ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "call-popover", onClick: _cache[9] || (_cache[9] = vue.withModifiers(() => { }, ["stop"])) }, [ vue.createElementVNode("view", { class: "call-pop-item", onClick: _cache[7] || (_cache[7] = ($event) => _ctx.doCall("merchant")) }, "联系商家"), vue.createElementVNode("view", { class: "call-pop-item", onClick: _cache[8] || (_cache[8] = ($event) => _ctx.doCall("customer")) }, "联系客户") ])) : vue.createCommentVNode("v-if", true) ]), vue.createElementVNode("view", { class: "action-right" }, [ vue.createElementVNode("button", { class: "btn normal", onClick: vue.withModifiers(($event) => _ctx.reportAbnormal(item), ["stop"]) }, "异常上报", 8, ["onClick"]), vue.createElementVNode("button", { class: "btn primary", onClick: vue.withModifiers(($event) => _ctx.mainAction(item), ["stop"]) }, vue.toDisplayString(_ctx.getMainActionText(item)), 9, ["onClick"]) ]) ])) : vue.createCommentVNode("v-if", true) ], 8, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )), vue.createElementVNode("view", { class: "loading-text" }, "已加载完"), vue.createElementVNode("view", { style: { "height": "160rpx" } }) ]), _ctx.activeCallItem ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "call-mask", onClick: _cache[10] || (_cache[10] = (...args) => _ctx.closeCallMenu && _ctx.closeCallMenu(...args)) })) : vue.createCommentVNode("v-if", true) ]), _ctx.showPetModal ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "pet-modal-mask", onClick: _cache[14] || (_cache[14] = (...args) => _ctx.closePetProfile && _ctx.closePetProfile(...args)) }, [ vue.createElementVNode("view", { class: "pet-modal-content", onClick: _cache[13] || (_cache[13] = vue.withModifiers(() => { }, ["stop"])) }, [ vue.createElementVNode("view", { class: "pet-modal-header" }, [ vue.createElementVNode("text", { class: "pet-modal-title" }, "宠物档案"), vue.createElementVNode("view", { class: "pm-header-actions" }, [ vue.createElementVNode("view", { class: "pm-remark-btn", onClick: _cache[11] || (_cache[11] = (...args) => _ctx.openRemarkInput && _ctx.openRemarkInput(...args)) }, "备注"), vue.createElementVNode("view", { class: "close-icon-btn", onClick: _cache[12] || (_cache[12] = (...args) => _ctx.closePetProfile && _ctx.closePetProfile(...args)) }, "×") ]) ]), vue.createElementVNode("scroll-view", { "scroll-y": "", class: "pet-modal-scroll" }, [ vue.createElementVNode("view", { class: "pet-base-info" }, [ vue.createElementVNode("image", { class: "pm-avatar", src: _ctx.currentPetInfo.petAvatar, mode: "aspectFill" }, null, 8, ["src"]), vue.createElementVNode("view", { class: "pm-info-text" }, [ vue.createElementVNode("view", { class: "pm-name-row" }, [ vue.createElementVNode( "text", { class: "pm-name" }, vue.toDisplayString(_ctx.currentPetInfo.petName), 1 /* TEXT */ ), _ctx.currentPetInfo.petGender === "M" ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "pm-gender" }, [ vue.createElementVNode("text", { class: "gender-icon" }, "♂"), vue.createElementVNode("text", null, "公") ])) : _ctx.currentPetInfo.petGender === "F" ? (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "pm-gender female" }, [ vue.createElementVNode("text", { class: "gender-icon" }, "♀"), vue.createElementVNode("text", null, "母") ])) : vue.createCommentVNode("v-if", true) ]), vue.createElementVNode( "text", { class: "pm-breed" }, "品种:" + vue.toDisplayString(_ctx.currentPetInfo.petBreed), 1 /* TEXT */ ) ]) ]), vue.createElementVNode("view", { class: "pm-detail-grid" }, [ vue.createElementVNode("view", { class: "pm-grid-item half" }, [ vue.createElementVNode("text", { class: "pm-label" }, "年龄"), vue.createElementVNode( "text", { class: "pm-val" }, vue.toDisplayString(_ctx.currentPetInfo.petAge || "未知"), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "pm-grid-item half" }, [ vue.createElementVNode("text", { class: "pm-label" }, "体重"), vue.createElementVNode( "text", { class: "pm-val" }, vue.toDisplayString(_ctx.currentPetInfo.petWeight || "未知"), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "pm-grid-item full" }, [ vue.createElementVNode("text", { class: "pm-label" }, "性格"), vue.createElementVNode( "text", { class: "pm-val" }, vue.toDisplayString(_ctx.currentPetInfo.petPersonality || "无"), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "pm-grid-item full" }, [ vue.createElementVNode("text", { class: "pm-label" }, "爱好"), vue.createElementVNode( "text", { class: "pm-val" }, vue.toDisplayString(_ctx.currentPetInfo.petHobby || "无"), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "pm-grid-item full" }, [ vue.createElementVNode("text", { class: "pm-label" }, "备注"), vue.createElementVNode( "text", { class: "pm-val" }, vue.toDisplayString(_ctx.currentPetInfo.petRemark || "无特殊过敏史"), 1 /* TEXT */ ) ]) ]), _ctx.currentPetInfo.petTags && _ctx.currentPetInfo.petTags.length > 0 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "pm-tags" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(_ctx.currentPetInfo.petTags, (tag, index) => { return vue.openBlock(), vue.createElementBlock( "view", { class: "pm-tag", key: index }, vue.toDisplayString(tag), 1 /* TEXT */ ); }), 128 /* KEYED_FRAGMENT */ )) ])) : vue.createCommentVNode("v-if", true), vue.createElementVNode("view", { class: "pm-section-title" }, [ vue.createElementVNode("view", { class: "orange-bar" }), vue.createElementVNode("text", null, "备注日志") ]), vue.createElementVNode("view", { class: "pm-log-list" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(_ctx.currentPetInfo.petLogs, (log, lIndex) => { return vue.openBlock(), vue.createElementBlock("view", { class: "pm-log-item", key: lIndex }, [ vue.createElementVNode( "text", { class: "pm-log-date" }, vue.toDisplayString(log.date), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "pm-log-text" }, vue.toDisplayString(log.content), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "pm-log-recorder" }, vue.toDisplayString(log.recorder === "系统记录" ? "" : "记录人: ") + vue.toDisplayString(log.recorder), 1 /* TEXT */ ) ]); }), 128 /* KEYED_FRAGMENT */ )) ]), vue.createElementVNode("view", { style: { "height": "30rpx" } }) ]) ]) ])) : vue.createCommentVNode("v-if", true), _ctx.showRemarkInput ? (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "remark-mask", onClick: _cache[19] || (_cache[19] = (...args) => _ctx.closeRemarkInput && _ctx.closeRemarkInput(...args)) }, [ vue.createElementVNode("view", { class: "remark-sheet", onClick: _cache[18] || (_cache[18] = vue.withModifiers(() => { }, ["stop"])) }, [ vue.createElementVNode("view", { class: "remark-sheet-header" }, [ vue.createElementVNode("text", { class: "remark-sheet-title" }, "添加备注"), vue.createElementVNode("view", { class: "close-icon-btn", onClick: _cache[15] || (_cache[15] = (...args) => _ctx.closeRemarkInput && _ctx.closeRemarkInput(...args)) }, "×") ]), vue.withDirectives(vue.createElementVNode( "textarea", { class: "remark-textarea", "onUpdate:modelValue": _cache[16] || (_cache[16] = ($event) => _ctx.remarkText = $event), placeholder: "请输入备注内容...", maxlength: "500", "auto-height": "" }, null, 512 /* NEED_PATCH */ ), [ [vue.vModelText, _ctx.remarkText] ]), vue.createElementVNode("view", { class: "remark-submit-btn", onClick: _cache[17] || (_cache[17] = (...args) => _ctx.submitRemark && _ctx.submitRemark(...args)) }, "提交备注") ]) ])) : vue.createCommentVNode("v-if", true), _ctx.showNavModal ? (vue.openBlock(), vue.createElementBlock("view", { key: 2, class: "nav-modal-mask", onClick: _cache[25] || (_cache[25] = (...args) => _ctx.closeNavModal && _ctx.closeNavModal(...args)) }, [ vue.createElementVNode("view", { class: "nav-action-sheet", onClick: _cache[24] || (_cache[24] = vue.withModifiers(() => { }, ["stop"])) }, [ vue.createElementVNode("view", { class: "nav-sheet-title" }, "选择地图进行导航"), vue.createElementVNode("view", { class: "nav-sheet-item", onClick: _cache[20] || (_cache[20] = ($event) => _ctx.chooseMap("高德")) }, "高德地图"), vue.createElementVNode("view", { class: "nav-sheet-item", onClick: _cache[21] || (_cache[21] = ($event) => _ctx.chooseMap("腾讯")) }, "腾讯地图"), vue.createElementVNode("view", { class: "nav-sheet-item", onClick: _cache[22] || (_cache[22] = ($event) => _ctx.chooseMap("百度")) }, "百度地图"), vue.createElementVNode("view", { class: "nav-sheet-gap" }), vue.createElementVNode("view", { class: "nav-sheet-item cancel", onClick: _cache[23] || (_cache[23] = (...args) => _ctx.closeNavModal && _ctx.closeNavModal(...args)) }, "取消") ]) ])) : vue.createCommentVNode("v-if", true) ], 64 /* STABLE_FRAGMENT */ ); } const PagesOrdersIndex = /* @__PURE__ */ _export_sfc(_sfc_main$r, [["render", _sfc_render$q], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/orders/index.vue"]]); const logic$1 = { data() { return { orderId: null, orderType: 1, orderStatus: 2, stepsPickup: ["到达打卡", "确认出发", "送达打卡"], stepsWalkWash: ["到达打卡", "开始服务", "服务结束"], currentStep: 1, orderDetail: { type: 1, price: "0.00", timeLabel: "服务时间", time: "", petAvatar: "/static/dog.png", petName: "", petBreed: "", serviceTag: "", startLocation: "", startAddress: "", endLocation: "", endAddress: "", serviceContent: "", remark: "", orderNo: "", createTime: "", progressLogs: [] }, serviceList: [], showPetModal: false, currentPetInfo: {}, showNavModal: false, navTargetPointType: "", showUploadModal: false, modalMediaList: [], modalRemark: "", showSumModal: false, sumContent: "", sumDate: "", sumSigner: "张*哥", showPetRemarkInput: false, petRemarkText: "" }; }, computed: { steps() { return this.orderType === 1 ? this.stepsPickup : this.stepsWalkWash; }, displayStatusText() { if (this.currentStep === 4) return "待商家确认"; if (this.currentStep >= this.steps.length) return "已完成"; let status = this.steps[this.currentStep]; if (status === "已完成" || status === "完成") return "已完成"; if (status === "已拒绝") return "已拒绝"; if (status === "接单") { return this.orderType === 1 ? "待接送" : "待服务"; } return this.orderType === 1 ? "配送中" : "服务中"; }, currentStatusText() { if (this.currentStep === 4) return "待确认"; return this.currentStep >= this.steps.length ? "已完成" : this.steps[this.currentStep]; }, currentTaskTitle() { if (this.currentStep === 4) return "待商家确认"; if (this.currentStep >= this.steps.length) return "订单已完成"; let action = this.steps[this.currentStep]; if (action === "到达打卡") return "到达打卡"; if (action === "开始服务") return "开始服务"; if (action === "确认出发") return "确认出发"; if (action === "送达打卡" || action === "服务结束") return "服务完成"; return action; }, currentTaskDesc() { if (this.currentStep === 4) return "服务已提交,请等待商家确认完成后即可结束订单"; if (this.currentStep >= this.steps.length) return "感谢您的服务,请注意休息"; let action = this.steps[this.currentStep]; if (action === "到达打卡") { return "打卡穿着工装消毒站门口的照片或视频"; } if (this.orderType === 1) { if (action === "确认出发") return "拍摄宠物上车/出发时的状态照片或视频"; if (action === "送达打卡") return "打卡确认送达的照片或视频"; } else { if (action === "开始服务") return "开始服务并拍摄照片 or 视频"; if (action === "服务结束") return "服务完成拍摄照片或视频"; } return "请按要求提交照片或视频及备注"; } }, async onLoad(options) { if (options.id) { this.orderId = options.id; } await this.loadServiceList(); await this.loadOrderDetail(); }, methods: { async loadServiceList() { try { const res = await getServiceList(); this.serviceList = res.data || []; } catch (err) { formatAppLog("error", "at pages/orders/detail-logic.js:115", "获取服务类型失败:", err); } }, async loadOrderDetail() { if (!this.orderId) { formatAppLog("log", "at pages/orders/detail-logic.js:120", "订单ID缺失"); uni.showToast({ title: "订单ID缺失", icon: "none" }); return; } try { formatAppLog("log", "at pages/orders/detail-logic.js:125", "请求订单详情,ID:", this.orderId); const res = await getOrderInfo(this.orderId); formatAppLog("log", "at pages/orders/detail-logic.js:127", "订单详情响应:", res); const order = res.data; if (!order) { formatAppLog("log", "at pages/orders/detail-logic.js:130", "订单数据为空"); uni.showToast({ title: "订单不存在", icon: "none" }); return; } formatAppLog("log", "at pages/orders/detail-logic.js:134", "订单数据:", order); this.transformOrderData(order); await this.loadOrderLogs(); } catch (err) { formatAppLog("error", "at pages/orders/detail-logic.js:138", "获取订单详情失败:", err); uni.showToast({ title: "加载失败", icon: "none" }); } }, async loadOrderLogs() { try { const res = await getOrderLogs(this.orderId); const logs = res.data || []; formatAppLog("log", "at pages/orders/detail-logic.js:146", "订单日志:", logs); if (logs.length > 0) { formatAppLog("log", "at pages/orders/detail-logic.js:148", "第一条日志详情:", JSON.stringify(logs[0])); } const progressLogs = logs.filter((log) => log.logType === 1); this.orderDetail.progressLogs = progressLogs.map((log) => ({ status: log.title || "", time: log.createTime || "", medias: log.photoUrls || [], remark: log.content || "" })); const validLogs = logs.filter((log) => log.logType === 1 && log.actionType !== void 0).sort((a, b) => new Date(b.createTime).getTime() - new Date(a.createTime).getTime()); if (validLogs.length > 0) { const latestLog = validLogs[0]; const actionType = latestLog.actionType; if (latestLog.actionType >= 7) { this.currentStep = 4; } else if (actionType === 7) { this.currentStep = 3; } else if (actionType === 6) { this.currentStep = 2; } else if (actionType === 4) { this.currentStep = 1; } else if (actionType === 2 || actionType === 3) { this.currentStep = 0; } else { this.currentStep = 0; } } else { this.currentStep = 0; } formatAppLog("log", "at pages/orders/detail-logic.js:184", "根据最新日志推算的当前步骤:", this.currentStep); } catch (err) { formatAppLog("error", "at pages/orders/detail-logic.js:186", "获取订单日志失败:", err); } }, transformOrderData(order) { const mode = order.mode || 0; const isRoundTrip = mode === 1; this.orderType = isRoundTrip ? 1 : 2; this.orderStatus = order.status || 2; this.orderDetail = { type: this.orderType, price: (order.price / 100).toFixed(2), timeLabel: isRoundTrip ? "取货时间" : "服务时间", time: order.serviceTime || "", petAvatar: "/static/dog.png", petName: order.petName || order.contact || "", petBreed: order.breed || "", serviceTag: order.groupPurchasePackageName || "", startLocation: order.fromAddress || "", startAddress: order.fromAddress || "", endLocation: (order.contact || "") + " " + (order.contactPhoneNumber || ""), endAddress: order.toAddress || "", serviceContent: "", remark: "", orderNo: order.code || "T" + order.id, createTime: order.serviceTime || "", progressLogs: [ { status: "您已接单", time: order.serviceTime || "" } ] }; }, updateStepByStatus() { if (this.orderStatus === 2) { this.currentStep = 0; } else if (this.orderStatus === 3) { this.currentStep = 1; } else if (this.orderStatus === 5) { this.currentStep = this.steps.length - 1; } else { this.currentStep = 0; } }, showPetProfile() { this.currentPetInfo = { ...this.orderDetail, petGender: "M", petAge: "2岁", petWeight: "15kg", petPersonality: "活泼亲人,精力旺盛", petHobby: "喜欢追飞盘,爱吃肉干", petRemark: "肠胃较弱,不能乱喂零食;出门易爆冲,请拉紧牵引绳。", petTags: ["拉响警报", "不能吃鸡肉", "精力旺盛"], petLogs: [ { date: "2026-02-09 14:00", content: "今天遛弯拉了两次粑粑,精神状态很好。", recorder: "王阿姨" }, { date: "2026-02-08 10:30", content: "有些挑食,剩了小半碗狗粮。", recorder: "李师傅" }, { date: "2026-02-05 09:00", content: "建档。", recorder: "系统记录" } ] }; this.showPetModal = true; }, closePetProfile() { this.showPetModal = false; }, openPetRemarkInput() { this.petRemarkText = ""; this.showPetRemarkInput = true; }, closePetRemarkInput() { this.showPetRemarkInput = false; }, submitPetRemark() { if (!this.petRemarkText.trim()) { uni.showToast({ title: "备注内容不能为空", icon: "none" }); return; } const now = /* @__PURE__ */ new Date(); const date = `${now.getFullYear()}/${String(now.getMonth() + 1).padStart(2, "0")}/${String(now.getDate()).padStart(2, "0")}`; if (!this.currentPetInfo.petLogs) { this.currentPetInfo.petLogs = []; } this.currentPetInfo.petLogs.unshift({ date, content: this.petRemarkText, recorder: "张*哥" }); this.closePetRemarkInput(); uni.showToast({ title: "备注已添加", icon: "success" }); }, goToAnomaly() { uni.navigateTo({ url: "/pages/orders/anomaly?orderId=" + (this.orderDetail.orderNo || "") }); }, callPhone() { uni.makePhoneCall({ phoneNumber: "18900008451" }); }, openNavigation(type) { this.navTargetPointType = type; this.showNavModal = true; }, closeNavModal() { this.showNavModal = false; }, chooseMap(mapType) { let pointType = this.navTargetPointType; let name = pointType === "start" ? this.orderDetail.startLocation : this.orderDetail.endLocation; let address = pointType === "start" ? this.orderDetail.startAddress : this.orderDetail.endAddress; this.showNavModal = false; uni.openLocation({ latitude: 30.52, // Mock lat longitude: 114.31, // Mock lng name: name || "目的地", address: address || "默认地址", success: function() { formatAppLog("log", "at pages/orders/detail-logic.js:304", "打开导航成功: " + mapType); } }); }, openUploadModal() { this.modalMediaList = []; this.modalRemark = ""; this.showUploadModal = true; }, closeUploadModal() { this.showUploadModal = false; }, handleConfirmUpload() { formatAppLog("log", "at pages/orders/detail-logic.js:317", "handleConfirmUpload被调用"); this.confirmUploadModal(); }, async chooseModalMedia() { formatAppLog("log", "at pages/orders/detail-logic.js:321", "chooseModalMedia被调用"); uni.chooseImage({ count: 5 - this.modalMediaList.length, success: async (res) => { formatAppLog("log", "at pages/orders/detail-logic.js:325", "选择图片成功,文件路径:", res.tempFilePaths); uni.showLoading({ title: "上传中..." }); try { for (const filePath of res.tempFilePaths) { formatAppLog("log", "at pages/orders/detail-logic.js:329", "上传文件:", filePath); const uploadRes = await uploadFile(filePath); formatAppLog("log", "at pages/orders/detail-logic.js:331", "上传响应:", uploadRes); if (uploadRes.code === 200) { this.modalMediaList.push({ url: uploadRes.data.url, ossId: uploadRes.data.ossId, localPath: filePath }); formatAppLog("log", "at pages/orders/detail-logic.js:338", "上传成功,url:", uploadRes.data.url); } } uni.hideLoading(); formatAppLog("log", "at pages/orders/detail-logic.js:342", "当前modalMediaList:", this.modalMediaList); uni.showToast({ title: "上传成功", icon: "success" }); } catch (err) { uni.hideLoading(); formatAppLog("error", "at pages/orders/detail-logic.js:346", "上传失败:", err); uni.showToast({ title: "上传失败", icon: "none" }); } }, fail: (err) => { formatAppLog("error", "at pages/orders/detail-logic.js:351", "选择图片失败:", err); } }); }, removeModalMedia(index) { this.modalMediaList.splice(index, 1); }, getCurrentTime() { const now = /* @__PURE__ */ new Date(); const y = now.getFullYear(); const m = String(now.getMonth() + 1).padStart(2, "0"); const d = String(now.getDate()).padStart(2, "0"); const h = String(now.getHours()).padStart(2, "0"); const min = String(now.getMinutes()).padStart(2, "0"); return `${y}/${m}/${d} ${h}:${min}`; }, async confirmUploadModal() { formatAppLog("log", "at pages/orders/detail-logic.js:368", "confirmUploadModal被调用,文件数量:", this.modalMediaList.length); if (this.modalMediaList.length === 0) { uni.showToast({ title: "请上传至少一张图片或视频", icon: "none" }); return; } try { uni.showLoading({ title: "提交中..." }); const uploadedMedias = this.modalMediaList.map((item) => item.url); const ossIds = this.modalMediaList.map((item) => item.ossId); formatAppLog("log", "at pages/orders/detail-logic.js:379", "准备打卡,ossIds:", ossIds); const currentAction = this.steps[this.currentStep]; let clockInType = 4; if (currentAction === "到达打卡") { clockInType = 4; } else if (currentAction === "确认出发" || currentAction === "开始服务") { clockInType = 6; } else if (currentAction === "送达打卡" || currentAction === "服务结束") { clockInType = 7; } const clockInData = { orderId: this.orderId, photos: ossIds, content: this.modalRemark || "", type: clockInType, title: this.currentTaskTitle }; formatAppLog("log", "at pages/orders/detail-logic.js:399", "打卡数据:", clockInData); await clockIn(clockInData); uni.hideLoading(); this.closeUploadModal(); uni.showToast({ title: "打卡成功", icon: "success" }); await this.loadOrderDetail(); } catch (err) { uni.hideLoading(); formatAppLog("error", "at pages/orders/detail-logic.js:409", "打卡失败:", err); uni.showToast({ title: "打卡失败,请重试", icon: "none" }); } }, copyOrderNo() { uni.setClipboardData({ data: this.orderDetail.orderNo, success: () => { uni.showToast({ title: "复制成功", icon: "none" }); } }); }, openSumModal() { const now = /* @__PURE__ */ new Date(); const y = now.getFullYear(); const m = String(now.getMonth() + 1).padStart(2, "0"); const d = String(now.getDate()).padStart(2, "0"); this.sumDate = `${y}/${m}/${d}`; if (!this.sumContent) { this.sumContent = "1. 精神/身体状态:\n2. 进食/饮水:\n3. 排泤情况:\n4. 卫生情况:\n5. 互动情况:\n6. 特殊情况/备注:"; } this.showSumModal = true; }, closeSumModal() { this.showSumModal = false; }, submitSumModal() { if (!this.sumContent.trim()) { uni.showToast({ title: "请填写服务内容", icon: "none" }); return; } this.closeSumModal(); uni.showToast({ title: "小结已提交", icon: "success" }); } } }; const _imports_14 = "/static/icons/phone_orange.svg"; const _imports_1$7 = "/static/icons/clock.svg"; const _imports_0$2 = "/static/icons/right_arrow_orange.svg"; const _imports_4$1 = "/static/icons/heart.svg"; const _imports_5 = "/static/icons/file.svg"; const _imports_1$6 = "/static/icons/camera_grey.svg"; const _imports_7 = "/static/icons/order_no.svg"; const _sfc_main$q = { ...logic$1 }; function _sfc_render$p(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "detail-container" }, [ vue.createElementVNode("view", { class: "detail-header" }, [ vue.createElementVNode("view", { class: "status-row" }, [ vue.createElementVNode( "text", { class: "status-title" }, vue.toDisplayString(_ctx.displayStatusText), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "status-price" }, "¥" + vue.toDisplayString(_ctx.orderDetail.price), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "progress-bar" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(_ctx.steps, (step, index) => { return vue.openBlock(), vue.createElementBlock( "view", { class: vue.normalizeClass(["step-item", { "active": index === _ctx.currentStep }]), key: index }, [ vue.createElementVNode("view", { class: "step-circle-wrapper" }, [ index !== 0 ? (vue.openBlock(), vue.createElementBlock( "view", { key: 0, class: vue.normalizeClass(["step-line", { "active-line": index <= _ctx.currentStep }]) }, null, 2 /* CLASS */ )) : vue.createCommentVNode("v-if", true), vue.createElementVNode( "view", { class: "step-circle" }, vue.toDisplayString(index + 1), 1 /* TEXT */ ) ]), vue.createElementVNode( "text", { class: "step-text" }, vue.toDisplayString(step), 1 /* TEXT */ ) ], 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ )) ]) ]), vue.createElementVNode("scroll-view", { "scroll-y": "", class: "detail-content" }, [ vue.createElementVNode("view", { class: "white-card pet-bar" }, [ vue.createElementVNode("image", { class: "pb-avatar", src: _ctx.orderDetail.petAvatar, mode: "aspectFill" }, null, 8, ["src"]), vue.createElementVNode("view", { class: "pb-info" }, [ vue.createElementVNode("view", { class: "pb-name-row" }, [ vue.createElementVNode( "text", { class: "pb-name" }, vue.toDisplayString(_ctx.orderDetail.petName), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "pb-breed" }, "品种: " + vue.toDisplayString(_ctx.orderDetail.petBreed), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "pb-tags" }, [ vue.createElementVNode( "text", { class: "pb-tag" }, vue.toDisplayString(_ctx.orderDetail.serviceTag), 1 /* TEXT */ ) ]) ]), vue.createElementVNode("view", { class: "pb-actions" }, [ vue.createElementVNode("view", { class: "pb-btn profile-btn", onClick: _cache[0] || (_cache[0] = (...args) => _ctx.showPetProfile && _ctx.showPetProfile(...args)) }, "宠物档案"), vue.createElementVNode("view", { class: "pb-btn phone-btn", onClick: _cache[1] || (_cache[1] = (...args) => _ctx.callPhone && _ctx.callPhone(...args)) }, [ vue.createElementVNode("image", { class: "phone-icon", src: _imports_14 }) ]) ]) ]), vue.createElementVNode("view", { class: "white-card service-info-card" }, [ vue.createElementVNode("view", { class: "si-row time-row" }, [ vue.createElementVNode("image", { class: "si-icon outline", src: _imports_1$7 }), vue.createElementVNode("view", { class: "si-content" }, [ vue.createElementVNode("text", { class: "si-label" }, "服务时间"), vue.createElementVNode( "text", { class: "si-val" }, vue.toDisplayString(_ctx.orderDetail.time), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "si-action record-btn" }, [ vue.createElementVNode("text", null, "异常记录"), vue.createElementVNode("image", { class: "record-arrow", src: _imports_0$2 }) ]) ]), _ctx.orderDetail.type === 1 ? (vue.openBlock(), vue.createElementBlock( vue.Fragment, { key: 0 }, [ vue.createElementVNode("view", { class: "si-row addr-row start-addr" }, [ vue.createElementVNode("view", { class: "icon-circle start" }, "起"), vue.createElementVNode("view", { class: "route-line-vertical" }), vue.createElementVNode("view", { class: "si-content" }, [ vue.createElementVNode( "text", { class: "si-addr-title" }, vue.toDisplayString(_ctx.orderDetail.startLocation), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "si-addr-desc" }, vue.toDisplayString(_ctx.orderDetail.startAddress), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "nav-btn-circle", onClick: _cache[2] || (_cache[2] = ($event) => _ctx.openNavigation("start")) }, [ vue.createElementVNode("image", { class: "nav-arrow", src: _imports_3$2 }) ]) ]), vue.createElementVNode("view", { class: "si-row addr-row end-addr" }, [ vue.createElementVNode("view", { class: "icon-circle end" }, "终"), vue.createElementVNode("view", { class: "si-content" }, [ vue.createElementVNode( "text", { class: "si-addr-title" }, vue.toDisplayString(_ctx.orderDetail.endLocation), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "si-addr-desc" }, vue.toDisplayString(_ctx.orderDetail.endAddress), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "nav-btn-circle", onClick: _cache[3] || (_cache[3] = ($event) => _ctx.openNavigation("end")) }, [ vue.createElementVNode("image", { class: "nav-arrow", src: _imports_3$2 }) ]) ]) ], 64 /* STABLE_FRAGMENT */ )) : (vue.openBlock(), vue.createElementBlock( vue.Fragment, { key: 1 }, [ vue.createElementVNode("view", { class: "si-row addr-row end-addr" }, [ vue.createElementVNode("view", { class: "icon-circle service" }, "服"), vue.createElementVNode("view", { class: "si-content" }, [ vue.createElementVNode( "text", { class: "si-addr-title" }, vue.toDisplayString(_ctx.orderDetail.endLocation), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "si-addr-desc" }, vue.toDisplayString(_ctx.orderDetail.endAddress), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "nav-btn-circle", onClick: _cache[4] || (_cache[4] = ($event) => _ctx.openNavigation("end")) }, [ vue.createElementVNode("image", { class: "nav-arrow", src: _imports_3$2 }) ]) ]), vue.createElementVNode("view", { class: "si-row" }, [ vue.createElementVNode("image", { class: "si-icon outline", src: _imports_4$1 }), vue.createElementVNode("view", { class: "si-content" }, [ vue.createElementVNode("text", { class: "si-label" }, "服务内容"), vue.createElementVNode( "text", { class: "si-val" }, vue.toDisplayString(_ctx.orderDetail.serviceContent), 1 /* TEXT */ ) ]) ]) ], 64 /* STABLE_FRAGMENT */ )), vue.createElementVNode("view", { class: "si-row" }, [ vue.createElementVNode("image", { class: "si-icon outline custom-icon-file", src: _imports_5 }), vue.createElementVNode("view", { class: "si-content" }, [ vue.createElementVNode("text", { class: "si-label" }, "备注"), vue.createElementVNode( "text", { class: "si-val" }, vue.toDisplayString(_ctx.orderDetail.remark || "无"), 1 /* TEXT */ ) ]) ]) ]), _ctx.currentStep < _ctx.steps.length ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "white-card task-card" }, [ vue.createElementVNode( "text", { class: "tc-title" }, "当前任务:" + vue.toDisplayString(_ctx.currentTaskTitle), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "tc-desc" }, vue.toDisplayString(_ctx.currentTaskDesc), 1 /* TEXT */ ), vue.createElementVNode("view", { class: "full-media-add", onClick: _cache[5] || (_cache[5] = (...args) => _ctx.openUploadModal && _ctx.openUploadModal(...args)) }, [ vue.createElementVNode("image", { class: "upload-icon-large", src: _imports_1$6 }), vue.createElementVNode("text", { class: "upload-text-large" }, "上传图或视频") ]) ])) : vue.createCommentVNode("v-if", true), vue.createElementVNode("view", { class: "white-card base-info-card" }, [ vue.createElementVNode("view", { class: "bi-row" }, [ vue.createElementVNode("image", { class: "si-icon outline", src: _imports_7 }), vue.createElementVNode("view", { class: "bi-content" }, [ vue.createElementVNode("text", { class: "bi-label" }, "订单编号"), vue.createElementVNode("view", { class: "bi-val-row" }, [ vue.createElementVNode( "text", { class: "bi-val" }, vue.toDisplayString(_ctx.orderDetail.orderNo), 1 /* TEXT */ ), vue.createElementVNode("text", { class: "bi-copy", onClick: _cache[6] || (_cache[6] = (...args) => _ctx.copyOrderNo && _ctx.copyOrderNo(...args)) }, "复制") ]) ]) ]), vue.createElementVNode("view", { class: "bi-row" }, [ vue.createElementVNode("image", { class: "si-icon outline", src: _imports_1$7 }), vue.createElementVNode("view", { class: "bi-content" }, [ vue.createElementVNode("text", { class: "bi-label" }, "下单时间"), vue.createElementVNode( "text", { class: "bi-val" }, vue.toDisplayString(_ctx.orderDetail.createTime), 1 /* TEXT */ ) ]) ]) ]), vue.createElementVNode("view", { class: "white-card timeline-card" }, [ vue.createElementVNode("view", { class: "tl-title-row" }, [ vue.createElementVNode("view", { class: "orange-bar" }), vue.createElementVNode("text", { class: "tl-title" }, "订单进度") ]), vue.createElementVNode("view", { class: "tl-list" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(_ctx.orderDetail.progressLogs, (log, idx) => { return vue.openBlock(), vue.createElementBlock("view", { class: "tl-item", key: idx }, [ vue.createElementVNode("view", { class: "tl-marker active" }, [ vue.createElementVNode("view", { class: "tl-dot-inner" }) ]), vue.createElementVNode("view", { class: "tl-content-row" }, [ vue.createElementVNode("view", { class: "tl-header" }, [ vue.createElementVNode( "text", { class: "tl-status" }, vue.toDisplayString(log.status), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "tl-time" }, vue.toDisplayString(log.time), 1 /* TEXT */ ) ]), log.medias && log.medias.length > 0 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "tl-medias" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(log.medias, (img, midx) => { return vue.openBlock(), vue.createElementBlock("image", { class: "tl-img", key: midx, src: img, mode: "aspectFill" }, null, 8, ["src"]); }), 128 /* KEYED_FRAGMENT */ )) ])) : vue.createCommentVNode("v-if", true), log.remark ? (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "tl-remark" }, [ vue.createElementVNode( "text", null, vue.toDisplayString(log.remark), 1 /* TEXT */ ) ])) : vue.createCommentVNode("v-if", true) ]) ]); }), 128 /* KEYED_FRAGMENT */ )) ]) ]), vue.createElementVNode("view", { style: { "height": "140rpx" } }) ]), vue.createElementVNode("view", { class: "bottom-action-bar" }, [ vue.createElementVNode("view", { class: "action-left" }, [ vue.createElementVNode("button", { class: "action-btn outline grey-outline", onClick: _cache[7] || (_cache[7] = (...args) => _ctx.goToAnomaly && _ctx.goToAnomaly(...args)) }, "异常上报"), vue.createElementVNode("button", { class: "action-btn outline orange-outline", onClick: _cache[8] || (_cache[8] = (...args) => _ctx.openSumModal && _ctx.openSumModal(...args)) }, "宠护小结") ]), vue.createElementVNode("view", { class: "action-right" }, [ _ctx.currentStep < _ctx.steps.length ? (vue.openBlock(), vue.createElementBlock( "button", { key: 0, class: "action-btn primary", onClick: _cache[9] || (_cache[9] = (...args) => _ctx.openUploadModal && _ctx.openUploadModal(...args)) }, vue.toDisplayString(_ctx.currentTaskTitle), 1 /* TEXT */ )) : (vue.openBlock(), vue.createElementBlock("button", { key: 1, class: "action-btn primary grey-bg" }, "已完成")) ]) ]), _ctx.showPetModal ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "pet-modal-mask", onClick: _cache[13] || (_cache[13] = (...args) => _ctx.closePetProfile && _ctx.closePetProfile(...args)) }, [ vue.createElementVNode("view", { class: "pet-modal-content", onClick: _cache[12] || (_cache[12] = vue.withModifiers(() => { }, ["stop"])) }, [ vue.createElementVNode("view", { class: "pet-modal-header" }, [ vue.createElementVNode("text", { class: "pet-modal-title" }, "宠物档案"), vue.createElementVNode("view", { style: { "flex": "1" } }), vue.createElementVNode("view", { class: "pm-remark-btn", onClick: _cache[10] || (_cache[10] = (...args) => _ctx.openPetRemarkInput && _ctx.openPetRemarkInput(...args)) }, "备注"), vue.createElementVNode("view", { class: "close-icon-btn", onClick: _cache[11] || (_cache[11] = (...args) => _ctx.closePetProfile && _ctx.closePetProfile(...args)) }, "×") ]), vue.createElementVNode("scroll-view", { "scroll-y": "", class: "pet-modal-scroll" }, [ vue.createElementVNode("view", { class: "pet-base-info" }, [ vue.createElementVNode("image", { class: "pm-avatar", src: _ctx.currentPetInfo.petAvatar, mode: "aspectFill" }, null, 8, ["src"]), vue.createElementVNode("view", { class: "pm-info-text" }, [ vue.createElementVNode("view", { class: "pm-name-row" }, [ vue.createElementVNode( "text", { class: "pm-name" }, vue.toDisplayString(_ctx.currentPetInfo.petName), 1 /* TEXT */ ), _ctx.currentPetInfo.petGender === "M" ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "pm-gender" }, [ vue.createElementVNode("text", { class: "gender-icon" }, "♂"), vue.createElementVNode("text", null, "公") ])) : _ctx.currentPetInfo.petGender === "F" ? (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "pm-gender female" }, [ vue.createElementVNode("text", { class: "gender-icon" }, "♀"), vue.createElementVNode("text", null, "母") ])) : vue.createCommentVNode("v-if", true) ]), vue.createElementVNode( "text", { class: "pm-breed" }, "品种:" + vue.toDisplayString(_ctx.currentPetInfo.petBreed), 1 /* TEXT */ ) ]) ]), vue.createElementVNode("view", { class: "pm-detail-grid" }, [ vue.createElementVNode("view", { class: "pm-grid-item half" }, [ vue.createElementVNode("text", { class: "pm-label" }, "年龄"), vue.createElementVNode( "text", { class: "pm-val" }, vue.toDisplayString(_ctx.currentPetInfo.petAge || "未知"), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "pm-grid-item half" }, [ vue.createElementVNode("text", { class: "pm-label" }, "体重"), vue.createElementVNode( "text", { class: "pm-val" }, vue.toDisplayString(_ctx.currentPetInfo.petWeight || "未知"), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "pm-grid-item full" }, [ vue.createElementVNode("text", { class: "pm-label" }, "性格"), vue.createElementVNode( "text", { class: "pm-val" }, vue.toDisplayString(_ctx.currentPetInfo.petPersonality || "无"), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "pm-grid-item full" }, [ vue.createElementVNode("text", { class: "pm-label" }, "爱好"), vue.createElementVNode( "text", { class: "pm-val" }, vue.toDisplayString(_ctx.currentPetInfo.petHobby || "无"), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "pm-grid-item full" }, [ vue.createElementVNode("text", { class: "pm-label" }, "备注"), vue.createElementVNode( "text", { class: "pm-val" }, vue.toDisplayString(_ctx.currentPetInfo.petRemark || "无特殊过敏史"), 1 /* TEXT */ ) ]) ]), _ctx.currentPetInfo.petTags && _ctx.currentPetInfo.petTags.length > 0 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "pm-tags-row" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(_ctx.currentPetInfo.petTags, (tag, ti) => { return vue.openBlock(), vue.createElementBlock("view", { class: "pm-tag-chip", key: ti }, [ vue.createElementVNode( "text", { class: "pm-tag-chip-text" }, vue.toDisplayString(tag), 1 /* TEXT */ ) ]); }), 128 /* KEYED_FRAGMENT */ )) ])) : vue.createCommentVNode("v-if", true), vue.createElementVNode("view", { class: "pm-log-section" }, [ vue.createElementVNode("view", { class: "pm-log-header" }, [ vue.createElementVNode("view", { style: { "width": "6rpx", "height": "28rpx", "background": "#FF9800", "border-radius": "3rpx", "margin-right": "12rpx" } }), vue.createElementVNode("text", { class: "pm-log-section-title" }, "备注日志") ]), (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(_ctx.currentPetInfo.petLogs, (log, lIndex) => { return vue.openBlock(), vue.createElementBlock("view", { class: "pm-log-item", key: lIndex }, [ vue.createElementVNode( "text", { class: "pm-log-date" }, vue.toDisplayString(log.date), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "pm-log-text" }, vue.toDisplayString(log.content), 1 /* TEXT */ ), log.recorder !== "系统记录" ? (vue.openBlock(), vue.createElementBlock( "text", { key: 0, class: "pm-log-recorder" }, "记录人:" + vue.toDisplayString(log.recorder), 1 /* TEXT */ )) : (vue.openBlock(), vue.createElementBlock("text", { key: 1, class: "pm-log-recorder system" }, "系统记录")) ]); }), 128 /* KEYED_FRAGMENT */ )) ]), vue.createElementVNode("view", { style: { "height": "30rpx" } }) ]) ]) ])) : vue.createCommentVNode("v-if", true), _ctx.showPetRemarkInput ? (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "upload-modal-mask", onClick: _cache[17] || (_cache[17] = (...args) => _ctx.closePetRemarkInput && _ctx.closePetRemarkInput(...args)) }, [ vue.createElementVNode("view", { class: "upload-modal-content", onClick: _cache[16] || (_cache[16] = vue.withModifiers(() => { }, ["stop"])) }, [ vue.createElementVNode("view", { class: "um-header" }, [ vue.createElementVNode("text", { class: "um-title" }, "添加备注") ]), vue.createElementVNode("view", { class: "um-body" }, [ vue.withDirectives(vue.createElementVNode( "textarea", { class: "um-textarea", "onUpdate:modelValue": _cache[14] || (_cache[14] = ($event) => _ctx.petRemarkText = $event), "auto-height": "", placeholder: "请输入宠物备注内容...", "placeholder-style": "color:#ccc; font-size:26rpx;" }, null, 512 /* NEED_PATCH */ ), [ [vue.vModelText, _ctx.petRemarkText] ]) ]), vue.createElementVNode("view", { class: "um-footer" }, [ vue.createElementVNode("button", { class: "um-submit-btn active", onClick: _cache[15] || (_cache[15] = (...args) => _ctx.submitPetRemark && _ctx.submitPetRemark(...args)) }, "确认提交") ]) ]) ])) : vue.createCommentVNode("v-if", true), _ctx.showNavModal ? (vue.openBlock(), vue.createElementBlock("view", { key: 2, class: "nav-modal-mask", onClick: _cache[23] || (_cache[23] = (...args) => _ctx.closeNavModal && _ctx.closeNavModal(...args)) }, [ vue.createElementVNode("view", { class: "nav-action-sheet", onClick: _cache[22] || (_cache[22] = vue.withModifiers(() => { }, ["stop"])) }, [ vue.createElementVNode("view", { class: "nav-sheet-title" }, "选择地图进行导航"), vue.createElementVNode("view", { class: "nav-sheet-item", onClick: _cache[18] || (_cache[18] = ($event) => _ctx.chooseMap("高德")) }, "高德地图"), vue.createElementVNode("view", { class: "nav-sheet-item", onClick: _cache[19] || (_cache[19] = ($event) => _ctx.chooseMap("腾讯")) }, "腾讯地图"), vue.createElementVNode("view", { class: "nav-sheet-item", onClick: _cache[20] || (_cache[20] = ($event) => _ctx.chooseMap("百度")) }, "百度地图"), vue.createElementVNode("view", { class: "nav-sheet-gap" }), vue.createElementVNode("view", { class: "nav-sheet-item cancel", onClick: _cache[21] || (_cache[21] = (...args) => _ctx.closeNavModal && _ctx.closeNavModal(...args)) }, "取消") ]) ])) : vue.createCommentVNode("v-if", true), _ctx.showUploadModal ? (vue.openBlock(), vue.createElementBlock("view", { key: 3, class: "upload-modal-mask", onClick: _cache[28] || (_cache[28] = (...args) => _ctx.closeUploadModal && _ctx.closeUploadModal(...args)) }, [ vue.createElementVNode("view", { class: "upload-modal-content", onClick: _cache[27] || (_cache[27] = vue.withModifiers(() => { }, ["stop"])) }, [ vue.createElementVNode("view", { class: "um-header" }, [ vue.createElementVNode( "text", { class: "um-title" }, "上传图或视频 (" + vue.toDisplayString(_ctx.modalMediaList.length) + "/5)", 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "um-body" }, [ vue.createElementVNode("view", { class: "um-grid" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(_ctx.modalMediaList, (img, idx) => { return vue.openBlock(), vue.createElementBlock("view", { class: "um-item", key: idx }, [ vue.createElementVNode("image", { class: "um-preview", src: img.url || img.localPath || img, mode: "aspectFill" }, null, 8, ["src"]), vue.createElementVNode("view", { class: "um-del", onClick: ($event) => _ctx.removeModalMedia(idx) }, "×", 8, ["onClick"]) ]); }), 128 /* KEYED_FRAGMENT */ )), _ctx.modalMediaList.length < 5 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "um-add", onClick: _cache[24] || (_cache[24] = (...args) => _ctx.chooseModalMedia && _ctx.chooseModalMedia(...args)) }, [ vue.createElementVNode("image", { class: "um-add-icon", src: _imports_1$6 }), vue.createElementVNode("text", { class: "um-add-text" }, "拍摄/上传") ])) : vue.createCommentVNode("v-if", true) ]), vue.withDirectives(vue.createElementVNode( "textarea", { class: "um-textarea", "onUpdate:modelValue": _cache[25] || (_cache[25] = ($event) => _ctx.modalRemark = $event), placeholder: "在此输入备注信息...", "placeholder-style": "color:#ccc; font-size:26rpx;" }, null, 512 /* NEED_PATCH */ ), [ [vue.vModelText, _ctx.modalRemark] ]) ]), vue.createElementVNode("view", { class: "um-footer" }, [ vue.createElementVNode( "view", { class: vue.normalizeClass(["um-submit-btn", { "active": _ctx.modalMediaList.length > 0 }]), onClick: _cache[26] || (_cache[26] = (...args) => _ctx.handleConfirmUpload && _ctx.handleConfirmUpload(...args)) }, " 确认提交", 2 /* CLASS */ ) ]) ]) ])) : vue.createCommentVNode("v-if", true), _ctx.showSumModal ? (vue.openBlock(), vue.createElementBlock("view", { key: 4, class: "sum-modal-mask", onClick: _cache[32] || (_cache[32] = (...args) => _ctx.closeSumModal && _ctx.closeSumModal(...args)) }, [ vue.createElementVNode("view", { class: "sum-modal-card", onClick: _cache[31] || (_cache[31] = vue.withModifiers(() => { }, ["stop"])) }, [ vue.createElementVNode("scroll-view", { "scroll-y": "", class: "sum-modal-scroll" }, [ vue.createElementVNode("view", { class: "sum-modal-inner" }, [ vue.createElementVNode("text", { class: "sum-modal-title" }, "宠物护理工作小结"), vue.createElementVNode("view", { class: "sum-meta-row" }, [ vue.createElementVNode("text", { class: "sum-meta-label" }, "日期:"), vue.createElementVNode( "text", { class: "sum-meta-val" }, vue.toDisplayString(_ctx.sumDate), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "sum-meta-row" }, [ vue.createElementVNode("text", { class: "sum-meta-label" }, "客户住址:"), vue.createElementVNode( "text", { class: "sum-meta-val" }, vue.toDisplayString(_ctx.orderDetail.endAddress), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "sum-meta-row" }, [ vue.createElementVNode("text", { class: "sum-meta-label" }, "宠主姓名:"), vue.createElementVNode( "text", { class: "sum-meta-val" }, vue.toDisplayString(_ctx.orderDetail.ownerName || "张**"), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "sum-section-title" }, "宠物信息"), vue.createElementVNode("view", { class: "sum-pet-card" }, [ vue.createElementVNode("image", { class: "sum-pet-avatar", src: _ctx.orderDetail.petAvatar, mode: "aspectFill" }, null, 8, ["src"]), vue.createElementVNode("view", { class: "sum-pet-info" }, [ vue.createElementVNode("view", { class: "sum-pet-name-row" }, [ vue.createElementVNode( "text", { class: "sum-pet-name" }, vue.toDisplayString(_ctx.orderDetail.petName), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "sum-pet-breed" }, "品种: " + vue.toDisplayString(_ctx.orderDetail.petBreed), 1 /* TEXT */ ) ]), vue.createElementVNode( "text", { class: "sum-pet-remark" }, vue.toDisplayString(_ctx.orderDetail.petNotes || "喜欢坐车,有点晗车,请注意通风。"), 1 /* TEXT */ ) ]) ]), vue.createElementVNode("view", { class: "sum-section-title" }, "服务内容记录"), vue.withDirectives(vue.createElementVNode( "textarea", { class: "sum-textarea", "onUpdate:modelValue": _cache[29] || (_cache[29] = ($event) => _ctx.sumContent = $event), "auto-height": "", placeholder: "请填写服务内容...", "placeholder-style": "color:#ccc" }, null, 512 /* NEED_PATCH */ ), [ [vue.vModelText, _ctx.sumContent] ]), vue.createElementVNode("view", { class: "sum-sign-row" }, [ vue.createElementVNode("text", { class: "sum-sign-label" }, "护宠师签名:"), vue.createElementVNode( "text", { class: "sum-sign-val" }, vue.toDisplayString(_ctx.sumSigner), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { style: { "height": "20rpx" } }) ]) ]), vue.createElementVNode("view", { class: "sum-footer" }, [ vue.createElementVNode("button", { class: "sum-submit-btn", onClick: _cache[30] || (_cache[30] = (...args) => _ctx.submitSumModal && _ctx.submitSumModal(...args)) }, "提交小结") ]) ]) ])) : vue.createCommentVNode("v-if", true) ]); } const PagesOrdersDetail = /* @__PURE__ */ _export_sfc(_sfc_main$q, [["render", _sfc_render$p], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/orders/detail.vue"]]); const _sfc_main$p = { data() { return { // 已选异常类型 selectedType: "其他异常", // 异常描述 anomalyDesc: "", // 照片列表 photoList: [], // 是否显示类型选择器 showTypeSheet: false, // 异常类型列表 anomalyTypes: [ "无法联系用户", "地址错误", "宠物身体异常", "设施损坏", "用户拒收", "其他异常" ] }; }, methods: { // 打开类型选择器 openTypeSheet() { this.showTypeSheet = true; }, // 关闭类型选择器 closeTypeSheet() { this.showTypeSheet = false; }, // 选择异常类型 selectType(type) { this.selectedType = type; this.closeTypeSheet(); }, // 选择照片 choosePhoto() { uni.chooseImage({ count: 5 - this.photoList.length, sizeType: ["compressed"], sourceType: ["album", "camera"], success: (res) => { this.photoList = [...this.photoList, ...res.tempFilePaths].slice(0, 5); } }); }, // 删除照片 removePhoto(idx) { this.photoList.splice(idx, 1); }, // 提交上报 submitAnomaly() { if (!this.selectedType) { uni.showToast({ title: "请选择异常类型", icon: "none" }); return; } if (this.photoList.length === 0) { uni.showToast({ title: "请上传现场照片", icon: "none" }); return; } uni.showLoading({ title: "提交中..." }); setTimeout(() => { uni.hideLoading(); uni.showToast({ title: "上报成功", icon: "success" }); setTimeout(() => { uni.navigateBack(); }, 1500); }, 1e3); } } }; function _sfc_render$o(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "anomaly-container" }, [ vue.createElementVNode("scroll-view", { "scroll-y": "", class: "anomaly-scroll" }, [ vue.createElementVNode("view", { class: "ano-card" }, [ vue.createElementVNode("view", { class: "ano-section-title" }, [ vue.createElementVNode("view", { class: "ano-title-bar" }), vue.createElementVNode("text", { class: "ano-title-text" }, "异常类型") ]), vue.createElementVNode("view", { class: "ano-type-row", onClick: _cache[0] || (_cache[0] = (...args) => $options.openTypeSheet && $options.openTypeSheet(...args)) }, [ vue.createElementVNode( "text", { class: vue.normalizeClass(["ano-type-val", { "placeholder": !$data.selectedType }]) }, vue.toDisplayString($data.selectedType || "其他异常"), 3 /* TEXT, CLASS */ ), vue.createElementVNode("image", { class: "ano-right-arrow", src: _imports_0$2 }) ]) ]), vue.createElementVNode("view", { class: "ano-card" }, [ vue.createElementVNode("view", { class: "ano-section-title" }, [ vue.createElementVNode("view", { class: "ano-title-bar" }), vue.createElementVNode("text", { class: "ano-title-text" }, "异常描述") ]), vue.withDirectives(vue.createElementVNode( "textarea", { class: "ano-textarea", "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $data.anomalyDesc = $event), placeholder: "请详细描述现场异常情况...", "placeholder-style": "color:#ccc; font-size:28rpx;", maxlength: "500" }, null, 512 /* NEED_PATCH */ ), [ [vue.vModelText, $data.anomalyDesc] ]) ]), vue.createElementVNode("view", { class: "ano-card" }, [ vue.createElementVNode("view", { class: "ano-section-title" }, [ vue.createElementVNode("view", { class: "ano-title-bar" }), vue.createElementVNode("text", { class: "ano-title-text" }, "现场照片 (必填,最多5张)") ]), vue.createElementVNode("view", { class: "ano-photo-grid" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($data.photoList, (img, idx) => { return vue.openBlock(), vue.createElementBlock("view", { class: "ano-photo-item", key: idx }, [ vue.createElementVNode("image", { class: "ano-photo-preview", src: img, mode: "aspectFill" }, null, 8, ["src"]), vue.createElementVNode("view", { class: "ano-photo-del", onClick: ($event) => $options.removePhoto(idx) }, "×", 8, ["onClick"]) ]); }), 128 /* KEYED_FRAGMENT */ )), $data.photoList.length < 5 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "ano-photo-add", onClick: _cache[2] || (_cache[2] = (...args) => $options.choosePhoto && $options.choosePhoto(...args)) }, [ vue.createElementVNode("image", { class: "ano-add-icon", src: _imports_1$6 }), vue.createElementVNode("text", { class: "ano-add-text" }, "上传") ])) : vue.createCommentVNode("v-if", true) ]) ]), vue.createElementVNode("view", { style: { "height": "160rpx" } }) ]), vue.createElementVNode("view", { class: "ano-footer" }, [ vue.createElementVNode("button", { class: "ano-submit-btn", onClick: _cache[3] || (_cache[3] = (...args) => $options.submitAnomaly && $options.submitAnomaly(...args)) }, "提交上报") ]), $data.showTypeSheet ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "ano-sheet-mask", onClick: _cache[6] || (_cache[6] = (...args) => $options.closeTypeSheet && $options.closeTypeSheet(...args)) }, [ vue.createElementVNode("view", { class: "ano-sheet", onClick: _cache[5] || (_cache[5] = vue.withModifiers(() => { }, ["stop"])) }, [ vue.createElementVNode("text", { class: "ano-sheet-title" }, "选择异常类型"), vue.createElementVNode("scroll-view", { "scroll-y": "", class: "ano-sheet-list" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($data.anomalyTypes, (type, idx) => { return vue.openBlock(), vue.createElementBlock("view", { class: "ano-sheet-item", key: idx, onClick: ($event) => $options.selectType(type) }, [ vue.createElementVNode( "text", { class: vue.normalizeClass(["ano-sheet-item-text", { "selected": $data.selectedType === type }]) }, vue.toDisplayString(type), 3 /* TEXT, CLASS */ ), $data.selectedType === type ? (vue.openBlock(), vue.createElementBlock("image", { key: 0, class: "ano-check-icon", src: _imports_0$2 })) : vue.createCommentVNode("v-if", true) ], 8, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ]), vue.createElementVNode("view", { class: "ano-sheet-cancel", onClick: _cache[4] || (_cache[4] = (...args) => $options.closeTypeSheet && $options.closeTypeSheet(...args)) }, "取消") ]) ])) : vue.createCommentVNode("v-if", true) ]); } const PagesOrdersAnomaly = /* @__PURE__ */ _export_sfc(_sfc_main$p, [["render", _sfc_render$o], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/orders/anomaly.vue"]]); const _sfc_main$o = { data() { return { tabs: ["全部", "已完成", "已拒绝"], activeTab: 0, orders: [ { orderType: 1, typeName: "接送", typeIcon: "/static/icons/car.svg", status: "完成", finishTime: "2026/02/03 14:30", serviceTime: "2026/02/10 10:00", petName: "哈士奇宝宝", petBreed: "哈士奇", petAvatar: "/static/dog.png", price: "20.00", startName: "武汉大学宠物店", startAddr: "武汉市洪山区珞喻路458号", endName: "张** 189****8451", endAddr: "武汉市武昌区新区大道凤凰广场A座", serviceNote: "" }, { orderType: 2, typeName: "喂遛", typeIcon: "/static/icons/walk.svg", status: "完成", finishTime: "2026/02/03 15:00", serviceTime: "2026/02/11 14:00", petName: "金毛", petBreed: "金毛寻回犬", petAvatar: "/static/dog.png", price: "35.00", startName: "", startAddr: "", endName: "王女士 138****1234", endAddr: "武汉市江汉区泛海国际居住区", serviceNote: "需自带牵引绳,遛弯30分钟。" }, { orderType: 3, typeName: "洗护", typeIcon: "/static/icons/wash.svg", status: "拒绝", finishTime: "2026/02/03 09:30", serviceTime: "2026/02/12 09:30", petName: "Mimi", petBreed: "布偶猫", petAvatar: "/static/dog.png", price: "50.00", startName: "", startAddr: "", endName: "赵先生 159****9876", endAddr: "武汉市汉阳区钟家村", serviceNote: "上门洗澡,剪指甲。" } ] }; }, computed: { filteredOrders() { if (this.activeTab === 0) return this.orders; if (this.activeTab === 1) return this.orders.filter((o) => o.status === "完成"); return this.orders.filter((o) => o.status === "拒绝"); } }, methods: { switchTab(idx) { this.activeTab = idx; } } }; function _sfc_render$n(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createElementVNode("view", { class: "stats-banner" }, [ vue.createElementVNode("view", { class: "banner-item" }, [ vue.createElementVNode("text", { class: "banner-num" }, "2546"), vue.createElementVNode("text", { class: "banner-label" }, "累计接单") ]), vue.createElementVNode("view", { class: "banner-item" }, [ vue.createElementVNode("text", { class: "banner-num" }, "10"), vue.createElementVNode("text", { class: "banner-label" }, "累计拒单") ]), vue.createElementVNode("view", { class: "banner-item" }, [ vue.createElementVNode("text", { class: "banner-num" }, "10"), vue.createElementVNode("text", { class: "banner-label" }, "奖励单量") ]), vue.createElementVNode("view", { class: "banner-item" }, [ vue.createElementVNode("text", { class: "banner-num" }, "10"), vue.createElementVNode("text", { class: "banner-label" }, "惩罚单量") ]), vue.createElementVNode("view", { class: "banner-item" }, [ vue.createElementVNode("text", { class: "banner-num" }, [ vue.createTextVNode("158"), vue.createElementVNode("text", { class: "banner-unit" }, "天") ]), vue.createElementVNode("text", { class: "banner-label" }, "服务时长") ]) ]), vue.createElementVNode("view", { class: "tab-bar" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($data.tabs, (tab, idx) => { return vue.openBlock(), vue.createElementBlock("view", { class: vue.normalizeClass(["tab-item", { active: $data.activeTab === idx }]), key: idx, onClick: ($event) => $options.switchTab(idx) }, [ vue.createElementVNode( "text", null, vue.toDisplayString(tab), 1 /* TEXT */ ), $data.activeTab === idx ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "tab-line" })) : vue.createCommentVNode("v-if", true) ], 10, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ]), vue.createElementVNode("scroll-view", { "scroll-y": "", class: "order-scroll" }, [ vue.createElementVNode("view", { style: { "height": "16rpx" } }), (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($options.filteredOrders, (order, idx) => { return vue.openBlock(), vue.createElementBlock("view", { class: "order-card", key: idx }, [ vue.createElementVNode("view", { class: "card-header" }, [ vue.createElementVNode("view", { class: "type-badge" }, [ vue.createElementVNode("image", { class: "type-icon", src: order.typeIcon }, null, 8, ["src"]), vue.createElementVNode( "text", { class: "type-text" }, vue.toDisplayString(order.typeName), 1 /* TEXT */ ) ]), vue.createElementVNode( "text", { class: vue.normalizeClass(["status-text", order.status === "完成" ? "green" : "red"]) }, vue.toDisplayString(order.status === "完成" ? "完成:" : "拒绝:") + vue.toDisplayString(order.finishTime), 3 /* TEXT, CLASS */ ) ]), vue.createElementVNode( "text", { class: "service-time" }, "服务时间:" + vue.toDisplayString(order.serviceTime), 1 /* TEXT */ ), vue.createElementVNode("view", { class: "pet-card" }, [ vue.createElementVNode("image", { class: "pet-avatar", src: order.petAvatar, mode: "aspectFill" }, null, 8, ["src"]), vue.createElementVNode("view", { class: "pet-info" }, [ vue.createElementVNode( "text", { class: "pet-name" }, vue.toDisplayString(order.petName), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "pet-breed" }, "品种: " + vue.toDisplayString(order.petBreed), 1 /* TEXT */ ) ]), vue.createElementVNode( "text", { class: "pet-price" }, "¥" + vue.toDisplayString(order.price), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "route-info" }, [ order.orderType === 1 ? (vue.openBlock(), vue.createElementBlock( vue.Fragment, { key: 0 }, [ vue.createElementVNode("view", { class: "route-item" }, [ vue.createElementVNode("view", { class: "icon-circle pickup" }, "取"), vue.createElementVNode("view", { class: "route-connector" }), vue.createElementVNode("view", { class: "address-box" }, [ vue.createElementVNode( "text", { class: "addr-title" }, vue.toDisplayString(order.startName), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "addr-desc" }, vue.toDisplayString(order.startAddr), 1 /* TEXT */ ) ]) ]), vue.createElementVNode("view", { class: "route-item" }, [ vue.createElementVNode("view", { class: "icon-circle deliver" }, "送"), vue.createElementVNode("view", { class: "address-box" }, [ vue.createElementVNode( "text", { class: "addr-title" }, vue.toDisplayString(order.endName), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "addr-desc" }, vue.toDisplayString(order.endAddr), 1 /* TEXT */ ) ]) ]) ], 64 /* STABLE_FRAGMENT */ )) : (vue.openBlock(), vue.createElementBlock( vue.Fragment, { key: 1 }, [ vue.createElementVNode("view", { class: "route-item" }, [ vue.createElementVNode("view", { class: "icon-circle service" }, "服"), vue.createElementVNode("view", { class: "address-box" }, [ vue.createElementVNode( "text", { class: "addr-title" }, vue.toDisplayString(order.endName), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "addr-desc" }, vue.toDisplayString(order.endAddr), 1 /* TEXT */ ) ]) ]), order.serviceNote ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "service-note-row" }, [ vue.createElementVNode( "text", { class: "service-note-text" }, "服务内容:" + vue.toDisplayString(order.serviceNote), 1 /* TEXT */ ) ])) : vue.createCommentVNode("v-if", true) ], 64 /* STABLE_FRAGMENT */ )) ]) ]); }), 128 /* KEYED_FRAGMENT */ )), $options.filteredOrders.length === 0 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "empty-state" }, [ vue.createElementVNode("text", { class: "empty-text" }, "暂无相关订单") ])) : vue.createCommentVNode("v-if", true), vue.createElementVNode("view", { style: { "height": "40rpx" } }) ]) ]); } const PagesMineOrderStats = /* @__PURE__ */ _export_sfc(_sfc_main$o, [["render", _sfc_render$n], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/mine/order-stats.vue"]]); const _sfc_main$n = { data() { return { tabs: ["全部", "奖励", "惩罚"], activeTab: 0, selectedYear: 2026, selectedMonth: 2, // 月份选择器状态 showMonthPicker: false, pickerYear: 2026, pickerMonth: 2, years: [2021, 2022, 2023, 2024, 2025, 2026], months: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], yearScrollTop: 0, monthScrollTop: 0, // 奖惩记录列表 records: [ { date: "09-01", title: "单量奖励", desc: "超140单", amount: 560, status: "待入账", statusClass: "pending", type: "reward" }, { date: "08-01", title: "单量奖励", desc: "超470单", amount: 2050, status: "已入账", statusClass: "credited", type: "reward" }, { date: "09-02", title: "超时扣款", desc: "订单#T982 超时30分钟", amount: -15, status: "已扣款", statusClass: "deducted", type: "penalty" }, { date: "09-05", title: "高温补贴", desc: "8月份高温天气补贴", amount: 300, status: "已入账", statusClass: "credited", type: "reward" } ] }; }, computed: { filteredList() { if (this.activeTab === 0) return this.records; if (this.activeTab === 1) return this.records.filter((r) => r.type === "reward"); return this.records.filter((r) => r.type === "penalty"); } }, methods: { switchTab(idx) { this.activeTab = idx; }, openMonthPicker() { this.pickerYear = this.selectedYear; this.pickerMonth = this.selectedMonth; this.showMonthPicker = true; }, closeMonthPicker() { this.showMonthPicker = false; }, confirmMonthPicker() { this.selectedYear = this.pickerYear; this.selectedMonth = this.pickerMonth; this.closeMonthPicker(); }, goToAll() { uni.navigateTo({ url: "/pages/mine/rewards-all" }); } } }; function _sfc_render$m(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createElementVNode("view", { class: "top-banner" }, [ vue.createElementVNode("view", { class: "month-btn", onClick: _cache[0] || (_cache[0] = (...args) => $options.openMonthPicker && $options.openMonthPicker(...args)) }, [ vue.createElementVNode( "text", { class: "month-text" }, vue.toDisplayString($data.selectedYear) + "年" + vue.toDisplayString($data.selectedMonth) + "月 ▾", 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "stats-grid" }, [ vue.createElementVNode("view", { class: "stats-cell" }, [ vue.createElementVNode("text", { class: "stats-label" }, "奖励订单"), vue.createElementVNode("text", { class: "stats-num" }, [ vue.createTextVNode("3"), vue.createElementVNode("text", { class: "stats-unit" }, "单") ]), vue.createElementVNode("view", { class: "stats-divider" }), vue.createElementVNode("text", { class: "stats-sub" }, "累计 1258单") ]), vue.createElementVNode("view", { class: "stats-cell" }, [ vue.createElementVNode("text", { class: "stats-label" }, "惩罚订单"), vue.createElementVNode("text", { class: "stats-num" }, [ vue.createTextVNode("1"), vue.createElementVNode("text", { class: "stats-unit" }, "单") ]), vue.createElementVNode("view", { class: "stats-divider" }), vue.createElementVNode("text", { class: "stats-sub" }, "累计 12单") ]), vue.createElementVNode("view", { class: "stats-cell" }, [ vue.createElementVNode("text", { class: "stats-label" }, "奖励金额"), vue.createElementVNode("text", { class: "stats-num reward-num" }, "2910.00"), vue.createElementVNode("view", { class: "stats-divider" }), vue.createElementVNode("text", { class: "stats-sub" }, "累计 45800.00") ]), vue.createElementVNode("view", { class: "stats-cell" }, [ vue.createElementVNode("text", { class: "stats-label" }, "惩罚金额"), vue.createElementVNode("text", { class: "stats-num penalty-num" }, "-15.00"), vue.createElementVNode("view", { class: "stats-divider" }), vue.createElementVNode("text", { class: "stats-sub" }, "累计 350.00") ]) ]) ]), vue.createElementVNode("view", { class: "list-header" }, [ vue.createElementVNode("view", { class: "tab-bar" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($data.tabs, (tab, idx) => { return vue.openBlock(), vue.createElementBlock("view", { class: vue.normalizeClass(["tab-item", { active: $data.activeTab === idx }]), key: idx, onClick: ($event) => $options.switchTab(idx) }, [ vue.createElementVNode( "text", null, vue.toDisplayString(tab), 1 /* TEXT */ ), $data.activeTab === idx ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "tab-line" })) : vue.createCommentVNode("v-if", true) ], 10, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ]), vue.createElementVNode("view", { class: "view-all-btn", onClick: _cache[1] || (_cache[1] = (...args) => $options.goToAll && $options.goToAll(...args)) }, [ vue.createElementVNode("text", { class: "view-all-text" }, "查看全部 ›") ]) ]), vue.createElementVNode("view", { class: "record-list" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($options.filteredList, (item, idx) => { return vue.openBlock(), vue.createElementBlock("view", { class: "record-item", key: idx }, [ vue.createElementVNode( "view", { class: vue.normalizeClass(["ri-icon", item.amount > 0 ? "ri-reward" : "ri-penalty"]) }, [ vue.createElementVNode("text", { class: "ri-icon-text" }, "¥") ], 2 /* CLASS */ ), vue.createElementVNode("view", { class: "ri-content" }, [ vue.createElementVNode("view", { class: "ri-title-row" }, [ vue.createElementVNode( "text", { class: "ri-date" }, vue.toDisplayString(item.date), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "ri-title" }, vue.toDisplayString(item.title), 1 /* TEXT */ ) ]), vue.createElementVNode( "text", { class: "ri-desc" }, vue.toDisplayString(item.desc), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "ri-right" }, [ vue.createElementVNode( "text", { class: vue.normalizeClass(["ri-amount", item.amount > 0 ? "positive" : "negative"]) }, vue.toDisplayString(item.amount > 0 ? "+" : "") + vue.toDisplayString(item.amount.toFixed(2)), 3 /* TEXT, CLASS */ ), vue.createElementVNode( "text", { class: vue.normalizeClass(["ri-status", item.statusClass]) }, vue.toDisplayString(item.status), 3 /* TEXT, CLASS */ ) ]) ]); }), 128 /* KEYED_FRAGMENT */ )), vue.createElementVNode("text", { class: "more-hint" }, "更多记录请点击上方的查看全部") ]), $data.showMonthPicker ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "picker-mask", onClick: _cache[7] || (_cache[7] = (...args) => $options.closeMonthPicker && $options.closeMonthPicker(...args)) }, [ vue.createElementVNode("view", { class: "picker-sheet", onClick: _cache[6] || (_cache[6] = vue.withModifiers(() => { }, ["stop"])) }, [ vue.createElementVNode("view", { class: "picker-header" }, [ vue.createElementVNode("text", { class: "picker-cancel", onClick: _cache[2] || (_cache[2] = (...args) => $options.closeMonthPicker && $options.closeMonthPicker(...args)) }, "取消"), vue.createElementVNode("text", { class: "picker-title" }, "选择时间"), vue.createElementVNode("text", { class: "picker-confirm", onClick: _cache[3] || (_cache[3] = (...args) => $options.confirmMonthPicker && $options.confirmMonthPicker(...args)) }, "确定") ]), vue.createElementVNode("view", { class: "picker-body" }, [ vue.createElementVNode("scroll-view", { "scroll-y": "", class: "picker-column", "scroll-top": $data.yearScrollTop, onScroll: _cache[4] || (_cache[4] = (...args) => _ctx.onYearScroll && _ctx.onYearScroll(...args)) }, [ vue.createElementVNode("view", { style: { "height": "80rpx" } }), (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($data.years, (year) => { return vue.openBlock(), vue.createElementBlock("view", { class: vue.normalizeClass(["picker-col-item", { "picker-selected": $data.pickerYear === year }]), key: year, onClick: ($event) => $data.pickerYear = year }, vue.toDisplayString(year) + "年", 11, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )), vue.createElementVNode("view", { style: { "height": "80rpx" } }) ], 40, ["scroll-top"]), vue.createElementVNode("view", { class: "picker-highlight" }), vue.createElementVNode("scroll-view", { "scroll-y": "", class: "picker-column", "scroll-top": $data.monthScrollTop, onScroll: _cache[5] || (_cache[5] = (...args) => _ctx.onMonthScroll && _ctx.onMonthScroll(...args)) }, [ vue.createElementVNode("view", { style: { "height": "80rpx" } }), (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($data.months, (month) => { return vue.openBlock(), vue.createElementBlock("view", { class: vue.normalizeClass(["picker-col-item", { "picker-selected": $data.pickerMonth === month }]), key: month, onClick: ($event) => $data.pickerMonth = month }, vue.toDisplayString(month) + "月", 11, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )), vue.createElementVNode("view", { style: { "height": "80rpx" } }) ], 40, ["scroll-top"]) ]) ]) ])) : vue.createCommentVNode("v-if", true) ]); } const PagesMineRewards = /* @__PURE__ */ _export_sfc(_sfc_main$n, [["render", _sfc_render$m], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/mine/rewards.vue"]]); const _sfc_main$m = { data() { return { tabs: ["全部", "奖励", "惩罚"], activeTab: 0, // 所有完整记录(按月分组) allGroups: [ { month: 9, credited: 30, pending: 0, items: [ { date: "09-24", title: "高温补贴", desc: "9月份高温天气补贴", amount: 30, status: "已入账", statusClass: "credited", type: "reward" } ] }, { month: 8, credited: 2610, pending: 0, items: [ { date: "08-01", title: "单量奖励", desc: "超140单", amount: 560, status: "已入账", statusClass: "credited", type: "reward" }, { date: "07-01", title: "单量奖励", desc: "超470单", amount: 2050, status: "已入账", statusClass: "credited", type: "reward" } ] }, { month: 7, credited: 0, pending: 0, items: [ { date: "07-15", title: "超时扣款", desc: "订单#T98211 超时30分钟", amount: -15, status: "已扣款", statusClass: "deducted", type: "penalty" }, { date: "07-20", title: "客诉扣款", desc: "订单#T98222 餐品遗漏", amount: -50, status: "已扣款", statusClass: "deducted", type: "penalty" } ] } ] }; }, computed: { filteredGroups() { if (this.activeTab === 0) return this.allGroups; const typeKey = this.activeTab === 1 ? "reward" : "penalty"; return this.allGroups.map((g) => ({ ...g, items: g.items.filter((i) => i.type === typeKey) })).filter((g) => g.items.length > 0); } }, methods: { switchTab(idx) { this.activeTab = idx; } } }; function _sfc_render$l(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createElementVNode("view", { class: "tab-bar" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($data.tabs, (tab, idx) => { return vue.openBlock(), vue.createElementBlock("view", { class: vue.normalizeClass(["tab-item", { active: $data.activeTab === idx }]), key: idx, onClick: ($event) => $options.switchTab(idx) }, [ vue.createElementVNode( "text", null, vue.toDisplayString(tab), 1 /* TEXT */ ), $data.activeTab === idx ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "tab-line" })) : vue.createCommentVNode("v-if", true) ], 10, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ]), vue.createElementVNode("scroll-view", { "scroll-y": "", class: "main-scroll" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($options.filteredGroups, (group, gIdx) => { return vue.openBlock(), vue.createElementBlock("view", { key: gIdx, class: "month-group" }, [ vue.createElementVNode("view", { class: "month-header" }, [ vue.createElementVNode( "text", { class: "month-title" }, vue.toDisplayString(group.month) + "月", 1 /* TEXT */ ), vue.createElementVNode("view", { class: "month-summary" }, [ vue.createElementVNode( "text", { class: "month-sum-text" }, "已入账¥" + vue.toDisplayString(group.credited.toFixed(2)), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "month-sum-text" }, " 待入账¥" + vue.toDisplayString(group.pending.toFixed(2)), 1 /* TEXT */ ) ]) ]), (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(group.items, (item, rIdx) => { return vue.openBlock(), vue.createElementBlock("view", { class: "record-item", key: rIdx }, [ vue.createElementVNode( "view", { class: vue.normalizeClass(["ri-icon", item.amount > 0 ? "ri-reward" : "ri-penalty"]) }, [ vue.createElementVNode("text", { class: "ri-icon-text" }, "¥") ], 2 /* CLASS */ ), vue.createElementVNode("view", { class: "ri-content" }, [ vue.createElementVNode("view", { class: "ri-title-row" }, [ vue.createElementVNode( "text", { class: "ri-date" }, vue.toDisplayString(item.date), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "ri-title" }, vue.toDisplayString(item.title), 1 /* TEXT */ ) ]), vue.createElementVNode( "text", { class: "ri-desc" }, vue.toDisplayString(item.desc), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "ri-right" }, [ vue.createElementVNode( "text", { class: vue.normalizeClass(["ri-amount", item.amount > 0 ? "positive" : "negative"]) }, vue.toDisplayString(item.amount > 0 ? "+" : "") + vue.toDisplayString(item.amount.toFixed(2)), 3 /* TEXT, CLASS */ ), vue.createElementVNode( "text", { class: vue.normalizeClass(["ri-status", item.statusClass]) }, vue.toDisplayString(item.status), 3 /* TEXT, CLASS */ ) ]) ]); }), 128 /* KEYED_FRAGMENT */ )) ]); }), 128 /* KEYED_FRAGMENT */ )), vue.createElementVNode("view", { style: { "height": "40rpx" } }) ]) ]); } const PagesMineRewardsAll = /* @__PURE__ */ _export_sfc(_sfc_main$m, [["render", _sfc_render$l], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/mine/rewards-all.vue"]]); const logic = { data() { return { showServicePopup: false, showLogoutPopup: false, profile: null, profileLoading: false }; }, onShow() { if (isLoggedIn()) { this.loadProfile(); } }, methods: { async loadProfile() { if (this.profileLoading) return; this.profileLoading = true; try { const res = await getMyProfile(); this.profile = res.data || null; } catch (err) { formatAppLog("error", "at pages/mine/logic.js:27", "获取个人信息失败:", err); } finally { this.profileLoading = false; } }, navToSettings() { uni.navigateTo({ url: "/pages/mine/settings/index" }); }, navToProfile() { uni.navigateTo({ url: "/pages/mine/settings/profile/index" }); }, navToLevel() { uni.navigateTo({ url: "/pages/mine/level/index" }); }, navToNotification() { uni.navigateTo({ url: "/pages/mine/message/index" }); }, navToWallet() { uni.navigateTo({ url: "/pages/mine/wallet/index" }); }, navToPoints() { uni.navigateTo({ url: "/pages/mine/points/index" }); }, navToOrderStats() { uni.navigateTo({ url: "/pages/mine/order-stats" }); }, navToRewards() { uni.navigateTo({ url: "/pages/mine/rewards" }); }, openServicePopup() { this.showServicePopup = true; }, closeServicePopup() { this.showServicePopup = false; }, previewQRCode() { uni.previewImage({ urls: ["/static/logo.png"] }); }, openOnlineService() { uni.showToast({ title: "正在跳转企业微信客服...", icon: "none" }); }, callServicePhone() { uni.makePhoneCall({ phoneNumber: "400-123-4567" }); }, logout() { this.showLogoutPopup = true; }, cancelLogout() { this.showLogoutPopup = false; }, async confirmLogout() { this.showLogoutPopup = false; try { await logout(); } catch (e) { } clearAuth(); uni.reLaunch({ url: "/pages/login/login" }); } } }; const _imports_0$1 = "/static/icons/motorbike.svg"; const _imports_1$5 = "/static/icons/location.svg"; const _imports_0 = "/static/icons/chevron_right_dark.svg"; const _imports_3$1 = "/static/icons/calendar.svg"; const _imports_4 = "/static/icons/settings.svg"; const _imports_1$4 = "/static/icons/crown.svg"; const _imports_6 = "/static/icons/chevron_right_gold.svg"; const _imports_3 = "/static/icons/chevron_right.svg"; const _imports_8 = "/static/icons/bell_linear.svg"; const _imports_9 = "/static/icons/money_linear.svg"; const _imports_10 = "/static/icons/headset_linear.svg"; const _imports_11 = "/static/icons/close_gray.svg"; const _imports_13 = "/static/icons/headset_green.svg"; const _imports_15 = "/static/icons/phone_green.svg"; const _sfc_main$l = { ...logic }; function _sfc_render$k(_ctx, _cache, $props, $setup, $data, $options) { var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n; return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createElementVNode("view", { class: "nav-bg" }, [ vue.createElementVNode("view", { class: "bg-circle-1" }), vue.createElementVNode("view", { class: "bg-circle-2" }) ]), vue.createElementVNode("view", { class: "header-section" }, [ vue.createElementVNode("view", { class: "title-bar" }, "个人中心"), vue.createElementVNode("view", { class: "user-card", onClick: _cache[1] || (_cache[1] = (...args) => _ctx.navToProfile && _ctx.navToProfile(...args)) }, [ vue.createElementVNode("image", { class: "avatar", src: ((_a = _ctx.profile) == null ? void 0 : _a.avatarUrl) || "/static/touxiang.png", mode: "aspectFill" }, null, 8, ["src"]), vue.createElementVNode("view", { class: "info-content" }, [ vue.createElementVNode("view", { class: "name-row" }, [ vue.createElementVNode( "text", { class: "name" }, vue.toDisplayString(((_b = _ctx.profile) == null ? void 0 : _b.name) || "未登录"), 1 /* TEXT */ ), vue.createElementVNode("view", { class: "tags" }, [ ((_c = _ctx.profile) == null ? void 0 : _c.status) === "0" ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "tag green" }, "接单中")) : ((_d = _ctx.profile) == null ? void 0 : _d.status) === "1" ? (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "tag green" }, "休息中")) : ((_e = _ctx.profile) == null ? void 0 : _e.status) === "2" ? (vue.openBlock(), vue.createElementBlock("view", { key: 2, class: "tag", style: { "background": "#eee", "color": "#999" } }, "已禁用")) : vue.createCommentVNode("v-if", true), ((_f = _ctx.profile) == null ? void 0 : _f.workType) === "full_time" ? (vue.openBlock(), vue.createElementBlock("view", { key: 3, class: "tag blue" }, "全职")) : vue.createCommentVNode("v-if", true), vue.createElementVNode("image", { class: "bike-icon", src: _imports_0$1 }) ]) ]), vue.createElementVNode("view", { class: "detail-row" }, [ vue.createElementVNode("image", { class: "small-icon", src: _imports_1$5 }), vue.createElementVNode( "text", null, vue.toDisplayString(((_g = _ctx.profile) == null ? void 0 : _g.stationName) || ((_h = _ctx.profile) == null ? void 0 : _h.cityName) || "暂无站点"), 1 /* TEXT */ ), vue.createElementVNode("image", { class: "arrow-icon-small", src: _imports_0 }) ]), vue.createElementVNode("view", { class: "detail-row" }, [ vue.createElementVNode("image", { class: "small-icon", src: _imports_3$1 }), vue.createElementVNode( "text", null, "已注册" + vue.toDisplayString(((_i = _ctx.profile) == null ? void 0 : _i.registerDays) || 0) + "天", 1 /* TEXT */ ) ]) ]), vue.createElementVNode("image", { class: "settings-icon", src: _imports_4, onClick: _cache[0] || (_cache[0] = vue.withModifiers((...args) => _ctx.navToSettings && _ctx.navToSettings(...args), ["stop"])) }) ]), vue.createElementVNode("view", { class: "vip-card" }, [ vue.createElementVNode("view", { class: "vip-left" }, [ vue.createElementVNode("image", { class: "vip-icon", src: _imports_1$4 }), vue.createElementVNode("view", { class: "vip-text" }, [ vue.createElementVNode( "text", { class: "vip-title" }, vue.toDisplayString(((_j = _ctx.profile) == null ? void 0 : _j.levelName) || "普通履约者"), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "vip-desc" }, vue.toDisplayString(((_k = _ctx.profile) == null ? void 0 : _k.levelDesc) || "完成更多订单即可升级"), 1 /* TEXT */ ) ]) ]), vue.createElementVNode("view", { class: "vip-btn", onClick: _cache[2] || (_cache[2] = (...args) => _ctx.navToLevel && _ctx.navToLevel(...args)) }, [ vue.createElementVNode("text", null, "查看权益"), vue.createElementVNode("image", { class: "arrow-icon-small", src: _imports_6 }) ]) ]) ]), vue.createElementVNode("view", { class: "stats-panel" }, [ vue.createElementVNode("view", { class: "stat-item", onClick: _cache[3] || (_cache[3] = (...args) => _ctx.navToWallet && _ctx.navToWallet(...args)) }, [ vue.createElementVNode("view", { class: "stat-header" }, [ vue.createElementVNode("view", { class: "red-bar" }), vue.createElementVNode("text", { class: "label" }, "我的钱包"), vue.createElementVNode("image", { class: "arrow-icon", src: _imports_3 }) ]), vue.createElementVNode("view", { class: "stat-value" }, [ vue.createElementVNode( "text", { class: "num" }, vue.toDisplayString(((_l = _ctx.profile) == null ? void 0 : _l.balance) || 0), 1 /* TEXT */ ), vue.createElementVNode("text", { class: "unit" }, "元") ]), vue.createElementVNode("text", { class: "sub-text" }, "账户余额") ]), vue.createElementVNode("view", { class: "divider" }), vue.createElementVNode("view", { class: "stat-item", onClick: _cache[4] || (_cache[4] = (...args) => _ctx.navToOrderStats && _ctx.navToOrderStats(...args)) }, [ vue.createElementVNode("view", { class: "stat-header" }, [ vue.createElementVNode("view", { class: "green-bar" }), vue.createElementVNode("text", { class: "label" }, "订单统计"), vue.createElementVNode("image", { class: "arrow-icon", src: _imports_3 }) ]), vue.createElementVNode("view", { class: "stat-value" }, [ vue.createElementVNode( "text", { class: "num" }, vue.toDisplayString(((_m = _ctx.profile) == null ? void 0 : _m.orderCount) || 0), 1 /* TEXT */ ), vue.createElementVNode("text", { class: "unit" }, "单") ]), vue.createElementVNode("text", { class: "sub-text" }, "累计服务单量") ]), vue.createElementVNode("view", { class: "divider" }), vue.createElementVNode("view", { class: "stat-item", onClick: _cache[5] || (_cache[5] = (...args) => _ctx.navToPoints && _ctx.navToPoints(...args)) }, [ vue.createElementVNode("view", { class: "stat-header" }, [ vue.createElementVNode("view", { class: "orange-bar" }), vue.createElementVNode("text", { class: "label" }, "我的积分"), vue.createElementVNode("image", { class: "arrow-icon", src: _imports_3 }) ]), vue.createElementVNode("view", { class: "stat-value" }, [ vue.createElementVNode( "text", { class: "num" }, vue.toDisplayString(((_n = _ctx.profile) == null ? void 0 : _n.points) || 0), 1 /* TEXT */ ), vue.createElementVNode("text", { class: "unit" }, "分") ]), vue.createElementVNode("text", { class: "sub-text" }, "可兑换权益") ]) ]), vue.createElementVNode("view", { class: "menu-list" }, [ vue.createElementVNode("view", { class: "menu-item", onClick: _cache[6] || (_cache[6] = (...args) => _ctx.navToNotification && _ctx.navToNotification(...args)) }, [ vue.createElementVNode("image", { class: "menu-icon", src: _imports_8 }), vue.createElementVNode("text", { class: "menu-text" }, "消息中心"), vue.createElementVNode("view", { class: "menu-right" }, [ vue.createElementVNode("view", { class: "red-dot" }), vue.createElementVNode("image", { class: "arrow-icon", src: _imports_3 }) ]) ]), vue.createElementVNode("view", { class: "menu-item", onClick: _cache[7] || (_cache[7] = (...args) => _ctx.navToRewards && _ctx.navToRewards(...args)) }, [ vue.createElementVNode("image", { class: "menu-icon", src: _imports_9 }), vue.createElementVNode("text", { class: "menu-text" }, "我的奖惩"), vue.createElementVNode("image", { class: "arrow-icon", src: _imports_3 }) ]), vue.createElementVNode("view", { class: "menu-item", onClick: _cache[8] || (_cache[8] = (...args) => _ctx.openServicePopup && _ctx.openServicePopup(...args)) }, [ vue.createElementVNode("image", { class: "menu-icon", src: _imports_10 }), vue.createElementVNode("text", { class: "menu-text" }, "联系客服"), vue.createElementVNode("image", { class: "arrow-icon", src: _imports_3 }) ]) ]), vue.createElementVNode("view", { class: "logout-btn", onClick: _cache[9] || (_cache[9] = (...args) => _ctx.logout && _ctx.logout(...args)) }, "退出登录"), _ctx.showServicePopup ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "service-popup-mask", onClick: _cache[15] || (_cache[15] = (...args) => _ctx.closeServicePopup && _ctx.closeServicePopup(...args)) }, [ vue.createElementVNode("view", { class: "service-popup", onClick: _cache[14] || (_cache[14] = vue.withModifiers(() => { }, ["stop"])) }, [ vue.createElementVNode("view", { class: "service-header" }, [ vue.createElementVNode("text", { class: "service-title" }, "联系客服"), vue.createElementVNode("image", { class: "close-icon", src: _imports_11, onClick: _cache[10] || (_cache[10] = (...args) => _ctx.closeServicePopup && _ctx.closeServicePopup(...args)) }) ]), vue.createElementVNode("view", { class: "qr-section" }, [ vue.createElementVNode("text", { class: "qr-title" }, "客服二维码"), vue.createElementVNode("image", { class: "qr-img", src: _imports_1$8, onClick: _cache[11] || (_cache[11] = (...args) => _ctx.previewQRCode && _ctx.previewQRCode(...args)) }), vue.createElementVNode("text", { class: "qr-desc" }, "点击查看大图") ]), vue.createElementVNode("view", { class: "service-list" }, [ vue.createElementVNode("view", { class: "service-row", onClick: _cache[12] || (_cache[12] = (...args) => _ctx.openOnlineService && _ctx.openOnlineService(...args)) }, [ vue.createElementVNode("image", { class: "service-row-icon", src: _imports_13 }), vue.createElementVNode("view", { class: "service-info" }, [ vue.createElementVNode("text", { class: "service-name" }, "在线客服"), vue.createElementVNode("text", { class: "service-desc" }, "企业微信专属客服在线解答") ]), vue.createElementVNode("image", { class: "arrow-icon-small", src: _imports_3 }) ]), vue.createElementVNode("view", { class: "service-row" }, [ vue.createElementVNode("image", { class: "service-row-icon", src: _imports_14 }), vue.createElementVNode("view", { class: "service-info" }, [ vue.createElementVNode("text", { class: "service-name" }, "客服电话"), vue.createElementVNode("text", { class: "service-desc" }, "400-123-4567") ]), vue.createElementVNode("view", { class: "call-btn", onClick: _cache[13] || (_cache[13] = (...args) => _ctx.callServicePhone && _ctx.callServicePhone(...args)) }, [ vue.createElementVNode("image", { class: "phone-icon-small", src: _imports_15 }), vue.createElementVNode("text", null, "拨打") ]) ]) ]) ]) ])) : vue.createCommentVNode("v-if", true), vue.createElementVNode( "view", { class: vue.normalizeClass(["logout-popup-mask", { "show": _ctx.showLogoutPopup }]), onClick: _cache[19] || (_cache[19] = (...args) => _ctx.cancelLogout && _ctx.cancelLogout(...args)), onTouchmove: _cache[20] || (_cache[20] = vue.withModifiers(() => { }, ["stop", "prevent"])) }, [ vue.createElementVNode("view", { class: "popup-modal", onClick: _cache[18] || (_cache[18] = vue.withModifiers(() => { }, ["stop"])) }, [ vue.createElementVNode("text", { class: "popup-title" }, "退出登录"), vue.createElementVNode("text", { class: "popup-desc" }, "确定要退出当前账号吗?\\n退出后需要重新登录才能使用完整功能。"), vue.createElementVNode("view", { class: "popup-actions" }, [ vue.createElementVNode("view", { class: "popup-btn cancel", onClick: _cache[16] || (_cache[16] = (...args) => _ctx.cancelLogout && _ctx.cancelLogout(...args)) }, "取消"), vue.createElementVNode("view", { class: "popup-btn confirm", onClick: _cache[17] || (_cache[17] = (...args) => _ctx.confirmLogout && _ctx.confirmLogout(...args)) }, "确定") ]) ]) ], 34 /* CLASS, NEED_HYDRATION */ ) ]); } const PagesMineIndex = /* @__PURE__ */ _export_sfc(_sfc_main$l, [["render", _sfc_render$k], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/mine/index.vue"]]); const _sfc_main$k = { data() { return {}; }, methods: { navBack() { uni.navigateBack({ delta: 1 }); }, navTo(type) { let url = ""; switch (type) { case "profile": url = "/pages/mine/settings/profile/index"; break; case "auth": url = "/pages/mine/settings/auth/index"; break; case "bank": url = "/pages/mine/settings/bank/index"; break; case "security": url = "/pages/mine/settings/security/index"; break; case "push": url = "/pages/mine/settings/notification/index"; break; case "about": url = "/pages/mine/settings/about/index"; break; default: formatAppLog("log", "at pages/mine/settings/index.vue:104", "Navigate to:", type); return; } uni.navigateTo({ url }); }, clearCache() { uni.showToast({ title: "缓存已清理", icon: "none" }); } } }; function _sfc_render$j(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createElementVNode("view", { class: "custom-header" }, [ vue.createElementVNode("view", { class: "header-left", onClick: _cache[0] || (_cache[0] = (...args) => $options.navBack && $options.navBack(...args)) }, [ vue.createElementVNode("image", { class: "back-icon", src: _imports_0, style: { "transform": "rotate(180deg)" } }) ]), vue.createElementVNode("text", { class: "header-title" }, "设置"), vue.createElementVNode("view", { class: "header-right" }) ]), vue.createElementVNode("view", { class: "header-placeholder" }), vue.createElementVNode("view", { class: "group-card" }, [ vue.createElementVNode("view", { class: "list-item", onClick: _cache[1] || (_cache[1] = ($event) => $options.navTo("profile")) }, [ vue.createElementVNode("text", { class: "item-title" }, "个人资料"), vue.createElementVNode("image", { class: "arrow-icon", src: _imports_3 }) ]), vue.createElementVNode("view", { class: "list-item", onClick: _cache[2] || (_cache[2] = ($event) => $options.navTo("auth")) }, [ vue.createElementVNode("text", { class: "item-title" }, "认证信息"), vue.createElementVNode("image", { class: "arrow-icon", src: _imports_3 }) ]), vue.createElementVNode("view", { class: "list-item", onClick: _cache[3] || (_cache[3] = ($event) => $options.navTo("bank")) }, [ vue.createElementVNode("text", { class: "item-title" }, "银行卡信息"), vue.createElementVNode("view", { class: "item-right" }, [ vue.createElementVNode("view", { class: "tag-status" }, "已完善"), vue.createElementVNode("image", { class: "arrow-icon", src: _imports_3 }) ]) ]), vue.createElementVNode("view", { class: "list-item no-border", onClick: _cache[4] || (_cache[4] = ($event) => $options.navTo("security")) }, [ vue.createElementVNode("text", { class: "item-title" }, "账号与安全"), vue.createElementVNode("image", { class: "arrow-icon", src: _imports_3 }) ]) ]), vue.createElementVNode("view", { class: "group-card" }, [ vue.createElementVNode("view", { class: "list-item", onClick: _cache[5] || (_cache[5] = ($event) => $options.navTo("push")) }, [ vue.createElementVNode("text", { class: "item-title" }, "推送通知"), vue.createElementVNode("view", { class: "item-right" }, [ vue.createElementVNode("text", { class: "item-value" }, "部分开启"), vue.createElementVNode("image", { class: "arrow-icon", src: _imports_3 }) ]) ]), vue.createElementVNode("view", { class: "list-item" }, [ vue.createElementVNode("view", { class: "item-row-left" }, [ vue.createElementVNode("text", { class: "item-title" }, "位置上报"), vue.createElementVNode("text", { class: "item-subtitle" }, "每隔20分钟自动上报位置") ]), vue.createElementVNode("switch", { checked: "", color: "#FF5722", style: { "transform": "scale(0.8)" } }) ]), vue.createElementVNode("view", { class: "list-item", onClick: _cache[6] || (_cache[6] = (...args) => $options.clearCache && $options.clearCache(...args)) }, [ vue.createElementVNode("text", { class: "item-title" }, "清理缓存"), vue.createElementVNode("view", { class: "item-right" }, [ vue.createElementVNode("text", { class: "item-value" }, "105.14MB"), vue.createElementVNode("image", { class: "arrow-icon", src: _imports_3 }) ]) ]), vue.createElementVNode("view", { class: "list-item no-border", onClick: _cache[7] || (_cache[7] = ($event) => $options.navTo("about")) }, [ vue.createElementVNode("text", { class: "item-title" }, "关于我们"), vue.createElementVNode("view", { class: "item-right" }, [ vue.createElementVNode("text", { class: "item-value" }, "v2.0.6"), vue.createElementVNode("image", { class: "arrow-icon", src: _imports_3 }) ]) ]) ]) ]); } const PagesMineSettingsIndex = /* @__PURE__ */ _export_sfc(_sfc_main$k, [["render", _sfc_render$j], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/mine/settings/index.vue"]]); const _sfc_main$j = { data() { return { userInfo: { name: "", workType: "", workStatus: "", city: "", avatar: "/static/touxiang.png", stationName: "" }, isStatusPickerShow: false, isCityPickerShow: false, // 城市级联选择器(与我要加入页面一致) selectStep: 0, selectedPathway: [], currentCityList: [], selectedCityId: null }; }, onLoad() { this.loadUserInfo(); uni.$on("updateName", (newName) => { this.userInfo.name = newName; }); }, onUnload() { uni.$off("updateName"); }, methods: { // 加载用户信息 @author steelwei async loadUserInfo() { uni.showLoading({ title: "加载中..." }); try { const res = await getMyProfile(); if (res.code === 200) { const data = res.data; this.userInfo = { name: data.realName || data.name, workType: data.workType === "full_time" ? "全职" : "兼职", workStatus: this.formatStatus(data.status), city: data.cityName || "", avatar: data.avatarUrl || "/static/touxiang.png", stationName: data.stationName || "未分配站点" }; } else { uni.showToast({ title: res.msg || "加载失败", icon: "none" }); } } catch (error) { formatAppLog("error", "at pages/mine/settings/profile/index.vue:173", "加载用户信息失败:", error); uni.showToast({ title: "网络错误", icon: "none" }); } finally { uni.hideLoading(); } }, // 格式化状态 @author steelwei formatStatus(status) { const statusMap = { "busy": "接单中", "resting": "休息中", "disabled": "已禁用" }; return statusMap[status] || status; }, navBack() { uni.navigateBack({ delta: 1 }); }, // 修改头像 @author steelwei changeAvatar() { uni.chooseImage({ count: 1, success: async (res) => { const tempFilePath = res.tempFilePaths[0]; uni.showLoading({ title: "上传中..." }); try { const uploadRes = await uploadFile(tempFilePath); if (uploadRes.code === 200) { const avatarUrl = uploadRes.data.url; const result = await updateAvatar(avatarUrl); if (result.code === 200) { this.userInfo.avatar = avatarUrl; uni.showToast({ title: "修改成功", icon: "success" }); } else { uni.showToast({ title: result.msg || "修改失败", icon: "none" }); } } } catch (error) { formatAppLog("error", "at pages/mine/settings/profile/index.vue:218", "修改头像失败:", error); uni.showToast({ title: "上传失败", icon: "none" }); } finally { uni.hideLoading(); } } }); }, editName() { uni.navigateTo({ url: `/pages/mine/settings/profile/edit-name?name=${this.userInfo.name}` }); }, showStatusPicker() { this.isStatusPickerShow = true; }, closeStatusPicker() { this.isStatusPickerShow = false; }, // 选择状态 @author steelwei async selectStatus(statusText) { const statusMap = { "接单中": "busy", "休息中": "resting" }; const status = statusMap[statusText]; try { const res = await updateStatus(status); if (res.code === 200) { this.userInfo.workStatus = statusText; uni.showToast({ title: "状态已更新", icon: "success" }); } else { uni.showToast({ title: res.msg || "修改失败", icon: "none" }); } } catch (error) { formatAppLog("error", "at pages/mine/settings/profile/index.vue:258", "修改状态失败:", error); uni.showToast({ title: "网络错误", icon: "none" }); } finally { this.closeStatusPicker(); } }, // 城市级联选择器(与我要加入页面一致) @author steelwei async showCityPicker() { this.isCityPickerShow = true; if (this.selectedPathway.length === 0) { await this.resetCityPicker(); } }, async resetCityPicker() { this.selectStep = 0; this.selectedPathway = []; await this.loadAreaChildren(0); }, closeCityPicker() { this.isCityPickerShow = false; }, async loadAreaChildren(parentId) { try { const res = await getAreaChildren(parentId); this.currentCityList = (res.data || []).filter((item) => item.type !== 2).map((item) => ({ id: item.id, name: item.name, type: item.type, parentId: item.parentId })); } catch (err) { formatAppLog("error", "at pages/mine/settings/profile/index.vue:293", "加载区域数据失败:", err); this.currentCityList = []; } }, async selectCityItem(item) { this.selectedPathway[this.selectStep] = item; if (item.type === 0) { this.selectStep++; this.selectedPathway = this.selectedPathway.slice(0, this.selectStep); await this.loadAreaChildren(item.id); if (this.currentCityList.length === 0) { this.selectedCityId = item.id; this.confirmCity(); } } else { this.selectedCityId = item.id; this.confirmCity(); } }, async jumpToStep(step) { this.selectStep = step; if (step === 0) { await this.loadAreaChildren(0); } else { const parent = this.selectedPathway[step - 1]; if (parent) { await this.loadAreaChildren(parent.id); } } }, // 确认城市选择 @author steelwei async confirmCity() { if (this.selectedPathway.length === 0) { uni.showToast({ title: "请选择城市", icon: "none" }); return; } const cityName = this.selectedPathway.map((i) => i.name).join(" "); const cityCode = String(this.selectedCityId); try { const res = await updateCity(cityCode, cityName); if (res.code === 200) { this.userInfo.city = cityName; uni.showToast({ title: "修改成功", icon: "success" }); this.closeCityPicker(); this.selectedPathway = []; } else { uni.showToast({ title: res.msg || "修改失败", icon: "none" }); } } catch (error) { formatAppLog("error", "at pages/mine/settings/profile/index.vue:346", "修改城市失败:", error); uni.showToast({ title: "网络错误", icon: "none" }); } } } }; function _sfc_render$i(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createElementVNode("view", { class: "custom-header" }, [ vue.createElementVNode("view", { class: "header-left", onClick: _cache[0] || (_cache[0] = (...args) => $options.navBack && $options.navBack(...args)) }, [ vue.createElementVNode("image", { class: "back-icon", src: _imports_0, style: { "transform": "rotate(180deg)" } }) ]), vue.createElementVNode("text", { class: "header-title" }, "个人资料"), vue.createElementVNode("view", { class: "header-right" }) ]), vue.createElementVNode("view", { class: "header-placeholder" }), vue.createElementVNode("view", { class: "group-card" }, [ vue.createElementVNode("view", { class: "list-item", onClick: _cache[1] || (_cache[1] = (...args) => $options.changeAvatar && $options.changeAvatar(...args)) }, [ vue.createElementVNode("text", { class: "item-title" }, "头像"), vue.createElementVNode("view", { class: "item-right" }, [ vue.createElementVNode("image", { class: "user-avatar", src: $data.userInfo.avatar, mode: "aspectFill" }, null, 8, ["src"]), vue.createElementVNode("image", { class: "arrow-icon", src: _imports_3 }) ]) ]), vue.createElementVNode("view", { class: "list-item", onClick: _cache[2] || (_cache[2] = (...args) => $options.editName && $options.editName(...args)) }, [ vue.createElementVNode("text", { class: "item-title" }, "真实姓名"), vue.createElementVNode("view", { class: "item-right" }, [ vue.createElementVNode( "text", { class: "item-value" }, vue.toDisplayString($data.userInfo.name), 1 /* TEXT */ ), vue.createElementVNode("image", { class: "arrow-icon", src: _imports_3 }) ]) ]) ]), vue.createElementVNode("view", { class: "group-card" }, [ vue.createElementVNode("view", { class: "list-item" }, [ vue.createElementVNode("text", { class: "item-title" }, "工作类型"), vue.createElementVNode( "view", { class: "tag-blue-outline" }, vue.toDisplayString($data.userInfo.workType), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "list-item", onClick: _cache[3] || (_cache[3] = (...args) => $options.showStatusPicker && $options.showStatusPicker(...args)) }, [ vue.createElementVNode("text", { class: "item-title" }, "工作状态"), vue.createElementVNode("view", { class: "item-right" }, [ vue.createElementVNode( "text", { class: "item-value-black" }, vue.toDisplayString($data.userInfo.workStatus), 1 /* TEXT */ ), vue.createElementVNode("image", { class: "arrow-icon", src: _imports_3 }) ]) ]) ]), vue.createElementVNode("view", { class: "group-card" }, [ vue.createElementVNode("view", { class: "list-item", onClick: _cache[4] || (_cache[4] = (...args) => $options.showCityPicker && $options.showCityPicker(...args)) }, [ vue.createElementVNode("text", { class: "item-title" }, "工作城市"), vue.createElementVNode("view", { class: "item-right" }, [ vue.createElementVNode( "text", { class: "item-value" }, vue.toDisplayString($data.userInfo.city), 1 /* TEXT */ ), vue.createElementVNode("image", { class: "arrow-icon", src: _imports_3 }) ]) ]), vue.createElementVNode("view", { class: "list-item no-border" }, [ vue.createElementVNode("text", { class: "item-title" }, "所属站点"), vue.createElementVNode("view", { class: "item-right" }, [ vue.createElementVNode( "text", { class: "item-value" }, vue.toDisplayString($data.userInfo.stationName || "未分配站点"), 1 /* TEXT */ ) ]) ]) ]), $data.isStatusPickerShow ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "popup-mask", onClick: _cache[9] || (_cache[9] = (...args) => $options.closeStatusPicker && $options.closeStatusPicker(...args)) }, [ vue.createElementVNode("view", { class: "popup-content", onClick: _cache[8] || (_cache[8] = vue.withModifiers(() => { }, ["stop"])) }, [ vue.createElementVNode("view", { class: "popup-title" }, "选择工作状态"), vue.createElementVNode("view", { class: "popup-item", onClick: _cache[5] || (_cache[5] = ($event) => $options.selectStatus("接单中")) }, "接单中"), vue.createElementVNode("view", { class: "popup-item", onClick: _cache[6] || (_cache[6] = ($event) => $options.selectStatus("休息中")) }, "休息中"), vue.createElementVNode("view", { class: "popup-cancel", onClick: _cache[7] || (_cache[7] = (...args) => $options.closeStatusPicker && $options.closeStatusPicker(...args)) }, "取消") ]) ])) : vue.createCommentVNode("v-if", true), $data.isCityPickerShow ? (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "popup-mask", onClick: _cache[13] || (_cache[13] = (...args) => $options.closeCityPicker && $options.closeCityPicker(...args)) }, [ vue.createElementVNode("view", { class: "popup-content", onClick: _cache[12] || (_cache[12] = vue.withModifiers(() => { }, ["stop"])) }, [ vue.createElementVNode("view", { class: "popup-header-row" }, [ vue.createElementVNode("text", { class: "popup-btn-cancel", onClick: _cache[10] || (_cache[10] = (...args) => $options.closeCityPicker && $options.closeCityPicker(...args)) }, "取消"), vue.createElementVNode("text", { class: "popup-title-text" }, "请选择工作城市"), vue.createElementVNode("text", { class: "popup-btn-confirm", onClick: _cache[11] || (_cache[11] = (...args) => $options.confirmCity && $options.confirmCity(...args)) }, "确定") ]), vue.createElementVNode("view", { class: "picker-body" }, [ vue.createElementVNode("view", { class: "timeline-area" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($data.selectedPathway, (item, index) => { return vue.openBlock(), vue.createElementBlock("view", { class: "timeline-item", key: index, onClick: ($event) => $options.jumpToStep(index) }, [ vue.createElementVNode("view", { class: "timeline-dot" }), vue.createElementVNode( "text", null, vue.toDisplayString(item.name), 1 /* TEXT */ ) ], 8, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )), $data.selectStep === $data.selectedPathway.length ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "timeline-item active" }, [ vue.createElementVNode("view", { class: "timeline-dot" }), vue.createElementVNode("text", null, "请选择") ])) : vue.createCommentVNode("v-if", true) ]), vue.createElementVNode("scroll-view", { "scroll-y": "", class: "list-area" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($data.currentCityList, (item) => { return vue.openBlock(), vue.createElementBlock("view", { class: "list-item", key: item.id, onClick: ($event) => $options.selectCityItem(item) }, vue.toDisplayString(item.name), 9, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )), $data.currentCityList.length === 0 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, style: { "padding": "20rpx", "color": "#999" } }, " 无数据 ")) : vue.createCommentVNode("v-if", true) ]) ]) ]) ])) : vue.createCommentVNode("v-if", true) ]); } const PagesMineSettingsProfileIndex = /* @__PURE__ */ _export_sfc(_sfc_main$j, [["render", _sfc_render$i], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/mine/settings/profile/index.vue"]]); const _sfc_main$i = { data() { return { authInfo: { realName: "", idCard: "", idCardFront: "", idCardBack: "", serviceTypes: [], authId: false, authQual: false, pendingAudit: false, qualImages: [] } }; }, onLoad() { this.loadAuthInfo(); }, methods: { navBack() { uni.navigateBack({ delta: 1 }); }, async loadAuthInfo() { try { const res = await getAuthInfo(); if (res.code === 200 && res.data) { this.authInfo = { realName: res.data.realName || "", idCard: res.data.idCard || "", idCardFront: res.data.idCardFrontUrl || "", idCardBack: res.data.idCardBackUrl || "", serviceTypes: res.data.serviceTypeList || [], authId: res.data.authId || false, authQual: res.data.authQual || false, pendingAudit: res.data.pendingAudit || false, qualImages: res.data.qualImageUrls || [] }; } } catch (e) { formatAppLog("error", "at pages/mine/settings/auth/index.vue:133", "加载认证信息失败", e); uni.showToast({ title: "加载失败", icon: "none" }); } }, maskIdCard(idCard) { if (!idCard || idCard.length < 8) return idCard; return idCard.substring(0, 4) + "**********" + idCard.substring(idCard.length - 4); }, editAuth() { uni.showModal({ title: "提示", content: "修改认证信息需要重新审核,审核期间无法接单,确定要继续吗?", success: (res) => { if (res.confirm) { uni.navigateTo({ url: "/pages/mine/settings/auth/edit" }); } } }); } } }; function _sfc_render$h(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createElementVNode("view", { class: "custom-header" }, [ vue.createElementVNode("view", { class: "header-left", onClick: _cache[0] || (_cache[0] = (...args) => $options.navBack && $options.navBack(...args)) }, [ vue.createElementVNode("image", { class: "back-icon", src: _imports_0, style: { "transform": "rotate(180deg)" } }) ]), vue.createElementVNode("text", { class: "header-title" }, "认证信息"), vue.createElementVNode("view", { class: "header-right" }) ]), vue.createElementVNode("view", { class: "header-placeholder" }), vue.createElementVNode("view", { class: "card" }, [ vue.createElementVNode("view", { class: "section-header" }, [ vue.createElementVNode("view", { class: "orange-bar" }), vue.createElementVNode("text", { class: "section-title" }, "身份认证"), $data.authInfo.pendingAudit ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "tag-orange" }, "认证中")) : $data.authInfo.authId ? (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "tag-green" }, "已认证")) : (vue.openBlock(), vue.createElementBlock("view", { key: 2, class: "tag-gray" }, "未认证")) ]), vue.createElementVNode("view", { class: "info-row" }, [ vue.createElementVNode("text", { class: "label" }, "真实姓名"), vue.createElementVNode( "text", { class: "value" }, vue.toDisplayString($data.authInfo.realName || "未设置"), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "info-row" }, [ vue.createElementVNode("text", { class: "label" }, "证件号码"), vue.createElementVNode( "text", { class: "value" }, vue.toDisplayString($options.maskIdCard($data.authInfo.idCard) || "未设置"), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "id-card-row" }, [ $data.authInfo.idCardFront ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "id-card-box green-bg" }, [ vue.createElementVNode("image", { class: "id-card-img", src: $data.authInfo.idCardFront, mode: "aspectFill" }, null, 8, ["src"]), vue.createElementVNode("view", { class: "corner-tag" }, "人像面") ])) : (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "id-card-box green-bg" }, [ vue.createElementVNode("text", { class: "id-text" }, "ID Front"), vue.createElementVNode("view", { class: "corner-tag" }, "人像面") ])), $data.authInfo.idCardBack ? (vue.openBlock(), vue.createElementBlock("view", { key: 2, class: "id-card-box green-bg" }, [ vue.createElementVNode("image", { class: "id-card-img", src: $data.authInfo.idCardBack, mode: "aspectFill" }, null, 8, ["src"]), vue.createElementVNode("view", { class: "corner-tag" }, "国徽面") ])) : (vue.openBlock(), vue.createElementBlock("view", { key: 3, class: "id-card-box green-bg" }, [ vue.createElementVNode("text", { class: "id-text" }, "ID Back"), vue.createElementVNode("view", { class: "corner-tag" }, "国徽面") ])) ]) ]), vue.createElementVNode("view", { class: "card" }, [ vue.createElementVNode("view", { class: "section-header" }, [ vue.createElementVNode("view", { class: "orange-bar" }), vue.createElementVNode("text", { class: "section-title" }, "服务类型") ]), vue.createElementVNode("view", { class: "tags-row" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($data.authInfo.serviceTypes, (type, index) => { return vue.openBlock(), vue.createElementBlock( "view", { class: "service-tag", key: index }, vue.toDisplayString(type), 1 /* TEXT */ ); }), 128 /* KEYED_FRAGMENT */ )), $data.authInfo.serviceTypes.length === 0 ? (vue.openBlock(), vue.createElementBlock("text", { key: 0, class: "empty-text" }, "暂无服务类型")) : vue.createCommentVNode("v-if", true) ]) ]), vue.createElementVNode("view", { class: "card" }, [ vue.createElementVNode("view", { class: "section-header" }, [ vue.createElementVNode("view", { class: "orange-bar" }), vue.createElementVNode("text", { class: "section-title" }, "资质证书") ]), vue.createElementVNode( "text", { class: "sub-title" }, vue.toDisplayString($data.authInfo.authQual ? "已认证" : "未认证"), 1 /* TEXT */ ), vue.createElementVNode("view", { class: "cert-row" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($data.authInfo.qualImages, (img, index) => { return vue.openBlock(), vue.createElementBlock("view", { class: "cert-box yellow-bg", key: index }, [ vue.createElementVNode("image", { class: "cert-img", src: img, mode: "aspectFill" }, null, 8, ["src"]) ]); }), 128 /* KEYED_FRAGMENT */ )), $data.authInfo.qualImages.length === 0 ? (vue.openBlock(), vue.createElementBlock("text", { key: 0, class: "empty-text" }, "暂无资质证书")) : vue.createCommentVNode("v-if", true) ]) ]), vue.createElementVNode("view", { class: "bottom-btn-area" }, [ $data.authInfo.pendingAudit ? (vue.openBlock(), vue.createElementBlock("button", { key: 0, class: "action-btn disabled", disabled: "" }, "认证审核中...")) : (vue.openBlock(), vue.createElementBlock("button", { key: 1, class: "action-btn", onClick: _cache[1] || (_cache[1] = (...args) => $options.editAuth && $options.editAuth(...args)) }, "修改认证信息")), $data.authInfo.pendingAudit ? (vue.openBlock(), vue.createElementBlock("text", { key: 2, class: "tips" }, "认证信息正在审核中,请耐心等待")) : (vue.openBlock(), vue.createElementBlock("text", { key: 3, class: "tips" }, "修改认证信息需要重新审核,审核期间无法接单")) ]) ]); } const PagesMineSettingsAuthIndex = /* @__PURE__ */ _export_sfc(_sfc_main$i, [["render", _sfc_render$h], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/mine/settings/auth/index.vue"]]); const _sfc_main$h = { data() { return { idCardFront: "", idCardBack: "", idCardFrontOssId: "", idCardBackOssId: "", serviceOptions: ["宠物接送", "上门喂遛", "上门洗护"], selectedServices: [], qualifications: {}, qualOssIds: {} }; }, onLoad() { this.loadAuthInfo(); }, methods: { async loadAuthInfo() { try { uni.showLoading({ title: "加载中..." }); const res = await getAuthInfo(); if (res.code === 200 && res.data) { this.idCardFront = res.data.idCardFrontUrl || ""; this.idCardBack = res.data.idCardBackUrl || ""; this.idCardFrontOssId = res.data.idCardFront || ""; this.idCardBackOssId = res.data.idCardBack || ""; this.selectedServices = res.data.serviceTypeList || []; this.selectedServices.forEach((service) => { this.qualifications[service] = []; this.qualOssIds[service] = []; }); if (res.data.qualImageUrls && res.data.qualImageUrls.length > 0) { const firstService = this.selectedServices[0]; if (firstService) { this.qualifications[firstService] = res.data.qualImageUrls; } } } uni.hideLoading(); } catch (e) { uni.hideLoading(); formatAppLog("error", "at pages/mine/settings/auth/edit.vue:151", "加载认证信息失败", e); uni.showToast({ title: "加载失败", icon: "none" }); } }, navBack() { uni.navigateBack({ delta: 1 }); }, chooseImage(side) { uni.chooseImage({ count: 1, sizeType: ["compressed"], sourceType: ["album", "camera"], success: async (res) => { const tempPath = res.tempFilePaths[0]; if (side === "front") { this.idCardFront = tempPath; } else { this.idCardBack = tempPath; } try { uni.showLoading({ title: "上传中..." }); const uploadRes = await uploadFile(tempPath); if (side === "front") { this.idCardFrontOssId = uploadRes.data.ossId; } else { this.idCardBackOssId = uploadRes.data.ossId; } uni.hideLoading(); uni.showToast({ title: "上传成功", icon: "success" }); } catch (err) { uni.hideLoading(); formatAppLog("error", "at pages/mine/settings/auth/edit.vue:183", "上传身份证图片失败:", err); uni.showToast({ title: "上传失败", icon: "none" }); } } }); }, deleteImage(side) { if (side === "front") { this.idCardFront = ""; this.idCardFrontOssId = ""; } else { this.idCardBack = ""; this.idCardBackOssId = ""; } }, toggleService(service) { const index = this.selectedServices.indexOf(service); if (index > -1) { this.selectedServices.splice(index, 1); delete this.qualifications[service]; delete this.qualOssIds[service]; } else { this.selectedServices.push(service); this.qualifications[service] = []; this.qualOssIds[service] = []; } this.$forceUpdate(); }, chooseQualImage(service) { uni.chooseImage({ count: 9, sizeType: ["compressed"], sourceType: ["album", "camera"], success: async (res) => { if (!this.qualifications[service]) { this.qualifications[service] = []; this.qualOssIds[service] = []; } for (const tempPath of res.tempFilePaths) { this.qualifications[service].push(tempPath); this.$forceUpdate(); try { uni.showLoading({ title: "上传中..." }); const uploadRes = await uploadFile(tempPath); this.qualOssIds[service].push(uploadRes.data.ossId); uni.hideLoading(); } catch (err) { uni.hideLoading(); formatAppLog("error", "at pages/mine/settings/auth/edit.vue:233", "上传资质图片失败:", err); } } } }); }, deleteQualImage(service, index) { this.qualifications[service].splice(index, 1); if (this.qualOssIds[service]) { this.qualOssIds[service].splice(index, 1); } this.$forceUpdate(); }, previewImage(service, index) { uni.previewImage({ urls: this.qualifications[service], current: index }); }, async submitAuth() { if (!this.idCardFront || !this.idCardBack) { uni.showToast({ title: "请上传身份证正反面", icon: "none" }); return; } if (this.selectedServices.length === 0) { uni.showToast({ title: "请选择服务类型", icon: "none" }); return; } for (const service of this.selectedServices) { if (!this.qualifications[service] || this.qualifications[service].length === 0) { uni.showToast({ title: `请上传${service}资质`, icon: "none" }); return; } } uni.showModal({ title: "提示", content: "修改认证信息需要重新审核,审核期间无法接单,确定要继续吗?", success: (res) => { if (res.confirm) { this.doSubmit(); } } }); }, async doSubmit() { const allQualOssIds = []; Object.values(this.qualOssIds).forEach((ids) => { allQualOssIds.push(...ids); }); const submitData = { idCardFront: this.idCardFrontOssId, idCardBack: this.idCardBackOssId, serviceTypes: JSON.stringify(this.selectedServices), qualifications: JSON.stringify(allQualOssIds) }; try { uni.showLoading({ title: "提交中..." }); await updateAuthInfo(submitData); uni.hideLoading(); uni.showToast({ title: "提交成功,等待审核", icon: "success", duration: 1500 }); setTimeout(() => { uni.navigateBack({ delta: 1 }); }, 1500); } catch (err) { uni.hideLoading(); formatAppLog("error", "at pages/mine/settings/auth/edit.vue:303", "提交失败:", err); uni.showToast({ title: "提交失败", icon: "none" }); } } } }; function _sfc_render$g(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "edit-auth-container" }, [ vue.createElementVNode("view", { class: "custom-header" }, [ vue.createElementVNode("view", { class: "header-left", onClick: _cache[0] || (_cache[0] = (...args) => $options.navBack && $options.navBack(...args)) }, [ vue.createElementVNode("image", { class: "back-icon", src: _imports_0, style: { "transform": "rotate(180deg)" } }) ]), vue.createElementVNode("text", { class: "header-title" }, "修改认证信息"), vue.createElementVNode("view", { class: "header-right" }) ]), vue.createElementVNode("view", { class: "header-placeholder" }), vue.createElementVNode("view", { class: "warning-tip" }, [ vue.createElementVNode("text", { class: "warning-icon" }, "⚠"), vue.createElementVNode("text", { class: "warning-text" }, "若修改认证信息,将在审核通过后生效") ]), vue.createElementVNode("view", { class: "section-card" }, [ vue.createElementVNode("view", { class: "section-title" }, "身份认证"), vue.createElementVNode("text", { class: "section-subtitle" }, "点击图片修改"), vue.createElementVNode("view", { class: "id-card-row" }, [ vue.createElementVNode("view", { class: "id-card-upload", onClick: _cache[2] || (_cache[2] = ($event) => $options.chooseImage("front")) }, [ $data.idCardFront ? (vue.openBlock(), vue.createElementBlock("image", { key: 0, src: $data.idCardFront, class: "id-card-img", mode: "aspectFill" }, null, 8, ["src"])) : (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "id-card-placeholder" }, [ vue.createElementVNode("text", { class: "placeholder-text" }, "ID Front") ])), $data.idCardFront ? (vue.openBlock(), vue.createElementBlock("view", { key: 2, class: "delete-btn", onClick: _cache[1] || (_cache[1] = vue.withModifiers(($event) => $options.deleteImage("front"), ["stop"])) }, "×")) : vue.createCommentVNode("v-if", true), vue.createElementVNode("view", { class: "corner-tag" }, "人像面") ]), vue.createElementVNode("view", { class: "id-card-upload", onClick: _cache[4] || (_cache[4] = ($event) => $options.chooseImage("back")) }, [ $data.idCardBack ? (vue.openBlock(), vue.createElementBlock("image", { key: 0, src: $data.idCardBack, class: "id-card-img", mode: "aspectFill" }, null, 8, ["src"])) : (vue.openBlock(), vue.createElementBlock("view", { key: 1, class: "id-card-placeholder" }, [ vue.createElementVNode("text", { class: "placeholder-text" }, "ID Back") ])), $data.idCardBack ? (vue.openBlock(), vue.createElementBlock("view", { key: 2, class: "delete-btn", onClick: _cache[3] || (_cache[3] = vue.withModifiers(($event) => $options.deleteImage("back"), ["stop"])) }, "×")) : vue.createCommentVNode("v-if", true), vue.createElementVNode("view", { class: "corner-tag" }, "国徽面") ]) ]) ]), vue.createElementVNode("view", { class: "section-card" }, [ vue.createElementVNode("view", { class: "section-title" }, "服务类型"), vue.createElementVNode("text", { class: "section-subtitle" }, "可多选"), vue.createElementVNode("view", { class: "service-list" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($data.serviceOptions, (service, index) => { return vue.openBlock(), vue.createElementBlock("view", { class: "service-item", key: index, onClick: ($event) => $options.toggleService(service) }, [ vue.createElementVNode( "text", { class: "service-name" }, vue.toDisplayString(service), 1 /* TEXT */ ), vue.createElementVNode( "view", { class: vue.normalizeClass(["check-icon", { active: $data.selectedServices.includes(service) }]) }, [ $data.selectedServices.includes(service) ? (vue.openBlock(), vue.createElementBlock("text", { key: 0 }, "✓")) : vue.createCommentVNode("v-if", true) ], 2 /* CLASS */ ) ], 8, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ]) ]), vue.createElementVNode("view", { class: "section-card" }, [ vue.createElementVNode("view", { class: "section-title" }, "资质证书"), vue.createElementVNode("text", { class: "section-subtitle" }, "请上传对应服务的资质"), (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($data.selectedServices, (service, index) => { return vue.openBlock(), vue.createElementBlock("view", { key: index, class: "qual-section" }, [ vue.createElementVNode( "text", { class: "qual-title" }, vue.toDisplayString(service) + "资质", 1 /* TEXT */ ), vue.createElementVNode("view", { class: "qual-upload-row" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($data.qualifications[service], (img, imgIndex) => { return vue.openBlock(), vue.createElementBlock("view", { class: "qual-item", key: imgIndex, onClick: ($event) => $options.previewImage(service, imgIndex) }, [ vue.createElementVNode("image", { src: img, class: "qual-img", mode: "aspectFill" }, null, 8, ["src"]), vue.createElementVNode("view", { class: "delete-btn", onClick: vue.withModifiers(($event) => $options.deleteQualImage(service, imgIndex), ["stop"]) }, "×", 8, ["onClick"]) ], 8, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )), vue.createElementVNode("view", { class: "qual-upload-btn", onClick: ($event) => $options.chooseQualImage(service) }, [ vue.createElementVNode("text", { class: "plus-icon" }, "+") ], 8, ["onClick"]) ]) ]); }), 128 /* KEYED_FRAGMENT */ )), $data.selectedServices.length === 0 ? (vue.openBlock(), vue.createElementBlock("text", { key: 0, class: "empty-hint" }, "请先选择服务类型")) : vue.createCommentVNode("v-if", true) ]), vue.createElementVNode("view", { class: "bottom-btn-area" }, [ vue.createElementVNode("button", { class: "submit-btn", onClick: _cache[5] || (_cache[5] = (...args) => $options.submitAuth && $options.submitAuth(...args)) }, "提交审核") ]) ]); } const PagesMineSettingsAuthEdit = /* @__PURE__ */ _export_sfc(_sfc_main$h, [["render", _sfc_render$g], ["__scopeId", "data-v-10d0f207"], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/mine/settings/auth/edit.vue"]]); const _imports_1$3 = "/static/icons/shield.svg"; const _sfc_main$g = { data() { return { hasShieldIcon: false // 如果没有盾牌图标资源,暂时隐藏或用文字代替 }; }, methods: { navBack() { uni.navigateBack({ delta: 1 }); }, editBank() { uni.showToast({ title: "跳转修改银行卡页", icon: "none" }); } } }; function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createElementVNode("view", { class: "custom-header" }, [ vue.createElementVNode("view", { class: "header-left", onClick: _cache[0] || (_cache[0] = (...args) => $options.navBack && $options.navBack(...args)) }, [ vue.createElementVNode("image", { class: "back-icon", src: _imports_0, style: { "transform": "rotate(180deg)" } }) ]), vue.createElementVNode("text", { class: "header-title" }, "银行卡信息"), vue.createElementVNode("view", { class: "header-right" }) ]), vue.createElementVNode("view", { class: "header-placeholder" }), vue.createElementVNode("view", { class: "bank-card" }, [ vue.createElementVNode("view", { class: "card-top" }, [ vue.createElementVNode("view", { class: "bank-info" }, [ vue.createElementVNode("view", { class: "bank-icon-circle" }, [ vue.createElementVNode("text", { class: "bank-icon-text" }, "招") ]), vue.createElementVNode("text", { class: "bank-name" }, "招商银行") ]), vue.createElementVNode("view", { class: "card-type" }, "储蓄卡") ]), vue.createElementVNode("view", { class: "card-number" }, "622588******1234"), vue.createElementVNode("view", { class: "card-bg-circle" }) ]), vue.createElementVNode("button", { class: "action-btn", onClick: _cache[1] || (_cache[1] = (...args) => $options.editBank && $options.editBank(...args)) }, "修改银行卡信息"), vue.createElementVNode("view", { class: "security-tip" }, [ $data.hasShieldIcon ? (vue.openBlock(), vue.createElementBlock("image", { key: 0, class: "shield-icon", src: _imports_1$3 })) : vue.createCommentVNode("v-if", true), vue.createElementVNode("text", null, "信息已加密,仅用于收入发放") ]) ]); } const PagesMineSettingsBankIndex = /* @__PURE__ */ _export_sfc(_sfc_main$g, [["render", _sfc_render$f], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/mine/settings/bank/index.vue"]]); const _sfc_main$f = { data() { return { phone: "", hasPassword: false }; }, onLoad() { this.loadProfile(); }, methods: { navBack() { uni.navigateBack({ delta: 1 }); }, async loadProfile() { try { const res = await getMyProfile(); if (res.code === 200 && res.data) { this.phone = res.data.phone || ""; this.hasPassword = !!res.data.hasPassword; } } catch (e) { formatAppLog("error", "at pages/mine/settings/security/index.vue:68", "加载个人信息失败", e); } }, maskPhone(phone) { if (!phone || phone.length < 11) return phone; return phone.substring(0, 3) + "****" + phone.substring(7); }, changeMobile() { uni.navigateTo({ url: "/pages/mine/settings/security/change-phone" }); }, changePassword() { uni.navigateTo({ url: "/pages/mine/settings/security/change-password" }); }, async deleteAccount() { uni.showModal({ title: "警示", content: "注销账号后将无法恢复,确定要继续吗?", success: async (res) => { if (res.confirm) { try { const result = await deleteAccount(); if (result.code === 200) { uni.showToast({ title: "账号已注销", icon: "success" }); setTimeout(() => { uni.reLaunch({ url: "/pages/login/login" }); }, 1500); } else { uni.showToast({ title: result.msg || "注销失败", icon: "none" }); } } catch (e) { formatAppLog("error", "at pages/mine/settings/security/index.vue:102", "注销账号失败", e); uni.showToast({ title: "注销失败", icon: "none" }); } } } }); } } }; function _sfc_render$e(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createElementVNode("view", { class: "custom-header" }, [ vue.createElementVNode("view", { class: "header-left", onClick: _cache[0] || (_cache[0] = (...args) => $options.navBack && $options.navBack(...args)) }, [ vue.createElementVNode("image", { class: "back-icon", src: _imports_0, style: { "transform": "rotate(180deg)" } }) ]), vue.createElementVNode("text", { class: "header-title" }, "账号与安全"), vue.createElementVNode("view", { class: "header-right" }) ]), vue.createElementVNode("view", { class: "header-placeholder" }), vue.createElementVNode("view", { class: "section-title-security" }, "安全设置"), vue.createElementVNode("view", { class: "group-card" }, [ vue.createElementVNode("view", { class: "list-item", onClick: _cache[1] || (_cache[1] = (...args) => $options.changeMobile && $options.changeMobile(...args)) }, [ vue.createElementVNode("text", { class: "item-title" }, "手机号"), vue.createElementVNode("view", { class: "item-right" }, [ vue.createElementVNode( "text", { class: "item-value" }, vue.toDisplayString($options.maskPhone($data.phone) || "未设置"), 1 /* TEXT */ ), vue.createElementVNode("image", { class: "arrow-icon", src: _imports_3 }) ]) ]), vue.createElementVNode("view", { class: "list-item", onClick: _cache[2] || (_cache[2] = (...args) => $options.changePassword && $options.changePassword(...args)) }, [ vue.createElementVNode("text", { class: "item-title" }, "登录密码"), vue.createElementVNode("view", { class: "item-right" }, [ vue.createElementVNode( "text", { class: "item-value" }, vue.toDisplayString($data.hasPassword ? "已设置" : "未设置"), 1 /* TEXT */ ), vue.createElementVNode("image", { class: "arrow-icon", src: _imports_3 }) ]) ]) ]), vue.createElementVNode("view", { class: "section-title-security" }, "高级设置"), vue.createElementVNode("view", { class: "group-card" }, [ vue.createElementVNode("view", { class: "list-item no-border", onClick: _cache[3] || (_cache[3] = (...args) => $options.deleteAccount && $options.deleteAccount(...args)) }, [ vue.createElementVNode("text", { class: "item-title" }, "注销账号"), vue.createElementVNode("image", { class: "arrow-icon", src: _imports_3 }) ]) ]) ]); } const PagesMineSettingsSecurityIndex = /* @__PURE__ */ _export_sfc(_sfc_main$f, [["render", _sfc_render$e], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/mine/settings/security/index.vue"]]); const _sfc_main$e = { data() { return { name: "" }; }, onLoad(options) { if (options.name) { this.name = decodeURIComponent(options.name); } }, methods: { navBack() { uni.navigateBack({ delta: 1 }); }, // 提交修改 @author steelwei async submitChange() { if (!this.name || !this.name.trim()) { uni.showToast({ title: "请输入姓名", icon: "none" }); return; } if (this.name.trim().length < 2) { uni.showToast({ title: "姓名至少2个字符", icon: "none" }); return; } uni.showLoading({ title: "提交中..." }); try { const res = await updateName(this.name.trim()); if (res.code === 200) { uni.showToast({ title: "修改成功", icon: "success", duration: 2e3 }); uni.$emit("updateName", this.name.trim()); setTimeout(() => { uni.navigateBack({ delta: 1 }); }, 2e3); } else { uni.showToast({ title: res.msg || "修改失败", icon: "none" }); } } catch (error) { formatAppLog("error", "at pages/mine/settings/profile/edit-name.vue:94", "修改姓名失败:", error); uni.showToast({ title: "网络错误", icon: "none" }); } finally { uni.hideLoading(); } } } }; function _sfc_render$d(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createElementVNode("view", { class: "custom-header" }, [ vue.createElementVNode("view", { class: "header-left", onClick: _cache[0] || (_cache[0] = (...args) => $options.navBack && $options.navBack(...args)) }, [ vue.createElementVNode("image", { class: "back-icon", src: _imports_0, style: { "transform": "rotate(180deg)" } }) ]), vue.createElementVNode("text", { class: "header-title" }, "修改姓名"), vue.createElementVNode("view", { class: "header-right" }) ]), vue.createElementVNode("view", { class: "header-placeholder" }), vue.createElementVNode("view", { class: "form-card" }, [ vue.createElementVNode("view", { class: "form-item no-border" }, [ vue.createElementVNode("text", { class: "form-label" }, "真实姓名"), vue.withDirectives(vue.createElementVNode( "input", { class: "form-input", type: "text", "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $data.name = $event), placeholder: "请输入真实姓名", "placeholder-class": "placeholder", maxlength: "20" }, null, 512 /* NEED_PATCH */ ), [ [vue.vModelText, $data.name] ]) ]) ]), vue.createElementVNode("view", { class: "btn-area" }, [ vue.createElementVNode("button", { class: "submit-btn", onClick: _cache[2] || (_cache[2] = (...args) => $options.submitChange && $options.submitChange(...args)) }, "确认修改") ]), vue.createElementVNode("view", { class: "tips" }, [ vue.createElementVNode("text", { class: "tips-text" }, "• 请输入您的真实姓名"), vue.createElementVNode("text", { class: "tips-text" }, "• 姓名将用于实名认证和订单服务") ]) ]); } const PagesMineSettingsProfileEditName = /* @__PURE__ */ _export_sfc(_sfc_main$e, [["render", _sfc_render$d], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/mine/settings/profile/edit-name.vue"]]); const _sfc_main$d = { data() { return { oldPassword: "", newPassword: "", confirmPassword: "" }; }, methods: { navBack() { uni.navigateBack({ delta: 1 }); }, // 提交修改 @author steelwei async submitChange() { if (!this.oldPassword) { uni.showToast({ title: "请输入旧密码", icon: "none" }); return; } if (!this.newPassword) { uni.showToast({ title: "请输入新密码", icon: "none" }); return; } if (this.newPassword.length < 6 || this.newPassword.length > 20) { uni.showToast({ title: "密码长度为6-20位", icon: "none" }); return; } if (this.newPassword !== this.confirmPassword) { uni.showToast({ title: "两次密码输入不一致", icon: "none" }); return; } uni.showLoading({ title: "提交中..." }); try { const res = await updatePassword(this.oldPassword, this.newPassword); if (res.code === 200) { uni.showToast({ title: "修改成功", icon: "success", duration: 2e3 }); setTimeout(() => { uni.navigateBack({ delta: 1 }); }, 2e3); } else { uni.showToast({ title: res.msg || "修改失败", icon: "none" }); } } catch (error) { formatAppLog("error", "at pages/mine/settings/security/change-password.vue:109", "修改密码失败:", error); uni.showToast({ title: "网络错误", icon: "none" }); } finally { uni.hideLoading(); } } } }; function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createElementVNode("view", { class: "custom-header" }, [ vue.createElementVNode("view", { class: "header-left", onClick: _cache[0] || (_cache[0] = (...args) => $options.navBack && $options.navBack(...args)) }, [ vue.createElementVNode("image", { class: "back-icon", src: _imports_0, style: { "transform": "rotate(180deg)" } }) ]), vue.createElementVNode("text", { class: "header-title" }, "修改密码"), vue.createElementVNode("view", { class: "header-right" }) ]), vue.createElementVNode("view", { class: "header-placeholder" }), vue.createElementVNode("view", { class: "form-card" }, [ vue.createElementVNode("view", { class: "form-item" }, [ vue.createElementVNode("text", { class: "form-label" }, "旧密码"), vue.withDirectives(vue.createElementVNode( "input", { class: "form-input", type: "password", "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $data.oldPassword = $event), placeholder: "请输入旧密码", "placeholder-class": "placeholder" }, null, 512 /* NEED_PATCH */ ), [ [vue.vModelText, $data.oldPassword] ]) ]), vue.createElementVNode("view", { class: "form-item" }, [ vue.createElementVNode("text", { class: "form-label" }, "新密码"), vue.withDirectives(vue.createElementVNode( "input", { class: "form-input", type: "password", "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $data.newPassword = $event), placeholder: "请输入新密码(6-20位)", "placeholder-class": "placeholder" }, null, 512 /* NEED_PATCH */ ), [ [vue.vModelText, $data.newPassword] ]) ]), vue.createElementVNode("view", { class: "form-item no-border" }, [ vue.createElementVNode("text", { class: "form-label" }, "确认密码"), vue.withDirectives(vue.createElementVNode( "input", { class: "form-input", type: "password", "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => $data.confirmPassword = $event), placeholder: "请再次输入新密码", "placeholder-class": "placeholder" }, null, 512 /* NEED_PATCH */ ), [ [vue.vModelText, $data.confirmPassword] ]) ]) ]), vue.createElementVNode("view", { class: "btn-area" }, [ vue.createElementVNode("button", { class: "submit-btn", onClick: _cache[4] || (_cache[4] = (...args) => $options.submitChange && $options.submitChange(...args)) }, "确认修改") ]) ]); } const PagesMineSettingsSecurityChangePassword = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["render", _sfc_render$c], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/mine/settings/security/change-password.vue"]]); const _sfc_main$c = { data() { return { phone: "", code: "", countdown: 0, timer: null }; }, onUnload() { if (this.timer) { clearInterval(this.timer); } }, methods: { navBack() { uni.navigateBack({ delta: 1 }); }, // 发送验证码 @author steelwei sendCode() { if (!this.phone) { uni.showToast({ title: "请输入手机号", icon: "none" }); return; } if (!/^1[3-9]\d{9}$/.test(this.phone)) { uni.showToast({ title: "手机号格式不正确", icon: "none" }); return; } uni.showToast({ title: "验证码已发送", icon: "success" }); this.countdown = 60; this.timer = setInterval(() => { this.countdown--; if (this.countdown <= 0) { clearInterval(this.timer); } }, 1e3); }, // 提交修改 @author steelwei async submitChange() { if (!this.phone) { uni.showToast({ title: "请输入手机号", icon: "none" }); return; } if (!/^1[3-9]\d{9}$/.test(this.phone)) { uni.showToast({ title: "手机号格式不正确", icon: "none" }); return; } if (!this.code) { uni.showToast({ title: "请输入验证码", icon: "none" }); return; } uni.showLoading({ title: "提交中..." }); try { const res = await updatePhone(this.phone, this.code); if (res.code === 200) { uni.showToast({ title: "修改成功", icon: "success", duration: 2e3 }); setTimeout(() => { uni.navigateBack({ delta: 1 }); }, 2e3); } else { uni.showToast({ title: res.msg || "修改失败", icon: "none" }); } } catch (error) { formatAppLog("error", "at pages/mine/settings/security/change-phone.vue:139", "修改手机号失败:", error); uni.showToast({ title: "网络错误", icon: "none" }); } finally { uni.hideLoading(); } } } }; function _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createElementVNode("view", { class: "custom-header" }, [ vue.createElementVNode("view", { class: "header-left", onClick: _cache[0] || (_cache[0] = (...args) => $options.navBack && $options.navBack(...args)) }, [ vue.createElementVNode("image", { class: "back-icon", src: _imports_0, style: { "transform": "rotate(180deg)" } }) ]), vue.createElementVNode("text", { class: "header-title" }, "修改手机号"), vue.createElementVNode("view", { class: "header-right" }) ]), vue.createElementVNode("view", { class: "header-placeholder" }), vue.createElementVNode("view", { class: "form-card" }, [ vue.createElementVNode("view", { class: "form-item" }, [ vue.createElementVNode("text", { class: "form-label" }, "新手机号"), vue.withDirectives(vue.createElementVNode( "input", { class: "form-input", type: "number", "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $data.phone = $event), placeholder: "请输入新手机号", "placeholder-class": "placeholder", maxlength: "11" }, null, 512 /* NEED_PATCH */ ), [ [vue.vModelText, $data.phone] ]) ]), vue.createElementVNode("view", { class: "form-item no-border" }, [ vue.createElementVNode("text", { class: "form-label" }, "验证码"), vue.withDirectives(vue.createElementVNode( "input", { class: "form-input", type: "number", "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $data.code = $event), placeholder: "请输入验证码", "placeholder-class": "placeholder", maxlength: "6" }, null, 512 /* NEED_PATCH */ ), [ [vue.vModelText, $data.code] ]), vue.createElementVNode("button", { class: "code-btn", disabled: $data.countdown > 0, onClick: _cache[3] || (_cache[3] = (...args) => $options.sendCode && $options.sendCode(...args)) }, vue.toDisplayString($data.countdown > 0 ? `${$data.countdown}s` : "获取验证码"), 9, ["disabled"]) ]) ]), vue.createElementVNode("view", { class: "btn-area" }, [ vue.createElementVNode("button", { class: "submit-btn", onClick: _cache[4] || (_cache[4] = (...args) => $options.submitChange && $options.submitChange(...args)) }, "确认修改") ]), vue.createElementVNode("view", { class: "tips" }, [ vue.createElementVNode("text", { class: "tips-text" }, "• 修改手机号后,新手机号将作为登录账号"), vue.createElementVNode("text", { class: "tips-text" }, "• 请确保新手机号可以正常接收短信") ]) ]); } const PagesMineSettingsSecurityChangePhone = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["render", _sfc_render$b], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/mine/settings/security/change-phone.vue"]]); const _sfc_main$b = { data() { return {}; }, methods: { navBack() { uni.navigateBack({ delta: 1 }); }, switchChange(type, e) { formatAppLog("log", "at pages/mine/settings/notification/index.vue:41", "switch change", type, e.detail.value); } } }; function _sfc_render$a(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createElementVNode("view", { class: "custom-header" }, [ vue.createElementVNode("view", { class: "header-left", onClick: _cache[0] || (_cache[0] = (...args) => $options.navBack && $options.navBack(...args)) }, [ vue.createElementVNode("image", { class: "back-icon", src: _imports_0, style: { "transform": "rotate(180deg)" } }) ]), vue.createElementVNode("text", { class: "header-title" }, "推送通知设置"), vue.createElementVNode("view", { class: "header-right" }) ]), vue.createElementVNode("view", { class: "header-placeholder" }), vue.createElementVNode("view", { class: "group-card" }, [ vue.createElementVNode("view", { class: "list-item" }, [ vue.createElementVNode("text", { class: "item-title" }, "系统消息通知"), vue.createElementVNode( "switch", { checked: "", color: "#FF5722", style: { "transform": "scale(0.8)" }, onChange: _cache[1] || (_cache[1] = ($event) => $options.switchChange("system", $event)) }, null, 32 /* NEED_HYDRATION */ ) ]), vue.createElementVNode("view", { class: "list-item no-border" }, [ vue.createElementVNode("text", { class: "item-title" }, "订单消息通知"), vue.createElementVNode( "switch", { checked: "", color: "#FF5722", style: { "transform": "scale(0.8)" }, onChange: _cache[2] || (_cache[2] = ($event) => $options.switchChange("order", $event)) }, null, 32 /* NEED_HYDRATION */ ) ]) ]), vue.createElementVNode("text", { class: "tips-text" }, "关闭通知后将收不到消息通知推送") ]); } const PagesMineSettingsNotificationIndex = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["render", _sfc_render$a], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/mine/settings/notification/index.vue"]]); const _sfc_main$a = { data() { return {}; }, methods: { navBack() { uni.navigateBack({ delta: 1 }); } } }; function _sfc_render$9(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createElementVNode("view", { class: "custom-header" }, [ vue.createElementVNode("view", { class: "header-left", onClick: _cache[0] || (_cache[0] = (...args) => $options.navBack && $options.navBack(...args)) }, [ vue.createElementVNode("image", { class: "back-icon", src: _imports_0, style: { "transform": "rotate(180deg)" } }) ]), vue.createElementVNode("text", { class: "header-title" }, "关于我们"), vue.createElementVNode("view", { class: "header-right" }) ]), vue.createElementVNode("view", { class: "header-placeholder" }), vue.createElementVNode("view", { class: "logo-area" }, [ vue.createElementVNode("image", { class: "app-logo", src: _imports_1$8, mode: "aspectFit" }), vue.createElementVNode("text", { class: "app-name" }, "履约者APP"), vue.createElementVNode("text", { class: "app-version" }, "Version 2.0.6") ]), vue.createElementVNode("view", { class: "group-card" }, [ vue.createElementVNode("view", { class: "list-item" }, [ vue.createElementVNode("text", { class: "item-title" }, "服务协议"), vue.createElementVNode("image", { class: "arrow-icon", src: _imports_3 }) ]), vue.createElementVNode("view", { class: "list-item" }, [ vue.createElementVNode("text", { class: "item-title" }, "隐私政策"), vue.createElementVNode("image", { class: "arrow-icon", src: _imports_3 }) ]), vue.createElementVNode("view", { class: "list-item no-border" }, [ vue.createElementVNode("text", { class: "item-title" }, "版本更新"), vue.createElementVNode("view", { class: "item-right" }, [ vue.createElementVNode("view", { class: "badge-yellow" }, "1"), vue.createElementVNode("image", { class: "arrow-icon", src: _imports_3 }) ]) ]) ]) ]); } const PagesMineSettingsAboutIndex = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["render", _sfc_render$9], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/mine/settings/about/index.vue"]]); const _imports_1$2 = "/static/icons/wallet_white.svg"; const _imports_2$2 = "/static/icons/arrow_right_gray.svg"; const _sfc_main$9 = { data() { return { currentTab: 0, list: [ { title: "订单服务费用", desc: "订单 T1002839 完成结算", time: "2026-02-03 14:30", amount: "20.00", type: "income", tag: "订单" }, { title: "奖励费用", desc: "早高峰冲单奖励", time: "2026-02-03 10:00", amount: "15.00", type: "income", tag: "奖励" }, { title: "惩罚金额", desc: "超时送达扣款", time: "2026-02-02 18:20", amount: "-10.00", type: "expense", tag: "惩罚" }, { title: "后台转账", desc: "2026年1月工资发放", time: "2026-02-01 09:00", amount: "3500.00", type: "income", tag: "工资" } ] }; }, computed: { displayList() { if (this.currentTab === 0) return this.list; if (this.currentTab === 1) return this.list.filter((item) => item.type === "income"); if (this.currentTab === 2) return this.list.filter((item) => item.type === "expense"); return []; } }, methods: { navBack() { uni.navigateBack(); }, navToBill() { uni.navigateTo({ url: "/pages/mine/wallet/bill" }); }, switchTab(index) { this.currentTab = index; } } }; function _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createElementVNode("view", { class: "nav-bar" }, [ vue.createElementVNode("view", { class: "nav-left", onClick: _cache[0] || (_cache[0] = (...args) => $options.navBack && $options.navBack(...args)) }, [ vue.createElementVNode("image", { class: "back-icon", src: _imports_0 }) ]), vue.createElementVNode("text", { class: "nav-title" }, "我的钱包"), vue.createElementVNode("view", { class: "nav-right" }) ]), vue.createElementVNode("view", { class: "wallet-card" }, [ vue.createElementVNode("view", { class: "bg-circle big" }), vue.createElementVNode("view", { class: "bg-circle small" }), vue.createElementVNode("view", { class: "card-content" }, [ vue.createElementVNode("view", { class: "card-top" }, [ vue.createElementVNode("view", { class: "app-info" }, [ vue.createElementVNode("image", { class: "app-logo", src: _imports_1$2, mode: "aspectFit" }), vue.createElementVNode("text", { class: "app-name" }, "履约者APP") ]), vue.createElementVNode("view", { class: "bill-btn", onClick: _cache[1] || (_cache[1] = (...args) => $options.navToBill && $options.navToBill(...args)) }, [ vue.createElementVNode("text", null, "账单") ]) ]), vue.createElementVNode("view", { class: "balance-container" }, [ vue.createElementVNode("view", { class: "balance-main" }, [ vue.createElementVNode("text", { class: "balance-label" }, "账户余额 (元)"), vue.createElementVNode("text", { class: "balance-num" }, "2575.00") ]), vue.createElementVNode("view", { class: "balance-pending" }, [ vue.createElementVNode("text", { class: "pending-label" }, "待入账 (元)"), vue.createElementVNode("text", { class: "pending-num" }, "580.00") ]) ]) ]) ]), vue.createElementVNode("view", { class: "record-container" }, [ vue.createElementVNode("view", { class: "record-header" }, [ vue.createElementVNode("text", { class: "header-title" }, "最近账户余额变动记录"), vue.createElementVNode("view", { class: "header-more", onClick: _cache[2] || (_cache[2] = (...args) => $options.navToBill && $options.navToBill(...args)) }, [ vue.createElementVNode("text", null, "查看全部"), vue.createElementVNode("image", { class: "more-icon", src: _imports_2$2 }) ]) ]), vue.createElementVNode("view", { class: "tabs-row" }, [ vue.createElementVNode( "view", { class: vue.normalizeClass(["tab-item", { active: $data.currentTab === 0 }]), onClick: _cache[3] || (_cache[3] = ($event) => $options.switchTab(0)) }, [ vue.createElementVNode("text", null, "全部"), $data.currentTab === 0 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "tab-line" })) : vue.createCommentVNode("v-if", true) ], 2 /* CLASS */ ), vue.createElementVNode( "view", { class: vue.normalizeClass(["tab-item", { active: $data.currentTab === 1 }]), onClick: _cache[4] || (_cache[4] = ($event) => $options.switchTab(1)) }, [ vue.createElementVNode("text", null, "收入"), $data.currentTab === 1 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "tab-line" })) : vue.createCommentVNode("v-if", true) ], 2 /* CLASS */ ), vue.createElementVNode( "view", { class: vue.normalizeClass(["tab-item", { active: $data.currentTab === 2 }]), onClick: _cache[5] || (_cache[5] = ($event) => $options.switchTab(2)) }, [ vue.createElementVNode("text", null, "支出"), $data.currentTab === 2 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "tab-line" })) : vue.createCommentVNode("v-if", true) ], 2 /* CLASS */ ) ]), vue.createElementVNode("view", { class: "record-list" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($options.displayList, (item, index) => { return vue.openBlock(), vue.createElementBlock("view", { class: "list-item", key: index }, [ vue.createElementVNode("view", { class: "item-left" }, [ vue.createElementVNode( "text", { class: "item-title" }, vue.toDisplayString(item.title), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "item-desc" }, vue.toDisplayString(item.desc), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "item-time" }, vue.toDisplayString(item.time), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "item-right" }, [ vue.createElementVNode( "text", { class: vue.normalizeClass(["item-amount", { income: item.type === "income", expense: item.type === "expense" }]) }, vue.toDisplayString(item.type === "income" ? "+" : "") + vue.toDisplayString(item.amount), 3 /* TEXT, CLASS */ ), vue.createElementVNode("view", { class: "item-tag" }, [ vue.createElementVNode( "text", null, vue.toDisplayString(item.tag), 1 /* TEXT */ ) ]) ]) ]); }), 128 /* KEYED_FRAGMENT */ )) ]) ]) ]); } const PagesMineWalletIndex = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["render", _sfc_render$8], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/mine/wallet/index.vue"]]); const _sfc_main$8 = { data() { return { currentTab: 0, // 模拟数据结构 groups: [ { month: "2月 2026", income: "35.00", expense: "10.00", items: [ { title: "订单服务费用", desc: "订单完成", time: "02-03 14:30", amount: "20.00", type: "income", tag: "订单" }, { title: "奖励费用", desc: "早高峰奖励", // shortened to match ui better time: "02-03 10:00", amount: "15.00", type: "income", tag: "奖励" }, { title: "惩罚金额", desc: "超时送达", time: "02-02 18:20", amount: "-10.00", type: "expense", tag: "惩罚" } ] }, { month: "1月 2026", income: "3500.00", expense: "100.00", items: [ { title: "后台转账", desc: "1月工资发放", time: "01-31 09:00", amount: "3500.00", type: "income", tag: "工资" }, { title: "装备扣款", desc: "装备费用", time: "01-15 10:00", amount: "-100.00", type: "expense", tag: "扣款" } ] } ] }; }, computed: { displayGroups() { if (this.currentTab === 0) return this.groups; return this.groups.map((group) => { const filteredItems = group.items.filter((item) => { const type = this.currentTab === 1 ? "income" : "expense"; return item.type === type; }); return { ...group, items: filteredItems }; }).filter((group) => group.items.length > 0); } }, methods: { navBack() { uni.navigateBack(); }, switchTab(index) { this.currentTab = index; } } }; function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createElementVNode("view", { class: "nav-bar" }, [ vue.createElementVNode("view", { class: "nav-left", onClick: _cache[0] || (_cache[0] = (...args) => $options.navBack && $options.navBack(...args)) }, [ vue.createElementVNode("image", { class: "back-icon", src: _imports_0 }) ]), vue.createElementVNode("text", { class: "nav-title" }, "账单明细"), vue.createElementVNode("view", { class: "nav-right" }) ]), vue.createElementVNode("view", { class: "content-area" }, [ vue.createElementVNode("view", { class: "tabs-row" }, [ vue.createElementVNode( "view", { class: vue.normalizeClass(["tab-item", { active: $data.currentTab === 0 }]), onClick: _cache[1] || (_cache[1] = ($event) => $options.switchTab(0)) }, [ vue.createElementVNode("text", null, "全部"), $data.currentTab === 0 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "tab-line" })) : vue.createCommentVNode("v-if", true) ], 2 /* CLASS */ ), vue.createElementVNode( "view", { class: vue.normalizeClass(["tab-item", { active: $data.currentTab === 1 }]), onClick: _cache[2] || (_cache[2] = ($event) => $options.switchTab(1)) }, [ vue.createElementVNode("text", null, "收入"), $data.currentTab === 1 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "tab-line" })) : vue.createCommentVNode("v-if", true) ], 2 /* CLASS */ ), vue.createElementVNode( "view", { class: vue.normalizeClass(["tab-item", { active: $data.currentTab === 2 }]), onClick: _cache[3] || (_cache[3] = ($event) => $options.switchTab(2)) }, [ vue.createElementVNode("text", null, "支出"), $data.currentTab === 2 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "tab-line" })) : vue.createCommentVNode("v-if", true) ], 2 /* CLASS */ ) ]), vue.createElementVNode("scroll-view", { "scroll-y": "", class: "bill-list" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($options.displayGroups, (group, gIndex) => { return vue.openBlock(), vue.createElementBlock("view", { key: gIndex, class: "month-group" }, [ vue.createElementVNode("view", { class: "group-header" }, [ vue.createElementVNode( "text", { class: "month-title" }, vue.toDisplayString(group.month), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "month-summary" }, "收入 ¥" + vue.toDisplayString(group.income) + " 支出 ¥" + vue.toDisplayString(group.expense), 1 /* TEXT */ ) ]), (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(group.items, (item, index) => { return vue.openBlock(), vue.createElementBlock("view", { class: "list-item", key: index }, [ vue.createElementVNode( "view", { class: vue.normalizeClass(["item-icon-box", item.type]) }, [ vue.createElementVNode( "text", { class: "item-icon-symbol" }, vue.toDisplayString(item.type === "income" ? "+" : "-"), 1 /* TEXT */ ) ], 2 /* CLASS */ ), vue.createElementVNode("view", { class: "item-center" }, [ vue.createElementVNode( "text", { class: "item-title" }, vue.toDisplayString(item.title), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "item-desc" }, vue.toDisplayString(item.time) + " " + vue.toDisplayString(item.desc), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "item-right" }, [ vue.createElementVNode( "text", { class: vue.normalizeClass(["item-amount", { income: item.type === "income", expense: item.type === "expense" }]) }, vue.toDisplayString(item.type === "income" ? "+" : "") + vue.toDisplayString(item.amount), 3 /* TEXT, CLASS */ ), vue.createElementVNode("view", { class: "item-tag" }, [ vue.createElementVNode( "text", null, vue.toDisplayString(item.tag), 1 /* TEXT */ ) ]) ]) ]); }), 128 /* KEYED_FRAGMENT */ )) ]); }), 128 /* KEYED_FRAGMENT */ )), vue.createElementVNode("view", { class: "list-padding-bottom" }) ]) ]) ]); } const PagesMineWalletBill = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["render", _sfc_render$7], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/mine/wallet/bill.vue"]]); const _sfc_main$7 = { data() { return { currentIndex: 2, // 默认选中 L3 levels: [ { id: "L1", name: "青铜履约者", score: "需成长值 0", isCurrent: false, benefits: [ { name: "新手任务", desc: "完成新手任务可获得额外奖励", icon: "/static/icons/reward.svg" } ] }, { id: "L2", name: "白银履约者", score: "需成长值 200", isCurrent: false, benefits: [ { name: "新手任务", desc: "完成新手任务可获得额外奖励", icon: "/static/icons/reward.svg" }, { name: "优先派单", desc: "系统将优先为您派送附近的优质订单", icon: "" } ] }, { id: "L3", name: "黄金履约者", score: "需成长值 500", isCurrent: true, benefits: [ { name: "极速提现", desc: "提现申请 2 小时内极速到账,无需等待。", icon: "" }, { name: "晋升奖励", desc: "晋升等级可获得现金红包奖励。", icon: "/static/icons/reward.svg" }, { name: "优先派单", desc: "系统将优先为您派送附近的优质订单。", icon: "" } ] }, { id: "L4", name: "钻石履约者", score: "需成长值 2000", isCurrent: false, benefits: [ { name: "专属客服", desc: "享受 7x24 小时专属客服通道。", icon: "/static/icons/service.svg" }, { name: "生日礼包", desc: "生日当天获赠专属礼包。", icon: "/static/icons/reward.svg" }, { name: "装备免费换", desc: "每年可免费更换一套履约装备。", icon: "" }, { name: "医疗互助", desc: "享受平台提供的医疗互助保障。", icon: "" } ] } ], isPopupShow: false, currentBenefit: null }; }, computed: { currentLevel() { return this.levels[this.currentIndex]; } }, methods: { navBack() { uni.navigateBack({ delta: 1 }); }, swiperChange(e) { this.currentIndex = e.detail.current; }, changeLevel(index) { this.currentIndex = index; }, showBenefitDetail(benefit) { this.currentBenefit = benefit; this.isPopupShow = true; }, closePopup() { this.isPopupShow = false; } } }; function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createElementVNode("view", { class: "custom-header" }, [ vue.createElementVNode("view", { class: "header-left", onClick: _cache[0] || (_cache[0] = (...args) => $options.navBack && $options.navBack(...args)) }, [ vue.createElementVNode("image", { class: "back-icon", src: _imports_0, style: { "transform": "rotate(180deg)" } }) ]), vue.createElementVNode("text", { class: "header-title" }, "履约者等级权益"), vue.createElementVNode("view", { class: "header-right" }) ]), vue.createElementVNode("view", { class: "header-placeholder" }), vue.createElementVNode("view", { class: "swiper-container" }, [ vue.createElementVNode("swiper", { class: "level-swiper", "previous-margin": "80rpx", "next-margin": "80rpx", current: $data.currentIndex, onChange: _cache[1] || (_cache[1] = (...args) => $options.swiperChange && $options.swiperChange(...args)) }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($data.levels, (level, index) => { return vue.openBlock(), vue.createElementBlock("swiper-item", { key: index, onClick: ($event) => $options.changeLevel(index) }, [ vue.createElementVNode( "view", { class: vue.normalizeClass(["level-card", "level-card-" + (index + 1)]), style: vue.normalizeStyle({ transform: $data.currentIndex === index ? "scale(1)" : "scale(0.9)" }) }, [ vue.createElementVNode("view", { class: "card-content" }, [ vue.createElementVNode("view", { class: "card-header" }, [ vue.createElementVNode( "view", { class: "level-badge" }, vue.toDisplayString(level.id), 1 /* TEXT */ ), level.isCurrent ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "current-badge" }, "当前等级")) : vue.createCommentVNode("v-if", true) ]), vue.createElementVNode( "text", { class: "level-name" }, vue.toDisplayString(level.name), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "level-score" }, vue.toDisplayString(level.score), 1 /* TEXT */ ), vue.createElementVNode("image", { class: "crown-overlay", src: _imports_1$4, mode: "aspectFit" }) ]) ], 6 /* CLASS, STYLE */ ) ], 8, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ], 40, ["current"]), vue.createElementVNode("view", { class: "swiper-dots" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($data.levels, (item, index) => { return vue.openBlock(), vue.createElementBlock( "view", { class: vue.normalizeClass(["dot", { active: $data.currentIndex === index }]), key: index }, null, 2 /* CLASS */ ); }), 128 /* KEYED_FRAGMENT */ )) ]) ]), vue.createElementVNode("view", { class: "benefits-title-row" }, [ vue.createElementVNode( "text", { class: "benefits-title" }, vue.toDisplayString($options.currentLevel.id) + " 专属权益", 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "benefits-count" }, "(" + vue.toDisplayString($options.currentLevel.benefits.length) + ")", 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "benefits-grid" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($options.currentLevel.benefits, (benefit, index) => { return vue.openBlock(), vue.createElementBlock("view", { class: "benefit-item", key: index, onClick: ($event) => $options.showBenefitDetail(benefit) }, [ vue.createElementVNode("view", { class: "benefit-icon-wrapper" }, [ benefit.icon ? (vue.openBlock(), vue.createElementBlock("image", { key: 0, class: "benefit-icon", src: benefit.icon, mode: "aspectFit" }, null, 8, ["src"])) : (vue.openBlock(), vue.createElementBlock( "view", { key: 1, class: "benefit-icon-placeholder" }, vue.toDisplayString(benefit.name[0]), 1 /* TEXT */ )) ]), vue.createElementVNode( "text", { class: "benefit-name" }, vue.toDisplayString(benefit.name), 1 /* TEXT */ ) ], 8, ["onClick"]); }), 128 /* KEYED_FRAGMENT */ )) ]), vue.createElementVNode( "view", { class: vue.normalizeClass(["popup-mask", { "show": $data.isPopupShow }]), onClick: _cache[4] || (_cache[4] = (...args) => $options.closePopup && $options.closePopup(...args)), onTouchmove: _cache[5] || (_cache[5] = vue.withModifiers(() => { }, ["stop", "prevent"])) }, [ vue.createElementVNode("view", { class: "popup-modal", onClick: _cache[3] || (_cache[3] = vue.withModifiers(() => { }, ["stop"])) }, [ vue.createElementVNode("view", { class: "popup-icon-wrapper" }, [ $data.currentBenefit && $data.currentBenefit.icon ? (vue.openBlock(), vue.createElementBlock("image", { key: 0, class: "benefit-icon-large", src: $data.currentBenefit.icon, mode: "aspectFit" }, null, 8, ["src"])) : (vue.openBlock(), vue.createElementBlock( "view", { key: 1, class: "benefit-icon-placeholder-large" }, vue.toDisplayString($data.currentBenefit ? $data.currentBenefit.name[0] : ""), 1 /* TEXT */ )) ]), vue.createElementVNode( "text", { class: "popup-title" }, vue.toDisplayString($data.currentBenefit ? $data.currentBenefit.name : ""), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "popup-desc" }, vue.toDisplayString($data.currentBenefit ? $data.currentBenefit.desc : ""), 1 /* TEXT */ ), vue.createElementVNode("button", { class: "popup-btn", onClick: _cache[2] || (_cache[2] = (...args) => $options.closePopup && $options.closePopup(...args)) }, "我知道了") ]) ], 34 /* CLASS, NEED_HYDRATION */ ) ]); } const PagesMineLevelIndex = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["render", _sfc_render$6], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/mine/level/index.vue"]]); const _imports_1$1 = "/static/icons/icon_order_msg.svg"; const _imports_2$1 = "/static/icons/icon_system_msg.svg"; const _sfc_main$6 = { data() { return {}; }, methods: { navBack() { uni.navigateBack(); }, navToOrderMsg() { uni.navigateTo({ url: "/pages/mine/message/order" }); }, navToSystemMsg() { uni.navigateTo({ url: "/pages/mine/message/system" }); } } }; function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createElementVNode("view", { class: "nav-bar" }, [ vue.createElementVNode("view", { class: "nav-left", onClick: _cache[0] || (_cache[0] = (...args) => $options.navBack && $options.navBack(...args)) }, [ vue.createElementVNode("image", { class: "back-icon", src: _imports_0, style: { "transform": "rotate(180deg)" } }) ]), vue.createElementVNode("text", { class: "nav-title" }, "消息中心"), vue.createElementVNode("view", { class: "nav-right" }, [ vue.createElementVNode("view", { class: "more-dots" }, [ vue.createElementVNode("view", { class: "dot" }), vue.createElementVNode("view", { class: "dot" }), vue.createElementVNode("view", { class: "dot" }) ]) ]) ]), vue.createElementVNode("view", { class: "nav-placeholder" }), vue.createElementVNode("view", { class: "message-list" }, [ vue.createElementVNode("view", { class: "message-item", onClick: _cache[1] || (_cache[1] = (...args) => $options.navToOrderMsg && $options.navToOrderMsg(...args)) }, [ vue.createElementVNode("view", { class: "icon-wrapper" }, [ vue.createElementVNode("image", { class: "msg-icon", src: _imports_1$1 }), vue.createElementVNode("view", { class: "red-dot-badge" }) ]), vue.createElementVNode("view", { class: "content-wrapper" }, [ vue.createElementVNode("view", { class: "top-row" }, [ vue.createElementVNode("text", { class: "msg-title" }, "订单消息"), vue.createElementVNode("text", { class: "msg-time" }, "5分钟前") ]), vue.createElementVNode("text", { class: "msg-preview" }, "你收到一个站长手动派单的新订单") ]) ]), vue.createElementVNode("view", { class: "message-item", onClick: _cache[2] || (_cache[2] = (...args) => $options.navToSystemMsg && $options.navToSystemMsg(...args)) }, [ vue.createElementVNode("view", { class: "icon-wrapper" }, [ vue.createElementVNode("image", { class: "msg-icon", src: _imports_2$1 }) ]), vue.createElementVNode("view", { class: "content-wrapper" }, [ vue.createElementVNode("view", { class: "top-row" }, [ vue.createElementVNode("text", { class: "msg-title" }, "系统消息"), vue.createElementVNode("text", { class: "msg-time" }, "7天前") ]), vue.createElementVNode("text", { class: "msg-preview" }, "你的健康证明认证审核已通过。") ]) ]) ]) ]); } const PagesMineMessageIndex = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["render", _sfc_render$5], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/mine/message/index.vue"]]); const _sfc_main$5 = { methods: { navBack() { uni.navigateBack(); } } }; function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createElementVNode("view", { class: "nav-bar" }, [ vue.createElementVNode("view", { class: "nav-left", onClick: _cache[0] || (_cache[0] = (...args) => $options.navBack && $options.navBack(...args)) }, [ vue.createElementVNode("image", { class: "back-icon", src: _imports_0, style: { "transform": "rotate(180deg)" } }) ]), vue.createElementVNode("text", { class: "nav-title" }, "订单消息"), vue.createElementVNode("view", { class: "nav-right" }) ]), vue.createElementVNode("view", { class: "nav-placeholder" }), vue.createElementVNode("view", { class: "msg-group" }, [ vue.createElementVNode("view", { class: "date-label" }, "2099-12-28"), vue.createElementVNode("view", { class: "msg-card" }, [ vue.createElementVNode("view", { class: "card-header" }, [ vue.createElementVNode("text", { class: "card-title" }, "站长手动派单"), vue.createElementVNode("view", { class: "red-dot" }) ]), vue.createElementVNode("view", { class: "card-body" }, [ vue.createElementVNode("text", { class: "msg-text" }, "你收到一个新订单,请及时查看并接单。") ]), vue.createElementVNode("view", { class: "card-footer" }, [ vue.createElementVNode("text", { class: "order-id" }, "订单: 2099091503521"), vue.createElementVNode("image", { class: "arrow-icon", src: _imports_3 }) ]) ]), vue.createElementVNode("view", { class: "msg-card" }, [ vue.createElementVNode("view", { class: "card-header" }, [ vue.createElementVNode("text", { class: "card-title" }, "系统自动派单") ]), vue.createElementVNode("view", { class: "card-body" }, [ vue.createElementVNode("text", { class: "msg-text" }, "你收到一个新订单,请及时查看并接单。") ]), vue.createElementVNode("view", { class: "card-footer" }, [ vue.createElementVNode("text", { class: "order-id" }, "订单: 2099091503523"), vue.createElementVNode("image", { class: "arrow-icon", src: _imports_3 }) ]) ]) ]), vue.createElementVNode("view", { class: "msg-group" }, [ vue.createElementVNode("view", { class: "date-label" }, "2099-12-27"), vue.createElementVNode("view", { class: "msg-card" }, [ vue.createElementVNode("view", { class: "card-header" }, [ vue.createElementVNode("text", { class: "card-title" }, "系统取消派单") ]), vue.createElementVNode("view", { class: "card-body" }, [ vue.createElementVNode("text", { class: "msg-text" }, "订单由于超时未接单已被系统取消。") ]), vue.createElementVNode("view", { class: "card-footer" }, [ vue.createElementVNode("text", { class: "order-id" }, "订单: 2099091503111"), vue.createElementVNode("image", { class: "arrow-icon", src: _imports_3 }) ]) ]) ]) ]); } const PagesMineMessageOrder = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["render", _sfc_render$4], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/mine/message/order.vue"]]); const _sfc_main$4 = { methods: { navBack() { uni.navigateBack(); }, navToDetail() { uni.navigateTo({ url: "/pages/mine/message/detail" }); } } }; function _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createElementVNode("view", { class: "nav-bar" }, [ vue.createElementVNode("view", { class: "nav-left", onClick: _cache[0] || (_cache[0] = (...args) => $options.navBack && $options.navBack(...args)) }, [ vue.createElementVNode("image", { class: "back-icon", src: _imports_0, style: { "transform": "rotate(180deg)" } }) ]), vue.createElementVNode("text", { class: "nav-title" }, "系统消息"), vue.createElementVNode("view", { class: "nav-right" }) ]), vue.createElementVNode("view", { class: "nav-placeholder" }), vue.createElementVNode("view", { class: "sys-msg-list" }, [ vue.createElementVNode("view", { class: "date-label" }, "2023-11-01"), vue.createElementVNode("view", { class: "sys-card", onClick: _cache[1] || (_cache[1] = (...args) => $options.navToDetail && $options.navToDetail(...args)) }, [ vue.createElementVNode("view", { class: "sys-header" }, [ vue.createElementVNode("text", { class: "sys-title" }, "账号审核通过"), vue.createElementVNode("view", { class: "red-dot" }) ]), vue.createElementVNode("view", { class: "sys-content" }, [ vue.createElementVNode("text", { class: "sys-text" }, "恭喜,您的健康证已通过审核,现在可以开始接单了。") ]), vue.createElementVNode("view", { class: "sys-footer" }, [ vue.createElementVNode("text", { class: "sys-time" }, "10:00"), vue.createElementVNode("view", { class: "check-more" }, [ vue.createElementVNode("text", null, "查看详情"), vue.createElementVNode("image", { class: "arrow-icon-small", src: _imports_3 }) ]) ]) ]), vue.createElementVNode("view", { class: "sys-card" }, [ vue.createElementVNode("view", { class: "sys-header" }, [ vue.createElementVNode("text", { class: "sys-title" }, "活动奖励到账") ]), vue.createElementVNode("view", { class: "sys-content" }, [ vue.createElementVNode("text", { class: "sys-text" }, "您参与的“新手启航”活动奖励金 ¥50 已发放到您的账户。") ]), vue.createElementVNode("view", { class: "sys-footer" }, [ vue.createElementVNode("text", { class: "sys-time" }, "09:15"), vue.createElementVNode("view", { class: "check-more" }, [ vue.createElementVNode("text", null, "查看详情"), vue.createElementVNode("image", { class: "arrow-icon-small", src: _imports_3 }) ]) ]) ]), vue.createElementVNode("view", { class: "date-label" }, "2023-10-30"), vue.createElementVNode("view", { class: "sys-card" }, [ vue.createElementVNode("view", { class: "sys-header" }, [ vue.createElementVNode("text", { class: "sys-title" }, "系统维护通知") ]), vue.createElementVNode("view", { class: "sys-content" }, [ vue.createElementVNode("text", { class: "sys-text" }, "平台将于 11月5日 凌晨 02:00-04:00 进行系统维护,届时将无法接单。") ]), vue.createElementVNode("view", { class: "sys-footer" }, [ vue.createElementVNode("text", { class: "sys-time" }, "18:30"), vue.createElementVNode("view", { class: "check-more" }, [ vue.createElementVNode("text", null, "查看详情"), vue.createElementVNode("image", { class: "arrow-icon-small", src: _imports_3 }) ]) ]) ]) ]) ]); } const PagesMineMessageSystem = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["render", _sfc_render$3], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/mine/message/system.vue"]]); const _sfc_main$3 = { methods: { navBack() { uni.navigateBack(); } } }; function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createElementVNode("view", { class: "nav-bar" }, [ vue.createElementVNode("view", { class: "nav-left", onClick: _cache[0] || (_cache[0] = (...args) => $options.navBack && $options.navBack(...args)) }, [ vue.createElementVNode("image", { class: "back-icon", src: _imports_0, style: { "transform": "rotate(180deg)" } }) ]), vue.createElementVNode("text", { class: "nav-title" }, "消息详情"), vue.createElementVNode("view", { class: "nav-right" }) ]), vue.createElementVNode("view", { class: "nav-placeholder" }), vue.createElementVNode("view", { class: "detail-content" }, [ vue.createElementVNode("text", { class: "detail-title" }, "账号审核通过"), vue.createElementVNode("text", { class: "detail-time" }, "2023-11-01 10:00"), vue.createElementVNode("view", { class: "detail-body" }, [ vue.createElementVNode("text", null, "尊敬的用户,您的健康认证资料已通过平台审核。作为履约者,您现在可以正常接收并处理订单。请确保您熟读平台规则,遵守交通法规,安全配送。祝您工作愉快!") ]), vue.createElementVNode("view", { class: "detail-footer" }, [ vue.createElementVNode("view", { class: "divider" }), vue.createElementVNode("text", { class: "footer-text" }, "如有疑问,请咨询在线客服。") ]) ]) ]); } const PagesMineMessageDetail = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["render", _sfc_render$2], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/mine/message/detail.vue"]]); const _imports_1 = "/static/icons/diamond_white.svg"; const _imports_2 = "/static/icons/star_decor.svg"; const _sfc_main$2 = { data() { return { currentTab: 0, list: [ { title: "订单完成奖励", desc: "订单 T1002839 完成", time: "2026-02-05 18:42", amount: "10", type: "income", tag: "订单" }, { title: "好评奖励", desc: "获得五星好评", time: "2026-02-05 19:00", amount: "5", type: "income", tag: "奖励" }, { title: "超时扣分", desc: "订单 T1002830 超时送达", time: "2026-02-04 10:20", amount: "-10", type: "expense", tag: "惩罚" } ] }; }, computed: { displayList() { if (this.currentTab === 0) return this.list; const type = this.currentTab === 1 ? "income" : "expense"; return this.list.filter((item) => item.type === type); } }, methods: { navBack() { uni.navigateBack(); }, navToDetail() { uni.navigateTo({ url: "/pages/mine/points/detail" }); }, navToEquity() { }, switchTab(index) { this.currentTab = index; } } }; function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createElementVNode("view", { class: "nav-bar" }, [ vue.createElementVNode("view", { class: "nav-left", onClick: _cache[0] || (_cache[0] = (...args) => $options.navBack && $options.navBack(...args)) }, [ vue.createElementVNode("image", { class: "back-icon", src: _imports_0 }) ]), vue.createElementVNode("text", { class: "nav-title" }, "我的积分"), vue.createElementVNode("view", { class: "nav-right" }) ]), vue.createElementVNode("view", { class: "points-card" }, [ vue.createElementVNode("view", { class: "card-header" }, [ vue.createElementVNode("view", { class: "equity-btn", onClick: _cache[1] || (_cache[1] = (...args) => $options.navToEquity && $options.navToEquity(...args)) }, [ vue.createElementVNode("image", { class: "equity-icon", src: _imports_1 }), vue.createElementVNode("text", null, "积分权益") ]), vue.createElementVNode("view", { class: "detail-link", onClick: _cache[2] || (_cache[2] = (...args) => $options.navToDetail && $options.navToDetail(...args)) }, [ vue.createElementVNode("text", null, "明细") ]) ]), vue.createElementVNode("view", { class: "card-body" }, [ vue.createElementVNode("text", { class: "label" }, "当前积分"), vue.createElementVNode("text", { class: "value" }, "1200") ]), vue.createElementVNode("image", { class: "bg-decor", src: _imports_2, mode: "aspectFit" }) ]), vue.createElementVNode("view", { class: "record-container" }, [ vue.createElementVNode("view", { class: "record-header" }, [ vue.createElementVNode("text", { class: "header-title" }, "最近积分变动"), vue.createElementVNode("view", { class: "header-more", onClick: _cache[3] || (_cache[3] = (...args) => $options.navToDetail && $options.navToDetail(...args)) }, [ vue.createElementVNode("text", null, "查看全部"), vue.createElementVNode("image", { class: "more-icon", src: _imports_3 }) ]) ]), vue.createElementVNode("view", { class: "tabs-row" }, [ vue.createElementVNode( "view", { class: vue.normalizeClass(["tab-item", { active: $data.currentTab === 0 }]), onClick: _cache[4] || (_cache[4] = ($event) => $options.switchTab(0)) }, [ vue.createElementVNode("text", null, "全部"), $data.currentTab === 0 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "tab-line" })) : vue.createCommentVNode("v-if", true) ], 2 /* CLASS */ ), vue.createElementVNode( "view", { class: vue.normalizeClass(["tab-item", { active: $data.currentTab === 1 }]), onClick: _cache[5] || (_cache[5] = ($event) => $options.switchTab(1)) }, [ vue.createElementVNode("text", null, "获取"), $data.currentTab === 1 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "tab-line" })) : vue.createCommentVNode("v-if", true) ], 2 /* CLASS */ ), vue.createElementVNode( "view", { class: vue.normalizeClass(["tab-item", { active: $data.currentTab === 2 }]), onClick: _cache[6] || (_cache[6] = ($event) => $options.switchTab(2)) }, [ vue.createElementVNode("text", null, "扣减"), $data.currentTab === 2 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "tab-line" })) : vue.createCommentVNode("v-if", true) ], 2 /* CLASS */ ) ]), vue.createElementVNode("view", { class: "record-list" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($options.displayList, (item, index) => { return vue.openBlock(), vue.createElementBlock("view", { class: "list-item", key: index }, [ vue.createElementVNode("view", { class: "item-left" }, [ vue.createElementVNode( "text", { class: "item-title" }, vue.toDisplayString(item.title), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "item-desc" }, vue.toDisplayString(item.desc), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "item-time" }, vue.toDisplayString(item.time), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "item-right" }, [ vue.createElementVNode( "text", { class: vue.normalizeClass(["item-amount", { income: item.type === "income", expense: item.type === "expense" }]) }, vue.toDisplayString(item.type === "income" ? "+" : "") + vue.toDisplayString(item.amount), 3 /* TEXT, CLASS */ ), vue.createElementVNode("view", { class: "item-tag" }, [ vue.createElementVNode( "text", null, vue.toDisplayString(item.tag), 1 /* TEXT */ ) ]) ]) ]); }), 128 /* KEYED_FRAGMENT */ )) ]) ]) ]); } const PagesMinePointsIndex = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render$1], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/mine/points/index.vue"]]); const _sfc_main$1 = { data() { return { currentTab: 0, // 模拟数据结构 groups: [ { month: "2月 2026", income: "15", expense: "10", items: [ { title: "订单完成奖励", desc: "订单完成", time: "02-05 18:42", amount: "10", type: "income", tag: "订单" }, { title: "好评奖励", desc: "五星好评", time: "02-05 19:00", amount: "5", type: "income", tag: "奖励" }, { title: "超时扣分", desc: "订单超时", time: "02-04 10:20", amount: "-10", type: "expense", tag: "惩罚" } ] }, { month: "1月 2026", income: "100", expense: "0", items: [ { title: "新用户奖励", desc: "注册赠送", time: "01-10 09:00", amount: "100", type: "income", tag: "系统" } ] } ] }; }, computed: { displayGroups() { if (this.currentTab === 0) return this.groups; return this.groups.map((group) => { const filteredItems = group.items.filter((item) => { const type = this.currentTab === 1 ? "income" : "expense"; return item.type === type; }); return { ...group, items: filteredItems }; }).filter((group) => group.items.length > 0); } }, methods: { navBack() { uni.navigateBack(); }, switchTab(index) { this.currentTab = index; } } }; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [ vue.createElementVNode("view", { class: "nav-bar" }, [ vue.createElementVNode("view", { class: "nav-left", onClick: _cache[0] || (_cache[0] = (...args) => $options.navBack && $options.navBack(...args)) }, [ vue.createElementVNode("image", { class: "back-icon", src: _imports_0 }) ]), vue.createElementVNode("text", { class: "nav-title" }, "积分明细"), vue.createElementVNode("view", { class: "nav-right" }) ]), vue.createElementVNode("view", { class: "content-area" }, [ vue.createElementVNode("view", { class: "tabs-row" }, [ vue.createElementVNode( "view", { class: vue.normalizeClass(["tab-item", { active: $data.currentTab === 0 }]), onClick: _cache[1] || (_cache[1] = ($event) => $options.switchTab(0)) }, [ vue.createElementVNode("text", null, "全部"), $data.currentTab === 0 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "tab-line" })) : vue.createCommentVNode("v-if", true) ], 2 /* CLASS */ ), vue.createElementVNode( "view", { class: vue.normalizeClass(["tab-item", { active: $data.currentTab === 1 }]), onClick: _cache[2] || (_cache[2] = ($event) => $options.switchTab(1)) }, [ vue.createElementVNode("text", null, "获取"), $data.currentTab === 1 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "tab-line" })) : vue.createCommentVNode("v-if", true) ], 2 /* CLASS */ ), vue.createElementVNode( "view", { class: vue.normalizeClass(["tab-item", { active: $data.currentTab === 2 }]), onClick: _cache[3] || (_cache[3] = ($event) => $options.switchTab(2)) }, [ vue.createElementVNode("text", null, "扣减"), $data.currentTab === 2 ? (vue.openBlock(), vue.createElementBlock("view", { key: 0, class: "tab-line" })) : vue.createCommentVNode("v-if", true) ], 2 /* CLASS */ ) ]), vue.createElementVNode("scroll-view", { "scroll-y": "", class: "bill-list" }, [ (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList($options.displayGroups, (group, gIndex) => { return vue.openBlock(), vue.createElementBlock("view", { key: gIndex, class: "month-group" }, [ vue.createElementVNode("view", { class: "group-header" }, [ vue.createElementVNode( "text", { class: "month-title" }, vue.toDisplayString(group.month), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "month-summary" }, "获取 " + vue.toDisplayString(group.income) + " 扣减 " + vue.toDisplayString(group.expense), 1 /* TEXT */ ) ]), (vue.openBlock(true), vue.createElementBlock( vue.Fragment, null, vue.renderList(group.items, (item, index) => { return vue.openBlock(), vue.createElementBlock("view", { class: "list-item", key: index }, [ vue.createElementVNode( "view", { class: vue.normalizeClass(["item-icon-box", item.type]) }, [ vue.createElementVNode( "text", { class: "item-icon-symbol" }, vue.toDisplayString(item.type === "income" ? "+" : "-"), 1 /* TEXT */ ) ], 2 /* CLASS */ ), vue.createElementVNode("view", { class: "item-center" }, [ vue.createElementVNode( "text", { class: "item-title" }, vue.toDisplayString(item.title), 1 /* TEXT */ ), vue.createElementVNode( "text", { class: "item-desc" }, vue.toDisplayString(item.time) + " " + vue.toDisplayString(item.desc), 1 /* TEXT */ ) ]), vue.createElementVNode("view", { class: "item-right" }, [ vue.createElementVNode( "text", { class: vue.normalizeClass(["item-amount", { income: item.type === "income", expense: item.type === "expense" }]) }, vue.toDisplayString(item.type === "income" ? "+" : "") + vue.toDisplayString(item.amount), 3 /* TEXT, CLASS */ ), vue.createElementVNode("view", { class: "item-tag" }, [ vue.createElementVNode( "text", null, vue.toDisplayString(item.tag), 1 /* TEXT */ ) ]) ]) ]); }), 128 /* KEYED_FRAGMENT */ )) ]); }), 128 /* KEYED_FRAGMENT */ )), vue.createElementVNode("view", { class: "list-padding-bottom" }) ]) ]) ]); } const PagesMinePointsDetail = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render], ["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/pages/mine/points/detail.vue"]]); __definePage("pages/login/login", PagesLoginLogin); __definePage("pages/recruit/landing", PagesRecruitLanding); __definePage("pages/recruit/form", PagesRecruitForm); __definePage("pages/recruit/auth", PagesRecruitAuth); __definePage("pages/recruit/qualifications", PagesRecruitQualifications); __definePage("pages/recruit/success", PagesRecruitSuccess); __definePage("pages/login/reset-pwd-verify", PagesLoginResetPwdVerify); __definePage("pages/login/reset-pwd-set", PagesLoginResetPwdSet); __definePage("pages/home/index", PagesHomeIndex); __definePage("pages/home/work-status", PagesHomeWorkStatus); __definePage("pages/orders/index", PagesOrdersIndex); __definePage("pages/orders/detail", PagesOrdersDetail); __definePage("pages/orders/anomaly", PagesOrdersAnomaly); __definePage("pages/mine/order-stats", PagesMineOrderStats); __definePage("pages/mine/rewards", PagesMineRewards); __definePage("pages/mine/rewards-all", PagesMineRewardsAll); __definePage("pages/mine/index", PagesMineIndex); __definePage("pages/mine/settings/index", PagesMineSettingsIndex); __definePage("pages/mine/settings/profile/index", PagesMineSettingsProfileIndex); __definePage("pages/mine/settings/auth/index", PagesMineSettingsAuthIndex); __definePage("pages/mine/settings/auth/edit", PagesMineSettingsAuthEdit); __definePage("pages/mine/settings/bank/index", PagesMineSettingsBankIndex); __definePage("pages/mine/settings/security/index", PagesMineSettingsSecurityIndex); __definePage("pages/mine/settings/profile/edit-name", PagesMineSettingsProfileEditName); __definePage("pages/mine/settings/security/change-password", PagesMineSettingsSecurityChangePassword); __definePage("pages/mine/settings/security/change-phone", PagesMineSettingsSecurityChangePhone); __definePage("pages/mine/settings/notification/index", PagesMineSettingsNotificationIndex); __definePage("pages/mine/settings/about/index", PagesMineSettingsAboutIndex); __definePage("pages/mine/wallet/index", PagesMineWalletIndex); __definePage("pages/mine/wallet/bill", PagesMineWalletBill); __definePage("pages/mine/level/index", PagesMineLevelIndex); __definePage("pages/mine/message/index", PagesMineMessageIndex); __definePage("pages/mine/message/order", PagesMineMessageOrder); __definePage("pages/mine/message/system", PagesMineMessageSystem); __definePage("pages/mine/message/detail", PagesMineMessageDetail); __definePage("pages/mine/points/index", PagesMinePointsIndex); __definePage("pages/mine/points/detail", PagesMinePointsDetail); const _sfc_main = { onLaunch: function() { formatAppLog("log", "at App.vue:4", "App Launch"); }, onShow: function() { formatAppLog("log", "at App.vue:7", "App Show"); }, onHide: function() { formatAppLog("log", "at App.vue:10", "App Hide"); } }; const App = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "E:/CodeProjects/Cursor/pet-system-fulfiller-app/App.vue"]]); function createApp() { const app = vue.createVueApp(App); return { app }; } const { app: __app__, Vuex: __Vuex__, Pinia: __Pinia__ } = createApp(); uni.Vuex = __Vuex__; uni.Pinia = __Pinia__; __app__.provide("__globalStyles", __uniConfig.styles); __app__._component.mpType = "app"; __app__._component.render = () => { }; __app__.mount("#app"); })(Vue);