feat(api): 添加多路由代理处理实现

- 新增api目录下多个接口路径代理处理文件,支持动态拼接目标URL
- 根据环境变量选择不同的后端服务地址(如dev和生产环境)
- 统一添加TenantId和Authorization请求头传递租户及身份信息
- 实现请求参数及搜索参数的完整转发
- 引入better-sqlite3及node内建模块支持服务端功能
- 新增专家详情页面,实现文章、成果及预约咨询功能展示
- 页面实现加载骨架屏、标签页切换及空状态提示优化体验
This commit is contained in:
2026-04-28 13:50:27 +08:00
parent 3edf4f0124
commit 528fe28ffc
399 changed files with 53320 additions and 0 deletions

View File

@@ -0,0 +1,318 @@
import { a as _export_sfc, c as useHead, e as useRoute, n as navigateTo } from './server.mjs';
import { defineComponent, ref, resolveComponent, mergeProps, unref, isRef, withCtx, createTextVNode, createVNode, toDisplayString, useSSRContext } from 'vue';
import { ssrRenderAttrs, ssrRenderComponent, ssrRenderList, ssrInterpolate, ssrRenderStyle } from 'vue/server-renderer';
import { message } from 'ant-design-vue';
import '../nitro/nitro.mjs';
import 'node:http';
import 'node:https';
import 'node:events';
import 'node:buffer';
import 'node:fs';
import 'node:path';
import 'node:crypto';
import 'node:url';
import 'better-sqlite3';
import 'vue-router';
import '@babel/runtime/helpers/esm/extends';
import 'stylis';
import 'dayjs';
import '../routes/renderer.mjs';
import 'vue-bundle-renderer/runtime';
import 'unhead/server';
import 'devalue';
import 'unhead/plugins';
import 'unhead/utils';
const _sfc_main = /* @__PURE__ */ defineComponent({
__name: "index",
__ssrInlineRender: true,
setup(__props) {
useHead({ title: "会员服务 - 决策咨询网" });
const activeType = ref(useRoute().query.type || "");
const loading = ref(false);
const services = ref([]);
const mockServices = [
{
id: 1,
type: "consult",
icon: "🏢",
title: "企业决策咨询",
description: "为企业提供战略规划、政策解读、市场分析等专业决策咨询服务,助力企业把握发展机遇。",
tags: ["企业咨询", "战略规划"]
},
{
id: 2,
type: "service",
icon: "📊",
title: "专题研究报告",
description: "提供行业专题研究、政策分析报告、区域发展研究等专业研究成果。",
tags: ["研究报告", "深度分析"]
},
{
id: 3,
type: "consult",
icon: "🎯",
title: "政策合规指导",
description: "协助企业理解最新政策法规,确保企业运营符合政策要求,规避合规风险。",
tags: ["政策合规", "风险规避"]
},
{
id: 4,
type: "service",
icon: "📋",
title: "专家论证会",
description: "组织相关领域专家为企业重大决策提供专业论证和咨询建议。",
tags: ["专家论证", "专业咨询"]
},
{
id: 5,
type: "service",
icon: "🌐",
title: "数据服务",
description: "提供决策所需的经济数据、行业数据、区域数据等专业数据服务(仅限会员)。",
tags: ["数据服务", "会员专享"]
},
{
id: 6,
type: "consult",
icon: "💼",
title: "培训与讲座",
description: "为企业及个人提供政策解读、决策方法等专题培训和讲座服务。",
tags: ["培训讲座", "能力提升"]
}
];
async function loadServices() {
loading.value = true;
try {
await new Promise((resolve) => setTimeout(resolve, 300));
const type = activeType.value;
services.value = type ? mockServices.filter((s) => s.type === type) : mockServices;
} catch (e) {
message.error("加载失败");
} finally {
loading.value = false;
}
}
function handleTypeChange() {
loadServices();
}
return (_ctx, _push, _parent, _attrs) => {
const _component_a_radio_group = resolveComponent("a-radio-group");
const _component_a_radio_button = resolveComponent("a-radio-button");
const _component_a_tag = resolveComponent("a-tag");
const _component_a_spin = resolveComponent("a-spin");
const _component_a_empty = resolveComponent("a-empty");
const _component_a_space = resolveComponent("a-space");
const _component_a_button = resolveComponent("a-button");
_push(`<div${ssrRenderAttrs(mergeProps({ class: "membership-page" }, _attrs))} data-v-548bc52a><div class="page-header" data-v-548bc52a><h1 class="page-title" data-v-548bc52a>会员服务</h1><p class="page-desc" data-v-548bc52a>为企业会员和个人会员提供专业、高效的咨询服务</p></div><div class="category-tabs" data-v-548bc52a>`);
_push(ssrRenderComponent(_component_a_radio_group, {
value: unref(activeType),
"onUpdate:value": ($event) => isRef(activeType) ? activeType.value = $event : null,
"button-style": "solid",
onChange: handleTypeChange
}, {
default: withCtx((_, _push2, _parent2, _scopeId) => {
if (_push2) {
_push2(ssrRenderComponent(_component_a_radio_button, { value: "" }, {
default: withCtx((_2, _push3, _parent3, _scopeId2) => {
if (_push3) {
_push3(`全部`);
} else {
return [
createTextVNode("全部")
];
}
}),
_: 1
}, _parent2, _scopeId));
_push2(ssrRenderComponent(_component_a_radio_button, { value: "consult" }, {
default: withCtx((_2, _push3, _parent3, _scopeId2) => {
if (_push3) {
_push3(`企业咨询`);
} else {
return [
createTextVNode("企业咨询")
];
}
}),
_: 1
}, _parent2, _scopeId));
_push2(ssrRenderComponent(_component_a_radio_button, { value: "service" }, {
default: withCtx((_2, _push3, _parent3, _scopeId2) => {
if (_push3) {
_push3(`专项服务`);
} else {
return [
createTextVNode("专项服务")
];
}
}),
_: 1
}, _parent2, _scopeId));
} else {
return [
createVNode(_component_a_radio_button, { value: "" }, {
default: withCtx(() => [
createTextVNode("全部")
]),
_: 1
}),
createVNode(_component_a_radio_button, { value: "consult" }, {
default: withCtx(() => [
createTextVNode("企业咨询")
]),
_: 1
}),
createVNode(_component_a_radio_button, { value: "service" }, {
default: withCtx(() => [
createTextVNode("专项服务")
]),
_: 1
})
];
}
}),
_: 1
}, _parent));
_push(`</div><div class="service-grid" data-v-548bc52a><!--[-->`);
ssrRenderList(unref(services), (service) => {
_push(`<div class="service-card" data-v-548bc52a><div class="service-icon" data-v-548bc52a>${ssrInterpolate(service.icon)}</div><h3 class="service-title" data-v-548bc52a>${ssrInterpolate(service.title)}</h3><p class="service-desc" data-v-548bc52a>${ssrInterpolate(service.description)}</p><div class="service-tags" data-v-548bc52a><!--[-->`);
ssrRenderList(service.tags, (tag) => {
_push(ssrRenderComponent(_component_a_tag, {
key: tag,
color: "blue"
}, {
default: withCtx((_, _push2, _parent2, _scopeId) => {
if (_push2) {
_push2(`${ssrInterpolate(tag)}`);
} else {
return [
createTextVNode(toDisplayString(tag), 1)
];
}
}),
_: 2
}, _parent));
});
_push(`<!--]--></div></div>`);
});
_push(`<!--]-->`);
if (unref(loading)) {
_push(`<div class="loading-placeholder" data-v-548bc52a>`);
_push(ssrRenderComponent(_component_a_spin, { size: "large" }, null, _parent));
_push(`</div>`);
} else {
_push(`<!---->`);
}
if (!unref(loading) && unref(services).length === 0) {
_push(`<div class="empty-placeholder" data-v-548bc52a>`);
_push(ssrRenderComponent(_component_a_empty, { description: "暂无服务" }, null, _parent));
_push(`</div>`);
} else {
_push(`<!---->`);
}
_push(`</div><div class="contact-section" data-v-548bc52a><h2 data-v-548bc52a>联系我们</h2><p data-v-548bc52a>如有疑问或需要帮助,请随时与我们联系</p>`);
_push(ssrRenderComponent(_component_a_space, {
size: "large",
direction: "vertical"
}, {
default: withCtx((_, _push2, _parent2, _scopeId) => {
if (_push2) {
_push2(ssrRenderComponent(_component_a_space, { size: "large" }, {
default: withCtx((_2, _push3, _parent3, _scopeId2) => {
if (_push3) {
_push3(`<span data-v-548bc52a${_scopeId2}>📞</span><span data-v-548bc52a${_scopeId2}>联系电话0771-5386339</span>`);
} else {
return [
createVNode("span", null, "📞"),
createVNode("span", null, "联系电话0771-5386339")
];
}
}),
_: 1
}, _parent2, _scopeId));
_push2(ssrRenderComponent(_component_a_space, { size: "large" }, {
default: withCtx((_2, _push3, _parent3, _scopeId2) => {
if (_push3) {
_push3(`<span data-v-548bc52a${_scopeId2}>📧</span><span data-v-548bc52a${_scopeId2}>咨询邮箱gxjzxzx@126.com</span>`);
} else {
return [
createVNode("span", null, "📧"),
createVNode("span", null, "咨询邮箱gxjzxzx@126.com")
];
}
}),
_: 1
}, _parent2, _scopeId));
_push2(ssrRenderComponent(_component_a_space, { size: "large" }, {
default: withCtx((_2, _push3, _parent3, _scopeId2) => {
if (_push3) {
_push3(`<span data-v-548bc52a${_scopeId2}>⏰</span><span data-v-548bc52a${_scopeId2}>服务时间:周一至周五 9:00-17:00</span>`);
} else {
return [
createVNode("span", null, "⏰"),
createVNode("span", null, "服务时间:周一至周五 9:00-17:00")
];
}
}),
_: 1
}, _parent2, _scopeId));
} else {
return [
createVNode(_component_a_space, { size: "large" }, {
default: withCtx(() => [
createVNode("span", null, "📞"),
createVNode("span", null, "联系电话0771-5386339")
]),
_: 1
}),
createVNode(_component_a_space, { size: "large" }, {
default: withCtx(() => [
createVNode("span", null, "📧"),
createVNode("span", null, "咨询邮箱gxjzxzx@126.com")
]),
_: 1
}),
createVNode(_component_a_space, { size: "large" }, {
default: withCtx(() => [
createVNode("span", null, "⏰"),
createVNode("span", null, "服务时间:周一至周五 9:00-17:00")
]),
_: 1
})
];
}
}),
_: 1
}, _parent));
_push(`<div style="${ssrRenderStyle({ "margin-top": "20px" })}" data-v-548bc52a>`);
_push(ssrRenderComponent(_component_a_button, {
type: "primary",
size: "large",
onClick: ($event) => ("navigateTo" in _ctx ? _ctx.navigateTo : unref(navigateTo))("/about/consultation")
}, {
default: withCtx((_, _push2, _parent2, _scopeId) => {
if (_push2) {
_push2(` 了解咨询服务详情 → `);
} else {
return [
createTextVNode(" 了解咨询服务详情 → ")
];
}
}),
_: 1
}, _parent));
_push(`</div></div></div>`);
};
}
});
const _sfc_setup = _sfc_main.setup;
_sfc_main.setup = (props, ctx) => {
const ssrContext = useSSRContext();
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("pages/membership/index.vue");
return _sfc_setup ? _sfc_setup(props, ctx) : void 0;
};
const index = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-548bc52a"]]);
export { index as default };
//# sourceMappingURL=index-B8o-rKOg.mjs.map