chore: remove dist from git tracking, add dist/ to .gitignore

This commit is contained in:
MaDaLei 2026-04-13 18:58:45 +08:00
parent a332e6204b
commit 06d2e48741
191 changed files with 1 additions and 12421 deletions

1
.gitignore vendored
View File

@ -1,2 +1,3 @@
node_modules/ node_modules/
node_modules node_modules
dist/

BIN
dist/.DS_Store vendored

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
import{S as a,R as t,U as e}from"./ReportView-BiTrIIba.js";const p=a(t);p.use(e);p.mount("#app");

View File

@ -1 +0,0 @@
.app-icon[data-v-385dda18]{display:inline-flex;align-items:center;justify-content:center}.app-icon svg[data-v-385dda18]{width:100%;height:100%}

View File

@ -1 +0,0 @@
import{q as e,g as C,z as s,w as o,c as M,F as r,y as t,v as a,f as n}from"./index-DrZc8biM.js";import{_ as p}from"./_plugin-vue_export-helper.2L545UbL.js";const H=p({__name:"AppIcon",props:{name:{type:String,required:!0},size:{type:Number,default:18},color:{type:String,default:"#475569"}},setup(p){const H=p,i={home:["M3 10.5L12 3L21 10.5","M6 9.5V20H18V9.5","M10 20V14H14V20"],report:["M7 3.5H14L18 7.5V20.5H7V3.5Z","M14 3.5V7.5H18","M9.5 12H15.5","M9.5 16H14"],mine:["M12 12C14.4853 12 16.5 9.98528 16.5 7.5C16.5 5.01472 14.4853 3 12 3C9.51472 3 7.5 5.01472 7.5 7.5C7.5 9.98528 9.51472 12 12 12Z","M4 20C4.9 16.7 8 14.5 12 14.5C16 14.5 19.1 16.7 20 20"],staff:["M7 11C8.65685 11 10 9.65685 10 8C10 6.34315 8.65685 5 7 5C5.34315 5 4 6.34315 4 8C4 9.65685 5.34315 11 7 11Z","M17 10C18.3807 10 19.5 8.88071 19.5 7.5C19.5 6.11929 18.3807 5 17 5C15.6193 5 14.5 6.11929 14.5 7.5C14.5 8.88071 15.6193 10 17 10Z","M3.5 19C4.1 16.7 5.9 15.2 8.4 15.2C10.9 15.2 12.7 16.7 13.3 19","M14 19C14.4 17.3 15.6 16.2 17.3 16.2C19 16.2 20.2 17.3 20.6 19"],service:["M5 8.5H19","M7.5 8.5V6.5C7.5 5.4 8.4 4.5 9.5 4.5H14.5C15.6 4.5 16.5 5.4 16.5 6.5V8.5","M6.5 8.5L7.2 18.5H16.8L17.5 8.5","M10 12.5L14 12.5"],store:["M4 9L5.5 4.5H18.5L20 9","M5 9V19H19V9","M8.5 19V14H15.5V19"],profile:["M12 12C14.4853 12 16.5 9.98528 16.5 7.5C16.5 5.01472 14.4853 3 12 3C9.51472 3 7.5 5.01472 7.5 7.5C7.5 9.98528 9.51472 12 12 12Z","M4.5 20C5.5 16.9 8.4 14.8 12 14.8C15.6 14.8 18.5 16.9 19.5 20"],orders:["M6 5H18","M6 9H18","M6 13H14","M6 3.5H18C18.8 3.5 19.5 4.2 19.5 5V19C19.5 19.8 18.8 20.5 18 20.5H6C5.2 20.5 4.5 19.8 4.5 19V5C4.5 4.2 5.2 3.5 6 3.5Z"],logout:["M10 6V4.5H5V19.5H10V18","M14 8L18 12L14 16","M18 12H9"],back:["M15 5L8 12L15 19"],close:["M6 6L18 18","M18 6L6 18"],camera:["M4.5 8.5H8L9.5 6.5H14.5L16 8.5H19.5V18.5H4.5V8.5Z","M12 16C13.933 16 15.5 14.433 15.5 12.5C15.5 10.567 13.933 9 12 9C10.067 9 8.5 10.567 8.5 12.5C8.5 14.433 10.067 16 12 16"],phone:["M2.25 6.75C2.25 15.03 8.97 21.75 17.25 21.75H19.5C20.7426 21.75 21.75 20.7426 21.75 19.5V19.128C21.75 18.612 21.399 18.162 20.898 18.03L16.475 16.924C16.035 16.814 15.573 16.979 15.303 17.354L14.333 18.647C14.051 19.047 13.53 19.188 13.098 19.035C10.834 18.208 8.792 16.166 7.965 13.902C7.812 13.47 7.953 12.949 8.353 12.667L9.646 11.697C10.021 11.427 10.186 10.965 10.076 10.525L8.97 6.102C8.838 5.601 8.388 5.25 7.872 5.25H4.5C3.25736 5.25 2.25 6.25736 2.25 7.5V6.75Z"],pin:["M15 10.5a3 3 0 11-6 0 3 3 0 016 0z","M19.5 10.5c0 7.142-7.5 11.25-7.5 11.25S4.5 17.642 4.5 10.5a7.5 7.5 0 1115 0z"]},l=e(()=>i[H.name]||i.profile);return(e,H)=>{const i=n;return C(),s(i,{class:"app-icon",style:a({width:`${p.size}px`,height:`${p.size}px`})},{default:o(()=>[(C(),M("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[(C(!0),M(r,null,t(l.value,(e,s)=>(C(),M("path",{key:`${p.name}-${s}`,d:e,stroke:p.color,"stroke-width":"1.9","stroke-linecap":"round","stroke-linejoin":"round"},null,8,["d","stroke"]))),128))]))]),_:1},8,["style"])}}},[["__scopeId","data-v-385dda18"]]);export{H as A};

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
.login-page[data-v-1ba576fe]{min-height:100vh;background:radial-gradient(circle at top left,#22c55e,#16a34a 46%,#15803d);display:flex;flex-direction:column;padding:60px 32px 32px}.login-logo[data-v-1ba576fe]{text-align:center;margin-bottom:44px}.login-logo-text[data-v-1ba576fe]{font-size:30px;font-weight:800;color:#fff;letter-spacing:2px;text-shadow:0 4px 12px rgba(0,0,0,.18)}.login-logo-sub[data-v-1ba576fe]{font-size:13px;color:rgba(255,255,255,.82);margin-top:6px}.form-title[data-v-1ba576fe]{font-size:18px;font-weight:600;color:#333;margin-bottom:20px;text-align:center}.login-divider[data-v-1ba576fe]{text-align:center;margin:16px 0 12px;color:#999;font-size:13px;position:relative}.login-divider[data-v-1ba576fe]:before,.login-divider[data-v-1ba576fe]:after{content:"";position:absolute;top:50%;width:28%;height:1px;background:#eee}.login-divider[data-v-1ba576fe]:before{left:0}.login-divider[data-v-1ba576fe]:after{right:0}.links[data-v-1ba576fe]{display:flex;justify-content:space-between;font-size:13px}.link[data-v-1ba576fe]{color:#16a34a;font-weight:600;cursor:pointer}.invite-hint[data-v-1ba576fe]{background:#f0f9f4;border:1px solid #b7eb8f;border-radius:8px;padding:12px;font-size:13px;color:#52c41a;margin-bottom:12px}.wechat-icon[data-v-1ba576fe]{margin-right:6px}.success-icon[data-v-1ba576fe]{font-size:60px;text-align:center;margin-bottom:16px}.success-title[data-v-1ba576fe]{font-size:20px;font-weight:600;text-align:center;color:#333;margin-bottom:8px}.success-sub[data-v-1ba576fe]{font-size:14px;color:#999;text-align:center;margin-bottom:24px}.success-info[data-v-1ba576fe]{background:#f9f9f9;border-radius:12px;padding:16px;margin-bottom:20px}.info-row[data-v-1ba576fe]{display:flex;justify-content:space-between;padding:6px 0;font-size:14px}.info-row .label[data-v-1ba576fe]{color:#999}.info-row .value[data-v-1ba576fe]{color:#333;font-weight:500}.sms-field[data-v-1ba576fe]{display:flex;align-items:center;gap:8px;margin-bottom:12px}.sms-input[data-v-1ba576fe]{flex:1}.top-gap-sm[data-v-1ba576fe]{margin-top:12px}.top-gap-md[data-v-1ba576fe]{margin-top:20px}

View File

@ -1 +0,0 @@
.mine-page[data-v-27768e55]{padding-bottom:4.375rem;background:#f5f7fb;min-height:100vh}.user-card[data-v-27768e55]{background:linear-gradient(135deg,#22c55e,#16a34a);border-radius:0 0 24px 24px;padding:24px 16px 22px;color:#fff;cursor:pointer;box-shadow:0 10px 24px rgba(34,197,94,.25)}.user-info[data-v-27768e55]{display:flex;align-items:center;gap:12px}.user-info-content[data-v-27768e55]{flex:1}.user-avatar[data-v-27768e55]{width:58px;height:58px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:24px;overflow:hidden;flex-shrink:0;border:2px solid rgba(255,255,255,.3)}.avatar-img[data-v-27768e55]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.avatar-initials[data-v-27768e55]{color:#fff;font-size:22px;font-weight:700}.user-name[data-v-27768e55]{font-size:21px;font-weight:700;color:#fff;line-height:1.1}.user-phone[data-v-27768e55]{font-size:14px;opacity:.92;margin-top:4px}.role-pill[data-v-27768e55]{margin-top:8px;display:inline-flex;align-items:center;height:24px;padding:0 10px;border-radius:999px;font-size:12px;font-weight:700;background:rgba(255,255,255,.92);color:#166534}.menu-section[data-v-27768e55]{padding:0 14px;margin-top:12px}.menu-card[data-v-27768e55]{background:#fff;border:1px solid #e6ecf4;border-radius:16px;box-shadow:0 8px 20px rgba(15,23,42,.05);overflow:hidden}.menu-title[data-v-27768e55]{font-size:12px;color:#94a3b8;font-weight:700;padding:12px 14px 8px}.menu-item[data-v-27768e55]{min-height:54px;padding:0 14px;display:flex;align-items:center;justify-content:space-between}.menu-item+.menu-item[data-v-27768e55]{border-top:1px solid #eef2f7}.menu-left[data-v-27768e55]{display:flex;align-items:center;gap:10px}.menu-icon[data-v-27768e55]{width:28px;height:28px;border-radius:8px;background:#f1f5f9;display:inline-flex;align-items:center;justify-content:center;font-size:16px}.menu-text[data-v-27768e55]{font-size:16px;color:#1f2937;font-weight:600}.menu-arrow[data-v-27768e55]{color:#c4cfdd;font-size:18px}.logout-btn[data-v-27768e55]{width:100%;height:44px;display:inline-flex;align-items:center;justify-content:center;gap:6px;border-radius:12px;border:1px solid #fecaca;background:#fff1f2;color:#dc2626;font-size:15px;font-weight:700}

View File

@ -1 +0,0 @@
.orders-page[data-v-be66263e]{padding-bottom:3.75rem}.nav-placeholder[data-v-be66263e]{width:32px}.btn-mt[data-v-be66263e]{margin-top:10px}.orders-hero[data-v-be66263e]{margin-top:12px;padding:14px 16px;border:1px solid #dcefe3;border-radius:14px;background:linear-gradient(135deg,#f3fff7,#ecfbf3)}.hero-title[data-v-be66263e]{font-size:16px;font-weight:700;color:#166534}.hero-sub[data-v-be66263e]{margin-top:4px;font-size:12px;color:#4b5563;line-height:1.45}.orders-nav[data-v-be66263e]{padding:14px 16px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:10}.nav-back[data-v-be66263e]{font-size:20px;color:#fff}.nav-title[data-v-be66263e]{font-size:18px;font-weight:700;color:#fff}.order-item[data-v-be66263e]{background:#fff;margin-bottom:12px;border-radius:14px;padding:16px;border:1px solid #e8edf4;box-shadow:0 6px 16px rgba(15,23,42,.05)}.order-head[data-v-be66263e]{display:flex;align-items:center;justify-content:space-between;gap:8px}.order-title[data-v-be66263e]{font-size:15px;font-weight:700;color:#1f2937;margin-bottom:6px}.order-desc[data-v-be66263e]{font-size:13px;color:#6b7280;margin-bottom:10px;display:flex;align-items:center;gap:6px}.desc-icon[data-v-be66263e]{width:18px;height:18px;border-radius:6px;background:#eef2f7;display:inline-flex;align-items:center;justify-content:center}.order-footer[data-v-be66263e]{display:flex;justify-content:space-between;align-items:center}.order-time[data-v-be66263e]{font-size:12px;color:#94a3b8;display:inline-flex;align-items:center;gap:4px}.action-btns[data-v-be66263e]{display:flex;gap:8px;margin-top:10px}

View File

@ -1 +0,0 @@
.my-reports-page[data-v-b92fb009]{padding:0 0 3.75rem}.nav-placeholder[data-v-b92fb009]{width:32px}.nav-home-btn[data-v-b92fb009]{background:rgba(255,255,255,.2);border:1px solid rgba(255,255,255,.35)}.reports-hero[data-v-b92fb009]{margin-top:12px;padding:14px 16px;border:1px solid #dcefe3;border-radius:14px;background:linear-gradient(135deg,#f3fff7,#ecfbf3)}.hero-title[data-v-b92fb009]{font-size:16px;font-weight:700;color:#166534}.hero-sub[data-v-b92fb009]{margin-top:4px;font-size:12px;color:#4b5563;line-height:1.45}.hero-count[data-v-b92fb009]{font-weight:700;color:#16a34a}.placeholder-icon[data-v-b92fb009]{width:36px;height:36px;border-radius:10px;background:#e2e8f0;display:inline-flex;align-items:center;justify-content:center}.report-nav[data-v-b92fb009]{padding:14px 16px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:10}.nav-back[data-v-b92fb009]{font-size:20px;color:#fff}.nav-title[data-v-b92fb009]{font-size:18px;font-weight:700;color:#fff}.gallery-grid[data-v-b92fb009]{display:grid;grid-template-columns:1fr 1fr;gap:12px;padding-top:14px}.gallery-item[data-v-b92fb009]{border-radius:14px;overflow:hidden;cursor:pointer;background:#fff;border:1px solid #e8edf4;box-shadow:0 8px 18px rgba(15,23,42,.06)}.gallery-cover[data-v-b92fb009]{position:relative;width:100%;aspect-ratio:1;overflow:hidden}.cover-img[data-v-b92fb009]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.cover-placeholder[data-v-b92fb009]{width:100%;height:100%;background:#f0ede8;display:flex;align-items:center;justify-content:center}.gallery-overlay[data-v-b92fb009]{position:absolute;bottom:0;left:0;right:0;padding:8px 10px;background:linear-gradient(transparent,rgba(0,0,0,.65));color:#fff}.overlay-name[data-v-b92fb009]{font-size:13px;font-weight:600}.overlay-service[data-v-b92fb009]{font-size:11px;opacity:.9;margin-top:2px}.gallery-meta[data-v-b92fb009]{padding:8px 10px 10px;background:#fff}.meta-chip[data-v-b92fb009]{display:inline-flex;align-items:center;gap:4px;height:22px;padding:0 8px;border-radius:999px;background:#f1f5f9;color:#64748b;font-size:11px}

View File

@ -1 +0,0 @@
.profile-page[data-v-2268527d]{padding-bottom:3.75rem;background:var(--pet-bg, #f5f7fb);min-height:100vh}.nav-placeholder[data-v-2268527d]{width:32px}.profile-nav[data-v-2268527d]{padding:14px 16px 12px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:10}.nav-back[data-v-2268527d]{font-size:20px;color:#fff}.nav-title[data-v-2268527d]{font-size:18px;font-weight:700;color:#fff}.profile-hero[data-v-2268527d]{margin:14px 14px 0;padding:18px 16px 14px;background:#fff;border:1px solid #e6ecf4;border-radius:16px;box-shadow:var(--pet-card-shadow, 0 8px 24px rgba(15, 23, 42, .06))}.hero-main-row[data-v-2268527d]{display:flex;align-items:center;gap:14px}.avatar-wrap[data-v-2268527d]{position:relative;flex-shrink:0;-webkit-tap-highlight-color:transparent}.avatar-img[data-v-2268527d],.avatar-placeholder[data-v-2268527d]{width:84px;height:84px;border-radius:50%;border:2px solid #e8edf4;-o-object-fit:cover;object-fit:cover;display:flex;align-items:center;justify-content:center}.avatar-placeholder[data-v-2268527d]{background:rgba(226,232,240,.75)}.avatar-initials[data-v-2268527d]{font-size:30px;font-weight:700;color:#fff}.avatar-badge[data-v-2268527d]{position:absolute;bottom:2px;right:2px;width:28px;height:28px;background:#fff;border-radius:50%;border:1px solid #e2e8f0;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(15,23,42,.08)}.hero-text[data-v-2268527d]{flex:1;min-width:0}.hero-name[data-v-2268527d]{font-size:19px;line-height:1.25;letter-spacing:.02em}.hero-phone[data-v-2268527d]{margin-top:6px;font-size:14px;color:var(--pet-subtext, #6b7280)}.hero-tags[data-v-2268527d]{margin-top:10px}.role-pill[data-v-2268527d]{display:inline-flex;align-items:center;height:26px;padding:0 12px;border-radius:999px;font-size:12px;font-weight:700;background:#fff7ed;color:#c2410c}.role-pill.hero-role.role-staff[data-v-2268527d],.role-pill.role-staff[data-v-2268527d]{background:#ecfdf3;color:#166534}.role-pill-compact[data-v-2268527d]{height:24px;padding:0 10px;font-size:12px}.hero-hint[data-v-2268527d]{margin-top:12px;padding-top:12px;border-top:1px solid #f1f5f9;font-size:12px;color:#94a3b8;text-align:center}.menu-section[data-v-2268527d]{padding:0 14px;margin-top:12px}.menu-card[data-v-2268527d]{background:#fff;border:1px solid #e6ecf4;border-radius:16px;box-shadow:0 8px 20px rgba(15,23,42,.05);overflow:hidden}.menu-title[data-v-2268527d]{font-size:12px;color:#94a3b8;font-weight:700;padding:12px 14px 8px}.menu-item[data-v-2268527d]{min-height:54px;padding:0 14px;display:flex;align-items:center;justify-content:space-between;gap:10px;transition:background .15s ease}.menu-item[data-v-2268527d]:active:not(.menu-item-static){background:#f8fafc}.menu-item+.menu-item[data-v-2268527d]{border-top:1px solid #eef2f7}.menu-item-static[data-v-2268527d]{cursor:default}.menu-left[data-v-2268527d]{display:flex;align-items:center;gap:10px;min-width:0}.menu-icon[data-v-2268527d]{width:28px;height:28px;border-radius:8px;background:#f1f5f9;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.menu-text[data-v-2268527d]{font-size:16px;color:#1f2937;font-weight:600}.menu-right[data-v-2268527d]{display:inline-flex;align-items:center;gap:4px;flex-shrink:0;max-width:55%;justify-content:flex-end}.menu-value[data-v-2268527d]{font-size:14px;color:#64748b;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:right}.menu-arrow[data-v-2268527d]{color:#c4cfdd;font-size:18px;line-height:1}.field-label-gap[data-v-2268527d]{margin-top:12px}.profile-popup-mask[data-v-2268527d]{z-index:3000;align-items:flex-end}.profile-popup-sheet[data-v-2268527d]{width:100%;max-width:100%;max-height:88vh;border-radius:20px 20px 0 0;display:flex;flex-direction:column}.profile-popup-sheet .popup-header[data-v-2268527d]{flex-shrink:0;padding:18px 20px 14px;border-bottom:1px solid #f0f0f0}.profile-popup-sheet .popup-title[data-v-2268527d]{font-size:17px;font-weight:600;color:#1a1a1a}.profile-popup-sheet .popup-close[data-v-2268527d]{width:36px;height:36px;display:flex;align-items:center;justify-content:center;margin:-6px -8px -6px 0;border-radius:10px}.profile-popup-sheet .popup-close[data-v-2268527d]:active{background:#f1f5f9}.profile-popup-sheet .popup-body[data-v-2268527d]{flex:1;overflow-y:auto;padding:16px 20px}.profile-popup-footer[data-v-2268527d]{flex-shrink:0;padding:8px 20px max(env(safe-area-inset-bottom),20px);border-top:1px solid #f1f5f9;background:#fff}.sms-row[data-v-2268527d]{display:flex;align-items:center;gap:8px}.sms-input[data-v-2268527d]{flex:1;min-width:0}.footer-tip[data-v-2268527d]{text-align:center;margin-top:28px;font-size:12px;color:#94a3b8}

View File

@ -1 +0,0 @@
.report-page[data-v-e2283bdf]{padding-bottom:4.375rem}.report-nav[data-v-e2283bdf]{padding:14px 16px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:10}.nav-back[data-v-e2283bdf]{font-size:20px;color:#fff}.nav-title[data-v-e2283bdf]{font-size:18px;font-weight:700;color:#fff}.nav-placeholder[data-v-e2283bdf]{width:32px}.report-url-input[data-v-e2283bdf]{margin-top:8px}.btn-ghost[data-v-e2283bdf]{background:#fff!important;color:#666!important;border:1px solid #e0e0e0!important;box-shadow:none!important}.notice-bar[data-v-e2283bdf]{padding:10px 16px;font-size:13px}.notice-bar.success[data-v-e2283bdf]{background:#f8fafc;color:#334155;border-left:3px solid #16a34a}.result-wrap[data-v-e2283bdf],.result-content[data-v-e2283bdf]{padding:0}.result-link-row[data-v-e2283bdf]{display:flex;justify-content:space-between;align-items:center}.qr-wrap[data-v-e2283bdf]{text-align:center;padding:20px;background:#f8fafc;border:1px solid #e8edf4;border-radius:14px;margin:16px 0}.qr-img[data-v-e2283bdf]{width:180px;height:180px}.report-hero[data-v-e2283bdf]{margin-top:12px;padding:12px 14px;border:1px solid #e5ebf3;border-radius:14px;background:#fff}.hero-title[data-v-e2283bdf]{font-size:16px;font-weight:700;color:#1f2937}.hero-sub[data-v-e2283bdf]{margin-top:4px;font-size:12px;color:#6b7280;line-height:1.45}.report-form .form-section[data-v-e2283bdf]{background:#fff;border:1px solid #e5ebf3;border-radius:16px;box-shadow:0 6px 18px rgba(15,23,42,.04);overflow:hidden}.section-title[data-v-e2283bdf]{display:flex;align-items:center;gap:6px;padding:12px 14px 4px;font-size:13px;color:#64748b;font-weight:700}.section-icon[data-v-e2283bdf]{width:18px;height:18px;border-radius:6px;background:#f8fafc;display:inline-flex;align-items:center;justify-content:center;border:1px solid #e2e8f0}.section-body[data-v-e2283bdf]{padding:0 14px 10px}.form-field-wrap[data-v-e2283bdf]{padding:0 0 10px}.field-label[data-v-e2283bdf]{margin:0 0 6px;font-size:13px;color:#64748b;font-weight:600}.photo-row[data-v-e2283bdf]{display:flex;gap:10px}.photo-col[data-v-e2283bdf]{flex:1;min-width:0}.upload-wrap[data-v-e2283bdf]{display:flex;align-items:center;margin-top:6px}.upload-box[data-v-e2283bdf]{width:100%;aspect-ratio:1 / 1;min-height:110px;border:1px dashed #d8e0ea;border-radius:14px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#94a3b8;cursor:pointer;background:#fbfdff}.upload-icon[data-v-e2283bdf]{width:28px;height:28px;border-radius:8px;background:#f1f5f9;display:inline-flex;align-items:center;justify-content:center;border:1px solid #e2e8f0}.upload-preview[data-v-e2283bdf]{position:relative}.preview-img[data-v-e2283bdf]{width:100%;aspect-ratio:1 / 1;border-radius:14px;-o-object-fit:cover;object-fit:cover;border:1px solid #e8edf4}.preview-remove[data-v-e2283bdf]{position:absolute;top:-6px;right:-6px;width:18px;height:18px;background:rgba(0,0,0,.6);color:#fff;border-radius:50%;font-size:10px;display:flex;align-items:center;justify-content:center}.loading-mask[data-v-e2283bdf]{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.4);display:flex;align-items:center;justify-content:center;z-index:999}.loading-box[data-v-e2283bdf]{background:#fff;padding:20px 40px;border-radius:12px;font-size:15px}.picker-field[data-v-e2283bdf]{display:flex;align-items:center;background:#fff;border-radius:12px;padding:8px 12px;color:#333;min-height:44px}.form-section[data-v-e2283bdf]{margin:12px 0 0}.form-submit-wrap[data-v-e2283bdf]{padding:0 0 16px}.field-label-tight[data-v-e2283bdf]{margin-bottom:0}.upload-tip[data-v-e2283bdf]{font-size:12px;margin-top:6px;color:#64748b}.remark-textarea[data-v-e2283bdf]{min-height:120px;line-height:1.5}.report-submit-btn[data-v-e2283bdf]{margin-top:6px!important}.result-content .van-button--primary[data-v-e2283bdf]{box-shadow:0 6px 14px rgba(34,197,94,.2)!important}

View File

@ -1 +0,0 @@
.st-page[data-v-663ba7c1]{padding-bottom:3.75rem}.nav-placeholder[data-v-663ba7c1]{width:32px}.add-btn-wrap[data-v-663ba7c1]{padding:0}.card-section[data-v-663ba7c1]{margin:0}.st-list[data-v-663ba7c1]{border-radius:16px;overflow:hidden}.st-cell[data-v-663ba7c1]{min-height:52px}.st-name-row[data-v-663ba7c1]{display:flex;align-items:center;gap:8px}.st-dot[data-v-663ba7c1]{width:24px;height:24px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;background:#f1f5f9}.st-name[data-v-663ba7c1]{font-size:15px;font-weight:600;color:#1f2937}.system-tag[data-v-663ba7c1]{margin-left:8px}.st-swipe-wrap[data-v-663ba7c1]{overflow:hidden;border-radius:12px}.st-swipe-wrap+.st-swipe-wrap[data-v-663ba7c1]{border-top:1px solid #eef2f7}.st-swipe-track[data-v-663ba7c1]{display:flex;width:calc(100% + 76px);transform:translate(0);transition:transform .2s ease}.st-swipe-wrap.is-open .st-swipe-track[data-v-663ba7c1]{transform:translate(-76px)}.swipe-delete-btn[data-v-663ba7c1]{width:76px;background:#ef4444;color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;flex-shrink:0}.st-nav[data-v-663ba7c1]{padding:14px 16px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:10}.nav-back[data-v-663ba7c1]{font-size:20px;color:#fff}.nav-title[data-v-663ba7c1]{font-size:18px;font-weight:700;color:#fff}.popup-mask[data-v-663ba7c1]{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.5);z-index:100;display:flex;align-items:flex-end;justify-content:center}.popup-content[data-v-663ba7c1]{background:#fff;border-radius:16px 16px 0 0;width:430px;max-width:100%;display:flex;flex-direction:column}.popup-header[data-v-663ba7c1]{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid #f0f0f0}.popup-title[data-v-663ba7c1]{font-size:16px;font-weight:600}.popup-close[data-v-663ba7c1]{font-size:18px;color:#999}.popup-body[data-v-663ba7c1]{padding:16px 20px}.popup-footer[data-v-663ba7c1]{padding:12px 20px 20px}.popup-desc[data-v-663ba7c1]{font-size:12px;color:#6b7280;line-height:1.45;margin-bottom:10px}.popup-actions[data-v-663ba7c1]{display:flex;align-items:center;gap:10px}.btn-ghost[data-v-663ba7c1]{width:96px;border:1px solid #dbe3ee!important;background:#fff!important;color:#64748b!important}.btn-confirm[data-v-663ba7c1]{flex:1}

View File

@ -1 +0,0 @@
.staff-page[data-v-8ecf2675]{padding-bottom:3.75rem}.nav-placeholder[data-v-8ecf2675]{width:32px}.add-btn-wrap[data-v-8ecf2675]{padding:0}.card-section[data-v-8ecf2675]{margin:0}.invite-card[data-v-8ecf2675]{overflow:hidden}.staff-cell[data-v-8ecf2675]{min-height:58px}.invite-code-cell[data-v-8ecf2675]{display:flex;align-items:center;gap:8px}.invite-code[data-v-8ecf2675]{font-family:monospace;font-size:15px;color:#16a34a;font-weight:700;letter-spacing:2px}.staff-info-row[data-v-8ecf2675]{display:flex;align-items:center;gap:12px;flex:1}.staff-name[data-v-8ecf2675]{font-weight:700;font-size:15px;color:#1f2937}.staff-meta[data-v-8ecf2675]{font-size:12px;color:#6b7280}.staff-swipe-wrap[data-v-8ecf2675]{position:relative;overflow:hidden;border-radius:12px;background:#fff}.staff-swipe-wrap+.staff-swipe-wrap[data-v-8ecf2675]{border-top:1px solid #eef2f7}.staff-main[data-v-8ecf2675]{position:relative;z-index:2;transform:translate(0);transition:transform .2s ease;background:#fff}.staff-swipe-wrap.is-open .staff-main[data-v-8ecf2675]{transform:translate(-76px)}.swipe-delete-btn[data-v-8ecf2675]{position:absolute;right:0;top:0;bottom:0;width:76px;background:#ef4444;color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;flex-shrink:0}.staff-nav[data-v-8ecf2675]{padding:14px 16px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:10}.nav-back[data-v-8ecf2675]{font-size:20px;color:#fff}.nav-title[data-v-8ecf2675]{font-size:18px;font-weight:700;color:#fff}.avatar[data-v-8ecf2675]{width:42px;height:42px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:18px;color:#fff;overflow:hidden;flex-shrink:0;border:1px solid #e8edf4}.avatar-img[data-v-8ecf2675]{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.avatar-initials[data-v-8ecf2675]{font-weight:600}.popup-mask[data-v-8ecf2675]{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.5);z-index:100;display:flex;align-items:flex-end;justify-content:center}.popup-content[data-v-8ecf2675]{background:#fff;border-radius:16px 16px 0 0;width:430px;max-width:100%;display:flex;flex-direction:column}.popup-header[data-v-8ecf2675]{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid #f0f0f0}.popup-title[data-v-8ecf2675]{font-size:16px;font-weight:600}.popup-close[data-v-8ecf2675]{font-size:18px;color:#999}.popup-body[data-v-8ecf2675]{padding:16px 20px}.popup-footer[data-v-8ecf2675]{padding:12px 20px 20px}.popup-desc[data-v-8ecf2675]{font-size:12px;color:#6b7280;line-height:1.45;margin-bottom:10px}.popup-actions[data-v-8ecf2675]{display:flex;align-items:center;gap:10px}.btn-ghost[data-v-8ecf2675]{width:96px;border:1px solid #dbe3ee!important;background:#fff!important;color:#64748b!important}.btn-confirm[data-v-8ecf2675]{flex:1}

View File

@ -1 +0,0 @@
.store-page[data-v-eb0ed336]{min-height:100vh;background:var(--pet-bg, #f5f7fb);padding-bottom:3.75rem}.nav-placeholder[data-v-eb0ed336]{width:32px}.store-nav[data-v-eb0ed336]{padding:14px 16px 12px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:10}.nav-back[data-v-eb0ed336]{font-size:20px;color:#fff}.nav-title[data-v-eb0ed336]{font-size:18px;font-weight:700;color:#fff}.store-body[data-v-eb0ed336]{padding:12px 14px 28px}.store-hero[data-v-eb0ed336]{display:flex;gap:12px;align-items:flex-start;padding:16px 14px;border-radius:16px;background:linear-gradient(135deg,#fff,#ecfdf3 55%,#f0fdf4);border:1px solid #d8f0e2;box-shadow:var(--pet-card-shadow, 0 8px 24px rgba(15, 23, 42, .06));margin-bottom:14px}.store-hero-icon[data-v-eb0ed336]{width:44px;height:44px;border-radius:12px;background:rgba(255,255,255,.9);border:1px solid #bbf7d0;display:flex;align-items:center;justify-content:center;flex-shrink:0}.store-hero-title[data-v-eb0ed336]{font-size:17px;font-weight:700;color:#14532d;letter-spacing:.02em}.store-hero-desc[data-v-eb0ed336]{margin-top:6px;font-size:13px;line-height:1.55;color:#4b5563}.store-card[data-v-eb0ed336]{background:#fff;border:1px solid #e6ecf4;border-radius:16px;box-shadow:0 8px 22px rgba(15,23,42,.06);padding:4px 4px 8px;overflow:hidden}.store-card-head[data-v-eb0ed336]{padding:14px 14px 6px}.store-card-kicker[data-v-eb0ed336]{font-size:12px;font-weight:700;color:#94a3b8;letter-spacing:.04em}.store-field[data-v-eb0ed336]{padding:12px 12px 4px}.store-field+.store-field[data-v-eb0ed336]{border-top:1px solid #f1f5f9}.store-field-label[data-v-eb0ed336]{display:flex;align-items:center;gap:8px;margin-bottom:8px;font-size:14px;font-weight:600;color:#374151}.store-ico[data-v-eb0ed336]{width:28px;height:28px;border-radius:8px;background:#f1f5f9;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.store-input[data-v-eb0ed336]{margin-top:0!important}.address-row[data-v-eb0ed336]{display:flex;align-items:stretch;gap:10px}.address-input[data-v-eb0ed336]{flex:1;min-width:0}.pick-location-btn[data-v-eb0ed336]{flex-shrink:0;padding:0 14px;min-height:44px;border-radius:12px;border:1px solid #16a34a;background:#f0fdf4;color:#15803d;font-size:14px;font-weight:600;line-height:44px;-webkit-tap-highlight-color:transparent}.pick-location-btn[data-v-eb0ed336]:active:not([disabled]){opacity:.92;transform:translateY(1px)}.pick-location-btn[disabled][data-v-eb0ed336]{opacity:.55}.geo-hint[data-v-eb0ed336]{margin-top:8px;font-size:12px;color:#16a34a;line-height:1.4}.intro-textarea[data-v-eb0ed336]{min-height:112px!important;line-height:1.55!important;padding-top:12px!important;padding-bottom:12px!important;resize:none}.store-field-last[data-v-eb0ed336]{padding-bottom:14px}.store-actions[data-v-eb0ed336]{margin-top:18px}.store-save-btn[data-v-eb0ed336]{margin-top:0!important;box-shadow:0 10px 26px rgba(34,197,94,.35)!important}.store-actions-hint[data-v-eb0ed336]{margin-top:10px;text-align:center;font-size:12px;color:#94a3b8;line-height:1.45}.store-footer-tip[data-v-eb0ed336]{margin-top:28px;text-align:center;font-size:12px;color:#cbd5e1}

View File

@ -1 +0,0 @@
import{Y as e,Z as s}from"./index-DrZc8biM.js";const r={login:"/pages/login/Login",home:"/pages/home/Home",report:"/pages/report/Report",mine:"/pages/mine/Mine"},o={staff:"/pages/mine/Staff",serviceType:"/pages/mine/ServiceType",store:"/pages/mine/Store",profile:"/pages/mine/Profile",myReports:"/pages/mine/MyReports",myOrders:"/pages/mine/MyOrders"},n=n=>{const p=r[n];if(p)return void e({url:p});const i=o[n];i&&s({url:i})},p=(e,s)=>{const r=e.__vccOpts||e;for(const[o,n]of s)r[o]=n;return r};export{p as _,n};

View File

@ -1 +0,0 @@
const a={new:"待确认",doing:"服务中",done:"已完成",cancel:"已取消"},n=n=>a[n]||a.new,e=a=>({new:"warning",doing:"primary",done:"success",cancel:"default"}[a]||"default"),c=a=>({new:"tag-warning",doing:"tag-primary",done:"tag-success",cancel:"tag-default"}[a]||"tag-default");export{c as a,e as b,n as g};

View File

@ -1 +0,0 @@
const t=t=>{if(!t)return"";return new Date(t).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})},r=t=>{if(!t)return"";const r=new Date(t);return`${r.getFullYear()}-${String(r.getMonth()+1).padStart(2,"0")}-${String(r.getDate()).padStart(2,"0")} ${String(r.getHours()).padStart(2,"0")}:${String(r.getMinutes()).padStart(2,"0")}`};export{r as a,t as f};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
import{X as e}from"./index-DrZc8biM.js";const t="http://localhost:8080".replace(/\/$/,""),s=`${t}/api`,a=t=>new Promise((a,r)=>{e({url:s+t.url,method:t.method||"GET",data:t.data||{},header:t.header||{},success:e=>a(e.data),fail:e=>r(e)})}),r=(e,t={})=>{const s=Object.entries(t).filter(([,e])=>null!=e).map(([e,t])=>`${encodeURIComponent(e)}=${encodeURIComponent(t)}`).join("&");return a({url:`${e}${s?"?"+s:""}`,method:"GET"})},o=(e,t={})=>a({url:e,method:"POST",data:t,header:{"Content-Type":"application/json"}}),n=(e,t={})=>a({url:e,method:"PUT",data:t,header:{"Content-Type":"application/json"}}),p=e=>a({url:e,method:"DELETE"}),d=e=>e?e.startsWith("http")?e:`${t}${e}`:"",i=e=>o("/sms/send",{phone:e}),l=(e,t)=>o("/user/login",{phone:e,code:t}),c=e=>o("/user/register-boss",e),u=e=>o("/user/register-staff",e),m=(e,t)=>r("/appointment/list",{userId:e,storeId:t}),h=e=>o("/appointment/create",e),f=(e,t)=>o("/appointment/start",{appointmentId:e,staffUserId:t}),$=e=>n(`/appointment/status?id=${e}&status=cancel`),I=e=>o("/report/create",e),T=e=>r("/report/get",{token:e}),j=e=>r("/report/list",e),g=e=>r("/service-type/list",{storeId:e}),y=(e,t)=>o("/service-type/create",{storeId:e,name:t}),E=e=>p(`/service-type/delete?id=${e}`),C=e=>r("/user/staff-list",{storeId:e}),U=e=>o("/user/create-staff",e),b=e=>p(`/user/staff?staffId=${e}`),v=e=>n("/user/update",e),P=e=>n("/store/update",e);export{t as A,s as B,u as a,g as b,f as c,$ as d,h as e,I as f,m as g,C as h,d as i,b as j,U as k,l,E as m,y as n,j as o,v as p,T as q,c as r,i as s,P as u};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
import{m as s,p as e,q as a,c as n,b as l,x as i,v as t,t as c,d as o,e as r,w as m,F as u,i as p,g as d,h as v,G as f,P as g}from"./index-DrZc8biM.js";import{T as h,u as C}from"./useNavigator.BKsocaY0.js";import{A as k}from"./AppIcon.M7CZvvJr.js";import{_ as x}from"./_plugin-vue_export-helper.2L545UbL.js";const y=x({__name:"Mine",emits:["change-page"],setup(x,{emit:y}){const _=s(),{goPage:w,navigateTo:z}=C(),b=(()=>{var s,a;let n=((null==(s=e)?void 0:s().statusBarHeight)||20)+12;const l=null==(a=uni.getMenuButtonBoundingClientRect)?void 0:a.call(uni);return l&&l.top&&l.height&&(n=l.top+l.height+8),`padding-top:${n}px;`})(),j=a(()=>_.name?_.name.slice(0,1).toUpperCase():"?"),A=a(()=>{var s;if(_.avatar)return{};const e=["#ff7c43","#07c160","#8b6914","#e06040","#5090d0"];return{background:e[((null==(s=_.name)?void 0:s.charCodeAt(0))||0)%e.length]}}),B=()=>{f({title:"提示",content:"确定退出登录?",success:s=>{s.confirm&&(g(),z("login"))}})};return(s,e)=>{const a=p;return d(),n(u,null,[l("div",{class:"mine-page"},[l("div",{class:"user-card",style:t(i(b)),onClick:e[0]||(e[0]=s=>i(z)("profile"))},[l("div",{class:"user-info"},[l("div",{class:"user-avatar",style:t(A.value)},[i(_).avatar?(d(),n("img",{key:0,src:i(_).avatar,class:"avatar-img"},null,8,["src"])):(d(),n("span",{key:1,class:"avatar-initials"},c(j.value),1))],4),l("div",{class:"user-info-content"},[l("div",{class:"user-name"},c(i(_).name),1),l("div",{class:"user-phone"},c(i(_).phone),1),l("div",{class:"role-pill"},c("boss"===i(_).role?"店长":"员工"),1)])])],4),"boss"===i(_).role?(d(),n("div",{key:0,class:"menu-section"},[l("div",{class:"menu-card"},[l("div",{class:"menu-title"},"店铺管理"),l("div",{class:"menu-item",onClick:e[1]||(e[1]=s=>i(z)("staff"))},[l("div",{class:"menu-left"},[l("span",{class:"menu-icon"},[o(k,{name:"staff",size:15})]),l("span",{class:"menu-text"},"员工管理")]),l("span",{class:"menu-arrow"},"")]),l("div",{class:"menu-item",onClick:e[2]||(e[2]=s=>i(z)("serviceType"))},[l("div",{class:"menu-left"},[l("span",{class:"menu-icon"},[o(k,{name:"service",size:15})]),l("span",{class:"menu-text"},"服务类型")]),l("span",{class:"menu-arrow"},"")]),l("div",{class:"menu-item",onClick:e[3]||(e[3]=s=>i(z)("store"))},[l("div",{class:"menu-left"},[l("span",{class:"menu-icon"},[o(k,{name:"store",size:15})]),l("span",{class:"menu-text"},"店铺设置")]),l("span",{class:"menu-arrow"},"")])])])):r("",!0),l("div",{class:"menu-section"},[l("div",{class:"menu-card"},[l("div",{class:"menu-title"},"个人中心"),l("div",{class:"menu-item",onClick:e[4]||(e[4]=s=>i(z)("profile"))},[l("div",{class:"menu-left"},[l("span",{class:"menu-icon"},[o(k,{name:"profile",size:15})]),l("span",{class:"menu-text"},"个人信息")]),l("span",{class:"menu-arrow"},"")]),l("div",{class:"menu-item",onClick:e[5]||(e[5]=s=>i(z)("myReports"))},[l("div",{class:"menu-left"},[l("span",{class:"menu-icon"},[o(k,{name:"report",size:15})]),l("span",{class:"menu-text"},"我的报告")]),l("span",{class:"menu-arrow"},"")]),l("div",{class:"menu-item",onClick:e[6]||(e[6]=s=>i(z)("myOrders"))},[l("div",{class:"menu-left"},[l("span",{class:"menu-icon"},[o(k,{name:"orders",size:15})]),l("span",{class:"menu-text"},"我的订单")]),l("span",{class:"menu-arrow"},"")])])]),l("div",{class:"menu-section"},[o(a,{class:"logout-btn",onClick:B},{default:m(()=>[o(k,{name:"logout",size:15,color:"#dc2626"}),v("退出登录")]),_:1})])]),o(h,{"current-page":"mine",onChange:i(w)},null,8,["onChange"])],64)}}},[["__scopeId","data-v-27768e55"]]);export{y as default};

View File

@ -1 +0,0 @@
import{m as e,p as a,r as t,q as s,u as n,c as l,d as i,w as o,v as c,x as r,z as d,e as u,f as p,g as m,A as v,h as f,F as g,y as _,B as y,t as b,b as h,i as k,j as T,G as w,H as x}from"./index-DrZc8biM.js";import{A as C}from"./AppIcon.M7CZvvJr.js";import{_ as j,n as N}from"./_plugin-vue_export-helper.2L545UbL.js";import{g as $,c as z,d as B}from"./index.DsJtDI4O.js";import{f as A}from"./datetime.CB5sbvg8.js";import{g as I,b as M}from"./appointment.SHi7qFlK.js";const H=j({__name:"MyOrders",emits:["change-page"],setup(j,{emit:H}){const O=e(),q=O.id,F=(()=>{var e,t;const s=(null==(e=a)?void 0:e().statusBarHeight)||20;let n=s+44;const l=null==(t=uni.getMenuButtonBoundingClientRect)?void 0:t.call(uni);if(l&&l.top&&l.height){n=s+2*Math.max(l.top-s,4)+l.height}return`padding-top:${s}px;height:${n}px;`})(),G=t("new"),J=t([]),R=[{title:"待确认",name:"new"},{title:"进行中",name:"doing"},{title:"已完成",name:"done"}],S=s(()=>J.value.filter(e=>"new"===G.value?"new"===e.status:"doing"===G.value?"doing"===e.status:"done"!==G.value||("done"===e.status||"cancel"===e.status))),D=async()=>{if(!q)return;const e=await $(q);200===e.code&&(J.value=e.data.map(e=>({id:e.id,title:e.serviceType||"洗澡美容预约",desc:`${e.petType||""} - ${e.petName||""}`,time:A(e.appointmentTime),status:e.status||"new",statusText:I(e.status),petName:e.petName,petType:e.petType,serviceType:e.serviceType,appointmentTime:e.appointmentTime})))};return n(()=>D()),(e,a)=>{const t=v,s=p,n=k;return m(),l("div",{class:"page-shell orders-page"},[i(s,{class:"orders-nav nav-gradient",style:c(r(F))},{default:o(()=>[i(t,{class:"nav-back",onClick:a[0]||(a[0]=e=>r(N)("mine"))},{default:o(()=>[i(C,{name:"back",size:18,color:"#ffffff"})]),_:1}),i(t,{class:"nav-title"},{default:o(()=>[f("我的订单")]),_:1}),i(s,{class:"nav-placeholder"})]),_:1},8,["style"]),i(s,{class:"page-section orders-hero"},{default:o(()=>[i(s,{class:"hero-title"},{default:o(()=>[f("服务进度一目了然")]),_:1}),i(s,{class:"hero-sub"},{default:o(()=>[f("按状态查看订单,待确认可快速开始服务,进行中可直接填写报告。")]),_:1})]),_:1}),i(s,{class:"van-tabs"},{default:o(()=>[(m(),l(g,null,_(R,e=>i(s,{key:e.name,class:y(["van-tabs__tab",{active:G.value===e.name}]),onClick:a=>G.value=e.name},{default:o(()=>[f(b(e.title),1)]),_:2},1032,["class","onClick"])),64))]),_:1}),i(s,{class:"page-section section-gap"},{default:o(()=>[(m(!0),l(g,null,_(S.value,e=>{return m(),l("div",{key:e.id,class:"order-item"},[h("div",{class:"order-head"},[h("div",{class:"order-title"},b(e.title),1),i(s,{class:y(`van-tag van-tag--${a=e.status,M(a)}`)},{default:o(()=>[f(b(e.statusText),1)]),_:2},1032,["class"])]),h("div",{class:"order-desc"},[h("span",{class:"desc-icon"},[i(C,{name:"profile",size:12})]),h("span",null,b(e.desc),1)]),h("div",{class:"order-footer"},[h("span",{class:"order-time"},[i(C,{name:"orders",size:12,color:"#94a3b8"}),i(t,null,{default:o(()=>[f(b(e.time),1)]),_:2},1024)])]),"new"===e.status?(m(),l("div",{key:0,class:"action-btns"},[i(n,{class:"van-button van-button--small van-button--primary",onClick:a=>(async e=>{const a=await z(e.id,O.id);200===a.code?(T({title:"已开始服务",icon:"success"}),D()):T({title:a.message||"操作失败",icon:"none"})})(e)},{default:o(()=>[f("开始服务")]),_:2},1032,["onClick"]),i(n,{class:"van-button van-button--small",onClick:a=>(async e=>{w({title:"提示",content:"确定取消该预约?",success:async a=>{a.confirm&&200===(await B(e.id)).code&&(T({title:"已取消",icon:"success"}),D())}})})(e)},{default:o(()=>[f("取消")]),_:2},1032,["onClick"])])):"doing"===e.status?(m(),d(n,{key:1,class:"van-button van-button--small btn-mt",onClick:a=>(e=>{x("petstore_report_prefill",JSON.stringify({appointmentId:e.id,petName:e.petName,serviceType:e.serviceType,appointmentTime:e.appointmentTime})),N("report")})(e)},{default:o(()=>[f("填写报告")]),_:2},1032,["onClick"])):u("",!0)]);var a}),128))]),_:1}),0===S.value.length?(m(),d(s,{key:0,class:"empty"},{default:o(()=>[i(t,null,{default:o(()=>[f("暂无数据")]),_:1})]),_:1})):u("",!0)])}}},[["__scopeId","data-v-be66263e"]]);export{H as default};

View File

@ -1 +0,0 @@
import{m as e,n as a,p as s,r as l,u as t,c as o,d as r,w as n,v as c,x as i,F as d,y as p,e as u,z as v,f as g,g as h,A as m,h as f,t as y,b as _}from"./index-DrZc8biM.js";import{A as b}from"./AppIcon.M7CZvvJr.js";import{_ as k,n as x}from"./_plugin-vue_export-helper.2L545UbL.js";import{o as w,i as j,A as z}from"./index.DsJtDI4O.js";const A=k({__name:"MyReports",emits:["change-page"],setup(k,{emit:A}){const C=e(),I=a(),$=(()=>{var e,a;const l=(null==(e=s)?void 0:e().statusBarHeight)||20;let t=l+44;const o=null==(a=uni.getMenuButtonBoundingClientRect)?void 0:a.call(uni);if(o&&o.top&&o.height){t=l+2*Math.max(o.top-l,4)+o.height}return`padding-top:${l}px;height:${t}px;`})(),B=l(!1),M=l([]),P=()=>{x("home")};return t(()=>(async()=>{B.value=!0;const e="boss"===C.role?{storeId:I.id}:{userId:C.id},a=await w(e);B.value=!1,200===a.code&&(M.value=a.data)})()),(e,a)=>{const s=m,l=g;return h(),o("div",{class:"page-shell my-reports-page"},[r(l,{class:"report-nav nav-gradient",style:c(i($))},{default:n(()=>[r(s,{class:"nav-back nav-home-btn",onClick:P},{default:n(()=>[r(b,{name:"home",size:16,color:"#ffffff"})]),_:1}),r(s,{class:"nav-title"},{default:n(()=>[f("我的报告")]),_:1}),r(l,{class:"nav-placeholder"})]),_:1},8,["style"]),r(l,{class:"page-section reports-hero"},{default:n(()=>[r(l,{class:"hero-title"},{default:n(()=>[f("服务成果回顾")]),_:1}),r(l,{class:"hero-sub"},{default:n(()=>[f("已生成 "),r(s,{class:"hero-count"},{default:n(()=>[f(y(M.value.length),1)]),_:1}),f(" 份报告,点击卡片可查看详情并分享。")]),_:1})]),_:1}),M.value.length>0?(h(),o("div",{key:0,class:"page-section section-gap gallery-grid"},[(h(!0),o(d,null,p(M.value,e=>(h(),o("div",{key:e.id,class:"gallery-item",onClick:a=>(e=>{let a=z;a=window.location.origin;const s=`${a}/report.html?token=${e.reportToken}`;window.location.href=s})(e)},[_("div",{class:"gallery-cover"},[e.beforePhoto?(h(),o("img",{key:0,src:i(j)(e.beforePhoto),class:"cover-img"},null,8,["src"])):(h(),o("div",{key:1,class:"cover-placeholder"},[_("span",{class:"placeholder-icon"},[r(b,{name:"camera",size:18,color:"#94a3b8"})])])),_("div",{class:"gallery-overlay"},[_("div",{class:"overlay-name"},y(e.petName),1),_("div",{class:"overlay-service"},y(e.serviceType),1)])]),_("div",{class:"gallery-meta"},[_("span",{class:"meta-chip"},[r(b,{name:"report",size:11,color:"#64748b"}),r(s,null,{default:n(()=>[f("查看报告")]),_:1})])])],8,["onClick"]))),128))])):u("",!0),B.value||0!==M.value.length?u("",!0):(h(),v(l,{key:1,class:"empty"},{default:n(()=>[r(s,null,{default:n(()=>[f("暂无报告")]),_:1})]),_:1}))])}}},[["__scopeId","data-v-b92fb009"]]);export{A as default};

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
import{n as a,p as e,r as s,u as l,c as t,d as n,w as u,v as o,x as c,z as d,e as i,f as p,g as v,A as r,h as f,i as _,F as m,y as g,B as h,C as k,b,t as y,I as C,G as w,j as x}from"./index-DrZc8biM.js";import{A as T}from"./AppIcon.M7CZvvJr.js";import{_ as I,n as j}from"./_plugin-vue_export-helper.2L545UbL.js";import{b as B,m as z,n as A}from"./index.DsJtDI4O.js";const V=I({__name:"ServiceType",emits:["change-page"],setup(I,{emit:V}){const M=a(),X=(()=>{var a,s;const l=(null==(a=e)?void 0:a().statusBarHeight)||20;let t=l+44;const n=null==(s=uni.getMenuButtonBoundingClientRect)?void 0:s.call(uni);if(n&&n.top&&n.height){t=l+2*Math.max(n.top-l,4)+n.height}return`padding-top:${l}px;height:${t}px;`})(),$=s([]),F=s(!1),G=s(""),H=s(null),R=s(0),S=s(0),U=async()=>{const a=await B(M.id);200===a.code&&($.value=a.data)},q=async()=>{if(!G.value)return void x({title:"请输入服务类型名称",icon:"none"});const a=await A(M.id,G.value);200===a.code?(x({title:"添加成功",icon:"success"}),G.value="",F.value=!1,U()):x({title:a.message||"添加失败",icon:"none"})},D=a=>{var e,s;return(null==(e=null==a?void 0:a.touches)?void 0:e[0])?a.touches[0].pageX:(null==(s=null==a?void 0:a.changedTouches)?void 0:s[0])?a.changedTouches[0].pageX:0};return l(()=>U()),(a,e)=>{const s=r,l=p,I=_,B=C;return v(),t("div",{class:"page-shell st-page"},[n(l,{class:"st-nav nav-gradient",style:o(c(X))},{default:u(()=>[n(s,{class:"nav-back",onClick:e[0]||(e[0]=a=>c(j)("mine"))},{default:u(()=>[n(T,{name:"back",size:18,color:"#ffffff"})]),_:1}),n(s,{class:"nav-title"},{default:u(()=>[f("服务类型")]),_:1}),n(l,{class:"nav-placeholder"})]),_:1},8,["style"]),n(l,{class:"page-section add-btn-wrap"},{default:u(()=>[n(I,{class:"van-button van-button--primary van-button--block",onClick:e[1]||(e[1]=a=>F.value=!0)},{default:u(()=>[f("新增服务类型")]),_:1})]),_:1}),n(l,{class:"page-section"},{default:u(()=>[n(l,{class:"van-cell-group card-section st-list"},{default:u(()=>[(v(!0),t(m,null,g($.value,a=>(v(),d(l,{key:a.id,class:h(["st-swipe-wrap",{"is-open":H.value===a.id&&!!a.storeId}])},{default:u(()=>[n(l,{class:"st-swipe-track",onTouchstart:e=>((a,e)=>{const s=D(a);R.value=s,S.value=s,H.value&&H.value!==e.id&&(H.value=null)})(e,a),onTouchmove:e[2]||(e[2]=k(a=>{return e=a,void(S.value=D(e));var e},["stop"])),onTouchend:e=>((a,e)=>{if(!e.storeId)return;const s=(D(a)||S.value)-R.value;s<-40?H.value=e.id:s>24&&H.value===e.id&&(H.value=null)})(e,a)},{default:u(()=>[n(l,{class:"van-cell st-cell"},{default:u(()=>[n(l,{class:"st-name-row"},{default:u(()=>[b("span",{class:"st-dot"},[n(T,{name:"service",size:14})]),n(s,{class:"st-name"},{default:u(()=>[f(y(a.name),1)]),_:2},1024),a.storeId?i("",!0):(v(),d(l,{key:0,class:"van-tag van-tag--success van-tag--small system-tag"},{default:u(()=>[f("系统默认")]),_:1}))]),_:2},1024)]),_:2},1024),a.storeId?(v(),d(l,{key:0,class:"swipe-delete-btn",onClick:k(e=>(async a=>{w({title:"提示",content:"确定删除?",success:async e=>{e.confirm&&200===(await z(a)).code&&(H.value=null,x({title:"已删除",icon:"success"}),U())}})})(a.id),["stop"])},{default:u(()=>[f(" 删除 ")]),_:2},1032,["onClick"])):i("",!0)]),_:2},1032,["onTouchstart","onTouchend"])]),_:2},1032,["class"]))),128))]),_:1})]),_:1}),0===$.value.length?(v(),d(l,{key:0,class:"empty"},{default:u(()=>[n(s,null,{default:u(()=>[f("暂无服务类型")]),_:1})]),_:1})):i("",!0),F.value?(v(),d(l,{key:1,class:"popup-mask",onClick:e[7]||(e[7]=a=>F.value=!1)},{default:u(()=>[n(l,{class:"popup-content",onClick:e[6]||(e[6]=k(()=>{},["stop"]))},{default:u(()=>[n(l,{class:"popup-header"},{default:u(()=>[n(s,{class:"popup-title"},{default:u(()=>[f("新增服务类型")]),_:1}),n(s,{class:"popup-close",onClick:e[3]||(e[3]=a=>F.value=!1)},{default:u(()=>[f("✕")]),_:1})]),_:1}),n(l,{class:"popup-body"},{default:u(()=>[n(l,{class:"popup-desc"},{default:u(()=>[f("建议使用简洁明确的命名,方便前台下单与报告展示。")]),_:1}),n(l,{class:"field-label"},{default:u(()=>[f("服务类型名称")]),_:1}),n(B,{modelValue:G.value,"onUpdate:modelValue":e[4]||(e[4]=a=>G.value=a),class:"van-field",placeholder:"请输入"},null,8,["modelValue"])]),_:1}),n(l,{class:"popup-footer"},{default:u(()=>[n(l,{class:"popup-actions"},{default:u(()=>[n(I,{class:"van-button btn-ghost",onClick:e[5]||(e[5]=a=>F.value=!1)},{default:u(()=>[f("取消")]),_:1}),n(I,{class:"van-button van-button--primary btn-confirm",onClick:q},{default:u(()=>[f("确认创建")]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})):i("",!0)])}}},[["__scopeId","data-v-663ba7c1"]]);export{V as default};

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
import{n as e,p as a,r as l,q as s,u as t,c as o,d as n,w as i,v as d,x as r,b as u,e as c,f as v,A as p,I as f,i as m,E as h,g,h as b,Q as _,j as V,l as x}from"./index-DrZc8biM.js";import{A as k}from"./AppIcon.M7CZvvJr.js";import{_ as y,n as j}from"./_plugin-vue_export-helper.2L545UbL.js";import{u as z}from"./index.DsJtDI4O.js";const B=y({__name:"Store",emits:["change-page"],setup(y){const B=e(),C=(()=>{var e,l;const s=(null==(e=a)?void 0:e().statusBarHeight)||20;let t=s+44;const o=null==(l=uni.getMenuButtonBoundingClientRect)?void 0:l.call(uni);if(o&&o.top&&o.height){t=s+2*Math.max(o.top-s,4)+o.height}return`padding-top:${s}px;height:${t}px;`})(),U=l(!1),w=l(!1),A=l({name:"",phone:"",address:"",intro:"",latitude:null,longitude:null}),I=s(()=>null!=A.value.latitude&&null!=A.value.longitude),M=e=>{if(null==e||""===e)return null;const a="number"==typeof e?e:parseFloat(e);return Number.isFinite(a)?a:null},F=()=>{w.value=!0,_({success:e=>{const a=e.name||"",l=e.address||"";A.value.address=[a,l].filter(Boolean).join(" · ")||l||a,A.value.latitude=M(e.latitude),A.value.longitude=M(e.longitude)},fail:e=>{const a=e&&e.errMsg||"";/cancel|取消/i.test(a)||V({title:"无法打开选点,请手动填写",icon:"none"})},complete:()=>{w.value=!1}})},$=async()=>{U.value=!0;const e=await z({id:B.id,...A.value});if(U.value=!1,200===e.code){V({title:"保存成功",icon:"success"});const a=e.data?{...B,...e.data}:{...B,...A.value};x(a)}else V({title:e.message||"保存失败",icon:"none"})};return t(()=>{A.value={name:B.name||"",phone:B.phone||"",address:B.address||"",intro:B.intro||"",latitude:M(B.latitude),longitude:M(B.longitude)}}),(e,a)=>{const l=p,s=v,t=f,_=m,V=h;return g(),o("div",{class:"page-shell store-page"},[n(s,{class:"store-nav nav-gradient",style:d(r(C))},{default:i(()=>[n(l,{class:"nav-back",onClick:a[0]||(a[0]=e=>r(j)("mine"))},{default:i(()=>[n(k,{name:"back",size:18,color:"#ffffff"})]),_:1}),n(l,{class:"nav-title"},{default:i(()=>[b("店铺设置")]),_:1}),n(s,{class:"nav-placeholder"})]),_:1},8,["style"]),u("div",{class:"store-body"},[u("div",{class:"store-hero"},[n(s,{class:"store-hero-icon","aria-hidden":"true"},{default:i(()=>[n(k,{name:"store",size:22,color:"#15803d"})]),_:1}),u("div",{class:"store-hero-text"},[u("div",{class:"store-hero-title"},"门店资料"),u("div",{class:"store-hero-desc"},"以下信息会用于预约展示与客户联系,建议保持准确、易读。")])]),u("div",{class:"store-card"},[u("div",{class:"store-card-head"},[u("span",{class:"store-card-kicker"},"基础信息")]),u("div",{class:"store-field"},[u("div",{class:"store-field-label"},[u("span",{class:"store-ico"},[n(k,{name:"store",size:15,color:"#475569"})]),n(l,null,{default:i(()=>[b("店铺名称")]),_:1})]),n(t,{modelValue:A.value.name,"onUpdate:modelValue":a[1]||(a[1]=e=>A.value.name=e),class:"van-field store-input",placeholder:"请输入店铺名称"},null,8,["modelValue"])]),u("div",{class:"store-field"},[u("div",{class:"store-field-label"},[u("span",{class:"store-ico"},[n(k,{name:"phone",size:15,color:"#475569"})]),n(l,null,{default:i(()=>[b("联系电话")]),_:1})]),n(t,{modelValue:A.value.phone,"onUpdate:modelValue":a[2]||(a[2]=e=>A.value.phone=e),type:"tel",class:"van-field store-input",placeholder:"请输入联系电话",maxlength:"20"},null,8,["modelValue"])]),u("div",{class:"store-field"},[u("div",{class:"store-field-label"},[u("span",{class:"store-ico"},[n(k,{name:"pin",size:15,color:"#475569"})]),n(l,null,{default:i(()=>[b("地址")]),_:1})]),u("div",{class:"address-row"},[n(t,{modelValue:A.value.address,"onUpdate:modelValue":a[3]||(a[3]=e=>A.value.address=e),class:"van-field store-input address-input",placeholder:"输入地址或点右侧选点"},null,8,["modelValue"]),n(_,{type:"button",class:"pick-location-btn",disabled:w.value,onClick:F},{default:i(()=>[b(" 地图选点 ")]),_:1},8,["disabled"])]),I.value?(g(),o("div",{key:0,class:"geo-hint"},"已选地图位置,可再微调上方文字后保存")):c("",!0)]),u("div",{class:"store-field store-field-last"},[u("div",{class:"store-field-label"},[u("span",{class:"store-ico"},[n(k,{name:"report",size:15,color:"#475569"})]),n(l,null,{default:i(()=>[b("简介")]),_:1})]),n(V,{modelValue:A.value.intro,"onUpdate:modelValue":a[4]||(a[4]=e=>A.value.intro=e),class:"van-field store-input intro-textarea",placeholder:"一句话介绍门店特色、服务亮点等"},null,8,["modelValue"])])]),u("div",{class:"store-actions"},[n(_,{class:"van-button van-button--primary van-button--block store-save-btn",loading:U.value,onClick:$},{default:i(()=>[b(" 保存设置 ")]),_:1},8,["loading"]),u("div",{class:"store-actions-hint"},"保存后立即生效,并写入本地缓存。")]),u("div",{class:"store-footer-tip"},"宠伴生活馆 · 商家版")])])}}},[["__scopeId","data-v-eb0ed336"]]);export{B as default};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
.report-view[data-v-3d43fb47]{background:#f5f7fb;min-height:100vh}.loading-wrap[data-v-3d43fb47]{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;gap:16px;color:#999}.loading-spinner[data-v-3d43fb47]{width:32px;height:32px;border:3px solid #e0e0e0;border-top-color:#07c160;border-radius:50%;animation:spin-3d43fb47 .8s linear infinite}@keyframes spin-3d43fb47{to{transform:rotate(360deg)}}.not-found[data-v-3d43fb47]{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh}.report-content[data-v-3d43fb47]{max-width:430px;margin:0 auto;background:#f8fafc;min-height:100vh;box-shadow:0 10px 30px rgba(15,23,42,.06)}.brand-header[data-v-3d43fb47]{background:linear-gradient(135deg,#22c55e,#16a34a);padding:20px 20px 18px;text-align:center;color:#fff;border-radius:0 0 16px 16px;box-shadow:0 8px 20px rgba(34,197,94,.24);position:relative}.header-actions[data-v-3d43fb47]{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.header-btn[data-v-3d43fb47]{width:30px;height:30px;border-radius:999px;border:1px solid rgba(255,255,255,.45);background:rgba(255,255,255,.2);display:inline-flex;align-items:center;justify-content:center}.header-placeholder[data-v-3d43fb47]{width:30px;height:30px}.brand-logo[data-v-3d43fb47]{font-size:20px;font-weight:700;letter-spacing:1px;margin-bottom:4px}.brand-sub[data-v-3d43fb47]{font-size:12px;opacity:.7;margin-bottom:12px}.brand-contact[data-v-3d43fb47]{font-size:12px;opacity:.85;display:flex;justify-content:center;gap:16px;flex-wrap:wrap}.report-title-wrap[data-v-3d43fb47]{text-align:center;padding:20px 20px 14px}.report-title[data-v-3d43fb47]{font-size:22px;font-weight:700;color:#333}.report-time[data-v-3d43fb47]{font-size:13px;color:#999;margin-top:6px}.service-info[data-v-3d43fb47]{margin:0 16px 12px;border-radius:14px!important}.section-card[data-v-3d43fb47]{margin:0 16px 12px;background:#fff;border:1px solid #e8edf4;border-radius:14px;padding:12px;box-shadow:0 6px 16px rgba(15,23,42,.04)}.section-label[data-v-3d43fb47]{font-size:15px;font-weight:700;color:#1f2937;margin-bottom:10px}.photo-grid[data-v-3d43fb47]{display:grid;grid-template-columns:1fr 1fr;gap:12px}.photo-image[data-v-3d43fb47]{width:100%;aspect-ratio:1 / 1;border-radius:12px;border:1px solid #e5e7eb}.photo-empty[data-v-3d43fb47]{width:100%;aspect-ratio:1 / 1;background:#f1f5f9;border:1px dashed #d1d9e6;border-radius:12px;display:flex;align-items:center;justify-content:center;color:#94a3b8;font-size:13px}.remark-content[data-v-3d43fb47]{background:#f8fafc;border:1px solid #e8edf4;border-radius:12px;padding:14px;font-size:14px;color:#64748b;line-height:1.6;min-height:60px}.action-section[data-v-3d43fb47]{margin:0 16px 24px}

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
.tabbar[data-v-09922235]{position:fixed;bottom:0;left:0;right:0;height:calc(3.25rem + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);background:rgba(255,255,255,.96);backdrop-filter:blur(8px);border-top:1px solid #e8edf4;display:flex;flex-direction:row;z-index:999}.tabbar-item[data-v-09922235]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:#94a3b8;transition:color .2s ease}.tabbar-item.active[data-v-09922235]{color:#16a34a}.tabbar-icon[data-v-09922235]{width:1.25rem;height:1.25rem;border-radius:.34375rem;background:#eaf0f7;display:flex;align-items:center;justify-content:center;margin-bottom:.125rem}.tabbar-item.active .tabbar-icon[data-v-09922235]{background:#dcfce7}.tabbar-text[data-v-09922235]{font-size:.6875rem;line-height:1;font-weight:600}

View File

@ -1 +0,0 @@
import{g as a,z as e,w as t,d as r,f as s,A as c,h as o,B as l}from"./index-DrZc8biM.js";import{A as n}from"./AppIcon.M7CZvvJr.js";import{_ as i,n as u}from"./_plugin-vue_export-helper.2L545UbL.js";const b=i({__name:"TabBar",props:{currentPage:{type:String,default:"home"}},emits:["change"],setup(i,{emit:u}){const b=i,m=u;function p(a){b.currentPage!==a&&m("change",a)}return(i,u)=>{const m=s,g=c;return a(),e(m,{class:"tabbar"},{default:t(()=>[r(m,{class:l(["tabbar-item",{active:"home"===b.currentPage}]),onClick:u[0]||(u[0]=a=>p("home"))},{default:t(()=>[r(m,{class:"tabbar-icon"},{default:t(()=>[r(n,{name:"home",size:16,color:"home"===b.currentPage?"#16a34a":"#64748b"},null,8,["color"])]),_:1}),r(g,{class:"tabbar-text"},{default:t(()=>[o("服务预约")]),_:1})]),_:1},8,["class"]),r(m,{class:l(["tabbar-item",{active:"report"===b.currentPage}]),onClick:u[1]||(u[1]=a=>p("report"))},{default:t(()=>[r(m,{class:"tabbar-icon"},{default:t(()=>[r(n,{name:"report",size:16,color:"report"===b.currentPage?"#16a34a":"#64748b"},null,8,["color"])]),_:1}),r(g,{class:"tabbar-text"},{default:t(()=>[o("洗美报告")]),_:1})]),_:1},8,["class"]),r(m,{class:l(["tabbar-item",{active:"mine"===b.currentPage}]),onClick:u[2]||(u[2]=a=>p("mine"))},{default:t(()=>[r(m,{class:"tabbar-icon"},{default:t(()=>[r(n,{name:"mine",size:16,color:"mine"===b.currentPage?"#16a34a":"#64748b"},null,8,["color"])]),_:1}),r(g,{class:"tabbar-text"},{default:t(()=>[o("我的")]),_:1})]),_:1},8,["class"])]),_:1})}}},[["__scopeId","data-v-09922235"]]),m=()=>({goPage:a=>{u(a)},navigateTo:u});export{b as T,m as u};

View File

@ -1,16 +0,0 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<link rel="stylesheet" href="/assets/uni.dacb0817.css">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>宠伴生活馆</title>
<meta name="description" content="宠伴生活馆 - 宠物服务,让爱更专业">
<script type="module" crossorigin src="/assets/index-DrZc8biM.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-Cg0PdC_j.css">
</head>
<body>
<div id="app"></div>
</body>
</html>

View File

@ -1,92 +0,0 @@
#!/usr/bin/env python3
"""Generate simple PNG icons for tabBar using only stdlib"""
import struct, zlib, math, os
def save_png(img_data, w, h, filepath):
"""img_data: list of (r,g,b) tuples, row-major"""
def chunk(ctype, data):
c = ctype + data
return struct.pack('>I', len(data)) + c + struct.pack('>I', zlib.crc32(c) & 0xffffffff)
sig = b'\x89PNG\r\n\x1a\n'
ihdr = chunk(b'IHDR', struct.pack('>IIBBBBB', w, h, 8, 2, 0, 0, 0))
raw = b''
for row in img_data:
raw += b'\x00'
for r, g, b in row:
raw += bytes([r, g, b])
idat = chunk(b'IDAT', zlib.compress(raw, 9))
iend = chunk(b'IEND', b'')
with open(filepath, 'wb') as f:
f.write(sig + ihdr + idat + iend)
def draw_circle(img, w, h, cx, cy, radius, r, g, b, fill=True):
for y in range(h):
for x in range(w):
d = math.sqrt((x-cx)**2 + (y-cy)**2)
if fill and d <= radius:
img[y][x] = (r, g, b)
elif not fill and abs(d - radius) < 1.0:
img[y][x] = (r, g, b)
def solid_img(w, h, r, g, b):
return [[(r, g, b)] * w for _ in range(h)]
def home_icon(active):
img = solid_img(81, 81, 0, 0, 0)
base = (180, 180, 180) if not active else (7, 193, 96)
accent = (7, 193, 96) if active else (120, 120, 120)
# house shape: triangle roof + rectangle body
roof = [(40,15),(15,40),(66,40)] # simplified triangle roof points
for y in range(81):
for x in range(81):
# roof triangle
if y <= 40 and x >= 15 and x <= 66:
in_roof = (y - 15) >= abs(x - 40) * 0.8
else:
in_roof = False
# body rectangle
in_body = x >= 22 and x <= 60 and y >= 38 and y <= 66
if in_roof or in_body:
img[y][x] = accent
return img
def report_icon(active):
img = solid_img(81, 81, 0, 0, 0)
accent = (7, 193, 96) if active else (180, 180, 180)
for y in range(81):
for x in range(81):
# doc rectangle with folded corner
in_doc = x >= 20 and x <= 62 and y >= 12 and y <= 70
corner = x >= 46 and y <= 28 and (x - 46 + y - 28) <= 6
if in_doc and not corner:
img[y][x] = accent
if 28 <= y <= 50 and x >= 30 and x <= 52 and (y - 28) > abs(x - 41) * 0.7:
img[y][x] = (255,255,255) if active else (220,220,220)
return img
def mine_icon(active):
img = solid_img(81, 81, 0, 0, 0)
accent = (7, 193, 96) if active else (180, 180, 180)
cx, cy = 40, 36
r = 18
for y in range(81):
for x in range(81):
d = math.sqrt((x-cx)**2 + (y-cy)**2)
if d <= r:
img[y][x] = accent
# shoulders
for y in range(55, 75):
for x in range(15, 66):
d = math.sqrt((x-40)**2/900 + (y-62)**2/225)
if d <= 1:
img[y][x] = accent
return img
static = '/Users/wac/Desktop/www/_src/petstore/frontend/src/static'
save_png(home_icon(False), 81, 81, f'{static}/tab-home.png')
save_png(home_icon(True), 81, 81, f'{static}/tab-home-active.png')
save_png(report_icon(False), 81, 81, f'{static}/tab-report.png')
save_png(report_icon(True), 81, 81, f'{static}/tab-report-active.png')
save_png(mine_icon(False), 81, 81, f'{static}/tab-mine.png')
save_png(mine_icon(True), 81, 81, f'{static}/tab-mine-active.png')
print('done')

Binary file not shown.

Before

Width:  |  Height:  |  Size: 228 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 196 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 224 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 210 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 231 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 227 B

View File

@ -1 +0,0 @@
"use strict";const e=require("../common/vendor.js"),t="https://api.s-good.com".replace(/\/$/,""),r=`${t}/api`,s=t=>new Promise((s,o)=>{e.index.request({url:r+t.url,method:t.method||"GET",data:t.data||{},header:t.header||{},success:e=>s(e.data),fail:e=>o(e)})}),o=(e,t={})=>{const r=Object.entries(t).filter(([,e])=>null!=e).map(([e,t])=>`${encodeURIComponent(e)}=${encodeURIComponent(t)}`).join("&");return s({url:`${e}${r?"?"+r:""}`,method:"GET"})},p=(e,t={})=>s({url:e,method:"POST",data:t,header:{"Content-Type":"application/json"}}),a=(e,t={})=>s({url:e,method:"PUT",data:t,header:{"Content-Type":"application/json"}}),n=e=>s({url:e,method:"DELETE"});exports.API_ORIGIN=t,exports.BASE_URL=r,exports.cancelAppointment=e=>a(`/appointment/status?id=${e}&status=cancel`),exports.createAppointment=e=>p("/appointment/create",e),exports.createReport=e=>p("/report/create",e),exports.createServiceType=(e,t)=>p("/service-type/create",{storeId:e,name:t}),exports.createStaff=e=>p("/user/create-staff",e),exports.deleteServiceType=e=>n(`/service-type/delete?id=${e}`),exports.deleteStaff=e=>n(`/user/staff?staffId=${e}`),exports.getAppointmentList=(e,t)=>o("/appointment/list",{userId:e,storeId:t}),exports.getReportByToken=e=>o("/report/get",{token:e}),exports.getReportList=e=>o("/report/list",e),exports.getServiceTypeList=e=>o("/service-type/list",{storeId:e}),exports.getStaffList=e=>o("/user/staff-list",{storeId:e}),exports.imgUrl=e=>e?e.startsWith("http")?e:`${t}${e}`:"",exports.login=(e,t)=>p("/user/login",{phone:e,code:t}),exports.registerBoss=e=>p("/user/register-boss",e),exports.registerStaff=e=>p("/user/register-staff",e),exports.sendSms=e=>p("/sms/send",{phone:e}),exports.startAppointment=(e,t)=>p("/appointment/start",{appointmentId:e,staffUserId:t}),exports.updateStore=e=>a("/store/update",e),exports.updateUser=e=>a("/user/update",e);

View File

@ -1 +0,0 @@
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./common/vendor.js"),n=require("./utils/session.js");Math;function t(){setTimeout(()=>{try{if(n.isLoggedIn())return;const t=getCurrentPages();if(0===t.length)return;const r=t[t.length-1];if((e=>!(!e||!e.includes("pages/login/Login")&&!e.includes("pages/report-view/reportView")))(r&&r.route?r.route:""))return;e.index.reLaunch({url:"/pages/login/Login"})}catch(t){e.index.reLaunch({url:"/pages/login/Login"})}},50)}const r={onLaunch(){t()},onShow(){t()}};function o(){return{app:e.createSSRApp(r)}}o().app.mount("#app"),exports.createApp=o;

View File

@ -1,32 +0,0 @@
{
"pages": [
"pages/login/Login",
"pages/home/Home",
"pages/report/Report",
"pages/mine/Mine",
"pages/mine/Staff",
"pages/mine/ServiceType",
"pages/mine/Store",
"pages/mine/MyReports",
"pages/mine/MyOrders",
"pages/mine/Profile",
"pages/report-view/reportView"
],
"window": {
"navigationStyle": "custom",
"navigationBarTextStyle": "white",
"navigationBarTitleText": "宠伴生活馆",
"navigationBarBackgroundColor": "#07c160",
"backgroundColor": "#F8F8F8"
},
"lazyCodeLoading": "requiredComponents",
"permission": {
"scope.userLocation": {
"desc": "用于在地图上选择门店位置"
}
},
"requiredPrivateInfos": [
"chooseLocation"
],
"usingComponents": {}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
"use strict";const e=require("../common/vendor.js");if(!Array){(e.resolveComponent("path")+e.resolveComponent("svg"))()}const C={__name:"AppIcon",props:{name:{type:String,required:!0},size:{type:Number,default:18},color:{type:String,default:"#475569"}},setup(C){const o=C,M={home:["M3 10.5L12 3L21 10.5","M6 9.5V20H18V9.5","M10 20V14H14V20"],report:["M7 3.5H14L18 7.5V20.5H7V3.5Z","M14 3.5V7.5H18","M9.5 12H15.5","M9.5 16H14"],mine:["M12 12C14.4853 12 16.5 9.98528 16.5 7.5C16.5 5.01472 14.4853 3 12 3C9.51472 3 7.5 5.01472 7.5 7.5C7.5 9.98528 9.51472 12 12 12Z","M4 20C4.9 16.7 8 14.5 12 14.5C16 14.5 19.1 16.7 20 20"],staff:["M7 11C8.65685 11 10 9.65685 10 8C10 6.34315 8.65685 5 7 5C5.34315 5 4 6.34315 4 8C4 9.65685 5.34315 11 7 11Z","M17 10C18.3807 10 19.5 8.88071 19.5 7.5C19.5 6.11929 18.3807 5 17 5C15.6193 5 14.5 6.11929 14.5 7.5C14.5 8.88071 15.6193 10 17 10Z","M3.5 19C4.1 16.7 5.9 15.2 8.4 15.2C10.9 15.2 12.7 16.7 13.3 19","M14 19C14.4 17.3 15.6 16.2 17.3 16.2C19 16.2 20.2 17.3 20.6 19"],service:["M5 8.5H19","M7.5 8.5V6.5C7.5 5.4 8.4 4.5 9.5 4.5H14.5C15.6 4.5 16.5 5.4 16.5 6.5V8.5","M6.5 8.5L7.2 18.5H16.8L17.5 8.5","M10 12.5L14 12.5"],store:["M4 9L5.5 4.5H18.5L20 9","M5 9V19H19V9","M8.5 19V14H15.5V19"],profile:["M12 12C14.4853 12 16.5 9.98528 16.5 7.5C16.5 5.01472 14.4853 3 12 3C9.51472 3 7.5 5.01472 7.5 7.5C7.5 9.98528 9.51472 12 12 12Z","M4.5 20C5.5 16.9 8.4 14.8 12 14.8C15.6 14.8 18.5 16.9 19.5 20"],orders:["M6 5H18","M6 9H18","M6 13H14","M6 3.5H18C18.8 3.5 19.5 4.2 19.5 5V19C19.5 19.8 18.8 20.5 18 20.5H6C5.2 20.5 4.5 19.8 4.5 19V5C4.5 4.2 5.2 3.5 6 3.5Z"],logout:["M10 6V4.5H5V19.5H10V18","M14 8L18 12L14 16","M18 12H9"],back:["M15 5L8 12L15 19"],close:["M6 6L18 18","M18 6L6 18"],camera:["M4.5 8.5H8L9.5 6.5H14.5L16 8.5H19.5V18.5H4.5V8.5Z","M12 16C13.933 16 15.5 14.433 15.5 12.5C15.5 10.567 13.933 9 12 9C10.067 9 8.5 10.567 8.5 12.5C8.5 14.433 10.067 16 12 16"],phone:["M2.25 6.75C2.25 15.03 8.97 21.75 17.25 21.75H19.5C20.7426 21.75 21.75 20.7426 21.75 19.5V19.128C21.75 18.612 21.399 18.162 20.898 18.03L16.475 16.924C16.035 16.814 15.573 16.979 15.303 17.354L14.333 18.647C14.051 19.047 13.53 19.188 13.098 19.035C10.834 18.208 8.792 16.166 7.965 13.902C7.812 13.47 7.953 12.949 8.353 12.667L9.646 11.697C10.021 11.427 10.186 10.965 10.076 10.525L8.97 6.102C8.838 5.601 8.388 5.25 7.872 5.25H4.5C3.25736 5.25 2.25 6.25736 2.25 7.5V6.75Z"],pin:["M15 10.5a3 3 0 11-6 0 3 3 0 016 0z","M19.5 10.5c0 7.142-7.5 11.25-7.5 11.25S4.5 17.642 4.5 10.5a7.5 7.5 0 1115 0z"]},r=e.computed(()=>M[o.name]||M.profile);return(o,M)=>({a:e.f(r.value,(o,M,r)=>({a:`${C.name}-${M}`,b:"385dda18-1-"+r+",385dda18-0",c:e.p({d:o,stroke:C.color,"stroke-width":"1.9","stroke-linecap":"round","stroke-linejoin":"round"})})),b:e.p({viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"}),c:`${C.size}px`,d:`${C.size}px`})}},o=e._export_sfc(C,[["__scopeId","data-v-385dda18"]]);wx.createComponent(o);

View File

@ -1,4 +0,0 @@
{
"component": true,
"usingComponents": {}
}

View File

@ -1 +0,0 @@
<view class="app-icon data-v-385dda18" style="{{'width:' + c + ';' + ('height:' + d)}}"><svg wx:if="{{b}}" class="data-v-385dda18" u-s="{{['d']}}" u-i="385dda18-0" bind:__l="__l" u-p="{{b}}"><path wx:for="{{a}}" wx:for-item="d" wx:key="a" class="data-v-385dda18" u-i="{{d.b}}" bind:__l="__l" u-p="{{d.c}}"/></svg></view>

View File

@ -1 +0,0 @@
.app-icon.data-v-385dda18{display:inline-flex;align-items:center;justify-content:center}.app-icon svg.data-v-385dda18{width:100%;height:100%}

View File

@ -1 +0,0 @@
"use strict";const e=require("../common/vendor.js");Math||r();const r=()=>"./AppIcon.js",o={__name:"TabBar",props:{currentPage:{type:String,default:"home"}},emits:["change"],setup(r,{emit:o}){const n=r,t=o;function a(e){n.currentPage!==e&&t("change",e)}return(r,o)=>({a:e.p({name:"home",size:16,color:"home"===n.currentPage?"#16a34a":"#64748b"}),b:"home"===n.currentPage?1:"",c:e.o(e=>a("home")),d:e.p({name:"report",size:16,color:"report"===n.currentPage?"#16a34a":"#64748b"}),e:"report"===n.currentPage?1:"",f:e.o(e=>a("report")),g:e.p({name:"mine",size:16,color:"mine"===n.currentPage?"#16a34a":"#64748b"}),h:"mine"===n.currentPage?1:"",i:e.o(e=>a("mine"))})}},n=e._export_sfc(o,[["__scopeId","data-v-09922235"]]);wx.createComponent(n);

View File

@ -1,6 +0,0 @@
{
"component": true,
"usingComponents": {
"app-icon": "./AppIcon"
}
}

View File

@ -1 +0,0 @@
<view class="tabbar data-v-09922235"><view class="{{['tabbar-item', 'data-v-09922235', b && 'active']}}" bindtap="{{c}}"><view class="tabbar-icon data-v-09922235"><app-icon wx:if="{{a}}" class="data-v-09922235" u-i="09922235-0" bind:__l="__l" u-p="{{a}}"/></view><text class="tabbar-text data-v-09922235">服务预约</text></view><view class="{{['tabbar-item', 'data-v-09922235', e && 'active']}}" bindtap="{{f}}"><view class="tabbar-icon data-v-09922235"><app-icon wx:if="{{d}}" class="data-v-09922235" u-i="09922235-1" bind:__l="__l" u-p="{{d}}"/></view><text class="tabbar-text data-v-09922235">洗美报告</text></view><view class="{{['tabbar-item', 'data-v-09922235', h && 'active']}}" bindtap="{{i}}"><view class="tabbar-icon data-v-09922235"><app-icon wx:if="{{g}}" class="data-v-09922235" u-i="09922235-2" bind:__l="__l" u-p="{{g}}"/></view><text class="tabbar-text data-v-09922235">我的</text></view></view>

View File

@ -1 +0,0 @@
.tabbar.data-v-09922235{position:fixed;bottom:0;left:0;right:0;height:calc(104rpx + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);background:rgba(255,255,255,.96);backdrop-filter:blur(8px);border-top:1px solid #e8edf4;display:flex;flex-direction:row;z-index:999}.tabbar-item.data-v-09922235{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:#94a3b8;transition:color .2s ease}.tabbar-item.active.data-v-09922235{color:#16a34a}.tabbar-icon.data-v-09922235{width:40rpx;height:40rpx;border-radius:11rpx;background:#eaf0f7;display:flex;align-items:center;justify-content:center;margin-bottom:4rpx}.tabbar-item.active .tabbar-icon.data-v-09922235{background:#dcfce7}.tabbar-text.data-v-09922235{font-size:22rpx;line-height:1;font-weight:600}

View File

@ -1 +0,0 @@
"use strict";const a=require("../utils/globalState.js");exports.useNavigator=()=>({goPage:t=>{a.navigateTo(t)},navigateTo:a.navigateTo});

File diff suppressed because one or more lines are too long

View File

@ -1,6 +0,0 @@
{
"usingComponents": {
"tab-bar": "../../components/TabBar",
"app-icon": "../../components/AppIcon"
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
"use strict";const e=require("../../common/vendor.js"),o=require("../../api/index.js"),a=require("../../utils/session.js"),l=require("../../utils/globalState.js"),n={__name:"Login",setup(n){const s=e.ref("login"),t=e.reactive({phone:"13800138001",code:"123456"}),r=e.reactive({storeName:"",bossName:"",phone:"",password:""}),u=e.reactive({inviteCode:"",name:"",phone:"",password:""}),i=e.ref(!1),v=e.ref(!1),d=e.ref(0),c=e.ref(!1),p=e.ref(!1),h=e.ref({store:{},user:{}});let g=null;const f=o=>e.index.showToast({title:o,icon:"none"}),m=async()=>{if(!t.phone||11!==t.phone.length)return f("请输入正确的手机号");const e=await o.sendSms(t.phone);200===e.code?(f("验证码已发送"),d.value=60,g=setInterval(()=>{d.value--,d.value<=0&&clearInterval(g)},1e3)):f(e.message||"发送失败")},w=async()=>{if(!t.phone||11!==t.phone.length)return f("请输入正确的手机号");if(!t.code||6!==t.code.length)return f("请输入6位验证码");i.value=!0;try{const e=await o.login(t.phone,t.code);200===e.code?(a.setUserSession(e.data.user),a.setStoreSession(e.data.store),l.navigateTo("home")):f(e.message||"登录失败")}catch(e){f("网络异常,请检查服务是否启动")}finally{i.value=!1}},b=()=>{f("跳转到微信授权..."),setTimeout(()=>{a.setUserSession({id:99,name:"微信用户",phone:"",role:"staff"}),a.setStoreSession({id:2,name:"宠伴生活馆测试店"}),l.navigateTo("home")},1500)},S=async()=>{const e=r;if(!e.storeName)return f("请输入店铺名称");if(!e.bossName)return f("请输入您的姓名");if(!e.phone||11!==e.phone.length)return f("请输入正确的手机号");if(!e.password||e.password.length<6)return f("密码至少6位");v.value=!0;const a=await o.registerBoss(e);v.value=!1,200===a.code?(h.value=a.data,c.value=!0):f(a.message||"注册失败")},C=async()=>{const e=u;if(!e.inviteCode||8!==e.inviteCode.length)return f("请输入8位邀请码");if(!e.name)return f("请输入您的姓名");if(!e.phone||11!==e.phone.length)return f("请输入正确的手机号");if(!e.password||e.password.length<6)return f("密码至少6位");v.value=!0;const a=await o.registerStaff(e);v.value=!1,200===a.code?(h.value=a.data,p.value=!0):f(a.message||"注册失败")},N=()=>{var o,a;e.index.setClipboardData({data:(null==(a=null==(o=h.value)?void 0:o.store)?void 0:a.inviteCode)||"",success:()=>e.index.showToast({title:"邀请码已复制",icon:"none"})})},x=()=>{s.value="login",c.value=!1,p.value=!1};return e.onUnmounted(()=>{g&&clearInterval(g)}),(o,a)=>{var l,n,g,f,y,T,_,j,q,I,U,B,D,L;return e.e({a:c.value},c.value?{b:e.t(null==(n=null==(l=h.value)?void 0:l.store)?void 0:n.name),c:e.t(null==(f=null==(g=h.value)?void 0:g.user)?void 0:f.phone),d:e.t(null==(T=null==(y=h.value)?void 0:y.user)?void 0:T.password),e:e.t(null==(j=null==(_=h.value)?void 0:_.store)?void 0:j.inviteCode),f:e.o(N),g:e.o(x)}:p.value?{i:e.t(null==(I=null==(q=h.value)?void 0:q.store)?void 0:I.name),j:e.t(null==(B=null==(U=h.value)?void 0:U.store)?void 0:B.name),k:e.t(null==(L=null==(D=h.value)?void 0:D.user)?void 0:L.phone),l:e.o(x)}:"login"===s.value?{n:t.phone,o:e.o(e=>t.phone=e.detail.value),p:t.code,q:e.o(e=>t.code=e.detail.value),r:e.t(d.value>0?d.value+"s":"获取验证码"),s:d.value>0,t:e.o(m),v:i.value,w:e.o(w),x:e.o(b),y:e.o(e=>s.value="staff-reg"),z:e.o(e=>s.value="boss-reg")}:"boss-reg"===s.value?{B:r.storeName,C:e.o(e=>r.storeName=e.detail.value),D:r.bossName,E:e.o(e=>r.bossName=e.detail.value),F:r.phone,G:e.o(e=>r.phone=e.detail.value),H:r.password,I:e.o(e=>r.password=e.detail.value),J:v.value,K:e.o(S),L:e.o(e=>s.value="login")}:"staff-reg"===s.value?{N:u.inviteCode,O:e.o(e=>u.inviteCode=e.detail.value),P:u.name,Q:e.o(e=>u.name=e.detail.value),R:u.phone,S:e.o(e=>u.phone=e.detail.value),T:u.password,U:e.o(e=>u.password=e.detail.value),V:v.value,W:e.o(C),X:e.o(e=>s.value="login")}:{},{h:p.value,m:"login"===s.value,A:"boss-reg"===s.value,M:"staff-reg"===s.value})}}},s=e._export_sfc(n,[["__scopeId","data-v-3e0cfe9c"]]);wx.createPage(s);

View File

@ -1,3 +0,0 @@
{
"usingComponents": {}
}

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
.login-page.data-v-3e0cfe9c{min-height:100vh;background:radial-gradient(circle at top left,#22c55e,#16a34a 46%,#15803d);display:flex;flex-direction:column;padding:60px 32px 32px}.login-logo.data-v-3e0cfe9c{text-align:center;margin-bottom:44px}.login-logo-text.data-v-3e0cfe9c{font-size:30px;font-weight:800;color:#fff;letter-spacing:2px;text-shadow:0 4px 12px rgba(0,0,0,.18)}.login-logo-sub.data-v-3e0cfe9c{font-size:13px;color:rgba(255,255,255,.82);margin-top:6px}.form-title.data-v-3e0cfe9c{font-size:18px;font-weight:600;color:#333;margin-bottom:20px;text-align:center}.login-divider.data-v-3e0cfe9c{text-align:center;margin:16px 0 12px;color:#999;font-size:13px;position:relative}.login-divider.data-v-3e0cfe9c:before,.login-divider.data-v-3e0cfe9c:after{content:"";position:absolute;top:50%;width:28%;height:1px;background:#eee}.login-divider.data-v-3e0cfe9c:before{left:0}.login-divider.data-v-3e0cfe9c:after{right:0}.links.data-v-3e0cfe9c{display:flex;justify-content:space-between;font-size:13px}.link.data-v-3e0cfe9c{color:#16a34a;font-weight:600;cursor:pointer}.invite-hint.data-v-3e0cfe9c{background:#f0f9f4;border:1px solid #b7eb8f;border-radius:8px;padding:12px;font-size:13px;color:#52c41a;margin-bottom:12px}.wechat-icon.data-v-3e0cfe9c{margin-right:6px}.success-icon.data-v-3e0cfe9c{font-size:60px;text-align:center;margin-bottom:16px}.success-title.data-v-3e0cfe9c{font-size:20px;font-weight:600;text-align:center;color:#333;margin-bottom:8px}.success-sub.data-v-3e0cfe9c{font-size:14px;color:#999;text-align:center;margin-bottom:24px}.success-info.data-v-3e0cfe9c{background:#f9f9f9;border-radius:12px;padding:16px;margin-bottom:20px}.info-row.data-v-3e0cfe9c{display:flex;justify-content:space-between;padding:6px 0;font-size:14px}.info-row .label.data-v-3e0cfe9c{color:#999}.info-row .value.data-v-3e0cfe9c{color:#333;font-weight:500}.sms-field.data-v-3e0cfe9c{display:flex;align-items:center;gap:8px;margin-bottom:12px}.sms-input.data-v-3e0cfe9c{flex:1}.top-gap-sm.data-v-3e0cfe9c{margin-top:12px}.top-gap-md.data-v-3e0cfe9c{margin-top:20px}

View File

@ -1 +0,0 @@
"use strict";const e=require("../../common/vendor.js"),r=require("../../utils/session.js"),n=require("../../composables/useNavigator.js");Math||(t+o)();const o=()=>"../../components/TabBar.js",t=()=>"../../components/AppIcon.js",s={__name:"Mine",emits:["change-page"],setup(o,{emit:t}){const s=r.getUserSession(),{goPage:a,navigateTo:u}=n.useNavigator(),i=(()=>{var r,n,o,t;let s=((null==(n=(r=e.index).getSystemInfoSync)?void 0:n.call(r).statusBarHeight)||20)+12;const a=null==(t=(o=e.index).getMenuButtonBoundingClientRect)?void 0:t.call(o);return a&&a.top&&a.height&&(s=a.top+a.height+8),`padding-top:${s}px;`})(),c=e.computed(()=>s.name?s.name.slice(0,1).toUpperCase():"?"),p=e.computed(()=>{var e;if(s.avatar)return{};const r=["#ff7c43","#07c160","#8b6914","#e06040","#5090d0"];return{background:r[((null==(e=s.name)?void 0:e.charCodeAt(0))||0)%r.length]}}),f=()=>{e.index.showModal({title:"提示",content:"确定退出登录?",success:e=>{e.confirm&&(r.clearSession(),u("login"))}})};return(r,n)=>e.e({a:e.unref(s).avatar},e.unref(s).avatar?{b:e.unref(s).avatar}:{c:e.t(c.value)},{d:e.s(p.value),e:e.t(e.unref(s).name),f:e.t(e.unref(s).phone),g:e.t("boss"===e.unref(s).role?"店长":"customer"===e.unref(s).role?"客户":"员工"),h:e.s(e.unref(i)),i:e.o(r=>e.unref(u)("profile")),j:"boss"===e.unref(s).role},"boss"===e.unref(s).role?{k:e.p({name:"staff",size:15}),l:e.o(r=>e.unref(u)("staff")),m:e.p({name:"service",size:15}),n:e.o(r=>e.unref(u)("serviceType")),o:e.p({name:"store",size:15}),p:e.o(r=>e.unref(u)("store"))}:{},{q:e.p({name:"profile",size:15}),r:e.o(r=>e.unref(u)("profile")),s:"customer"!==e.unref(s).role},"customer"!==e.unref(s).role?{t:e.p({name:"report",size:15}),v:e.o(r=>e.unref(u)("myReports"))}:{},{w:e.p({name:"orders",size:15}),x:e.o(r=>e.unref(u)("myOrders")),y:e.p({name:"logout",size:15,color:"#dc2626"}),z:e.o(f),A:e.o(e.unref(a)),B:e.p({"current-page":"mine"})})}},a=e._export_sfc(s,[["__scopeId","data-v-5428c025"]]);wx.createPage(a);

View File

@ -1,6 +0,0 @@
{
"usingComponents": {
"tab-bar": "../../components/TabBar",
"app-icon": "../../components/AppIcon"
}
}

View File

@ -1 +0,0 @@
<view class="mine-page data-v-5428c025"><view class="user-card data-v-5428c025" style="{{h}}" bindtap="{{i}}"><view class="user-info data-v-5428c025"><view class="user-avatar data-v-5428c025" style="{{d}}"><image wx:if="{{a}}" src="{{b}}" class="avatar-img data-v-5428c025"/><label wx:else class="avatar-initials data-v-5428c025">{{c}}</label></view><view class="user-info-content data-v-5428c025"><view class="user-name data-v-5428c025">{{e}}</view><view class="user-phone data-v-5428c025">{{f}}</view><view class="role-pill data-v-5428c025">{{g}}</view></view></view></view><view wx:if="{{j}}" class="menu-section data-v-5428c025"><view class="menu-card data-v-5428c025"><view class="menu-title data-v-5428c025">店铺管理</view><view class="menu-item data-v-5428c025" bindtap="{{l}}"><view class="menu-left data-v-5428c025"><label class="menu-icon data-v-5428c025"><app-icon wx:if="{{k}}" class="data-v-5428c025" u-i="5428c025-0" bind:__l="__l" u-p="{{k}}"/></label><label class="menu-text data-v-5428c025">员工管理</label></view><label class="menu-arrow data-v-5428c025"></label></view><view class="menu-item data-v-5428c025" bindtap="{{n}}"><view class="menu-left data-v-5428c025"><label class="menu-icon data-v-5428c025"><app-icon wx:if="{{m}}" class="data-v-5428c025" u-i="5428c025-1" bind:__l="__l" u-p="{{m}}"/></label><label class="menu-text data-v-5428c025">服务类型</label></view><label class="menu-arrow data-v-5428c025"></label></view><view class="menu-item data-v-5428c025" bindtap="{{p}}"><view class="menu-left data-v-5428c025"><label class="menu-icon data-v-5428c025"><app-icon wx:if="{{o}}" class="data-v-5428c025" u-i="5428c025-2" bind:__l="__l" u-p="{{o}}"/></label><label class="menu-text data-v-5428c025">店铺设置</label></view><label class="menu-arrow data-v-5428c025"></label></view></view></view><view class="menu-section data-v-5428c025"><view class="menu-card data-v-5428c025"><view class="menu-title data-v-5428c025">个人中心</view><view class="menu-item data-v-5428c025" bindtap="{{r}}"><view class="menu-left data-v-5428c025"><label class="menu-icon data-v-5428c025"><app-icon wx:if="{{q}}" class="data-v-5428c025" u-i="5428c025-3" bind:__l="__l" u-p="{{q}}"/></label><label class="menu-text data-v-5428c025">个人信息</label></view><label class="menu-arrow data-v-5428c025"></label></view><view wx:if="{{s}}" class="menu-item data-v-5428c025" bindtap="{{v}}"><view class="menu-left data-v-5428c025"><label class="menu-icon data-v-5428c025"><app-icon wx:if="{{t}}" class="data-v-5428c025" u-i="5428c025-4" bind:__l="__l" u-p="{{t}}"/></label><label class="menu-text data-v-5428c025">我的报告</label></view><label class="menu-arrow data-v-5428c025"></label></view><view class="menu-item data-v-5428c025" bindtap="{{x}}"><view class="menu-left data-v-5428c025"><label class="menu-icon data-v-5428c025"><app-icon wx:if="{{w}}" class="data-v-5428c025" u-i="5428c025-5" bind:__l="__l" u-p="{{w}}"/></label><label class="menu-text data-v-5428c025">我的订单</label></view><label class="menu-arrow data-v-5428c025"></label></view></view></view><view class="menu-section data-v-5428c025"><button class="logout-btn data-v-5428c025" bindtap="{{z}}"><app-icon wx:if="{{y}}" class="data-v-5428c025" u-i="5428c025-6" bind:__l="__l" u-p="{{y}}"/>退出登录</button></view></view><tab-bar wx:if="{{B}}" class="data-v-5428c025" bindchange="{{A}}" u-i="5428c025-7" bind:__l="__l" u-p="{{B}}"/>

View File

@ -1 +0,0 @@
.mine-page.data-v-5428c025{padding-bottom:140rpx;background:#f5f7fb;min-height:100vh}.user-card.data-v-5428c025{background:linear-gradient(135deg,#22c55e,#16a34a);border-radius:0 0 24px 24px;padding:24px 16px 22px;color:#fff;cursor:pointer;box-shadow:0 10px 24px rgba(34,197,94,.25)}.user-info.data-v-5428c025{display:flex;align-items:center;gap:12px}.user-info-content.data-v-5428c025{flex:1}.user-avatar.data-v-5428c025{width:58px;height:58px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:24px;overflow:hidden;flex-shrink:0;border:2px solid rgba(255,255,255,.3)}.avatar-img.data-v-5428c025{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.avatar-initials.data-v-5428c025{color:#fff;font-size:22px;font-weight:700}.user-name.data-v-5428c025{font-size:21px;font-weight:700;color:#fff;line-height:1.1}.user-phone.data-v-5428c025{font-size:14px;opacity:.92;margin-top:4px}.role-pill.data-v-5428c025{margin-top:8px;display:inline-flex;align-items:center;height:24px;padding:0 10px;border-radius:999px;font-size:12px;font-weight:700;background:rgba(255,255,255,.92);color:#166534}.menu-section.data-v-5428c025{padding:0 14px;margin-top:12px}.menu-card.data-v-5428c025{background:#fff;border:1px solid #e6ecf4;border-radius:16px;box-shadow:0 8px 20px rgba(15,23,42,.05);overflow:hidden}.menu-title.data-v-5428c025{font-size:12px;color:#94a3b8;font-weight:700;padding:12px 14px 8px}.menu-item.data-v-5428c025{min-height:54px;padding:0 14px;display:flex;align-items:center;justify-content:space-between}.menu-item+.menu-item.data-v-5428c025{border-top:1px solid #eef2f7}.menu-left.data-v-5428c025{display:flex;align-items:center;gap:10px}.menu-icon.data-v-5428c025{width:28px;height:28px;border-radius:8px;background:#f1f5f9;display:inline-flex;align-items:center;justify-content:center;font-size:16px}.menu-text.data-v-5428c025{font-size:16px;color:#1f2937;font-weight:600}.menu-arrow.data-v-5428c025{color:#c4cfdd;font-size:18px}.logout-btn.data-v-5428c025{width:100%;height:44px;display:inline-flex;align-items:center;justify-content:center;gap:6px;border-radius:12px;border:1px solid #fecaca;background:#fff1f2;color:#dc2626;font-size:15px;font-weight:700}

View File

@ -1 +0,0 @@
"use strict";const e=require("../../common/vendor.js"),t=require("../../utils/globalState.js"),n=require("../../api/index.js"),a=require("../../utils/session.js"),i=require("../../utils/datetime.js"),s=require("../../utils/appointment.js");Math||o();const o=()=>"../../components/AppIcon.js",r={__name:"MyOrders",emits:["change-page"],setup(o,{emit:r}){const p=a.getUserSession(),u=p.id,c=(()=>{var t,n,a,i;const s=(null==(n=(t=e.index).getSystemInfoSync)?void 0:n.call(t).statusBarHeight)||20;let o=s+44;const r=null==(i=(a=e.index).getMenuButtonBoundingClientRect)?void 0:i.call(a);if(r&&r.top&&r.height){o=s+2*Math.max(r.top-s,4)+r.height}return`padding-top:${s}px;height:${o}px;`})(),m=e.ref("new"),d=e.ref([]),l=[{title:"待确认",name:"new"},{title:"进行中",name:"doing"},{title:"已完成",name:"done"}],g=e.computed(()=>d.value.filter(e=>"new"===m.value?"new"===e.status:"doing"===m.value?"doing"===e.status:"done"!==m.value||("done"===e.status||"cancel"===e.status))),f=async()=>{if(!u)return;const e=await n.getAppointmentList(u);200===e.code&&(d.value=e.data.map(e=>({id:e.id,title:e.serviceType||"洗澡美容预约",desc:`${e.petType||""} - ${e.petName||""}`,time:i.formatDateTimeCN(e.appointmentTime),status:e.status||"new",statusText:s.getAppointmentStatusText(e.status),petName:e.petName,petType:e.petType,serviceType:e.serviceType,appointmentTime:e.appointmentTime})))},v=async t=>{e.index.showModal({title:"提示",content:"确定取消该预约?",success:async a=>{if(!a.confirm)return;200===(await n.cancelAppointment(t.id)).code&&(e.index.showToast({title:"已取消",icon:"success"}),f())}})};return e.onMounted(()=>f()),(a,i)=>e.e({a:e.p({name:"back",size:18,color:"#ffffff"}),b:e.o(n=>e.unref(t.navigateTo)("mine")),c:e.s(e.unref(c)),d:"customer"===e.unref(p).role},(e.unref(p).role,{}),{e:e.f(l,(t,n,a)=>({a:e.t(t.title),b:t.name,c:e.n({active:m.value===t.name}),d:e.o(e=>m.value=t.name,t.name)})),f:e.f(g.value,(a,i,o)=>{return e.e({a:e.t(a.title),b:e.t(a.statusText),c:e.n(`van-tag van-tag--${r=a.status,s.getAppointmentTagType(r)}`),d:"ab8e2a9f-1-"+o,e:e.t(a.desc),f:"ab8e2a9f-2-"+o,g:e.t(a.time)},"customer"!==e.unref(p).role?e.e({h:"new"===a.status},"new"===a.status?{i:e.o(t=>(async t=>{const a=await n.startAppointment(t.id,p.id);200===a.code?(e.index.showToast({title:"已开始服务",icon:"success"}),f()):e.index.showToast({title:a.message||"操作失败",icon:"none"})})(a),a.id),j:e.o(e=>v(a),a.id)}:"doing"===a.status?{l:e.o(n=>(n=>{e.index.setStorageSync("petstore_report_prefill",JSON.stringify({appointmentId:n.id,petName:n.petName,serviceType:n.serviceType,appointmentTime:n.appointmentTime})),t.navigateTo("report")})(a),a.id)}:{},{k:"doing"===a.status}):e.e({m:"new"===a.status},"new"===a.status?{n:e.o(e=>v(a),a.id)}:{}),{o:a.id});var r}),g:e.p({name:"profile",size:12}),h:e.p({name:"orders",size:12,color:"#94a3b8"}),i:"customer"!==e.unref(p).role,j:0===g.value.length},(g.value.length,{}))}},p=e._export_sfc(r,[["__scopeId","data-v-ab8e2a9f"]]);wx.createPage(p);

View File

@ -1,5 +0,0 @@
{
"usingComponents": {
"app-icon": "../../components/AppIcon"
}
}

View File

@ -1 +0,0 @@
<view class="page-shell orders-page data-v-ab8e2a9f"><view class="orders-nav nav-gradient data-v-ab8e2a9f" style="{{c}}"><text class="nav-back data-v-ab8e2a9f" bindtap="{{b}}"><app-icon wx:if="{{a}}" class="data-v-ab8e2a9f" u-i="ab8e2a9f-0" bind:__l="__l" u-p="{{a}}"/></text><text class="nav-title data-v-ab8e2a9f">我的订单</text><view class="nav-placeholder data-v-ab8e2a9f"></view></view><view class="page-section orders-hero data-v-ab8e2a9f"><view class="hero-title data-v-ab8e2a9f">服务进度一目了然</view><view wx:if="{{d}}" class="hero-sub data-v-ab8e2a9f">查看您的预约状态,随时掌握服务进度。</view><view wx:else class="hero-sub data-v-ab8e2a9f">按状态查看订单,待确认可快速开始服务,进行中可直接填写报告。</view></view><view class="van-tabs data-v-ab8e2a9f"><view wx:for="{{e}}" wx:for-item="tab" wx:key="b" class="{{['data-v-ab8e2a9f', 'van-tabs__tab', tab.c]}}" bindtap="{{tab.d}}">{{tab.a}}</view></view><view class="page-section section-gap data-v-ab8e2a9f"><view wx:for="{{f}}" wx:for-item="item" wx:key="o" class="order-item data-v-ab8e2a9f"><view class="order-head data-v-ab8e2a9f"><view class="order-title data-v-ab8e2a9f">{{item.a}}</view><view class="{{['data-v-ab8e2a9f', item.c]}}">{{item.b}}</view></view><view class="order-desc data-v-ab8e2a9f"><label class="desc-icon data-v-ab8e2a9f"><app-icon wx:if="{{g}}" class="data-v-ab8e2a9f" u-i="{{item.d}}" bind:__l="__l" u-p="{{g}}"/></label><label class="data-v-ab8e2a9f">{{item.e}}</label></view><view class="order-footer data-v-ab8e2a9f"><label class="order-time data-v-ab8e2a9f"><app-icon wx:if="{{h}}" class="data-v-ab8e2a9f" u-i="{{item.f}}" bind:__l="__l" u-p="{{h}}"/><text class="data-v-ab8e2a9f">{{item.g}}</text></label></view><view wx:if="{{i}}" class="data-v-ab8e2a9f"><view wx:if="{{item.h}}" class="action-btns data-v-ab8e2a9f"><button class="van-button van-button--small van-button--primary data-v-ab8e2a9f" bindtap="{{item.i}}">开始服务</button><button class="van-button van-button--small data-v-ab8e2a9f" bindtap="{{item.j}}">取消</button></view><button wx:elif="{{item.k}}" class="van-button van-button--small btn-mt data-v-ab8e2a9f" bindtap="{{item.l}}">填写报告</button></view><view wx:else class="data-v-ab8e2a9f"><view wx:if="{{item.m}}" class="action-btns data-v-ab8e2a9f"><button class="van-button van-button--small data-v-ab8e2a9f" bindtap="{{item.n}}">取消预约</button></view></view></view></view><view wx:if="{{j}}" class="empty data-v-ab8e2a9f"><text class="data-v-ab8e2a9f">暂无数据</text></view></view>

View File

@ -1 +0,0 @@
.orders-page.data-v-ab8e2a9f{padding-bottom:120rpx}.nav-placeholder.data-v-ab8e2a9f{width:32px}.btn-mt.data-v-ab8e2a9f{margin-top:10px}.orders-hero.data-v-ab8e2a9f{margin-top:12px;padding:14px 16px;border:1px solid #dcefe3;border-radius:14px;background:linear-gradient(135deg,#f3fff7,#ecfbf3)}.hero-title.data-v-ab8e2a9f{font-size:16px;font-weight:700;color:#166534}.hero-sub.data-v-ab8e2a9f{margin-top:4px;font-size:12px;color:#4b5563;line-height:1.45}.orders-nav.data-v-ab8e2a9f{padding:14px 16px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:10}.nav-back.data-v-ab8e2a9f{font-size:20px;color:#fff}.nav-title.data-v-ab8e2a9f{font-size:18px;font-weight:700;color:#fff}.order-item.data-v-ab8e2a9f{background:#fff;margin-bottom:12px;border-radius:14px;padding:16px;border:1px solid #e8edf4;box-shadow:0 6px 16px rgba(15,23,42,.05)}.order-head.data-v-ab8e2a9f{display:flex;align-items:center;justify-content:space-between;gap:8px}.order-title.data-v-ab8e2a9f{font-size:15px;font-weight:700;color:#1f2937;margin-bottom:6px}.order-desc.data-v-ab8e2a9f{font-size:13px;color:#6b7280;margin-bottom:10px;display:flex;align-items:center;gap:6px}.desc-icon.data-v-ab8e2a9f{width:18px;height:18px;border-radius:6px;background:#eef2f7;display:inline-flex;align-items:center;justify-content:center}.order-footer.data-v-ab8e2a9f{display:flex;justify-content:space-between;align-items:center}.order-time.data-v-ab8e2a9f{font-size:12px;color:#94a3b8;display:inline-flex;align-items:center;gap:4px}.action-btns.data-v-ab8e2a9f{display:flex;gap:8px;margin-top:10px}

View File

@ -1 +0,0 @@
"use strict";const e=require("../../common/vendor.js"),t=require("../../utils/globalState.js"),o=require("../../api/index.js"),n=require("../../utils/session.js");Math||a();const a=()=>"../../components/AppIcon.js",r={__name:"MyReports",emits:["change-page"],setup(a,{emit:r}){const s=n.getUserSession(),i=n.getStoreSession(),l=(()=>{var t,o,n,a;const r=(null==(o=(t=e.index).getSystemInfoSync)?void 0:o.call(t).statusBarHeight)||20;let s=r+44;const i=null==(a=(n=e.index).getMenuButtonBoundingClientRect)?void 0:a.call(n);if(i&&i.top&&i.height){s=r+2*Math.max(i.top-r,4)+i.height}return`padding-top:${r}px;height:${s}px;`})(),u=e.ref(!1),c=e.ref([]),p=()=>{t.navigateTo("home")};return e.onMounted(()=>(async()=>{u.value=!0;const e="boss"===s.role?{storeId:i.id}:{userId:s.id},t=await o.getReportList(e);u.value=!1,200===t.code&&(c.value=t.data)})()),(t,n)=>e.e({a:e.p({name:"home",size:16,color:"#ffffff"}),b:e.o(p),c:e.s(e.unref(l)),d:e.t(c.value.length),e:c.value.length>0},c.value.length>0?{f:e.f(c.value,(t,n,a)=>e.e({a:t.beforePhoto},t.beforePhoto?{b:e.unref(o.imgUrl)(t.beforePhoto)}:{c:"7cf97651-1-"+a,d:e.p({name:"camera",size:18,color:"#94a3b8"})},{e:e.t(t.petName),f:e.t(t.serviceType),g:"7cf97651-2-"+a,h:t.id,i:e.o(n=>(t=>{o.API_ORIGIN,t.reportToken,e.index.navigateTo({url:`/pages/report-view/reportView?token=${t.reportToken}`})})(t),t.id)})),g:e.p({name:"report",size:11,color:"#64748b"})}:{},{h:!u.value&&0===c.value.length},(u.value||c.value.length,{}))}},s=e._export_sfc(r,[["__scopeId","data-v-7cf97651"]]);wx.createPage(s);

View File

@ -1,5 +0,0 @@
{
"usingComponents": {
"app-icon": "../../components/AppIcon"
}
}

View File

@ -1 +0,0 @@
<view class="page-shell my-reports-page data-v-7cf97651"><view class="report-nav nav-gradient data-v-7cf97651" style="{{c}}"><text class="nav-back nav-home-btn data-v-7cf97651" bindtap="{{b}}"><app-icon wx:if="{{a}}" class="data-v-7cf97651" u-i="7cf97651-0" bind:__l="__l" u-p="{{a}}"/></text><text class="nav-title data-v-7cf97651">我的报告</text><view class="nav-placeholder data-v-7cf97651"></view></view><view class="page-section reports-hero data-v-7cf97651"><view class="hero-title data-v-7cf97651">服务成果回顾</view><view class="hero-sub data-v-7cf97651">已生成 <text class="hero-count data-v-7cf97651">{{d}}</text> 份报告,点击卡片可查看详情并分享。</view></view><view wx:if="{{e}}" class="page-section section-gap gallery-grid data-v-7cf97651"><view wx:for="{{f}}" wx:for-item="r" wx:key="h" class="gallery-item data-v-7cf97651" bindtap="{{r.i}}"><view class="gallery-cover data-v-7cf97651"><image wx:if="{{r.a}}" src="{{r.b}}" class="cover-img data-v-7cf97651"/><view wx:else class="cover-placeholder data-v-7cf97651"><label class="placeholder-icon data-v-7cf97651"><app-icon wx:if="{{r.d}}" class="data-v-7cf97651" u-i="{{r.c}}" bind:__l="__l" u-p="{{r.d}}"/></label></view><view class="gallery-overlay data-v-7cf97651"><view class="overlay-name data-v-7cf97651">{{r.e}}</view><view class="overlay-service data-v-7cf97651">{{r.f}}</view></view></view><view class="gallery-meta data-v-7cf97651"><label class="meta-chip data-v-7cf97651"><app-icon wx:if="{{g}}" class="data-v-7cf97651" u-i="{{r.g}}" bind:__l="__l" u-p="{{g}}"/><text class="data-v-7cf97651">查看报告</text></label></view></view></view><view wx:if="{{h}}" class="empty data-v-7cf97651"><text class="data-v-7cf97651">暂无报告</text></view></view>

View File

@ -1 +0,0 @@
.my-reports-page.data-v-7cf97651{padding:0 0 120rpx}.nav-placeholder.data-v-7cf97651{width:32px}.nav-home-btn.data-v-7cf97651{background:rgba(255,255,255,.2);border:1px solid rgba(255,255,255,.35)}.reports-hero.data-v-7cf97651{margin-top:12px;padding:14px 16px;border:1px solid #dcefe3;border-radius:14px;background:linear-gradient(135deg,#f3fff7,#ecfbf3)}.hero-title.data-v-7cf97651{font-size:16px;font-weight:700;color:#166534}.hero-sub.data-v-7cf97651{margin-top:4px;font-size:12px;color:#4b5563;line-height:1.45}.hero-count.data-v-7cf97651{font-weight:700;color:#16a34a}.placeholder-icon.data-v-7cf97651{width:36px;height:36px;border-radius:10px;background:#e2e8f0;display:inline-flex;align-items:center;justify-content:center}.report-nav.data-v-7cf97651{padding:14px 16px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:10}.nav-back.data-v-7cf97651{font-size:20px;color:#fff}.nav-title.data-v-7cf97651{font-size:18px;font-weight:700;color:#fff}.gallery-grid.data-v-7cf97651{display:grid;grid-template-columns:1fr 1fr;gap:12px;padding-top:14px}.gallery-item.data-v-7cf97651{border-radius:14px;overflow:hidden;cursor:pointer;background:#fff;border:1px solid #e8edf4;box-shadow:0 8px 18px rgba(15,23,42,.06)}.gallery-cover.data-v-7cf97651{position:relative;width:100%;aspect-ratio:1;overflow:hidden}.cover-img.data-v-7cf97651{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.cover-placeholder.data-v-7cf97651{width:100%;height:100%;background:#f0ede8;display:flex;align-items:center;justify-content:center}.gallery-overlay.data-v-7cf97651{position:absolute;bottom:0;left:0;right:0;padding:8px 10px;background:linear-gradient(transparent,rgba(0,0,0,.65));color:#fff}.overlay-name.data-v-7cf97651{font-size:13px;font-weight:600}.overlay-service.data-v-7cf97651{font-size:11px;opacity:.9;margin-top:2px}.gallery-meta.data-v-7cf97651{padding:8px 10px 10px;background:#fff}.meta-chip.data-v-7cf97651{display:inline-flex;align-items:center;gap:4px;height:22px;padding:0 8px;border-radius:999px;background:#f1f5f9;color:#64748b;font-size:11px}

View File

@ -1 +0,0 @@
"use strict";const e=require("../../common/vendor.js"),a=require("../../utils/globalState.js"),o=require("../../api/index.js"),n=require("../../utils/session.js");Math||t();const t=()=>"../../components/AppIcon.js",l={__name:"Profile",emits:["change-page"],setup(t,{emit:l}){const s=(()=>{var a,o,n,t;const l=(null==(o=(a=e.index).getSystemInfoSync)?void 0:o.call(a).statusBarHeight)||20;let s=l+44;const i=null==(t=(n=e.index).getMenuButtonBoundingClientRect)?void 0:t.call(n);if(i&&i.top&&i.height){s=l+2*Math.max(i.top-l,4)+i.height}return`padding-top:${l}px;height:${s}px;`})(),i=e.ref(n.getUserSession()),u=e.ref(!1),v=e.ref(!1),c=e.ref(!1),r=e.ref(!1),d=e.ref(0);let m=null;const h=e.ref({name:"",phone:"",code:""}),p=e.computed(()=>i.value.name?i.value.name.slice(0,1).toUpperCase():"?"),f=["#ff7c43","#07c160","#8b6914","#e06040","#5090d0"],g=e.computed(()=>{var e;const a=((null==(e=i.value.name)?void 0:e.charCodeAt(0))||0)%f.length;return{background:f[a]}}),x=async()=>{const a=h.value.phone;if(!a||11!==a.length)return void e.index.showToast({title:"请输入正确的手机号",icon:"none"});const n=await o.sendSms(a);200===n.code?(e.index.showToast({title:"验证码已发送",icon:"none"}),d.value=60,m=setInterval(()=>{d.value--,d.value<=0&&clearInterval(m)},1e3)):e.index.showToast({title:n.message||"发送失败",icon:"none"})},w=async()=>{if(!h.value.name||!h.value.name.trim())return void e.index.showToast({title:"请输入姓名",icon:"none"});c.value=!0;const a=await o.updateUser({id:i.value.id,name:h.value.name.trim()});c.value=!1,200===a.code?(i.value.name=h.value.name.trim(),n.setUserSession(i.value),e.index.showToast({title:"修改成功",icon:"success"}),u.value=!1):e.index.showToast({title:a.message||"修改失败",icon:"none"})},T=async()=>{const{phone:a,code:t}=h.value;if(!a||11!==a.length)return void e.index.showToast({title:"请输入正确的手机号",icon:"none"});if(!t||6!==t.length)return void e.index.showToast({title:"请输入6位验证码",icon:"none"});r.value=!0;const l=await o.updateUser({id:i.value.id,phone:a,code:t});r.value=!1,200===l.code?(i.value.phone=a,n.setUserSession(i.value),e.index.showToast({title:"修改成功",icon:"success"}),v.value=!1):e.index.showToast({title:l.message||"修改失败",icon:"none"})},U=()=>{e.index.chooseImage({count:1,success:async a=>{const t=a.tempFilePaths[0];e.index.showLoading({title:"上传中..."}),e.index.uploadFile({url:`${o.BASE_URL}/upload/image`,filePath:t,name:"file",success:async a=>{e.index.hideLoading();const t=JSON.parse(a.data);if(200===t.code){const a=o.imgUrl(t.data.url),l=await o.updateUser({id:i.value.id,avatar:t.data.url});200===l.code?(i.value.avatar=a,n.setUserSession(i.value),e.index.showToast({title:"头像已更新",icon:"success"})):e.index.showToast({title:l.message||"更新失败",icon:"none"})}else e.index.showToast({title:t.message||"上传失败",icon:"none"})},fail:()=>{e.index.hideLoading(),e.index.showToast({title:"上传失败",icon:"none"})}})}})};return e.onMounted(()=>{h.value.name=i.value.name||"",h.value.phone=i.value.phone||""}),e.onUnmounted(()=>{m&&clearInterval(m)}),(n,t)=>e.e({a:e.p({name:"back",size:18,color:"#ffffff"}),b:e.o(o=>e.unref(a.navigateTo)("mine")),c:e.s(e.unref(s)),d:i.value.avatar},i.value.avatar?{e:e.unref(o.imgUrl)(i.value.avatar)}:{f:e.t(p.value),g:e.s(g.value)},{h:e.p({name:"camera",size:12,color:"#64748b"}),i:e.o(U),j:e.t(i.value.name||"未设置姓名"),k:e.t(i.value.phone||"未绑定手机号"),l:"boss"===i.value.role},(i.value.role,{}),{m:e.p({name:"profile",size:15}),n:e.t(i.value.name||"未设置"),o:e.o(e=>u.value=!0),p:e.p({name:"orders",size:15}),q:e.t(i.value.phone||"未设置"),r:e.o(e=>v.value=!0),s:e.p({name:"mine",size:15}),t:"boss"===i.value.role},(i.value.role,{}),{v:e.t("boss"===i.value.role?"商家版":"员工版"),w:u.value},u.value?{x:e.p({name:"close",size:18,color:"#94a3b8"}),y:e.o(e=>u.value=!1),z:h.value.name,A:e.o(e=>h.value.name=e.detail.value),B:c.value,C:e.o(w),D:e.o(()=>{}),E:e.o(e=>u.value=!1)}:{},{F:v.value},v.value?{G:e.p({name:"close",size:18,color:"#94a3b8"}),H:e.o(e=>v.value=!1),I:h.value.phone,J:e.o(e=>h.value.phone=e.detail.value),K:h.value.code,L:e.o(e=>h.value.code=e.detail.value),M:e.t(d.value>0?d.value+"s":"获取验证码"),N:d.value>0,O:e.o(x),P:r.value,Q:e.o(T),R:e.o(()=>{}),S:e.o(e=>v.value=!1)}:{})}},s=e._export_sfc(l,[["__scopeId","data-v-2268527d"]]);wx.createPage(s);

View File

@ -1,5 +0,0 @@
{
"usingComponents": {
"app-icon": "../../components/AppIcon"
}
}

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
.profile-page.data-v-2268527d{padding-bottom:120rpx;background:var(--pet-bg, #f5f7fb);min-height:100vh}.nav-placeholder.data-v-2268527d{width:32px}.profile-nav.data-v-2268527d{padding:14px 16px 12px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:10}.nav-back.data-v-2268527d{font-size:20px;color:#fff}.nav-title.data-v-2268527d{font-size:18px;font-weight:700;color:#fff}.profile-hero.data-v-2268527d{margin:14px 14px 0;padding:18px 16px 14px;background:#fff;border:1px solid #e6ecf4;border-radius:16px;box-shadow:var(--pet-card-shadow, 0 8px 24px rgba(15, 23, 42, .06))}.hero-main-row.data-v-2268527d{display:flex;align-items:center;gap:14px}.avatar-wrap.data-v-2268527d{position:relative;flex-shrink:0;-webkit-tap-highlight-color:transparent}.avatar-img.data-v-2268527d,.avatar-placeholder.data-v-2268527d{width:84px;height:84px;border-radius:50%;border:2px solid #e8edf4;-o-object-fit:cover;object-fit:cover;display:flex;align-items:center;justify-content:center}.avatar-placeholder.data-v-2268527d{background:rgba(226,232,240,.75)}.avatar-initials.data-v-2268527d{font-size:30px;font-weight:700;color:#fff}.avatar-badge.data-v-2268527d{position:absolute;bottom:2px;right:2px;width:28px;height:28px;background:#fff;border-radius:50%;border:1px solid #e2e8f0;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(15,23,42,.08)}.hero-text.data-v-2268527d{flex:1;min-width:0}.hero-name.data-v-2268527d{font-size:19px;line-height:1.25;letter-spacing:.02em}.hero-phone.data-v-2268527d{margin-top:6px;font-size:14px;color:var(--pet-subtext, #6b7280)}.hero-tags.data-v-2268527d{margin-top:10px}.role-pill.data-v-2268527d{display:inline-flex;align-items:center;height:26px;padding:0 12px;border-radius:999px;font-size:12px;font-weight:700;background:#fff7ed;color:#c2410c}.role-pill.hero-role.role-staff.data-v-2268527d,.role-pill.role-staff.data-v-2268527d{background:#ecfdf3;color:#166534}.role-pill-compact.data-v-2268527d{height:24px;padding:0 10px;font-size:12px}.hero-hint.data-v-2268527d{margin-top:12px;padding-top:12px;border-top:1px solid #f1f5f9;font-size:12px;color:#94a3b8;text-align:center}.menu-section.data-v-2268527d{padding:0 14px;margin-top:12px}.menu-card.data-v-2268527d{background:#fff;border:1px solid #e6ecf4;border-radius:16px;box-shadow:0 8px 20px rgba(15,23,42,.05);overflow:hidden}.menu-title.data-v-2268527d{font-size:12px;color:#94a3b8;font-weight:700;padding:12px 14px 8px}.menu-item.data-v-2268527d{min-height:54px;padding:0 14px;display:flex;align-items:center;justify-content:space-between;gap:10px;transition:background .15s ease}.menu-item.data-v-2268527d:active:not(.menu-item-static){background:#f8fafc}.menu-item+.menu-item.data-v-2268527d{border-top:1px solid #eef2f7}.menu-item-static.data-v-2268527d{cursor:default}.menu-left.data-v-2268527d{display:flex;align-items:center;gap:10px;min-width:0}.menu-icon.data-v-2268527d{width:28px;height:28px;border-radius:8px;background:#f1f5f9;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.menu-text.data-v-2268527d{font-size:16px;color:#1f2937;font-weight:600}.menu-right.data-v-2268527d{display:inline-flex;align-items:center;gap:4px;flex-shrink:0;max-width:55%;justify-content:flex-end}.menu-value.data-v-2268527d{font-size:14px;color:#64748b;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:right}.menu-arrow.data-v-2268527d{color:#c4cfdd;font-size:18px;line-height:1}.field-label-gap.data-v-2268527d{margin-top:12px}.profile-popup-mask.data-v-2268527d{z-index:3000;align-items:flex-end}.profile-popup-sheet.data-v-2268527d{width:100%;max-width:100%;max-height:88vh;border-radius:20px 20px 0 0;display:flex;flex-direction:column}.profile-popup-sheet .popup-header.data-v-2268527d{flex-shrink:0;padding:18px 20px 14px;border-bottom:1px solid #f0f0f0}.profile-popup-sheet .popup-title.data-v-2268527d{font-size:17px;font-weight:600;color:#1a1a1a}.profile-popup-sheet .popup-close.data-v-2268527d{width:36px;height:36px;display:flex;align-items:center;justify-content:center;margin:-6px -8px -6px 0;border-radius:10px}.profile-popup-sheet .popup-close.data-v-2268527d:active{background:#f1f5f9}.profile-popup-sheet .popup-body.data-v-2268527d{flex:1;overflow-y:auto;padding:16px 20px}.profile-popup-footer.data-v-2268527d{flex-shrink:0;padding:8px 20px max(env(safe-area-inset-bottom),20px);border-top:1px solid #f1f5f9;background:#fff}.sms-row.data-v-2268527d{display:flex;align-items:center;gap:8px}.sms-input.data-v-2268527d{flex:1;min-width:0}.footer-tip.data-v-2268527d{text-align:center;margin-top:28px;font-size:12px;color:#94a3b8}

View File

@ -1 +0,0 @@
"use strict";const e=require("../../common/vendor.js"),t=require("../../utils/globalState.js"),a=require("../../api/index.js"),o=require("../../utils/session.js");Math||n();const n=()=>"../../components/AppIcon.js",i={__name:"ServiceType",emits:["change-page"],setup(n,{emit:i}){const l=o.getStoreSession(),s=(()=>{var t,a,o,n;const i=(null==(a=(t=e.index).getSystemInfoSync)?void 0:a.call(t).statusBarHeight)||20;let l=i+44;const s=null==(n=(o=e.index).getMenuButtonBoundingClientRect)?void 0:n.call(o);if(s&&s.top&&s.height){l=i+2*Math.max(s.top-i,4)+s.height}return`padding-top:${i}px;height:${l}px;`})(),u=e.ref([]),c=e.ref(!1),d=e.ref(""),r=e.ref(null),v=e.ref(0),h=e.ref(0),g=async()=>{const e=await a.getServiceTypeList(l.id);200===e.code&&(u.value=e.data)},f=async()=>{if(!d.value)return void e.index.showToast({title:"请输入服务类型名称",icon:"none"});const t=await a.createServiceType(l.id,d.value);200===t.code?(e.index.showToast({title:"添加成功",icon:"success"}),d.value="",c.value=!1,g()):e.index.showToast({title:t.message||"添加失败",icon:"none"})},p=e=>{var t,a;return(null==(t=null==e?void 0:e.touches)?void 0:t[0])?e.touches[0].pageX:(null==(a=null==e?void 0:e.changedTouches)?void 0:a[0])?e.changedTouches[0].pageX:0};return e.onMounted(()=>g()),(o,n)=>e.e({a:e.p({name:"back",size:18,color:"#ffffff"}),b:e.o(a=>e.unref(t.navigateTo)("mine")),c:e.s(e.unref(s)),d:e.o(e=>c.value=!0),e:e.f(u.value,(t,o,n)=>e.e({a:"663ba7c1-1-"+n,b:e.t(t.name),c:!t.storeId},(t.storeId,{}),{d:t.storeId},t.storeId?{e:e.o(o=>(async t=>{e.index.showModal({title:"提示",content:"确定删除?",success:async o=>{o.confirm&&200===(await a.deleteServiceType(t)).code&&(r.value=null,e.index.showToast({title:"已删除",icon:"success"}),g())}})})(t.id),t.id)}:{},{f:e.o(e=>((e,t)=>{const a=p(e);v.value=a,h.value=a,r.value&&r.value!==t.id&&(r.value=null)})(e,t),t.id),g:e.o(e=>{return t=e,void(h.value=p(t));var t},t.id),h:e.o(e=>((e,t)=>{if(!t.storeId)return;const a=(p(e)||h.value)-v.value;a<-40?r.value=t.id:a>24&&r.value===t.id&&(r.value=null)})(e,t),t.id),i:t.id,j:r.value===t.id&&t.storeId?1:""})),f:e.p({name:"service",size:14}),g:0===u.value.length},(u.value.length,{}),{h:c.value},c.value?{i:e.o(e=>c.value=!1),j:d.value,k:e.o(e=>d.value=e.detail.value),l:e.o(e=>c.value=!1),m:e.o(f),n:e.o(()=>{}),o:e.o(e=>c.value=!1)}:{})}},l=e._export_sfc(i,[["__scopeId","data-v-663ba7c1"]]);wx.createPage(l);

View File

@ -1,5 +0,0 @@
{
"usingComponents": {
"app-icon": "../../components/AppIcon"
}
}

View File

@ -1 +0,0 @@
<view class="page-shell st-page data-v-663ba7c1"><view class="st-nav nav-gradient data-v-663ba7c1" style="{{c}}"><text class="nav-back data-v-663ba7c1" bindtap="{{b}}"><app-icon wx:if="{{a}}" class="data-v-663ba7c1" u-i="663ba7c1-0" bind:__l="__l" u-p="{{a}}"/></text><text class="nav-title data-v-663ba7c1">服务类型</text><view class="nav-placeholder data-v-663ba7c1"></view></view><view class="page-section add-btn-wrap data-v-663ba7c1"><button class="van-button van-button--primary van-button--block data-v-663ba7c1" bindtap="{{d}}">新增服务类型</button></view><view class="page-section data-v-663ba7c1"><view class="van-cell-group card-section st-list data-v-663ba7c1"><view wx:for="{{e}}" wx:for-item="s" wx:key="i" class="{{['st-swipe-wrap', 'data-v-663ba7c1', s.j && 'is-open']}}"><view class="st-swipe-track data-v-663ba7c1" bindtouchstart="{{s.f}}" catchtouchmove="{{s.g}}" bindtouchend="{{s.h}}"><view class="van-cell st-cell data-v-663ba7c1"><view class="st-name-row data-v-663ba7c1"><label class="st-dot data-v-663ba7c1"><app-icon wx:if="{{f}}" class="data-v-663ba7c1" u-i="{{s.a}}" bind:__l="__l" u-p="{{f}}"/></label><text class="st-name data-v-663ba7c1">{{s.b}}</text><view wx:if="{{s.c}}" class="van-tag van-tag--success van-tag--small system-tag data-v-663ba7c1">系统默认</view></view></view><view wx:if="{{s.d}}" class="swipe-delete-btn data-v-663ba7c1" catchtap="{{s.e}}"> 删除 </view></view></view></view></view><view wx:if="{{g}}" class="empty data-v-663ba7c1"><text class="data-v-663ba7c1">暂无服务类型</text></view><view wx:if="{{h}}" class="popup-mask data-v-663ba7c1" bindtap="{{o}}"><view class="popup-content data-v-663ba7c1" catchtap="{{n}}"><view class="popup-header data-v-663ba7c1"><text class="popup-title data-v-663ba7c1">新增服务类型</text><text class="popup-close data-v-663ba7c1" bindtap="{{i}}">✕</text></view><view class="popup-body data-v-663ba7c1"><view class="popup-desc data-v-663ba7c1">建议使用简洁明确的命名,方便前台下单与报告展示。</view><view class="field-label data-v-663ba7c1">服务类型名称</view><input class="van-field data-v-663ba7c1" placeholder="请输入" value="{{j}}" bindinput="{{k}}"/></view><view class="popup-footer data-v-663ba7c1"><view class="popup-actions data-v-663ba7c1"><button class="van-button btn-ghost data-v-663ba7c1" bindtap="{{l}}">取消</button><button class="van-button van-button--primary btn-confirm data-v-663ba7c1" bindtap="{{m}}">确认创建</button></view></view></view></view></view>

View File

@ -1 +0,0 @@
.st-page.data-v-663ba7c1{padding-bottom:120rpx}.nav-placeholder.data-v-663ba7c1{width:32px}.add-btn-wrap.data-v-663ba7c1{padding:0}.card-section.data-v-663ba7c1{margin:0}.st-list.data-v-663ba7c1{border-radius:16px;overflow:hidden}.st-cell.data-v-663ba7c1{min-height:52px}.st-name-row.data-v-663ba7c1{display:flex;align-items:center;gap:8px}.st-dot.data-v-663ba7c1{width:24px;height:24px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;background:#f1f5f9}.st-name.data-v-663ba7c1{font-size:15px;font-weight:600;color:#1f2937}.system-tag.data-v-663ba7c1{margin-left:8px}.st-swipe-wrap.data-v-663ba7c1{overflow:hidden;border-radius:12px}.st-swipe-wrap+.st-swipe-wrap.data-v-663ba7c1{border-top:1px solid #eef2f7}.st-swipe-track.data-v-663ba7c1{display:flex;width:calc(100% + 76px);transform:translate(0);transition:transform .2s ease}.st-swipe-wrap.is-open .st-swipe-track.data-v-663ba7c1{transform:translate(-76px)}.swipe-delete-btn.data-v-663ba7c1{width:76px;background:#ef4444;color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;flex-shrink:0}.st-nav.data-v-663ba7c1{padding:14px 16px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:10}.nav-back.data-v-663ba7c1{font-size:20px;color:#fff}.nav-title.data-v-663ba7c1{font-size:18px;font-weight:700;color:#fff}.popup-mask.data-v-663ba7c1{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.5);z-index:100;display:flex;align-items:flex-end;justify-content:center}.popup-content.data-v-663ba7c1{background:#fff;border-radius:16px 16px 0 0;width:430px;max-width:100%;display:flex;flex-direction:column}.popup-header.data-v-663ba7c1{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid #f0f0f0}.popup-title.data-v-663ba7c1{font-size:16px;font-weight:600}.popup-close.data-v-663ba7c1{font-size:18px;color:#999}.popup-body.data-v-663ba7c1{padding:16px 20px}.popup-footer.data-v-663ba7c1{padding:12px 20px 20px}.popup-desc.data-v-663ba7c1{font-size:12px;color:#6b7280;line-height:1.45;margin-bottom:10px}.popup-actions.data-v-663ba7c1{display:flex;align-items:center;gap:10px}.btn-ghost.data-v-663ba7c1{width:96px;border:1px solid #dbe3ee!important;background:#fff!important;color:#64748b!important}.btn-confirm.data-v-663ba7c1{flex:1}

View File

@ -1 +0,0 @@
"use strict";const e=require("../../common/vendor.js"),a=require("../../utils/globalState.js"),n=require("../../api/index.js"),o=require("../../utils/session.js");Math||t();const t=()=>"../../components/AppIcon.js",l={__name:"Staff",emits:["change-page"],setup(t,{emit:l}){const i=o.getStoreSession(),u=(()=>{var a,n,o,t;const l=(null==(n=(a=e.index).getSystemInfoSync)?void 0:n.call(a).statusBarHeight)||20;let i=l+44;const u=null==(t=(o=e.index).getMenuButtonBoundingClientRect)?void 0:t.call(o);if(u&&u.top&&u.height){i=l+2*Math.max(u.top-l,4)+u.height}return`padding-top:${l}px;height:${i}px;`})(),s=e.ref([]),r=e.ref(!1),d=e.ref({name:"",phone:""}),v=e.ref(null),c=e.ref(0),h=e.ref(0),f=["#ff7c43","#07c160","#8b6914","#e06040","#5090d0","#9b59b6"],p=e=>{var a;if(e.avatar)return{background:"transparent"};const n=((null==(a=e.name)?void 0:a.charCodeAt(0))||0)%f.length;return{background:f[n]}},g=async()=>{const e=await n.getStaffList(i.id);200===e.code&&(s.value=e.data)},m=()=>{e.index.setClipboardData({data:i.inviteCode,success:()=>e.index.showToast({title:"邀请码已复制",icon:"none"})})},x=async()=>{if(!d.value.name)return void e.index.showToast({title:"请输入员工姓名",icon:"none"});if(!d.value.phone||11!==d.value.phone.length)return void e.index.showToast({title:"请输入正确的手机号",icon:"none"});const a=await n.createStaff({storeId:i.id,name:d.value.name,phone:d.value.phone});200===a.code?(e.index.showToast({title:`添加成功,密码:${a.data.password}`,icon:"none",duration:3e3}),r.value=!1,d.value={name:"",phone:""},g()):e.index.showToast({title:a.message||"添加失败",icon:"none"})},b=e=>{var a,n;return(null==(a=null==e?void 0:e.touches)?void 0:a[0])?e.touches[0].pageX:(null==(n=null==e?void 0:e.changedTouches)?void 0:n[0])?e.changedTouches[0].pageX:0};return e.onMounted(()=>g()),(o,t)=>e.e({a:e.p({name:"back",size:18,color:"#ffffff"}),b:e.o(n=>e.unref(a.navigateTo)("mine")),c:e.s(e.unref(u)),d:e.t(e.unref(i).inviteCode),e:e.o(m),f:e.o(e=>r.value=!0),g:e.f(s.value,(a,o,t)=>e.e({a:"boss"!==a.role},"boss"!==a.role?{b:e.o(o=>(async a=>{e.index.showModal({title:"提示",content:"确定删除该员工?",success:async o=>{o.confirm&&200===(await n.deleteStaff(a)).code&&(v.value=null,e.index.showToast({title:"已删除",icon:"success"}),g())}})})(a.id),a.id)}:{},{c:a.avatar},a.avatar?{d:a.avatar}:{e:e.t(a.name?a.name[0]:"?")},{f:e.s(p(a)),g:e.t(a.name),h:e.t(a.phone),i:e.t("boss"===a.role?"店长":"员工"),j:e.o(e=>((e,a)=>{const n=b(e);c.value=n,h.value=n,v.value&&v.value!==a.id&&(v.value=null)})(e,a),a.id),k:e.o(e=>{return a=e,void(h.value=b(a));var a},a.id),l:e.o(e=>((e,a)=>{if("boss"===a.role)return;const n=(b(e)||h.value)-c.value;n<-40?v.value=a.id:n>24&&v.value===a.id&&(v.value=null)})(e,a),a.id),m:a.id,n:v.value===a.id&&"boss"!==a.role?1:"",o:e.o(e=>{return n=a,void(v.value&&v.value!==n.id&&(v.value=null));var n},a.id)})),h:0===s.value.length},(s.value.length,{}),{i:r.value},r.value?{j:e.o(e=>r.value=!1),k:d.value.name,l:e.o(e=>d.value.name=e.detail.value),m:d.value.phone,n:e.o(e=>d.value.phone=e.detail.value),o:e.o(e=>r.value=!1),p:e.o(x),q:e.o(()=>{}),r:e.o(e=>r.value=!1)}:{})}},i=e._export_sfc(l,[["__scopeId","data-v-8ecf2675"]]);wx.createPage(i);

View File

@ -1,5 +0,0 @@
{
"usingComponents": {
"app-icon": "../../components/AppIcon"
}
}

View File

@ -1 +0,0 @@
<view class="page-shell staff-page data-v-8ecf2675"><view class="staff-nav nav-gradient data-v-8ecf2675" style="{{c}}"><text class="nav-back data-v-8ecf2675" bindtap="{{b}}"><app-icon wx:if="{{a}}" class="data-v-8ecf2675" u-i="8ecf2675-0" bind:__l="__l" u-p="{{a}}"/></text><text class="nav-title data-v-8ecf2675">员工管理</text><view class="nav-placeholder data-v-8ecf2675"></view></view><view class="van-cell-group page-section card-section invite-card data-v-8ecf2675"><view class="van-cell data-v-8ecf2675"><view class="van-cell__title data-v-8ecf2675">员工邀请码</view><view class="van-cell__value invite-code-cell data-v-8ecf2675"><text class="invite-code data-v-8ecf2675">{{d}}</text><button class="van-button van-button--small van-button--primary data-v-8ecf2675" bindtap="{{e}}">复制</button></view></view></view><view class="page-section add-btn-wrap data-v-8ecf2675"><button class="van-button van-button--primary van-button--block data-v-8ecf2675" bindtap="{{f}}">新增员工</button></view><view class="page-section section-gap data-v-8ecf2675"><view class="van-cell-group card-section data-v-8ecf2675"><view wx:for="{{g}}" wx:for-item="s" wx:key="m" class="{{['staff-swipe-wrap', 'data-v-8ecf2675', s.n && 'is-open']}}" bindtap="{{s.o}}"><view wx:if="{{s.a}}" class="swipe-delete-btn data-v-8ecf2675" catchtap="{{s.b}}"> 删除 </view><view class="staff-main data-v-8ecf2675" bindtouchstart="{{s.j}}" catchtouchmove="{{s.k}}" bindtouchend="{{s.l}}"><view class="van-cell staff-cell data-v-8ecf2675"><view class="staff-info-row data-v-8ecf2675"><view class="avatar data-v-8ecf2675" style="{{s.f}}"><image wx:if="{{s.c}}" src="{{s.d}}" class="avatar-img data-v-8ecf2675"/><label wx:else class="avatar-initials data-v-8ecf2675">{{s.e}}</label></view><view class="data-v-8ecf2675"><view class="staff-name data-v-8ecf2675">{{s.g}}</view><view class="staff-meta data-v-8ecf2675">{{s.h}}</view><view class="staff-meta data-v-8ecf2675">{{s.i}}</view></view></view></view></view></view></view></view><view wx:if="{{h}}" class="empty data-v-8ecf2675"><text class="data-v-8ecf2675">暂无员工</text></view><view wx:if="{{i}}" class="popup-mask data-v-8ecf2675" bindtap="{{r}}"><view class="popup-content data-v-8ecf2675" catchtap="{{q}}"><view class="popup-header data-v-8ecf2675"><text class="popup-title data-v-8ecf2675">新增员工</text><text class="popup-close data-v-8ecf2675" bindtap="{{j}}">✕</text></view><view class="popup-body data-v-8ecf2675"><view class="popup-desc data-v-8ecf2675">创建后会自动生成初始密码,员工可使用手机号登录。</view><view class="field-label data-v-8ecf2675">员工姓名</view><input class="van-field data-v-8ecf2675" placeholder="请输入" value="{{k}}" bindinput="{{l}}"/><view class="field-label data-v-8ecf2675">手机号</view><input type="tel" class="van-field data-v-8ecf2675" placeholder="请输入" maxlength="11" value="{{m}}" bindinput="{{n}}"/></view><view class="popup-footer data-v-8ecf2675"><view class="popup-actions data-v-8ecf2675"><button class="van-button btn-ghost data-v-8ecf2675" bindtap="{{o}}">取消</button><button class="van-button van-button--primary btn-confirm data-v-8ecf2675" bindtap="{{p}}">确认创建</button></view></view></view></view></view>

View File

@ -1 +0,0 @@
.staff-page.data-v-8ecf2675{padding-bottom:120rpx}.nav-placeholder.data-v-8ecf2675{width:32px}.add-btn-wrap.data-v-8ecf2675{padding:0}.card-section.data-v-8ecf2675{margin:0}.invite-card.data-v-8ecf2675{overflow:hidden}.staff-cell.data-v-8ecf2675{min-height:58px}.invite-code-cell.data-v-8ecf2675{display:flex;align-items:center;gap:8px}.invite-code.data-v-8ecf2675{font-family:monospace;font-size:15px;color:#16a34a;font-weight:700;letter-spacing:2px}.staff-info-row.data-v-8ecf2675{display:flex;align-items:center;gap:12px;flex:1}.staff-name.data-v-8ecf2675{font-weight:700;font-size:15px;color:#1f2937}.staff-meta.data-v-8ecf2675{font-size:12px;color:#6b7280}.staff-swipe-wrap.data-v-8ecf2675{position:relative;overflow:hidden;border-radius:12px;background:#fff}.staff-swipe-wrap+.staff-swipe-wrap.data-v-8ecf2675{border-top:1px solid #eef2f7}.staff-main.data-v-8ecf2675{position:relative;z-index:2;transform:translate(0);transition:transform .2s ease;background:#fff}.staff-swipe-wrap.is-open .staff-main.data-v-8ecf2675{transform:translate(-76px)}.swipe-delete-btn.data-v-8ecf2675{position:absolute;right:0;top:0;bottom:0;width:76px;background:#ef4444;color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;flex-shrink:0}.staff-nav.data-v-8ecf2675{padding:14px 16px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:10}.nav-back.data-v-8ecf2675{font-size:20px;color:#fff}.nav-title.data-v-8ecf2675{font-size:18px;font-weight:700;color:#fff}.avatar.data-v-8ecf2675{width:42px;height:42px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:18px;color:#fff;overflow:hidden;flex-shrink:0;border:1px solid #e8edf4}.avatar-img.data-v-8ecf2675{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.avatar-initials.data-v-8ecf2675{font-weight:600}.popup-mask.data-v-8ecf2675{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.5);z-index:100;display:flex;align-items:flex-end;justify-content:center}.popup-content.data-v-8ecf2675{background:#fff;border-radius:16px 16px 0 0;width:430px;max-width:100%;display:flex;flex-direction:column}.popup-header.data-v-8ecf2675{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid #f0f0f0}.popup-title.data-v-8ecf2675{font-size:16px;font-weight:600}.popup-close.data-v-8ecf2675{font-size:18px;color:#999}.popup-body.data-v-8ecf2675{padding:16px 20px}.popup-footer.data-v-8ecf2675{padding:12px 20px 20px}.popup-desc.data-v-8ecf2675{font-size:12px;color:#6b7280;line-height:1.45;margin-bottom:10px}.popup-actions.data-v-8ecf2675{display:flex;align-items:center;gap:10px}.btn-ghost.data-v-8ecf2675{width:96px;border:1px solid #dbe3ee!important;background:#fff!important;color:#64748b!important}.btn-confirm.data-v-8ecf2675{flex:1}

View File

@ -1 +0,0 @@
"use strict";const e=require("../../common/vendor.js"),t=require("../../utils/globalState.js"),o=require("../../api/index.js"),n=require("../../utils/session.js");Math||a();const a=()=>"../../components/AppIcon.js",l={__name:"Store",emits:["change-page"],setup(a){const l=n.getStoreSession(),s=(()=>{var t,o,n,a;const l=(null==(o=(t=e.index).getSystemInfoSync)?void 0:o.call(t).statusBarHeight)||20;let s=l+44;const i=null==(a=(n=e.index).getMenuButtonBoundingClientRect)?void 0:a.call(n);if(i&&i.top&&i.height){s=l+2*Math.max(i.top-l,4)+i.height}return`padding-top:${l}px;height:${s}px;`})(),i=e.ref(!1),u=e.ref(!1),r=e.ref({name:"",phone:"",address:"",intro:"",latitude:null,longitude:null}),d=e.computed(()=>null!=r.value.latitude&&null!=r.value.longitude),c=e=>{if(null==e||""===e)return null;const t="number"==typeof e?e:parseFloat(e);return Number.isFinite(t)?t:null},v=()=>{u.value=!0,e.index.chooseLocation({success:e=>{const t=e.name||"",o=e.address||"";r.value.address=[t,o].filter(Boolean).join(" · ")||o||t,r.value.latitude=c(e.latitude),r.value.longitude=c(e.longitude)},fail:t=>{const o=t&&t.errMsg||"";/cancel|取消/i.test(o)||e.index.showToast({title:"无法打开选点,请手动填写",icon:"none"})},complete:()=>{u.value=!1}})},p=async()=>{i.value=!0;const t=await o.updateStore({id:l.id,...r.value});if(i.value=!1,200===t.code){e.index.showToast({title:"保存成功",icon:"success"});const o=t.data?{...l,...t.data}:{...l,...r.value};n.setStoreSession(o)}else e.index.showToast({title:t.message||"保存失败",icon:"none"})};return e.onMounted(()=>{r.value={name:l.name||"",phone:l.phone||"",address:l.address||"",intro:l.intro||"",latitude:c(l.latitude),longitude:c(l.longitude)}}),(o,n)=>e.e({a:e.p({name:"back",size:18,color:"#ffffff"}),b:e.o(o=>e.unref(t.navigateTo)("mine")),c:e.s(e.unref(s)),d:e.p({name:"store",size:22,color:"#15803d"}),e:e.p({name:"store",size:15,color:"#475569"}),f:r.value.name,g:e.o(e=>r.value.name=e.detail.value),h:e.p({name:"phone",size:15,color:"#475569"}),i:r.value.phone,j:e.o(e=>r.value.phone=e.detail.value),k:e.p({name:"pin",size:15,color:"#475569"}),l:r.value.address,m:e.o(e=>r.value.address=e.detail.value),n:u.value,o:e.o(v),p:d.value},(d.value,{}),{q:e.p({name:"report",size:15,color:"#475569"}),r:r.value.intro,s:e.o(e=>r.value.intro=e.detail.value),t:i.value,v:e.o(p)})}},s=e._export_sfc(l,[["__scopeId","data-v-eb0ed336"]]);wx.createPage(s);

View File

@ -1,5 +0,0 @@
{
"usingComponents": {
"app-icon": "../../components/AppIcon"
}
}

View File

@ -1 +0,0 @@
<view class="page-shell store-page data-v-eb0ed336"><view class="store-nav nav-gradient data-v-eb0ed336" style="{{c}}"><text class="nav-back data-v-eb0ed336" bindtap="{{b}}"><app-icon wx:if="{{a}}" class="data-v-eb0ed336" u-i="eb0ed336-0" bind:__l="__l" u-p="{{a}}"/></text><text class="nav-title data-v-eb0ed336">店铺设置</text><view class="nav-placeholder data-v-eb0ed336"></view></view><view class="store-body data-v-eb0ed336"><view class="store-hero data-v-eb0ed336"><view class="store-hero-icon data-v-eb0ed336" aria-hidden="true"><app-icon wx:if="{{d}}" class="data-v-eb0ed336" u-i="eb0ed336-1" bind:__l="__l" u-p="{{d}}"/></view><view class="store-hero-text data-v-eb0ed336"><view class="store-hero-title data-v-eb0ed336">门店资料</view><view class="store-hero-desc data-v-eb0ed336">以下信息会用于预约展示与客户联系,建议保持准确、易读。</view></view></view><view class="store-card data-v-eb0ed336"><view class="store-card-head data-v-eb0ed336"><label class="store-card-kicker data-v-eb0ed336">基础信息</label></view><view class="store-field data-v-eb0ed336"><view class="store-field-label data-v-eb0ed336"><label class="store-ico data-v-eb0ed336"><app-icon wx:if="{{e}}" class="data-v-eb0ed336" u-i="eb0ed336-2" bind:__l="__l" u-p="{{e}}"/></label><text class="data-v-eb0ed336">店铺名称</text></view><input class="van-field store-input data-v-eb0ed336" placeholder="请输入店铺名称" value="{{f}}" bindinput="{{g}}"/></view><view class="store-field data-v-eb0ed336"><view class="store-field-label data-v-eb0ed336"><label class="store-ico data-v-eb0ed336"><app-icon wx:if="{{h}}" class="data-v-eb0ed336" u-i="eb0ed336-3" bind:__l="__l" u-p="{{h}}"/></label><text class="data-v-eb0ed336">联系电话</text></view><input type="tel" class="van-field store-input data-v-eb0ed336" placeholder="请输入联系电话" maxlength="20" value="{{i}}" bindinput="{{j}}"/></view><view class="store-field data-v-eb0ed336"><view class="store-field-label data-v-eb0ed336"><label class="store-ico data-v-eb0ed336"><app-icon wx:if="{{k}}" class="data-v-eb0ed336" u-i="eb0ed336-4" bind:__l="__l" u-p="{{k}}"/></label><text class="data-v-eb0ed336">地址</text></view><view class="address-row data-v-eb0ed336"><input class="van-field store-input address-input data-v-eb0ed336" placeholder="输入地址或点右侧选点" value="{{l}}" bindinput="{{m}}"/><button type="button" class="pick-location-btn data-v-eb0ed336" disabled="{{n}}" bindtap="{{o}}"> 地图选点 </button></view><view wx:if="{{p}}" class="geo-hint data-v-eb0ed336">已选地图位置,可再微调上方文字后保存</view></view><view class="store-field store-field-last data-v-eb0ed336"><view class="store-field-label data-v-eb0ed336"><label class="store-ico data-v-eb0ed336"><app-icon wx:if="{{q}}" class="data-v-eb0ed336" u-i="eb0ed336-5" bind:__l="__l" u-p="{{q}}"/></label><text class="data-v-eb0ed336">简介</text></view><block wx:if="{{r0}}"><textarea class="van-field store-input intro-textarea data-v-eb0ed336" placeholder="一句话介绍门店特色、服务亮点等" value="{{r}}" bindinput="{{s}}"/></block></view></view><view class="store-actions data-v-eb0ed336"><button class="van-button van-button--primary van-button--block store-save-btn data-v-eb0ed336" loading="{{t}}" bindtap="{{v}}"> 保存设置 </button><view class="store-actions-hint data-v-eb0ed336">保存后立即生效,并写入本地缓存。</view></view><view class="store-footer-tip data-v-eb0ed336">宠伴生活馆 · 商家版</view></view></view>

View File

@ -1 +0,0 @@
.store-page.data-v-eb0ed336{min-height:100vh;background:var(--pet-bg, #f5f7fb);padding-bottom:120rpx}.nav-placeholder.data-v-eb0ed336{width:32px}.store-nav.data-v-eb0ed336{padding:14px 16px 12px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:10}.nav-back.data-v-eb0ed336{font-size:20px;color:#fff}.nav-title.data-v-eb0ed336{font-size:18px;font-weight:700;color:#fff}.store-body.data-v-eb0ed336{padding:12px 14px 28px}.store-hero.data-v-eb0ed336{display:flex;gap:12px;align-items:flex-start;padding:16px 14px;border-radius:16px;background:linear-gradient(135deg,#fff,#ecfdf3 55%,#f0fdf4);border:1px solid #d8f0e2;box-shadow:var(--pet-card-shadow, 0 8px 24px rgba(15, 23, 42, .06));margin-bottom:14px}.store-hero-icon.data-v-eb0ed336{width:44px;height:44px;border-radius:12px;background:rgba(255,255,255,.9);border:1px solid #bbf7d0;display:flex;align-items:center;justify-content:center;flex-shrink:0}.store-hero-title.data-v-eb0ed336{font-size:17px;font-weight:700;color:#14532d;letter-spacing:.02em}.store-hero-desc.data-v-eb0ed336{margin-top:6px;font-size:13px;line-height:1.55;color:#4b5563}.store-card.data-v-eb0ed336{background:#fff;border:1px solid #e6ecf4;border-radius:16px;box-shadow:0 8px 22px rgba(15,23,42,.06);padding:4px 4px 8px;overflow:hidden}.store-card-head.data-v-eb0ed336{padding:14px 14px 6px}.store-card-kicker.data-v-eb0ed336{font-size:12px;font-weight:700;color:#94a3b8;letter-spacing:.04em}.store-field.data-v-eb0ed336{padding:12px 12px 4px}.store-field+.store-field.data-v-eb0ed336{border-top:1px solid #f1f5f9}.store-field-label.data-v-eb0ed336{display:flex;align-items:center;gap:8px;margin-bottom:8px;font-size:14px;font-weight:600;color:#374151}.store-ico.data-v-eb0ed336{width:28px;height:28px;border-radius:8px;background:#f1f5f9;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.store-input.data-v-eb0ed336{margin-top:0!important}.address-row.data-v-eb0ed336{display:flex;align-items:stretch;gap:10px}.address-input.data-v-eb0ed336{flex:1;min-width:0}.pick-location-btn.data-v-eb0ed336{flex-shrink:0;padding:0 14px;min-height:44px;border-radius:12px;border:1px solid #16a34a;background:#f0fdf4;color:#15803d;font-size:14px;font-weight:600;line-height:44px;-webkit-tap-highlight-color:transparent}.pick-location-btn.data-v-eb0ed336:active:not([disabled]){opacity:.92;transform:translateY(1px)}.pick-location-btn[disabled].data-v-eb0ed336{opacity:.55}.geo-hint.data-v-eb0ed336{margin-top:8px;font-size:12px;color:#16a34a;line-height:1.4}.intro-textarea.data-v-eb0ed336{min-height:112px!important;line-height:1.55!important;padding-top:12px!important;padding-bottom:12px!important;resize:none}.store-field-last.data-v-eb0ed336{padding-bottom:14px}.store-actions.data-v-eb0ed336{margin-top:18px}.store-save-btn.data-v-eb0ed336{margin-top:0!important;box-shadow:0 10px 26px rgba(34,197,94,.35)!important}.store-actions-hint.data-v-eb0ed336{margin-top:10px;text-align:center;font-size:12px;color:#94a3b8;line-height:1.45}.store-footer-tip.data-v-eb0ed336{margin-top:28px;text-align:center;font-size:12px;color:#cbd5e1}

File diff suppressed because one or more lines are too long

View File

@ -1,5 +0,0 @@
{
"usingComponents": {
"app-icon": "../../components/AppIcon"
}
}

Some files were not shown because too many files have changed in this diff Show More