1 line
38 KiB
Plaintext
1 line
38 KiB
Plaintext
{"version":3,"sources":["pages/mall/consumer/review.uvue","pages/user/profile.uvue","uni_modules/ak-req/ak-req.uts","pages/user/change-password.uvue","pages/user/terms.uvue","pages/main/index.uvue"],"sourcesContent":["<!-- 评价页面 -->\r\n<template>\r\n\t<view class=\"review-page\">\r\n\t\t<!-- 顶部栏:已移除“发表评价”文字 -->\r\n\t\t<view class=\"review-header\">\r\n\t\t\t<view class=\"header-back\" @click=\"goBack\">\r\n\t\t\t\t<image class=\"back-icon\" src=\"/static/icons/back.png\" mode=\"aspectFit\"></image>\r\n\t\t\t</view>\r\n\t\t\t<view class=\"header-title-placeholder\"></view>\r\n\t\t\t<view class=\"header-right\"></view>\r\n\t\t</view>\r\n\r\n\t\t<scroll-view class=\"review-content\" direction=\"vertical\">\r\n\t\t\t<!-- 订单信息 -->\r\n\t\t\t<view class=\"order-section\">\r\n\t\t\t\t<text class=\"order-no\">订单号: {{ order != null ? order.order_no : '' }}</text>\r\n\t\t\t\t<text class=\"order-time\">下单时间: {{ formatTime(order != null ? order.created_at : '') }}</text>\r\n\t\t\t</view>\r\n\r\n\t\t\t<!-- 商品评价 -->\r\n\t\t\t<view class=\"products-section\">\r\n\t\t\t\t<view v-for=\"(item, index) in orderItems\" :key=\"item.id\" class=\"product-review\">\r\n\t\t\t\t\t<view class=\"product-header\">\r\n\t\t\t\t\t\t<image class=\"product-image\" :src=\"item.product_image ?? '/static/default-product.png'\" />\r\n\t\t\t\t\t\t<view class=\"product-info\">\r\n\t\t\t\t\t\t\t<text class=\"product-name\">{{ item.product_name }}</text>\r\n\t\t\t\t\t\t\t<text v-if=\"item.sku_specifications != null\" class=\"product-spec\">{{ getSpecText(item.sku_specifications) }}</text>\r\n\t\t\t\t\t\t</view>\r\n\t\t\t\t\t</view>\r\n\r\n\t\t\t\t\t<!-- 评分 -->\r\n\t\t\t\t\t<view class=\"rating-section\">\r\n\t\t\t\t\t\t<text class=\"rating-label\">评分</text>\r\n\t\t\t\t\t\t<view class=\"rating-stars\">\r\n\t\t\t\t\t\t\t<text v-for=\"star in 5\" \r\n\t\t\t\t\t\t\t\t\t\t:key=\"star\" \r\n\t\t\t\t\t\t\t\t\t\tclass=\"star-icon\"\r\n\t\t\t\t\t\t\t\t\t\t:class=\"{ active: star <= ratings[index] }\"\r\n\t\t\t\t\t\t\t\t\t\t@click=\"setRating(index, star)\">\r\n\t\t\t\t\t\t\t\t⭐\r\n\t\t\t\t\t\t\t</text>\r\n\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t<text class=\"rating-text\">{{ getRatingText(ratings[index]) }}</text>\r\n\t\t\t\t\t</view>\r\n\r\n\t\t\t\t\t<!-- 评价内容 -->\r\n\t\t\t\t\t<view class=\"content-section\">\r\n\t\t\t\t\t\t<textarea class=\"review-textarea\" \r\n\t\t\t\t\t\t\t\t\t\t\tv-model=\"contents[index]\" \r\n\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"请写下您的使用感受,分享给其他小伙伴吧\"\r\n\t\t\t\t\t\t\t\t\t\t\tmaxlength=\"500\" />\r\n\t\t\t\t\t\t<text class=\"word-count\">{{ contents[index]?.length ?? 0 }}/500</text>\r\n\t\t\t\t\t</view>\r\n\r\n\t\t\t\t\t<!-- 图片上传 -->\r\n\t\t\t\t\t<view class=\"images-section\">\r\n\t\t\t\t\t\t<text class=\"images-label\">上传图片(可选)</text>\r\n\t\t\t\t\t\t<view class=\"images-grid\">\r\n\t\t\t\t\t\t\t<view v-for=\"(image, imgIndex) in images[index]\" \r\n\t\t\t\t\t\t\t\t\t\t:key=\"imgIndex\" \r\n\t\t\t\t\t\t\t\t\t\tclass=\"image-item\">\r\n\t\t\t\t\t\t\t\t<image class=\"uploaded-image\" :src=\"image\" />\r\n\t\t\t\t\t\t\t\t<text class=\"delete-image\" @click=\"deleteImage(index, imgIndex)\">×</text>\r\n\t\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t\t<view v-if=\"images[index].length < 9\" \r\n\t\t\t\t\t\t\t\t\t\tclass=\"upload-btn\" \r\n\t\t\t\t\t\t\t\t\t\t@click=\"uploadImage(index)\">\r\n\t\t\t\t\t\t\t\t<text class=\"upload-icon\">+</text>\r\n\t\t\t\t\t\t\t\t<text class=\"upload-text\">添加图片</text>\r\n\t\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t</view>\r\n\t\t\t\t\t</view>\r\n\r\n\t\t\t\t\t<!-- 匿名评价 -->\r\n\t\t\t\t\t<view class=\"anonymous-section\">\r\n\t\t\t\t\t\t<view class=\"anonymous-switch\">\r\n\t\t\t\t\t\t\t<text class=\"switch-label\">匿名评价</text>\r\n\t\t\t\t\t\t\t<switch :checked=\"anonymous\" @change=\"toggleAnonymous\" />\r\n\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t<text class=\"anonymous-tip\">评价内容对其他用户不可见</text>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t</view>\r\n\t\t\t</view>\r\n\r\n\t\t\t<!-- 店铺评价 -->\r\n\t\t\t<view v-if=\"merchant\" class=\"merchant-section\">\r\n\t\t\t\t<text class=\"section-title\">店铺评价</text>\r\n\t\t\t\t<view class=\"merchant-rating\">\r\n\t\t\t\t\t<text class=\"rating-item\">商品描述相符</text>\r\n\t\t\t\t\t<view class=\"rating-stars small\">\r\n\t\t\t\t\t\t<text v-for=\"star in 5\" \r\n\t\t\t\t\t\t\t\t\t:key=\"star\" \r\n\t\t\t\t\t\t\t\t\tclass=\"star-icon\"\r\n\t\t\t\t\t\t\t\t\t:class=\"{ active: star <= merchantRating.description }\"\r\n\t\t\t\t\t\t\t\t\t@click=\"setMerchantRating('description', star)\">\r\n\t\t\t\t\t\t\t⭐\r\n\t\t\t\t\t\t</text>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t</view>\r\n\t\t\t\t<view class=\"merchant-rating\">\r\n\t\t\t\t\t<text class=\"rating-item\">物流服务</text>\r\n\t\t\t\t\t<view class=\"rating-stars small\">\r\n\t\t\t\t\t\t<text v-for=\"star in 5\" \r\n\t\t\t\t\t\t\t\t\t:key=\"star\" \r\n\t\t\t\t\t\t\t\t\tclass=\"star-icon\"\r\n\t\t\t\t\t\t\t\t\t:class=\"{ active: star <= merchantRating.logistics }\"\r\n\t\t\t\t\t\t\t\t\t@click=\"setMerchantRating('logistics', star)\">\r\n\t\t\t\t\t\t\t⭐\r\n\t\t\t\t\t\t</text>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t</view>\r\n\t\t\t\t<view class=\"merchant-rating\">\r\n\t\t\t\t\t<text class=\"rating-item\">服务态度</text>\r\n\t\t\t\t\t<view class=\"rating-stars small\">\r\n\t\t\t\t\t\t<text v-for=\"star in 5\" \r\n\t\t\t\t\t\t\t\t\t:key=\"star\" \r\n\t\t\t\t\t\t\t\t\tclass=\"star-icon\"\r\n\t\t\t\t\t\t\t\t\t:class=\"{ active: star <= merchantRating.service }\"\r\n\t\t\t\t\t\t\t\t\t@click=\"setMerchantRating('service', star)\">\r\n\t\t\t\t\t\t\t⭐\r\n\t\t\t\t\t\t</text>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t</view>\r\n\t\t\t</view>\r\n\r\n\t\t\t<!-- 评价提示 -->\r\n\t\t\t<view class=\"tips-section\">\r\n\t\t\t\t<text class=\"tip-title\">评价须知</text>\r\n\t\t\t\t<text class=\"tip-item\">1. 评价后不可修改,请谨慎评价</text>\r\n\t\t\t\t<text class=\"tip-item\">2. 上传图片需为真实商品照片</text>\r\n\t\t\t\t<text class=\"tip-item\">3. 恶意评价将被删除并限制评价功能</text>\r\n\t\t\t\t<text class=\"tip-item\">4. 优质评价可获得积分奖励</text>\r\n\t\t\t</view>\r\n\t\t</scroll-view>\r\n\r\n\t\t<!-- 提交按钮 -->\r\n\t\t<view class=\"submit-section\">\r\n\t\t\t<button class=\"submit-btn\" \r\n\t\t\t\t\t\t\t:class=\"{ disabled: canSubmit === false || isSubmitting }\"\r\n\t\t\t\t\t\t\t@click=\"submitReview\">\r\n\t\t\t\t<text v-if=\"isSubmitting === false\" class=\"submit-text\">提交评价</text>\r\n\t\t\t\t<text v-else class=\"submit-text\">提交中...</text>\r\n\t\t\t</button>\r\n\t\t</view>\r\n\t</view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\nimport { ref, computed } from 'vue'\r\nimport { onLoad } from '@dcloudio/uni-app'\r\nimport { supabaseService } from '@/utils/supabaseService.uts'\r\n\r\ntype OrderType = {\r\n\tid: string\r\n\torder_no: string\r\n\tcreated_at: string\r\n\tmerchant_id: string\r\n}\r\n\r\ntype OrderItemType = {\r\n\tid: number\r\n\torder_id: number\r\n\tproduct_id: number\r\n\tproduct_name: string\r\n\tproduct_image: string\r\n\tsku_specifications: any | null\r\n\tprice: number\r\n\tquantity: number\r\n}\r\n\r\ntype MerchantRatingType = {\r\n\tdescription: number\r\n\tlogistics: number\r\n\tservice: number\r\n}\r\n\r\ntype MerchantType = {\r\n\tid: string\r\n\tshop_name: string\r\n\trating: number\r\n}\r\n\r\nconst orderId = ref<string>('')\r\nconst order = ref<OrderType | null>(null)\r\nconst orderItems = ref<Array<OrderItemType>>([])\r\nconst merchant = ref<MerchantType | null>(null)\r\nconst ratings = ref<Array<number>>([])\r\nconst contents = ref<Array<string>>([])\r\nconst images = ref<Array<Array<string>>>([])\r\nconst anonymous = ref<boolean>(false)\r\nconst merchantRating = ref<MerchantRatingType>({\r\n\tdescription: 5,\r\n\tlogistics: 5,\r\n\tservice: 5\r\n} as MerchantRatingType)\r\nconst isSubmitting = ref<boolean>(false)\r\n\r\nconst loadOrderData = async (): Promise<void> => {\r\n\ttry {\r\n\t\tconsole.log('[loadOrderData] 开始加载订单数据, orderId:', orderId.value)\r\n\t\t\r\n\t\t// 使用 supabaseService 获取订单详情\r\n\t\tconst orderDetailRaw = await supabaseService.getOrderDetail(orderId.value)\r\n\t\tconsole.log('[loadOrderData] orderDetailRaw:', JSON.stringify(orderDetailRaw))\r\n\t\t\r\n\t\tif (orderDetailRaw == null) {\r\n\t\t\tconsole.error('加载订单失败: 未找到订单')\r\n\t\t\tuni.showToast({ title: '订单不存在', icon: 'none' })\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\t// 转换为 UTSJSONObject\r\n\t\tconst orderDetail = JSON.parse(JSON.stringify(orderDetailRaw)) as UTSJSONObject\r\n\r\n\t\t// 解析订单基本信息\r\n\t\torder.value = {\r\n\t\t\tid: orderDetail.getString('id') ?? '',\r\n\t\t\torder_no: orderDetail.getString('order_no') ?? '',\r\n\t\t\tcreated_at: orderDetail.getString('created_at') ?? '',\r\n\t\t\tmerchant_id: orderDetail.getString('merchant_id') ?? ''\r\n\t\t} as OrderType\r\n\r\n\t\t// 解析订单商品\r\n\t\tconst itemsRaw = orderDetail.get('ml_order_items')\r\n\t\tconsole.log('[loadOrderData] itemsRaw:', JSON.stringify(itemsRaw))\r\n\t\t\r\n\t\tif (itemsRaw != null) {\r\n\t\t\tconst itemsList = itemsRaw as any[]\r\n\t\t\tconst processedItems: Array<OrderItemType> = []\r\n\t\t\t\r\n\t\t\tfor (let i: number = 0; i < itemsList.length; i++) {\r\n\t\t\t\tconst itemStr = JSON.stringify(itemsList[i])\r\n\t\t\t\tconst item = JSON.parse(itemStr) as UTSJSONObject\r\n\t\t\t\tconst skuSpec = item.get('sku_specifications')\r\n\t\t\t\t\r\n\t\t\t\tprocessedItems.push({\r\n\t\t\t\t\tid: (item.getNumber('id') ?? 0) as number,\r\n\t\t\t\t\torder_id: (item.getNumber('order_id') ?? 0) as number,\r\n\t\t\t\t\tproduct_id: (item.getNumber('product_id') ?? 0) as number,\r\n\t\t\t\t\tproduct_name: item.getString('product_name') ?? '',\r\n\t\t\t\t\tprice: (item.getNumber('price') ?? 0) as number,\r\n\t\t\t\t\tquantity: (item.getNumber('quantity') ?? 1) as number,\r\n\t\t\t\t\tsku_specifications: skuSpec,\r\n\t\t\t\t\tproduct_image: item.getString('product_image') ?? item.getString('image_url') ?? '/static/default-product.png'\r\n\t\t\t\t} as OrderItemType)\r\n\t\t\t}\r\n\t\t\torderItems.value = processedItems\r\n\t\t\tconsole.log('[loadOrderData] processedItems count:', processedItems.length)\r\n\t\t}\r\n\r\n\t\t// 初始化评价数据\r\n\t\tconst count = orderItems.value.length\r\n\t\tconst newRatings: Array<number> = []\r\n\t\tconst newContents: Array<string> = []\r\n\t\tconst newImages: Array<Array<string>> = []\r\n\t\tfor (let i: number = 0; i < count; i++) {\r\n\t\t\tnewRatings.push(5)\r\n\t\t\tnewContents.push('')\r\n\t\t\tnewImages.push([])\r\n\t\t}\r\n\t\tratings.value = newRatings\r\n\t\tcontents.value = newContents\r\n\t\timages.value = newImages\r\n\r\n\t\t// 获取商家信息\r\n\t\tconst orderObj = order.value\r\n\t\tif (orderObj != null) {\r\n\t\t\tconst merchantId = orderObj.merchant_id\r\n\t\t\tif (merchantId != '') {\r\n\t\t\t\tconst shopInfo = await supabaseService.getShopByMerchantId(merchantId)\r\n\t\t\t\tif (shopInfo != null) {\r\n\t\t\t\t\tmerchant.value = {\r\n\t\t\t\t\t\tid: shopInfo.id,\r\n\t\t\t\t\t\tshop_name: shopInfo.shop_name,\r\n\t\t\t\t\t\trating: shopInfo.rating_avg ?? 5\r\n\t\t\t\t\t} as MerchantType\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t} catch (err) {\r\n\t\tconsole.error('加载订单数据异常:', err)\r\n\t\tuni.showToast({ title: '加载失败', icon: 'none' })\r\n\t}\r\n}\r\n\r\nconst canSubmit = computed((): boolean => {\r\n\tif (ratings.value.length === 0) return false\r\n\tfor (let i: number = 0; i < ratings.value.length; i++) {\r\n\t\tif (ratings.value[i] <= 0) return false\r\n\t}\r\n\treturn true\r\n})\r\n\r\nonLoad((options: any) => {\r\n\tif (options != null) {\r\n\t\tconst optObj = options as UTSJSONObject\r\n\t\torderId.value = optObj.getString('orderId') ?? ''\r\n\t\tif (orderId.value != '') loadOrderData()\r\n\t}\r\n})\r\n\r\n// 格式化时间\r\nconst formatTime = (timeStr?: string): string => {\r\n\tif (timeStr == null) return ''\r\n\tconst date = new Date(timeStr)\r\n\tconst year = date.getFullYear()\r\n\tconst month = (date.getMonth() + 1).toString().padStart(2, '0')\r\n\tconst day = date.getDate().toString().padStart(2, '0')\r\n\treturn `${year}-${month}-${day}`\r\n}\r\n\r\nconst getSpecText = (specs: any | null): string => {\r\n\tif (specs == null) return ''\r\n\tif (typeof specs === 'string') return specs as string\r\n\t\r\n\ttry {\r\n\t\tconst specObj = JSON.parse(JSON.stringify(specs)) as UTSJSONObject\r\n\t\tconst jsonStr = JSON.stringify(specObj)\r\n\t\tif (jsonStr == '{}' || jsonStr == 'null') return ''\r\n\t\t\r\n\t\t// 简单解析:直接返回 JSON 字符串(去除大括号)\r\n\t\tconst cleanStr = jsonStr.replace(/^\\{|\\}$/g, '').replace(/\"/g, '').replace(/:/g, ': ').replace(/,/g, '; ')\r\n\t\treturn cleanStr\r\n\t} catch (e) {\r\n\t\treturn ''\r\n\t}\r\n}\r\n\r\n// 获取评分文本\r\nconst getRatingText = (rating: number): string => {\r\n\tif (rating === 1) return '非常差'\r\n\tif (rating === 2) return '差'\r\n\tif (rating === 3) return '一般'\r\n\tif (rating === 4) return '好'\r\n\tif (rating === 5) return '非常好'\r\n\treturn '未评价'\r\n}\r\n\r\n// 设置商品评分\r\nconst setRating = (index: number, rating: number) => {\r\n\tratings.value[index] = rating\r\n\t// 触发响应式更新\r\n\tconst newRatings: number[] = []\r\n\tfor (let i: number = 0; i < ratings.value.length; i++) {\r\n\t\tnewRatings.push(ratings.value[i])\r\n\t}\r\n\tratings.value = newRatings\r\n}\r\n\r\nconst setMerchantRating = (type: string, rating: number) => {\r\n\tif (type === 'description') {\r\n\t\tmerchantRating.value.description = rating\r\n\t} else if (type === 'logistics') {\r\n\t\tmerchantRating.value.logistics = rating\r\n\t} else if (type === 'service') {\r\n\t\tmerchantRating.value.service = rating\r\n\t}\r\n}\r\n\r\n// 切换匿名\r\nconst toggleAnonymous = (event: any) => {\r\n\tconst eventObj = event as UTSJSONObject\r\n\tconst detailRaw = eventObj.get('detail')\r\n\tconst detail = detailRaw != null ? (detailRaw as UTSJSONObject) : (new UTSJSONObject())\r\n\tconst valueRaw = detail.get('value')\r\n\tanonymous.value = valueRaw != null ? (valueRaw as boolean) : false\r\n}\r\n\r\n// 上传图片\r\nconst uploadImage = async (index: number) => {\r\n\t// 检查图片数量限制\r\n\tif (images.value[index].length >= 9) {\r\n\t\tuni.showToast({\r\n\t\t\ttitle: '最多上传9张图片',\r\n\t\t\ticon: 'none'\r\n\t\t})\r\n\t\treturn\r\n\t}\r\n\r\n\t// 使用uni.chooseImage选择图片\r\n\tuni.chooseImage({\r\n\t\tcount: 9 - images.value[index].length,\r\n\t\tsizeType: ['compressed'],\r\n\t\tsourceType: ['album', 'camera'],\r\n\t\tsuccess: (res) => {\r\n\t\t\tconst resObj = res as UTSJSONObject\r\n\t\t\tconst tempFilesRaw = resObj.get('tempFilePaths')\r\n\t\t\tconst tempFiles = tempFilesRaw != null ? (tempFilesRaw as Array<string>) : []\r\n\t\t\t\r\n\t\t\tuni.showLoading({\r\n\t\t\t\ttitle: '上传中...'\r\n\t\t\t})\r\n\t\t\t\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tfor (let i: number = 0; i < tempFiles.length; i++) {\r\n\t\t\t\t\timages.value[index].push(tempFiles[i])\r\n\t\t\t\t}\r\n\t\t\t\tconst newImages: Array<Array<string>> = []\r\n\t\t\t\tfor (let i: number = 0; i < images.value.length; i++) {\r\n\t\t\t\t\tconst innerArray: Array<string> = []\r\n\t\t\t\t\tfor (let j: number = 0; j < images.value[i].length; j++) {\r\n\t\t\t\t\t\tinnerArray.push(images.value[i][j])\r\n\t\t\t\t\t}\r\n\t\t\t\t\tnewImages.push(innerArray)\r\n\t\t\t\t}\r\n\t\t\t\timages.value = newImages\r\n\t\t\t\t\r\n\t\t\t\tuni.hideLoading()\r\n\t\t\t\tuni.showToast({\r\n\t\t\t\t\ttitle: '上传成功',\r\n\t\t\t\t\ticon: 'success'\r\n\t\t\t\t})\r\n\t\t\t}, 1000)\r\n\t\t}\r\n\t})\r\n}\r\n\r\n// 删除图片\r\nconst deleteImage = (index: number, imgIndex: number) => {\r\n\timages.value[index].splice(imgIndex, 1)\r\n\t// 触发响应式更新\r\n\tconst newImages: string[][] = []\r\n\tfor (let i: number = 0; i < images.value.length; i++) {\r\n\t\tconst innerArray: string[] = []\r\n\t\tfor (let j: number = 0; j < images.value[i].length; j++) {\r\n\t\t\tinnerArray.push(images.value[i][j])\r\n\t\t}\r\n\t\tnewImages.push(innerArray)\r\n\t}\r\n\timages.value = newImages\r\n}\r\n\r\n// 获取当前用户ID\r\nconst getCurrentUserId = (): string => {\r\n\tconst userStore = uni.getStorageSync('userInfo')\r\n\tif (userStore == null) return ''\r\n\tconst userInfo = userStore as UTSJSONObject\r\n\treturn userInfo.getString('id') ?? ''\r\n}\r\n\r\nconst submitReview = async (): Promise<void> => {\r\n\tif (canSubmit.value === false || isSubmitting.value) return\r\n\r\n\tisSubmitting.value = true\r\n\r\n\ttry {\r\n\t\tconst userId = getCurrentUserId()\r\n\t\tif (userId == '') {\r\n\t\t\tuni.showToast({\r\n\t\t\t\ttitle: '用户信息错误',\r\n\t\t\t\ticon: 'none'\r\n\t\t\t})\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\ttype ProductReviewType = {\r\n\t\t\tuser_id: string,\r\n\t\t\tproduct_id: number,\r\n\t\t\torder_id: string,\r\n\t\t\trating: number,\r\n\t\t\tcontent: string,\r\n\t\t\timages: Array<string>,\r\n\t\t\tis_anonymous: boolean\r\n\t\t}\r\n\t\tconst productReviews: Array<UTSJSONObject> = []\r\n\t\tfor (let index: number = 0; index < orderItems.value.length; index++) {\r\n\t\t\tconst item = orderItems.value[index]\r\n\t\t\tconst reviewObj: UTSJSONObject = new UTSJSONObject()\r\n\t\t\treviewObj.set('user_id', userId)\r\n\t\t\treviewObj.set('product_id', item.product_id)\r\n\t\t\treviewObj.set('order_id', orderId.value)\r\n\t\t\treviewObj.set('rating', ratings.value[index])\r\n\t\t\treviewObj.set('content', contents.value[index] != '' ? contents.value[index] : '')\r\n\t\t\treviewObj.set('images', images.value[index])\r\n\t\t\treviewObj.set('is_anonymous', anonymous.value)\r\n\t\t\tproductReviews.push(reviewObj)\r\n\t\t}\r\n\r\n\t\tconst reviewsSuccess = await supabaseService.submitProductReviews(productReviews)\r\n\t\tif (reviewsSuccess == false) {\r\n\t\t\tuni.showToast({\r\n\t\t\t\ttitle: '提交失败',\r\n\t\t\t\ticon: 'none'\r\n\t\t\t})\r\n\t\t\tisSubmitting.value = false\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\tif (merchant.value != null) {\r\n\t\t\ttype MerchantReviewType = {\r\n\t\t\t\tuser_id: string,\r\n\t\t\t\tshop_id: string,\r\n\t\t\t\torder_id: string,\r\n\t\t\t\tdescription_rating: number,\r\n\t\t\t\tlogistics_rating: number,\r\n\t\t\t\tservice_rating: number\r\n\t\t\t}\r\n\t\t\tconst merchantReviewObj: UTSJSONObject = new UTSJSONObject()\r\n\t\t\tmerchantReviewObj.set('user_id', userId)\r\n\t\t\tmerchantReviewObj.set('shop_id', merchant.value.id)\r\n\t\t\tmerchantReviewObj.set('order_id', orderId.value)\r\n\t\t\tmerchantReviewObj.set('description_rating', merchantRating.value.description)\r\n\t\t\tmerchantReviewObj.set('logistics_rating', merchantRating.value.logistics)\r\n\t\t\tmerchantReviewObj.set('service_rating', merchantRating.value.service)\r\n\r\n\t\t\tawait supabaseService.submitShopReview(merchantReviewObj)\r\n\t\t}\r\n\r\n\t\tawait supabaseService.updateOrderStatus(orderId.value, 4)\r\n\r\n\t\tuni.showToast({\r\n\t\t\ttitle: '评价成功',\r\n\t\t\ticon: 'success',\r\n\t\t\tduration: 2000\r\n\t\t})\r\n\r\n\t\t// 跳转到评价成功页面\r\n\t\tsetTimeout(() => {\r\n\t\t\tuni.navigateBack()\r\n\t\t}, 1500)\r\n\r\n\t} catch (err) {\r\n\t\tconsole.error('提交评价失败:', err)\r\n\t\tuni.showToast({\r\n\t\t\ttitle: '提交失败',\r\n\t\t\ticon: 'none'\r\n\t\t})\r\n\t} finally {\r\n\t\tisSubmitting.value = false\r\n\t}\r\n}\r\n\r\n// 返回\r\nconst goBack = (): void => {\r\n\tuni.navigateBack()\r\n}\r\n</script>\r\n\r\n<style scoped>\r\n.review-page {\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tflex: 1;\r\n\tbackground-color: #f5f5f5;\r\n}\r\n\r\n.review-header {\r\n\tbackground-color: #ffffff;\r\n\tpadding: 10px 15px;\r\n\theight: 44px;\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\talign-items: center;\r\n\tjustify-content: space-between;\r\n\tborder-bottom: 1px solid #f0f0f0;\r\n\tposition: fixed;\r\n\ttop: 0;\r\n\tleft: 0;\r\n\tright: 0;\r\n\tz-index: 100;\r\n}\r\n\r\n.header-back {\r\n\twidth: 44px;\r\n\theight: 44px;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: flex-start;\r\n}\r\n\r\n.back-icon {\r\n\twidth: 20px;\r\n\theight: 20px;\r\n}\r\n\r\n.header-title-placeholder {\r\n\tflex: 1;\r\n}\r\n\r\n.header-right {\r\n\twidth: 44px;\r\n}\r\n\r\n.review-content {\r\n\tflex: 1;\r\n}\r\n\r\n.order-section {\r\n\tbackground-color: #ffffff;\r\n\tpadding: 15px;\r\n\tmargin-bottom: 10px;\r\n\tdisplay: flex;\r\n\tjustify-content: space-between;\r\n\talign-items: center;\r\n}\r\n\r\n.order-no {\r\n\tfont-size: 14px;\r\n\tcolor: #333333;\r\n}\r\n\r\n.order-time {\r\n\tfont-size: 12px;\r\n\tcolor: #999999;\r\n}\r\n\r\n.products-section {\r\n\tbackground-color: #ffffff;\r\n\tmargin-bottom: 10px;\r\n}\r\n\r\n.product-review {\r\n\tpadding: 15px;\r\n\tborder-bottom: 1px solid #f5f5f5;\r\n}\r\n\r\n.product-header {\r\n\tdisplay: flex;\r\n\tmargin-bottom: 20px;\r\n}\r\n\r\n.product-image {\r\n\twidth: 60px;\r\n\theight: 60px;\r\n\tborder-radius: 5px;\r\n\tmargin-right: 15px;\r\n}\r\n\r\n.product-info {\r\n\tflex: 1;\r\n}\r\n\r\n.product-name {\r\n\tfont-size: 14px;\r\n\tcolor: #333333;\r\n\tline-height: 1.4;\r\n\tmargin-bottom: 5px;\r\n\t/* display: block; removed */\r\n}\r\n\r\n.product-spec {\r\n\tfont-size: 12px;\r\n\tcolor: #999999;\r\n\t/* display: block; removed */\r\n}\r\n\r\n.rating-section {\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\talign-items: center;\r\n\tmargin-bottom: 20px;\r\n\tpadding: 5px 0;\r\n}\r\n\r\n.rating-label {\r\n\tfont-size: 15px;\r\n\tcolor: #333333;\r\n\tfont-weight: bold;\r\n\tmargin-right: 20px;\r\n}\r\n\r\n.rating-stars {\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\talign-items: center;\r\n\tmargin-right: 15px;\r\n}\r\n\r\n.star-icon {\r\n\tfont-size: 26px;\r\n\tmargin-right: 8px;\r\n\tcolor: #e0e0e0;\r\n\ttransition: transform 0.1s ease;\r\n}\r\n\r\n.star-icon.active {\r\n\tcolor: #ff5000;\r\n\ttransform: scale(1.1);\r\n}\r\n\r\n.rating-text {\r\n\tfont-size: 14px;\r\n\tcolor: #999999;\r\n\tmargin-left: 5px;\r\n}\r\n\r\n.rating-stars.small {\r\n\t/* gap: 5px; removed */\r\n}\r\n\r\n.content-section {\r\n\tmargin-bottom: 15px;\r\n}\r\n\r\n.review-textarea {\r\n\twidth: 100%;\r\n\tmin-height: 80px;\r\n\tpadding: 10px;\r\n\tborder: 1px solid #e5e5e5;\r\n\tborder-radius: 8px;\r\n\tfont-size: 14px;\r\n\tcolor: #333333;\r\n\tline-height: 1.4;\r\n}\r\n\r\n.word-count {\r\n\t/* display: block; removed */\r\n\ttext-align: right;\r\n\tfont-size: 12px;\r\n\tcolor: #999999;\r\n\tmargin-top: 5px;\r\n}\r\n\r\n.images-section {\r\n\tmargin-bottom: 15px;\r\n}\r\n\r\n.images-label {\r\n\t/* display: block; removed */\r\n\tfont-size: 14px;\r\n\tcolor: #333333;\r\n\tmargin-bottom: 10px;\r\n}\r\n\r\n.images-grid {\r\n\tdisplay: flex;\r\n\tflex-wrap: wrap;\r\n\t/* gap: 10px; removed */\r\n}\r\n\r\n.image-item {\r\n\tmargin-right: 10px;\r\n\tmargin-bottom: 10px;\r\n\twidth: 70px;\r\n\theight: 70px;\r\n\tborder-radius: 5px;\r\n\toverflow: hidden;\r\n\tposition: relative;\r\n}\r\n\r\n.uploaded-image {\r\n\twidth: 100%;\r\n\theight: 100%;\r\n}\r\n\r\n.delete-image {\r\n\tposition: absolute;\r\n\ttop: 2px;\r\n\tright: 2px;\r\n\twidth: 16px;\r\n\theight: 16px;\r\n\tborder-radius: 8px;\r\n\tbackground-color: rgba(0, 0, 0, 0.5);\r\n\tcolor: #ffffff;\r\n\tfont-size: 12px;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n}\r\n\r\n.upload-btn {\r\n\twidth: 70px;\r\n\theight: 70px;\r\n\tborder: 1px dashed #cccccc;\r\n\tborder-radius: 5px;\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n}\r\n\r\n.upload-icon {\r\n\tfont-size: 24px;\r\n\tcolor: #999999;\r\n\tmargin-bottom: 5px;\r\n}\r\n\r\n.upload-text {\r\n\tfont-size: 10px;\r\n\tcolor: #999999;\r\n}\r\n\r\n.anonymous-section {\r\n\tmargin-bottom: 15px;\r\n}\r\n\r\n.anonymous-switch {\r\n\tdisplay: flex;\r\n\tjustify-content: space-between;\r\n\talign-items: center;\r\n\tmargin-bottom: 5px;\r\n}\r\n\r\n.switch-label {\r\n\tfont-size: 14px;\r\n\t/* display: block; removed */\r\n}\r\n\r\n.anonymous-tip {\r\n\t/* display: block; removed */\r\n\tfont-size: 12px;\r\n\tcolor: #999999;\r\n}\r\n\r\n.merchant-section {\r\n\tbackground-color: #ffffff;\r\n\tpadding: 20px 15px;\r\n\tmargin-top: 15px;\r\n\tborder-radius: 12px;\r\n}\r\n\r\n.section-title {\r\n\tfont-size: 16px;\r\n\tfont-weight: bold;\r\n\tcolor: #333333;\r\n\tmargin-bottom: 20px;\r\n\tpadding-left: 10px;\r\n\tborder-left: 4px solid #ff5000;\r\n}\r\n\r\n.merchant-rating {\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\tjustify-content: space-between;\r\n\talign-items: center;\r\n\tmargin-bottom: 20px;\r\n\tpadding: 0 5px;\r\n}\r\n\r\n.rating-item {\r\n\tfont-size: 14px;\r\n\tcolor: #666666;\r\n\tflex: 1;\r\n}\r\n\r\n.merchant-rating .rating-stars.small {\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\talign-items: center;\r\n}\r\n\r\n.merchant-rating .rating-stars.small .star-icon {\r\n\tfont-size: 20px;\r\n\tmargin-right: 5px;\r\n\tcolor: #e0e0e0;\r\n}\r\n\r\n.merchant-rating .rating-stars.small .star-icon.active {\r\n\tcolor: #ff5000;\r\n}\r\n\r\n.tips-section {\r\n\tbackground-color: #ffffff;\r\n\tpadding: 15px;\r\n\tmargin-bottom: 10px;\r\n}\r\n\r\n.tip-title {\r\n\t/* display: block; removed */\r\n\tfont-size: 16px;\r\n\tfont-weight: bold;\r\n\tcolor: #333333;\r\n\tmargin-bottom: 10px;\r\n}\r\n\r\n.tip-item {\r\n\t/* display: block; removed */\r\n\tfont-size: 12px;\r\n\tcolor: #666666;\r\n\tline-height: 1.6;\r\n\tmargin-bottom: 5px;\r\n}\r\n\r\n.submit-section {\r\n\tbackground-color: #ffffff;\r\n\tpadding: 15px;\r\n\tborder-top: 1px solid #e5e5e5;\r\n}\r\n\r\n.submit-btn {\r\n\tbackground-color: #007aff;\r\n\tcolor: #ffffff;\r\n\theight: 50px;\r\n\tborder-radius: 25px;\r\n\tfont-size: 16px;\r\n\tfont-weight: bold;\r\n\tborder: none;\r\n}\r\n\r\n.submit-btn.disabled {\r\n\tbackground-color: #cccccc;\r\n\topacity: 0.6;\r\n}\r\n</style>\r\n\r\n",null,null,null,null,null],"names":[],"mappings":"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"} |