初始化参股

This commit is contained in:
2026-01-27 18:06:04 +08:00
commit 2774a539bf
254 changed files with 33255 additions and 0 deletions

View File

@@ -0,0 +1 @@
{"code":"import { defineComponent as _defineComponent } from 'vue';\nimport { o as _o, gei as _gei, sei as _sei, e as _e } from \"vue\";\nexport default /*#__PURE__*/ _defineComponent({\n __name: 'before-after',\n props: {\n beforeImage: {},\n afterImage: {},\n showTitle: { type: Boolean }\n },\n setup(__props) {\n const props = __props;\n // 预览图片\n const previewImage = (url, type) => {\n const urls = type == 'before' ? [props.beforeImage] : [props.afterImage];\n uni.previewImage({\n current: url,\n urls: urls\n });\n };\n return (_ctx, _cache) => {\n \"raw js\";\n const __returned__ = _e({\n a: _ctx.showTitle\n }, _ctx.showTitle ? {} : {}, {\n b: _ctx.beforeImage,\n c: _o($event => { return previewImage(_ctx.beforeImage, 'before'); }),\n d: _ctx.afterImage,\n e: _o($event => { return previewImage(_ctx.afterImage, 'after'); }),\n f: _sei(_gei(_ctx, ''), 'view')\n });\n return __returned__;\n };\n }\n});\n//# sourceMappingURL=D:/Project/Self/%E4%BC%98%E8%89%BA%E5%AE%B6%E6%B2%99%E5%8F%91%E7%BF%BB%E6%96%B0/%E4%BC%98%E8%89%BA%E5%AE%B6%E6%B2%99%E5%8F%91%E7%BF%BB%E6%96%B0/components/before-after/before-after.uvue?vue&type=script&setup=true&lang.uts.js.map","references":["D:/Soft/HBuilderX/plugins/uniapp-cli-vite/node_modules/@vue/runtime-core/dist/runtime-core.d.ts","D:/Soft/HBuilderX/plugins/uniapp-cli-vite/node_modules/@vue/runtime-core/dist/runtime-core.d.ts"],"uniExtApis":["uni.previewImage"],"map":"{\"version\":3,\"file\":\"before-after.uvue?vue&type=script&setup=true&lang.uts.js\",\"sourceRoot\":\"\",\"sources\":[\"before-after.uvue?vue&type=script&setup=true&lang.uts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,eAAe,IAAI,gBAAgB,EAAE,MAAM,KAAK,CAAA;AACzD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,KAAK,CAAA;AAGhE,eAAe,aAAa,CAAA,gBAAgB,CAAC;IAC3C,MAAM,EAAE,cAAc;IACtB,KAAK,EAAE;QACL,WAAW,EAAE,EAAE;QACf,UAAU,EAAE,EAAE;QACd,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;KAC7B;IACD,KAAK,CAAC,OAAY;QAEnB,MAAM,KAAK,GAAG,OAAO,CAAA;QAErB,OAAO;QACP,MAAM,YAAY,GAAG,CAAC,GAAY,EAAE,IAAa;YAChD,MAAM,IAAI,GAAG,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;YACxE,GAAG,CAAC,YAAY,CAAC;gBAChB,OAAO,EAAE,GAAG;gBACZ,IAAI,EAAE,IAAI;aACV,CAAC,CAAA;QACH,CAAC,CAAA;QAEF,OAAO,CAAC,IAAI,EAAE,MAAM;YAAO,QAAQ,CAAA;YACjC,MAAM,YAAY,GAAG,EAAE,CAAC;gBACxB,CAAC,EAAE,IAAI,CAAC,SAAS;aAClB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC3B,CAAC,EAAE,IAAI,CAAC,WAAW;gBACnB,CAAC,EAAE,EAAE,CAAC,MAAM,MAAI,OAAA,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAxC,CAAwC,CAAC;gBACzD,CAAC,EAAE,IAAI,CAAC,UAAU;gBAClB,CAAC,EAAE,EAAE,CAAC,MAAM,MAAI,OAAA,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,EAAtC,CAAsC,CAAC;gBACvD,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC;aAChC,CAAC,CAAA;YACA,OAAO,YAAY,CAAA;QACrB,CAAC,CAAA;IACD,CAAC;CAEA,CAAC,CAAA\"}"}

View File

@@ -0,0 +1 @@
{"code":"import {} from \"vue\";\nexport default defineComponent({\n onLaunch() {\n uni.__f__('log', 'at App.uvue:7', 'App Launch');\n },\n onShow() {\n uni.__f__('log', 'at App.uvue:10', 'App Show');\n },\n onHide() {\n uni.__f__('log', 'at App.uvue:13', 'App Hide');\n },\n onExit() {\n uni.__f__('log', 'at App.uvue:34', 'App Exit');\n },\n});\n//# sourceMappingURL=D:/Project/Self/%E4%BC%98%E8%89%BA%E5%AE%B6%E6%B2%99%E5%8F%91%E7%BF%BB%E6%96%B0/%E4%BC%98%E8%89%BA%E5%AE%B6%E6%B2%99%E5%8F%91%E7%BF%BB%E6%96%B0/App.uvue?vue&type=script&lang.uts.js.map","references":[],"uniExtApis":["uni.__f__"],"map":"{\"version\":3,\"file\":\"App.uvue?vue&type=script&lang.uts.js\",\"sourceRoot\":\"\",\"sources\":[\"App.uvue?vue&type=script&lang.uts\"],\"names\":[],\"mappings\":\";AAIC,+BAAe;IACd,QAAQ;QACP,GAAG,CAAC,KAAK,CAAC,KAAK,EAAC,eAAe,EAAC,YAAY,CAAC,CAAA;IAC9C,CAAC;IACD,MAAM;QACL,GAAG,CAAC,KAAK,CAAC,KAAK,EAAC,gBAAgB,EAAC,UAAU,CAAC,CAAA;IAC7C,CAAC;IACD,MAAM;QACL,GAAG,CAAC,KAAK,CAAC,KAAK,EAAC,gBAAgB,EAAC,UAAU,CAAC,CAAA;IAC7C,CAAC;IAmBD,MAAM;QACL,GAAG,CAAC,KAAK,CAAC,KAAK,EAAC,gBAAgB,EAAC,UAAU,CAAC,CAAA;IAC7C,CAAC;CACD,EAAA\"}"}

View File

@@ -0,0 +1 @@
{"code":"import { defineComponent as _defineComponent } from 'vue';\nimport { toDisplayString as _toDisplayString, t as _t, o as _o, gei as _gei, sei as _sei } from \"vue\";\nexport default /*#__PURE__*/ _defineComponent({\n __name: 'service-card',\n props: {\n id: {},\n name: {},\n icon: {}\n },\n emits: [\"click\"],\n setup(__props, _a) {\n var __emit = _a.emit;\n const props = __props;\n const emit = __emit;\n const handleClick = () => {\n emit('click', props.id);\n };\n return (_ctx, _cache) => {\n \"raw js\";\n const __returned__ = {\n a: _ctx.icon,\n b: _t(_ctx.name),\n c: _sei(_gei(_ctx, ''), 'view'),\n d: _o(handleClick)\n };\n return __returned__;\n };\n }\n});\n//# sourceMappingURL=D:/Project/Self/%E4%BC%98%E8%89%BA%E5%AE%B6%E6%B2%99%E5%8F%91%E7%BF%BB%E6%96%B0/%E4%BC%98%E8%89%BA%E5%AE%B6%E6%B2%99%E5%8F%91%E7%BF%BB%E6%96%B0/components/service-card/service-card.uvue?vue&type=script&setup=true&lang.uts.js.map","references":["D:/Soft/HBuilderX/plugins/uniapp-cli-vite/node_modules/@vue/runtime-core/dist/runtime-core.d.ts","D:/Soft/HBuilderX/plugins/uniapp-cli-vite/node_modules/@vue/runtime-core/dist/runtime-core.d.ts"],"uniExtApis":[],"map":"{\"version\":3,\"file\":\"service-card.uvue?vue&type=script&setup=true&lang.uts.js\",\"sourceRoot\":\"\",\"sources\":[\"service-card.uvue?vue&type=script&setup=true&lang.uts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,eAAe,IAAI,gBAAgB,EAAE,MAAM,KAAK,CAAA;AACzD,OAAO,EAAE,eAAe,IAAI,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE,MAAM,KAAK,CAAA;AAGrG,eAAe,aAAa,CAAA,gBAAgB,CAAC;IAC3C,MAAM,EAAE,cAAc;IACtB,KAAK,EAAE;QACL,EAAE,EAAE,EAAE;QACN,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,EAAE;KACT;IACD,KAAK,EAAE,CAAC,OAAO,CAAC;IAChB,KAAK,CAAC,OAAY,EAAE,EAAgB;YAAR,MAAM,UAAA;QAEnC,MAAM,KAAK,GAAG,OAAO,CAAA;QAErB,MAAM,IAAI,GAAG,MAAM,CAAA;QAEnB,MAAM,WAAW,GAAG;YACnB,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;QACxB,CAAC,CAAA;QAEF,OAAO,CAAC,IAAI,EAAE,MAAM;YAAO,QAAQ,CAAA;YACjC,MAAM,YAAY,GAAG;gBACrB,CAAC,EAAE,IAAI,CAAC,IAAI;gBACZ,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;gBAChB,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC;gBAC/B,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC;aACnB,CAAA;YACC,OAAO,YAAY,CAAA;QACrB,CAAC,CAAA;IACD,CAAC;CAEA,CAAC,CAAA\"}"}

View File

@@ -0,0 +1 @@
{"code":"import { defineComponent as _defineComponent } from 'vue';\nimport { unref as _unref, o as _o, toDisplayString as _toDisplayString, t as _t, e as _e } from \"vue\";\nexport default /*#__PURE__*/ _defineComponent({\n __name: 'nav-bar',\n props: {\n title: {},\n showBack: { type: Boolean },\n titleColor: {},\n bgColor: {}\n },\n setup(__props) {\n const props = __props;\n // 状态栏高度\n const statusBarHeight = ref(20);\n // 导航栏高度\n const navBarHeight = ref(44);\n onMounted(() => {\n const sysInfo = uni.getSystemInfoSync();\n statusBarHeight.value = sysInfo.statusBarHeight;\n const menuButtonInfo = uni.getMenuButtonBoundingClientRect();\n navBarHeight.value = (menuButtonInfo.top - sysInfo.statusBarHeight) * 2 + menuButtonInfo.height;\n });\n const handleBack = () => {\n uni.navigateBack(new UTSJSONObject({\n fail: () => {\n uni.switchTab({\n url: '/pages/index/index'\n });\n }\n }));\n };\n return (_ctx, _cache) => {\n \"raw js\";\n const __returned__ = _e({\n a: _ctx.showBack\n }, _ctx.showBack ? {\n b: _o(handleBack)\n } : {}, {\n c: _t(_ctx.title),\n d: _ctx.titleColor,\n e: _unref(navBarHeight) + 'px',\n f: _unref(statusBarHeight) + 'px',\n g: _unref(statusBarHeight) + _unref(navBarHeight) + 'px'\n });\n return __returned__;\n };\n }\n});\n//# sourceMappingURL=D:/Project/Self/%E4%BC%98%E8%89%BA%E5%AE%B6%E6%B2%99%E5%8F%91%E7%BF%BB%E6%96%B0/%E4%BC%98%E8%89%BA%E5%AE%B6%E6%B2%99%E5%8F%91%E7%BF%BB%E6%96%B0/components/nav-bar/nav-bar.uvue?vue&type=script&setup=true&lang.uts.js.map","references":["D:/Soft/HBuilderX/plugins/uniapp-cli-vite/node_modules/@vue/runtime-core/dist/runtime-core.d.ts","D:/Soft/HBuilderX/plugins/uniapp-cli-vite/node_modules/@vue/runtime-core/dist/runtime-core.d.ts"],"uniExtApis":["uni.getSystemInfoSync","uni.getMenuButtonBoundingClientRect","uni.switchTab","uni.navigateBack"],"map":"{\"version\":3,\"file\":\"nav-bar.uvue?vue&type=script&setup=true&lang.uts.js\",\"sourceRoot\":\"\",\"sources\":[\"nav-bar.uvue?vue&type=script&setup=true&lang.uts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,eAAe,IAAI,gBAAgB,EAAE,MAAM,KAAK,CAAA;AACzD,OAAO,EAAE,KAAK,IAAI,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,eAAe,IAAI,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,KAAK,CAAA;AAGrG,eAAe,aAAa,CAAA,gBAAgB,CAAC;IAC3C,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE;QACL,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;QAC3B,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,EAAE;KACZ;IACD,KAAK,CAAC,OAAY;QAEnB,MAAM,KAAK,GAAG,OAAO,CAAA;QAErB,QAAQ;QACR,MAAM,eAAe,GAAG,GAAG,CAAC,EAAE,CAAC,CAAA;QAC/B,QAAQ;QACR,MAAM,YAAY,GAAG,GAAG,CAAC,EAAE,CAAC,CAAA;QAE5B,SAAS,CAAC;YACT,MAAM,OAAO,GAAG,GAAG,CAAC,iBAAiB,EAAE,CAAA;YACvC,eAAe,CAAC,KAAK,GAAG,OAAO,CAAC,eAAe,CAAA;YAE/C,MAAM,cAAc,GAAG,GAAG,CAAC,+BAA+B,EAAE,CAAA;YAC5D,YAAY,CAAC,KAAK,GAAG,CAAC,cAAc,CAAC,GAAG,GAAG,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,MAAM,CAAA;QAEhG,CAAC,CAAC,CAAA;QAEF,MAAM,UAAU,GAAG;YAClB,GAAG,CAAC,YAAY,mBAAC;gBAChB,IAAI,EAAE;oBACL,GAAG,CAAC,SAAS,CAAC;wBACb,GAAG,EAAE,oBAAoB;qBACzB,CAAC,CAAA;gBACH,CAAC;aACD,EAAC,CAAA;QACH,CAAC,CAAA;QAEF,OAAO,CAAC,IAAI,EAAE,MAAM;YAAO,QAAQ,CAAA;YACjC,MAAM,YAAY,GAAG,EAAE,CAAC;gBACxB,CAAC,EAAE,IAAI,CAAC,QAAQ;aACjB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACjB,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC;aAClB,CAAC,CAAC,CAAC,EAAE,EAAE;gBACN,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;gBACjB,CAAC,EAAE,IAAI,CAAC,UAAU;gBAClB,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI;gBAC9B,CAAC,EAAE,MAAM,CAAC,eAAe,CAAC,GAAG,IAAI;gBACjC,CAAC,EAAE,MAAM,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI;aACzD,CAAC,CAAA;YACA,OAAO,YAAY,CAAA;QACrB,CAAC,CAAA;IACD,CAAC;CAEA,CAAC,CAAA\"}"}

View File

@@ -0,0 +1 @@
{"code":"import { defineComponent as _defineComponent } from 'vue';\nimport { toDisplayString as _toDisplayString, t as _t, o as _o, gei as _gei, sei as _sei } from \"vue\";\nclass CaseItem extends UTS.UTSType {\n static get$UTSMetadata$() {\n return {\n kind: 2,\n get fields() {\n return {\n id: { type: String, optional: false },\n title: { type: String, optional: false },\n category: { type: String, optional: false },\n categoryName: { type: String, optional: false },\n coverImage: { type: String, optional: false },\n material: { type: String, optional: false },\n duration: { type: String, optional: false },\n price: { type: String, optional: false },\n views: { type: Number, optional: false },\n likes: { type: Number, optional: false }\n };\n },\n name: \"CaseItem\"\n };\n }\n constructor(options, metadata = CaseItem.get$UTSMetadata$(), isJSONParse = false) {\n super();\n this.__props__ = UTS.UTSType.initProps(options, metadata, isJSONParse);\n this.id = this.__props__.id;\n this.title = this.__props__.title;\n this.category = this.__props__.category;\n this.categoryName = this.__props__.categoryName;\n this.coverImage = this.__props__.coverImage;\n this.material = this.__props__.material;\n this.duration = this.__props__.duration;\n this.price = this.__props__.price;\n this.views = this.__props__.views;\n this.likes = this.__props__.likes;\n delete this.__props__;\n }\n}\nexport default /*#__PURE__*/ _defineComponent({\n __name: 'case-card',\n props: {\n caseData: {}\n },\n emits: [\"click\"],\n setup(__props, _a) {\n var __emit = _a.emit;\n // 定义Props类型\n const props = __props;\n const emit = __emit;\n const handleClick = () => {\n emit('click', props.caseData.id);\n };\n return (_ctx, _cache) => {\n \"raw js\";\n const __returned__ = {\n a: _ctx.caseData.coverImage,\n b: _t(_ctx.caseData.categoryName),\n c: _t(_ctx.caseData.title),\n d: _t(_ctx.caseData.material),\n e: _t(_ctx.caseData.duration),\n f: _t(_ctx.caseData.price),\n g: _t(_ctx.caseData.views),\n h: _t(_ctx.caseData.likes),\n i: _sei(_gei(_ctx, ''), 'view'),\n j: _o(handleClick)\n };\n return __returned__;\n };\n }\n});\n//# sourceMappingURL=D:/Project/Self/%E4%BC%98%E8%89%BA%E5%AE%B6%E6%B2%99%E5%8F%91%E7%BF%BB%E6%96%B0/%E4%BC%98%E8%89%BA%E5%AE%B6%E6%B2%99%E5%8F%91%E7%BF%BB%E6%96%B0/components/case-card/case-card.uvue?vue&type=script&setup=true&lang.uts.js.map","references":["D:/Soft/HBuilderX/plugins/uniapp-cli-vite/node_modules/@vue/runtime-core/dist/runtime-core.d.ts","D:/Soft/HBuilderX/plugins/uniapp-cli-vite/node_modules/@vue/runtime-core/dist/runtime-core.d.ts"],"uniExtApis":[],"map":"{\"version\":3,\"file\":\"case-card.uvue?vue&type=script&setup=true&lang.uts.js\",\"sourceRoot\":\"\",\"sources\":[\"case-card.uvue?vue&type=script&setup=true&lang.uts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,eAAe,IAAI,gBAAgB,EAAE,MAAM,KAAK,CAAA;AACzD,OAAO,EAAE,eAAe,IAAI,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE,MAAM,KAAK,CAAA;MAEhG,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcb,eAAe,aAAa,CAAA,gBAAgB,CAAC;IAC3C,MAAM,EAAE,WAAW;IACnB,KAAK,EAAE;QACL,QAAQ,EAAE,EAAE;KACb;IACD,KAAK,EAAE,CAAC,OAAO,CAAC;IAChB,KAAK,CAAC,OAAY,EAAE,EAAgB;YAAR,MAAM,UAAA;QAEnC,YAAY;QACZ,MAAM,KAAK,GAAG,OAAO,CAAA;QAErB,MAAM,IAAI,GAAG,MAAM,CAAA;QAEnB,MAAM,WAAW,GAAG;YACnB,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QACjC,CAAC,CAAA;QAEF,OAAO,CAAC,IAAI,EAAE,MAAM;YAAO,QAAQ,CAAA;YACjC,MAAM,YAAY,GAAG;gBACrB,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU;gBAC3B,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;gBACjC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAC1B,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAC7B,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAC7B,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAC1B,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAC1B,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAC1B,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC;gBAC/B,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC;aACnB,CAAA;YACC,OAAO,YAAY,CAAA;QACrB,CAAC,CAAA;IACD,CAAC;CAEA,CAAC,CAAA\"}"}

View File

@@ -0,0 +1 @@
{"code":"import { defineComponent as _defineComponent } from 'vue';\nimport { toDisplayString as _toDisplayString, t as _t, o as _o, gei as _gei, sei as _sei, e as _e } from \"vue\";\nexport default /*#__PURE__*/ _defineComponent({\n __name: 'section-header',\n props: {\n title: {},\n showMore: { type: Boolean }\n },\n emits: [\"more\"],\n setup(__props, _a) {\n var __emit = _a.emit;\n const props = __props;\n const emit = __emit;\n const handleMore = () => {\n emit('more');\n };\n return (_ctx, _cache) => {\n \"raw js\";\n const __returned__ = _e({\n a: _t(_ctx.title),\n b: _ctx.showMore\n }, _ctx.showMore ? {\n c: _o(handleMore)\n } : {}, {\n d: _sei(_gei(_ctx, ''), 'view')\n });\n return __returned__;\n };\n }\n});\n//# sourceMappingURL=D:/Project/Self/%E4%BC%98%E8%89%BA%E5%AE%B6%E6%B2%99%E5%8F%91%E7%BF%BB%E6%96%B0/%E4%BC%98%E8%89%BA%E5%AE%B6%E6%B2%99%E5%8F%91%E7%BF%BB%E6%96%B0/components/section-header/section-header.uvue?vue&type=script&setup=true&lang.uts.js.map","references":["D:/Soft/HBuilderX/plugins/uniapp-cli-vite/node_modules/@vue/runtime-core/dist/runtime-core.d.ts","D:/Soft/HBuilderX/plugins/uniapp-cli-vite/node_modules/@vue/runtime-core/dist/runtime-core.d.ts"],"uniExtApis":[],"map":"{\"version\":3,\"file\":\"section-header.uvue?vue&type=script&setup=true&lang.uts.js\",\"sourceRoot\":\"\",\"sources\":[\"section-header.uvue?vue&type=script&setup=true&lang.uts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,eAAe,IAAI,gBAAgB,EAAE,MAAM,KAAK,CAAA;AACzD,OAAO,EAAE,eAAe,IAAI,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,KAAK,CAAA;AAG9G,eAAe,aAAa,CAAA,gBAAgB,CAAC;IAC3C,MAAM,EAAE,gBAAgB;IACxB,KAAK,EAAE;QACL,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;KAC5B;IACD,KAAK,EAAE,CAAC,MAAM,CAAC;IACf,KAAK,CAAC,OAAY,EAAE,EAAgB;YAAR,MAAM,UAAA;QAEnC,MAAM,KAAK,GAAG,OAAO,CAAA;QAErB,MAAM,IAAI,GAAG,MAAM,CAAA;QAEnB,MAAM,UAAU,GAAG;YAClB,IAAI,CAAC,MAAM,CAAC,CAAA;QACb,CAAC,CAAA;QAEF,OAAO,CAAC,IAAI,EAAE,MAAM;YAAO,QAAQ,CAAA;YACjC,MAAM,YAAY,GAAG,EAAE,CAAC;gBACxB,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;gBACjB,CAAC,EAAE,IAAI,CAAC,QAAQ;aACjB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACjB,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC;aAClB,CAAC,CAAC,CAAC,EAAE,EAAE;gBACN,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC;aAChC,CAAC,CAAA;YACA,OAAO,YAAY,CAAA;QACrB,CAAC,CAAA;IACD,CAAC;CAEA,CAAC,CAAA\"}"}

View File

@@ -0,0 +1 @@
{"code":"import { get, post } from \"../utils/request\";\n/**\n * 获取轮播图\n */\nexport const getBanners = () => {\n return get('/banners');\n};\n/**\n * 获取案例列表\n */\nexport const getCaseList = (params) => {\n return get('/cases', params);\n};\n/**\n * 获取案例详情\n */\nexport const getCaseDetail = (id) => {\n return get(`/cases/${id}`);\n};\n/**\n * 获取热门案例\n */\nexport const getHotCases = () => {\n return get('/cases/hot');\n};\n/**\n * 获取服务流程\n */\nexport const getServiceProcess = () => {\n return get('/service/process');\n};\n/**\n * 获取公司信息\n */\nexport const getCompanyInfo = () => {\n return get('/company/info');\n};\n/**\n * 提交预约\n */\nexport const submitBooking = (data) => {\n return post('/booking', data);\n};\n/**\n * 获取用户信息\n */\nexport const getUserInfo = () => {\n return get('/user/info');\n};\n/**\n * 获取用户收藏列表\n */\nexport const getFavorites = () => {\n return get('/user/favorites');\n};\n/**\n * 添加收藏\n */\nexport const addFavorite = (caseId) => {\n return post('/user/favorites', new UTSJSONObject({ caseId: caseId }));\n};\n/**\n * 取消收藏\n */\nexport const removeFavorite = (caseId) => {\n return post('/user/favorites/remove', new UTSJSONObject({ caseId: caseId }));\n};\n/**\n * 获取预约记录\n */\nexport const getBookingList = () => {\n return get('/user/bookings');\n};\n//# sourceMappingURL=D:/Project/Self/%E4%BC%98%E8%89%BA%E5%AE%B6%E6%B2%99%E5%8F%91%E7%BF%BB%E6%96%B0/%E4%BC%98%E8%89%BA%E5%AE%B6%E6%B2%99%E5%8F%91%E7%BF%BB%E6%96%B0/api/index.uts.js.map","references":[],"uniExtApis":[],"map":"{\"version\":3,\"file\":\"index.uts.js\",\"sourceRoot\":\"\",\"sources\":[\"index.uts\"],\"names\":[],\"mappings\":\"OAGO,EAAE,GAAG,EAAE,IAAI,EAAE;AAEpB;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACzB,OAAO,GAAG,CAAC,UAAU,CAAC,CAAA;AACvB,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAsB;IACjD,OAAO,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;AAC7B,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAAW;IACxC,OAAO,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;AAC3B,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IAC1B,OAAO,GAAG,CAAC,YAAY,CAAC,CAAA;AACzB,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAChC,OAAO,GAAG,CAAC,kBAAkB,CAAC,CAAA;AAC/B,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC7B,OAAO,GAAG,CAAC,eAAe,CAAC,CAAA;AAC5B,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAoB;IACjD,OAAO,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;AAC9B,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IAC1B,OAAO,GAAG,CAAC,YAAY,CAAC,CAAA;AACzB,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC3B,OAAO,GAAG,CAAC,iBAAiB,CAAC,CAAA;AAC9B,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAe;IAC1C,OAAO,IAAI,CAAC,iBAAiB,oBAAE,EAAE,MAAM,EAAE,MAAM,EAAmB,EAAC,CAAA;AACpE,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAe;IAC7C,OAAO,IAAI,CAAC,wBAAwB,oBAAE,EAAE,MAAM,EAAE,MAAM,EAAmB,EAAC,CAAA;AAC3E,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC7B,OAAO,GAAG,CAAC,gBAAgB,CAAC,CAAA;AAC7B,CAAC,CAAA\"}"}

View File

@@ -0,0 +1 @@
{"code":"import { defineComponent as _defineComponent } from 'vue';\nimport { o as _o, gei as _gei, sei as _sei, e as _e } from \"vue\";\nexport default /*#__PURE__*/ _defineComponent({\n __name: 'before-after',\n props: {\n beforeImage: {},\n afterImage: {},\n showTitle: { type: Boolean }\n },\n setup(__props) {\n const props = __props;\n // 预览图片\n const previewImage = (url, type) => {\n const urls = type == 'before' ? [props.beforeImage] : [props.afterImage];\n uni.previewImage({\n current: url,\n urls: urls\n });\n };\n return (_ctx, _cache) => {\n \"raw js\";\n const __returned__ = _e({\n a: _ctx.showTitle\n }, _ctx.showTitle ? {} : {}, {\n b: _ctx.beforeImage,\n c: _o($event => { return previewImage(_ctx.beforeImage, 'before'); }),\n d: _ctx.afterImage,\n e: _o($event => { return previewImage(_ctx.afterImage, 'after'); }),\n f: _sei(_gei(_ctx, ''), 'view')\n });\n return __returned__;\n };\n }\n});\n//# sourceMappingURL=D:/Project/Self/%E4%BC%98%E8%89%BA%E5%AE%B6%E6%B2%99%E5%8F%91%E7%BF%BB%E6%96%B0/%E4%BC%98%E8%89%BA%E5%AE%B6%E6%B2%99%E5%8F%91%E7%BF%BB%E6%96%B0/components/before-after/before-after.uvue?vue&type=script&setup=true&lang.uts.js.map","references":["D:/Soft/HBuilderX/plugins/uniapp-cli-vite/node_modules/@vue/runtime-core/dist/runtime-core.d.ts","D:/Soft/HBuilderX/plugins/uniapp-cli-vite/node_modules/@vue/runtime-core/dist/runtime-core.d.ts"],"uniExtApis":["uni.previewImage"],"map":"{\"version\":3,\"file\":\"before-after.uvue?vue&type=script&setup=true&lang.uts.js\",\"sourceRoot\":\"\",\"sources\":[\"before-after.uvue?vue&type=script&setup=true&lang.uts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,eAAe,IAAI,gBAAgB,EAAE,MAAM,KAAK,CAAA;AACzD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,KAAK,CAAA;AAGhE,eAAe,aAAa,CAAA,gBAAgB,CAAC;IAC3C,MAAM,EAAE,cAAc;IACtB,KAAK,EAAE;QACL,WAAW,EAAE,EAAE;QACf,UAAU,EAAE,EAAE;QACd,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;KAC7B;IACD,KAAK,CAAC,OAAY;QAEnB,MAAM,KAAK,GAAG,OAAO,CAAA;QAErB,OAAO;QACP,MAAM,YAAY,GAAG,CAAC,GAAY,EAAE,IAAa;YAChD,MAAM,IAAI,GAAG,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;YACxE,GAAG,CAAC,YAAY,CAAC;gBAChB,OAAO,EAAE,GAAG;gBACZ,IAAI,EAAE,IAAI;aACV,CAAC,CAAA;QACH,CAAC,CAAA;QAEF,OAAO,CAAC,IAAI,EAAE,MAAM;YAAO,QAAQ,CAAA;YACjC,MAAM,YAAY,GAAG,EAAE,CAAC;gBACxB,CAAC,EAAE,IAAI,CAAC,SAAS;aAClB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC3B,CAAC,EAAE,IAAI,CAAC,WAAW;gBACnB,CAAC,EAAE,EAAE,CAAC,MAAM,MAAI,OAAA,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAxC,CAAwC,CAAC;gBACzD,CAAC,EAAE,IAAI,CAAC,UAAU;gBAClB,CAAC,EAAE,EAAE,CAAC,MAAM,MAAI,OAAA,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,EAAtC,CAAsC,CAAC;gBACvD,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC;aAChC,CAAC,CAAA;YACA,OAAO,YAAY,CAAA;QACrB,CAAC,CAAA;IACD,CAAC;CAEA,CAAC,CAAA\"}"}

View File

@@ -0,0 +1 @@
{"code":"/**\n * 项目配置文件\n */\n// 环境配置\nexport const ENV = new UTSJSONObject({\n // 开发环境\n development: new UTSJSONObject({\n baseUrl: 'http://localhost:3000/api',\n imageBaseUrl: 'http://localhost:3000'\n }),\n // 生产环境\n production: new UTSJSONObject({\n baseUrl: 'https://api.youyijia.com/api',\n imageBaseUrl: 'https://api.youyijia.com'\n })\n}\n// 当前环境 - 切换为 'production' 上线\n);\n// 当前环境 - 切换为 'production' 上线\nexport const currentEnv = 'development';\n// 获取当前环境配置\nexport const getEnvConfig = () => {\n if (currentEnv == 'production') {\n return new UTSJSONObject({\n baseUrl: ENV.production.baseUrl,\n imageBaseUrl: ENV.production.imageBaseUrl\n });\n }\n return new UTSJSONObject({\n baseUrl: ENV.development.baseUrl,\n imageBaseUrl: ENV.development.imageBaseUrl\n });\n};\n// 是否使用Mock数据\nexport const useMock = true;\n// 分页配置\nexport const PAGE_SIZE = 10;\n// 图片上传配置\nexport const UPLOAD_CONFIG = new UTSJSONObject({\n maxSize: 5 * 1024 * 1024,\n maxCount: 9,\n accept: ['image/jpeg', 'image/png', 'image/gif']\n}\n// 缓存Key\n);\n// 缓存Key\nexport const STORAGE_KEYS = new UTSJSONObject({\n TOKEN: 'user_token',\n USER_INFO: 'user_info',\n FAVORITES: 'user_favorites',\n SEARCH_HISTORY: 'search_history'\n}\n// 沙发分类\n);\n// 沙发分类\nexport const SOFA_CATEGORIES = [\n new UTSJSONObject({ id: 'all', name: '全部' }),\n new UTSJSONObject({ id: 'leather', name: '皮沙发' }),\n new UTSJSONObject({ id: 'fabric', name: '布艺沙发' }),\n new UTSJSONObject({ id: 'functional', name: '功能沙发' }),\n new UTSJSONObject({ id: 'antique', name: '古典沙发' }),\n new UTSJSONObject({ id: 'office', name: '办公沙发' })\n];\n// 翻新服务类型\nexport const SERVICE_TYPES = [\n new UTSJSONObject({ id: 'repair', name: '局部修复', icon: '/static/icons/repair.png' }),\n new UTSJSONObject({ id: 'recolor', name: '改色翻新', icon: '/static/icons/recolor.png' }),\n new UTSJSONObject({ id: 'refurbish', name: '整体翻新', icon: '/static/icons/refurbish.png' }),\n new UTSJSONObject({ id: 'custom', name: '定制换皮', icon: '/static/icons/custom.png' })\n];\n//# sourceMappingURL=D:/Project/Self/%E4%BC%98%E8%89%BA%E5%AE%B6%E6%B2%99%E5%8F%91%E7%BF%BB%E6%96%B0/%E4%BC%98%E8%89%BA%E5%AE%B6%E6%B2%99%E5%8F%91%E7%BF%BB%E6%96%B0/utils/config.uts.js.map","references":[],"uniExtApis":[],"map":"{\"version\":3,\"file\":\"config.uts.js\",\"sourceRoot\":\"\",\"sources\":[\"config.uts\"],\"names\":[],\"mappings\":\"AAAA;;GAEG;AAEH,OAAO;AACP,MAAM,CAAC,MAAM,GAAG,qBAAG;IAClB,OAAO;IACP,WAAW,oBAAE;QACZ,OAAO,EAAE,2BAA2B;QACpC,YAAY,EAAE,uBAAuB;KACrC,CAAA;IACD,OAAO;IACP,UAAU,oBAAE;QACX,OAAO,EAAE,8BAA8B;QACvC,YAAY,EAAE,0BAA0B;KACxC,CAAA;CACD;AAED,6BAA6B;CAF5B,CAAA;AAED,6BAA6B;AAC7B,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CAAA;AAEvC,WAAW;AACX,MAAM,CAAC,MAAM,YAAY,GAAG;IAC3B,IAAI,UAAU,IAAI,YAAY,EAAE;QAC/B,yBAAO;YACN,OAAO,EAAE,GAAG,CAAC,UAAU,CAAC,OAAO;YAC/B,YAAY,EAAE,GAAG,CAAC,UAAU,CAAC,YAAY;SACxB,EAAA;KAClB;IACD,yBAAO;QACN,OAAO,EAAE,GAAG,CAAC,WAAW,CAAC,OAAO;QAChC,YAAY,EAAE,GAAG,CAAC,WAAW,CAAC,YAAY;KACzB,EAAA;AACnB,CAAC,CAAA;AAED,aAAa;AACb,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAA;AAE3B,OAAO;AACP,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,CAAA;AAE3B,SAAS;AACT,MAAM,CAAC,MAAM,aAAa,qBAAG;IAC5B,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;IACxB,QAAQ,EAAE,CAAC;IACX,MAAM,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,WAAW,CAAC;CAChD;AAED,QAAQ;CAFP,CAAA;AAED,QAAQ;AACR,MAAM,CAAC,MAAM,YAAY,qBAAG;IAC3B,KAAK,EAAE,YAAY;IACnB,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,gBAAgB;IAC3B,cAAc,EAAE,gBAAgB;CAChC;AAED,OAAO;CAFN,CAAA;AAED,OAAO;AACP,MAAM,CAAC,MAAM,eAAe,GAAG;sBAC9B,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;sBACzB,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE;sBAC9B,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;sBAC9B,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE;sBAClC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE;sBAC/B,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;CAC9B,CAAA;AAED,SAAS;AACT,MAAM,CAAC,MAAM,aAAa,GAAG;sBAC5B,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,EAAE;sBAChE,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,2BAA2B,EAAE;sBAClE,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,6BAA6B,EAAE;sBACtE,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,EAAE;CAChE,CAAA\"}"}

View File

@@ -0,0 +1 @@
{"code":"import { defineComponent as _defineComponent } from 'vue';\nimport { toDisplayString as _toDisplayString, t as _t, o as _o, gei as _gei, sei as _sei } from \"vue\";\nexport default /*#__PURE__*/ _defineComponent({\n __name: 'service-card',\n props: {\n id: {},\n name: {},\n icon: {}\n },\n emits: [\"click\"],\n setup(__props, _a) {\n var __emit = _a.emit;\n const props = __props;\n const emit = __emit;\n const handleClick = () => {\n emit('click', props.id);\n };\n return (_ctx, _cache) => {\n \"raw js\";\n const __returned__ = {\n a: _ctx.icon,\n b: _t(_ctx.name),\n c: _sei(_gei(_ctx, ''), 'view'),\n d: _o(handleClick)\n };\n return __returned__;\n };\n }\n});\n//# sourceMappingURL=D:/Project/Self/%E4%BC%98%E8%89%BA%E5%AE%B6%E6%B2%99%E5%8F%91%E7%BF%BB%E6%96%B0/%E4%BC%98%E8%89%BA%E5%AE%B6%E6%B2%99%E5%8F%91%E7%BF%BB%E6%96%B0/components/service-card/service-card.uvue?vue&type=script&setup=true&lang.uts.js.map","references":["D:/Soft/HBuilderX/plugins/uniapp-cli-vite/node_modules/@vue/runtime-core/dist/runtime-core.d.ts","D:/Soft/HBuilderX/plugins/uniapp-cli-vite/node_modules/@vue/runtime-core/dist/runtime-core.d.ts"],"uniExtApis":[],"map":"{\"version\":3,\"file\":\"service-card.uvue?vue&type=script&setup=true&lang.uts.js\",\"sourceRoot\":\"\",\"sources\":[\"service-card.uvue?vue&type=script&setup=true&lang.uts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,eAAe,IAAI,gBAAgB,EAAE,MAAM,KAAK,CAAA;AACzD,OAAO,EAAE,eAAe,IAAI,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE,MAAM,KAAK,CAAA;AAGrG,eAAe,aAAa,CAAA,gBAAgB,CAAC;IAC3C,MAAM,EAAE,cAAc;IACtB,KAAK,EAAE;QACL,EAAE,EAAE,EAAE;QACN,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,EAAE;KACT;IACD,KAAK,EAAE,CAAC,OAAO,CAAC;IAChB,KAAK,CAAC,OAAY,EAAE,EAAgB;YAAR,MAAM,UAAA;QAEnC,MAAM,KAAK,GAAG,OAAO,CAAA;QAErB,MAAM,IAAI,GAAG,MAAM,CAAA;QAEnB,MAAM,WAAW,GAAG;YACnB,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;QACxB,CAAC,CAAA;QAEF,OAAO,CAAC,IAAI,EAAE,MAAM;YAAO,QAAQ,CAAA;YACjC,MAAM,YAAY,GAAG;gBACrB,CAAC,EAAE,IAAI,CAAC,IAAI;gBACZ,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;gBAChB,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC;gBAC/B,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC;aACnB,CAAA;YACC,OAAO,YAAY,CAAA;QACrB,CAAC,CAAA;IACD,CAAC;CAEA,CAAC,CAAA\"}"}

View File

@@ -0,0 +1 @@
{"code":"import {} from \"vue\";\nexport default defineComponent({\n onLaunch() {\n uni.__f__('log', 'at App.uvue:7', 'App Launch');\n },\n onShow() {\n uni.__f__('log', 'at App.uvue:10', 'App Show');\n },\n onHide() {\n uni.__f__('log', 'at App.uvue:13', 'App Hide');\n },\n onExit() {\n uni.__f__('log', 'at App.uvue:34', 'App Exit');\n },\n});\n//# sourceMappingURL=D:/Project/Self/%E4%BC%98%E8%89%BA%E5%AE%B6%E6%B2%99%E5%8F%91%E7%BF%BB%E6%96%B0/%E4%BC%98%E8%89%BA%E5%AE%B6%E6%B2%99%E5%8F%91%E7%BF%BB%E6%96%B0/App.uvue?vue&type=script&lang.uts.js.map","references":[],"uniExtApis":["uni.__f__"],"map":"{\"version\":3,\"file\":\"App.uvue?vue&type=script&lang.uts.js\",\"sourceRoot\":\"\",\"sources\":[\"App.uvue?vue&type=script&lang.uts\"],\"names\":[],\"mappings\":\";AAIC,+BAAe;IACd,QAAQ;QACP,GAAG,CAAC,KAAK,CAAC,KAAK,EAAC,eAAe,EAAC,YAAY,CAAC,CAAA;IAC9C,CAAC;IACD,MAAM;QACL,GAAG,CAAC,KAAK,CAAC,KAAK,EAAC,gBAAgB,EAAC,UAAU,CAAC,CAAA;IAC7C,CAAC;IACD,MAAM;QACL,GAAG,CAAC,KAAK,CAAC,KAAK,EAAC,gBAAgB,EAAC,UAAU,CAAC,CAAA;IAC7C,CAAC;IAmBD,MAAM;QACL,GAAG,CAAC,KAAK,CAAC,KAAK,EAAC,gBAAgB,EAAC,UAAU,CAAC,CAAA;IAC7C,CAAC;CACD,EAAA\"}"}

View File

@@ -0,0 +1 @@
{"code":"import { defineComponent as _defineComponent } from 'vue';\nimport { unref as _unref, o as _o, toDisplayString as _toDisplayString, t as _t, e as _e } from \"vue\";\nexport default /*#__PURE__*/ _defineComponent({\n __name: 'nav-bar',\n props: {\n title: {},\n showBack: { type: Boolean },\n titleColor: {},\n bgColor: {}\n },\n setup(__props) {\n const props = __props;\n // 状态栏高度\n const statusBarHeight = ref(20);\n // 导航栏高度\n const navBarHeight = ref(44);\n onMounted(() => {\n const sysInfo = uni.getSystemInfoSync();\n statusBarHeight.value = sysInfo.statusBarHeight;\n const menuButtonInfo = uni.getMenuButtonBoundingClientRect();\n navBarHeight.value = (menuButtonInfo.top - sysInfo.statusBarHeight) * 2 + menuButtonInfo.height;\n });\n const handleBack = () => {\n uni.navigateBack(new UTSJSONObject({\n fail: () => {\n uni.switchTab({\n url: '/pages/index/index'\n });\n }\n }));\n };\n return (_ctx, _cache) => {\n \"raw js\";\n const __returned__ = _e({\n a: _ctx.showBack\n }, _ctx.showBack ? {\n b: _o(handleBack)\n } : {}, {\n c: _t(_ctx.title),\n d: _ctx.titleColor,\n e: _unref(navBarHeight) + 'px',\n f: _unref(statusBarHeight) + 'px',\n g: _unref(statusBarHeight) + _unref(navBarHeight) + 'px'\n });\n return __returned__;\n };\n }\n});\n//# sourceMappingURL=D:/Project/Self/%E4%BC%98%E8%89%BA%E5%AE%B6%E6%B2%99%E5%8F%91%E7%BF%BB%E6%96%B0/%E4%BC%98%E8%89%BA%E5%AE%B6%E6%B2%99%E5%8F%91%E7%BF%BB%E6%96%B0/components/nav-bar/nav-bar.uvue?vue&type=script&setup=true&lang.uts.js.map","references":["D:/Soft/HBuilderX/plugins/uniapp-cli-vite/node_modules/@vue/runtime-core/dist/runtime-core.d.ts","D:/Soft/HBuilderX/plugins/uniapp-cli-vite/node_modules/@vue/runtime-core/dist/runtime-core.d.ts"],"uniExtApis":["uni.getSystemInfoSync","uni.getMenuButtonBoundingClientRect","uni.switchTab","uni.navigateBack"],"map":"{\"version\":3,\"file\":\"nav-bar.uvue?vue&type=script&setup=true&lang.uts.js\",\"sourceRoot\":\"\",\"sources\":[\"nav-bar.uvue?vue&type=script&setup=true&lang.uts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,eAAe,IAAI,gBAAgB,EAAE,MAAM,KAAK,CAAA;AACzD,OAAO,EAAE,KAAK,IAAI,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,eAAe,IAAI,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,KAAK,CAAA;AAGrG,eAAe,aAAa,CAAA,gBAAgB,CAAC;IAC3C,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE;QACL,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;QAC3B,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,EAAE;KACZ;IACD,KAAK,CAAC,OAAY;QAEnB,MAAM,KAAK,GAAG,OAAO,CAAA;QAErB,QAAQ;QACR,MAAM,eAAe,GAAG,GAAG,CAAC,EAAE,CAAC,CAAA;QAC/B,QAAQ;QACR,MAAM,YAAY,GAAG,GAAG,CAAC,EAAE,CAAC,CAAA;QAE5B,SAAS,CAAC;YACT,MAAM,OAAO,GAAG,GAAG,CAAC,iBAAiB,EAAE,CAAA;YACvC,eAAe,CAAC,KAAK,GAAG,OAAO,CAAC,eAAe,CAAA;YAE/C,MAAM,cAAc,GAAG,GAAG,CAAC,+BAA+B,EAAE,CAAA;YAC5D,YAAY,CAAC,KAAK,GAAG,CAAC,cAAc,CAAC,GAAG,GAAG,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,MAAM,CAAA;QAEhG,CAAC,CAAC,CAAA;QAEF,MAAM,UAAU,GAAG;YAClB,GAAG,CAAC,YAAY,mBAAC;gBAChB,IAAI,EAAE;oBACL,GAAG,CAAC,SAAS,CAAC;wBACb,GAAG,EAAE,oBAAoB;qBACzB,CAAC,CAAA;gBACH,CAAC;aACD,EAAC,CAAA;QACH,CAAC,CAAA;QAEF,OAAO,CAAC,IAAI,EAAE,MAAM;YAAO,QAAQ,CAAA;YACjC,MAAM,YAAY,GAAG,EAAE,CAAC;gBACxB,CAAC,EAAE,IAAI,CAAC,QAAQ;aACjB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACjB,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC;aAClB,CAAC,CAAC,CAAC,EAAE,EAAE;gBACN,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;gBACjB,CAAC,EAAE,IAAI,CAAC,UAAU;gBAClB,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI;gBAC9B,CAAC,EAAE,MAAM,CAAC,eAAe,CAAC,GAAG,IAAI;gBACjC,CAAC,EAAE,MAAM,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,IAAI;aACzD,CAAC,CAAA;YACA,OAAO,YAAY,CAAA;QACrB,CAAC,CAAA;IACD,CAAC;CAEA,CAAC,CAAA\"}"}

View File

@@ -0,0 +1 @@
{"code":"import { defineComponent as _defineComponent } from 'vue';\nimport { toDisplayString as _toDisplayString, t as _t, o as _o, gei as _gei, sei as _sei } from \"vue\";\nclass CaseItem extends UTS.UTSType {\n static get$UTSMetadata$() {\n return {\n kind: 2,\n get fields() {\n return {\n id: { type: String, optional: false },\n title: { type: String, optional: false },\n category: { type: String, optional: false },\n categoryName: { type: String, optional: false },\n coverImage: { type: String, optional: false },\n material: { type: String, optional: false },\n duration: { type: String, optional: false },\n price: { type: String, optional: false },\n views: { type: Number, optional: false },\n likes: { type: Number, optional: false }\n };\n },\n name: \"CaseItem\"\n };\n }\n constructor(options, metadata = CaseItem.get$UTSMetadata$(), isJSONParse = false) {\n super();\n this.__props__ = UTS.UTSType.initProps(options, metadata, isJSONParse);\n this.id = this.__props__.id;\n this.title = this.__props__.title;\n this.category = this.__props__.category;\n this.categoryName = this.__props__.categoryName;\n this.coverImage = this.__props__.coverImage;\n this.material = this.__props__.material;\n this.duration = this.__props__.duration;\n this.price = this.__props__.price;\n this.views = this.__props__.views;\n this.likes = this.__props__.likes;\n delete this.__props__;\n }\n}\nexport default /*#__PURE__*/ _defineComponent({\n __name: 'case-card',\n props: {\n caseData: {}\n },\n emits: [\"click\"],\n setup(__props, _a) {\n var __emit = _a.emit;\n // 定义Props类型\n const props = __props;\n const emit = __emit;\n const handleClick = () => {\n emit('click', props.caseData.id);\n };\n return (_ctx, _cache) => {\n \"raw js\";\n const __returned__ = {\n a: _ctx.caseData.coverImage,\n b: _t(_ctx.caseData.categoryName),\n c: _t(_ctx.caseData.title),\n d: _t(_ctx.caseData.material),\n e: _t(_ctx.caseData.duration),\n f: _t(_ctx.caseData.price),\n g: _t(_ctx.caseData.views),\n h: _t(_ctx.caseData.likes),\n i: _sei(_gei(_ctx, ''), 'view'),\n j: _o(handleClick)\n };\n return __returned__;\n };\n }\n});\n//# sourceMappingURL=D:/Project/Self/%E4%BC%98%E8%89%BA%E5%AE%B6%E6%B2%99%E5%8F%91%E7%BF%BB%E6%96%B0/%E4%BC%98%E8%89%BA%E5%AE%B6%E6%B2%99%E5%8F%91%E7%BF%BB%E6%96%B0/components/case-card/case-card.uvue?vue&type=script&setup=true&lang.uts.js.map","references":["D:/Soft/HBuilderX/plugins/uniapp-cli-vite/node_modules/@vue/runtime-core/dist/runtime-core.d.ts","D:/Soft/HBuilderX/plugins/uniapp-cli-vite/node_modules/@vue/runtime-core/dist/runtime-core.d.ts"],"uniExtApis":[],"map":"{\"version\":3,\"file\":\"case-card.uvue?vue&type=script&setup=true&lang.uts.js\",\"sourceRoot\":\"\",\"sources\":[\"case-card.uvue?vue&type=script&setup=true&lang.uts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,eAAe,IAAI,gBAAgB,EAAE,MAAM,KAAK,CAAA;AACzD,OAAO,EAAE,eAAe,IAAI,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE,MAAM,KAAK,CAAA;MAEhG,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcb,eAAe,aAAa,CAAA,gBAAgB,CAAC;IAC3C,MAAM,EAAE,WAAW;IACnB,KAAK,EAAE;QACL,QAAQ,EAAE,EAAE;KACb;IACD,KAAK,EAAE,CAAC,OAAO,CAAC;IAChB,KAAK,CAAC,OAAY,EAAE,EAAgB;YAAR,MAAM,UAAA;QAEnC,YAAY;QACZ,MAAM,KAAK,GAAG,OAAO,CAAA;QAErB,MAAM,IAAI,GAAG,MAAM,CAAA;QAEnB,MAAM,WAAW,GAAG;YACnB,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QACjC,CAAC,CAAA;QAEF,OAAO,CAAC,IAAI,EAAE,MAAM;YAAO,QAAQ,CAAA;YACjC,MAAM,YAAY,GAAG;gBACrB,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU;gBAC3B,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;gBACjC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAC1B,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAC7B,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAC7B,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAC1B,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAC1B,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAC1B,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC;gBAC/B,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC;aACnB,CAAA;YACC,OAAO,YAAY,CAAA;QACrB,CAAC,CAAA;IACD,CAAC;CAEA,CAAC,CAAA\"}"}

View File

@@ -0,0 +1 @@
{"code":"import '\u0000plugin-vue:export-helper';\nimport 'uni-mp-runtime';\nimport './pages-json-js';\nimport App from './App.uvue';\nimport { createSSRApp } from 'vue';\nexport function createApp() {\n const app = createSSRApp(App);\n return {\n app\n };\n}\n;\ncreateApp().app.mount(\"#app\");\n//# sourceMappingURL=D:/Project/Self/%E4%BC%98%E8%89%BA%E5%AE%B6%E6%B2%99%E5%8F%91%E7%BF%BB%E6%96%B0/%E4%BC%98%E8%89%BA%E5%AE%B6%E6%B2%99%E5%8F%91%E7%BF%BB%E6%96%B0/main.uts.js.map","references":["D:/Project/Self/优艺家沙发翻新/优艺家沙发翻新/App.uvue.ts","D:/Soft/HBuilderX/plugins/uniapp-cli-vite/node_modules/@vue/runtime-core/dist/runtime-core.d.ts"],"uniExtApis":[],"map":"{\"version\":3,\"file\":\"main.uts.js\",\"sourceRoot\":\"\",\"sources\":[\"main.uts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,2BAA2B,CAAC;AAAA,OAAO,gBAAgB,CAAC;AAAA,OAAO,iBAAiB,CAAC;AAAA,OAAO,GAAG,MAAM,YAAY,CAAA;AAEhH,OAAO,EAAE,YAAY,EAAE,MAAM,KAAK,CAAA;AAClC,MAAM,UAAU,SAAS;IACxB,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA;IAC7B,OAAO;QACN,GAAG;KACH,CAAA;AACF,CAAC;AAAA,CAAC;AACF,SAAS,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC\"}"}

View File

@@ -0,0 +1 @@
{"code":"import { defineComponent as _defineComponent } from 'vue';\nimport { toDisplayString as _toDisplayString, t as _t, o as _o, gei as _gei, sei as _sei, e as _e } from \"vue\";\nexport default /*#__PURE__*/ _defineComponent({\n __name: 'section-header',\n props: {\n title: {},\n showMore: { type: Boolean }\n },\n emits: [\"more\"],\n setup(__props, _a) {\n var __emit = _a.emit;\n const props = __props;\n const emit = __emit;\n const handleMore = () => {\n emit('more');\n };\n return (_ctx, _cache) => {\n \"raw js\";\n const __returned__ = _e({\n a: _t(_ctx.title),\n b: _ctx.showMore\n }, _ctx.showMore ? {\n c: _o(handleMore)\n } : {}, {\n d: _sei(_gei(_ctx, ''), 'view')\n });\n return __returned__;\n };\n }\n});\n//# sourceMappingURL=D:/Project/Self/%E4%BC%98%E8%89%BA%E5%AE%B6%E6%B2%99%E5%8F%91%E7%BF%BB%E6%96%B0/%E4%BC%98%E8%89%BA%E5%AE%B6%E6%B2%99%E5%8F%91%E7%BF%BB%E6%96%B0/components/section-header/section-header.uvue?vue&type=script&setup=true&lang.uts.js.map","references":["D:/Soft/HBuilderX/plugins/uniapp-cli-vite/node_modules/@vue/runtime-core/dist/runtime-core.d.ts","D:/Soft/HBuilderX/plugins/uniapp-cli-vite/node_modules/@vue/runtime-core/dist/runtime-core.d.ts"],"uniExtApis":[],"map":"{\"version\":3,\"file\":\"section-header.uvue?vue&type=script&setup=true&lang.uts.js\",\"sourceRoot\":\"\",\"sources\":[\"section-header.uvue?vue&type=script&setup=true&lang.uts\"],\"names\":[],\"mappings\":\"AAAA,OAAO,EAAE,eAAe,IAAI,gBAAgB,EAAE,MAAM,KAAK,CAAA;AACzD,OAAO,EAAE,eAAe,IAAI,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,KAAK,CAAA;AAG9G,eAAe,aAAa,CAAA,gBAAgB,CAAC;IAC3C,MAAM,EAAE,gBAAgB;IACxB,KAAK,EAAE;QACL,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;KAC5B;IACD,KAAK,EAAE,CAAC,MAAM,CAAC;IACf,KAAK,CAAC,OAAY,EAAE,EAAgB;YAAR,MAAM,UAAA;QAEnC,MAAM,KAAK,GAAG,OAAO,CAAA;QAErB,MAAM,IAAI,GAAG,MAAM,CAAA;QAEnB,MAAM,UAAU,GAAG;YAClB,IAAI,CAAC,MAAM,CAAC,CAAA;QACb,CAAC,CAAA;QAEF,OAAO,CAAC,IAAI,EAAE,MAAM;YAAO,QAAQ,CAAA;YACjC,MAAM,YAAY,GAAG,EAAE,CAAC;gBACxB,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;gBACjB,CAAC,EAAE,IAAI,CAAC,QAAQ;aACjB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACjB,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC;aAClB,CAAC,CAAC,CAAC,EAAE,EAAE;gBACN,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC;aAChC,CAAC,CAAA;YACA,OAAO,YAAY,CAAA;QACrB,CAAC,CAAA;IACD,CAAC;CAEA,CAAC,CAAA\"}"}

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sources":["api/index.uts"],"sourcesContent":["/**\r\n * API接口统一管理\r\n */\r\nimport { get, post } from '../utils/request.uts'\r\n\r\n/**\r\n * 获取轮播图 (临时从配置获取,后续可从后端获取)\r\n */\r\nexport const getBanners = () => {\r\n\t// 由于后端暂时没有轮播图API先返回固定数据\r\n\treturn Promise.resolve({\r\n\t\tcode: 0,\r\n\t\tmessage: 'success',\r\n\t\tdata: [\r\n\t\t\t{\r\n\t\t\t\tid: '1',\r\n\t\t\t\timage: '/static/mock/banner1.svg',\r\n\t\t\t\ttitle: '专业沙发翻新服务',\r\n\t\t\t\tlink: '/pages/service/index'\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tid: '2',\r\n\t\t\t\timage: '/static/mock/banner2.svg', \r\n\t\t\t\ttitle: '十年品质保证',\r\n\t\t\t\tlink: '/pages/about/index'\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tid: '3',\r\n\t\t\t\timage: '/static/mock/banner3.svg',\r\n\t\t\t\ttitle: '免费上门评估', \r\n\t\t\t\tlink: '/pages/booking/index'\r\n\t\t\t}\r\n\t\t]\r\n\t})\r\n}\r\n\r\n/**\r\n * 获取案例列表\r\n */\r\nexport const getCaseList = (params ?: UTSJSONObject) => {\r\n\t// 后端使用page和limit参数需要转换\r\n\tconst queryParams = params ? {\r\n\t\tpage: params['page'] || 1,\r\n\t\tlimit: params['pageSize'] || params['limit'] || 10,\r\n\t\tserviceType: params['category'], // 后端使用serviceType\r\n\t\tstatus: 'published' // 只获取已发布的案例\r\n\t} : {}\r\n\treturn get('/cases', queryParams as UTSJSONObject)\r\n}\r\n\r\n/**\r\n * 获取案例详情\r\n */\r\nexport const getCaseDetail = (id : string) => {\r\n\treturn get(`/cases/${id}`)\r\n}\r\n\r\n/**\r\n * 获取热门案例 (临时使用前4条案例)\r\n */\r\nexport const getHotCases = () => {\r\n\treturn get('/cases', { limit: 4, status: 'published' } as UTSJSONObject)\r\n}\r\n\r\n/**\r\n * 获取服务流程 (使用服务列表替代)\r\n */\r\nexport const getServiceProcess = () => {\r\n\treturn get('/services')\r\n}\r\n\r\n/**\r\n * 获取有效服务列表\r\n */\r\nexport const getActiveServices = () => {\r\n\treturn get('/services/active')\r\n}\r\n\r\n/**\r\n * 获取公司信息\r\n */\r\nexport const getCompanyInfo = () => {\r\n\treturn get('/company/info')\r\n}\r\n\r\n/**\r\n * 提交预约\r\n */\r\nexport const submitBooking = (data : UTSJSONObject) => {\r\n\treturn post('/booking', data)\r\n}\r\n\r\n/**\r\n * 获取用户信息\r\n */\r\nexport const getUserInfo = () => {\r\n\treturn get('/user/info')\r\n}\r\n\r\n/**\r\n * 获取用户收藏列表\r\n */\r\nexport const getFavorites = () => {\r\n\treturn get('/user/favorites')\r\n}\r\n\r\n/**\r\n * 添加收藏\r\n */\r\nexport const addFavorite = (caseId : string) => {\r\n\treturn post('/user/favorites', { caseId: caseId } as UTSJSONObject)\r\n}\r\n\r\n/**\r\n * 取消收藏\r\n */\r\nexport const removeFavorite = (caseId : string) => {\r\n\treturn post('/user/favorites/remove', { caseId: caseId } as UTSJSONObject)\r\n}\r\n\r\n/**\r\n * 获取预约记录\r\n */\r\nexport const getBookingList = () => {\r\n\treturn get('/user/bookings')\r\n}\r\n"],"names":["get","post"],"mappings":";;AAQa,MAAA,aAAa,MAAA;AAEzB,SAAO,QAAQ,QAAQ,IAAA,cAAA;AAAA,IACtB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM;AAAA,MACL,IAAA,cAAA;AAAA,QACC,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM;AAAA,MACN,CAAA;AAAA,MACD,IAAA,cAAA;AAAA,QACC,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM;AAAA,MACN,CAAA;AAAA,MACD,IAAA,cAAA;AAAA,QACC,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM;AAAA,MACN,CAAA;AAAA,IACD;AAAA,EACD,CAAA,CAAA;AACF;AAKO,MAAM,cAAc,CAAC,SAAuB,SAAA;AAElD,QAAM,cAAc,SAAS,IAAA,cAAA;AAAA,IAC5B,MAAM,OAAO,MAAM,KAAK;AAAA,IACxB,OAAO,OAAO,UAAU,KAAK,OAAO,OAAO,KAAK;AAAA,IAChD,aAAa,OAAO,UAAU;AAAA,IAC9B,QAAQ;AAAA;AAAA,EACR,CAAA,IAAE,IAAA,cAAC,CAAA,CAAE;AACN,SAAOA,cAAG,IAAC,UAAU,WAA4B;AAClD;AAKO,MAAM,gBAAgB,CAAC,OAAW;AACxC,SAAOA,cAAG,IAAC,UAAU,EAAE,EAAE;AAC1B;AAKa,MAAA,cAAc,MAAA;AAC1B,SAAOA,cAAG,IAAC,UAAQ,IAAA,cAAE,EAAE,OAAO,GAAG,QAAQ,YAA8B,CAAA;AACxE;AAKa,MAAA,oBAAoB,MAAA;AAChC,SAAOA,cAAAA,IAAI,WAAW;AACvB;AAYa,MAAA,iBAAiB,MAAA;AAC7B,SAAOA,cAAAA,IAAI,eAAe;AAC3B;AAKO,MAAM,gBAAgB,CAAC,SAAoB;AACjD,SAAOC,cAAI,KAAC,YAAY,IAAI;AAC7B;;;;;;;;"}

View File

@@ -0,0 +1 @@
{"version":3,"file":"app.js","sources":["App.uvue","main.uts"],"sourcesContent":["<script lang=\"uts\">\r\n\r\n\r\n\r\n\texport default {\r\n\t\tonLaunch() {\r\n\t\t\tuni.__f__('log','at App.uvue:7','App Launch')\r\n\t\t},\r\n\t\tonShow() {\r\n\t\t\tuni.__f__('log','at App.uvue:10','App Show')\r\n\t\t},\r\n\t\tonHide() {\r\n\t\t\tuni.__f__('log','at App.uvue:13','App Hide')\r\n\t\t},\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\t\tonExit() {\r\n\t\t\tuni.__f__('log','at App.uvue:34','App Exit')\r\n\t\t},\r\n\t}\r\n</script>\r\n\r\n<style>\r\n\t/*每个页面公共css */\r\n\t.uni-row {\r\n\t\tflex-direction: row;\r\n\t}\r\n\r\n\t.uni-column {\r\n\t\tflex-direction: column;\r\n\t}\r\n</style>","import App from './App.uvue'\r\n\r\nimport { createSSRApp } from 'vue'\r\nexport function createApp() {\r\n\tconst app = createSSRApp(App)\r\n\treturn {\r\n\t\tapp\r\n\t}\r\n}"],"names":["defineComponent","uni","createSSRApp","App"],"mappings":";;;;;;;;;;;;AAIC,MAAA,YAAeA,8BAAA;AAAA,EACd,WAAQ;AACPC,kBAAAA,MAAI,MAAM,OAAM,iBAAgB,YAAY;AAAA,EAC5C;AAAA,EACD,SAAM;AACLA,kBAAAA,MAAI,MAAM,OAAM,kBAAiB,UAAU;AAAA,EAC3C;AAAA,EACD,SAAM;AACLA,kBAAAA,MAAI,MAAM,OAAM,kBAAiB,UAAU;AAAA,EAC3C;AAAA,EAmBD,SAAM;AACLA,kBAAAA,MAAI,MAAM,OAAM,kBAAiB,UAAU;AAAA,EAC3C;CACF;SChCe,YAAS;AACxB,QAAM,MAAMC,2BAAaC,SAAG;AAC5B,SAAO;AAAA,IACN;AAAA;AAEF;AACA,YAAY,IAAI,MAAM,MAAM;;"}

View File

@@ -0,0 +1 @@
{"version":3,"file":"assets.js","sources":["static/logo.png"],"sourcesContent":["export default \"__VITE_ASSET__46719607__\""],"names":[],"mappings":";AAAA,MAAe,aAAA;;"}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
{"version":3,"file":"before-after.js","sources":["components/before-after/before-after.uvue","../../../../Soft/HBuilderX/plugins/uniapp-cli-vite/uniComponent:/RDovUHJvamVjdC9TZWxmL-S8mOiJuuWutuaymeWPkee_u-aWsC_kvJjoibrlrrbmspnlj5Hnv7vmlrAvY29tcG9uZW50cy9iZWZvcmUtYWZ0ZXIvYmVmb3JlLWFmdGVyLnV2dWU"],"sourcesContent":["<template>\r\n\t<view class=\"before-after\">\r\n\t\t<view class=\"ba-title\" v-if=\"showTitle\">\r\n\t\t\t<text class=\"ba-title-text\">翻新前后对比</text>\r\n\t\t</view>\r\n\t\t\r\n\t\t<view class=\"ba-container\">\r\n\t\t\t<!-- 翻新前 -->\r\n\t\t\t<view class=\"ba-item\" @click=\"previewImage(beforeImage, 'before')\">\r\n\t\t\t\t<view class=\"ba-label before-label\">\r\n\t\t\t\t\t<text class=\"ba-label-text\">翻新前</text>\r\n\t\t\t\t</view>\r\n\t\t\t\t<image \r\n\t\t\t\t\tclass=\"ba-image\" \r\n\t\t\t\t\t:src=\"beforeImage\" \r\n\t\t\t\t\tmode=\"aspectFill\"\r\n\t\t\t\t></image>\r\n\t\t\t</view>\r\n\t\t\t\r\n\t\t\t<!-- 箭头 -->\r\n\t\t\t<view class=\"ba-arrow\">\r\n\t\t\t\t<text class=\"ba-arrow-text\">→</text>\r\n\t\t\t</view>\r\n\t\t\t\r\n\t\t\t<!-- 翻新后 -->\r\n\t\t\t<view class=\"ba-item\" @click=\"previewImage(afterImage, 'after')\">\r\n\t\t\t\t<view class=\"ba-label after-label\">\r\n\t\t\t\t\t<text class=\"ba-label-text\">翻新后</text>\r\n\t\t\t\t</view>\r\n\t\t\t\t<image \r\n\t\t\t\t\tclass=\"ba-image\" \r\n\t\t\t\t\t:src=\"afterImage\" \r\n\t\t\t\t\tmode=\"aspectFill\"\r\n\t\t\t\t></image>\r\n\t\t\t</view>\r\n\t\t</view>\r\n\t</view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\n\tconst props = defineProps<{\r\n\t\tbeforeImage : string\r\n\t\tafterImage : string\r\n\t\tshowTitle ?: boolean\r\n\t}>()\r\n\t\r\n\t// 预览图片\r\n\tconst previewImage = (url : string, type : string) => {\r\n\t\tconst urls = type == 'before' ? [props.beforeImage] : [props.afterImage]\r\n\t\tuni.previewImage({\r\n\t\t\tcurrent: url,\r\n\t\t\turls: urls\r\n\t\t})\r\n\t}\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n\t.before-after {\r\n\t\tbackground-color: #ffffff;\r\n\t\tborder-radius: 16rpx;\r\n\t\tpadding: 24rpx;\r\n\t\tmargin-bottom: 24rpx;\r\n\t}\r\n\t\r\n\t.ba-title {\r\n\t\tmargin-bottom: 24rpx;\r\n\t}\r\n\t\r\n\t.ba-title-text {\r\n\t\tfont-size: 32rpx;\r\n\t\tfont-weight: 600;\r\n\t\tcolor: #333333;\r\n\t}\r\n\t\r\n\t.ba-container {\r\n\t\tflex-direction: row;\r\n\t\talign-items: center;\r\n\t\tjustify-content: space-between;\r\n\t}\r\n\t\r\n\t.ba-item {\r\n\t\tflex: 1;\r\n\t\tposition: relative;\r\n\t\tborder-radius: 12rpx;\r\n\t\toverflow: hidden;\r\n\t}\r\n\t\r\n\t.ba-image {\r\n\t\twidth: 100%;\r\n\t\theight: 280rpx;\r\n\t\tborder-radius: 12rpx;\r\n\t}\r\n\t\r\n\t.ba-label {\r\n\t\tposition: absolute;\r\n\t\tbottom: 16rpx;\r\n\t\tleft: 16rpx;\r\n\t\tpadding: 8rpx 16rpx;\r\n\t\tborder-radius: 8rpx;\r\n\t\tz-index: 1;\r\n\t}\r\n\t\r\n\t.before-label {\r\n\t\tbackground-color: rgba(144, 147, 153, 0.9);\r\n\t}\r\n\t\r\n\t.after-label {\r\n\t\tbackground-color: rgba(212, 165, 116, 0.9);\r\n\t}\r\n\t\r\n\t.ba-label-text {\r\n\t\tfont-size: 22rpx;\r\n\t\tcolor: #ffffff;\r\n\t}\r\n\t\r\n\t.ba-arrow {\r\n\t\tpadding: 0 16rpx;\r\n\t}\r\n\t\r\n\t.ba-arrow-text {\r\n\t\tfont-size: 40rpx;\r\n\t\tcolor: #D4A574;\r\n\t\tfont-weight: bold;\r\n\t}\r\n</style>\r\n","import Component from 'D:/Project/Self/优艺家沙发翻新/优艺家沙发翻新/components/before-after/before-after.uvue'\nwx.createComponent(Component)"],"names":["uni","Component"],"mappings":";;;;;;;;;;AAwCC,UAAM,QAAQ;AAOd,UAAM,eAAe,CAAC,KAAc,SAAa;AAChD,YAAM,OAAO,QAAQ,WAAW,CAAC,MAAM,WAAW,IAAI,CAAC,MAAM,UAAU;AACvEA,oBAAAA,MAAI,aAAa;AAAA,QAChB,SAAS;AAAA,QACT;AAAA,MACA,CAAA;AAAA,IACF;;;;;;;;;;;;;;;;;;;;ACpDD,GAAG,gBAAgBC,SAAS;"}

View File

@@ -0,0 +1 @@
{"version":3,"file":"case-card.js","sources":["components/case-card/case-card.uvue","../../../../Soft/HBuilderX/plugins/uniapp-cli-vite/uniComponent:/RDovUHJvamVjdC9TZWxmL-S8mOiJuuWutuaymeWPkee_u-aWsC_kvJjoibrlrrbmspnlj5Hnv7vmlrAvY29tcG9uZW50cy9jYXNlLWNhcmQvY2FzZS1jYXJkLnV2dWU"],"sourcesContent":["<template>\r\n\t<view class=\"case-card\" @click=\"handleClick\">\r\n\t\t<!-- 封面图 -->\r\n\t\t<view class=\"card-image-wrapper\">\r\n\t\t\t<image \r\n\t\t\t\tclass=\"card-image\" \r\n\t\t\t\t:src=\"caseData.coverImage\" \r\n\t\t\t\tmode=\"aspectFill\"\r\n\t\t\t></image>\r\n\t\t\t<view class=\"card-category\">{{ caseData.categoryName }}</view>\r\n\t\t</view>\r\n\t\t\r\n\t\t<!-- 内容区域 -->\r\n\t\t<view class=\"card-content\">\r\n\t\t\t<text class=\"card-title\">{{ caseData.title }}</text>\r\n\t\t\t<view class=\"card-info\">\r\n\t\t\t\t<view class=\"info-item\">\r\n\t\t\t\t\t<text class=\"info-label\">材质:</text>\r\n\t\t\t\t\t<text class=\"info-value\">{{ caseData.material }}</text>\r\n\t\t\t\t</view>\r\n\t\t\t\t<view class=\"info-item\">\r\n\t\t\t\t\t<text class=\"info-label\">工期:</text>\r\n\t\t\t\t\t<text class=\"info-value\">{{ caseData.duration }}</text>\r\n\t\t\t\t</view>\r\n\t\t\t</view>\r\n\t\t\t<view class=\"card-footer\">\r\n\t\t\t\t<text class=\"card-price\">{{ caseData.price }}</text>\r\n\t\t\t\t<view class=\"card-stats\">\r\n\t\t\t\t\t<text class=\"stat-item\">👁 {{ caseData.views }}</text>\r\n\t\t\t\t\t<text class=\"stat-item\">❤ {{ caseData.likes }}</text>\r\n\t\t\t\t</view>\r\n\t\t\t</view>\r\n\t\t</view>\r\n\t</view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\n\t// 定义Props类型\r\n\ttype CaseItem = {\r\n\t\tid : string\r\n\t\ttitle : string\r\n\t\tcategory : string\r\n\t\tcategoryName : string\r\n\t\tcoverImage : string\r\n\t\tmaterial : string\r\n\t\tduration : string\r\n\t\tprice : string\r\n\t\tviews : number\r\n\t\tlikes : number\r\n\t}\r\n\t\r\n\tconst props = defineProps<{\r\n\t\tcaseData : CaseItem\r\n\t}>()\r\n\t\r\n\tconst emit = defineEmits<{\r\n\t\t(e : 'click', id : string) : void\r\n\t}>()\r\n\t\r\n\tconst handleClick = () => {\r\n\t\temit('click', props.caseData.id)\r\n\t}\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n\t.case-card {\r\n\t\tbackground-color: #ffffff;\r\n\t\tborder-radius: 16rpx;\r\n\t\toverflow: hidden;\r\n\t\tbox-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.08);\r\n\t\tmargin-bottom: 24rpx;\r\n\t}\r\n\t\r\n\t.card-image-wrapper {\r\n\t\tposition: relative;\r\n\t\twidth: 100%;\r\n\t\theight: 360rpx;\r\n\t}\r\n\t\r\n\t.card-image {\r\n\t\twidth: 100%;\r\n\t\theight: 100%;\r\n\t}\r\n\t\r\n\t.card-category {\r\n\t\tposition: absolute;\r\n\t\ttop: 16rpx;\r\n\t\tleft: 16rpx;\r\n\t\tbackground-color: rgba(212, 165, 116, 0.9);\r\n\t\tcolor: #ffffff;\r\n\t\tfont-size: 22rpx;\r\n\t\tpadding: 8rpx 16rpx;\r\n\t\tborder-radius: 8rpx;\r\n\t}\r\n\t\r\n\t.card-content {\r\n\t\tpadding: 24rpx;\r\n\t}\r\n\t\r\n\t.card-title {\r\n\t\tfont-size: 32rpx;\r\n\t\tfont-weight: 600;\r\n\t\tcolor: #333333;\r\n\t\tmargin-bottom: 16rpx;\r\n\t\tlines: 1;\r\n\t\ttext-overflow: ellipsis;\r\n\t}\r\n\t\r\n\t.card-info {\r\n\t\tmargin-bottom: 16rpx;\r\n\t}\r\n\t\r\n\t.info-item {\r\n\t\tflex-direction: row;\r\n\t\tmargin-bottom: 8rpx;\r\n\t}\r\n\t\r\n\t.info-label {\r\n\t\tfont-size: 26rpx;\r\n\t\tcolor: #909399;\r\n\t}\r\n\t\r\n\t.info-value {\r\n\t\tfont-size: 26rpx;\r\n\t\tcolor: #606266;\r\n\t}\r\n\t\r\n\t.card-footer {\r\n\t\tflex-direction: row;\r\n\t\tjustify-content: space-between;\r\n\t\talign-items: center;\r\n\t\tmargin-top: 16rpx;\r\n\t\tpadding-top: 16rpx;\r\n\t\tborder-top-width: 1rpx;\r\n\t\tborder-top-style: solid;\r\n\t\tborder-top-color: #EBEEF5;\r\n\t}\r\n\t\r\n\t.card-price {\r\n\t\tfont-size: 36rpx;\r\n\t\tfont-weight: 600;\r\n\t\tcolor: #D4A574;\r\n\t}\r\n\t\r\n\t.card-stats {\r\n\t\tflex-direction: row;\r\n\t}\r\n\t\r\n\t.stat-item {\r\n\t\tfont-size: 24rpx;\r\n\t\tcolor: #909399;\r\n\t\tmargin-left: 24rpx;\r\n\t}\r\n</style>\r\n","import Component from 'D:/Project/Self/优艺家沙发翻新/优艺家沙发翻新/components/case-card/case-card.uvue'\nwx.createComponent(Component)"],"names":["Component"],"mappings":";;MAsCM,iBAAQ,IAAA,QAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAab,UAAM,QAAQ;AAId,UAAM,OAAO;AAIb,UAAM,cAAc,MAAA;AACnB,WAAK,SAAS,MAAM,SAAS,EAAE;AAAA,IAChC;;;;;;;;;;;;;;;;;;;AC5DD,GAAG,gBAAgBA,SAAS;"}

View File

@@ -0,0 +1 @@
{"version":3,"file":"nav-bar.js","sources":["components/nav-bar/nav-bar.uvue","../../../../Soft/HBuilderX/plugins/uniapp-cli-vite/uniComponent:/RDovUHJvamVjdC9TZWxmL-S8mOiJuuWutuaymeWPkee_u-aWsC_kvJjoibrlrrbmspnlj5Hnv7vmlrAvY29tcG9uZW50cy9uYXYtYmFyL25hdi1iYXIudXZ1ZQ"],"sourcesContent":["<template>\r\n\t<view class=\"nav-bar\" :style=\"{ paddingTop: statusBarHeight + 'px' }\">\r\n\t\t<view class=\"nav-content\" :style=\"{ height: navBarHeight + 'px' }\">\r\n\t\t\t<!-- 左侧返回按钮 -->\r\n\t\t\t<view class=\"nav-left\" v-if=\"showBack\" @click=\"handleBack\">\r\n\t\t\t\t<text class=\"nav-back-icon\">←</text>\r\n\t\t\t</view>\r\n\t\t\t<view class=\"nav-left\" v-else></view>\r\n\t\t\t\r\n\t\t\t<!-- 标题 -->\r\n\t\t\t<view class=\"nav-center\">\r\n\t\t\t\t<text class=\"nav-title\" :style=\"{ color: titleColor }\">{{ title }}</text>\r\n\t\t\t</view>\r\n\t\t\t\r\n\t\t\t<!-- 右侧插槽 -->\r\n\t\t\t<view class=\"nav-right\">\r\n\t\t\t\t<slot name=\"right\"></slot>\r\n\t\t\t</view>\r\n\t\t</view>\r\n\t</view>\r\n\t\r\n\t<!-- 占位高度 -->\r\n\t<view :style=\"{ height: (statusBarHeight + navBarHeight) + 'px' }\"></view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\n\tconst props = defineProps<{\r\n\t\ttitle ?: string\r\n\t\tshowBack ?: boolean\r\n\t\ttitleColor ?: string\r\n\t\tbgColor ?: string\r\n\t}>()\r\n\t\r\n\t// 状态栏高度\r\n\tconst statusBarHeight = ref(20)\r\n\t// 导航栏高度\r\n\tconst navBarHeight = ref(44)\r\n\t\r\n\tonMounted(() => {\r\n\t\tconst sysInfo = uni.getSystemInfoSync()\r\n\t\tstatusBarHeight.value = sysInfo.statusBarHeight\r\n\r\n\t\tconst menuButtonInfo = uni.getMenuButtonBoundingClientRect()\r\n\t\tnavBarHeight.value = (menuButtonInfo.top - sysInfo.statusBarHeight) * 2 + menuButtonInfo.height\r\n\r\n\t})\r\n\t\r\n\tconst handleBack = () => {\r\n\t\tuni.navigateBack({\r\n\t\t\tfail: () => {\r\n\t\t\t\tuni.switchTab({\r\n\t\t\t\t\turl: '/pages/index/index'\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n\t.nav-bar {\r\n\t\tposition: fixed;\r\n\t\ttop: 0;\r\n\t\tleft: 0;\r\n\t\tright: 0;\r\n\t\tbackground-color: #ffffff;\r\n\t\tz-index: 999;\r\n\t}\r\n\t\r\n\t.nav-content {\r\n\t\tflex-direction: row;\r\n\t\talign-items: center;\r\n\t\tjustify-content: space-between;\r\n\t\tpadding: 0 24rpx;\r\n\t}\r\n\t\r\n\t.nav-left {\r\n\t\twidth: 80rpx;\r\n\t\tflex-direction: row;\r\n\t\talign-items: center;\r\n\t}\r\n\t\r\n\t.nav-back-icon {\r\n\t\tfont-size: 40rpx;\r\n\t\tcolor: #333333;\r\n\t}\r\n\t\r\n\t.nav-center {\r\n\t\tflex: 1;\r\n\t\talign-items: center;\r\n\t\tjustify-content: center;\r\n\t}\r\n\t\r\n\t.nav-title {\r\n\t\tfont-size: 34rpx;\r\n\t\tfont-weight: 600;\r\n\t\tcolor: #333333;\r\n\t}\r\n\t\r\n\t.nav-right {\r\n\t\twidth: 80rpx;\r\n\t\tflex-direction: row;\r\n\t\talign-items: center;\r\n\t\tjustify-content: flex-end;\r\n\t}\r\n</style>\r\n","import Component from 'D:/Project/Self/优艺家沙发翻新/优艺家沙发翻新/components/nav-bar/nav-bar.uvue'\nwx.createComponent(Component)"],"names":["ref","onMounted","uni","Component"],"mappings":";;;;;;;;;;;AAkCC,UAAM,kBAAkBA,kBAAI,EAAE;AAE9B,UAAM,eAAeA,kBAAI,EAAE;AAE3BC,kBAAAA,UAAU,MAAA;AACT,YAAM,UAAUC,oBAAI;AACpB,sBAAgB,QAAQ,QAAQ;AAEhC,YAAM,iBAAiBA,oBAAI;AAC3B,mBAAa,SAAS,eAAe,MAAM,QAAQ,mBAAmB,IAAI,eAAe;AAAA,IAE1F,CAAC;AAED,UAAM,aAAa,MAAA;AAClBA,0BAAI,aAAa,IAAA,cAAA;AAAA,QAChB,MAAM,MAAA;AACLA,wBAAAA,MAAI,UAAU;AAAA,YACb,KAAK;AAAA,UACL,CAAA;AAAA,QACF;AAAA,MACA,CAAA,CAAA;AAAA,IACF;;;;;;;;;;;;;;;;;;ACtDD,GAAG,gBAAgBC,SAAS;"}

View File

@@ -0,0 +1 @@
{"version":3,"file":"section-header.js","sources":["components/section-header/section-header.uvue","../../../../Soft/HBuilderX/plugins/uniapp-cli-vite/uniComponent:/RDovUHJvamVjdC9TZWxmL-S8mOiJuuWutuaymeWPkee_u-aWsC_kvJjoibrlrrbmspnlj5Hnv7vmlrAvY29tcG9uZW50cy9zZWN0aW9uLWhlYWRlci9zZWN0aW9uLWhlYWRlci51dnVl"],"sourcesContent":["<template>\r\n\t<view class=\"section-header\">\r\n\t\t<view class=\"section-left\">\r\n\t\t\t<view class=\"section-line\"></view>\r\n\t\t\t<text class=\"section-title\">{{ title }}</text>\r\n\t\t</view>\r\n\t\t<view class=\"section-right\" v-if=\"showMore\" @click=\"handleMore\">\r\n\t\t\t<text class=\"section-more\">查看更多</text>\r\n\t\t\t<text class=\"section-arrow\"></text>\r\n\t\t</view>\r\n\t</view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\n\tconst props = defineProps<{\r\n\t\ttitle : string\r\n\t\tshowMore ?: boolean\r\n\t}>()\r\n\t\r\n\tconst emit = defineEmits<{\r\n\t\t(e : 'more') : void\r\n\t}>()\r\n\t\r\n\tconst handleMore = () => {\r\n\t\temit('more')\r\n\t}\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n\t.section-header {\r\n\t\tflex-direction: row;\r\n\t\talign-items: center;\r\n\t\tjustify-content: space-between;\r\n\t\tpadding: 32rpx 0 24rpx 0;\r\n\t}\r\n\t\r\n\t.section-left {\r\n\t\tflex-direction: row;\r\n\t\talign-items: center;\r\n\t}\r\n\t\r\n\t.section-line {\r\n\t\twidth: 8rpx;\r\n\t\theight: 36rpx;\r\n\t\tbackground-color: #D4A574;\r\n\t\tborder-radius: 4rpx;\r\n\t\tmargin-right: 16rpx;\r\n\t}\r\n\t\r\n\t.section-title {\r\n\t\tfont-size: 34rpx;\r\n\t\tfont-weight: 600;\r\n\t\tcolor: #333333;\r\n\t}\r\n\t\r\n\t.section-right {\r\n\t\tflex-direction: row;\r\n\t\talign-items: center;\r\n\t}\r\n\t\r\n\t.section-more {\r\n\t\tfont-size: 26rpx;\r\n\t\tcolor: #909399;\r\n\t}\r\n\t\r\n\t.section-arrow {\r\n\t\tfont-size: 32rpx;\r\n\t\tcolor: #909399;\r\n\t\tmargin-left: 8rpx;\r\n\t}\r\n</style>\r\n","import Component from 'D:/Project/Self/优艺家沙发翻新/优艺家沙发翻新/components/section-header/section-header.uvue'\nwx.createComponent(Component)"],"names":["Component"],"mappings":";;;;;;;;;;;AAmBC,UAAM,OAAO;AAIb,UAAM,aAAa,MAAA;AAClB,WAAK,MAAM;AAAA,IACZ;;;;;;;;;;;;;;;ACxBD,GAAG,gBAAgBA,SAAS;"}

View File

@@ -0,0 +1 @@
{"version":3,"file":"service-card.js","sources":["components/service-card/service-card.uvue","../../../../Soft/HBuilderX/plugins/uniapp-cli-vite/uniComponent:/RDovUHJvamVjdC9TZWxmL-S8mOiJuuWutuaymeWPkee_u-aWsC_kvJjoibrlrrbmspnlj5Hnv7vmlrAvY29tcG9uZW50cy9zZXJ2aWNlLWNhcmQvc2VydmljZS1jYXJkLnV2dWU"],"sourcesContent":["<template>\r\n\t<view class=\"service-card\" @click=\"handleClick\">\r\n\t\t<view class=\"service-icon-wrapper\">\r\n\t\t\t<image class=\"service-icon\" :src=\"icon\" mode=\"aspectFit\"></image>\r\n\t\t</view>\r\n\t\t<text class=\"service-name\">{{ name }}</text>\r\n\t</view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\n\tconst props = defineProps<{\r\n\t\tid : string\r\n\t\tname : string\r\n\t\ticon : string\r\n\t}>()\r\n\t\r\n\tconst emit = defineEmits<{\r\n\t\t(e : 'click', id : string) : void\r\n\t}>()\r\n\t\r\n\tconst handleClick = () => {\r\n\t\temit('click', props.id)\r\n\t}\r\n</script>\r\n\r\n<style lang=\"scss\">\r\n\t.service-card {\r\n\t\talign-items: center;\r\n\t\tjustify-content: center;\r\n\t\tpadding: 24rpx 16rpx;\r\n\t\tbackground-color: #ffffff;\r\n\t\tborder-radius: 16rpx;\r\n\t\twidth: 160rpx;\r\n\t}\r\n\t\r\n\t.service-icon-wrapper {\r\n\t\twidth: 80rpx;\r\n\t\theight: 80rpx;\r\n\t\tbackground-color: #FDF6EE;\r\n\t\tborder-radius: 50%;\r\n\t\talign-items: center;\r\n\t\tjustify-content: center;\r\n\t\tmargin-bottom: 16rpx;\r\n\t}\r\n\t\r\n\t.service-icon {\r\n\t\twidth: 48rpx;\r\n\t\theight: 48rpx;\r\n\t}\r\n\t\r\n\t.service-name {\r\n\t\tfont-size: 26rpx;\r\n\t\tcolor: #333333;\r\n\t\ttext-align: center;\r\n\t}\r\n</style>\r\n","import Component from 'D:/Project/Self/优艺家沙发翻新/优艺家沙发翻新/components/service-card/service-card.uvue'\nwx.createComponent(Component)"],"names":["Component"],"mappings":";;;;;;;;;;;;AAUC,UAAM,QAAQ;AAMd,UAAM,OAAO;AAIb,UAAM,cAAc,MAAA;AACnB,WAAK,SAAS,MAAM,EAAE;AAAA,IACvB;;;;;;;;;;;;;ACrBD,GAAG,gBAAgBA,SAAS;"}

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

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

@@ -0,0 +1 @@
{"version":3,"file":"config.js","sources":["utils/config.uts"],"sourcesContent":["/**\r\n * 项目配置文件\r\n */\r\n\r\n// 环境配置\r\nexport const ENV = {\r\n\t// 开发环境\r\n\tdevelopment: {\r\n\t\tbaseUrl: 'http://localhost:3000/api',\r\n\t\timageBaseUrl: 'http://localhost:3000'\r\n\t},\r\n\t// 生产环境\r\n\tproduction: {\r\n\t\tbaseUrl: 'https://api.youyijia.com/api',\r\n\t\timageBaseUrl: 'https://api.youyijia.com'\r\n\t}\r\n}\r\n\r\n// 当前环境 - 切换为 'production' 上线\r\nexport const currentEnv = 'development'\r\n\r\n// 获取当前环境配置\r\nexport const getEnvConfig = () : UTSJSONObject => {\r\n\tif (currentEnv == 'production') {\r\n\t\treturn {\r\n\t\t\tbaseUrl: ENV.production.baseUrl,\r\n\t\t\timageBaseUrl: ENV.production.imageBaseUrl\r\n\t\t} as UTSJSONObject\r\n\t}\r\n\treturn {\r\n\t\tbaseUrl: ENV.development.baseUrl,\r\n\t\timageBaseUrl: ENV.development.imageBaseUrl\r\n\t} as UTSJSONObject\r\n}\r\n\r\n// 是否使用Mock数据 - 已关闭,对接真实后端\r\nexport const useMock = false\r\n\r\n// 分页配置\r\nexport const PAGE_SIZE = 10\r\n\r\n// 图片上传配置\r\nexport const UPLOAD_CONFIG = {\r\n\tmaxSize: 5 * 1024 * 1024, // 5MB\r\n\tmaxCount: 9,\r\n\taccept: ['image/jpeg', 'image/png', 'image/gif']\r\n}\r\n\r\n// 缓存Key\r\nexport const STORAGE_KEYS = {\r\n\tTOKEN: 'user_token',\r\n\tUSER_INFO: 'user_info',\r\n\tFAVORITES: 'user_favorites',\r\n\tSEARCH_HISTORY: 'search_history'\r\n}\r\n\r\n// 沙发分类\r\nexport const SOFA_CATEGORIES = [\r\n\t{ id: 'all', name: '全部' },\r\n\t{ id: 'leather', name: '皮沙发' },\r\n\t{ id: 'fabric', name: '布艺沙发' },\r\n\t{ id: 'functional', name: '功能沙发' },\r\n\t{ id: 'antique', name: '古典沙发' },\r\n\t{ id: 'office', name: '办公沙发' }\r\n]\r\n\r\n// 翻新服务类型\r\nexport const SERVICE_TYPES = [\r\n\t{ id: 'repair', name: '局部修复', icon: '/static/icons/repair.png' },\r\n\t{ id: 'recolor', name: '改色翻新', icon: '/static/icons/recolor.png' },\r\n\t{ id: 'refurbish', name: '整体翻新', icon: '/static/icons/refurbish.png' },\r\n\t{ id: 'custom', name: '定制换皮', icon: '/static/icons/custom.png' }\r\n]\r\n"],"names":[],"mappings":";AAKO,MAAM,MAAM,IAAA;AAAA,EAAA;AAAA;AAAA,IAElB,aAAa,IAAA,cAAA;AAAA,MACZ,SAAS;AAAA,MACT,cAAc;AAAA,KACd;AAAA;AAAA,IAED,YAAY,IAAA,cAAA;AAAA,MACX,SAAS;AAAA,MACT,cAAc;AAAA,KACd;AAAA,EACD;AAAA;;AAMY,MAAA,eAAe,MAAA;AAO3B,SAAO,IAAA,cAAA;AAAA,IACN,SAAS,IAAI,YAAY;AAAA,IACzB,cAAc,IAAI,YAAY;AAAA,GACb;AACnB;AAMO,MAAM,YAAY;AAGI,IAAA;AAAA,EAAA;AAAA,IAC5B,SAAS,IAAI,OAAO;AAAA,IACpB,UAAU;AAAA,IACV,QAAQ,CAAC,cAAc,aAAa,WAAW;AAAA,EAC/C;AAAA;;AAGY,MAAA,eAAe,IAAA;AAAA,EAAA;AAAA,IAC3B,OAAO;AAAA,IACP,WAAW;AAAA,IACX,WAAW;AAAA,IACX,gBAAgB;AAAA,EAChB;AAAA;;AAGY,MAAA,kBAAkB;AAAA,EAC9B,IAAA,cAAA,EAAE,IAAI,OAAO,MAAM,KAAI,CAAE;AAAA,EACzB,IAAA,cAAA,EAAE,IAAI,WAAW,MAAM,MAAK,CAAE;AAAA,EAC9B,IAAA,cAAA,EAAE,IAAI,UAAU,MAAM,OAAM,CAAE;AAAA,EAC9B,IAAA,cAAA,EAAE,IAAI,cAAc,MAAM,OAAM,CAAE;AAAA,EAClC,IAAA,cAAA,EAAE,IAAI,WAAW,MAAM,OAAM,CAAE;AAAA,EAC/B,IAAA,cAAA,EAAE,IAAI,UAAU,MAAM,OAAM,CAAE;;AAIlB,MAAA,gBAAgB;AAAA,oBAC5B,EAAE,IAAI,UAAU,MAAM,QAAQ,MAAM,4BAA4B;AAAA,oBAChE,EAAE,IAAI,WAAW,MAAM,QAAQ,MAAM,6BAA6B;AAAA,oBAClE,EAAE,IAAI,aAAa,MAAM,QAAQ,MAAM,+BAA+B;AAAA,oBACtE,EAAE,IAAI,UAAU,MAAM,QAAQ,MAAM,4BAA4B;;;;;;;"}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,61 @@
"use strict";
const utils_request = require("../utils/request.js");
const getBanners = () => {
return Promise.resolve(new UTSJSONObject({
code: 0,
message: "success",
data: [
new UTSJSONObject({
id: "1",
image: "/static/mock/banner1.svg",
title: "专业沙发翻新服务",
link: "/pages/service/index"
}),
new UTSJSONObject({
id: "2",
image: "/static/mock/banner2.svg",
title: "十年品质保证",
link: "/pages/about/index"
}),
new UTSJSONObject({
id: "3",
image: "/static/mock/banner3.svg",
title: "免费上门评估",
link: "/pages/booking/index"
})
]
}));
};
const getCaseList = (params = null) => {
const queryParams = params ? new UTSJSONObject({
page: params["page"] || 1,
limit: params["pageSize"] || params["limit"] || 10,
serviceType: params["category"],
status: "published"
// 只获取已发布的案例
}) : new UTSJSONObject({});
return utils_request.get("/cases", queryParams);
};
const getCaseDetail = (id) => {
return utils_request.get(`/cases/${id}`);
};
const getHotCases = () => {
return utils_request.get("/cases", new UTSJSONObject({ limit: 4, status: "published" }));
};
const getServiceProcess = () => {
return utils_request.get("/services");
};
const getCompanyInfo = () => {
return utils_request.get("/company/info");
};
const submitBooking = (data) => {
return utils_request.post("/booking", data);
};
exports.getBanners = getBanners;
exports.getCaseDetail = getCaseDetail;
exports.getCaseList = getCaseList;
exports.getCompanyInfo = getCompanyInfo;
exports.getHotCases = getHotCases;
exports.getServiceProcess = getServiceProcess;
exports.submitBooking = submitBooking;
//# sourceMappingURL=../../.sourcemap/mp-weixin/api/index.js.map

View File

@@ -0,0 +1,35 @@
"use strict";
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const common_vendor = require("./common/vendor.js");
if (!Math) {
"./pages/index/index.js";
"./pages/cases/list.js";
"./pages/cases/detail.js";
"./pages/service/index.js";
"./pages/about/index.js";
"./pages/booking/index.js";
"./pages/user/index.js";
}
const _sfc_main = common_vendor.defineComponent({
onLaunch() {
common_vendor.index.__f__("log", "at App.uvue:7", "App Launch");
},
onShow() {
common_vendor.index.__f__("log", "at App.uvue:10", "App Show");
},
onHide() {
common_vendor.index.__f__("log", "at App.uvue:13", "App Hide");
},
onExit() {
common_vendor.index.__f__("log", "at App.uvue:34", "App Exit");
}
});
function createApp() {
const app = common_vendor.createSSRApp(_sfc_main);
return {
app
};
}
createApp().app.mount("#app");
exports.createApp = createApp;
//# sourceMappingURL=../.sourcemap/mp-weixin/app.js.map

View File

@@ -0,0 +1,50 @@
{
"pages": [
"pages/index/index",
"pages/cases/list",
"pages/cases/detail",
"pages/service/index",
"pages/about/index",
"pages/booking/index",
"pages/user/index"
],
"window": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "优艺家沙发翻新",
"navigationBarBackgroundColor": "#ffffff",
"backgroundColor": "#f5f5f5"
},
"tabBar": {
"color": "#999999",
"selectedColor": "#D4A574",
"borderStyle": "black",
"backgroundColor": "#ffffff",
"list": [
{
"pagePath": "pages/index/index",
"iconPath": "static/icons/home.png",
"selectedIconPath": "static/icons/home-active.png",
"text": "首页"
},
{
"pagePath": "pages/cases/list",
"iconPath": "static/icons/cases.png",
"selectedIconPath": "static/icons/cases-active.png",
"text": "案例"
},
{
"pagePath": "pages/service/index",
"iconPath": "static/icons/service.png",
"selectedIconPath": "static/icons/service-active.png",
"text": "服务"
},
{
"pagePath": "pages/user/index",
"iconPath": "static/icons/user.png",
"selectedIconPath": "static/icons/user-active.png",
"text": "我的"
}
]
},
"usingComponents": {}
}

View File

@@ -0,0 +1,9 @@
/*每个页面公共css */
.uni-row {
flex-direction: row;
}
.uni-column {
flex-direction: column;
}
page{--status-bar-height:25px;--top-window-height:0px;--window-top:0px;--window-bottom:0px;--window-left:0px;--window-right:0px;--window-magin:0px;--uni-safe-area-inset-top:0px;--uni-safe-area-inset-left:0px;--uni-safe-area-inset-right:0px;--uni-safe-area-inset-bottom:0px;}[data-c-h="true"]{display: none !important;}

View File

@@ -0,0 +1,95 @@
module.exports = {
sS: function (newValue, oldValue, _ownerInstance, instance) {
if (newValue) {
instance.setStyle(newValue)
}
},
sA: function (newValue, oldValue, _ownerInstance, instance) {
if (newValue) {
handleStartAnimation(newValue, _ownerInstance, instance)
}
},
}
function handleStartAnimation(newValue, _ownerInstance, instance) {
var info = {}
info = JSON.parse(newValue)
var element = _ownerInstance.selectComponent('#' + info.id)
// playState leftTimes
var state = element.getState()
state.playState = info.playState
var startTime = null
state.leftTimes = info.options.iterations || 1
var currentStep = 0
var duration =
info.options.direction === 'alternate'
? info.options.duration * 2
: info.options.duration
function interpolateKeyframe(keyframes, usedTime) {
var index = 0
for (var i = 0; i < keyframes.length; i++) {
if (keyframes[i]._startTime + keyframes[i]._duration >= usedTime) {
index = i
break
}
}
var currentFrame = keyframes[index]
return {
style: currentFrame,
index: index,
}
}
function step() {
var isCancelled = state.playState === 'cancel'
var currentTime = Date.now()
if (startTime === null) {
startTime = currentTime
}
var elapsedTime = currentTime - startTime
if (isCancelled) {
var lastFrame = info.keyframes[info.keyframes.length - 1]
lastFrame.transition = 'none'
element.setStyle(lastFrame)
element.removeClass('__ct' + currentStep)
return
}
var res = interpolateKeyframe(info.keyframes, elapsedTime)
// currentStep removeClass
if (!element.hasClass('__ct' + res.index) && elapsedTime < duration) {
element.setStyle(res.style).addClass('__ct' + res.index)
}
if (currentStep !== res.index) {
element.removeClass('__ct' + currentStep)
currentStep = res.index
}
if (elapsedTime <= duration) {
instance.requestAnimationFrame(step)
} else {
// done
// element.callMethod('animationEnd')
if (state.leftTimes > 1) {
state.leftTimes--
startTime = null
instance.requestAnimationFrame(step)
return
} else if (state.leftTimes === -1) {
// handle infinite
startTime = null
instance.requestAnimationFrame(step)
}
}
}
instance.requestAnimationFrame(step)
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,39 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
__name: "before-after",
props: {
beforeImage: {},
afterImage: {},
showTitle: { type: Boolean }
},
setup(__props) {
const props = __props;
const previewImage = (url, type) => {
const urls = type == "before" ? [props.beforeImage] : [props.afterImage];
common_vendor.index.previewImage({
current: url,
urls
});
};
return (_ctx, _cache) => {
"raw js";
const __returned__ = common_vendor.e({
a: _ctx.showTitle
}, _ctx.showTitle ? {} : {}, {
b: _ctx.beforeImage,
c: common_vendor.o(($event) => {
return previewImage(_ctx.beforeImage, "before");
}),
d: _ctx.afterImage,
e: common_vendor.o(($event) => {
return previewImage(_ctx.afterImage, "after");
}),
f: common_vendor.sei(common_vendor.gei(_ctx, ""), "view")
});
return __returned__;
};
}
});
wx.createComponent(_sfc_main);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/components/before-after/before-after.js.map

View File

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

View File

@@ -0,0 +1 @@
<view id="{{f}}" change:eS="{{uV.sS}}" eS="{{$eS[f]}}" change:eA="{{uV.sA}}" eA="{{$eA[f]}}" class="{{['before-after', virtualHostClass]}}" style="{{virtualHostStyle}}" hidden="{{virtualHostHidden || false}}"><view wx:if="{{a}}" class="ba-title"><text class="ba-title-text">翻新前后对比</text></view><view class="ba-container"><view class="ba-item" bindtap="{{c}}"><view class="ba-label before-label"><text class="ba-label-text">翻新前</text></view><image class="ba-image" src="{{b}}" mode="aspectFill"></image></view><view class="ba-arrow"><text class="ba-arrow-text">→</text></view><view class="ba-item" bindtap="{{e}}"><view class="ba-label after-label"><text class="ba-label-text">翻新后</text></view><image class="ba-image" src="{{d}}" mode="aspectFill"></image></view></view></view><wxs src="/common/uniView.wxs" module="uV"/>

View File

@@ -0,0 +1,81 @@
:host{display:flex;flex-direction:column}
/**
* 优艺家沙发翻新 - 全局样式变量
*/
/* ========== 项目主题色 ========== */
/* 辅助色 */
/* 文字颜色 */
/* 背景色 */
/* 边框颜色 */
/* 间距 */
/* 圆角 */
/* 阴影 */
/* ========== uni-app 内置变量 ========== */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.before-after {
background-color: #ffffff;
border-radius: 16rpx;
padding: 24rpx;
margin-bottom: 24rpx;
}
.ba-title {
margin-bottom: 24rpx;
}
.ba-title-text {
font-size: 32rpx;
font-weight: 600;
color: #333333;
}
.ba-container {
flex-direction: row;
align-items: center;
justify-content: space-between;
}
.ba-item {
flex: 1;
position: relative;
border-radius: 12rpx;
overflow: hidden;
}
.ba-image {
width: 100%;
height: 280rpx;
border-radius: 12rpx;
}
.ba-label {
position: absolute;
bottom: 16rpx;
left: 16rpx;
padding: 8rpx 16rpx;
border-radius: 8rpx;
z-index: 1;
}
.before-label {
background-color: rgba(144, 147, 153, 0.9);
}
.after-label {
background-color: rgba(212, 165, 116, 0.9);
}
.ba-label-text {
font-size: 22rpx;
color: #ffffff;
}
.ba-arrow {
padding: 0 16rpx;
}
.ba-arrow-text {
font-size: 40rpx;
color: #D4A574;
font-weight: bold;
}

View File

@@ -0,0 +1,72 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
class CaseItem extends UTS.UTSType {
static get$UTSMetadata$() {
return {
kind: 2,
get fields() {
return {
id: { type: String, optional: false },
title: { type: String, optional: false },
category: { type: String, optional: false },
categoryName: { type: String, optional: false },
coverImage: { type: String, optional: false },
material: { type: String, optional: false },
duration: { type: String, optional: false },
price: { type: String, optional: false },
views: { type: Number, optional: false },
likes: { type: Number, optional: false }
};
},
name: "CaseItem"
};
}
constructor(options, metadata = CaseItem.get$UTSMetadata$(), isJSONParse = false) {
super();
this.__props__ = UTS.UTSType.initProps(options, metadata, isJSONParse);
this.id = this.__props__.id;
this.title = this.__props__.title;
this.category = this.__props__.category;
this.categoryName = this.__props__.categoryName;
this.coverImage = this.__props__.coverImage;
this.material = this.__props__.material;
this.duration = this.__props__.duration;
this.price = this.__props__.price;
this.views = this.__props__.views;
this.likes = this.__props__.likes;
delete this.__props__;
}
}
const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
__name: "case-card",
props: {
caseData: {}
},
emits: ["click"],
setup(__props, _a) {
var __emit = _a.emit;
const props = __props;
const emit = __emit;
const handleClick = () => {
emit("click", props.caseData.id);
};
return (_ctx, _cache) => {
"raw js";
const __returned__ = {
a: _ctx.caseData.coverImage,
b: common_vendor.t(_ctx.caseData.categoryName),
c: common_vendor.t(_ctx.caseData.title),
d: common_vendor.t(_ctx.caseData.material),
e: common_vendor.t(_ctx.caseData.duration),
f: common_vendor.t(_ctx.caseData.price),
g: common_vendor.t(_ctx.caseData.views),
h: common_vendor.t(_ctx.caseData.likes),
i: common_vendor.sei(common_vendor.gei(_ctx, ""), "view"),
j: common_vendor.o(handleClick)
};
return __returned__;
};
}
});
wx.createComponent(_sfc_main);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/components/case-card/case-card.js.map

View File

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

View File

@@ -0,0 +1 @@
<view bindtap="{{j}}" id="{{i}}" change:eS="{{uV.sS}}" eS="{{$eS[i]}}" change:eA="{{uV.sA}}" eA="{{$eA[i]}}" class="{{['case-card', virtualHostClass]}}" style="{{virtualHostStyle}}" hidden="{{virtualHostHidden || false}}"><view class="card-image-wrapper"><image class="card-image" src="{{a}}" mode="aspectFill"></image><view class="card-category">{{b}}</view></view><view class="card-content"><text class="card-title">{{c}}</text><view class="card-info"><view class="info-item"><text class="info-label">材质:</text><text class="info-value">{{d}}</text></view><view class="info-item"><text class="info-label">工期:</text><text class="info-value">{{e}}</text></view></view><view class="card-footer"><text class="card-price">{{f}}</text><view class="card-stats"><text class="stat-item">👁 {{g}}</text><text class="stat-item">❤ {{h}}</text></view></view></view></view><wxs src="/common/uniView.wxs" module="uV"/>

View File

@@ -0,0 +1,100 @@
:host{display:flex;flex-direction:column}
/**
* 优艺家沙发翻新 - 全局样式变量
*/
/* ========== 项目主题色 ========== */
/* 辅助色 */
/* 文字颜色 */
/* 背景色 */
/* 边框颜色 */
/* 间距 */
/* 圆角 */
/* 阴影 */
/* ========== uni-app 内置变量 ========== */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.case-card {
background-color: #ffffff;
border-radius: 16rpx;
overflow: hidden;
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.08);
margin-bottom: 24rpx;
}
.card-image-wrapper {
position: relative;
width: 100%;
height: 360rpx;
}
.card-image {
width: 100%;
height: 100%;
}
.card-category {
position: absolute;
top: 16rpx;
left: 16rpx;
background-color: rgba(212, 165, 116, 0.9);
color: #ffffff;
font-size: 22rpx;
padding: 8rpx 16rpx;
border-radius: 8rpx;
}
.card-content {
padding: 24rpx;
}
.card-title {
font-size: 32rpx;
font-weight: 600;
color: #333333;
margin-bottom: 16rpx;
lines: 1;
text-overflow: ellipsis;
}
.card-info {
margin-bottom: 16rpx;
}
.info-item {
flex-direction: row;
margin-bottom: 8rpx;
}
.info-label {
font-size: 26rpx;
color: #909399;
}
.info-value {
font-size: 26rpx;
color: #606266;
}
.card-footer {
flex-direction: row;
justify-content: space-between;
align-items: center;
margin-top: 16rpx;
padding-top: 16rpx;
border-top-width: 1rpx;
border-top-style: solid;
border-top-color: #EBEEF5;
}
.card-price {
font-size: 36rpx;
font-weight: 600;
color: #D4A574;
}
.card-stats {
flex-direction: row;
}
.stat-item {
font-size: 24rpx;
color: #909399;
margin-left: 24rpx;
}

View File

@@ -0,0 +1,47 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
__name: "nav-bar",
props: {
title: {},
showBack: { type: Boolean },
titleColor: {},
bgColor: {}
},
setup(__props) {
const statusBarHeight = common_vendor.ref(20);
const navBarHeight = common_vendor.ref(44);
common_vendor.onMounted(() => {
const sysInfo = common_vendor.index.getSystemInfoSync();
statusBarHeight.value = sysInfo.statusBarHeight;
const menuButtonInfo = common_vendor.index.getMenuButtonBoundingClientRect();
navBarHeight.value = (menuButtonInfo.top - sysInfo.statusBarHeight) * 2 + menuButtonInfo.height;
});
const handleBack = () => {
common_vendor.index.navigateBack(new UTSJSONObject({
fail: () => {
common_vendor.index.switchTab({
url: "/pages/index/index"
});
}
}));
};
return (_ctx, _cache) => {
"raw js";
const __returned__ = common_vendor.e({
a: _ctx.showBack
}, _ctx.showBack ? {
b: common_vendor.o(handleBack)
} : {}, {
c: common_vendor.t(_ctx.title),
d: _ctx.titleColor,
e: common_vendor.unref(navBarHeight) + "px",
f: common_vendor.unref(statusBarHeight) + "px",
g: common_vendor.unref(statusBarHeight) + common_vendor.unref(navBarHeight) + "px"
});
return __returned__;
};
}
});
wx.createComponent(_sfc_main);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/components/nav-bar/nav-bar.js.map

View File

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

View File

@@ -0,0 +1 @@
<view class="nav-bar" style="{{'padding-top:' + f}}"><view class="nav-content" style="{{'height:' + e}}"><view wx:if="{{a}}" class="nav-left" bindtap="{{b}}"><text class="nav-back-icon">←</text></view><view wx:else class="nav-left"></view><view class="nav-center"><text class="nav-title" style="{{'color:' + d}}">{{c}}</text></view><view class="nav-right"><slot name="right"></slot></view></view></view><view style="{{'height:' + g}}"></view>

View File

@@ -0,0 +1,64 @@
:host{display:flex;flex-direction:column}
/**
* 优艺家沙发翻新 - 全局样式变量
*/
/* ========== 项目主题色 ========== */
/* 辅助色 */
/* 文字颜色 */
/* 背景色 */
/* 边框颜色 */
/* 间距 */
/* 圆角 */
/* 阴影 */
/* ========== uni-app 内置变量 ========== */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.nav-bar {
position: fixed;
top: 0;
left: 0;
right: 0;
background-color: #ffffff;
z-index: 999;
}
.nav-content {
flex-direction: row;
align-items: center;
justify-content: space-between;
padding: 0 24rpx;
}
.nav-left {
width: 80rpx;
flex-direction: row;
align-items: center;
}
.nav-back-icon {
font-size: 40rpx;
color: #333333;
}
.nav-center {
flex: 1;
align-items: center;
justify-content: center;
}
.nav-title {
font-size: 34rpx;
font-weight: 600;
color: #333333;
}
.nav-right {
width: 80rpx;
flex-direction: row;
align-items: center;
justify-content: flex-end;
}

View File

@@ -0,0 +1,31 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
__name: "section-header",
props: {
title: {},
showMore: { type: Boolean }
},
emits: ["more"],
setup(__props, _a) {
var __emit = _a.emit;
const emit = __emit;
const handleMore = () => {
emit("more");
};
return (_ctx, _cache) => {
"raw js";
const __returned__ = common_vendor.e({
a: common_vendor.t(_ctx.title),
b: _ctx.showMore
}, _ctx.showMore ? {
c: common_vendor.o(handleMore)
} : {}, {
d: common_vendor.sei(common_vendor.gei(_ctx, ""), "view")
});
return __returned__;
};
}
});
wx.createComponent(_sfc_main);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/components/section-header/section-header.js.map

View File

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

View File

@@ -0,0 +1 @@
<view id="{{d}}" change:eS="{{uV.sS}}" eS="{{$eS[d]}}" change:eA="{{uV.sA}}" eA="{{$eA[d]}}" class="{{['section-header', virtualHostClass]}}" style="{{virtualHostStyle}}" hidden="{{virtualHostHidden || false}}"><view class="section-left"><view class="section-line"></view><text class="section-title">{{a}}</text></view><view wx:if="{{b}}" class="section-right" bindtap="{{c}}"><text class="section-more">查看更多</text><text class="section-arrow"></text></view></view><wxs src="/common/uniView.wxs" module="uV"/>

View File

@@ -0,0 +1,60 @@
:host{display:flex;flex-direction:column}
/**
* 优艺家沙发翻新 - 全局样式变量
*/
/* ========== 项目主题色 ========== */
/* 辅助色 */
/* 文字颜色 */
/* 背景色 */
/* 边框颜色 */
/* 间距 */
/* 圆角 */
/* 阴影 */
/* ========== uni-app 内置变量 ========== */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.section-header {
flex-direction: row;
align-items: center;
justify-content: space-between;
padding: 32rpx 0 24rpx 0;
}
.section-left {
flex-direction: row;
align-items: center;
}
.section-line {
width: 8rpx;
height: 36rpx;
background-color: #D4A574;
border-radius: 4rpx;
margin-right: 16rpx;
}
.section-title {
font-size: 34rpx;
font-weight: 600;
color: #333333;
}
.section-right {
flex-direction: row;
align-items: center;
}
.section-more {
font-size: 26rpx;
color: #909399;
}
.section-arrow {
font-size: 32rpx;
color: #909399;
margin-left: 8rpx;
}

View File

@@ -0,0 +1,31 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
__name: "service-card",
props: {
id: {},
name: {},
icon: {}
},
emits: ["click"],
setup(__props, _a) {
var __emit = _a.emit;
const props = __props;
const emit = __emit;
const handleClick = () => {
emit("click", props.id);
};
return (_ctx, _cache) => {
"raw js";
const __returned__ = {
a: _ctx.icon,
b: common_vendor.t(_ctx.name),
c: common_vendor.sei(common_vendor.gei(_ctx, ""), "view"),
d: common_vendor.o(handleClick)
};
return __returned__;
};
}
});
wx.createComponent(_sfc_main);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/components/service-card/service-card.js.map

View File

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

View File

@@ -0,0 +1 @@
<view bindtap="{{d}}" id="{{c}}" change:eS="{{uV.sS}}" eS="{{$eS[c]}}" change:eA="{{uV.sA}}" eA="{{$eA[c]}}" class="{{['service-card', virtualHostClass]}}" style="{{virtualHostStyle}}" hidden="{{virtualHostHidden || false}}"><view class="service-icon-wrapper"><image class="service-icon" src="{{a}}" mode="aspectFit"></image></view><text class="service-name">{{b}}</text></view><wxs src="/common/uniView.wxs" module="uV"/>

View File

@@ -0,0 +1,51 @@
:host{display:flex;flex-direction:column}
/**
* 优艺家沙发翻新 - 全局样式变量
*/
/* ========== 项目主题色 ========== */
/* 辅助色 */
/* 文字颜色 */
/* 背景色 */
/* 边框颜色 */
/* 间距 */
/* 圆角 */
/* 阴影 */
/* ========== uni-app 内置变量 ========== */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.service-card {
align-items: center;
justify-content: center;
padding: 24rpx 16rpx;
background-color: #ffffff;
border-radius: 16rpx;
width: 160rpx;
}
.service-icon-wrapper {
width: 80rpx;
height: 80rpx;
background-color: #FDF6EE;
border-radius: 50%;
align-items: center;
justify-content: center;
margin-bottom: 16rpx;
}
.service-icon {
width: 48rpx;
height: 48rpx;
}
.service-name {
font-size: 26rpx;
color: #333333;
text-align: center;
}

View File

@@ -0,0 +1,181 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const api_index = require("../../api/index.js");
if (!Array) {
const _easycom_section_header_1 = common_vendor.resolveComponent("section-header");
_easycom_section_header_1();
}
const _easycom_section_header = () => "../../components/section-header/section-header.js";
if (!Math) {
_easycom_section_header();
}
class FeatureItem extends UTS.UTSType {
static get$UTSMetadata$() {
return {
kind: 2,
get fields() {
return {
title: { type: String, optional: false },
desc: { type: String, optional: false }
};
},
name: "FeatureItem"
};
}
constructor(options, metadata = FeatureItem.get$UTSMetadata$(), isJSONParse = false) {
super();
this.__props__ = UTS.UTSType.initProps(options, metadata, isJSONParse);
this.title = this.__props__.title;
this.desc = this.__props__.desc;
delete this.__props__;
}
}
class CompanyInfo extends UTS.UTSType {
static get$UTSMetadata$() {
return {
kind: 2,
get fields() {
return {
name: { type: String, optional: false },
slogan: { type: String, optional: false },
description: { type: String, optional: false },
phone: { type: String, optional: false },
wechat: { type: String, optional: false },
address: { type: String, optional: false },
workTime: { type: String, optional: false },
features: { type: UTS.UTSType.withGenerics(Array, [FeatureItem]), optional: false }
};
},
name: "CompanyInfo"
};
}
constructor(options, metadata = CompanyInfo.get$UTSMetadata$(), isJSONParse = false) {
super();
this.__props__ = UTS.UTSType.initProps(options, metadata, isJSONParse);
this.name = this.__props__.name;
this.slogan = this.__props__.slogan;
this.description = this.__props__.description;
this.phone = this.__props__.phone;
this.wechat = this.__props__.wechat;
this.address = this.__props__.address;
this.workTime = this.__props__.workTime;
this.features = this.__props__.features;
delete this.__props__;
}
}
const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
__name: "index",
setup(__props) {
const companyInfo = common_vendor.ref(new CompanyInfo({
name: "优艺家沙发翻新",
slogan: "让旧沙发焕发新生",
description: "",
phone: "400-888-8888",
wechat: "youyijia2026",
address: "",
workTime: "",
features: []
}));
const fetchCompanyInfo = () => {
return common_vendor.__awaiter(this, void 0, void 0, function* () {
try {
const res = yield api_index.getCompanyInfo();
const data = res.data;
const featuresData = data["features"];
const features = featuresData.map((item) => {
return new FeatureItem({
title: item["title"],
desc: item["desc"]
});
});
companyInfo.value = new CompanyInfo({
name: data["name"],
slogan: data["slogan"],
description: data["description"],
phone: data["phone"],
wechat: data["wechat"],
address: data["address"],
workTime: data["workTime"],
features
});
} catch (e) {
common_vendor.index.__f__("error", "at pages/about/index.uvue:148", "获取公司信息失败", e);
}
});
};
const callPhone = () => {
common_vendor.index.makePhoneCall({
phoneNumber: companyInfo.value.phone,
fail: () => {
common_vendor.index.showToast({
title: "拨打电话失败",
icon: "none"
});
}
});
};
const copyWechat = () => {
common_vendor.index.setClipboardData({
data: companyInfo.value.wechat,
success: () => {
common_vendor.index.showToast({
title: "微信号已复制",
icon: "success"
});
}
});
};
const openLocation = () => {
common_vendor.index.openLocation({
latitude: 31.2,
longitude: 121.5,
name: companyInfo.value.name,
address: companyInfo.value.address,
fail: () => {
common_vendor.index.showToast({
title: "无法打开地图",
icon: "none"
});
}
});
};
common_vendor.onLoad(() => {
fetchCompanyInfo();
});
return (_ctx, _cache) => {
"raw js";
const __returned__ = {
a: common_vendor.t(common_vendor.unref(companyInfo).name),
b: common_vendor.t(common_vendor.unref(companyInfo).slogan),
c: common_vendor.p({
title: "公司简介"
}),
d: common_vendor.t(common_vendor.unref(companyInfo).description),
e: common_vendor.p({
title: "我们的优势"
}),
f: common_vendor.f(common_vendor.unref(companyInfo).features, (item, k0, i0) => {
return {
a: common_vendor.t(item.title),
b: common_vendor.t(item.desc),
c: item.title
};
}),
g: common_vendor.p({
title: "联系我们"
}),
h: common_vendor.t(common_vendor.unref(companyInfo).phone),
i: common_vendor.o(callPhone),
j: common_vendor.t(common_vendor.unref(companyInfo).wechat),
k: common_vendor.o(copyWechat),
l: common_vendor.t(common_vendor.unref(companyInfo).address),
m: common_vendor.o(openLocation),
n: common_vendor.t(common_vendor.unref(companyInfo).workTime),
o: common_vendor.sei(common_vendor.gei(_ctx, ""), "view")
};
return __returned__;
};
}
});
wx.createPage(_sfc_main);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/about/index.js.map

View File

@@ -0,0 +1,6 @@
{
"navigationBarTitleText": "关于我们",
"usingComponents": {
"section-header": "../../components/section-header/section-header"
}
}

View File

@@ -0,0 +1 @@
<view id="{{o}}" change:eS="{{uV.sS}}" eS="{{$eS[o]}}" change:eA="{{uV.sA}}" eA="{{$eA[o]}}" class="{{['page', virtualHostClass]}}" style="{{virtualHostStyle}}" hidden="{{virtualHostHidden || false}}"><scroll-view class="page-scroll" scroll-y enable-flex="true" enhanced="true"><view class="header-section"><view class="company-logo"><text class="logo-text">优艺家</text></view><text class="company-name">{{a}}</text><text class="company-slogan">{{b}}</text></view><view class="section"><section-header u-i="00470dc0-0" bind:__l="__l" u-p="{{c||''}}"></section-header><view class="intro-card"><text class="intro-text">{{d}}</text></view></view><view class="section"><section-header u-i="00470dc0-1" bind:__l="__l" u-p="{{e||''}}"></section-header><view class="features-grid"><view wx:for="{{f}}" wx:for-item="item" wx:key="c" class="feature-item"><view class="feature-icon-bg"><text class="feature-icon">✓</text></view><text class="feature-title">{{item.a}}</text><text class="feature-desc">{{item.b}}</text></view></view></view><view class="section"><section-header u-i="00470dc0-2" bind:__l="__l" u-p="{{g||''}}"></section-header><view class="contact-card"><view class="contact-item" bindtap="{{i}}"><view class="contact-icon-bg"><text class="contact-icon">📞</text></view><view class="contact-info"><text class="contact-label">客服电话</text><text class="contact-value">{{h}}</text></view><text class="contact-arrow"></text></view><view class="contact-item" bindtap="{{k}}"><view class="contact-icon-bg"><text class="contact-icon">💬</text></view><view class="contact-info"><text class="contact-label">微信号</text><text class="contact-value">{{j}}</text></view><text class="contact-arrow"></text></view><view class="contact-item" bindtap="{{m}}"><view class="contact-icon-bg"><text class="contact-icon">📍</text></view><view class="contact-info"><text class="contact-label">公司地址</text><text class="contact-value">{{l}}</text></view><text class="contact-arrow"></text></view><view class="contact-item"><view class="contact-icon-bg"><text class="contact-icon">🕐</text></view><view class="contact-info"><text class="contact-label">营业时间</text><text class="contact-value">{{n}}</text></view></view></view></view><view class="bottom-space"></view></scroll-view></view><wxs src="/common/uniView.wxs" module="uV"/>

View File

@@ -0,0 +1,169 @@
@import "../../uvue.wxss";
:host{display:flex;flex-direction:column}
/**
* 优艺家沙发翻新 - 全局样式变量
*/
/* ========== 项目主题色 ========== */
/* 辅助色 */
/* 文字颜色 */
/* 背景色 */
/* 边框颜色 */
/* 间距 */
/* 圆角 */
/* 阴影 */
/* ========== uni-app 内置变量 ========== */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.page {
flex: 1;
background-color: #f5f5f5;
}
.page-scroll {
flex: 1;
}
/* 头部区域 */
.header-section {
background: linear-gradient(135deg, #D4A574 0%, #B8895A 100%);
padding: 60rpx 32rpx;
align-items: center;
}
.company-logo {
width: 140rpx;
height: 140rpx;
background-color: #ffffff;
border-radius: 50%;
align-items: center;
justify-content: center;
margin-bottom: 24rpx;
}
.logo-text {
font-size: 36rpx;
font-weight: 600;
color: #D4A574;
}
.company-name {
font-size: 40rpx;
font-weight: 600;
color: #ffffff;
margin-bottom: 12rpx;
}
.company-slogan {
font-size: 28rpx;
color: rgba(255, 255, 255, 0.8);
}
/* 通用section */
.section {
padding: 0 24rpx;
margin-bottom: 24rpx;
}
/* 公司介绍 */
.intro-card {
background-color: #ffffff;
border-radius: 16rpx;
padding: 32rpx;
}
.intro-text {
font-size: 28rpx;
color: #606266;
line-height: 48rpx;
}
/* 优势 */
.features-grid {
flex-direction: row;
flex-wrap: wrap;
background-color: #ffffff;
border-radius: 16rpx;
padding: 16rpx;
}
.feature-item {
width: 50%;
padding: 24rpx;
align-items: center;
}
.feature-icon-bg {
width: 80rpx;
height: 80rpx;
background-color: #D4A574;
border-radius: 50%;
align-items: center;
justify-content: center;
margin-bottom: 16rpx;
}
.feature-icon {
font-size: 40rpx;
color: #ffffff;
}
.feature-title {
font-size: 30rpx;
font-weight: 600;
color: #333333;
margin-bottom: 8rpx;
}
.feature-desc {
font-size: 24rpx;
color: #909399;
}
/* 联系方式 */
.contact-card {
background-color: #ffffff;
border-radius: 16rpx;
}
.contact-item {
flex-direction: row;
align-items: center;
padding: 32rpx;
border-bottom-width: 1rpx;
border-bottom-style: solid;
border-bottom-color: #EBEEF5;
}
.contact-item:last-child {
border-bottom-width: 0;
}
.contact-icon-bg {
width: 72rpx;
height: 72rpx;
background-color: #FDF6EE;
border-radius: 50%;
align-items: center;
justify-content: center;
margin-right: 24rpx;
}
.contact-icon {
font-size: 36rpx;
}
.contact-info {
flex: 1;
}
.contact-label {
font-size: 24rpx;
color: #909399;
margin-bottom: 8rpx;
}
.contact-value {
font-size: 30rpx;
color: #333333;
}
.contact-arrow {
font-size: 36rpx;
color: #909399;
}
/* 底部间距 */
.bottom-space {
height: 60rpx;
}

View File

@@ -0,0 +1,221 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const api_index = require("../../api/index.js");
const utils_config = require("../../utils/config.js");
class FormData extends UTS.UTSType {
static get$UTSMetadata$() {
return {
kind: 2,
get fields() {
return {
userName: { type: String, optional: false },
phone: { type: String, optional: false },
address: { type: String, optional: false },
sofaType: { type: String, optional: false },
problem: { type: String, optional: false }
};
},
name: "FormData"
};
}
constructor(options, metadata = FormData.get$UTSMetadata$(), isJSONParse = false) {
super();
this.__props__ = UTS.UTSType.initProps(options, metadata, isJSONParse);
this.userName = this.__props__.userName;
this.phone = this.__props__.phone;
this.address = this.__props__.address;
this.sofaType = this.__props__.sofaType;
this.problem = this.__props__.problem;
delete this.__props__;
}
}
class SofaType extends UTS.UTSType {
static get$UTSMetadata$() {
return {
kind: 2,
get fields() {
return {
id: { type: String, optional: false },
name: { type: String, optional: false }
};
},
name: "SofaType"
};
}
constructor(options, metadata = SofaType.get$UTSMetadata$(), isJSONParse = false) {
super();
this.__props__ = UTS.UTSType.initProps(options, metadata, isJSONParse);
this.id = this.__props__.id;
this.name = this.__props__.name;
delete this.__props__;
}
}
const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
__name: "index",
setup(__props) {
const formData = common_vendor.ref(new FormData({
userName: "",
phone: "",
address: "",
sofaType: "",
problem: ""
}));
const imageList = common_vendor.ref([]);
const sofaTypes = common_vendor.ref([]);
const submitting = common_vendor.ref(false);
const initSofaTypes = () => {
sofaTypes.value = utils_config.SOFA_CATEGORIES.filter((item) => {
return item.id != "all";
}).map((item) => {
return new SofaType({
id: item.id,
name: item.name
});
});
};
const selectSofaType = (id) => {
formData.value.sofaType = id;
};
const chooseImage = () => {
common_vendor.index.chooseImage(new UTSJSONObject({
count: 9 - imageList.value.length,
sizeType: ["compressed"],
sourceType: ["album", "camera"],
success: (res) => {
imageList.value = [...imageList.value, ...res.tempFilePaths];
}
}));
};
const deleteImage = (index) => {
imageList.value.splice(index, 1);
};
const validateForm = () => {
if (formData.value.userName.trim() == "") {
common_vendor.index.showToast({
title: "请输入您的姓名",
icon: "none"
});
return false;
}
const phone = formData.value.phone.trim();
if (phone == "") {
common_vendor.index.showToast({
title: "请输入联系电话",
icon: "none"
});
return false;
}
if (phone.length != 11) {
common_vendor.index.showToast({
title: "请输入正确的手机号",
icon: "none"
});
return false;
}
if (formData.value.address.trim() == "") {
common_vendor.index.showToast({
title: "请输入您的地址",
icon: "none"
});
return false;
}
return true;
};
const handleSubmit = () => {
return common_vendor.__awaiter(this, void 0, void 0, function* () {
if (!validateForm())
return Promise.resolve(null);
if (submitting.value)
return Promise.resolve(null);
submitting.value = true;
try {
const data = new UTSJSONObject({
userName: formData.value.userName,
phone: formData.value.phone,
address: formData.value.address,
sofaType: formData.value.sofaType,
problem: formData.value.problem,
images: imageList.value
});
const res = yield api_index.submitBooking(data);
const result = res.data;
common_vendor.index.showModal(new UTSJSONObject({
title: "预约成功",
content: result["message"],
showCancel: false,
success: () => {
common_vendor.index.navigateBack(new UTSJSONObject({
fail: () => {
common_vendor.index.switchTab({
url: "/pages/index/index"
});
}
}));
}
}));
} catch (e) {
common_vendor.index.__f__("error", "at pages/booking/index.uvue:270", "提交预约失败", e);
common_vendor.index.showToast({
title: "提交失败,请重试",
icon: "none"
});
}
submitting.value = false;
});
};
common_vendor.onLoad(() => {
initSofaTypes();
});
return (_ctx, _cache) => {
"raw js";
const __returned__ = common_vendor.e({
a: common_vendor.unref(formData).userName,
b: common_vendor.o(($event) => {
return common_vendor.unref(formData).userName = $event.detail.value;
}),
c: common_vendor.unref(formData).phone,
d: common_vendor.o(($event) => {
return common_vendor.unref(formData).phone = $event.detail.value;
}),
e: common_vendor.unref(formData).address,
f: common_vendor.o(($event) => {
return common_vendor.unref(formData).address = $event.detail.value;
}),
g: common_vendor.f(common_vendor.unref(sofaTypes), (item, k0, i0) => {
return {
a: common_vendor.t(item.name),
b: common_vendor.unref(formData).sofaType == item.id ? 1 : "",
c: common_vendor.unref(formData).sofaType == item.id ? 1 : "",
d: item.id,
e: common_vendor.o(($event) => {
return selectSofaType(item.id);
}, item.id)
};
}),
h: common_vendor.unref(formData).problem,
i: common_vendor.o(($event) => {
return common_vendor.unref(formData).problem = $event.detail.value;
}),
j: common_vendor.t(common_vendor.unref(formData).problem.length),
k: common_vendor.f(common_vendor.unref(imageList), (item, index, i0) => {
return {
a: item,
b: common_vendor.o(($event) => {
return deleteImage(index);
}, index),
c: index
};
}),
l: common_vendor.unref(imageList).length < 9
}, common_vendor.unref(imageList).length < 9 ? {
m: common_vendor.o(chooseImage)
} : {}, {
n: common_vendor.o(handleSubmit),
o: common_vendor.sei(common_vendor.gei(_ctx, ""), "view")
});
return __returned__;
};
}
});
wx.createPage(_sfc_main);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/booking/index.js.map

View File

@@ -0,0 +1,4 @@
{
"navigationBarTitleText": "预约咨询",
"usingComponents": {}
}

View File

@@ -0,0 +1 @@
<view id="{{o}}" change:eS="{{uV.sS}}" eS="{{$eS[o]}}" change:eA="{{uV.sA}}" eA="{{$eA[o]}}" class="{{['page', virtualHostClass]}}" style="{{virtualHostStyle}}" hidden="{{virtualHostHidden || false}}"><scroll-view class="page-scroll" scroll-y enable-flex="true" enhanced="true"><view class="header-section"><text class="header-title">预约翻新服务</text><text class="header-desc">填写以下信息,我们会尽快与您联系</text></view><view class="form-section"><view class="form-item"><text class="form-label"><text class="required">*</text> 您的姓名 </text><input class="form-input" type="text" placeholder="请输入您的姓名" placeholder-class="placeholder" value="{{a}}" bindinput="{{b}}"/></view><view class="form-item"><text class="form-label"><text class="required">*</text> 联系电话 </text><input class="form-input" type="number" placeholder="请输入您的手机号" placeholder-class="placeholder" maxlength="11" value="{{c}}" bindinput="{{d}}"/></view><view class="form-item"><text class="form-label"><text class="required">*</text> 您的地址 </text><input class="form-input" type="text" placeholder="请输入详细地址" placeholder-class="placeholder" value="{{e}}" bindinput="{{f}}"/></view><view class="form-item"><text class="form-label">沙发类型</text><view class="type-grid"><view wx:for="{{g}}" wx:for-item="item" wx:key="d" class="{{['type-item', item.c && 'type-active']}}" bindtap="{{item.e}}"><text class="{{['type-text', item.b && 'type-text-active']}}">{{item.a}}</text></view></view></view><view class="form-item"><text class="form-label">问题描述</text><block wx:if="{{r0}}"><textarea class="form-textarea" placeholder="请描述沙发的问题(如:皮面开裂、褪色、塌陷等)" placeholder-class="placeholder" maxlength="500" value="{{h}}" bindinput="{{i}}"></textarea></block><text class="textarea-count">{{j}}/500</text></view><view class="form-item"><text class="form-label">上传图片(可选)</text><view class="upload-grid"><view wx:for="{{k}}" wx:for-item="item" wx:key="c" class="upload-item"><image class="upload-image" src="{{item.a}}" mode="aspectFill"></image><view class="upload-delete" bindtap="{{item.b}}"><text class="delete-icon">×</text></view></view><view wx:if="{{l}}" class="upload-add" bindtap="{{m}}"><text class="add-icon">+</text><text class="add-text">添加图片</text></view></view><text class="upload-tip">最多可上传9张图片</text></view></view><view class="bottom-space"></view></scroll-view><view class="submit-bar"><view class="submit-btn" bindtap="{{n}}"><text class="submit-text">提交预约</text></view></view></view><wxs src="/common/uniView.wxs" module="uV"/>

View File

@@ -0,0 +1,206 @@
@import "../../uvue.wxss";
:host{display:flex;flex-direction:column}
/**
* 优艺家沙发翻新 - 全局样式变量
*/
/* ========== 项目主题色 ========== */
/* 辅助色 */
/* 文字颜色 */
/* 背景色 */
/* 边框颜色 */
/* 间距 */
/* 圆角 */
/* 阴影 */
/* ========== uni-app 内置变量 ========== */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.page {
flex: 1;
background-color: #f5f5f5;
}
.page-scroll {
flex: 1;
}
/* 头部 */
.header-section {
background: linear-gradient(135deg, #D4A574 0%, #B8895A 100%);
padding: 48rpx 32rpx;
align-items: center;
}
.header-title {
font-size: 40rpx;
font-weight: 600;
color: #ffffff;
margin-bottom: 12rpx;
}
.header-desc {
font-size: 28rpx;
color: rgba(255, 255, 255, 0.8);
}
/* 表单区域 */
.form-section {
background-color: #ffffff;
margin: 24rpx;
border-radius: 16rpx;
padding: 32rpx;
}
.form-item {
margin-bottom: 32rpx;
}
.form-label {
font-size: 28rpx;
font-weight: 600;
color: #333333;
margin-bottom: 16rpx;
}
.required {
color: #F56C6C;
margin-right: 4rpx;
}
.form-input {
background-color: #f5f5f5;
border-radius: 12rpx;
padding: 24rpx;
font-size: 28rpx;
height: 40px;
}
.placeholder {
color: #C0C4CC;
}
/* 沙发类型选择 */
.type-grid {
flex-direction: row;
flex-wrap: wrap;
}
.type-item {
padding: 16rpx 32rpx;
background-color: #f5f5f5;
border-radius: 8rpx;
margin-right: 16rpx;
margin-bottom: 16rpx;
}
.type-active {
background-color: #D4A574;
}
.type-text {
font-size: 26rpx;
color: #606266;
}
.type-text-active {
color: #ffffff;
}
/* 文本域 */
.form-textarea {
background-color: #f5f5f5;
border-radius: 12rpx;
padding: 24rpx;
font-size: 28rpx;
height: 200rpx;
width: 100%;
}
.textarea-count {
font-size: 24rpx;
color: #909399;
text-align: right;
margin-top: 8rpx;
}
/* 图片上传 */
.upload-grid {
flex-direction: row;
flex-wrap: wrap;
}
.upload-item {
width: 200rpx;
height: 200rpx;
margin-right: 16rpx;
margin-bottom: 16rpx;
position: relative;
}
.upload-image {
width: 100%;
height: 100%;
border-radius: 12rpx;
}
.upload-delete {
position: absolute;
top: -16rpx;
right: -16rpx;
width: 40rpx;
height: 40rpx;
background-color: #F56C6C;
border-radius: 50%;
align-items: center;
justify-content: center;
}
.delete-icon {
font-size: 28rpx;
color: #ffffff;
}
.upload-add {
width: 200rpx;
height: 200rpx;
background-color: #f5f5f5;
border-radius: 12rpx;
align-items: center;
justify-content: center;
border-width: 2rpx;
border-style: dashed;
border-color: #DCDFE6;
}
.add-icon {
font-size: 48rpx;
color: #909399;
}
.add-text {
font-size: 24rpx;
color: #909399;
margin-top: 8rpx;
}
.upload-tip {
font-size: 24rpx;
color: #909399;
margin-top: 16rpx;
}
/* 底部间距 */
.bottom-space {
height: 160rpx;
}
/* 提交按钮 */
.submit-bar {
position: fixed;
bottom: 0;
left: 0;
right: 0;
background-color: #ffffff;
padding: 24rpx 32rpx;
padding-bottom: 48rpx;
box-shadow: 0 -4rpx 16rpx rgba(0, 0, 0, 0.08);
}
.submit-btn {
background-color: #D4A574;
border-radius: 999rpx;
padding: 28rpx 0;
align-items: center;
}
.submit-text {
font-size: 32rpx;
font-weight: 600;
color: #ffffff;
}

View File

@@ -0,0 +1,186 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const api_index = require("../../api/index.js");
if (!Array) {
const _easycom_before_after_1 = common_vendor.resolveComponent("before-after");
_easycom_before_after_1();
}
const _easycom_before_after = () => "../../components/before-after/before-after.js";
if (!Math) {
_easycom_before_after();
}
class CaseDetail extends UTS.UTSType {
static get$UTSMetadata$() {
return {
kind: 2,
get fields() {
return {
id: { type: String, optional: false },
title: { type: String, optional: false },
category: { type: String, optional: false },
categoryName: { type: String, optional: false },
beforeImages: { type: UTS.UTSType.withGenerics(Array, [String]), optional: false },
afterImages: { type: UTS.UTSType.withGenerics(Array, [String]), optional: false },
description: { type: String, optional: false },
material: { type: String, optional: false },
duration: { type: String, optional: false },
price: { type: String, optional: false },
views: { type: Number, optional: false },
likes: { type: Number, optional: false },
createTime: { type: String, optional: false }
};
},
name: "CaseDetail"
};
}
constructor(options, metadata = CaseDetail.get$UTSMetadata$(), isJSONParse = false) {
super();
this.__props__ = UTS.UTSType.initProps(options, metadata, isJSONParse);
this.id = this.__props__.id;
this.title = this.__props__.title;
this.category = this.__props__.category;
this.categoryName = this.__props__.categoryName;
this.beforeImages = this.__props__.beforeImages;
this.afterImages = this.__props__.afterImages;
this.description = this.__props__.description;
this.material = this.__props__.material;
this.duration = this.__props__.duration;
this.price = this.__props__.price;
this.views = this.__props__.views;
this.likes = this.__props__.likes;
this.createTime = this.__props__.createTime;
delete this.__props__;
}
}
const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
__name: "detail",
setup(__props) {
const caseId = common_vendor.ref("");
const caseDetail = common_vendor.ref(new CaseDetail({
id: "",
title: "",
category: "",
categoryName: "",
beforeImages: [],
afterImages: [],
description: "",
material: "",
duration: "",
price: "",
views: 0,
likes: 0,
createTime: ""
}));
const isFavorite = common_vendor.ref(false);
const fetchCaseDetail = () => {
return common_vendor.__awaiter(this, void 0, void 0, function* () {
try {
const res = yield api_index.getCaseDetail(caseId.value);
const data = res.data;
caseDetail.value = new CaseDetail(
{
id: data["id"],
title: data["title"],
category: data["category"],
categoryName: data["categoryName"],
beforeImages: data["beforeImages"],
afterImages: data["afterImages"],
description: data["description"],
material: data["material"],
duration: data["duration"],
price: data["price"],
views: data["views"],
likes: data["likes"],
createTime: data["createTime"]
}
// 更新标题
);
common_vendor.index.setNavigationBarTitle({
title: caseDetail.value.title
});
} catch (e) {
common_vendor.index.__f__("error", "at pages/cases/detail.uvue:173", "获取案例详情失败", e);
}
});
};
const previewImages = (index) => {
common_vendor.index.previewImage({
current: index,
urls: caseDetail.value.afterImages
});
};
const handleFavorite = () => {
isFavorite.value = !isFavorite.value;
common_vendor.index.showToast({
title: isFavorite.value ? "已收藏" : "已取消收藏",
icon: "none"
});
};
const handleShare = () => {
common_vendor.index.showToast({
title: "分享功能开发中",
icon: "none"
});
};
const handleContact = () => {
common_vendor.index.makePhoneCall({
phoneNumber: "400-888-8888",
fail: () => {
common_vendor.index.showToast({
title: "拨打电话失败",
icon: "none"
});
}
});
};
const goToBooking = () => {
common_vendor.index.navigateTo({
url: "/pages/booking/index"
});
};
common_vendor.onLoad((options) => {
var _a;
caseId.value = (_a = options["id"]) !== null && _a !== void 0 ? _a : "";
if (caseId.value != "") {
fetchCaseDetail();
}
});
return (_ctx, _cache) => {
"raw js";
const __returned__ = {
a: common_vendor.f(common_vendor.unref(caseDetail).afterImages, (item, index, i0) => {
return {
a: item,
b: common_vendor.o(($event) => {
return previewImages(index);
}, index),
c: index
};
}),
b: common_vendor.t(common_vendor.unref(caseDetail).categoryName),
c: common_vendor.t(common_vendor.unref(caseDetail).title),
d: common_vendor.t(common_vendor.unref(caseDetail).price),
e: common_vendor.t(common_vendor.unref(caseDetail).views),
f: common_vendor.t(common_vendor.unref(caseDetail).likes),
g: common_vendor.p({
beforeImage: common_vendor.unref(caseDetail).beforeImages[0] || "",
afterImage: common_vendor.unref(caseDetail).afterImages[0] || "",
showTitle: true
}),
h: common_vendor.t(common_vendor.unref(caseDetail).material),
i: common_vendor.t(common_vendor.unref(caseDetail).duration),
j: common_vendor.t(common_vendor.unref(caseDetail).createTime),
k: common_vendor.t(common_vendor.unref(caseDetail).description),
l: common_vendor.t(common_vendor.unref(isFavorite) ? "❤️" : "🤍"),
m: common_vendor.o(handleFavorite),
n: common_vendor.o(handleShare),
o: common_vendor.o(handleContact),
p: common_vendor.o(goToBooking),
q: common_vendor.sei(common_vendor.gei(_ctx, ""), "view")
};
return __returned__;
};
}
});
wx.createPage(_sfc_main);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/cases/detail.js.map

View File

@@ -0,0 +1,7 @@
{
"navigationBarTitleText": "案例详情",
"navigationBarBackgroundColor": "#ffffff",
"usingComponents": {
"before-after": "../../components/before-after/before-after"
}
}

View File

@@ -0,0 +1 @@
<view id="{{q}}" change:eS="{{uV.sS}}" eS="{{$eS[q]}}" change:eA="{{uV.sA}}" eA="{{$eA[q]}}" class="{{['page', virtualHostClass]}}" style="{{virtualHostStyle}}" hidden="{{virtualHostHidden || false}}"><scroll-view class="page-scroll" scroll-y enable-flex="true" enhanced="true"><view class="gallery-section"><swiper class="gallery-swiper" circular indicator-dots indicator-color="rgba(255,255,255,0.5)" indicator-active-color="#ffffff"><swiper-item wx:for="{{a}}" wx:for-item="item" wx:key="c"><image class="gallery-image" src="{{item.a}}" mode="aspectFill" bindtap="{{item.b}}"></image></swiper-item></swiper><view class="gallery-tag"><text class="gallery-tag-text">{{b}}</text></view></view><view class="info-section"><text class="case-title">{{c}}</text><view class="case-meta"><text class="case-price">{{d}}</text><view class="case-stats"><text class="stat-text">👁 {{e}}</text><text class="stat-text">❤ {{f}}</text></view></view></view><view class="compare-section"><before-after u-i="eec33e1e-0" bind:__l="__l" u-p="{{g||''}}"></before-after></view><view class="detail-section"><view class="detail-header"><text class="detail-title">翻新详情</text></view><view class="detail-list"><view class="detail-item"><text class="detail-label">使用材质</text><text class="detail-value">{{h}}</text></view><view class="detail-item"><text class="detail-label">翻新工期</text><text class="detail-value">{{i}}</text></view><view class="detail-item"><text class="detail-label">完成日期</text><text class="detail-value">{{j}}</text></view></view><view class="detail-desc"><text class="desc-title">案例描述</text><text class="desc-content">{{k}}</text></view></view><view class="bottom-space"></view></scroll-view><view class="bottom-bar"><view class="bar-left"><view class="bar-btn" bindtap="{{m}}"><text class="bar-icon">{{l}}</text><text class="bar-label">收藏</text></view><view class="bar-btn" bindtap="{{n}}"><text class="bar-icon">📤</text><text class="bar-label">分享</text></view></view><view class="bar-right"><view class="contact-btn" bindtap="{{o}}"><text class="contact-text">在线咨询</text></view><view class="booking-btn" bindtap="{{p}}"><text class="booking-text">立即预约</text></view></view></view></view><wxs src="/common/uniView.wxs" module="uV"/>

View File

@@ -0,0 +1,202 @@
@import "../../uvue.wxss";
:host{display:flex;flex-direction:column}
/**
* 优艺家沙发翻新 - 全局样式变量
*/
/* ========== 项目主题色 ========== */
/* 辅助色 */
/* 文字颜色 */
/* 背景色 */
/* 边框颜色 */
/* 间距 */
/* 圆角 */
/* 阴影 */
/* ========== uni-app 内置变量 ========== */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.page {
flex: 1;
background-color: #f5f5f5;
}
.page-scroll {
flex: 1;
}
/* 图片画廊 */
.gallery-section {
position: relative;
}
.gallery-swiper {
height: 500rpx;
}
.gallery-image {
width: 100%;
height: 100%;
}
.gallery-tag {
position: absolute;
top: 24rpx;
left: 24rpx;
background-color: rgba(212, 165, 116, 0.9);
padding: 8rpx 20rpx;
border-radius: 8rpx;
}
.gallery-tag-text {
font-size: 24rpx;
color: #ffffff;
}
/* 基本信息 */
.info-section {
background-color: #ffffff;
padding: 32rpx;
margin-bottom: 24rpx;
}
.case-title {
font-size: 36rpx;
font-weight: 600;
color: #333333;
margin-bottom: 24rpx;
}
.case-meta {
flex-direction: row;
justify-content: space-between;
align-items: center;
}
.case-price {
font-size: 40rpx;
font-weight: 600;
color: #D4A574;
}
.case-stats {
flex-direction: row;
}
.stat-text {
font-size: 26rpx;
color: #909399;
margin-left: 24rpx;
}
/* 对比区域 */
.compare-section {
padding: 0 24rpx;
}
/* 详细信息 */
.detail-section {
background-color: #ffffff;
margin: 24rpx;
border-radius: 16rpx;
padding: 32rpx;
}
.detail-header {
margin-bottom: 24rpx;
}
.detail-title {
font-size: 32rpx;
font-weight: 600;
color: #333333;
}
.detail-list {
margin-bottom: 32rpx;
}
.detail-item {
flex-direction: row;
justify-content: space-between;
padding: 16rpx 0;
border-bottom-width: 1rpx;
border-bottom-style: solid;
border-bottom-color: #EBEEF5;
}
.detail-label {
font-size: 28rpx;
color: #909399;
}
.detail-value {
font-size: 28rpx;
color: #333333;
}
.detail-desc {
padding-top: 16rpx;
}
.desc-title {
font-size: 28rpx;
font-weight: 600;
color: #333333;
margin-bottom: 16rpx;
}
.desc-content {
font-size: 28rpx;
color: #606266;
line-height: 48rpx;
}
/* 底部间距 */
.bottom-space {
height: 160rpx;
}
/* 底部操作栏 */
.bottom-bar {
position: fixed;
bottom: 0;
left: 0;
right: 0;
flex-direction: row;
align-items: center;
justify-content: space-between;
background-color: #ffffff;
padding: 16rpx 24rpx;
padding-bottom: 32rpx;
box-shadow: 0 -4rpx 16rpx rgba(0, 0, 0, 0.08);
}
.bar-left {
flex-direction: row;
}
.bar-btn {
align-items: center;
padding: 0 24rpx;
}
.bar-icon {
font-size: 40rpx;
}
.bar-label {
font-size: 22rpx;
color: #606266;
margin-top: 4rpx;
}
.bar-right {
flex-direction: row;
flex: 1;
justify-content: flex-end;
}
.contact-btn {
background-color: #f5f5f5;
padding: 20rpx 40rpx;
border-radius: 999rpx;
margin-right: 16rpx;
}
.contact-text {
font-size: 28rpx;
color: #606266;
}
.booking-btn {
background-color: #D4A574;
padding: 20rpx 48rpx;
border-radius: 999rpx;
}
.booking-text {
font-size: 28rpx;
font-weight: 600;
color: #ffffff;
}

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