feat: 初始化居家上门服务系统完整项目代码
- Spring Boot 后端服务 (hss-home-service) - delivery-miniapp 配送小程序 - website 官网 (Nuxt) - docs 架构设计文档 - Docker 容器化部署配置 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,127 @@
|
||||
import { defineComponent, mergeProps, unref, useSSRContext } from 'file:///home/akoo/%E5%B1%85%E5%AE%B6%E6%9C%8D%E5%8A%A1/hss-home-service/website/node_modules/vue/index.mjs';
|
||||
import { ssrRenderComponent, ssrRenderAttrs, ssrRenderAttr, ssrIncludeBooleanAttr, ssrLooseContain, ssrLooseEqual, ssrRenderList, ssrInterpolate } from 'file:///home/akoo/%E5%B1%85%E5%AE%B6%E6%9C%8D%E5%8A%A1/hss-home-service/website/node_modules/vue/server-renderer/index.mjs';
|
||||
import { u as useLeadForm } from './useLeadForm-hNHTDEhY.mjs';
|
||||
import { u as useSeo } from './useSeo-BkcZp48C.mjs';
|
||||
import './server.mjs';
|
||||
import 'file:///home/akoo/%E5%B1%85%E5%AE%B6%E6%9C%8D%E5%8A%A1/hss-home-service/website/node_modules/ofetch/dist/node.mjs';
|
||||
import '../_/renderer.mjs';
|
||||
import 'file:///home/akoo/%E5%B1%85%E5%AE%B6%E6%9C%8D%E5%8A%A1/hss-home-service/website/node_modules/vue-bundle-renderer/dist/runtime.mjs';
|
||||
import 'file:///home/akoo/%E5%B1%85%E5%AE%B6%E6%9C%8D%E5%8A%A1/hss-home-service/website/node_modules/h3/dist/index.mjs';
|
||||
import 'file:///home/akoo/%E5%B1%85%E5%AE%B6%E6%9C%8D%E5%8A%A1/hss-home-service/website/node_modules/ufo/dist/index.mjs';
|
||||
import '../nitro/nitro.mjs';
|
||||
import 'file:///home/akoo/%E5%B1%85%E5%AE%B6%E6%9C%8D%E5%8A%A1/hss-home-service/website/node_modules/destr/dist/index.mjs';
|
||||
import 'file:///home/akoo/%E5%B1%85%E5%AE%B6%E6%9C%8D%E5%8A%A1/hss-home-service/website/node_modules/hookable/dist/index.mjs';
|
||||
import 'file:///home/akoo/%E5%B1%85%E5%AE%B6%E6%9C%8D%E5%8A%A1/hss-home-service/website/node_modules/node-mock-http/dist/index.mjs';
|
||||
import 'file:///home/akoo/%E5%B1%85%E5%AE%B6%E6%9C%8D%E5%8A%A1/hss-home-service/website/node_modules/unstorage/dist/index.mjs';
|
||||
import 'file:///home/akoo/%E5%B1%85%E5%AE%B6%E6%9C%8D%E5%8A%A1/hss-home-service/website/node_modules/unstorage/drivers/fs.mjs';
|
||||
import 'node:crypto';
|
||||
import 'file:///home/akoo/%E5%B1%85%E5%AE%B6%E6%9C%8D%E5%8A%A1/hss-home-service/website/node_modules/unstorage/drivers/fs-lite.mjs';
|
||||
import 'file:///home/akoo/%E5%B1%85%E5%AE%B6%E6%9C%8D%E5%8A%A1/hss-home-service/website/node_modules/unstorage/drivers/lru-cache.mjs';
|
||||
import 'file:///home/akoo/%E5%B1%85%E5%AE%B6%E6%9C%8D%E5%8A%A1/hss-home-service/website/node_modules/ohash/dist/index.mjs';
|
||||
import 'file:///home/akoo/%E5%B1%85%E5%AE%B6%E6%9C%8D%E5%8A%A1/hss-home-service/website/node_modules/klona/dist/index.mjs';
|
||||
import 'file:///home/akoo/%E5%B1%85%E5%AE%B6%E6%9C%8D%E5%8A%A1/hss-home-service/website/node_modules/defu/dist/defu.mjs';
|
||||
import 'file:///home/akoo/%E5%B1%85%E5%AE%B6%E6%9C%8D%E5%8A%A1/hss-home-service/website/node_modules/scule/dist/index.mjs';
|
||||
import 'file:///home/akoo/%E5%B1%85%E5%AE%B6%E6%9C%8D%E5%8A%A1/hss-home-service/website/node_modules/unctx/dist/index.mjs';
|
||||
import 'file:///home/akoo/%E5%B1%85%E5%AE%B6%E6%9C%8D%E5%8A%A1/hss-home-service/website/node_modules/radix3/dist/index.mjs';
|
||||
import 'node:fs';
|
||||
import 'node:url';
|
||||
import 'file:///home/akoo/%E5%B1%85%E5%AE%B6%E6%9C%8D%E5%8A%A1/hss-home-service/website/node_modules/pathe/dist/index.mjs';
|
||||
import 'file:///home/akoo/%E5%B1%85%E5%AE%B6%E6%9C%8D%E5%8A%A1/hss-home-service/website/node_modules/unhead/dist/server.mjs';
|
||||
import 'node:async_hooks';
|
||||
import 'file:///home/akoo/%E5%B1%85%E5%AE%B6%E6%9C%8D%E5%8A%A1/hss-home-service/website/node_modules/devalue/index.js';
|
||||
import 'file:///home/akoo/%E5%B1%85%E5%AE%B6%E6%9C%8D%E5%8A%A1/hss-home-service/website/node_modules/unhead/dist/plugins.mjs';
|
||||
import 'file:///home/akoo/%E5%B1%85%E5%AE%B6%E6%9C%8D%E5%8A%A1/hss-home-service/website/node_modules/unhead/dist/utils.mjs';
|
||||
import 'file:///home/akoo/%E5%B1%85%E5%AE%B6%E6%9C%8D%E5%8A%A1/hss-home-service/website/node_modules/vue-router/vue-router.node.mjs';
|
||||
import './v3-eWcT6REp.mjs';
|
||||
|
||||
const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
||||
__name: "DemoForm",
|
||||
__ssrInlineRender: true,
|
||||
setup(__props) {
|
||||
const { form, loading, success, error } = useLeadForm("demo");
|
||||
const focusAreas = ["\u653F\u5E9C\u76D1\u7BA1", "\u533B\u9662\u5EF6\u7EED\u62A4\u7406", "\u517B\u8001\u673A\u6784\u4E0A\u95E8\u670D\u52A1", "\u793E\u533A\u5C45\u5BB6\u7167\u62A4", "\u957F\u62A4\u9669\u7BA1\u7406", "\u5176\u4ED6"];
|
||||
return (_ctx, _push, _parent, _attrs) => {
|
||||
_push(`<div${ssrRenderAttrs(mergeProps({ class: "max-w-lg mx-auto" }, _attrs))}>`);
|
||||
if (!unref(success)) {
|
||||
_push(`<form class="space-y-5"><div><label class="block text-sm font-medium mb-1 text-left">\u59D3\u540D <span class="text-red-500">*</span></label><input${ssrRenderAttr("value", unref(form).name)} class="w-full px-4 py-3 rounded-xl border border-gray-200 focus:border-primary focus:ring-2 focus:ring-primary-50 outline-none transition-all" placeholder="\u60A8\u7684\u59D3\u540D"></div><div><label class="block text-sm font-medium mb-1 text-left">\u5355\u4F4D\u540D\u79F0 <span class="text-red-500">*</span></label><input${ssrRenderAttr("value", unref(form).orgName)} class="w-full px-4 py-3 rounded-xl border border-gray-200 focus:border-primary focus:ring-2 focus:ring-primary-50 outline-none transition-all" placeholder="\u60A8\u6240\u5728\u7684\u5355\u4F4D"></div><div><label class="block text-sm font-medium mb-1 text-left">\u804C\u52A1</label><input${ssrRenderAttr("value", unref(form).position)} class="w-full px-4 py-3 rounded-xl border border-gray-200 focus:border-primary focus:ring-2 focus:ring-primary-50 outline-none transition-all" placeholder="\u60A8\u7684\u804C\u52A1/\u89D2\u8272"></div><div><label class="block text-sm font-medium mb-1 text-left">\u624B\u673A\u53F7 <span class="text-red-500">*</span></label><input${ssrRenderAttr("value", unref(form).phone)} type="tel" class="w-full px-4 py-3 rounded-xl border border-gray-200 focus:border-primary focus:ring-2 focus:ring-primary-50 outline-none transition-all" placeholder="\u60A8\u7684\u624B\u673A\u53F7"></div><div><label class="block text-sm font-medium mb-1 text-left">\u6240\u5728\u57CE\u5E02</label><input${ssrRenderAttr("value", unref(form).city)} class="w-full px-4 py-3 rounded-xl border border-gray-200 focus:border-primary focus:ring-2 focus:ring-primary-50 outline-none transition-all" placeholder="\u57CE\u5E02"></div><div><label class="block text-sm font-medium mb-1 text-left">\u5173\u6CE8\u65B9\u5411</label><select class="w-full px-4 py-3 rounded-xl border border-gray-200 focus:border-primary focus:ring-2 focus:ring-primary-50 outline-none transition-all"><option value=""${ssrIncludeBooleanAttr(Array.isArray(unref(form).focusArea) ? ssrLooseContain(unref(form).focusArea, "") : ssrLooseEqual(unref(form).focusArea, "")) ? " selected" : ""}>\u8BF7\u9009\u62E9</option><!--[-->`);
|
||||
ssrRenderList(focusAreas, (a) => {
|
||||
_push(`<option${ssrRenderAttr("value", a)}${ssrIncludeBooleanAttr(Array.isArray(unref(form).focusArea) ? ssrLooseContain(unref(form).focusArea, a) : ssrLooseEqual(unref(form).focusArea, a)) ? " selected" : ""}>${ssrInterpolate(a)}</option>`);
|
||||
});
|
||||
_push(`<!--]--></select></div><div><label class="block text-sm font-medium mb-1 text-left">\u7559\u8A00\u9700\u6C42</label><textarea rows="3" class="w-full px-4 py-3 rounded-xl border border-gray-200 focus:border-primary focus:ring-2 focus:ring-primary-50 outline-none transition-all resize-none" placeholder="\u8BF7\u7B80\u8981\u63CF\u8FF0\u60A8\u7684\u9700\u6C42">${ssrInterpolate(unref(form).message)}</textarea></div>`);
|
||||
if (unref(error)) {
|
||||
_push(`<p class="text-red-500 text-sm">${ssrInterpolate(unref(error))}</p>`);
|
||||
} else {
|
||||
_push(`<!---->`);
|
||||
}
|
||||
_push(`<button type="submit"${ssrIncludeBooleanAttr(unref(loading)) ? " disabled" : ""} class="w-full px-6 py-3 bg-cta text-white rounded-xl font-semibold hover:bg-cta-700 transition-colors disabled:opacity-50 disabled:cursor-not-allowed">${ssrInterpolate(unref(loading) ? "\u63D0\u4EA4\u4E2D..." : "\u63D0\u4EA4\u9884\u7EA6")}</button></form>`);
|
||||
} else {
|
||||
_push(`<div class="text-center py-12"><div class="w-16 h-16 mx-auto mb-4 rounded-full bg-green-100 text-green-500 flex items-center justify-center"><svg class="w-10 h-10" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path d="M5 13l4 4L19 7" stroke-linecap="round" stroke-linejoin="round"></path></svg></div><h3 class="text-2xl font-bold mb-2">\u63D0\u4EA4\u6210\u529F</h3><p class="text-text-secondary">\u611F\u8C22\u60A8\u7684\u5173\u6CE8\uFF0C\u6211\u4EEC\u5C06\u5C3D\u5FEB\u4E0E\u60A8\u8054\u7CFB\u3002</p></div>`);
|
||||
}
|
||||
_push(`</div>`);
|
||||
};
|
||||
}
|
||||
});
|
||||
const _sfc_setup$2 = _sfc_main$2.setup;
|
||||
_sfc_main$2.setup = (props, ctx) => {
|
||||
const ssrContext = useSSRContext();
|
||||
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/DemoForm.vue");
|
||||
return _sfc_setup$2 ? _sfc_setup$2(props, ctx) : void 0;
|
||||
};
|
||||
const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
||||
__name: "ContactForm",
|
||||
__ssrInlineRender: true,
|
||||
setup(__props) {
|
||||
const { form, loading, success, error } = useLeadForm("contact");
|
||||
const coopTypes = ["\u653F\u5E9C\u9879\u76EE", "\u533B\u9662\u5408\u4F5C", "\u517B\u8001\u673A\u6784\u5408\u4F5C", "\u793E\u533A\u670D\u52A1", "\u6280\u672F\u5408\u4F5C", "\u5176\u4ED6"];
|
||||
return (_ctx, _push, _parent, _attrs) => {
|
||||
_push(`<div${ssrRenderAttrs(mergeProps({ class: "max-w-lg mx-auto" }, _attrs))}>`);
|
||||
if (!unref(success)) {
|
||||
_push(`<form class="space-y-5"><div class="grid sm:grid-cols-2 gap-5"><div><label class="block text-sm font-medium mb-1 text-left">\u59D3\u540D <span class="text-red-500">*</span></label><input${ssrRenderAttr("value", unref(form).name)} class="w-full px-4 py-3 rounded-xl border border-gray-200 focus:border-primary focus:ring-2 focus:ring-primary-50 outline-none" placeholder="\u60A8\u7684\u59D3\u540D"></div><div><label class="block text-sm font-medium mb-1 text-left">\u5355\u4F4D\u540D\u79F0 <span class="text-red-500">*</span></label><input${ssrRenderAttr("value", unref(form).orgName)} class="w-full px-4 py-3 rounded-xl border border-gray-200 focus:border-primary focus:ring-2 focus:ring-primary-50 outline-none" placeholder="\u60A8\u6240\u5728\u7684\u5355\u4F4D"></div></div><div><label class="block text-sm font-medium mb-1 text-left">\u624B\u673A\u53F7 <span class="text-red-500">*</span></label><input${ssrRenderAttr("value", unref(form).phone)} type="tel" class="w-full px-4 py-3 rounded-xl border border-gray-200 focus:border-primary focus:ring-2 focus:ring-primary-50 outline-none" placeholder="\u60A8\u7684\u624B\u673A\u53F7"></div><div><label class="block text-sm font-medium mb-1 text-left">\u5408\u4F5C\u7C7B\u578B</label><select class="w-full px-4 py-3 rounded-xl border border-gray-200 focus:border-primary focus:ring-2 focus:ring-primary-50 outline-none"><option value=""${ssrIncludeBooleanAttr(Array.isArray(unref(form).contact) ? ssrLooseContain(unref(form).contact, "") : ssrLooseEqual(unref(form).contact, "")) ? " selected" : ""}>\u8BF7\u9009\u62E9</option><!--[-->`);
|
||||
ssrRenderList(coopTypes, (t) => {
|
||||
_push(`<option${ssrRenderAttr("value", t)}${ssrIncludeBooleanAttr(Array.isArray(unref(form).contact) ? ssrLooseContain(unref(form).contact, t) : ssrLooseEqual(unref(form).contact, t)) ? " selected" : ""}>${ssrInterpolate(t)}</option>`);
|
||||
});
|
||||
_push(`<!--]--></select></div><div><label class="block text-sm font-medium mb-1 text-left">\u9700\u6C42\u63CF\u8FF0</label><textarea rows="4" class="w-full px-4 py-3 rounded-xl border border-gray-200 focus:border-primary focus:ring-2 focus:ring-primary-50 outline-none resize-none" placeholder="\u8BF7\u63CF\u8FF0\u60A8\u7684\u5408\u4F5C\u9700\u6C42">${ssrInterpolate(unref(form).message)}</textarea></div>`);
|
||||
if (unref(error)) {
|
||||
_push(`<p class="text-red-500 text-sm">${ssrInterpolate(unref(error))}</p>`);
|
||||
} else {
|
||||
_push(`<!---->`);
|
||||
}
|
||||
_push(`<button type="submit"${ssrIncludeBooleanAttr(unref(loading)) ? " disabled" : ""} class="w-full px-6 py-3 bg-cta text-white rounded-xl font-semibold hover:bg-cta-700 transition-colors disabled:opacity-50">${ssrInterpolate(unref(loading) ? "\u63D0\u4EA4\u4E2D..." : "\u63D0\u4EA4\u54A8\u8BE2")}</button></form>`);
|
||||
} else {
|
||||
_push(`<div class="text-center py-12"><div class="w-16 h-16 mx-auto mb-4 rounded-full bg-green-100 text-green-500 flex items-center justify-center"><svg class="w-10 h-10" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24"><path d="M5 13l4 4L19 7" stroke-linecap="round" stroke-linejoin="round"></path></svg></div><h3 class="text-2xl font-bold mb-2">\u63D0\u4EA4\u6210\u529F</h3><p class="text-text-secondary">\u611F\u8C22\u60A8\u7684\u54A8\u8BE2\uFF0C\u6211\u4EEC\u5C06\u5C3D\u5FEB\u4E0E\u60A8\u8054\u7CFB\u3002</p></div>`);
|
||||
}
|
||||
_push(`</div>`);
|
||||
};
|
||||
}
|
||||
});
|
||||
const _sfc_setup$1 = _sfc_main$1.setup;
|
||||
_sfc_main$1.setup = (props, ctx) => {
|
||||
const ssrContext = useSSRContext();
|
||||
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/ContactForm.vue");
|
||||
return _sfc_setup$1 ? _sfc_setup$1(props, ctx) : void 0;
|
||||
};
|
||||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||||
__name: "contact",
|
||||
__ssrInlineRender: true,
|
||||
setup(__props) {
|
||||
useSeo({ title: "\u8054\u7CFB\u6211\u4EEC", description: "\u9884\u7EA6\u6F14\u793A\u3001\u83B7\u53D6\u65B9\u6848\u3001\u5408\u4F5C\u54A8\u8BE2\u3002\u586B\u5199\u8868\u5355\uFF0C\u6211\u4EEC\u5C06\u5C3D\u5FEB\u4E0E\u60A8\u8054\u7CFB\u3002" });
|
||||
return (_ctx, _push, _parent, _attrs) => {
|
||||
const _component_DemoForm = _sfc_main$2;
|
||||
const _component_ContactForm = _sfc_main$1;
|
||||
_push(`<!--[--><section class="py-20 bg-gradient-to-br from-primary-700 to-primary-900 text-white"><div class="section-container text-center"><h1 class="text-4xl md:text-5xl font-bold mb-4">\u8054\u7CFB\u6211\u4EEC</h1><p class="text-xl text-blue-100 max-w-2xl mx-auto">\u9884\u7EA6\u6F14\u793A\u3001\u83B7\u53D6\u65B9\u6848\u6216\u5408\u4F5C\u54A8\u8BE2</p></div></section><section class="py-20 bg-surface"><div class="section-container"><div class="grid lg:grid-cols-2 gap-16 items-start"><div><h2 class="text-2xl font-bold mb-6">\u9884\u7EA6\u6F14\u793A</h2><p class="text-text-secondary mb-8">\u586B\u5199\u8868\u5355\uFF0C\u6211\u4EEC\u7684\u4EA7\u54C1\u987E\u95EE\u5C06\u5728 1 \u4E2A\u5DE5\u4F5C\u65E5\u5185\u4E0E\u60A8\u8054\u7CFB\uFF0C\u4E3A\u60A8\u5B89\u6392\u4E13\u5C5E\u6F14\u793A\u3002</p>`);
|
||||
_push(ssrRenderComponent(_component_DemoForm, null, null, _parent));
|
||||
_push(`</div><div><h2 class="text-2xl font-bold mb-6">\u5408\u4F5C\u54A8\u8BE2</h2><p class="text-text-secondary mb-8">\u5982\u679C\u60A8\u6709\u653F\u5E9C\u9879\u76EE\u5408\u4F5C\u3001\u533B\u9662\u5BF9\u63A5\u3001\u673A\u6784\u91C7\u8D2D\u6216\u5176\u4ED6\u5408\u4F5C\u9700\u6C42\uFF0C\u8BF7\u586B\u5199\u4E0B\u65B9\u8868\u5355\u3002</p>`);
|
||||
_push(ssrRenderComponent(_component_ContactForm, null, null, _parent));
|
||||
_push(`</div></div></div></section><!--]-->`);
|
||||
};
|
||||
}
|
||||
});
|
||||
const _sfc_setup = _sfc_main.setup;
|
||||
_sfc_main.setup = (props, ctx) => {
|
||||
const ssrContext = useSSRContext();
|
||||
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("pages/contact.vue");
|
||||
return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
|
||||
};
|
||||
|
||||
export { _sfc_main as default };
|
||||
//# sourceMappingURL=contact-ERUzdvQx.mjs.map
|
||||
Reference in New Issue
Block a user