feat:"完成页面接口的对接"
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -1 +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;;"}
|
||||
{"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;;"}
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +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;"}
|
||||
{"version":3,"file":"before-after.js","sources":["components/before-after/before-after.uvue","../../../../Soft/HBuilderX/plugins/uniapp-cli-vite/uniComponent:/RDovUHJvamVjdC9TZWxmL-S8mOiJuuWutuaymeWPkee_u-aWsC_liY3nq68vY29tcG9uZW50cy9iZWZvcmUtYWZ0ZXIvYmVmb3JlLWFmdGVyLnV2dWU"],"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;"}
|
||||
@@ -1 +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;"}
|
||||
{"version":3,"file":"case-card.js","sources":["components/case-card/case-card.uvue","../../../../Soft/HBuilderX/plugins/uniapp-cli-vite/uniComponent:/RDovUHJvamVjdC9TZWxmL-S8mOiJuuWutuaymeWPkee_u-aWsC_liY3nq68vY29tcG9uZW50cy9jYXNlLWNhcmQvY2FzZS1jYXJkLnV2dWU"],"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;"}
|
||||
@@ -1 +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;"}
|
||||
{"version":3,"file":"nav-bar.js","sources":["components/nav-bar/nav-bar.uvue","../../../../Soft/HBuilderX/plugins/uniapp-cli-vite/uniComponent:/RDovUHJvamVjdC9TZWxmL-S8mOiJuuWutuaymeWPkee_u-aWsC_liY3nq68vY29tcG9uZW50cy9uYXYtYmFyL25hdi1iYXIudXZ1ZQ"],"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;"}
|
||||
@@ -1 +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;"}
|
||||
{"version":3,"file":"section-header.js","sources":["components/section-header/section-header.uvue","../../../../Soft/HBuilderX/plugins/uniapp-cli-vite/uniComponent:/RDovUHJvamVjdC9TZWxmL-S8mOiJuuWutuaymeWPkee_u-aWsC_liY3nq68vY29tcG9uZW50cy9zZWN0aW9uLWhlYWRlci9zZWN0aW9uLWhlYWRlci51dnVl"],"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;"}
|
||||
@@ -1 +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;"}
|
||||
{"version":3,"file":"service-card.js","sources":["components/service-card/service-card.uvue","../../../../Soft/HBuilderX/plugins/uniapp-cli-vite/uniComponent:/RDovUHJvamVjdC9TZWxmL-S8mOiJuuWutuaymeWPkee_u-aWsC_liY3nq68vY29tcG9uZW50cy9zZXJ2aWNlLWNhcmQvc2VydmljZS1jYXJkLnV2dWU"],"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
@@ -1 +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;;;;;;;"}
|
||||
{"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://192.168.1.43:3000/api',\r\n\t\timageBaseUrl: 'http://192.168.1.43: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: 'refurbish', name: '整体翻新', icon: '/static/icons/refurbish.png' }\r\n]\r\n\r\n/**\r\n * 获取服务类型名称\r\n */\r\nexport const getServiceTypeName = (type : string) : string => {\r\n\tconst map : Map<string, string> = new Map([\r\n\t\t['leather', '真皮翻新'],\r\n\t\t['fabric', '布艺翻新'],\r\n\t\t['functional', '功能维修'],\r\n\t\t['antique', '古董修复'],\r\n\t\t['office', '办公沙发'],\r\n\t\t['cleaning', '清洁保养'],\r\n\t\t['repair', '维修改装'],\r\n\t\t['custom', '定制沙发']\r\n\t])\r\n\treturn map.get(type) ?? type\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;;AAIF;AAAA,oBAC5B,EAAE,IAAI,UAAU,MAAM,QAAQ,MAAM,4BAA4B;AAAA,oBAChE,EAAE,IAAI,aAAa,MAAM,QAAQ,MAAM,+BAA+B;;AAMhE,MAAM,qBAAqB,CAAC,SAAa;;AAC/C,QAAM,MAA4B,oBAAI,IAAI;AAAA,IACzC,CAAC,WAAW,MAAM;AAAA,IAClB,CAAC,UAAU,MAAM;AAAA,IACjB,CAAC,cAAc,MAAM;AAAA,IACrB,CAAC,WAAW,MAAM;AAAA,IAClB,CAAC,UAAU,MAAM;AAAA,IACjB,CAAC,YAAY,MAAM;AAAA,IACnB,CAAC,UAAU,MAAM;AAAA,IACjB,CAAC,UAAU,MAAM;AAAA,EACjB,CAAA;AACD,0BAAO,KAAQ,IAAI,OAAA,QAAA,OAAA,SAAA,KAAK;AACzB;;;;;;"}
|
||||
File diff suppressed because one or more lines are too long
62
前端/unpackage/dist/dev/mp-weixin/api/index.js
vendored
62
前端/unpackage/dist/dev/mp-weixin/api/index.js
vendored
@@ -27,13 +27,18 @@ const getBanners = () => {
|
||||
}));
|
||||
};
|
||||
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({});
|
||||
const queryParams = new UTSJSONObject(
|
||||
{
|
||||
page: params ? params["page"] || 1 : 1,
|
||||
limit: params ? params["pageSize"] || params["limit"] || 10 : 10,
|
||||
status: "published"
|
||||
// 只获取已发布的案例
|
||||
}
|
||||
// 如果有分类且不是all,则添加serviceType参数
|
||||
);
|
||||
if (params && params["category"] && params["category"] != "all") {
|
||||
queryParams["serviceType"] = params["category"];
|
||||
}
|
||||
return utils_request.get("/cases", queryParams);
|
||||
};
|
||||
const getCaseDetail = (id) => {
|
||||
@@ -42,20 +47,55 @@ const getCaseDetail = (id) => {
|
||||
const getHotCases = () => {
|
||||
return utils_request.get("/cases", new UTSJSONObject({ limit: 4, status: "published" }));
|
||||
};
|
||||
const getServiceProcess = () => {
|
||||
return utils_request.get("/services");
|
||||
const getActiveServices = () => {
|
||||
return utils_request.get("/services/active");
|
||||
};
|
||||
const getCompanyInfo = () => {
|
||||
return utils_request.get("/company/info");
|
||||
return Promise.resolve(new UTSJSONObject({
|
||||
code: 0,
|
||||
message: "success",
|
||||
data: new UTSJSONObject({
|
||||
name: "优艺家沙发翻新",
|
||||
slogan: "让旧沙发焕发新生",
|
||||
description: "优艺家专注沙发翻新服务10余年,拥有专业的技术团队和丰富的经验。我们提供各类沙发翻新、维修、清洁服务,让您的旧沙发重新焕发光彩。",
|
||||
phone: "400-888-8888",
|
||||
wechat: "youyijia2024",
|
||||
address: "北京市朝阳区XX路XX号",
|
||||
workTime: "周一至周日 9:00-18:00",
|
||||
features: [
|
||||
new UTSJSONObject({ title: "专业团队", desc: "10年以上经验的专业师傅" }),
|
||||
new UTSJSONObject({ title: "品质保证", desc: "使用优质材料,质保一年" }),
|
||||
new UTSJSONObject({ title: "免费上门", desc: "免费上门测量和评估" }),
|
||||
new UTSJSONObject({ title: "快速交付", desc: "3-7天完成翻新服务" })
|
||||
]
|
||||
})
|
||||
}));
|
||||
};
|
||||
const submitBooking = (data) => {
|
||||
return utils_request.post("/booking", data);
|
||||
};
|
||||
const getMyBookings = (params = null) => {
|
||||
const queryParams = params ? new UTSJSONObject({
|
||||
page: params["page"] || 1,
|
||||
limit: params["limit"] || 10,
|
||||
status: params["status"]
|
||||
}) : new UTSJSONObject({});
|
||||
return utils_request.get("/booking/my", queryParams);
|
||||
};
|
||||
const cancelBooking = (id) => {
|
||||
return utils_request.post(`/booking/${id}/cancel`, new UTSJSONObject({}));
|
||||
};
|
||||
const wechatLogin = (code) => {
|
||||
return utils_request.post("/auth/wechat/login", new UTSJSONObject({ code }));
|
||||
};
|
||||
exports.cancelBooking = cancelBooking;
|
||||
exports.getActiveServices = getActiveServices;
|
||||
exports.getBanners = getBanners;
|
||||
exports.getCaseDetail = getCaseDetail;
|
||||
exports.getCaseList = getCaseList;
|
||||
exports.getCompanyInfo = getCompanyInfo;
|
||||
exports.getHotCases = getHotCases;
|
||||
exports.getServiceProcess = getServiceProcess;
|
||||
exports.getMyBookings = getMyBookings;
|
||||
exports.submitBooking = submitBooking;
|
||||
exports.wechatLogin = wechatLogin;
|
||||
//# sourceMappingURL=../../.sourcemap/mp-weixin/api/index.js.map
|
||||
|
||||
2
前端/unpackage/dist/dev/mp-weixin/app.js
vendored
2
前端/unpackage/dist/dev/mp-weixin/app.js
vendored
@@ -9,6 +9,8 @@ if (!Math) {
|
||||
"./pages/about/index.js";
|
||||
"./pages/booking/index.js";
|
||||
"./pages/user/index.js";
|
||||
"./pages/user/booking-list.js";
|
||||
"./pages/user/favorites.js";
|
||||
}
|
||||
const _sfc_main = common_vendor.defineComponent({
|
||||
onLaunch() {
|
||||
|
||||
4
前端/unpackage/dist/dev/mp-weixin/app.json
vendored
4
前端/unpackage/dist/dev/mp-weixin/app.json
vendored
@@ -6,7 +6,9 @@
|
||||
"pages/service/index",
|
||||
"pages/about/index",
|
||||
"pages/booking/index",
|
||||
"pages/user/index"
|
||||
"pages/user/index",
|
||||
"pages/user/booking-list",
|
||||
"pages/user/favorites"
|
||||
],
|
||||
"window": {
|
||||
"navigationBarTextStyle": "black",
|
||||
|
||||
59
前端/unpackage/dist/dev/mp-weixin/common/vendor.js
vendored
59
前端/unpackage/dist/dev/mp-weixin/common/vendor.js
vendored
@@ -85,8 +85,8 @@ const def = (obj, key, value) => {
|
||||
});
|
||||
};
|
||||
const looseToNumber = (val) => {
|
||||
const n = parseFloat(val);
|
||||
return isNaN(n) ? val : n;
|
||||
const n2 = parseFloat(val);
|
||||
return isNaN(n2) ? val : n2;
|
||||
};
|
||||
function normalizeStyle$1(value) {
|
||||
if (isArray(value)) {
|
||||
@@ -118,6 +118,26 @@ function parseStringStyle(cssText) {
|
||||
});
|
||||
return ret;
|
||||
}
|
||||
function normalizeClass$1(value) {
|
||||
let res = "";
|
||||
if (isString(value)) {
|
||||
res = value;
|
||||
} else if (isArray(value)) {
|
||||
for (let i = 0; i < value.length; i++) {
|
||||
const normalized = normalizeClass$1(value[i]);
|
||||
if (normalized) {
|
||||
res += normalized + " ";
|
||||
}
|
||||
}
|
||||
} else if (isObject(value)) {
|
||||
for (const name in value) {
|
||||
if (value[name]) {
|
||||
res += name + " ";
|
||||
}
|
||||
}
|
||||
}
|
||||
return res.trim();
|
||||
}
|
||||
const toDisplayString = (val) => {
|
||||
return isString(val) ? val : val == null ? "" : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? JSON.stringify(val, replacer, 2) : String(val);
|
||||
};
|
||||
@@ -338,6 +358,33 @@ function normalizeStyle(value) {
|
||||
return normalizeStyle$1(value);
|
||||
}
|
||||
}
|
||||
function normalizeClass(value) {
|
||||
let res = "";
|
||||
const g2 = getGlobal$1();
|
||||
if (g2 && g2.UTSJSONObject && value instanceof g2.UTSJSONObject) {
|
||||
g2.UTSJSONObject.keys(value).forEach((key) => {
|
||||
if (value[key]) {
|
||||
res += key + " ";
|
||||
}
|
||||
});
|
||||
} else if (value instanceof Map) {
|
||||
value.forEach((value2, key) => {
|
||||
if (value2) {
|
||||
res += key + " ";
|
||||
}
|
||||
});
|
||||
} else if (isArray(value)) {
|
||||
for (let i = 0; i < value.length; i++) {
|
||||
const normalized = normalizeClass(value[i]);
|
||||
if (normalized) {
|
||||
res += normalized + " ";
|
||||
}
|
||||
}
|
||||
} else {
|
||||
res = normalizeClass$1(value);
|
||||
}
|
||||
return res.trim();
|
||||
}
|
||||
const encode = encodeURIComponent;
|
||||
function stringifyQuery(obj, encodeStr = encode) {
|
||||
const res = obj ? Object.keys(obj).map((key) => {
|
||||
@@ -5855,6 +5902,7 @@ function genUniElementId(_ctx, idBinding, genId) {
|
||||
const o = (value, key) => vOn(value, key);
|
||||
const f = (source, renderItem) => vFor(source, renderItem);
|
||||
const e = (target, ...sources) => extend(target, ...sources);
|
||||
const n = (value) => normalizeClass(value);
|
||||
const t = (val) => toDisplayString(val);
|
||||
const p = (props) => renderProps(props);
|
||||
const sei = setUniElementId;
|
||||
@@ -6529,8 +6577,8 @@ const $once = defineSyncApi(API_ONCE, (name, callback) => {
|
||||
const $off = defineSyncApi(API_OFF, (name, callback) => {
|
||||
if (!isArray(name))
|
||||
name = name ? [name] : [];
|
||||
name.forEach((n) => {
|
||||
eventBus.off(n, callback);
|
||||
name.forEach((n2) => {
|
||||
eventBus.off(n2, callback);
|
||||
});
|
||||
}, OffProtocol);
|
||||
const $emit = defineSyncApi(API_EMIT, (name, ...args) => {
|
||||
@@ -7848,7 +7896,7 @@ function isConsoleWritable() {
|
||||
function initRuntimeSocketService() {
|
||||
const hosts = "192.168.25.30,172.25.240.1,192.168.1.43,127.0.0.1";
|
||||
const port = "8090";
|
||||
const id = "mp-weixin_8xzhU8";
|
||||
const id = "mp-weixin_IIWuS0";
|
||||
const lazy = typeof swan !== "undefined";
|
||||
let restoreError = lazy ? () => {
|
||||
} : initOnError();
|
||||
@@ -9550,6 +9598,7 @@ exports.e = e;
|
||||
exports.f = f;
|
||||
exports.gei = gei;
|
||||
exports.index = index;
|
||||
exports.n = n;
|
||||
exports.o = o;
|
||||
exports.onLoad = onLoad;
|
||||
exports.onMounted = onMounted;
|
||||
|
||||
@@ -1 +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 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="4554258f-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="4554258f-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="4554258f-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"/>
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
"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 {
|
||||
@@ -11,7 +10,8 @@ class FormData extends UTS.UTSType {
|
||||
userName: { type: String, optional: false },
|
||||
phone: { type: String, optional: false },
|
||||
address: { type: String, optional: false },
|
||||
sofaType: { type: String, optional: false },
|
||||
serviceId: { type: Number, optional: false },
|
||||
appointmentDate: { type: String, optional: false },
|
||||
problem: { type: String, optional: false }
|
||||
};
|
||||
},
|
||||
@@ -24,29 +24,36 @@ class FormData extends UTS.UTSType {
|
||||
this.userName = this.__props__.userName;
|
||||
this.phone = this.__props__.phone;
|
||||
this.address = this.__props__.address;
|
||||
this.sofaType = this.__props__.sofaType;
|
||||
this.serviceId = this.__props__.serviceId;
|
||||
this.appointmentDate = this.__props__.appointmentDate;
|
||||
this.problem = this.__props__.problem;
|
||||
delete this.__props__;
|
||||
}
|
||||
}
|
||||
class SofaType extends UTS.UTSType {
|
||||
class ServiceItem extends UTS.UTSType {
|
||||
static get$UTSMetadata$() {
|
||||
return {
|
||||
kind: 2,
|
||||
get fields() {
|
||||
return {
|
||||
id: { type: String, optional: false },
|
||||
name: { type: String, optional: false }
|
||||
id: { type: Number, optional: false },
|
||||
name: { type: String, optional: false },
|
||||
type: { type: String, optional: false },
|
||||
description: { type: String, optional: false },
|
||||
price: { type: Number, optional: false }
|
||||
};
|
||||
},
|
||||
name: "SofaType"
|
||||
name: "ServiceItem"
|
||||
};
|
||||
}
|
||||
constructor(options, metadata = SofaType.get$UTSMetadata$(), isJSONParse = false) {
|
||||
constructor(options, metadata = ServiceItem.get$UTSMetadata$(), isJSONParse = false) {
|
||||
super();
|
||||
this.__props__ = UTS.UTSType.initProps(options, metadata, isJSONParse);
|
||||
this.id = this.__props__.id;
|
||||
this.name = this.__props__.name;
|
||||
this.type = this.__props__.type;
|
||||
this.description = this.__props__.description;
|
||||
this.price = this.__props__.price;
|
||||
delete this.__props__;
|
||||
}
|
||||
}
|
||||
@@ -57,24 +64,65 @@ const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
|
||||
userName: "",
|
||||
phone: "",
|
||||
address: "",
|
||||
sofaType: "",
|
||||
serviceId: 0,
|
||||
appointmentDate: "",
|
||||
problem: ""
|
||||
}));
|
||||
const imageList = common_vendor.ref([]);
|
||||
const sofaTypes = common_vendor.ref([]);
|
||||
const serviceList = 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 minDate = common_vendor.ref("");
|
||||
const loadServices = () => {
|
||||
return common_vendor.__awaiter(this, void 0, void 0, function* () {
|
||||
try {
|
||||
const res = yield api_index.getActiveServices();
|
||||
common_vendor.index.__f__("log", "at pages/booking/index.uvue:196", "服务列表响应:", res);
|
||||
if (res.code == 0 && res.data != null) {
|
||||
const data = res.data;
|
||||
let list = [];
|
||||
if (Array.isArray(data)) {
|
||||
list = data;
|
||||
} else {
|
||||
list = data["list"] || [];
|
||||
}
|
||||
common_vendor.index.__f__("log", "at pages/booking/index.uvue:206", "解析的服务列表:", list);
|
||||
serviceList.value = list.map((item) => {
|
||||
const basePrice = item["basePrice"] || "0";
|
||||
return new ServiceItem({
|
||||
id: item["id"],
|
||||
name: item["name"],
|
||||
type: item["type"],
|
||||
description: item["description"],
|
||||
price: parseFloat(basePrice)
|
||||
});
|
||||
});
|
||||
common_vendor.index.__f__("log", "at pages/booking/index.uvue:217", "最终服务列表:", serviceList.value);
|
||||
} else {
|
||||
common_vendor.index.__f__("error", "at pages/booking/index.uvue:219", "服务列表响应异常,code:", res.code, "data:", res.data);
|
||||
}
|
||||
} catch (e) {
|
||||
common_vendor.index.__f__("error", "at pages/booking/index.uvue:222", "加载服务列表失败", e);
|
||||
}
|
||||
});
|
||||
};
|
||||
const selectSofaType = (id) => {
|
||||
formData.value.sofaType = id;
|
||||
const initMinDate = () => {
|
||||
const now = /* @__PURE__ */ new Date();
|
||||
const year = now.getFullYear();
|
||||
const month = String(now.getMonth() + 1).padStart(2, "0");
|
||||
const day = String(now.getDate()).padStart(2, "0");
|
||||
minDate.value = `${year}-${month}-${day}`;
|
||||
const tomorrow = /* @__PURE__ */ new Date();
|
||||
tomorrow.setDate(tomorrow.getDate() + 1);
|
||||
const tYear = tomorrow.getFullYear();
|
||||
const tMonth = String(tomorrow.getMonth() + 1).padStart(2, "0");
|
||||
const tDay = String(tomorrow.getDate()).padStart(2, "0");
|
||||
formData.value.appointmentDate = `${tYear}-${tMonth}-${tDay}`;
|
||||
};
|
||||
const selectService = (id) => {
|
||||
formData.value.serviceId = id;
|
||||
};
|
||||
const onDateChange = (e = null) => {
|
||||
formData.value.appointmentDate = e.detail.value;
|
||||
};
|
||||
const chooseImage = () => {
|
||||
common_vendor.index.chooseImage(new UTSJSONObject({
|
||||
@@ -119,6 +167,20 @@ const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
|
||||
});
|
||||
return false;
|
||||
}
|
||||
if (formData.value.serviceId == 0) {
|
||||
common_vendor.index.showToast({
|
||||
title: "请选择服务类型",
|
||||
icon: "none"
|
||||
});
|
||||
return false;
|
||||
}
|
||||
if (formData.value.appointmentDate == "") {
|
||||
common_vendor.index.showToast({
|
||||
title: "请选择预约时间",
|
||||
icon: "none"
|
||||
});
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
const handleSubmit = () => {
|
||||
@@ -129,19 +191,28 @@ const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
|
||||
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 validImages = imageList.value.filter((url) => {
|
||||
return url.startsWith("http://") || url.startsWith("https://");
|
||||
});
|
||||
if (imageList.value.length > 0 && validImages.length === 0) {
|
||||
common_vendor.index.__f__("log", "at pages/booking/index.uvue:340", "警告:图片为微信临时路径,暂不支持上传");
|
||||
}
|
||||
const data = new UTSJSONObject({
|
||||
serviceId: formData.value.serviceId,
|
||||
contactName: formData.value.userName,
|
||||
contactPhone: formData.value.phone,
|
||||
address: formData.value.address,
|
||||
appointmentTime: formData.value.appointmentDate + "T10:00:00.000Z",
|
||||
requirements: formData.value.problem,
|
||||
images: validImages
|
||||
// 只提交有效的URL
|
||||
});
|
||||
common_vendor.index.__f__("log", "at pages/booking/index.uvue:354", "提交预约数据:", data);
|
||||
const res = yield api_index.submitBooking(data);
|
||||
const result = res.data;
|
||||
common_vendor.index.__f__("log", "at pages/booking/index.uvue:356", "预约提交结果:", res);
|
||||
common_vendor.index.showModal(new UTSJSONObject({
|
||||
title: "预约成功",
|
||||
content: result["message"],
|
||||
content: "我们会尽快与您联系,请保持电话畅通",
|
||||
showCancel: false,
|
||||
success: () => {
|
||||
common_vendor.index.navigateBack(new UTSJSONObject({
|
||||
@@ -154,17 +225,14 @@ const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
|
||||
}
|
||||
}));
|
||||
} catch (e) {
|
||||
common_vendor.index.__f__("error", "at pages/booking/index.uvue:270", "提交预约失败", e);
|
||||
common_vendor.index.showToast({
|
||||
title: "提交失败,请重试",
|
||||
icon: "none"
|
||||
});
|
||||
common_vendor.index.__f__("error", "at pages/booking/index.uvue:375", "提交预约异常:", e);
|
||||
}
|
||||
submitting.value = false;
|
||||
});
|
||||
};
|
||||
common_vendor.onLoad(() => {
|
||||
initSofaTypes();
|
||||
initMinDate();
|
||||
loadServices();
|
||||
});
|
||||
return (_ctx, _cache) => {
|
||||
"raw js";
|
||||
@@ -181,23 +249,30 @@ const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
|
||||
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) => {
|
||||
g: common_vendor.f(common_vendor.unref(serviceList), (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 : "",
|
||||
b: common_vendor.unref(formData).serviceId == item.id ? 1 : "",
|
||||
c: common_vendor.unref(formData).serviceId == item.id ? 1 : "",
|
||||
d: item.id,
|
||||
e: common_vendor.o(($event) => {
|
||||
return selectSofaType(item.id);
|
||||
return selectService(item.id);
|
||||
}, item.id)
|
||||
};
|
||||
}),
|
||||
h: common_vendor.unref(formData).problem,
|
||||
i: common_vendor.o(($event) => {
|
||||
h: common_vendor.unref(formData).appointmentDate
|
||||
}, common_vendor.unref(formData).appointmentDate ? {
|
||||
i: common_vendor.t(common_vendor.unref(formData).appointmentDate)
|
||||
} : {}, {
|
||||
j: common_vendor.unref(formData).appointmentDate,
|
||||
k: common_vendor.unref(minDate),
|
||||
l: common_vendor.o(onDateChange),
|
||||
m: common_vendor.unref(formData).problem,
|
||||
n: 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) => {
|
||||
o: common_vendor.t(common_vendor.unref(formData).problem.length),
|
||||
p: common_vendor.f(common_vendor.unref(imageList), (item, index, i0) => {
|
||||
return {
|
||||
a: item,
|
||||
b: common_vendor.o(($event) => {
|
||||
@@ -206,12 +281,12 @@ const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
|
||||
c: index
|
||||
};
|
||||
}),
|
||||
l: common_vendor.unref(imageList).length < 9
|
||||
q: common_vendor.unref(imageList).length < 9
|
||||
}, common_vendor.unref(imageList).length < 9 ? {
|
||||
m: common_vendor.o(chooseImage)
|
||||
r: common_vendor.o(chooseImage)
|
||||
} : {}, {
|
||||
n: common_vendor.o(handleSubmit),
|
||||
o: common_vendor.sei(common_vendor.gei(_ctx, ""), "view")
|
||||
s: common_vendor.o(handleSubmit),
|
||||
t: common_vendor.sei(common_vendor.gei(_ctx, ""), "view")
|
||||
});
|
||||
return __returned__;
|
||||
};
|
||||
|
||||
@@ -1 +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 id="{{t}}" change:eS="{{uV.sS}}" eS="{{$eS[t]}}" change:eA="{{uV.sA}}" eA="{{$eA[t]}}" 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 class="required">*</text> 服务类型 </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 class="required">*</text> 预约时间 </text><picker mode="date" value="{{j}}" start="{{k}}" bindchange="{{l}}"><view class="picker-value"><text wx:if="{{h}}" class="picker-text">{{i}}</text><text wx:else class="picker-placeholder">请选择预约日期</text></view></picker></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="{{m}}" bindinput="{{n}}"></textarea></block><text class="textarea-count">{{o}}/500</text></view><view class="form-item"><text class="form-label">上传图片(可选)</text><view class="upload-grid"><view wx:for="{{p}}" 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="{{q}}" class="upload-add" bindtap="{{r}}"><text class="add-icon">+</text><text class="add-text">添加图片</text></view></view><text class="upload-tip">提示:当前仅支持预览,图片暂不会上传到服务器</text></view></view><view class="bottom-space"></view></scroll-view><view class="submit-bar"><view class="submit-btn" bindtap="{{s}}"><text class="submit-text">提交预约</text></view></view></view><wxs src="/common/uniView.wxs" module="uV"/>
|
||||
|
||||
@@ -80,6 +80,23 @@
|
||||
color: #C0C4CC;
|
||||
}
|
||||
|
||||
/* 日期选择器 */
|
||||
.picker-value {
|
||||
background-color: #f5f5f5;
|
||||
border-radius: 12rpx;
|
||||
padding: 24rpx;
|
||||
height: 40px;
|
||||
justify-content: center;
|
||||
}
|
||||
.picker-text {
|
||||
font-size: 28rpx;
|
||||
color: #303133;
|
||||
}
|
||||
.picker-placeholder {
|
||||
font-size: 28rpx;
|
||||
color: #C0C4CC;
|
||||
}
|
||||
|
||||
/* 沙发类型选择 */
|
||||
.type-grid {
|
||||
flex-direction: row;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
"use strict";
|
||||
const common_vendor = require("../../common/vendor.js");
|
||||
const api_index = require("../../api/index.js");
|
||||
const utils_config = require("../../utils/config.js");
|
||||
if (!Array) {
|
||||
const _easycom_before_after_1 = common_vendor.resolveComponent("before-after");
|
||||
_easycom_before_after_1();
|
||||
@@ -21,6 +22,7 @@ class CaseDetail extends UTS.UTSType {
|
||||
categoryName: { type: String, optional: false },
|
||||
beforeImages: { type: UTS.UTSType.withGenerics(Array, [String]), optional: false },
|
||||
afterImages: { type: UTS.UTSType.withGenerics(Array, [String]), optional: false },
|
||||
compareAfterImages: { type: UTS.UTSType.withGenerics(Array, [String]), optional: false },
|
||||
description: { type: String, optional: false },
|
||||
material: { type: String, optional: false },
|
||||
duration: { type: String, optional: false },
|
||||
@@ -42,6 +44,7 @@ class CaseDetail extends UTS.UTSType {
|
||||
this.categoryName = this.__props__.categoryName;
|
||||
this.beforeImages = this.__props__.beforeImages;
|
||||
this.afterImages = this.__props__.afterImages;
|
||||
this.compareAfterImages = this.__props__.compareAfterImages;
|
||||
this.description = this.__props__.description;
|
||||
this.material = this.__props__.material;
|
||||
this.duration = this.__props__.duration;
|
||||
@@ -63,6 +66,7 @@ const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
|
||||
categoryName: "",
|
||||
beforeImages: [],
|
||||
afterImages: [],
|
||||
compareAfterImages: [],
|
||||
description: "",
|
||||
material: "",
|
||||
duration: "",
|
||||
@@ -76,37 +80,57 @@ const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
|
||||
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
|
||||
if (res.code === 0 && res.data != null) {
|
||||
const data = res.data;
|
||||
const images = data["images"] || [];
|
||||
const beforeImages = data["beforeImages"] || [];
|
||||
const afterImages = data["afterImages"] || [];
|
||||
const createdAt = data["createdAt"] || "";
|
||||
const displayAfterImages = afterImages.length > 0 ? afterImages : images;
|
||||
const compareAfterImages = afterImages.length > 0 ? afterImages : [];
|
||||
caseDetail.value = new CaseDetail(
|
||||
{
|
||||
id: String(data["id"]),
|
||||
title: data["title"],
|
||||
category: data["serviceType"] || "",
|
||||
categoryName: utils_config.getServiceTypeName(data["serviceType"]),
|
||||
beforeImages,
|
||||
afterImages: displayAfterImages,
|
||||
compareAfterImages,
|
||||
description: data["description"],
|
||||
material: data["materials"] || "优质材料",
|
||||
duration: (data["duration"] || 0) + "天",
|
||||
price: data["price"] != null ? "¥" + data["price"] : "面议",
|
||||
views: data["views"] || 0,
|
||||
likes: data["likes"] || 0,
|
||||
createTime: createdAt.split("T")[0] || ""
|
||||
}
|
||||
// 更新标题
|
||||
);
|
||||
common_vendor.index.setNavigationBarTitle({
|
||||
title: caseDetail.value.title
|
||||
});
|
||||
} else {
|
||||
common_vendor.index.showToast({
|
||||
title: res.message || "加载失败",
|
||||
icon: "none"
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
common_vendor.index.__f__("error", "at pages/cases/detail.uvue:197", "获取案例详情失败:", error);
|
||||
common_vendor.index.showToast({
|
||||
title: "加载失败",
|
||||
icon: "none"
|
||||
});
|
||||
} catch (e) {
|
||||
common_vendor.index.__f__("error", "at pages/cases/detail.uvue:173", "获取案例详情失败", e);
|
||||
}
|
||||
});
|
||||
};
|
||||
const previewImages = (index) => {
|
||||
const urls = caseDetail.value.afterImages || [];
|
||||
const current = urls[index] || urls[0] || "";
|
||||
common_vendor.index.previewImage({
|
||||
current: index,
|
||||
urls: caseDetail.value.afterImages
|
||||
current,
|
||||
urls
|
||||
});
|
||||
};
|
||||
const handleFavorite = () => {
|
||||
@@ -164,7 +188,7 @@ const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
|
||||
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] || "",
|
||||
afterImage: common_vendor.unref(caseDetail).compareAfterImages[0] || "",
|
||||
showTitle: true
|
||||
}),
|
||||
h: common_vendor.t(common_vendor.unref(caseDetail).material),
|
||||
|
||||
@@ -1 +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 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="1bc77b3c-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"/>
|
||||
|
||||
@@ -93,6 +93,7 @@ const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
|
||||
page.value = 1;
|
||||
caseList.value = [];
|
||||
noMore.value = false;
|
||||
common_vendor.index.__f__("log", "at pages/cases/list.uvue:114", 111);
|
||||
fetchCaseList();
|
||||
};
|
||||
const fetchCaseList = () => {
|
||||
@@ -102,38 +103,49 @@ const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
|
||||
loading.value = true;
|
||||
try {
|
||||
const params = new UTSJSONObject({
|
||||
category: currentCategory.value,
|
||||
serviceType: currentCategory.value != "all" ? currentCategory.value : void 0,
|
||||
page: page.value,
|
||||
pageSize: utils_config.PAGE_SIZE
|
||||
limit: utils_config.PAGE_SIZE,
|
||||
status: "published"
|
||||
});
|
||||
const res = yield api_index.getCaseList(params);
|
||||
const data = res.data;
|
||||
const list = data["items"] || [];
|
||||
total.value = data["total"] || 0;
|
||||
const newList = list.map((item) => {
|
||||
return new CaseItem({
|
||||
id: item["id"],
|
||||
title: item["title"],
|
||||
category: item["category"],
|
||||
categoryName: item["categoryName"],
|
||||
coverImage: item["coverImage"],
|
||||
material: item["material"],
|
||||
duration: item["duration"],
|
||||
price: item["price"],
|
||||
views: item["views"],
|
||||
likes: item["likes"]
|
||||
if (res.code == 0 && res.data != null) {
|
||||
const data = res.data;
|
||||
const list = data["list"] || [];
|
||||
total.value = data["total"] || 0;
|
||||
const newList = list.map((item) => {
|
||||
const images = item["images"] || [];
|
||||
const afterImages = item["afterImages"] || [];
|
||||
const beforeImages = item["beforeImages"] || [];
|
||||
const coverImage = images.length > 0 ? images[0] : afterImages.length > 0 ? afterImages[0] : beforeImages.length > 0 ? beforeImages[0] : "";
|
||||
return new CaseItem({
|
||||
id: String(item["id"]),
|
||||
title: item["title"],
|
||||
category: item["serviceType"],
|
||||
categoryName: utils_config.getServiceTypeName(item["serviceType"]),
|
||||
coverImage,
|
||||
material: item["materials"] || "暂无",
|
||||
duration: (item["duration"] || 0) + "天",
|
||||
price: item["price"] != null ? "¥" + item["price"] : "面议",
|
||||
views: item["views"] || 0,
|
||||
likes: item["likes"] || 0
|
||||
});
|
||||
});
|
||||
});
|
||||
if (page.value == 1) {
|
||||
caseList.value = newList;
|
||||
} else {
|
||||
caseList.value = [...caseList.value, ...newList];
|
||||
}
|
||||
if (caseList.value.length >= total.value) {
|
||||
noMore.value = true;
|
||||
if (page.value == 1) {
|
||||
caseList.value = newList;
|
||||
} else {
|
||||
caseList.value = [...caseList.value, ...newList];
|
||||
}
|
||||
if (caseList.value.length >= total.value) {
|
||||
noMore.value = true;
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
common_vendor.index.__f__("error", "at pages/cases/list.uvue:160", "获取案例列表失败", e);
|
||||
common_vendor.index.__f__("error", "at pages/cases/list.uvue:170", "获取案例列表失败", e);
|
||||
common_vendor.index.showToast({
|
||||
title: "加载失败",
|
||||
icon: "none"
|
||||
});
|
||||
}
|
||||
loading.value = false;
|
||||
});
|
||||
@@ -171,7 +183,7 @@ const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
|
||||
return {
|
||||
a: item.id,
|
||||
b: common_vendor.o(goToDetail, item.id),
|
||||
c: "15d594f8-0-" + i0,
|
||||
c: "32628196-0-" + i0,
|
||||
d: common_vendor.p({
|
||||
caseData: item
|
||||
})
|
||||
|
||||
@@ -136,30 +136,47 @@ const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
|
||||
new AdvantageItem({ icon: "🚗", title: "上门服务", desc: "免费评估" }),
|
||||
new AdvantageItem({ icon: "💰", title: "价格透明", desc: "无隐形消费" })
|
||||
]);
|
||||
const initServiceTypes = () => {
|
||||
serviceTypes.value = utils_config.SERVICE_TYPES.map((item) => {
|
||||
return new ServiceType({
|
||||
id: item.id,
|
||||
name: item.name,
|
||||
icon: item.icon
|
||||
});
|
||||
const fetchServiceTypes = () => {
|
||||
return common_vendor.__awaiter(this, void 0, void 0, function* () {
|
||||
try {
|
||||
const res = yield api_index.getActiveServices();
|
||||
if (res.code === 0 && res.data != null) {
|
||||
const data = res.data;
|
||||
const list = data["list"] || [];
|
||||
serviceTypes.value = list.map((item) => {
|
||||
return new ServiceType({
|
||||
id: String(item["id"]),
|
||||
name: item["name"],
|
||||
icon: item["icon"] || "/static/icons/default.png"
|
||||
});
|
||||
});
|
||||
}
|
||||
} catch (e) {
|
||||
common_vendor.index.__f__("error", "at pages/index/index.uvue:165", "获取服务类型失败", e);
|
||||
serviceTypes.value = [
|
||||
new ServiceType({ id: "repair", name: "局部修复", icon: "/static/icons/repair.png" }),
|
||||
new ServiceType({ id: "refurbish", name: "整体翻新", icon: "/static/icons/refurbish.png" })
|
||||
];
|
||||
}
|
||||
});
|
||||
};
|
||||
const fetchBanners = () => {
|
||||
return common_vendor.__awaiter(this, void 0, void 0, function* () {
|
||||
try {
|
||||
const res = yield api_index.getBanners();
|
||||
const data = res.data;
|
||||
bannerList.value = data.map((item) => {
|
||||
return new BannerItem({
|
||||
id: item["id"],
|
||||
image: item["image"],
|
||||
title: item["title"],
|
||||
link: item["link"]
|
||||
if (res.code === 0 && res.data != null) {
|
||||
const data = res.data;
|
||||
bannerList.value = data.map((item) => {
|
||||
return new BannerItem({
|
||||
id: item["id"],
|
||||
image: item["image"],
|
||||
title: item["title"],
|
||||
link: item["link"]
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
} catch (e) {
|
||||
common_vendor.index.__f__("error", "at pages/index/index.uvue:174", "获取轮播图失败", e);
|
||||
common_vendor.index.__f__("error", "at pages/index/index.uvue:190", "获取轮播图失败", e);
|
||||
}
|
||||
});
|
||||
};
|
||||
@@ -167,24 +184,30 @@ const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
|
||||
return common_vendor.__awaiter(this, void 0, void 0, function* () {
|
||||
try {
|
||||
const res = yield api_index.getHotCases();
|
||||
const data = res.data;
|
||||
const list = data["items"] || [];
|
||||
hotCases.value = list.map((item) => {
|
||||
return new CaseItem({
|
||||
id: item["id"],
|
||||
title: item["title"],
|
||||
category: item["category"],
|
||||
categoryName: item["categoryName"],
|
||||
coverImage: item["coverImage"],
|
||||
material: item["material"],
|
||||
duration: item["duration"],
|
||||
price: item["price"],
|
||||
views: item["views"],
|
||||
likes: item["likes"]
|
||||
if (res.code == 0 && res.data != null) {
|
||||
const data = res.data;
|
||||
const list = data["list"] || [];
|
||||
hotCases.value = list.map((item) => {
|
||||
const images = item["images"] || [];
|
||||
const afterImages = item["afterImages"] || [];
|
||||
const beforeImages = item["beforeImages"] || [];
|
||||
const coverImage = images.length > 0 ? images[0] : afterImages.length > 0 ? afterImages[0] : beforeImages.length > 0 ? beforeImages[0] : "";
|
||||
return new CaseItem({
|
||||
id: String(item["id"]),
|
||||
title: item["title"],
|
||||
category: item["serviceType"] || "",
|
||||
categoryName: utils_config.getServiceTypeName(item["serviceType"]),
|
||||
coverImage,
|
||||
material: item["materials"] || "暂无",
|
||||
duration: (item["duration"] || 0) + "天",
|
||||
price: item["price"] != null ? "¥" + item["price"] : "面议",
|
||||
views: item["views"] || 0,
|
||||
likes: item["likes"] || 0
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
} catch (e) {
|
||||
common_vendor.index.__f__("error", "at pages/index/index.uvue:200", "获取热门案例失败", e);
|
||||
common_vendor.index.__f__("error", "at pages/index/index.uvue:224", "获取热门案例失败", e);
|
||||
}
|
||||
});
|
||||
};
|
||||
@@ -221,7 +244,7 @@ const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
|
||||
});
|
||||
};
|
||||
common_vendor.onLoad(() => {
|
||||
initServiceTypes();
|
||||
fetchServiceTypes();
|
||||
fetchBanners();
|
||||
fetchHotCases();
|
||||
});
|
||||
@@ -245,7 +268,7 @@ const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
|
||||
a: item.id,
|
||||
b: item.id,
|
||||
c: common_vendor.o(handleServiceClick, item.id),
|
||||
d: "767a328a-1-" + i0,
|
||||
d: "0a3a932a-1-" + i0,
|
||||
e: common_vendor.p({
|
||||
id: item.id,
|
||||
name: item.name,
|
||||
@@ -270,7 +293,7 @@ const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
|
||||
return {
|
||||
a: item.id,
|
||||
b: common_vendor.o(goToCaseDetail, item.id),
|
||||
c: "767a328a-3-" + i0,
|
||||
c: "0a3a932a-3-" + i0,
|
||||
d: common_vendor.p({
|
||||
caseData: item
|
||||
})
|
||||
|
||||
@@ -1 +1 @@
|
||||
<view id="{{i}}" change:eS="{{uV.sS}}" eS="{{$eS[i]}}" change:eA="{{uV.sA}}" eA="{{$eA[i]}}" class="{{['page', virtualHostClass]}}" style="{{virtualHostStyle}}" hidden="{{virtualHostHidden || false}}"><nav-bar u-i="767a328a-0" bind:__l="__l" u-p="{{a||''}}"></nav-bar><scroll-view class="page-content" scroll-y enable-flex="true" enhanced="true"><view class="banner-section"><swiper class="banner-swiper" circular autoplay indicator-dots indicator-color="rgba(255,255,255,0.5)" indicator-active-color="#ffffff"><swiper-item wx:for="{{b}}" wx:for-item="item" wx:key="c"><image class="banner-image" src="{{item.a}}" mode="aspectFill" bindtap="{{item.b}}"></image></swiper-item></swiper></view><view class="service-section"><view class="service-grid"><service-card wx:for="{{c}}" wx:for-item="item" wx:key="b" id="{{item.a}}" virtualHostId="{{item.a}}" bindclick="{{item.c}}" u-i="{{item.d}}" bind:__l="__l" u-p="{{item.e||''}}"></service-card></view></view><view class="advantage-section"><view class="advantage-list"><view wx:for="{{d}}" wx:for-item="item" wx:key="d" class="advantage-item"><text class="advantage-icon">{{item.a}}</text><view class="advantage-info"><text class="advantage-title">{{item.b}}</text><text class="advantage-desc">{{item.c}}</text></view></view></view></view><view class="case-section"><section-header bindmore="{{e}}" u-i="767a328a-2" bind:__l="__l" u-p="{{f||''}}"></section-header><view class="case-list"><case-card wx:for="{{g}}" wx:for-item="item" wx:key="a" bindclick="{{item.b}}" u-i="{{item.c}}" bind:__l="__l" u-p="{{item.d||''}}"></case-card></view></view><view class="booking-section" bindtap="{{h}}"><view class="booking-content"><view class="booking-left"><text class="booking-title">免费上门评估</text><text class="booking-desc">专业师傅免费上门,为您的沙发量身定制翻新方案</text></view><view class="booking-btn"><text class="booking-btn-text">立即预约</text></view></view></view><view class="bottom-space"></view></scroll-view></view><wxs src="/common/uniView.wxs" module="uV"/>
|
||||
<view id="{{i}}" change:eS="{{uV.sS}}" eS="{{$eS[i]}}" change:eA="{{uV.sA}}" eA="{{$eA[i]}}" class="{{['page', virtualHostClass]}}" style="{{virtualHostStyle}}" hidden="{{virtualHostHidden || false}}"><nav-bar u-i="0a3a932a-0" bind:__l="__l" u-p="{{a||''}}"></nav-bar><scroll-view class="page-content" scroll-y enable-flex="true" enhanced="true"><view class="banner-section"><swiper class="banner-swiper" circular autoplay indicator-dots indicator-color="rgba(255,255,255,0.5)" indicator-active-color="#ffffff"><swiper-item wx:for="{{b}}" wx:for-item="item" wx:key="c"><image class="banner-image" src="{{item.a}}" mode="aspectFill" bindtap="{{item.b}}"></image></swiper-item></swiper></view><view class="service-section"><view class="service-grid"><service-card wx:for="{{c}}" wx:for-item="item" wx:key="b" id="{{item.a}}" virtualHostId="{{item.a}}" bindclick="{{item.c}}" u-i="{{item.d}}" bind:__l="__l" u-p="{{item.e||''}}"></service-card></view></view><view class="advantage-section"><view class="advantage-list"><view wx:for="{{d}}" wx:for-item="item" wx:key="d" class="advantage-item"><text class="advantage-icon">{{item.a}}</text><view class="advantage-info"><text class="advantage-title">{{item.b}}</text><text class="advantage-desc">{{item.c}}</text></view></view></view></view><view class="case-section"><section-header bindmore="{{e}}" u-i="0a3a932a-2" bind:__l="__l" u-p="{{f||''}}"></section-header><view class="case-list"><case-card wx:for="{{g}}" wx:for-item="item" wx:key="a" bindclick="{{item.b}}" u-i="{{item.c}}" bind:__l="__l" u-p="{{item.d||''}}"></case-card></view></view><view class="booking-section" bindtap="{{h}}"><view class="booking-content"><view class="booking-left"><text class="booking-title">免费上门评估</text><text class="booking-desc">专业师傅免费上门,为您的沙发量身定制翻新方案</text></view><view class="booking-btn"><text class="booking-btn-text">立即预约</text></view></view></view><view class="bottom-space"></view></scroll-view></view><wxs src="/common/uniView.wxs" module="uV"/>
|
||||
|
||||
@@ -15,10 +15,12 @@ class ServiceType extends UTS.UTSType {
|
||||
kind: 2,
|
||||
get fields() {
|
||||
return {
|
||||
id: { type: String, optional: false },
|
||||
id: { type: Number, optional: false },
|
||||
name: { type: String, optional: false },
|
||||
desc: { type: String, optional: false },
|
||||
emoji: { type: String, optional: false }
|
||||
emoji: { type: String, optional: false },
|
||||
type: { type: String, optional: false },
|
||||
basePrice: { type: Number, optional: false }
|
||||
};
|
||||
},
|
||||
name: "ServiceType"
|
||||
@@ -31,6 +33,8 @@ class ServiceType extends UTS.UTSType {
|
||||
this.name = this.__props__.name;
|
||||
this.desc = this.__props__.desc;
|
||||
this.emoji = this.__props__.emoji;
|
||||
this.type = this.__props__.type;
|
||||
this.basePrice = this.__props__.basePrice;
|
||||
delete this.__props__;
|
||||
}
|
||||
}
|
||||
@@ -108,13 +112,14 @@ class FaqItem extends UTS.UTSType {
|
||||
const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
|
||||
__name: "index",
|
||||
setup(__props) {
|
||||
const serviceTypes = common_vendor.ref([
|
||||
new ServiceType({ id: "repair", name: "局部修复", desc: "破损、划痕修复", emoji: "🔧" }),
|
||||
new ServiceType({ id: "recolor", name: "改色翻新", desc: "皮面改色换新", emoji: "🎨" }),
|
||||
new ServiceType({ id: "refurbish", name: "整体翻新", desc: "全面翻新升级", emoji: "✨" }),
|
||||
new ServiceType({ id: "custom", name: "定制换皮", desc: "个性化定制", emoji: "💎" })
|
||||
const serviceTypes = common_vendor.ref([]);
|
||||
const processList = common_vendor.ref([
|
||||
new ProcessItem({ step: 1, title: "在线预约", description: "填写信息,预约上门时间" }),
|
||||
new ProcessItem({ step: 2, title: "上门评估", description: "专业师傅免费上门勘察" }),
|
||||
new ProcessItem({ step: 3, title: "确认方案", description: "沟通翻新方案和价格" }),
|
||||
new ProcessItem({ step: 4, title: "取件翻新", description: "取回沙发进行专业翻新" }),
|
||||
new ProcessItem({ step: 5, title: "送货验收", description: "送货上门,满意付款" })
|
||||
]);
|
||||
const processList = common_vendor.ref([]);
|
||||
const materials = common_vendor.ref([
|
||||
new MaterialItem({
|
||||
name: "头层牛皮",
|
||||
@@ -168,23 +173,41 @@ const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
|
||||
expanded: false
|
||||
})
|
||||
]);
|
||||
const fetchServiceProcess = () => {
|
||||
const fetchServices = () => {
|
||||
return common_vendor.__awaiter(this, void 0, void 0, function* () {
|
||||
try {
|
||||
const res = yield api_index.getServiceProcess();
|
||||
const data = res.data;
|
||||
processList.value = data.map((item) => {
|
||||
return new ProcessItem({
|
||||
step: item["step"],
|
||||
title: item["title"],
|
||||
description: item["description"]
|
||||
const res = yield api_index.getActiveServices();
|
||||
if (res.code == 0 && res.data != null) {
|
||||
const data = res.data;
|
||||
const list = data["list"] || [];
|
||||
const emojiMap = new UTSJSONObject({
|
||||
fabric: "🛋️",
|
||||
leather: "💺",
|
||||
cleaning: "✨",
|
||||
repair: "🔧",
|
||||
custom: "💎"
|
||||
});
|
||||
});
|
||||
serviceTypes.value = list.map((item) => {
|
||||
const type = item["type"];
|
||||
return new ServiceType({
|
||||
id: item["id"],
|
||||
name: item["name"],
|
||||
desc: item["description"],
|
||||
emoji: emojiMap[type] || "🛋️",
|
||||
type,
|
||||
basePrice: item["basePrice"]
|
||||
});
|
||||
});
|
||||
}
|
||||
} catch (e) {
|
||||
common_vendor.index.__f__("error", "at pages/service/index.uvue:217", "获取服务流程失败", e);
|
||||
common_vendor.index.__f__("error", "at pages/service/index.uvue:237", "获取服务列表失败", e);
|
||||
}
|
||||
});
|
||||
};
|
||||
const fetchServiceProcess = () => {
|
||||
return common_vendor.__awaiter(this, void 0, void 0, function* () {
|
||||
});
|
||||
};
|
||||
const toggleFaq = (index) => {
|
||||
faqList.value[index].expanded = !faqList.value[index].expanded;
|
||||
};
|
||||
@@ -199,6 +222,7 @@ const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
|
||||
});
|
||||
};
|
||||
common_vendor.onLoad(() => {
|
||||
fetchServices();
|
||||
fetchServiceProcess();
|
||||
});
|
||||
return (_ctx, _cache) => {
|
||||
|
||||
@@ -1 +1 @@
|
||||
<view id="{{j}}" change:eS="{{uV.sS}}" eS="{{$eS[j]}}" change:eA="{{uV.sA}}" eA="{{$eA[j]}}" class="{{['page', virtualHostClass]}}" style="{{virtualHostStyle}}" hidden="{{virtualHostHidden || false}}"><scroll-view class="page-scroll" scroll-y enable-flex="true" enhanced="true"><view class="banner"><view class="banner-content"><text class="banner-title">专业沙发翻新服务</text><text class="banner-desc">让旧沙发焕发新生</text></view></view><view class="section"><section-header u-i="7558dcb8-0" bind:__l="__l" u-p="{{a||''}}"></section-header><view class="service-grid"><view wx:for="{{b}}" wx:for-item="item" wx:key="d" class="service-item" bindtap="{{item.e}}"><view class="service-icon-bg"><text class="service-icon">{{item.a}}</text></view><text class="service-name">{{item.b}}</text><text class="service-desc">{{item.c}}</text></view></view></view><view class="section"><section-header u-i="7558dcb8-1" bind:__l="__l" u-p="{{c||''}}"></section-header><view class="process-list"><view wx:for="{{d}}" wx:for-item="item" wx:key="e" class="process-item"><view class="process-step"><text class="step-num">{{item.a}}</text></view><view class="process-content"><text class="process-title">{{item.b}}</text><text class="process-desc">{{item.c}}</text></view><view wx:if="{{item.d}}" class="process-line"></view></view></view></view><view class="section"><section-header u-i="7558dcb8-2" bind:__l="__l" u-p="{{e||''}}"></section-header><view class="material-list"><view wx:for="{{f}}" wx:for-item="item" wx:key="e" class="material-item"><view class="material-header"><text class="material-name">{{item.a}}</text><text class="material-price">{{item.b}}</text></view><text class="material-desc">{{item.c}}</text><view class="material-tags"><text wx:for="{{item.d}}" wx:for-item="tag" wx:key="b" class="material-tag">{{tag.a}}</text></view></view></view></view><view class="section"><section-header u-i="7558dcb8-3" bind:__l="__l" u-p="{{g||''}}"></section-header><view class="faq-list"><view wx:for="{{h}}" wx:for-item="item" wx:key="e" class="faq-item" bindtap="{{item.f}}"><view class="faq-header"><text class="faq-question">{{item.a}}</text><text class="faq-arrow">{{item.b}}</text></view><view wx:if="{{item.c}}" class="faq-answer"><text class="faq-answer-text">{{item.d}}</text></view></view></view></view><view class="bottom-space"></view></scroll-view><view class="bottom-bar"><view class="bar-info"><text class="bar-title">免费上门评估</text><text class="bar-desc">专业师傅为您量身定制方案</text></view><view class="bar-btn" bindtap="{{i}}"><text class="bar-btn-text">立即预约</text></view></view></view><wxs src="/common/uniView.wxs" module="uV"/>
|
||||
<view id="{{j}}" change:eS="{{uV.sS}}" eS="{{$eS[j]}}" change:eA="{{uV.sA}}" eA="{{$eA[j]}}" class="{{['page', virtualHostClass]}}" style="{{virtualHostStyle}}" hidden="{{virtualHostHidden || false}}"><scroll-view class="page-scroll" scroll-y enable-flex="true" enhanced="true"><view class="banner"><view class="banner-content"><text class="banner-title">专业沙发翻新服务</text><text class="banner-desc">让旧沙发焕发新生</text></view></view><view class="section"><section-header u-i="3b972967-0" bind:__l="__l" u-p="{{a||''}}"></section-header><view class="service-grid"><view wx:for="{{b}}" wx:for-item="item" wx:key="d" class="service-item" bindtap="{{item.e}}"><view class="service-icon-bg"><text class="service-icon">{{item.a}}</text></view><text class="service-name">{{item.b}}</text><text class="service-desc">{{item.c}}</text></view></view></view><view class="section"><section-header u-i="3b972967-1" bind:__l="__l" u-p="{{c||''}}"></section-header><view class="process-list"><view wx:for="{{d}}" wx:for-item="item" wx:key="e" class="process-item"><view class="process-step"><text class="step-num">{{item.a}}</text></view><view class="process-content"><text class="process-title">{{item.b}}</text><text class="process-desc">{{item.c}}</text></view><view wx:if="{{item.d}}" class="process-line"></view></view></view></view><view class="section"><section-header u-i="3b972967-2" bind:__l="__l" u-p="{{e||''}}"></section-header><view class="material-list"><view wx:for="{{f}}" wx:for-item="item" wx:key="e" class="material-item"><view class="material-header"><text class="material-name">{{item.a}}</text><text class="material-price">{{item.b}}</text></view><text class="material-desc">{{item.c}}</text><view class="material-tags"><text wx:for="{{item.d}}" wx:for-item="tag" wx:key="b" class="material-tag">{{tag.a}}</text></view></view></view></view><view class="section"><section-header u-i="3b972967-3" bind:__l="__l" u-p="{{g||''}}"></section-header><view class="faq-list"><view wx:for="{{h}}" wx:for-item="item" wx:key="e" class="faq-item" bindtap="{{item.f}}"><view class="faq-header"><text class="faq-question">{{item.a}}</text><text class="faq-arrow">{{item.b}}</text></view><view wx:if="{{item.c}}" class="faq-answer"><text class="faq-answer-text">{{item.d}}</text></view></view></view></view><view class="bottom-space"></view></scroll-view><view class="bottom-bar"><view class="bar-info"><text class="bar-title">免费上门评估</text><text class="bar-desc">专业师傅为您量身定制方案</text></view><view class="bar-btn" bindtap="{{i}}"><text class="bar-btn-text">立即预约</text></view></view></view><wxs src="/common/uniView.wxs" module="uV"/>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
"use strict";
|
||||
const common_vendor = require("../../common/vendor.js");
|
||||
const utils_config = require("../../utils/config.js");
|
||||
const api_index = require("../../api/index.js");
|
||||
class UserInfo extends UTS.UTSType {
|
||||
static get$UTSMetadata$() {
|
||||
return {
|
||||
@@ -67,33 +68,69 @@ const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
|
||||
}
|
||||
}));
|
||||
};
|
||||
const fetchStats = () => {
|
||||
bookingCount.value = 0;
|
||||
const favorites = common_vendor.index.getStorageSync(utils_config.STORAGE_KEYS.FAVORITES);
|
||||
favoriteCount.value = favorites ? favorites.length : 0;
|
||||
};
|
||||
const handleLogin = () => {
|
||||
common_vendor.index.getUserProfile(new UTSJSONObject({
|
||||
desc: "用于完善用户资料",
|
||||
success: (res = null) => {
|
||||
userInfo.value = new UserInfo(
|
||||
{
|
||||
id: "",
|
||||
nickName: res.userInfo.nickName,
|
||||
avatar: res.userInfo.avatarUrl,
|
||||
phone: ""
|
||||
success: (profileRes = null) => {
|
||||
common_vendor.index.login(new UTSJSONObject({
|
||||
provider: "weixin",
|
||||
success: (loginRes) => {
|
||||
return common_vendor.__awaiter(this, void 0, void 0, function* () {
|
||||
var _a;
|
||||
const code = loginRes.code;
|
||||
try {
|
||||
const res = yield api_index.wechatLogin(code);
|
||||
if (res.code === 0 && res.data != null) {
|
||||
const data = res.data;
|
||||
const token = data["access_token"];
|
||||
const userDataObj = data["user"];
|
||||
common_vendor.index.setStorageSync(utils_config.STORAGE_KEYS.TOKEN, token);
|
||||
userInfo.value = new UserInfo({
|
||||
id: String(userDataObj["id"]),
|
||||
nickName: profileRes.userInfo.nickName,
|
||||
avatar: profileRes.userInfo.avatarUrl,
|
||||
phone: (_a = userDataObj["phone"]) !== null && _a !== void 0 ? _a : ""
|
||||
});
|
||||
common_vendor.index.setStorageSync(utils_config.STORAGE_KEYS.USER_INFO, new UTSJSONObject({
|
||||
id: userDataObj["id"],
|
||||
nickName: profileRes.userInfo.nickName,
|
||||
avatar: profileRes.userInfo.avatarUrl,
|
||||
phone: userDataObj["phone"]
|
||||
}));
|
||||
isLoggedIn.value = true;
|
||||
common_vendor.index.showToast({
|
||||
title: "登录成功",
|
||||
icon: "success"
|
||||
});
|
||||
fetchStats();
|
||||
} else {
|
||||
throw new Error(res.message);
|
||||
}
|
||||
} catch (error) {
|
||||
common_vendor.index.__f__("error", "at pages/user/index.uvue:248", "登录失败", error);
|
||||
common_vendor.index.showToast({
|
||||
title: "登录失败,请重试",
|
||||
icon: "none"
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
fail: () => {
|
||||
common_vendor.index.showToast({
|
||||
title: "登录失败",
|
||||
icon: "none"
|
||||
});
|
||||
}
|
||||
// 保存用户信息
|
||||
);
|
||||
common_vendor.index.setStorageSync(utils_config.STORAGE_KEYS.USER_INFO, new UTSJSONObject({
|
||||
nickName: res.userInfo.nickName,
|
||||
avatar: res.userInfo.avatarUrl
|
||||
}));
|
||||
common_vendor.index.setStorageSync(utils_config.STORAGE_KEYS.TOKEN, "mock_token_" + Date.now().toString());
|
||||
isLoggedIn.value = true;
|
||||
common_vendor.index.showToast({
|
||||
title: "登录成功",
|
||||
icon: "success"
|
||||
});
|
||||
},
|
||||
fail: () => {
|
||||
common_vendor.index.showToast({
|
||||
title: "登录失败",
|
||||
title: "授权失败",
|
||||
icon: "none"
|
||||
});
|
||||
}
|
||||
@@ -123,15 +160,27 @@ const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
|
||||
}));
|
||||
};
|
||||
const goToBookingList = () => {
|
||||
common_vendor.index.showToast({
|
||||
title: "功能开发中",
|
||||
icon: "none"
|
||||
if (!isLoggedIn.value) {
|
||||
common_vendor.index.showToast({
|
||||
title: "请先登录",
|
||||
icon: "none"
|
||||
});
|
||||
return null;
|
||||
}
|
||||
common_vendor.index.navigateTo({
|
||||
url: "/pages/user/booking-list"
|
||||
});
|
||||
};
|
||||
const goToFavorites = () => {
|
||||
common_vendor.index.showToast({
|
||||
title: "功能开发中",
|
||||
icon: "none"
|
||||
if (!isLoggedIn.value) {
|
||||
common_vendor.index.showToast({
|
||||
title: "请先登录",
|
||||
icon: "none"
|
||||
});
|
||||
return null;
|
||||
}
|
||||
common_vendor.index.navigateTo({
|
||||
url: "/pages/user/favorites"
|
||||
});
|
||||
};
|
||||
const goToAbout = () => {
|
||||
|
||||
26
前端/unpackage/dist/dev/mp-weixin/utils/config.js
vendored
26
前端/unpackage/dist/dev/mp-weixin/utils/config.js
vendored
@@ -3,8 +3,8 @@ const ENV = new UTSJSONObject(
|
||||
{
|
||||
// 开发环境
|
||||
development: new UTSJSONObject({
|
||||
baseUrl: "http://localhost:3000/api",
|
||||
imageBaseUrl: "http://localhost:3000"
|
||||
baseUrl: "http://192.168.1.43:3000/api",
|
||||
imageBaseUrl: "http://192.168.1.43:3000"
|
||||
}),
|
||||
// 生产环境
|
||||
production: new UTSJSONObject({
|
||||
@@ -46,15 +46,27 @@ const SOFA_CATEGORIES = [
|
||||
new UTSJSONObject({ id: "antique", name: "古典沙发" }),
|
||||
new UTSJSONObject({ id: "office", name: "办公沙发" })
|
||||
];
|
||||
const SERVICE_TYPES = [
|
||||
[
|
||||
new UTSJSONObject({ id: "repair", name: "局部修复", icon: "/static/icons/repair.png" }),
|
||||
new UTSJSONObject({ id: "recolor", name: "改色翻新", icon: "/static/icons/recolor.png" }),
|
||||
new UTSJSONObject({ id: "refurbish", name: "整体翻新", icon: "/static/icons/refurbish.png" }),
|
||||
new UTSJSONObject({ id: "custom", name: "定制换皮", icon: "/static/icons/custom.png" })
|
||||
new UTSJSONObject({ id: "refurbish", name: "整体翻新", icon: "/static/icons/refurbish.png" })
|
||||
];
|
||||
const getServiceTypeName = (type) => {
|
||||
var _a;
|
||||
const map = /* @__PURE__ */ new Map([
|
||||
["leather", "真皮翻新"],
|
||||
["fabric", "布艺翻新"],
|
||||
["functional", "功能维修"],
|
||||
["antique", "古董修复"],
|
||||
["office", "办公沙发"],
|
||||
["cleaning", "清洁保养"],
|
||||
["repair", "维修改装"],
|
||||
["custom", "定制沙发"]
|
||||
]);
|
||||
return (_a = UTS.mapGet(map, type)) !== null && _a !== void 0 ? _a : type;
|
||||
};
|
||||
exports.PAGE_SIZE = PAGE_SIZE;
|
||||
exports.SERVICE_TYPES = SERVICE_TYPES;
|
||||
exports.SOFA_CATEGORIES = SOFA_CATEGORIES;
|
||||
exports.STORAGE_KEYS = STORAGE_KEYS;
|
||||
exports.getEnvConfig = getEnvConfig;
|
||||
exports.getServiceTypeName = getServiceTypeName;
|
||||
//# sourceMappingURL=../../.sourcemap/mp-weixin/utils/config.js.map
|
||||
|
||||
40
前端/unpackage/dist/dev/mp-weixin/utils/request.js
vendored
40
前端/unpackage/dist/dev/mp-weixin/utils/request.js
vendored
@@ -39,7 +39,7 @@ class ResponseData extends UTS.UTSType {
|
||||
return {
|
||||
code: { type: Number, optional: false },
|
||||
message: { type: String, optional: false },
|
||||
data: { type: "Any", optional: false }
|
||||
data: { type: "Any", optional: true }
|
||||
};
|
||||
},
|
||||
name: "ResponseData"
|
||||
@@ -65,17 +65,29 @@ const requestInterceptor = (options) => {
|
||||
return options;
|
||||
};
|
||||
const responseInterceptor = (response) => {
|
||||
var _a, _b, _c;
|
||||
var _a, _b, _c, _d, _e, _f;
|
||||
const statusCode = response["statusCode"];
|
||||
const data = response["data"];
|
||||
common_vendor.index.__f__("log", "at utils/request.uts:47", "响应拦截器 - statusCode:", statusCode);
|
||||
common_vendor.index.__f__("log", "at utils/request.uts:48", "响应拦截器 - data:", data);
|
||||
if (data == null) {
|
||||
return new ResponseData({
|
||||
code: statusCode,
|
||||
message: "响应数据为空",
|
||||
data: null
|
||||
});
|
||||
}
|
||||
if (statusCode == 200) {
|
||||
const code = (_a = data["code"]) !== null && _a !== void 0 ? _a : 0;
|
||||
common_vendor.index.__f__("log", "at utils/request.uts:61", "响应拦截器 - 解析的 code:", code);
|
||||
if (code == 0 || code == 200) {
|
||||
return new ResponseData({
|
||||
const result = new ResponseData({
|
||||
code: 0,
|
||||
message: "success",
|
||||
data: data["data"]
|
||||
message: (_b = data["message"]) !== null && _b !== void 0 ? _b : "success",
|
||||
data: (_c = data["data"]) !== null && _c !== void 0 ? _c : null
|
||||
});
|
||||
common_vendor.index.__f__("log", "at utils/request.uts:68", "响应拦截器 - 返回成功结果:", result);
|
||||
return result;
|
||||
} else if (code == 401) {
|
||||
common_vendor.index.removeStorageSync(utils_config.STORAGE_KEYS.TOKEN);
|
||||
common_vendor.index.showToast({
|
||||
@@ -84,14 +96,14 @@ const responseInterceptor = (response) => {
|
||||
});
|
||||
return new ResponseData({
|
||||
code,
|
||||
message: (_b = data["message"]) !== null && _b !== void 0 ? _b : "请重新登录",
|
||||
message: (_d = data["message"]) !== null && _d !== void 0 ? _d : "请重新登录",
|
||||
data: null
|
||||
});
|
||||
} else {
|
||||
return new ResponseData({
|
||||
code,
|
||||
message: (_c = data["message"]) !== null && _c !== void 0 ? _c : "请求失败",
|
||||
data: null
|
||||
message: (_e = data["message"]) !== null && _e !== void 0 ? _e : "请求失败",
|
||||
data: (_f = data["data"]) !== null && _f !== void 0 ? _f : null
|
||||
});
|
||||
}
|
||||
} else {
|
||||
@@ -113,6 +125,13 @@ const request = (options) => {
|
||||
}
|
||||
const config = utils_config.getEnvConfig();
|
||||
const baseUrl = config["baseUrl"];
|
||||
if (finalOptions.data && typeof finalOptions.data === "object") {
|
||||
for (const key in finalOptions.data) {
|
||||
if (finalOptions.data[key] === void 0) {
|
||||
delete finalOptions.data[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
common_vendor.index.request({
|
||||
url: baseUrl + finalOptions.url,
|
||||
method: (_c = finalOptions.method) !== null && _c !== void 0 ? _c : "GET",
|
||||
@@ -122,10 +141,15 @@ const request = (options) => {
|
||||
if (finalOptions.showLoading == true) {
|
||||
common_vendor.index.hideLoading();
|
||||
}
|
||||
common_vendor.index.__f__("log", "at utils/request.uts:150", "请求成功原始响应:", res);
|
||||
const result = responseInterceptor(res);
|
||||
common_vendor.index.__f__("log", "at utils/request.uts:152", "拦截器处理后结果:", result);
|
||||
common_vendor.index.__f__("log", "at utils/request.uts:153", "result.code 类型:", typeof result.code, "值:", result.code);
|
||||
if (result.code == 0) {
|
||||
common_vendor.index.__f__("log", "at utils/request.uts:155", "判断为成功,resolve");
|
||||
resolve(result);
|
||||
} else {
|
||||
common_vendor.index.__f__("log", "at utils/request.uts:158", "判断为失败,显示 toast 并 reject");
|
||||
common_vendor.index.showToast({
|
||||
title: result.message,
|
||||
icon: "none"
|
||||
|
||||
Reference in New Issue
Block a user