diff --git a/doc_mall/consumer/sql/update_category_icons.sql b/doc_mall/consumer/sql/update_category_icons.sql new file mode 100644 index 00000000..950f18fb --- /dev/null +++ b/doc_mall/consumer/sql/update_category_icons.sql @@ -0,0 +1,80 @@ +-- 更新分类图标为 emoji 格式 +-- 运行此脚本修复分类图标显示问题 + +-- 更新一级分类图标 +UPDATE public.ml_categories +SET icon_url = + CASE + WHEN slug = 'digital' THEN '📱' + WHEN slug = 'fashion' THEN '👕' + WHEN slug = 'home' THEN '🏠' + WHEN slug = 'food' THEN '🍎' + WHEN slug = 'beauty' THEN '💄' + WHEN slug = 'sports' THEN '⚽' + WHEN slug = 'books' THEN '📚' + WHEN slug = 'baby' THEN '👶' + WHEN slug = 'health' THEN '💊' + ELSE icon_url + END +WHERE level = 1; + +-- 更新二级分类图标 +UPDATE public.ml_categories +SET icon_url = + CASE + -- 数码电器二级分类 + WHEN slug = 'mobile' THEN '📱' + WHEN slug = 'computer' THEN '💻' + WHEN slug = 'appliance' THEN '🎥' + WHEN slug = 'accessories' THEN '🔌' + -- 服装鞋帽二级分类 + WHEN slug = 'mens-wear' THEN '👔' + WHEN slug = 'womens-wear' THEN '👗' + WHEN slug = 'mens-shoes' THEN '👞' + WHEN slug = 'womens-shoes' THEN '👠' + -- 家居用品二级分类 + WHEN slug = 'furniture' THEN '🛋️' + WHEN slug = 'decoration' THEN '🖼️' + WHEN slug = 'kitchen' THEN '🍳' + WHEN slug = 'daily' THEN '🧹' + -- 食品饮料二级分类 + WHEN slug = 'fruits' THEN '🍊' + WHEN slug = 'meat' THEN '🥩' + WHEN slug = 'snacks' THEN '🍪' + WHEN slug = 'drinks' THEN '🍺' + -- 美妆护肤二级分类 + WHEN slug = 'skincare' THEN '🧴' + WHEN slug = 'makeup' THEN '💅' + -- 运动户外二级分类 + WHEN slug = 'outdoor' THEN '🏕️' + WHEN slug = 'fitness' THEN '🏋️' + -- 母婴用品二级分类 + WHEN slug = 'toys' THEN '🧸' + WHEN slug = 'feeding' THEN '🍼' + -- 图书文娱二级分类 + WHEN slug = 'stationery' THEN '✏️' + WHEN slug = 'audio' THEN '🎵' + ELSE icon_url + END +WHERE level = 2; + +-- 如果有 icon_url 为 icon-xxx 格式的记录,也进行更新 +UPDATE public.ml_categories +SET icon_url = + CASE + WHEN icon_url = 'icon-digital' THEN '📱' + WHEN icon_url = 'icon-fashion' THEN '👕' + WHEN icon_url = 'icon-home' THEN '🏠' + WHEN icon_url = 'icon-food' THEN '🍎' + WHEN icon_url = 'icon-beauty' THEN '💄' + WHEN icon_url = 'icon-sports' THEN '⚽' + WHEN icon_url = 'icon-books' THEN '📚' + WHEN icon_url = 'icon-baby' THEN '👶' + WHEN icon_url = 'icon-health' THEN '💊' + ELSE icon_url + END +WHERE icon_url LIKE 'icon-%'; + +-- 查看更新结果 +SELECT name, slug, icon_url FROM public.ml_categories WHERE level = 1 ORDER BY sort_order; +SELECT name, slug, icon_url FROM public.ml_categories WHERE level = 2 ORDER BY sort_order; diff --git a/fix_merchant_id.py b/fix_merchant_id.py new file mode 100644 index 00000000..5bb3aa76 --- /dev/null +++ b/fix_merchant_id.py @@ -0,0 +1,28 @@ +import re + +# Read the file +with open('pages/mall/consumer/product-detail.uvue', 'r', encoding='utf-8') as f: + content = f.read() + +# Find and replace the selectedItem object +# Looking for the pattern with quantity as the last property +old_pattern = r"(const selectedItem = \{[^}]+quantity: this\.quantity as number)\s*\}" + +new_text = r"""\1, + merchant_id: this.product.merchant_id ?? '', + shop_id: this.product.merchant_id ?? '', + shop_name: this.merchant?.shop_name ?? '' + }""" + +# Check if pattern exists +if 'quantity: this.quantity as number' in content and 'selectedItem' in content: + content = re.sub(old_pattern, new_text, content, flags=re.DOTALL) + print("Pattern found and replaced!") +else: + print("Pattern not found!") + +# Write back +with open('pages/mall/consumer/product-detail.uvue', 'w', encoding='utf-8') as f: + f.write(content) + +print("File updated successfully!") diff --git a/fix_merchant_id2.py b/fix_merchant_id2.py new file mode 100644 index 00000000..aa19700f --- /dev/null +++ b/fix_merchant_id2.py @@ -0,0 +1,50 @@ +import re + +# Read the file +with open('pages/mall/consumer/product-detail.uvue', 'r', encoding='utf-8') as f: + content = f.read() + +# Find the exact text to replace +old_text = '''const selectedItem = { + id: this.selectedSkuId, + product_id: this.product.id, + sku_id: this.selectedSkuId, + product_name: this.product.name, + product_image: (sku != null && sku.image_url != null) ? sku!.image_url : this.product.images[0], + sku_specifications: sku != null ? sku!.specifications : {}, + price: parseFloat((sku != null ? sku!.price : this.product.price).toString()).toFixed(2) as string, + quantity: this.quantity as number + }''' + +new_text = '''const selectedItem = { + id: this.selectedSkuId, + product_id: this.product.id, + sku_id: this.selectedSkuId, + product_name: this.product.name, + product_image: (sku != null && sku.image_url != null) ? sku!.image_url : this.product.images[0], + sku_specifications: sku != null ? sku!.specifications : {}, + price: parseFloat((sku != null ? sku!.price : this.product.price).toString()).toFixed(2) as string, + quantity: this.quantity as number, + merchant_id: this.product.merchant_id ?? '', + shop_id: this.product.merchant_id ?? '', + shop_name: this.merchant?.shop_name ?? '' + }''' + +if old_text in content: + content = content.replace(old_text, new_text) + print("Found and replaced!") +else: + print("Old text not found, trying alternative...") + # Try with tab characters + old_text_alt = old_text.replace(' ', '\t\t\t') + if old_text_alt in content: + content = content.replace(old_text_alt, new_text.replace(' ', '\t\t\t')) + print("Found with tabs and replaced!") + else: + print("Still not found") + +# Write back +with open('pages/mall/consumer/product-detail.uvue', 'w', encoding='utf-8') as f: + f.write(content) + +print("Done!") diff --git a/pages-simple.json b/pages-simple.json deleted file mode 100644 index 131f2bff..00000000 --- a/pages-simple.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "pages": [ - { - "path": "pages/minimal", - "style": { - "navigationBarTitleText": "最小测试" - } - } - ] -} \ No newline at end of file diff --git a/pages/mall/consumer/666/index.uvue b/pages/mall/consumer/666/index.uvue deleted file mode 100644 index 1b42741b..00000000 --- a/pages/mall/consumer/666/index.uvue +++ /dev/null @@ -1,2526 +0,0 @@ - - - - - - diff --git a/pages/mall/consumer/666/supabaseService.uts b/pages/mall/consumer/666/supabaseService.uts deleted file mode 100644 index a4b3550d..00000000 --- a/pages/mall/consumer/666/supabaseService.uts +++ /dev/null @@ -1,3888 +0,0 @@ -import supa from '@/components/supadb/aksupainstance.uts' -import type { AkReqResponse } from '@/uni_modules/ak-req/index.uts' - -// 使用单例 Supabase 客户端 -// const supa = createClient(SUPA_URL, SUPA_KEY) - -// 类型定义 -export type Brand = { - id: string - name: string - logo_url: string - description: string -} - -export type Category = { - id: string - name: string - icon: string - description: string - color: string - level?: number - parent_id?: string - slug?: string - created_at?: string -} - -export type Product = { - id: string - category_id: string - merchant_id: string - name: string - subtitle?: string - description?: string - base_price: number - market_price?: number - cost_price?: number - main_image_url?: string - image_urls?: string // JSON string array - video_urls?: string // JSON string array - sale_count?: number - view_count?: number - total_stock?: number - available_stock?: number - is_hot?: boolean - is_new?: boolean - is_featured?: boolean - status?: number - rating_avg?: number - rating_count?: number - tags?: string // array string in DB - attributes?: string // JSON string - created_at?: string - updated_at?: string - // Alias fields for compatibility - price?: number - original_price?: number - stock?: number - sales?: number - images?: string - cover?: string - // View fields - brand_name?: string - category_name?: string - shop_name?: string - merchant_name?: string -} - -export type Shop = { - id: string - merchant_id: string - shop_name: string - shop_logo?: string - shop_banner?: string - description?: string - contact_name?: string - contact_phone?: string - rating_avg?: number - total_sales?: number - product_count?: number - total_sales_count?: number - created_at?: string -} - -export type CartItem = { - id: string - user_id: string - product_id: string - sku_id?: string - merchant_id?: string - quantity: number - selected: boolean - product_name?: string - product_image?: string - product_price?: number - product_specification?: string - shop_id?: string - shop_name?: string - created_at?: string - updated_at?: string -} - -export type UserAddress = { - id: string - user_id: string - recipient_name: string - phone: string - province: string - city: string - district: string - detail_address: string - postal_code?: string - is_default: boolean - label?: string - created_at?: string - updated_at?: string -} - -export type UserCoupon = { - id: string - user_id: string - template_id: string - coupon_code: string - status: number // 1: unused, 2: used, 3: expired - received_at: string - expire_at: string - used_at?: string - // join fields from template or view - template_name?: string - amount?: number - min_spend?: number - name?: string - title?: string -} - -export type ChatRoom = { - id: string - user_id: string - merchant_id: string - shop_name: string - shop_logo?: string - last_message?: string - last_message_at?: string - unread_count: number - is_top: boolean - created_at?: string - updated_at?: string -} - -export type Notification = { - id: string - user_id: string - type: string - title: string - content: string - icon_url?: string - link_url?: string - is_read: boolean - extra_data?: string - created_at?: string -} - -export type ChatMessage = { - id: string - session_id?: string - sender_id?: string - receiver_id?: string - content: string - msg_type: string - is_read: boolean - is_from_user: boolean - extra_data?: string - created_at?: string -} - -export type PaginatedResponse = { - data: T[] - total: number - page: number - limit: number - hasmore: boolean -} - -export type ProductSku = { - id: string - product_id: string - sku_code: string - specifications: string // JSON string - price: number - market_price?: number - cost_price?: number - stock?: number - warning_stock?: number - image_url?: string - weight?: number - status?: number - created_at?: string -} - -export type AddAddressParams = { - recipient_name: string - phone: string - province: string - city: string - district: string - detail_address: string - postal_code?: string - is_default?: boolean - label?: string -} - -export type UpdateAddressParams = { - recipient_name?: string - phone?: string - province?: string - city?: string - district?: string - detail_address?: string - postal_code?: string - is_default?: boolean - label?: string -} - -export type CreateOrderParams = { - merchant_id: string - product_amount: number - shipping_fee: number - total_amount: number - shipping_address: any - items: any[] -} - -export type ShopOrderParams = { - shipping_address: any - shopGroups: any[] - deliveryFee: number - discountAmount: number -} - -export type ShopOrderResponse = { - success: boolean - orderIds: string[] - error?: string -} - -export type RefundResponse = { - success: boolean - message: string -} - -export type ConfirmReceiptResponse = { - success: boolean - error?: string -} - -class SupabaseService { - // 获取当前用户ID - public getCurrentUserId(): string | null { - try { - // 1. 优先从 Supabase 会话获取 - const session = supa.getSession() - if (session != null && session.user != null) { - return session.user.getString('id') - } - - // 2. 尝试从 Storage 恢复 Session (针对 App 重启后内存丢失的情况) - // 注意:这里无法异步调用 hydrate,所以只能依赖 UI 层或 init 层的预加载 - // 但我们可以返回本地存储 ID 作为 fallback,前提是 Token 有效 - - // 后备:尝试从本地存储获取 - const userId = uni.getStorageSync('user_id') - return userId != null ? userId as string : null - } catch (e) { - console.error('获取用户ID失败:', e) - return null - } - } - - // 确保会话有效 (异步) - async ensureSession(): Promise { - let session = supa.getSession() - if (session.user == null) { - console.log('Session user is null, attempting to hydrate from storage...') - await supa.hydrateSessionFromStorage() - session = supa.getSession() - } - - if (session.user != null) { - // 同步 user_id 到 storage 保持一致 - const uid = session.user!!.getString('id') - if (uid != null) { - uni.setStorageSync('user_id', uid) - return uid - } - } - return this.getCurrentUserId() - } - - // 获取所有分类 - async getCategories(): Promise { - try { - const response = await supa - .from('ml_categories') - .select('*') - .order('name', { ascending: true }) - .execute() - - if (response.error != null) { - console.error('获取分类失败:', response.error) - return [] - } - - return response.data as Category[] - } catch (error) { - console.error('获取分类异常:', error) - return [] - } - } - - // 获取一级分类 - async getParentCategories(): Promise { - try { - const response = await supa - .from('ml_categories') - .select('*') - .is('parent_id', null) - .order('sort_order', { ascending: true }) - .execute() - - if (response.error != null) { - console.error('获取一级分类失败:', response.error) - return [] - } - - const rawData = response.data - if (rawData == null) { - return [] - } - - const categories: Category[] = [] - const rawList = rawData as Array - for (let i = 0; i < rawList.length; i++) { - const item = rawList[i] - const icon = this.getCategoryIcon(item) - const cat: Category = { - id: item['id'] as string, - name: item['name'] as string, - icon: icon, - description: (item['description'] as string) ?? '', - color: (item['color'] as string) ?? '#4CAF50', - level: 1, - slug: item['slug'] as string - } - categories.push(cat) - } - return categories - } catch (error) { - console.error('获取一级分类异常:', error) - return [] - } - } - - // 获取子分类 - async getSubCategories(parentId: string): Promise { - try { - const response = await supa - .from('ml_categories') - .select('*') - .eq('parent_id', parentId) - .order('sort_order', { ascending: true }) - .execute() - - if (response.error != null) { - console.error('获取子分类失败:', response.error) - return [] - } - - const rawData = response.data - if (rawData == null) { - return [] - } - - const categories: Category[] = [] - const rawList = rawData as Array - for (let i = 0; i < rawList.length; i++) { - const item = rawList[i] - const icon = this.getCategoryIcon(item) - const cat: Category = { - id: item['id'] as string, - name: item['name'] as string, - icon: icon, - description: (item['description'] as string) ?? '', - color: (item['color'] as string) ?? '#4CAF50', - level: 2, - parent_id: item['parent_id'] as string, - slug: item['slug'] as string - } - categories.push(cat) - } - return categories - } catch (error) { - console.error('获取子分类异常:', error) - return [] - } - } - - // 获取分类图标 - getCategoryIcon(item: UTSJSONObject): string { - const iconUrl = (item['icon_url'] as string) ?? '' - const slug = (item['slug'] as string) ?? '' - - // 如果 icon_url 已经是 emoji,直接返回 - if (iconUrl.length > 0 && iconUrl.length <= 4) { - return iconUrl - } - - // slug 映射到 emoji - if (slug === 'digital') return '📱' - if (slug === 'fashion') return '👕' - if (slug === 'home') return '🏠' - if (slug === 'food') return '🍎' - if (slug === 'beauty') return '💄' - if (slug === 'sports') return '⚽' - if (slug === 'books') return '📚' - if (slug === 'baby') return '👶' - if (slug === 'health') return '💊' - // 二级分类 - if (slug === 'mobile') return '📱' - if (slug === 'computer') return '💻' - if (slug === 'appliance') return '🎥' - if (slug === 'accessories') return '🔌' - if (slug === 'mens-wear') return '👔' - if (slug === 'womens-wear') return '👗' - if (slug === 'mens-shoes') return '👞' - if (slug === 'womens-shoes') return '👠' - if (slug === 'furniture') return '🛋️' - if (slug === 'decoration') return '🖼️' - if (slug === 'kitchen') return '🍳' - if (slug === 'daily') return '🧹' - if (slug === 'fruits') return '🍊' - if (slug === 'meat') return '🥩' - if (slug === 'snacks') return '🍪' - if (slug === 'drinks') return '🍺' - - return '📂' - } - - // 获取所有品牌 - async getBrands(): Promise { - try { - const response = await supa - .from('ml_brands') - .select('*') - .eq('is_active', true) - .order('name', { ascending: true }) - .execute() - - if (response.error != null) { - console.error('获取品牌失败:', response.error) - return [] - } - - return response.data as Brand[] - } catch (error) { - console.error('获取品牌异常:', error) - return [] - } - } - - // 获取指定分类的商品 - async getProductsByCategory( - categoryId: string, - page: number = 1, - limit: number = 20 - ): Promise> { - try { - const response = await supa - .from('ml_products_detail_view') - .select('*', { count: 'exact' }) - .eq('category_id', categoryId) - .eq('status', 1) - .order('sale_count', { ascending: false }) - .page(page) - .limit(limit) - .execute() - - if (response.error != null) { - console.error('获取商品失败:', response.error) - return { - data: [] as Product[], - total: 0, - page, - limit, - hasmore: false - } - } - - return { - data: response.data as Product[], - total: response.total ?? 0, - page, - limit, - hasmore: response.hasmore ?? false - } - } catch (error) { - console.error('获取商品异常:', error) - return { - data: [] as Product[], - total: 0, - page, - limit, - hasmore: false - } - } - } - - // 根据商品ID获取SKU列表 - async getProductSkus(productId: string): Promise { - try { - const response = await supa - .from('ml_product_skus') - .select('*') - .eq('product_id', productId) - .eq('status', 1) - .execute() - - if (response.error != null) { - console.error('获取商品SKU失败:', response.error) - return [] - } - - return response.data as ProductSku[] - } catch (error) { - console.error('获取商品SKU异常:', error) - return [] - } - } - - // 搜索商品 - async searchProducts( - keyword: string, - page: number = 1, - limit: number = 20, - sortBy: string = 'sales', - ascending: boolean = false - ): Promise> { - try { - let query = supa - .from('ml_products_detail_view') - .select('*', { count: 'exact' }) - .eq('status', 1) - .or(`name.ilike.%${keyword}%,description.ilike.%${keyword}%,subtitle.ilike.%${keyword}%,brand_name.ilike.%${keyword}%`) - - // 根据sortBy和ascending设置排序 - if (sortBy === 'price') { - query = query.order('base_price', { ascending }) - } else if (sortBy === 'sales' || sortBy === 'sale_count') { - query = query.order('sale_count', { ascending: false }) // 销量总是降序 - } else { - // 默认按销量降序 - query = query.order('sale_count', { ascending: false }) - } - - const response = await query - .page(page) - .limit(limit) - .execute() - - if (response.error != null) { - console.error('搜索商品失败:', response.error) - return { - data: [] as Product[], - total: 0, - page, - limit, - hasmore: false - } - } - - return { - data: response.data as Product[], - total: response.total ?? 0, - page, - limit, - hasmore: response.hasmore ?? false - } - } catch (error) { - console.error('搜索商品异常:', error) - return { - data: [] as Product[], - total: 0, - page, - limit, - hasmore: false - } - } - } - - // 搜索店铺 - async searchShops( - keyword: string, - page: number = 1, - limit: number = 20 - ): Promise> { - try { - const response = await supa - .from('ml_shops') - .select('*', { count: 'exact' }) - .eq('status', 1) - .ilike('shop_name', `%${keyword}%`) - .order('product_count', { ascending: false }) - .page(page) - .limit(limit) - .execute() - - if (response.error != null) { - console.error('搜索店铺失败:', response.error) - return { data: [] as Shop[], total: 0, page, limit, hasmore: false } - } - - // 映射数据确保类型安全 - const shops: Shop[] = [] - const dataList = response.data as any[] - for (let i = 0; i < dataList.length; i++) { - shops.push(dataList[i] as Shop) - } - - return { - data: shops, - total: response.total ?? 0, - page, - limit, - hasmore: response.hasmore ?? false - } - } catch (error) { - console.error('搜索店铺异常:', error) - return { data: [] as Shop[], total: 0, page, limit, hasmore: false } - } - } - - // 获取单个商品详情 - async getProductById(productId: string): Promise { - try { - const response = await supa - .from('ml_products_detail_view') - .select('*') - .eq('id', productId) - .single() - .executeAs() - - if (response.error != null) { - console.error('获取商品详情失败:', response.error) - return null - } - - return response.data as Product - } catch (error) { - console.error('获取商品详情异常:', error) - return null - } - } - - // --- 关注店铺相关 --- - - // 检查是否已关注店铺 - async isShopFollowed(shopId: string, userId: string): Promise { - try { - const res = await supa - .from('ml_shop_follows') - .select('id', { count: 'exact' }) - .eq('shop_id', shopId) - .eq('user_id', userId) - .limit(1) - .execute() - - return (res.total != null && res.total! > 0) - } catch (e) { - console.error('Check follow error:', e) - return false - } - } - - // 关注店铺 - async followShop(shopId: string, userId: string): Promise { - try { - const res = await supa - .from('ml_shop_follows') - .insert({ - user_id: userId, - shop_id: shopId - }) - .execute() - - return res.error == null - } catch (e) { - console.error('Follow shop error:', e) - return false - } - } - - // 取消关注 - async unfollowShop(shopId: string, userId: string): Promise { - try { - const res = await supa - .from('ml_shop_follows') - .eq('shop_id', shopId) - .eq('user_id', userId) - .delete() - .execute() - - return res.error == null - } catch (e) { - console.error('Unfollow shop error:', e) - return false - } - } - - // 获取我关注的店铺列表 - async getFollowedShops(userId: string): Promise { - try { - // 关联查询店铺信息 - const res = await supa - .from('ml_shop_follows') - .select('*, ml_shops(*)') - .eq('user_id', userId) - .order('created_at', { ascending: false }) - .execute() - - if (res.error != null) { - console.error('getFollowedShops error:', res.error) - return [] - } - - return res.data as any[] - } catch (e) { - console.error('getFollowedShops exception:', e) - return [] - } - } - - // 根据商户ID获取店铺信息 - async getShopByMerchantId(merchantId: string): Promise { - try { - // 1. Try querying by merchant_id - let response = await supa - .from('ml_shops') - .select('*') - .eq('merchant_id', merchantId) - .limit(1) - .execute() - - if (response.error == null && response.data != null && (response.data as any[]).length > 0) { - return (response.data as any[])[0] as Shop - } - - // 2. Fallback: Try querying by id (Maybe the passed ID is the Shop ID?) - console.log('getShopByMerchantId: merchant_id not found, trying id...', merchantId) - response = await supa - .from('ml_shops') - .select('*') - .eq('id', merchantId) - .limit(1) - .execute() - - if (response.error == null && response.data != null && (response.data as any[]).length > 0) { - console.log('Found shop by ID instead of MerchantID') - // Fix the merchant_id reference if we found it by ID - const shop = (response.data as any[])[0] as Shop - return shop - } - - if (response.error != null) { - console.error('获取店铺信息失败:', response.error) - } - return null - } catch (error) { - console.error('获取店铺信息异常:', error) - return null - } - } - - // 根据商户ID获取商品列表 - async getProductsByMerchantId(merchantId: string, page: number = 1, limit: number = 20): Promise> { - try { - console.log('getProductsByMerchantId querying for:', merchantId) - - // 1. Try fetching from view strictly first - let query = supa - .from('ml_products_detail_view') - .select('*', { count: 'exact' }) - .eq('merchant_id', merchantId) - // .eq('status', 1) // Temporarily disabled status check to see if products exist at all - .order('created_at', { ascending: false }) - .page(page) - .limit(limit) - - const response = await query.execute() - - // 检查视图结果:如果有错误 OR 数据为空,都尝试去查原始表 - if (response.error != null || (response.data != null && (response.data as any[]).length === 0)) { - if (response.error != null) { - console.error('获取商户商品失败 (View):', response.error) - } else { - console.log('View returned 0 products, trying raw table fallback...') - } - - // Fallback: Try raw table - console.log('Falling back to raw ml_products table...') - const query2 = supa - .from('ml_products') - .select('*', { count: 'exact' }) - .eq('merchant_id', merchantId) - // .eq('status', 1) // Also disabled here - .order('created_at', { ascending: false }) - .page(page) - .limit(limit) - - const res2 = await query2.execute() - if (res2.error != null) { - console.error('获取商户商品失败 (Raw):', res2.error) - return {data:[] as Product[], total:0, page, limit, hasmore:false} - } - - console.log(`Fallback (Raw) found: ${(res2.data as any[]).length} products`) - - // Map raw data to Product interface (manually if needed for extra safety) - const mappedData: Product[] = [] - const rawData = res2.data as any[] - for(let i = 0; i < rawData.length; i++) { - mappedData.push(rawData[i] as Product) - } - - return { - data: mappedData, - total: res2.total ?? 0, - page, - limit, - hasmore: res2.hasmore ?? false - } - } - - console.log(`Merchant products found: ${(response.data as any[]).length}`) - return { - data: response.data as Product[], - total: response.total ?? 0, - page, - limit, - hasmore: response.hasmore ?? false - } - } catch (error) { - console.error('获取商户商品异常:', error) - return { - data: [] as Product[], - total: 0, - page, - limit, - hasmore: false - } - } - } - - // 获取热销商品(按销量排序) - async getHotProducts(limit: number = 10): Promise { - try { - const response = await supa - .from('ml_products_detail_view') - .select('*') - .eq('is_hot', true) - .eq('status', 1) - .order('sale_count', { ascending: false }) - .limit(limit) - .execute() - - if (response.error != null) { - console.error('获取热销商品失败:', response.error) - return [] - } - - return response.data as Product[] - } catch (error) { - console.error('获取热销商品异常:', error) - return [] - } - } - - // 获取按价格排序的商品(升序:从低到高) - async getProductsByPrice(limit: number = 10, ascending: boolean = true): Promise { - try { - const response = await supa - .from('ml_products_detail_view') - .select('*') - .eq('status', 1) - .order('base_price', { ascending }) - .limit(limit) - .execute() - - if (response.error != null) { - console.error('获取价格排序商品失败:', response.error) - return [] - } - - return response.data as Product[] - } catch (error) { - console.error('获取价格排序商品异常:', error) - return [] - } - } - - // 获取新品(按创建时间排序,最新的在前) - async getProductsByNewest(limit: number = 10): Promise { - try { - const response = await supa - .from('ml_products_detail_view') - .select('*') - .eq('is_new', true) - .eq('status', 1) - .order('published_at', { ascending: false }) // Use published_at for newest - .limit(limit) - .execute() - - if (response.error != null) { - console.error('获取新品失败:', response.error) - return [] - } - - return response.data as Product[] - } catch (error) { - console.error('获取新品异常:', error) - return [] - } - } - - // 获取推荐商品(is_featured=true) - async getRecommendedProducts(limit: number = 10): Promise { - try { - // 查询 is_featured = true 的商品 - const response = await supa - .from('ml_products_detail_view') - .select('*') - .eq('is_featured', true) - .eq('status', 1) - .order('sale_count', { ascending: false }) - .limit(limit) - .execute() - - if (response.error != null) { - console.error('获取推荐商品失败:', response.error) - return [] - } - - console.log('推荐商品查询结果条数:', (response.data as any[])?.length ?? 0) - const data = response.data as Product[] - return data ?? [] - } catch (error) { - console.error('获取推荐商品异常:', error) - return [] - } - } - - // 获取特价商品(这里假设没有specific flag, just use logic or tag if exists, defaulting to hot for now or just skip) - // Modify to use compatible logic if badge column doesn't exist - async getDiscountProducts(limit: number = 10): Promise { - return [] as Product[] // 暂无特价字段 - } - - // 获取当前用户的购物车商品(关联商品和店铺信息) - async getCartItems(): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) { - console.warn('用户未登录,无法获取购物车') - return [] - } - - // 查询购物车表,并关联商品表(使用内联关联) - // 注意:使用 !inner 进行内连接,或者 left join (默认) - // 修改查询语法以符合 PostgREST 规范 - // 尝试简化查询,先只查购物车,再查商品,避免复杂的嵌套查询导致 400 错误 - const response = await supa - .from('ml_shopping_cart') - .select('*') - .eq('user_id', userId) - .order('created_at', { ascending: false }) - .execute() - - if (response.error != null) { - console.error('获取购物车失败:', response.error) - return [] - } - - const cartData = response.data as any[] - // console.log('Raw Cart Data:', JSON.stringify(cartData)) - - if (cartData == null || cartData.length === 0) { - return [] - } - - // 收集所有 product_id 和 sku_id - const productIds: string[] = [] - const skuIds: string[] = [] - for (let i = 0; i < cartData.length; i++) { - let item = cartData[i] - let pid: string = '' - let sid: string = '' - if (item instanceof UTSJSONObject) { - pid = item.getString('product_id') ?? '' - sid = item.getString('sku_id') ?? '' - } else { - const itemObj = JSON.parse(JSON.stringify(item)) as UTSJSONObject - pid = itemObj.getString('product_id') ?? '' - sid = itemObj.getString('sku_id') ?? '' - } - if (pid !== '' && !productIds.includes(pid)) { - productIds.push(pid) - } - if (sid !== '' && !skuIds.includes(sid)) { - skuIds.push(sid) - } - } - - // 批量查询商品详情 (使用视图关联店铺信息,修复字段名 specification -> attributes) - const productMap = new Map() - - if (productIds.length > 0) { - // Convert string array to any array for .in() - const productIdsAny: any[] = [] - for(let i=0; i() - if (skuIds.length > 0) { - const skuIdsAny: any[] = [] - for(let i=0; i 0) { - productPrice = skuPrice - } - const skuImg = sku.getString('image_url') - if (skuImg != null && skuImg !== '') { - productImage = skuImg - } - - const specRaw = sku.get('specifications') - if (specRaw != null) { - // 优先使用SKU的规格 - if (typeof specRaw === 'string') { - productSpec = specRaw - } else if (specRaw instanceof UTSJSONObject) { - const keys = UTSJSONObject.keys(specRaw) - const parts: string[] = [] - for(let k = 0; k < keys.length; k++) { - let val = specRaw.get(keys[k]) - if (val != null) { - parts.push(`${keys[k]}: ${val}`) - } - } - productSpec = parts.join('; ') - } else { - try { - let jsonStr = JSON.stringify(specRaw) - productSpec = jsonStr.replace(/["{}]/g, '').replace(/,/g, '; ') - } catch (e) {} - } - } - } else { - const sObj = JSON.parse(JSON.stringify(sku)) as UTSJSONObject - const skuPrice = sObj.getNumber('price') ?? 0 - if (skuPrice > 0) productPrice = skuPrice - - const skuImg = sObj.getString('image_url') ?? '' - if (skuImg !== '') productImage = skuImg - - const specRaw = sObj.get('specifications') - if (specRaw != null) { - // 优先使用SKU的规格 - if (typeof specRaw === 'string') { - productSpec = specRaw - } else if (specRaw instanceof UTSJSONObject) { - const keys = UTSJSONObject.keys(specRaw) - const parts: string[] = [] - for(let k = 0; k < keys.length; k++) { - let val = specRaw.get(keys[k]) - if (val != null) { - parts.push(`${keys[k]}: ${val}`) - } - } - productSpec = parts.join('; ') - } else { - try { - let jsonStr = JSON.stringify(specRaw) - productSpec = jsonStr.replace(/["{}]/g, '').replace(/,/g, '; ') - } catch (e) {} - } - } - } - } - - - - let shopIdStr = merchantId != '' ? merchantId : 'unknown_shop' - - - cartItems.push({ - id: itemId, - user_id: userIdVal, - product_id: productId, - sku_id: skuId, - merchant_id: merchantId, - quantity: quantity, - selected: selected, - product_name: productName, - product_image: productImage, - product_price: productPrice, - product_specification: productSpec, - shop_id: shopIdStr, - shop_name: shopNameStr, - created_at: createdAt, - updated_at: updatedAt - } as CartItem) - } - } - - return cartItems - } catch (error) { - console.error('获取购物车异常:', error) - return [] - } - } - - // 获取用户通知 (系统、活动、订单) - async getUserNotifications(type: string | null = null): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) return [] - - let query = supa - .from('ml_notifications') - .select('*') - .eq('user_id', userId) - - if (type != null) { - query = query.eq('type', type) - } - - const response = await query.order('created_at', { ascending: false }).execute() - - if (response.error != null) { - console.error('获取通知失败:', response.error) - return [] - } - return response.data as Notification[] - } catch (e) { - console.error('获取通知异常:', e) - return [] - } - } - - // 获取聊天会话列表 - async getChatRooms(): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) return [] - - const response = await supa - .from('ml_chat_rooms') - .select('*') - .eq('user_id', userId) - .order('updated_at', { ascending: false }) - .execute() - - if (response.error != null) { - console.error('获取聊天会话失败:', response.error) - return [] - } - return response.data as ChatRoom[] - } catch (e) { - console.error('获取聊天会话异常:', e) - return [] - } - } - - // 获取用户聊天消息 - async getUserChatMessages(): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) return [] - - const response = await supa - .from('ml_chat_messages') - .select('*') - .or(`sender_id.eq.${userId},receiver_id.eq.${userId}`) - .order('created_at', { ascending: false }) - .limit(50) - .execute() - - if (response.error != null) { - console.error('获取聊天记录失败:', response.error) - return [] - } - return response.data as ChatMessage[] - } catch (e) { - console.error('获取聊天记录异常:', e) - return [] - } - } - - // 获取与特定商家的聊天记录 - async getChatMessages(merchantId: string): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) return [] - - const response = await supa - .from('ml_chat_messages') - .select('*') - .or(`and(sender_id.eq.${userId},receiver_id.eq.${merchantId}),and(sender_id.eq.${merchantId},receiver_id.eq.${userId})`) - .order('created_at', { ascending: false }) - .limit(50) - .execute() - - if (response.error != null) { - console.error('获取聊天记录失败:', response.error) - return [] - } - return response.data as ChatMessage[] - } catch (e) { - console.error('获取聊天记录异常:', e) - return [] - } - } - - // 发送聊天消息 - async sendChatMessage(content: string, toId: string | null = null, type: string = 'text'): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) return false - - const payload = { - sender_id: userId, - content: content, - msg_type: type, - is_from_user: true, - created_at: new Date().toISOString() - } as UTSJSONObject - if (toId != null) { - payload.set('receiver_id', toId) - } - - const response = await supa - .from('ml_chat_messages') - .insert(payload) - .execute() - - if (response.error != null) { - console.error('发送消息失败:', response.error) - return false - } - return true - } catch (e) { - console.error('发送消息异常:', e) - return false - } - } - - // 模拟客服回复 - async simulateServiceReply(content: string): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) return false - - const response = await supa - .from('ml_chat_messages') - .insert({ - receiver_id: userId, - content: content, - msg_type: 'text', - is_from_user: false, - created_at: new Date().toISOString() - }) - .execute() - return response.error == null - } catch (e) { - return false - } - } - - // 添加商品到购物车 - async addToCart(productId: string, quantity: number = 1, skuId: string = '', merchantId: string = ''): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) { - console.error('用户未登录,无法添加商品到购物车') - return false - } - - const realSkuId = (skuId != null && skuId.length > 0) ? skuId : null - const realMerchantId = (merchantId != null && merchantId.length > 0) ? merchantId : null - - // 检查商品是否已在购物车中 - // 注意:必须处理 sku_id 为空的情况,使用 is.null 过滤器 - let query = supa - .from('ml_shopping_cart') - .select('*') - .eq('user_id', userId) - .eq('product_id', productId) - - if (realSkuId != null) { - query = query.eq('sku_id', realSkuId) - } else { - query = query.is('sku_id', null) - } - - const existingResponse = await query.single().execute() - - let existingItem: any | null = null - - if (existingResponse.data != null) { - const rawData = existingResponse.data as any - if (Array.isArray(rawData)) { - if (rawData.length > 0) { - existingItem = rawData[0] - } - } else { - existingItem = rawData - } - } - - let response: AkReqResponse - if (existingItem != null) { - // 商品已存在,更新数量 - console.log('Found existing cart item:', JSON.stringify(existingItem)) - - // 确保 existingItem.id 存在 - let itemId: string | null = null - let itemQty: any | null = null - - if (existingItem instanceof UTSJSONObject) { - itemId = existingItem.getString('id') - itemQty = existingItem.getNumber('quantity') - } else { - const obj = JSON.parse(JSON.stringify(existingItem)) as UTSJSONObject - itemId = obj.getString('id') - itemQty = obj.getNumber('quantity') - } - - if (itemId != null) { - let currentQty = 0 - if (typeof itemQty === 'number') { - currentQty = itemQty as number - } else { - const qStr = `${itemQty ?? 0}` - currentQty = parseInt(qStr) - } - const newQty = currentQty + quantity - - response = await supa - .from('ml_shopping_cart') - .update({ - quantity: newQty, - merchant_id: realMerchantId, - updated_at: new Date().toISOString() - }) - .eq('id', itemId) - .execute() - } else { - console.error('购物车已有商品但缺少ID,无法更新. Data:', JSON.stringify(existingItem)) - return false - } - } else { - // 商品不存在,添加新记录 - const cartPayload = new UTSJSONObject() - cartPayload.set('user_id', userId) - cartPayload.set('product_id', productId) - cartPayload.set('sku_id', realSkuId) - cartPayload.set('quantity', quantity) - cartPayload.set('selected', true) - cartPayload.set('created_at', new Date().toISOString()) - cartPayload.set('updated_at', new Date().toISOString()) - if (realMerchantId != null) { - cartPayload.set('merchant_id', realMerchantId) - } - - response = await supa - .from('ml_shopping_cart') - .insert(cartPayload) - .execute() - } - - if (response.error != null) { - console.error('添加商品到购物车失败:', response.error) - return false - } - - return true - } catch (error) { - console.error('添加商品到购物车异常:', error) - return false - } - } - - // 更新购物车商品数量 - async updateCartItemQuantity(cartItemId: string, quantity: number): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) { - console.error('用户未登录,无法更新购物车') - return false - } - - if (quantity < 1) { - // 数量小于1时删除商品 - return await this.deleteCartItem(cartItemId) - } - - const response = await supa - .from('ml_shopping_cart') - .update({ - quantity: quantity, - updated_at: new Date().toISOString() - }) - .eq('id', cartItemId) - .eq('user_id', userId) - .execute() - - if (response.error != null) { - console.error('更新购物车商品数量失败:', response.error) - return false - } - - return true - } catch (error) { - console.error('更新购物车商品数量异常:', error) - return false - } - } - - // 更新购物车商品选中状态 - async updateCartItemSelection(cartItemId: string, selected: boolean): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) { - console.error('用户未登录,无法更新购物车') - return false - } - - const response = await supa - .from('ml_shopping_cart') - .update({ - selected: selected, - updated_at: new Date().toISOString() - }) - .eq('id', cartItemId) - .eq('user_id', userId) - .execute() - - if (response.error != null) { - console.error('更新购物车商品选中状态失败:', response.error) - return false - } - - return true - } catch (error) { - console.error('更新购物车商品选中状态异常:', error) - return false - } - } - - // 批量更新购物车商品选中状态 - async batchUpdateCartItemSelection(cartItemIds: string[], selected: boolean): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) { - console.error('用户未登录,无法更新购物车') - return false - } - - const response = await supa - .from('ml_shopping_cart') - .update({ - selected: selected, - updated_at: new Date().toISOString() - }) - .eq('user_id', userId) - .in('id', cartItemIds as any[]) - .execute() - - if (response.error != null) { - console.error('批量更新购物车商品选中状态失败:', response.error) - return false - } - - return true - } catch (error) { - console.error('批量更新购物车商品选中状态异常:', error) - return false - } - } - - // 删除购物车商品 - async deleteCartItem(cartItemId: string): Promise { - return true - /* - try { - console.log('正在执行删除购物车商品,ID:', cartItemId) - const userId = this.getCurrentUserId() - if (!userId) { - console.error('用户未登录,无法删除购物车商品') - return false - } - - const response = await supa - .from('ml_shopping_cart') - .eq('id', cartItemId) - .eq('user_id', userId) - .delete() - .execute() - - if (response.error) { - console.error('删除购物车商品失败:', response.error) - return false - } - - return true - } catch (error) { - console.error('删除购物车商品异常:', error) - return false - } - */ - } - - // 批量删除购物车商品 - async batchDeleteCartItems(cartItemIds: string[]): Promise { - return true - /* - try { - const userId = this.getCurrentUserId() - if (!userId) { - console.error('用户未登录,无法删除购物车商品') - return false - } - - const response = await supa - .from('ml_shopping_cart') - .eq('user_id', userId) - .in('id', cartItemIds) - .delete() - .execute() - - if (response.error) { - console.error('批量删除购物车商品失败:', response.error) - return false - } - - return true - } catch (error) { - console.error('批量删除购物车商品异常:', error) - return false - } - */ - } - - // 清空购物车 - async clearCart(): Promise { - return true - /* - try { - const userId = this.getCurrentUserId() - if (!userId) { - console.error('用户未登录,无法清空购物车') - return false - } - - const response = await supa - .from('ml_shopping_cart') - .eq('user_id', userId) - .delete() - .execute() - - if (response.error) { - console.error('清空购物车失败:', response.error) - return false - } - - return true - } catch (error) { - console.error('清空购物车异常:', error) - return false - } - */ - } - - // 获取当前用户的所有地址 - async getAddresses(): Promise { - const userId = this.getCurrentUserId() - if (userId == null) { - console.warn('[getAddresses] 用户未登录,无法获取地址') - return [] - } - - try { - console.log('[getAddresses] 查询地址, userId:', userId) - - const response = await supa - .from('ml_user_addresses') - .select('*') - .eq('user_id', userId) - .order('is_default', { ascending: false }) - .order('created_at', { ascending: false }) - .execute() - - console.log('[getAddresses] response.error:', response.error) - console.log('[getAddresses] response.data:', JSON.stringify(response.data)) - - if (response.error != null) { - console.error('[getAddresses] 获取地址失败:', response.error) - return [] - } - - const data = response.data - if (data == null) { - return [] - } - - const result: UserAddress[] = [] - const rawData = data as any[] - for (let i = 0; i < rawData.length; i++) { - const item = rawData[i] - let itemObj: UTSJSONObject - if (item instanceof UTSJSONObject) { - itemObj = item as UTSJSONObject - } else { - itemObj = JSON.parse(JSON.stringify(item)) as UTSJSONObject - } - - const addrObj = new UTSJSONObject() - addrObj.set('id', itemObj.getString('id') ?? '') - addrObj.set('user_id', itemObj.getString('user_id') ?? '') - addrObj.set('recipient_name', itemObj.getString('receiver_name') ?? itemObj.getString('recipient_name') ?? '') - addrObj.set('phone', itemObj.getString('receiver_phone') ?? itemObj.getString('phone') ?? '') - addrObj.set('province', itemObj.getString('province') ?? '') - addrObj.set('city', itemObj.getString('city') ?? '') - addrObj.set('district', itemObj.getString('district') ?? '') - addrObj.set('detail_address', itemObj.getString('address_detail') ?? itemObj.getString('detail_address') ?? '') - addrObj.set('is_default', itemObj.getBoolean('is_default') ?? false) - result.push(addrObj as UserAddress) - } - - console.log('[getAddresses] 返回地址数量:', result.length) - return result - } catch (error) { - console.error('[getAddresses] 获取地址异常:', error) - return [] - } - } - - // 根据ID获取地址详情 - async getAddressById(addressId: string): Promise { - const userId = this.getCurrentUserId() - if (userId == null) { - console.warn('用户未登录,无法获取地址') - return null - } - - try { - const query = supa - .from('ml_user_addresses') - .select('*, recipient_name:receiver_name, phone:receiver_phone, detail_address:address_detail') - .eq('id', addressId) - .eq('user_id', userId) - .single() - - const response = await query.execute() - - if (response.error != null) { - console.error('获取地址详情失败:', response.error) - return null - } - - return response.data as UserAddress - } catch (error) { - console.error('获取地址详情异常:', error) - return null - } - } - - // 添加新地址 - async addAddress(address: AddAddressParams): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) { - console.error('用户未登录,无法添加地址') - return false - } - - // 如果设置为默认地址,需要先取消其他默认地址 - if (address.is_default == true) { - await this.clearDefaultAddress(userId) - } - - const response = await supa - .from('ml_user_addresses') - .insert({ - user_id: userId, - receiver_name: address.recipient_name, - receiver_phone: address.phone, - province: address.province, - city: address.city, - district: address.district, - address_detail: address.detail_address, - postal_code: address.postal_code ?? null, - is_default: address.is_default ?? false, - created_at: new Date().toISOString(), - updated_at: new Date().toISOString() - }) - .execute() - - if (response.error != null) { - console.error('添加地址失败:', response.error) - return false - } - - return true - } catch (error) { - console.error('添加地址异常:', error) - return false - } - } - - // 更新地址 - async updateAddress(addressId: string, address: UpdateAddressParams): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) { - console.error('用户未登录,无法更新地址') - return false - } - - // 如果设置为默认地址,需要先取消其他默认地址 - if (address.is_default == true) { - await this.clearDefaultAddress(userId) - } - - // 构造更新数据,映射字段名到数据库列名 - const updateData = {} - if (address.recipient_name != null) updateData['receiver_name'] = address.recipient_name - if (address.phone != null) updateData['receiver_phone'] = address.phone - if (address.province != null) updateData['province'] = address.province - if (address.city != null) updateData['city'] = address.city - if (address.district != null) updateData['district'] = address.district - if (address.detail_address != null) updateData['address_detail'] = address.detail_address - if (address.postal_code != null) updateData['postal_code'] = address.postal_code - if (address.is_default != null) updateData['is_default'] = address.is_default - if (address.label != null) updateData['label'] = address.label - updateData['updated_at'] = new Date().toISOString() - - const response = await supa - .from('ml_user_addresses') - .update(updateData) - .eq('id', addressId) - .eq('user_id', userId) - .execute() - - if (response.error != null) { - console.error('更新地址失败:', response.error) - return false - } - - return true - } catch (error) { - console.error('更新地址异常:', error) - return false - } - } - - // 确认收货 - async confirmReceipt(orderId: string): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) { - return { success: false, error: '用户未登录' } - } - - const response = await supa - .from('ml_orders') - .update({ - order_status: 4, // 4: 已完成 - delivered_at: new Date().toISOString(), - completed_at: new Date().toISOString(), // 也更新完成时间 - updated_at: new Date().toISOString() - }) - .eq('id', orderId) - .eq('user_id', userId) - .execute() - - if (response.error != null) { - return { success: false, error: response.error.message } - } - - return { success: true } - } catch (e: any) { - return { success: false, error: e.message } - } - } - - // 删除地址 - async deleteAddress(addressId: string): Promise { - try { - console.log('正在执行删除地址,ID:', addressId) - const userId = this.getCurrentUserId() - if (userId == null) { - console.error('用户未登录,无法删除地址') - return false - } - - const response = await supa - .from('ml_user_addresses') - .eq('id', addressId) - .eq('user_id', userId) - .delete() - .execute() - - if (response.error != null) { - console.error('删除地址失败:', response.error) - return false - } - - return true - } catch (error) { - console.error('删除地址异常:', error) - return false - } - } - - // 清除默认地址(内部使用) - private async clearDefaultAddress(userId: string): Promise { - try { - await supa - .from('ml_user_addresses') - .update({ - is_default: false, - updated_at: new Date().toISOString() - }) - .eq('user_id', userId) - .eq('is_default', true) - .execute() - } catch (error) { - console.error('清除默认地址异常:', error) - } - } - - // 获取用户资料 - async getUserProfile(): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) return null - - // 联合查询 auth user 和 profile - // 由于 Supabase auth table 不可直接访问,这里查询 ml_user_profiles - const response = await supa - .from('ml_user_profiles') - .select('*') - .eq('user_id', userId) - .single() - .execute() - - if (response.error != null) { - // 如果不存在 profile,可能只有 auth user,这里暂时返回空或创建默认 - return null - } - return response.data - } catch (e) { - return null - } - } - - // 创建订单 - async createOrder(orderData: CreateOrderParams): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) { - console.error('CreateOrder: User not logged in') - return null - } - - const orderNo = 'ML' + Date.now() + Math.floor(Math.random() * 1000) - - let merchantId = orderData.merchant_id - if (merchantId == null || merchantId == '' || merchantId == 'unknown') { - merchantId = userId - } - - let shippingAddrStr = '{}' - if (orderData.shipping_address != null) { - if (typeof orderData.shipping_address === 'string') { - shippingAddrStr = orderData.shipping_address - } else { - shippingAddrStr = JSON.stringify(orderData.shipping_address) - } - } - - const orderPayload = new UTSJSONObject() - orderPayload.set('user_id', userId) - orderPayload.set('merchant_id', merchantId) - orderPayload.set('order_no', orderNo) - orderPayload.set('product_amount', orderData.product_amount) - orderPayload.set('shipping_fee', orderData.shipping_fee) - orderPayload.set('total_amount', orderData.total_amount) - orderPayload.set('paid_amount', 0) - orderPayload.set('shipping_address', shippingAddrStr) - orderPayload.set('order_status', 1) - orderPayload.set('payment_status', 1) - orderPayload.set('shipping_status', 1) - orderPayload.set('created_at', new Date().toISOString()) - orderPayload.set('updated_at', new Date().toISOString()) - - console.log('[CreateOrder] 插入订单数据:', JSON.stringify(orderPayload)) - console.log('[CreateOrder] 期望的订单号:', orderNo) - - const orderResponse = await supa - .from('ml_orders') - .insert(orderPayload) - .execute() - - console.log('[CreateOrder] insert 完成') - console.log('[CreateOrder] orderResponse.error:', orderResponse.error) - - if (orderResponse.error != null) { - console.error('[CreateOrder] 创建订单失败:', orderResponse.error) - return null - } - - console.log('[CreateOrder] 开始查询新创建的订单, order_no:', orderNo) - - const queryResponse = await supa - .from('ml_orders') - .select('id, order_no') - .eq('order_no', orderNo) - .execute() - - console.log('[CreateOrder] queryResponse.error:', queryResponse.error) - console.log('[CreateOrder] queryResponse.data:', JSON.stringify(queryResponse.data)) - - if (queryResponse.error != null) { - console.error('[CreateOrder] 查询订单失败:', queryResponse.error) - return null - } - - const queryData = queryResponse.data as any - let orderId = '' - - if (Array.isArray(queryData) && queryData.length > 0) { - const firstItem = queryData[0] as Record - orderId = firstItem['id'] as string - console.log('[CreateOrder] 找到新创建的订单, id:', orderId) - } else { - console.error('[CreateOrder] 未找到新创建的订单,插入可能失败') - return null - } - - console.log('[CreateOrder] 订单创建成功, orderId:', orderId) - - const orderItems: UTSJSONObject[] = [] - const rawItems = orderData.items as any[] - - for(let i = 0; i < rawItems.length; i++) { - let item: UTSJSONObject - const rawItem = rawItems[i] - item = rawItem as UTSJSONObject - - const itemJson = new UTSJSONObject() - - let pId = item.get('product_id') - if (pId == null) { - pId = item.get('id') - } - - itemJson.set('order_id', orderId) - itemJson.set('product_id', pId) - - const skuIdVal = item.get('sku_id') - if (skuIdVal != null && skuIdVal !== '') { - itemJson.set('sku_id', skuIdVal) - } - - itemJson.set('product_name', item.get('product_name') ?? '') - - const sName = item.get('sku_name') - itemJson.set('sku_name', sName ?? '') - - const specVal = item.get('specifications') - let skuSnapshot = '{}' - if (specVal != null) { - if (typeof specVal === 'string') { - skuSnapshot = specVal as string - } else { - skuSnapshot = JSON.stringify(specVal) - } - } - itemJson.set('sku_snapshot', skuSnapshot) - itemJson.set('specifications', skuSnapshot) - - const img1 = item.get('product_image') - const img2 = item.get('image_url') - let imgUrl = (img1 ?? img2 ?? '') as string - while (imgUrl.indexOf('`') >= 0) { - imgUrl = imgUrl.replace('`', '') - } - itemJson.set('image_url', imgUrl) - - const iPrice = item.getNumber('price') ?? 0 - const iQty = item.getNumber('quantity') ?? 1 - itemJson.set('price', iPrice) - itemJson.set('quantity', iQty) - itemJson.set('total_amount', iPrice * iQty) - itemJson.set('created_at', new Date().toISOString()) - - orderItems.push(itemJson) - } - - console.log('[CreateOrder] 插入订单项数量:', orderItems.length) - console.log('[CreateOrder] 订单项数据:', JSON.stringify(orderItems)) - - const itemsResponse = await supa - .from('ml_order_items') - .insert(orderItems) - .execute() - - if (itemsResponse.error != null) { - console.error('[CreateOrder] 创建订单项失败:', itemsResponse.error) - console.error('[CreateOrder] 错误详情:', JSON.stringify(itemsResponse.error)) - console.log('[CreateOrder] 订单主表已创建,但订单项插入失败,返回订单ID') - return orderId - } - - console.log('[CreateOrder] 订单项创建成功') - - const cartItemIds: string[] = [] - for(let i = 0; i < rawItems.length; i++) { - const item = rawItems[i] as UTSJSONObject - const iid = item.getString('id') - if (iid != null && iid.length > 10) { - cartItemIds.push(iid) - } - } - - if (cartItemIds.length > 0) { - await this.batchDeleteCartItems(cartItemIds) - } - - return orderId - } catch (error) { - console.error('[CreateOrder] 创建订单异常:', error) - return null - } - } - - // 批量通过店铺创建订单 - async createOrdersByShop(params: ShopOrderParams): Promise { - try { - const orderIds: string[] = [] - const groups = params.shopGroups as any[] - - let grandTotal = 0.0 - for(let k = 0; k < groups.length; k++) { - const g = groups[k] as UTSJSONObject - // 安全获取 items 数组 - const gItemsRaw = g.get('items') - if (gItemsRaw == null) continue - const gItems = gItemsRaw as any[] - - for(let gi = 0; gi < gItems.length; gi++) { - const it = gItems[gi] as UTSJSONObject - const itPrice = it.getNumber('price') ?? 0 - const itQty = it.getNumber('quantity') ?? 1 - grandTotal += itPrice * itQty - } - } - - // 为每个店铺创建一个订单 - for (let i = 0; i < groups.length; i++) { - const group = groups[i] as UTSJSONObject - const shopItemsRaw = group.get('items') - if (shopItemsRaw == null) continue - const shopItems = shopItemsRaw as any[] - - let productAmount = 0.0 - for(let j = 0; j < shopItems.length; j++) { - const sItem = shopItems[j] as UTSJSONObject - const siPrice = sItem.getNumber('price') ?? 0 - const siQty = sItem.getNumber('quantity') ?? 1 - productAmount += siPrice * siQty - } - - // 简单平摊运费和优惠 (实际逻辑可能更复杂) - const ratio = grandTotal > 0 ? (productAmount / grandTotal) : 0 - const shopShippingFee = params.deliveryFee * ratio - const shopDiscount = params.discountAmount * ratio - const shopTotal = productAmount + shopShippingFee - shopDiscount - - const mId = group.getString('merchant_id') - const sId = group.getString('shopId') - const shopName = group.getString('shopName') - - const orderId = await this.createOrder({ - merchant_id: (mId != null && mId != '') ? mId : (sId ?? ''), // 兼容旧字段 - product_amount: productAmount, - shipping_fee: shopShippingFee, - total_amount: shopTotal, - shipping_address: params.shipping_address, - items: shopItems - }) - - if (orderId != null) { - orderIds.push(orderId) - } else { - return { success: false, orderIds, error: `店铺 ${shopName} 订单创建失败` } - } - } - - return { success: true, orderIds } - } catch (e) { - console.error('批量创建订单异常:', e) - return { success: false, orderIds: [], error: '系统异常' } - } - } - - // 获取订单列表 - async getOrders(status: number = 0): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) { - const empty: any[] = [] - return empty - } - - let query = supa - .from('ml_orders') - .select(` - *, - ml_order_items (*) - `) - .eq('user_id', userId) - .order('created_at', { ascending: false }) - - if (status > 0) { - query = query.eq('order_status', status) - } - - const response = await query.execute() - - if (response.error != null) { - console.error('获取订单列表失败:', response.error) - const empty: any[] = [] - return empty - } - - const data = response.data - if (data == null) { - const empty: any[] = [] - return empty - } - return data as any[] - } catch (error) { - console.error('获取订单列表异常:', error) - const empty: any[] = [] - return empty - } - } - - // 获取订单详情 - async getOrderDetail(orderId: string): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) return null - - const response = await supa - .from('ml_orders') - .select(` - *, - ml_order_items (*) - `) - .eq('id', orderId) - .eq('user_id', userId) - .single() - .execute() - - if (response.error != null) { - return null - } - return response.data - } catch (e) { - return null - } - } - - // 支付订单 - async payOrder(orderId: string, paymentMethod: string, amount: number): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) { - console.error('[payOrder] 用户未登录') - return false - } - - console.log('[payOrder] 开始更新订单状态, orderId:', orderId, 'userId:', userId) - - const updatePayload = new UTSJSONObject() - updatePayload.set('order_status', 2) - updatePayload.set('payment_status', 1) - updatePayload.set('payment_method', paymentMethod) - updatePayload.set('payment_time', new Date().toISOString()) - updatePayload.set('paid_amount', amount) - updatePayload.set('updated_at', new Date().toISOString()) - - console.log('[payOrder] 更新数据:', JSON.stringify(updatePayload)) - - const response = await supa - .from('ml_orders') - .update(updatePayload) - .eq('id', orderId) - .eq('user_id', userId) - .execute() - - if (response.error != null) { - console.error('[payOrder] 更新订单失败:', response.error) - return false - } - - console.log('[payOrder] 订单状态更新成功') - - if (paymentMethod === 'balance') { - console.log('[payOrder] 余额支付,暂不扣减余额') - } - - return true - } catch (e) { - console.error('[payOrder] 支付异常:', e) - return false - } - } - - // 根据ID获取订单信息 - async getOrderById(orderId: string): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) { - console.error('[getOrderById] 用户未登录') - return null - } - - console.log('[getOrderById] 查询订单, orderId:', orderId) - - const response = await supa - .from('ml_orders') - .select('*') - .eq('id', orderId) - .eq('user_id', userId) - .execute() - - if (response.error != null) { - console.error('[getOrderById] 查询订单失败:', response.error) - return null - } - - const data = response.data as any[] - if (data == null || data.length === 0) { - console.log('[getOrderById] 未找到订单') - return null - } - - const orderRaw = data[0] - let orderObj: UTSJSONObject - if (orderRaw instanceof UTSJSONObject) { - orderObj = orderRaw as UTSJSONObject - } else { - orderObj = JSON.parse(JSON.stringify(orderRaw)) as UTSJSONObject - } - - console.log('[getOrderById] 订单数据:', JSON.stringify(orderObj)) - return orderObj - } catch (e) { - console.error('[getOrderById] 查询异常:', e) - return null - } - } - - // 提交售后申请 - async createRefund(data: any): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) return { success: false, message: '请先登录' } - - const d = data as UTSJSONObject - const orderId = d.getString('order_id') - const refundType = d.getNumber('refund_type') - const refundReason = d.getString('refund_reason') - const refundAmount = d.getNumber('refund_amount') - const description = d.getString('description') - const images = d.getArray('images') - - const payload = { - user_id: userId, - order_id: orderId, - refund_no: 'REF' + Date.now() + Math.floor(Math.random() * 1000), - refund_type: refundType, - refund_reason: refundReason, - refund_amount: refundAmount, - description: description ?? '', - images: images ?? ([] as any[]), - status: 1 // Pending - } - - const response = await supa - .from('ml_refunds') - .insert(payload) - .execute() - - if (response.error != null) { - console.error('提交售后失败:', response.error) - return { success: false, message: '提交失败: ' + (response.error.message ?? '未知错误') } - } - - return { success: true, message: '申请提交成功' } - } catch (e) { - console.error('提交售后异常:', e) - return { success: false, message: '系统异常' } - } - } - - // 再次购买 - async rePurchase(order: any): Promise { - try { - // 将 order 转换为 UTSJSONObject 以安全访问属性 - const orderObj = order as UTSJSONObject - // 尝试获取 ml_order_items 或 items - let itemsKey = 'ml_order_items' - let itemsRaw = orderObj.get(itemsKey) - - if (itemsRaw == null) { - itemsKey = 'items' - itemsRaw = orderObj.get(itemsKey) - } - - if (itemsRaw == null) return false - - // 断言为数组 - const items = itemsRaw as any[] - if (items.length === 0) return false - - // 简单的循环添加,实际项目中可以优化为批量插入 - for (let i = 0; i < items.length; i++) { - // 同样,item 也是 UTSJSONObject 或支持访问的对象 - const item = items[i] as UTSJSONObject - const productId = item.getString('product_id') - const skuId = item.getString('sku_id') ?? '' - const merchantIdFromItem = item.getString('merchant_id') ?? '' - // 数量可能是数字或字符串 - const quantity = item.getNumber('quantity') ?? 1 - - if (productId != null) { - await this.addToCart(productId, quantity, skuId, merchantIdFromItem) - } - } - return true - } catch (e) { - console.error('rePurchase error', e) - return false - } - } - - // 申请售后 (Legacy/Simple update) - async applyRefund(orderId: string, reason: string): Promise { - try { - // 更新订单状态为 退款中 (6) - const response = await supa - .from('ml_orders') - .update({ - order_status: 6, - cancel_reason: reason, - updated_at: new Date().toISOString() - }) - .eq('id', orderId) - .execute() - - return response.error === null - } catch (e) { - return false - } - } - - // 获取售后记录列表 - async getRefunds(statusList: number[] = [], page: number = 1, pageSize: number = 10): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) { - const empty: any[] = [] - return empty - } - - let query = supa - .from('ml_refunds') - .select(` - *, - order:ml_orders!inner ( - order_no, - created_at, - ml_order_items ( - product_id, - product_name, - image_url - ) - ) - `) - .eq('user_id', userId) - .order('created_at', { ascending: false }) - - if (statusList.length > 0) { - // 显式转换为 any[] 以匹配 .in 方法的参数要求 - const anyList = statusList as any[] - query = query.in('status', anyList) - } - - query = query.range((page - 1) * pageSize, page * pageSize - 1) - - const response = await query.execute() - - if (response.error != null) { - console.error('获取售后列表失败:', response.error) - const empty: any[] = [] - return empty - } - - const data = response.data - if (data == null) { - const empty: any[] = [] - return empty - } - - return data - } catch (e) { - console.error('获取售后列表异常:', e) - const empty: any[] = [] - return empty - } - } - - // 获取用户钱包余额 - async getUserBalance(): Promise { - try { - const userId = this.getCurrentUserId() - console.log('[Supabase] getUserBalance userId:', userId) - if (userId == null) return 0 - - // 优先查 ml_user_wallets - const walletRes = await supa - .from('ml_user_wallets') - .select('balance') - .eq('user_id', userId!) - .single() - .execute() - - if (walletRes.error != null) { - console.error('[Supabase] getUserBalance error:', walletRes.error) - } else { - console.log('[Supabase] getUserBalance data:', walletRes.data) - } - - if (walletRes.error == null && walletRes.data != null) { - let data = walletRes.data - // 如果是数组,取第一项 - if (Array.isArray(data)) { - const arr = data as any[] - if (arr.length > 0) { - data = arr[0] - } - } - - let val:number = 0 - if (data instanceof UTSJSONObject) { - val = data.getNumber('balance') ?? 0 - // 尝试字符串转换,防止精度丢失导致转为string - if (val === 0 && data.getString('balance') != null) { - val = parseFloat(data.getString('balance')!) - } - return val - } else { - // 对于 Map 或 loose object - const jsonObj = JSON.parse(JSON.stringify(data)) as UTSJSONObject - val = jsonObj.getNumber('balance') ?? 0 - if (val === 0 && jsonObj.getString('balance') != null) { - val = parseFloat(jsonObj.getString('balance')!) - } - return val - } - } - - console.log('[Supabase] Wallet table empty, checking profile...') - - // Fallback to profile - const profile = await this.getUserProfile() - if (profile != null) { - if (profile instanceof UTSJSONObject) { - return profile.getNumber('balance') ?? 0 - } else { - const pObj = JSON.parse(JSON.stringify(profile)) as UTSJSONObject - return pObj.getNumber('balance') ?? 0 - } - } - return 0 - } catch(e) { - console.error('[Supabase] getUserBalance exception:', e) - return 0 - } - } - - // 获取用户积分 - async getUserPoints(): Promise { - try { - const userId = this.getCurrentUserId() - console.log('[Supabase] getUserPoints userId:', userId) - if (userId == null) return 0 - - // 查 ml_user_points - const res = await supa - .from('ml_user_points') - .select('points') - .eq('user_id', userId!) - .single() - .execute() - - if (res.error != null) { - console.error('[Supabase] getUserPoints error:', res.error) - } else { - console.log('[Supabase] getUserPoints data:', res.data) - } - - if (res.error == null && res.data != null) { - let data = res.data - // 如果是数组,取第一项 - if (Array.isArray(data)) { - const arr = data as any[] - if (arr.length > 0) { - data = arr[0] - } - } - - if (data instanceof UTSJSONObject) { - return data.getNumber('points') ?? 0 - } else { - // 尝试转为 UTSJSONObject - const jsonObj = JSON.parse(JSON.stringify(data)) as UTSJSONObject - const val = jsonObj.getNumber('points') - if (val != null) return val - - return 0 - } - } - - // Fallback check profile if needed - const profile = await this.getUserProfile() - if (profile != null) { - if (profile instanceof UTSJSONObject) { - return profile.getNumber('points') ?? 0 - } else { - const pObj = JSON.parse(JSON.stringify(profile)) as UTSJSONObject - return pObj.getNumber('points') ?? 0 - } - } - - return 0 - } catch (e) { - console.error('[Supabase] getUserPoints exception:', e) - return 0 - } - } - - // 获取钱包交易记录 - async getTransactions(page: number = 1, limit: number = 20): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) { - const empty: any[] = [] - return empty - } - - const from = (page - 1) * limit - const to = from + limit - 1 - - const response = await supa - .from('ml_wallet_transactions') - .select('*') - .eq('user_id', userId!) - .order('created_at', { ascending: false }) - .range(from, to) - .execute() - - if (response.error != null) { - console.error('获取交易记录失败:', response.error) - const empty: any[] = [] - return empty - } - - const data = response.data - if (data == null) { - const empty: any[] = [] - return empty - } - - return data as any[] - } catch (e) { - console.error('获取交易记录异常:', e) - const empty: any[] = [] - return empty - } - } - - // 获取积分记录 - async getPointRecords(): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) { - const empty: any[] = [] - return empty - } - - const res = await supa - .from('ml_point_records') - .select('*') - .eq('user_id', userId!) - .order('created_at', { ascending: false }) - .execute() - - if (res.error != null) { - const empty: any[] = [] - return empty - } - const data = res.data - if (data == null) { - const empty: any[] = [] - return empty - } - return data as any[] - } catch (e) { - const empty: any[] = [] - return empty - } - } - - // 获取用户红包 - async getUserRedPackets(): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) { - const empty: any[] = [] - return empty - } - - const res = await supa - .from('ml_user_red_packets') - .select('*') - .eq('user_id', userId!) - .order('created_at', { ascending: false }) - .execute() - - if (res.error != null) { - console.error('获取红包失败:', res.error) - const empty: any[] = [] - return empty - } - const data = res.data - if (data == null) { - const empty: any[] = [] - return empty - } - return data as any[] - } catch (e) { - console.error('获取红包异常:', e) - const empty: any[] = [] - return empty - } - } - - // 获取用户银行卡 - async getUserBankCards(): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) { - const empty: any[] = [] - return empty - } - - const res = await supa - .from('ml_user_bank_cards') - .select('*') - .eq('user_id', userId!) - .order('created_at', { ascending: false }) - .execute() - - if (res.error != null) { - console.error('获取银行卡失败:', res.error) - const empty: any[] = [] - return empty - } - const data = res.data - if (data == null) { - const empty: any[] = [] - return empty - } - return data as any[] - } catch (e) { - console.error('获取银行卡异常:', e) - const empty: any[] = [] - return empty - } - } - - // 余额充值 (调用 RPC) - async rechargeBalance(amount: number): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) return false - - const res = await supa.rpc('recharge_wallet', { - p_user_id: userId, - p_amount: amount - }) - - if (res.error != null) { - console.error('充值失败RPC:', res.error) - return false - } - - // 简单判断: 如果没有error且data里success为true - const data = res.data - if (data instanceof UTSJSONObject) { - return data.getBoolean('success') ?? false - } - // 如果返回不是对象,作为失败处理 - return false - } catch (e) { - console.error('充值异常:', e) - return false - } - } - - // 余额提现 (调用 RPC) - async withdrawBalance(amount: number): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) return false - - const res = await supa.rpc('withdraw_wallet', { - p_user_id: userId, - p_amount: amount - }) - - if (res.error != null) { - console.error('提现失败RPC:', res.error) - return false - } - - const data = res.data - if (data instanceof UTSJSONObject) { - return data.getBoolean('success') ?? false - } - return false - } catch (e) { - console.error('提现异常:', e) - return false - } - } - - // 添加银行卡 - async addBankCard(card: UTSJSONObject): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) return false - - // 补全 user_id - card.set('user_id', userId) - - const res = await supa - .from('ml_user_bank_cards') - .insert(card) - .execute() - - if (res.error != null) { - console.error('添加银行卡失败:', res.error) - return false - } - return true - } catch (e) { - console.error('添加银行卡异常:', e) - return false - } - } - - // 删除银行卡 - async deleteBankCard(cardId: string): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) return false - - const res = await supa - .from('ml_user_bank_cards') - .eq('id', cardId) - .eq('user_id', userId!) - .delete() - .execute() - - if (res.error != null) { - console.error('删除银行卡失败:', res.error) - return false - } - return true - } catch (e) { - console.error('删除银行卡异常:', e) - return false - } - } - - // 收藏相关 - async checkFavorite(productId: string): Promise { - try { - const userId = this.getCurrentUserId() - console.log(`[CheckFav] Checking for User: ${userId}, Product: ${productId}`) - - if (userId == null) return false - - const response = await supa - .from('ml_user_favorites') - .select('*') // Select all to verify data - .eq('user_id', userId!) - .eq('target_id', productId) - .eq('target_type', 1) // 1 for product - .limit(1) - .execute() - - // console.log(`[CheckFav] Response: ${JSON.stringify(response)}`) - - if (response.error != null) { - console.error(`[CheckFav] Error: ${JSON.stringify(response.error)}`) - return false - } - - const data = response.data - if (Array.isArray(data)) { - if ((data as any[]).length > 0) { - // Double check: ensure the returned item actually matches the product ID - // This guards against potential query filter failures - const item = data[0] - let targetId = '' - if (item instanceof UTSJSONObject) { - targetId = item.getString('target_id') ?? '' - } else { - const itemObj = JSON.parse(JSON.stringify(item)) as UTSJSONObject - targetId = itemObj.getString('target_id') ?? '' - } - - if (targetId !== '' && targetId !== productId) { - console.error(`[CheckFav] ID Mismatch! Query ${productId}, Got ${targetId}`) - return false - } - - return true - } - } else if (data instanceof UTSJSONObject) { - // Handle single object return case (though limit(1) usually returns array) - let targetId = data.getString('target_id') ?? '' - if (targetId !== '' && targetId !== productId) { - return false - } - return true - } - - return false - } catch(e) { - console.error(`[CheckFav] Exception: ${e}`) - return false - } - } - - async toggleFavorite(productId: string): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) return false - - console.log(`[ToggleFav] Toggling for ${productId}`) - - // Check if exists - const exists = await this.checkFavorite(productId) - console.log(`[ToggleFav] Current status: ${exists}`) - - if (exists) { - // Delete - const response = await supa - .from('ml_user_favorites') - .eq('user_id', userId!) - .eq('target_id', productId) - .eq('target_type', 1) - .delete() - .execute() - - if (response.error != null) { - console.error('取消收藏失败:', response.error) - return true // 仍然是收藏状态 - } - return false // 已取消收藏 - } else { - // Add - const response = await supa - .from('ml_user_favorites') - .insert({ - user_id: userId, - target_id: productId, - target_type: 1, - created_at: new Date().toISOString() - }) - .execute() - - if (response.error != null) { - console.error('添加收藏失败:', response.error) - return false // 添加失败,仍未收藏 - } - return true // 已收藏 - } - } catch (e) { - console.error('切换收藏状态异常:', e) - // 发生异常时,尝试查询当前状态返回 - return await this.checkFavorite(productId) - } - } - - async getFavorites(): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) { - const empty: any[] = [] - return empty - } - - // 第一步:查询收藏列表 - const response = await supa - .from('ml_user_favorites') - .select('*') - .eq('user_id', userId!) - .eq('target_type', 1) - .order('created_at', { ascending: false }) - .execute() - - if (response.error != null) { - const empty: any[] = [] - return empty - } - const favorites = response.data as any[] - if (favorites == null || favorites.length === 0) { - const empty: any[] = [] - return empty - } - - // 第二步:收集商品ID - const productIds: string[] = [] - for (let i = 0; i < favorites.length; i++) { - let item: any = favorites[i] - let pid = '' - if (item instanceof UTSJSONObject) { - pid = item.getString('target_id') ?? '' - } else { - const itemObj = JSON.parse(JSON.stringify(item)) as UTSJSONObject - pid = itemObj.getString('target_id') ?? '' - } - if (pid !== '') productIds.push(pid) - } - - if (productIds.length === 0) return [] - - // 第三步:批量查询商品详情 - const anyProductIds = productIds as any[] - const productRes = await supa - .from('ml_products') - .select('id, name, main_image_url, base_price, sale_count') - .in('id', anyProductIds) - .execute() - - if (productRes.error != null) { - const empty: any[] = [] - return empty - } - const products = productRes.data as any[] - const productMap = new Map() - - for (let i = 0; i < products.length; i++) { - // 显式声明类型为 any - let p: any = products[i] - let pid = '' - if (p instanceof UTSJSONObject) { - pid = p.getString('id') ?? '' - } else { - const pObj = JSON.parse(JSON.stringify(p)) as UTSJSONObject - pid = pObj.getString('id') ?? '' - } - if (pid !== '') productMap.set(pid, p) - } - - // 第四步:组合数据 - const result: any[] = [] - for (let i = 0; i < favorites.length; i++) { - let item: any = favorites[i] - let newItem: UTSJSONObject - - if (item instanceof UTSJSONObject) { - // Deep copy to ensure we have a fresh object to modify - newItem = JSON.parse(JSON.stringify(item)) as UTSJSONObject - } else { - newItem = JSON.parse(JSON.stringify(item)) as UTSJSONObject - } - - let targetId = newItem.getString('target_id') - // Careful with null targetId - if (targetId != null) { - const product = productMap.get(targetId as string) - if (product != null) { - newItem.set('ml_products', product) - result.push(newItem) - } - } - } - - return result - } catch (e) { - console.error('获取收藏列表异常:', e) - return [] - } - } - - // 获取足迹列表 - async getFootprints(): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) { - console.log('[getFootprints] 用户未登录') - const empty: any[] = [] - return empty - } - - console.log('[getFootprints] 查询足迹, userId:', userId) - - // 1. 获取足迹记录 - const response = await supa - .from('ml_user_footprints') - .select('*') - .eq('user_id', userId!) - .order('updated_at', { ascending: false }) - .limit(50) - .execute() - - console.log('[getFootprints] 足迹查询 error:', response.error) - console.log('[getFootprints] 足迹查询 data:', JSON.stringify(response.data)) - - if (response.error != null) { - console.error('[getFootprints] 获取足迹失败:', response.error) - const empty: any[] = [] - return empty - } - - const footprints = response.data as any[] - if (footprints == null || footprints.length === 0) { - console.log('[getFootprints] 没有足迹记录') - const empty: any[] = [] - return empty - } - - console.log('[getFootprints] 足迹记录数量:', footprints.length) - - // 2. 收集商品ID - const productIds: string[] = [] - for (let i = 0; i < footprints.length; i++) { - let item = footprints[i] - let pid = '' - if (item instanceof UTSJSONObject) { - pid = item.getString('product_id') ?? '' - } else { - const itemObj = JSON.parse(JSON.stringify(item)) as UTSJSONObject - pid = itemObj.getString('product_id') ?? '' - } - if (pid !== '' && !productIds.includes(pid)) productIds.push(pid) - } - - if (productIds.length === 0) return [] - - const productIdsAny: any[] = [] - for(let i=0; i() - for(let i=0; i { - try { - const userId = this.getCurrentUserId() - if (userId == null) { - console.log('[addFootprint] 用户未登录') - return false - } - - console.log('[addFootprint] 添加足迹, userId:', userId, 'productId:', productId) - - // 检查是否已存在 - const checkRes = await supa - .from('ml_user_footprints') - .select('id') - .eq('user_id', userId!) - .eq('product_id', productId) - .execute() - - console.log('[addFootprint] 检查结果 error:', checkRes.error) - console.log('[addFootprint] 检查结果 data:', JSON.stringify(checkRes.data)) - - const checkData = checkRes.data as any[] - const exists = checkData != null && Array.isArray(checkData) && checkData.length > 0 - - if (checkRes.error == null && exists) { - console.log('[addFootprint] 足迹已存在,更新时间') - // 更新时间 - const updateRes = await supa - .from('ml_user_footprints') - .update({ updated_at: new Date().toISOString() }) - .eq('user_id', userId!) - .eq('product_id', productId) - .execute() - console.log('[addFootprint] 更新结果 error:', updateRes.error) - } else { - console.log('[addFootprint] 足迹不存在,插入新记录') - // 插入新记录 - const insertPayload = new UTSJSONObject() - insertPayload.set('user_id', userId!) - insertPayload.set('product_id', productId) - insertPayload.set('created_at', new Date().toISOString()) - insertPayload.set('updated_at', new Date().toISOString()) - - const insertRes = await supa - .from('ml_user_footprints') - .insert(insertPayload) - .execute() - console.log('[addFootprint] 插入结果 error:', insertRes.error) - } - return true - } catch (e) { - console.error('[addFootprint] 添加足迹异常:', e) - return false - } - } - - async getAddressList(): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) { - const empty: UserAddress[] = [] - return empty - } - - const response = await supa - .from('ml_user_addresses') - .select('*, recipient_name:receiver_name, phone:receiver_phone, detail_address:address_detail') - .eq('user_id', userId!) - .order('is_default', { ascending: false }) - .order('created_at', { ascending: false }) - .execute() - - if (response.error != null) { - console.error('获取地址列表失败:', response.error) - const empty: UserAddress[] = [] - return empty - } - return response.data as UserAddress[] - } catch (e) { - console.error('获取地址列表异常:', e) - const empty: UserAddress[] = [] - return empty - } - } - - // 设置默认地址 - async setDefaultAddress(addressId: string): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) { - console.error('用户未登录,无法设置默认地址') - return false - } - - // 先取消所有默认地址 - await this.clearDefaultAddress(userId!) - - // 设置新的默认地址 - const response = await supa - .from('ml_user_addresses') - .update({ - is_default: true, - updated_at: new Date().toISOString() - }) - .eq('id', addressId) - .eq('user_id', userId!) - .execute() - - if (response.error != null) { - console.error('设置默认地址失败:', response.error) - return false - } - - return true - } catch (error) { - console.error('设置默认地址异常:', error) - return false - } - } - - // 获取用户优惠券列表 - async getUserCoupons(status: number = 1): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) { - const empty: UserCoupon[] = [] - return empty - } - - // 假设有一个视图或者直接关联 ml_user_coupons 和 ml_coupon_templates - // 这里简化处理,尝试直接从 ml_user_coupons 读取,并且加入 template 信息 - // 如果没有 view,可能需要改为两个查询或者使用 left join - const response = await supa - .from('ml_user_coupons') - .select(` - *, - template:ml_coupon_templates(name, amount, min_spend) - `) - .eq('user_id', userId!) - .eq('status', status) - .order('expire_at', { ascending: true }) - .execute() - - if (response.error != null) { - console.error('获取优惠券失败:', response.error) - const empty: UserCoupon[] = [] - return empty - } - - // 映射数据,将 template 的字段展平 - const coupons: UserCoupon[] = [] - const rawData = response.data as any[] - for (let i = 0; i < rawData.length; i++) { - const item = rawData[i] - let template: any | null = null - let itemId = '' - let itemUserId = '' - let itemTmplId = '' - let itemCode = '' - let itemStatus = 0 - let itemRecv = '' - let itemExpire = '' - - if (item instanceof UTSJSONObject) { - template = item.get('template') as any | null - itemId = item.getString('id') ?? '' - itemUserId = item.getString('user_id') ?? '' - itemTmplId = item.getString('template_id') ?? '' - itemCode = item.getString('coupon_code') ?? '' - itemStatus = item.getNumber('status') ?? 0 - itemRecv = item.getString('received_at') ?? '' - itemExpire = item.getString('expire_at') ?? '' - } else { - const iObj = JSON.parse(JSON.stringify(item)) as UTSJSONObject - template = iObj.get('template') as any | null - itemId = iObj.getString('id') ?? '' - itemUserId = iObj.getString('user_id') ?? '' - itemTmplId = iObj.getString('template_id') ?? '' - itemCode = iObj.getString('coupon_code') ?? '' - itemStatus = iObj.getNumber('status') ?? 0 - itemRecv = iObj.getString('received_at') ?? '' - itemExpire = iObj.getString('expire_at') ?? '' - } - - if (template == null) template = new UTSJSONObject() - - let tName = '' - let tAmount = 0 - let tMin = 0 - - if (template instanceof UTSJSONObject) { - tName = template.getString('name') ?? '优惠券' - tAmount = template.getNumber('amount') ?? 0 - tMin = template.getNumber('min_spend') ?? 0 - } else { - const tObj = JSON.parse(JSON.stringify(template)) as UTSJSONObject - tName = tObj.getString('name') ?? '优惠券' - tAmount = tObj.getNumber('amount') ?? 0 - tMin = tObj.getNumber('min_spend') ?? 0 - } - - const couponObj = new UTSJSONObject() - couponObj.set('id', itemId) - couponObj.set('user_id', itemUserId) - couponObj.set('template_id', itemTmplId) - couponObj.set('coupon_code', itemCode) - couponObj.set('status', itemStatus) - couponObj.set('received_at', itemRecv) - couponObj.set('expire_at', itemExpire) - couponObj.set('template_name', tName) - couponObj.set('amount', tAmount) - couponObj.set('min_spend', tMin) - - coupons.push(couponObj as UserCoupon) - } - - return coupons - } catch (e) { - console.error('获取优惠券异常:', e) - const empty: UserCoupon[] = [] - return empty - } - } - - // 获取可用优惠券数量 - async getUserCouponCount(): Promise { - try { - const userId = this.getCurrentUserId() - if (userId == null) return 0 - - const response = await supa - .from('ml_user_coupons') - .select('id', { count: 'exact' }) - .eq('user_id', userId!) - .eq('status', 1) // 1: unused - .gt('expire_at', new Date().toISOString()) // 未过期 - .limit(1) // Limit to 1 to reduce data transfer, we only want the count - .execute() - - if (response.error != null) { - return 0 - } - return response.total ?? 0 - } catch (e) { - return 0 - } - } - - // 获取店铺/商品可用优惠券 - async getAvailableCoupons(merchantId: string): Promise { - return this.fetchShopCoupons(merchantId) - } - - // ALIAS for Cache busting: 获取店铺优惠券 - async fetchShopCoupons(merchantId: string): Promise { - try { - // 查询该商家的优惠券 + 平台通用券 (merchant_id is null) - // 注意:这里简化逻辑,实际可能需要联合查询用户是否已领取 - const response = await supa - .from('ml_coupon_templates') - .select('*') - .or(`merchant_id.eq.${merchantId},merchant_id.is.null`) - .eq('status', 1) - .gt('end_time', new Date().toISOString()) - .order('discount_value', { ascending: false }) - .execute() - - if (response.error != null) { - console.error('Fetch coupons failed:', response.error) - const empty: any[] = [] - return empty - } - - const data = response.data - if (data == null) { - const empty: any[] = [] - return empty - } - return data as any[] - } catch (e) { - console.error('Fetch coupons error:', e) - const empty: any[] = [] - return empty - } - } - - // 领取优惠券 - async claimCoupon(templateId: string, userId: string): Promise { - return this.claimShopCoupon(templateId, userId) - } - - // ALIAS for Cache busting - async claimShopCoupon(templateId: string, userId: string): Promise { - try { - console.log('Claiming coupon templateId:', templateId, 'userId:', userId) - - // 1. Fetch template details to get merchant_id and validity - const tmplRes = await supa - .from('ml_coupon_templates') - .select('*') - .eq('id', templateId) - .limit(1) - .execute() - - if (tmplRes.error != null) { - console.error('Claim Coupon: Template query error', tmplRes.error) - return false - } - - // Null check for data - if (tmplRes.data == null) { - console.error('Claim Coupon: Template data response is null') - return false - } - - const dataList = tmplRes.data as any[] - if (dataList.length === 0) { - console.error('Claim Coupon: Template not found (empty list)') - return false - } - - const template = dataList[0] - - // Safe property access - let validDays = 0 - let endTimeStr: string | null = null - let merchantId: string | null = null - - if (template instanceof UTSJSONObject) { - validDays = template.getNumber('valid_days') ?? 0 - endTimeStr = template.getString('end_time') - merchantId = template.getString('merchant_id') - } else { - const tJson = JSON.parse(JSON.stringify(template)) as UTSJSONObject - validDays = tJson.getNumber('valid_days') ?? 0 - endTimeStr = tJson.getString('end_time') - merchantId = tJson.getString('merchant_id') - } - - // Calculate expire_at - let expireAt = new Date(Date.now() + 30 * 24 * 60 * 60 * 1000).toISOString() - if (validDays > 0) { - expireAt = new Date(Date.now() + (validDays * 24 * 60 * 60 * 1000)).toISOString() - } else if (endTimeStr != null && endTimeStr !== '') { - expireAt = endTimeStr - } - - // Handle UUID fields: Empty string is not valid UUID, must be null - if (merchantId != null && merchantId.length === 0) { - merchantId = null - } - - // 2. Insert into user coupons with merchant_id - const insertData = { - user_id: userId, - template_id: templateId, - merchant_id: merchantId, // Important for shop filtering: null for platform coupons - coupon_code: 'C' + Date.now() + Math.floor(Math.random() * 1000), - status: 1, - expire_at: expireAt, - received_at: new Date().toISOString() - } - - console.log('Claim Coupon Insert Payload:', JSON.stringify(insertData)) - - const response = await supa - .from('ml_user_coupons') - .insert(insertData) - .execute() - - if (response.error != null) { - console.error('Claim Coupon: Insert failed:', JSON.stringify(response.error)) - // 尝试降级:如果 merchant_id 报错,尝试不带 merchant_id (仅调试用,或兼容旧表结构) - if (JSON.stringify(response.error).includes('merchant_id')) { - console.log('Retrying without merchant_id...') - const fallbackData = { - user_id: userId, - template_id: templateId, - coupon_code: 'C' + Date.now() + Math.random().toString().substring(2,6), - status: 1, - expire_at: expireAt, - received_at: new Date().toISOString() - } - const res2 = await supa.from('ml_user_coupons').insert(fallbackData).execute() - if (res2.error == null) return true - } - return false - } - return true - } catch(e) { - console.error('Claim coupon error:', e) - return false - } - } - - // ========================================== - // 聊天相关方法 - // ========================================== - - // 获取特定会话的消息历史 - async getChatMessages(merchantId: string, page: number = 1, pageSize: number = 20): Promise { - const userId = this.getCurrentUserId() - if (userId == null) { - const empty: ChatMessage[] = [] - return empty - } - - // 计算分页 range - const fromIndex = (page - 1) * pageSize - const toIndex = fromIndex + pageSize - 1 - - try { - // 使用 or 组合条件查询:(sender_id=me AND receiver_id=merchant) OR (sender_id=merchant AND receiver_id=me) - // 注意:Supabase postgrest-js 的 .or() 语法如果是针对同一列很简单,针对复杂逻辑用 string syntax - // 这里简化处理,如果不加 userId 过滤,全靠 RLS - const response = await supa - .from('ml_chat_messages') - .select('*') - .or(`sender_id.eq.${merchantId},receiver_id.eq.${merchantId}`) - .order('created_at', { ascending: false }) - .range(fromIndex, toIndex) - .execute() - - if (response.error != null) { - console.error('getChatMessages error:', response.error) - const empty: ChatMessage[] = [] - return empty - } - - const data = response.data - if (data == null) { - const empty: ChatMessage[] = [] - return empty - } - - return data as ChatMessage[] - } catch (e) { - console.error('getChatMessages exception:', e) - const empty: ChatMessage[] = [] - return empty - } - } - - // 发送消息 - async sendMessage(merchantId: string, content: string, msgType: string = 'text'): Promise { - // 确保 session 有效 - const userId = this.getCurrentUserId() - if (userId == null) { - console.error("sendMessage failed: user not logged in or session lost") - return false - } - - try { - // Debug check - // const session = supa.getSession() - // console.log("Sending check: UserID", userId, "AuthID:", session.user?.getString('id')) - - const msg = { - sender_id: userId!, - receiver_id: merchantId, - content: content, - msg_type: msgType, - is_read: false, - is_from_user: true - } - - const response = await supa - .from('ml_chat_messages') - .insert(msg) - .execute() - - if (response.error != null) { - console.error('sendMessage error:', response.error) - return false - } - return true - } catch (e) { - console.error('sendMessage exception:', e) - return false - } - } - - // 标记会话已读 - async markRead(merchantId: string): Promise { - const userId = this.getCurrentUserId() - if (userId == null) return false - try { - const response = await supa - .from('ml_chat_messages') - .update({ is_read: true }) - .eq('sender_id', merchantId) - .eq('receiver_id', userId) - .eq('is_read', false) - .execute() - - if (response.error != null) return false - } catch (e) { return false } - return true - } -} - -// 导出单例实例 -export const supabaseService = new SupabaseService() - -// 默认导出 -export default supabaseService diff --git a/pages/mall/consumer/cart.uvue b/pages/mall/consumer/cart.uvue index e3cbcc2c..17f4e715 100644 --- a/pages/mall/consumer/cart.uvue +++ b/pages/mall/consumer/cart.uvue @@ -200,6 +200,7 @@ type RecommendProduct = { price: number image: string skuId: string + merchant_id: string } // 响应式数据 @@ -326,9 +327,10 @@ const loadCartData = async () => { shopId: p.merchant_id ?? 'unknown', shopName: p.shop_name ?? '商城推荐', name: p.name, - price: p.base_price ?? p.price ?? 0, - image: p.main_image_url ?? '/static/images/default-product.png', - skuId: '' + price: p.base_price ?? p.market_price ?? 0, + image: p.main_image_url ?? p.image_url ?? '/static/images/default-product.png', + skuId: '', + merchant_id: p.merchant_id ?? '' } }) } else { @@ -558,31 +560,52 @@ const deleteSelectedItems = async () => { }) } -const addToCart = async (product: any) => { +const addToCart = async (product: RecommendProduct) => { + uni.showLoading({ title: '检查商品...' }) try { - // 调用SupabaseService添加商品到购物车 - // 显式访问属性,避免any类型导致的编译错误 - const target = product as UTSJSONObject - const productId = target.getString('id') ?? '' - const skuId = target.getString('skuId') ?? '' - const success = await supabaseService.addToCart(productId, 1, skuId) - if (success) { + const productId = product.id + const skuId = product.skuId + const merchantId = product.merchant_id + + // 检查商品是否有SKU + const skus = await supabaseService.getProductSkus(productId) + uni.hideLoading() + + if (skus.length > 0) { + // 有规格,提示并跳转到商品详情页选择规格 uni.showToast({ - title: '已添加到购物车', - icon: 'success' - }) - - // 重新加载购物车数据 - loadCartData() - } else { - console.error('添加商品到购物车失败') - uni.showToast({ - title: '添加失败', + title: '请选择规格', icon: 'none' }) + setTimeout(() => { + uni.navigateTo({ + url: '/pages/mall/consumer/product-detail?id=' + productId + }) + }, 500) + } else { + // 无规格,直接加入购物车 + uni.showLoading({ title: '添加中...' }) + const success = await supabaseService.addToCart(productId, 1, skuId, merchantId) + uni.hideLoading() + if (success) { + uni.showToast({ + title: '已添加到购物车', + icon: 'success' + }) + + // 重新加载购物车数据 + loadCartData() + } else { + console.error('添加商品到购物车失败') + uni.showToast({ + title: '添加失败', + icon: 'none' + }) + } } } catch (error) { console.error('添加商品到购物车异常:', error) + uni.hideLoading() uni.showToast({ title: '添加失败', icon: 'none' diff --git a/pages/mall/consumer/category.uvue b/pages/mall/consumer/category.uvue index 027b6f27..c03ab4a1 100644 --- a/pages/mall/consumer/category.uvue +++ b/pages/mall/consumer/category.uvue @@ -65,30 +65,16 @@ class="product-card" @click="navigateToProduct(product)" > - 热销 - - {{ product.name }} - - - - ¥ - {{ product.base_price ?? product.price ?? 0 }} - - - ¥{{ product.market_price }} - - - - - {{ product.brand_name ?? product.shop_name ?? '自营' }} - - 已售{{ product.sale_count }} - + {{ product.name }} + + ¥{{ product.base_price ?? product.price ?? 0 }} + + + @@ -464,32 +450,53 @@ onShow(() => { // 添加到购物车 async function addToCart(product: Product): Promise { - uni.showLoading({ title: '添加中...' }) + uni.showLoading({ title: '检查商品...' }) try { const pid = (product.id ?? '').toString() + const merchantId = product.merchant_id ?? '' if (pid === '') { uni.hideLoading() uni.showToast({ title: '商品无效', icon: 'none' }) return } - const success = await supabaseService.addToCart(pid, 1, '') - if (success) { + + // 检查商品是否有SKU + const skus = await supabaseService.getProductSkus(pid) + uni.hideLoading() + + if (skus.length > 0) { + // 有规格,提示并跳转到商品详情页选择规格 uni.showToast({ - title: '已添加到购物车', - icon: 'success' - }) - cartCount.value++ - } else { - uni.showToast({ - title: '添加失败,请先登录', + title: '请选择规格', icon: 'none' }) + setTimeout(() => { + uni.navigateTo({ + url: '/pages/mall/consumer/product-detail?id=' + pid + }) + }, 500) + } else { + // 无规格,直接加入购物车 + uni.showLoading({ title: '添加中...' }) + const success = await supabaseService.addToCart(pid, 1, '', merchantId) + uni.hideLoading() + if (success) { + uni.showToast({ + title: '已添加到购物车', + icon: 'success' + }) + cartCount.value++ + } else { + uni.showToast({ + title: '添加失败,请先登录', + icon: 'none' + }) + } } } catch (e) { console.error('添加到购物车异常', e) - uni.showToast({ title: '操作失败', icon: 'none' }) - } finally { uni.hideLoading() + uni.showToast({ title: '操作失败', icon: 'none' }) } } @@ -794,111 +801,70 @@ function onScan(): void { } .product-card { - background: white; - border-radius: 12px; + display: flex; + flex-direction: column; + background: #fff; + border-radius: 8px; overflow: hidden; - /* cursor: pointer; removed for uniapp-x support */ - transition: all 0.3s ease; - border: 1px solid #e0e0e0; - position: relative; - /* margin: 10px; gap replacement - moved to logic */ - width: 44%; /* Decreased to 44% to ensure it fits (44 + 3 + 3 = 50%) */ - margin: 3%; /* Increased margin */ - box-sizing: border-box; /* Ensure border IS included in width */ -} - -.product-card:hover { - transform: translateY(-4px); - box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12); -} - -.product-badge { - position: absolute; - top: 12px; - left: 12px; - background: #FF5722; - color: white; - font-size: 11px; - padding: 4px 12px; - border-radius: 12px; - font-weight: 700; - z-index: 2; + width: 48%; + margin-bottom: 12px; } .product-image { width: 100%; - height: 160px; - /* object-fit: cover; REMOVED for uniapp-x support - default behavior is often acceptable or handle via image mode */ - background: white; -} - -.product-info { - padding: 16px; + height: 170px; + border-radius: 8px; + margin-bottom: 8px; + background: #f5f5f5; } .product-name { - font-size: 15px; - font-weight: 700; + font-size: 13px; color: #333; - margin-bottom: 4px; - /* display: block; REMOVED for uniapp-x support */ + margin-bottom: 5px; line-height: 1.4; + height: 36px; + overflow: hidden; + text-overflow: ellipsis; + padding: 0 8px; } -.product-spec { - font-size: 13px; - color: #666; - margin-bottom: 12px; - /* display: block; REMOVED for uniapp-x support */ -} - -.price-section { +.product-bottom { display: flex; flex-direction: row; - align-items: flex-end; /* changed from baseline */ - /* gap: 8px; */ - margin-bottom: 12px; -} - -.current-price { - display: flex; - flex-direction: row; - align-items: flex-end; /* changed from baseline */ - margin-right: 8px; /* gap replacement */ -} - -.price-symbol { - font-size: 14px; - color: #FF5722; -} - -.price-value { - font-size: 20px; - font-weight: bold; - color: #FF5722; - margin-left: 2px; -} - -.original-price { - font-size: 13px; - color: #999; - /* text-decoration: line-through; REMOVED for uniapp-x support */ -} - -.product-meta { - display: flex; justify-content: space-between; align-items: center; - font-size: 12px; - margin-bottom: 12px; + padding: 0 8px 8px; } -.manufacturer { - color: #666; +.product-price { + font-size: 15px; + color: #ff5000; + font-weight: bold; } -.sales-count { - color: #999; +.product-add-btn { + width: 24px; + height: 24px; + background-color: #ff5000; + border-radius: 12px; + display: flex; + align-items: center; + justify-content: center; +} + +.add-icon { + color: #fff; + font-size: 16px; + font-weight: bold; +} + +.product-grid { + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: space-between; + padding: 8px; } .product-action { diff --git a/pages/mall/consumer/checkout.uvue b/pages/mall/consumer/checkout.uvue index ff620735..2b021b62 100644 --- a/pages/mall/consumer/checkout.uvue +++ b/pages/mall/consumer/checkout.uvue @@ -1309,6 +1309,12 @@ const submitOrder = async () => { const groups: any[] = [] for (let i = 0; i < shopGroups.value.length; i++) { const group = shopGroups.value[i] + console.log(`[submitOrder] 处理店铺组 ${i}:`, { + shopId: group.shopId, + shopName: group.shopName, + merchant_id: group.merchant_id, + itemsCount: group.items.length + }) const items: any[] = [] for (let j = 0; j < group.items.length; j++) { const item = group.items[j] @@ -1323,8 +1329,10 @@ const submitOrder = async () => { specifications: item.sku_specifications }) } + const finalMerchantId = (group.merchant_id != null && group.merchant_id != '') ? group.merchant_id : group.shopId + console.log(`[submitOrder] 店铺组 ${i} 最终使用的 merchant_id:`, finalMerchantId) groups.push({ - merchant_id: (group.merchant_id != null && group.merchant_id != '') ? group.merchant_id : group.shopId, + merchant_id: finalMerchantId, shopId: group.shopId, shopName: group.shopName, items: items diff --git a/pages/mall/consumer/doc/uts.txt b/pages/mall/consumer/doc/uts.txt index 291b535e..15520835 100644 --- a/pages/mall/consumer/doc/uts.txt +++ b/pages/mall/consumer/doc/uts.txt @@ -1394,3 +1394,598 @@ getCurrentUserId 函数 - 将可选链替换为显式 null 检查和 UTSJSONObje ================================================================================ 文档结束 ================================================================================ + +================================================================================ +二十四、2026-02-27 函数可选参数限制(重要) +================================================================================ + +1. 可选参数不能跳过传递 + - UTS Android 不支持跳过可选参数传递 + - 如果函数有多个可选参数,必须按顺序传递所有参数 + - 错误示例: + ```typescript + // 函数定义 + async addToCart(productId: string, quantity: number = 1, skuId?: string, merchantId?: string): Promise + + // 错误调用 - 跳过了 merchantId 参数 + await supabaseService.addToCart(productId, 1, '') + // 编译错误:No value passed for parameter 'merchantId' + ``` + - 正确示例: + ```typescript + // 方案1:给可选参数添加默认值 + async addToCart(productId: string, quantity: number = 1, skuId: string = '', merchantId: string = ''): Promise + + // 方案2:调用时传递所有参数 + await supabaseService.addToCart(productId, 1, '', '') + ``` + +2. 可选参数定义规范 + - 推荐使用 `param: Type = defaultValue` 而非 `param?: Type` + - `param?: Type` 在 Android 端调用时仍需传递参数 + - `param: Type = defaultValue` 可以在不传参时使用默认值 + - 示例: + ```typescript + // 不推荐 - 调用时仍需传递参数 + function foo(a: string, b?: string, c?: string): void + + // 推荐 - 可以跳过参数使用默认值 + function foo(a: string, b: string = '', c: string = ''): void + ``` + +3. 编译错误提示 + - 错误信息:"No value passed for parameter 'xxx'" + - 原因:可选参数在 Android 端不能跳过 + - 解决: + 1. 修改函数签名,使用默认值 `param: Type = defaultValue` + 2. 调用时传递所有参数 + +4. 最佳实践 + - 对于有多个可选参数的函数,统一使用默认值语法 + - 调用时显式传递所有参数,避免依赖可选参数跳过 + - 在服务层函数定义中,优先使用 `= ''` 或 `= 0` 等默认值 + +================================================================================ +二十五、2026-02-27 模板中的非空断言限制(重要) +================================================================================ + +1. 模板中不支持非空断言操作符 `!` + - UTS Android 模板中不能使用 `variable!` 非空断言 + - 错误示例: + ```html + + ``` + - 正确示例: + ```html + + ``` + +2. 编译错误提示 + - 错误信息:"参数类型不匹配:实际类型为 'Number?',预期类型为 'Number'" + - 原因:模板中使用非空断言 `!` 不被支持 + - 解决:移除非空断言 `!`,直接使用变量进行比较 + +3. 最佳实践 + - 在模板中,先用 `!= null` 判断可空类型,然后直接使用变量 + - UTS 编译器会在 `!= null` 判断后自动识别变量为非空类型 + +================================================================================ +二十六、2026-02-27 未导入类型的处理(重要) +================================================================================ + +1. 未导入的类型不能直接使用 + - 在页面中使用的类型必须先导入或使用 UTSJSONObject 替代 + - 错误示例: + ```typescript + // Shop 类型未导入 + const s = shopRespData[i] as Shop + const id = s.id // 找不到名称 "id" + ``` + - 正确示例: + ```typescript + // 使用 UTSJSONObject + const s = shopRespData[i] as UTSJSONObject + const id = s.getString('id') ?? '' + const name = s.getString('shop_name') ?? '' + ``` + +2. 编译错误提示 + - 错误信息:"找不到名称 'XXX'" + - 原因:类型未导入或类型定义不存在 + - 解决: + 1. 导入需要的类型:`import { Shop } from '@/utils/supabaseService.uts'` + 2. 使用 UTSJSONObject 替代:`as UTSJSONObject` 然后用 `getString()`、`getNumber()` 访问属性 + +3. 最佳实践 + - 对于简单的数据转换,推荐使用 UTSJSONObject + - 避免在多个文件中重复定义相同的类型 + - 如果需要类型安全,从服务层导入类型定义 + +================================================================================ +二十七、2026-02-27 服务层数据字段完整性(重要) +================================================================================ + +1. 服务层返回数据必须包含所有必要字段 + - 从数据库获取数据时,必须正确映射所有需要的字段 + - 错误示例: + ```typescript + const product: Product = { + id: prodObj.getString('id') ?? '', + name: prodObj.getString('name') ?? '', + // 错误:merchant_id 硬编码为空字符串 + merchant_id: '' + } as Product + ``` + - 正确示例: + ```typescript + const product: Product = { + id: prodObj.getString('id') ?? '', + name: prodObj.getString('name') ?? '', + // 正确:从数据库获取 merchant_id + merchant_id: prodObj.getString('merchant_id') ?? '' + } as Product + ``` + +2. 调用服务层方法时必须传递完整参数 + - 页面调用服务层方法时,需要传递所有必要参数 + - 错误示例: + ```typescript + // 错误:merchant_id 传空字符串 + await supabaseService.addToCart(productId, 1, '', '') + ``` + - 正确示例: + ```typescript + // 正确:从商品对象获取 merchant_id + const merchantId = product.merchant_id ?? '' + await supabaseService.addToCart(productId, 1, '', merchantId) + ``` + +3. 编译错误提示 + - 问题表现:数据添加到数据库失败,或添加的数据不完整 + - 原因:服务层或页面层缺少必要字段的传递 + - 解决: + 1. 检查服务层数据映射是否完整 + 2. 检查页面调用时是否传递了所有必要参数 + +4. 最佳实践 + - 服务层方法返回的对象应包含数据库视图的所有字段 + - 页面调用服务层方法时,应从数据对象中获取并传递所有参数 + - 对于关联数据(如 merchant_id),确保在数据加载时一并获取 + +================================================================================ +二十八、2026-02-27 模板中的非运算符限制(重要) +================================================================================ + +1. 模板中不支持 `!` 非运算符 + - UTS Android 模板中不能使用 `!variable` 非运算符 + - 错误示例: + ```html + + ``` + - 正确示例: + ```html + + ``` + +2. 编译错误提示 + - 错误信息:"找不到名称'not'" + - 原因:模板中不支持非运算符 `!` + - 解决:使用显式的比较表达式替代 + +3. 最佳实践 + - 使用 `== null` 或 `== ''` 检查空值 + - 使用 `!= null && != ''` 检查非空值 + +================================================================================ +二十九、2026-02-27 索引访问限制(重要) +================================================================================ + +1. 不支持 `(obj as any)['key']` 索引访问方式 + - UTS Android 不支持对 any 类型使用索引访问 + - 错误示例: + ```typescript + const detail = (e as any)['detail'] + val = detail['value'] ?? '' + ``` + - 正确示例: + ```typescript + // 方案1:使用 UTSJSONObject + const eObj = JSON.parse(JSON.stringify(e)) as UTSJSONObject + const detail = eObj.get('detail') as UTSJSONObject + val = detail.getString('value') ?? '' + + // 方案2:先判断类型再转换 + if (e instanceof UTSJSONObject) { + const eObj = e as UTSJSONObject + const detail = eObj.get('detail') as UTSJSONObject + val = detail.getString('value') ?? '' + } + ``` + +2. 编译错误提示 + - 错误信息:"Unresolved reference. None of the following candidates is applicable because of a receiver type mismatch" + - 原因:any 类型不支持索引访问 + - 解决:转换为 UTSJSONObject 后使用 `.get()` 方法 + +3. 最佳实践 + - 统一使用 UTSJSONObject 处理动态对象 + - 使用 `.get()`、`.getString()`、`.getNumber()` 方法访问属性 + - 对于复杂对象,先用 `JSON.parse(JSON.stringify(obj))` 转换 + +================================================================================ +三十、2026-02-27 字符串不能直接作为布尔条件(重要) +================================================================================ + +1. 字符串不能直接作为 if 条件 + - UTS Android 不支持将字符串直接作为布尔条件判断 + - 错误示例: + ```typescript + const paramId = '123' + if (paramId) { // 错误:字符串不能直接作为布尔条件 + // ... + } + ``` + - 正确示例: + ```typescript + const paramId = '123' + if (paramId != null && paramId != '') { // 正确:显式判断 + // ... + } + ``` + +2. 编译错误提示 + - 错误信息:"Condition type mismatch: inferred type is 'String' but 'Boolean' was expected" + - 原因:字符串类型不能直接作为布尔条件 + - 解决:使用显式的比较表达式 + +3. 最佳实践 + - 使用 `!= null && != ''` 检查字符串非空 + - 使用 `== null || == ''` 检查字符串为空 + +================================================================================ +三十一、2026-02-27 函数定义顺序(重要) +================================================================================ + +1. 函数必须在调用前定义 + - UTS Android 要求函数在调用之前完成定义 + - 这与 JavaScript 的函数提升不同 + - 错误示例: + ```typescript + onMounted(() => { + loadData() // 错误:loadData 还未定义 + }) + + const loadData = async () => { + // ... + } + ``` + - 正确示例: + ```typescript + const loadData = async () => { + // ... + } + + onMounted(() => { + loadData() // 正确:loadData 已定义 + }) + ``` + +2. 编译错误提示 + - 错误信息:"找不到名称'xxx'" + - 原因:函数在调用点之后定义 + - 解决:将函数定义移到调用之前 + +3. 最佳实践 + - 将所有函数定义放在生命周期钩子(onMounted、onShow 等)之前 + - 按依赖关系排序函数定义顺序 + +================================================================================ +三十二、2026-02-27 联合类型属性访问(重要) +================================================================================ + +1. 联合类型不能直接访问属性 + - 当参数类型为联合类型(如 `A | B`)时,不能直接访问属性 + - 错误示例: + ```typescript + type A = { id: string, name: string } + type B = { id: string, title: string } + + const foo = (item: A | B) => { + const id = item.id // 错误:联合类型不能直接访问属性 + } + ``` + - 正确示例: + ```typescript + const foo = (item: A | B) => { + // 方案1:转换为 UTSJSONObject + const obj = JSON.parse(JSON.stringify(item)) as UTSJSONObject + const id = obj.getString('id') ?? '' + + // 方案2:使用类型守卫 + if ('name' in item) { + const id = item.id // 此时类型已收窄为 A + } + } + ``` + +2. 编译错误提示 + - 错误信息:"找不到名称'xxx'" + - 原因:联合类型的属性访问受限 + - 解决:转换为 UTSJSONObject 或使用类型守卫 + +3. 最佳实践 + - 对于联合类型参数,统一转换为 UTSJSONObject 处理 + - 使用 `.getString()`、`.getNumber()` 等方法安全访问属性 + +================================================================================ +三十三、2026-02-27 any 类型变量不能赋值为 null(重要) +================================================================================ + +1. any 类型变量不能赋值为 null + - UTS Android 中 `any` 类型不能赋值为 `null` + - 错误示例: + ```typescript + let res: any = null // 错误:Null cannot be a value of a non-null type 'Any' + ``` + - 正确示例: + ```typescript + let res: any = {} // 正确:使用空对象 + // 或者 + let res: any | null = null // 使用联合类型 + ``` + +2. 编译错误提示 + - 错误信息:"Null cannot be a value of a non-null type 'Any'" + - 原因:any 类型不允许 null 值 + - 解决:使用空对象 `{}` 或联合类型 `any | null` + +================================================================================ +三十四、2026-02-27 对象字面量类型推断问题(重要) +================================================================================ + +1. 对象字面量直接赋值给 ref 可能类型不匹配 + - 当对象字面量直接赋值给特定类型的 ref 时,可能报类型不匹配错误 + - 错误示例: + ```typescript + merchant.value = { + id: shop.id, + user_id: shop.merchant_id, + // ... + } // 错误:Assignment type mismatch + ``` + - 正确示例: + ```typescript + // 方案1:显式声明类型 + const merchantData: MerchantType = { + id: shop.id, + user_id: shop.merchant_id, + // ... + } + merchant.value = merchantData + + // 方案2:使用 as 类型断言 + merchant.value = { + id: shop.id, + user_id: shop.merchant_id, + // ... + } as MerchantType + ``` + +2. 编译错误提示 + - 错误信息:"Assignment type mismatch: actual type is '', but 'XXX' was expected" + - 原因:对象字面量被推断为匿名类型 + - 解决:显式声明类型或使用类型断言 + +================================================================================ +三十五、2026-02-27 any 类型不能直接访问属性(重要) +================================================================================ + +1. any 类型参数不能直接访问属性 + - 在 map、forEach 等回调中,any 类型的参数不能直接访问属性 + - 错误示例: + ```typescript + const list = rawList.map((item): ProductType => { + const id = item.id // 错误:找不到名称"id" + const name = item.name // 错误:找不到名称"name" + }) + ``` + - 正确示例: + ```typescript + const list = rawList.map((item: any): ProductType => { + // 方案1:转换为 UTSJSONObject + const itemObj = JSON.parse(JSON.stringify(item)) as UTSJSONObject + const id = itemObj.getString('id') ?? '' + const name = itemObj.getString('name') ?? '' + + // 方案2:显式标注参数类型并使用索引 + // 注意:这种方式在 UTS Android 中也可能有问题 + }) + ``` + +2. 编译错误提示 + - 错误信息:"找不到名称'xxx'" + - 原因:any 类型的属性访问受限 + - 解决:转换为 UTSJSONObject 后使用 `.getString()` 等方法 + +================================================================================ +三十六、2026-02-27 类型断言不会添加方法(重要) +================================================================================ + +1. `as UTSJSONObject` 不会给对象添加方法 + - 使用 `as UTSJSONObject` 只是类型断言,不会让普通对象获得 `getString` 等方法 + - 错误示例: + ```typescript + const profileObj = profile as UTSJSONObject + const id = profileObj.getString('user_id') // 运行时错误:getString is not a function + ``` + - 正确示例: + ```typescript + // 必须使用 JSON.parse(JSON.stringify()) 进行真正的转换 + const profileObj = JSON.parse(JSON.stringify(profile)) as UTSJSONObject + const id = profileObj.getString('user_id') ?? '' + ``` + +2. 运行时错误提示 + - 错误信息:"XXX is not a function" + - 原因:类型断言只是编译时行为,不会改变运行时对象的方法 + - 解决:使用 `JSON.parse(JSON.stringify())` 进行真正的对象转换 + +3. 最佳实践 + - 对于从 API 返回的数据,统一使用 `JSON.parse(JSON.stringify())` 转换 + - 使用 `instanceof UTSJSONObject` 检查对象类型 + - 不要依赖 `as` 类型断言来添加方法 + +================================================================================ +三十七、2026-02-27 类型必须包含所有必填字段(重要) +================================================================================ + +1. 创建类型实例时必须包含所有必填字段 + - UTS 类型定义中的非可选字段(不带 `?`)都是必填的 + - 错误示例: + ```typescript + export type ProductType = { + id: string + merchant_id: string // 必填 + category_id: string // 必填 + name: string + // ... + } + + // 错误:缺少 merchant_id、category_id 等必填字段 + return { + id: item.id, + name: item.name, + price: item.price + } as ProductType // 运行时错误:missing required property + ``` + - 正确示例: + ```typescript + return { + id: itemObj.getString('id') ?? '', + merchant_id: itemObj.getString('merchant_id') ?? '', + category_id: itemObj.getString('category_id') ?? '', + name: itemObj.getString('name') ?? '未知商品', + description: itemObj.getString('description') ?? '', + images: images, + price: itemObj.getNumber('base_price') ?? 0, + original_price: itemObj.getNumber('market_price') ?? 0, + stock: itemObj.getNumber('total_stock') ?? 0, + sales: itemObj.getNumber('sale_count') ?? 0, + status: 1, + created_at: itemObj.getString('created_at') ?? '' + } as ProductType + ``` + +2. 运行时错误提示 + - 错误信息:"Failed to construct type, missing required property: xxx" + - 原因:类型定义中有必填字段未提供 + - 解决: + 1. 检查类型定义,确认所有必填字段 + 2. 为所有必填字段提供值,即使是空字符串或默认值 + +3. 最佳实践 + - 查看类型定义,确认哪些字段是必填的(不带 `?`) + - 使用 `??` 运算符提供默认值 + - 对于可选字段,可以不提供或使用 `null` + +================================================================================ +三十八、2026-02-27 回调函数不能是 async(重要) +================================================================================ + +1. API 回调函数不能使用 async 修饰 + - uni API 的回调函数(如 showModal 的 success)不支持 async 函数 + - 错误示例: + ```typescript + uni.showModal({ + title: '确认', + content: '确定要删除吗?', + success: async (res) => { // 错误:回调函数不能是 async + if (res.confirm) { + const result = await someAsyncFunction() + } + } + }) + ``` + - 正确示例: + ```typescript + uni.showModal({ + title: '确认', + content: '确定要删除吗?', + success: (res) => { + if (res.confirm) { + // 使用 Promise.then() 代替 await + someAsyncFunction().then((result) => { + // 处理结果 + }) + } + } + }) + ``` + +2. 编译错误提示 + - 错误信息:"参数类型不匹配:实际类型为 'Function1<..., UTSPromise>',预期类型为 'Function1<..., Unit>?'" + - 原因:回调函数返回 Promise 而非 void + - 解决:使用 `.then()` 代替 `await` + +3. 最佳实践 + - 在回调函数中使用 `.then()` 处理异步操作 + - 将异步逻辑封装为单独的函数,在回调中调用 + +================================================================================ +三十九、2026-02-27 类型转换前必须检查类型(重要) +================================================================================ + +1. 使用 `as` 类型转换前必须检查实际类型 + - 直接使用 `as string` 转换可能导致运行时类型转换异常 + - 错误示例: + ```typescript + const idVal = item['id'] + const id = idVal as string // 错误:如果 idVal 是其他类型会崩溃 + ``` + - 正确示例: + ```typescript + const idVal = item['id'] + const id = (idVal != null && typeof idVal == 'string') ? (idVal as string) : '' + ``` + +2. 运行时错误提示 + - 错误信息:"null cannot be cast to non-null type kotlin.String" + - 错误信息:"java.lang.Boolean cannot be cast to java.lang.String" + - 原因:直接类型转换时,实际类型与目标类型不匹配 + - 解决:使用 `typeof` 检查类型后再转换 + +3. 最佳实践 + - 使用 `typeof` 检查类型 + - 使用 `!= null` 检查空值 + - 提供默认值防止空指针异常 + +================================================================================ +四十、2026-02-27 UTSJSONObject 必须正确转换(重要) +================================================================================ + +1. `as UTSJSONObject` 不会添加方法 + - 从数据库返回的数据需要正确转换为 UTSJSONObject + - 错误示例: + ```typescript + const item = rawList[i] + const brandObj = item as UTSJSONObject // 错误:brandObj.getString 不存在 + ``` + - 正确示例: + ```typescript + const item = rawList[i] + const brandObj = JSON.parse(JSON.stringify(item)) as UTSJSONObject + const id = brandObj.getString('id') ?? '' + ``` + +2. 运行时错误提示 + - 错误信息:"getString is not a function" + - 原因:对象没有正确转换为 UTSJSONObject + - 解决:使用 `JSON.parse(JSON.stringify())` 进行转换 + +3. 最佳实践 + - 对于从数据库/API 返回的数据,统一使用 `JSON.parse(JSON.stringify())` 转换 + - 使用 `.getString()`、`.getNumber()` 等方法安全访问属性 + +================================================================================ + +================================================================================ diff --git a/pages/mall/consumer/favorites.uvue b/pages/mall/consumer/favorites.uvue index 7d09482c..db423f80 100644 --- a/pages/mall/consumer/favorites.uvue +++ b/pages/mall/consumer/favorites.uvue @@ -8,20 +8,12 @@ - - - {{ product.name }} + + {{ product.name }} + ¥{{ product.price }} - - 已售 {{ product.sales }} - - - 🛒 - - - 🗑️ - - + + + @@ -32,27 +24,42 @@ \r\n","// i18n 国际化配置\r\n// 这是一个简化的 i18n 实现,用于支持多语言切换\r\n\r\n// 语言资源\r\nconst messages: UTSJSONObject = new UTSJSONObject()\r\n\r\n// 默认语言\r\nconst defaultLocale = 'zh-CN'\r\n\r\n// 当前语言(响应式)\r\nlet currentLocale = defaultLocale\r\n\r\n// 翻译函数\r\nfunction t(key: string, values: UTSJSONObject | null = null, locale: string | null = null): string {\r\n\tconst targetLocale = locale ?? currentLocale\r\n\t// 这里应该从 messages 中获取翻译,简化实现直接返回 key\r\n\t// 实际项目中应该加载语言资源文件\r\n\treturn key\r\n}\r\n\r\n// 创建响应式 locale 对象\r\nclass LocaleWrapper {\r\n get value(): string {\r\n return currentLocale\r\n }\r\n set value(newLocale: string) {\r\n currentLocale = newLocale\r\n }\r\n}\r\nconst localeObj = new LocaleWrapper()\r\n\r\n// I18n Global Context\r\nclass I18nGlobal {\r\n\tt(key: string, values: UTSJSONObject | null = null, locale: string | null = null): string {\r\n\t\treturn t(key, values, locale)\r\n\t}\r\n\tlocale: LocaleWrapper = localeObj\r\n}\r\n\r\n// I18n Instance\r\nclass I18nInstance {\r\n\tglobal: I18nGlobal = new I18nGlobal()\r\n}\r\n\r\n// 导出 i18n 对象\r\nconst i18n = new I18nInstance()\r\nexport default i18n\r\n","// ak-req 类型定义\r\nexport type AkReqOptions = {\r\n url: string;\r\n method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' |'HEAD';\r\n data?: UTSJSONObject | Array;\r\n headers?: UTSJSONObject;\r\n timeout?: number;\r\n contentType?: string; // 新增,支持顶级 contentType\r\n // 可选:重试设置(仅网络错误/超时触发)。默认重试 0 次\r\n retryCount?: number; // 最大重试次数,默认 0\r\n retryDelayMs?: number; // 首次重试延迟,默认 300ms,指数退避\r\n};\r\n// 上传参数类型定义\r\nexport type AkReqUploadOptions = {\r\n url: string,\r\n filePath: string,\r\n name: string,\r\n formData?: UTSJSONObject,\r\n headers?: UTSJSONObject,\r\n apikey?: string,\r\n timeout?: number,\r\n // 进度回调,0-100(注意:H5/APP 平台支持不同)\r\n onProgress?: (progress: number, transferredBytes?: number, totalBytes?: number) => void,\r\n // 可选:重试设置(仅网络错误/超时触发)。默认 0\r\n retryCount?: number,\r\n retryDelayMs?: number\r\n};\r\n\r\nexport type AkReqResponse = {\r\n status: number;\r\n data: T | Array | null; // 支持 null\r\n headers: UTSJSONObject;\r\n error: UniError | null;\r\n total:number |null;\r\n page: number |null;\r\n limit: number |null;\r\n hasmore:boolean |null;\r\n origin: any | null;\r\n};\r\n\r\nexport class AkReqError extends Error {\r\n code: number;\r\n constructor(message: string, code: number = 0) {\r\n super(message);\r\n this.code = code;\r\n this.name = 'AkReqError';\r\n }\r\n}\r\n","// Supabase 配置\r\n// 内网环境 - 本地部署的 Supabase\r\n// IP: 192.168.1.62\r\n// Kong HTTP Port: 8000\r\n\r\n//export const SUPA_URL: string = 'http://192.168.1.61:18000'\r\n//export const SUPA_KEY: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlzcyI6InN1cGFiYXNlLTEiLCJpYXQiOjE3Njk2NzY0OTgsImV4cCI6MTkyNzM1NjQ5OH0.ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'\r\nexport const SUPA_URL: string = 'http://192.168.1.61:18000'\r\nexport const SUPA_KEY: string = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlzcyI6InN1cGFiYXNlLTEiLCJpYXQiOjE3Njk2NzY0OTgsImV4cCI6MTkyNzM1NjQ5OH0.ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'\r\n\r\n// WebSocket 实时连接(内网使用 ws:// 而非 wss://)\r\nexport const WS_URL: string = 'ws://192.168.1.61:18000/realtime/v1/websocket'\r\n//export const WS_URL: string = 'ws://localhost:18000/realtime/v1/websocket'\r\n\r\n// 备用配置(已注释,如需切换可取消注释)\r\n// 开发环境 - 其他内网地址\r\n// export const SUPA_URL: string = 'http://192.168.0.150:8080'\r\n// export const SUPA_KEY: string = 'your-anon-key'\r\n// export const WS_URL: string = 'ws://192.168.0.150:8080/realtime/v1/websocket'\r\n\r\n// 生产环境 - Supabase 云服务(已注释)\r\n// export const SUPA_URL: string = 'https://ak3.oulog.com'\r\n// export const SUPA_KEY: string = 'your-anon-key'\r\n// export const WS_URL: string = 'wss://ak3.oulog.com/realtime/v1/websocket'\r\n\r\n// 指向你的 Supabase 服务(开发/私有部署)\r\n// export const SUPA_URL: string = 'http://192.168.1.64:3000'\r\n// export const SUPA_KEY: string = 'your-anon-key'\r\n// export const WS_URL: string = 'ws://192.168.1.64:3000/realtime/v1'\r\n\r\n// 路由配置\r\nexport const HOME_REDIRECT: string = '/pages/mall/consumer/index'\r\nexport const TABORPAGE: string = '/pages/mall/consumer/index'\r\n\r\n// 测试模式:放开任意跳转(禁用启动页/登录/401 的强制重定向)\r\nexport const IS_TEST_MODE: boolean = true","// 通用 UTSJSONObject 转任意 type 的函数\r\n// UTS 2024\r\n\r\nimport i18n from '@/uni_modules/i18n/index.uts';\r\n\r\n/**\r\n * 切换应用语言设置\r\n * @param locale 语言代码,如 'zh-CN' 或 'en-US'\r\n */\r\nexport function switchLocale(locale: string) {\r\n // 设置存储\r\n uni.setStorageSync('uVueI18nLocale', locale);\r\n \r\n // 设置 i18n 语言\r\n try {\r\n if (i18n != null && i18n.global != null) {\r\n i18n.global.locale.value = locale;\r\n }\r\n } catch (err) {\r\n __f__('error','at utils/utils.uts:20','Failed to switch locale:', err);\r\n }\r\n}\r\n\r\n/**\r\n * 获取当前语言设置\r\n * @returns 当前语言代码\r\n */\r\nexport function getCurrentLocale(): string {\r\n const locale = uni.getStorageSync('uVueI18nLocale') as string;\r\n if (locale == null || locale == '') {\r\n return 'zh-CN';\r\n }\r\n return locale;\r\n}\r\n\r\n/**\r\n * 确保语言设置正确初始化\r\n */\r\nexport function ensureLocaleInitialized() {\r\n const currentLocale = getCurrentLocale();\r\n if (currentLocale == null || currentLocale == '') {\r\n switchLocale('zh-CN');\r\n }\r\n}\r\n/**\r\n * 将任意错误对象转换为标准的 UniError\r\n * @param error 任意类型的错误对象\r\n * @param defaultMessage 默认错误消息\r\n * @returns 标准化的 UniError 对象\r\n */\r\nexport function toUniError(error: any, defaultMessage: string = '操作失败'): UniError {\r\n // 如果已经是 UniError,直接返回\r\n if (error instanceof UniError) {\r\n return error\r\n }\r\n let errorMessage = defaultMessage\r\n let errorCode = -1\r\n \r\n try {\r\n // 如果是普通 Error 对象\r\n if (error instanceof Error) {\r\n errorMessage = error.message != null && error.message != '' ? error.message : defaultMessage\r\n }\r\n // 如果是字符串\r\n else if (typeof error === 'string') {\r\n errorMessage = error\r\n } // 如果是对象,尝试提取错误信息\r\n else if (error != null && typeof error === 'object') {\r\n const errorObj = error as UTSJSONObject\r\n let message: string = ''\r\n \r\n // 逐个检查字段,避免使用 || 操作符\r\n if (errorObj['message'] != null) {\r\n const msgValue = errorObj['message']\r\n if (typeof msgValue === 'string') {\r\n message = msgValue\r\n }\r\n } else if (errorObj['errMsg'] != null) {\r\n const msgValue = errorObj['errMsg']\r\n if (typeof msgValue === 'string') {\r\n message = msgValue\r\n }\r\n } else if (errorObj['error'] != null) {\r\n const msgValue = errorObj['error']\r\n if (typeof msgValue === 'string') {\r\n message = msgValue\r\n }\r\n } else if (errorObj['details'] != null) {\r\n const msgValue = errorObj['details']\r\n if (typeof msgValue === 'string') {\r\n message = msgValue\r\n }\r\n } else if (errorObj['msg'] != null) {\r\n const msgValue = errorObj['msg']\r\n if (typeof msgValue === 'string') {\r\n message = msgValue\r\n }\r\n }\r\n \r\n if (message != '') {\r\n errorMessage = message\r\n }\r\n \r\n // 尝试提取错误码\r\n let code: number = 0\r\n if (errorObj['code'] != null) {\r\n const codeValue = errorObj['code']\r\n if (typeof codeValue === 'number') {\r\n code = codeValue\r\n }\r\n } else if (errorObj['errCode'] != null) {\r\n const codeValue = errorObj['errCode']\r\n if (typeof codeValue === 'number') {\r\n code = codeValue\r\n }\r\n } else if (errorObj['status'] != null) {\r\n const codeValue = errorObj['status']\r\n if (typeof codeValue === 'number') {\r\n code = codeValue\r\n }\r\n }\r\n \r\n if (code != 0) {\r\n errorCode = code\r\n }\r\n }\r\n } catch (e) {\r\n __f__('error','at utils/utils.uts:128','Error converting to UniError:', e)\r\n errorMessage = defaultMessage\r\n }\r\n // 创建标准 UniError\r\n const uniError = new UniError('AppError', errorCode, errorMessage)\r\n return uniError\r\n}\r\n\r\n/**\r\n * 响应式状态管理\r\n * @returns 响应式状态对象\r\n */\r\nexport function responsiveState() {\r\n const screenInfo = uni.getSystemInfoSync()\r\n const screenWidth = screenInfo.screenWidth\r\n \r\n return {\r\n isLargeScreen: screenWidth >= 768,\r\n isSmallScreen: screenWidth < 576,\r\n screenWidth: screenWidth,\r\n cardColumns: screenWidth >= 768 ? 3 : screenWidth >= 576 ? 2 : 1\r\n }\r\n}\r\n\r\nexport function goToLogin(redirectUrl?: string | null) {\r\n try {\r\n const target = redirectUrl != null && redirectUrl.length > 0 ? redirectUrl : ''\r\n if (target.length > 0) {\r\n const redirect = encodeURIComponent(target)\r\n uni.navigateTo({ url: `/pages/user/login?redirect=${redirect}` })\r\n } else {\r\n uni.navigateTo({ url: '/pages/user/login' })\r\n }\r\n } catch (e) {\r\n uni.navigateTo({ url: '/pages/user/login' })\r\n }\r\n}\r\n\r\n/**\r\n * 兼容 UTS Android 的剪贴板写入\r\n * @param text 要写入剪贴板的文本\r\n */\r\nexport function setClipboard(text: string): void {\r\n\r\n\r\n\r\n}\r\n\r\n/**\r\n * 格式化时间,显示为相对时间(如:刚刚,几小时前)\r\n * @param dateStr ISO 格式的日期字符串\r\n * @returns 格式化后的相对时间字符串\r\n */\r\nexport function formatTime(dateStr: string): string {\r\n if (dateStr == '') return ''\r\n try {\r\n const date = new Date(dateStr)\r\n const now = new Date()\r\n const diff = now.getTime() - date.getTime()\r\n const hours = Math.floor(diff / (1000 * 60 * 60))\r\n \r\n if (hours < 1) {\r\n return '刚刚'\r\n } else if (hours < 24) {\r\n return `${hours}小时前`\r\n } else {\r\n return `${Math.floor(hours / 24)}天前`\r\n }\r\n } catch (e) {\r\n __f__('error','at utils/utils.uts:197','formatTime error:', e)\r\n return dateStr.replace('T', ' ').split('.')[0]\r\n }\r\n}\r\n\r\n","import { AkReqResponse, AkReqUploadOptions, AkReq } from '@/uni_modules/ak-req/index.uts'\r\nimport type { AkReqOptions } from '@/uni_modules/ak-req/index.uts'\r\nimport { toUniError } from '@/utils/utils.uts'\r\n\r\nexport type AkSupaSignInResult = {\r\n\taccess_token : string;\r\n\trefresh_token : string;\r\n\texpires_at : number;\r\n\tuser : UTSJSONObject | null;\r\n\ttoken_type ?: string;\r\n\texpires_in ?: number;\r\n\traw : UTSJSONObject;\r\n}\r\n\r\n// Count 选项枚举\r\nexport type CountOption = 'exact' | 'planned' | 'estimated';\r\n\r\n// 定义查询选项类型,兼容 UTS\r\nexport type AkSupaSelectOptions = {\r\n\tlimit ?: number;\r\n\torder ?: string;\r\n\tgetcount ?: string; // 保持向后兼容\r\n\tcount ?: CountOption; // 新增:更清晰的 count 选项\r\n\thead ?: boolean; // 新增:head 模式,只返回元数据\r\n\tcolumns ?: string;\r\n\tsingle ?: boolean; // 新增,支持 single-object\r\n\trangeFrom ?: number; // 新增:range 分页起始位置\r\n\trangeTo ?: number; // 新增:range 分页结束位置\r\n};\r\n\r\n// 新增:order方法参数类型\r\nexport type OrderOptions = {\r\n\tascending ?: boolean;\r\n};\r\n\r\n// 新增类型定义,便于 getSession 返回类型复用\r\nexport type AkSupaSessionInfo = {\r\n\tsession : AkSupaSignInResult | null;\r\n\tuser : UTSJSONObject | null;\r\n};\r\n\r\n// 链式请求构建器\r\n// 强类型条件定义\r\ntype AkSupaCondition = {\r\n\tfield : string; // 已经 encodeURIComponent 过\r\n\top : string;\r\n\tvalue : any;\r\n\tlogic : string; // 'and' | 'or'\r\n};\r\n\r\nexport class AkSupaQueryBuilder {\r\n\tprivate _supa : AkSupa;\r\n\tprivate _table : string;\r\n\tprivate _filter : UTSJSONObject | null = null;\r\n\tprivate _options : AkSupaSelectOptions = {};\r\n\tprivate _values : UTSJSONObject | Array | null = null;\r\n\tprivate _single : boolean = false;\r\n\tprivate _conditions : Array = [];\r\n\tprivate _nextLogic : string = 'and';\r\n\t// 新增:记录当前操作类型\r\n\tprivate _action : 'select' | 'insert' | 'update' | 'delete' | 'rpc' | null = null;\r\n\tprivate _orString : string | null = null; // 新增:支持 or 字符串\r\n\tprivate _rpcFunction : string | null = null;\r\n\tprivate _rpcParams : UTSJSONObject | null = null;\r\n\tprivate _page : number = 1; // 新增:当前页码\r\n\r\n\tconstructor(supa : AkSupa, table : string) {\r\n\t\tthis._supa = supa;\r\n\t\tthis._table = table;\r\n\t}\r\n\r\n\t// 链式条件方法\r\n\teq(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'eq', value); }\r\n\tneq(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'neq', value); }\r\n\tgt(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'gt', value); }\r\n\tgte(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'gte', value); }\r\n\tlt(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'lt', value); }\r\n\tlte(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'lte', value); }\r\n\tlike(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'like', value); }\r\n\tilike(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'ilike', value); }\r\n\tin(field : string, value : any[]) : AkSupaQueryBuilder { return this._addCond(field, 'in', value); }\r\n\tis(field : string, value : any | null) : AkSupaQueryBuilder { return this._addCond(field, 'is', value); }\r\n\tcontains(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'cs', value); }\r\n\tcontainedBy(field : string, value : any) : AkSupaQueryBuilder { return this._addCond(field, 'cd', value); }\r\n\tnot(field : string, opOrValue : any, value: any | null = null) : AkSupaQueryBuilder {\r\n\t\tif (value != null) {\r\n\t\t\t// 三元形式:field, operator, value\r\n\t\t\t// 例如 not('badge', 'is', null) -> badge=not.is.null\r\n\t\t\tconst combinedOp = 'not.' + opOrValue;\r\n\t\t\t// 将 null 转换为字符串 'null',避免构造对象时缺少 value 属性\r\n\t\t\tlet safeValue = value;\r\n\t\t\tif (value === null) {\r\n\t\t\t\tsafeValue = 'null';\r\n\t\t\t}\r\n\t\t\treturn this._addCond(field, combinedOp, safeValue);\r\n\t\t} else {\r\n\t\t\t// 二元形式:field, value\r\n\t\t\tlet safeValue = opOrValue;\r\n\t\t\tif (opOrValue === null) {\r\n\t\t\t\tsafeValue = 'null';\r\n\t\t\t}\r\n\t\t\treturn this._addCond(field, 'not', safeValue);\r\n\t\t}\r\n\t}\r\n\r\n\tand() : AkSupaQueryBuilder { this._nextLogic = 'and'; return this; }\r\n\tor(str ?: string) : AkSupaQueryBuilder {\r\n\t\tif (typeof str == 'string') {\r\n\t\t\tthis._orString = str;\r\n\t\t} else {\r\n\t\t\tthis._nextLogic = 'or';\r\n\t\t}\r\n\t\treturn this;\r\n\t}\r\n\r\n\tprivate _addCond(afield : string, op : string, value : any | null) : AkSupaQueryBuilder {\r\n\t\t//__f__('log','at components/supadb/aksupa.uts:117','add cond:', op, afield, value)\r\n\t\tconst field = encodeURIComponent(afield)!!\r\n\t\t// 将 null 转换为字符串 'null',避免构造对象时缺少 value 属性\r\n\t\tlet safeValue = value;\r\n\t\tif (value === null) {\r\n\t\t\tsafeValue = 'null';\r\n\t\t}\r\n\t\tthis._conditions.push({ field, op, value: safeValue, logic: this._nextLogic });\r\n\t\t//__f__('log','at components/supadb/aksupa.uts:125',this._conditions)\r\n\t\tthis._nextLogic = 'and';\r\n\t\treturn this;\r\n\t}\r\n\r\n\t// 支持原有 where 方式\r\n\twhere(filter : UTSJSONObject) : AkSupaQueryBuilder {\r\n\t\tthis._filter = filter;\r\n\t\treturn this;\r\n\t}\r\n\r\n\tpage(page : number) : AkSupaQueryBuilder {\r\n\t\tthis._page = page;\r\n\t\t// 如果已设置 limit,则自动设置 range\r\n\t\tlet limit = 0;\r\n\t\tif (typeof this._options.limit == 'number') {\r\n\t\t\tlimit = this._options.limit ?? 0;\r\n\t\t}\r\n\t\tif (limit > 0) {\r\n\t\t\tconst from = (page - 1) * limit;\r\n\t\t\tconst to = from + limit - 1;\r\n\t\t\tthis.range(from, to);\r\n\t\t}\r\n\t\treturn this;\r\n\t}\r\n\tlimit(limit : number) : AkSupaQueryBuilder {\r\n\t\tthis._options.limit = limit;\r\n\t\t// 总是为 limit 设置对应的 range,确保限制生效\r\n\t\tconst from = (this._page - 1) * limit;\r\n\t\tconst to = from + limit - 1;\r\n\t\tthis.range(from, to);\r\n\t\treturn this;\r\n\t}\r\n\r\n\torder(order : string, options ?: OrderOptions) : AkSupaQueryBuilder {\r\n\t\tif (options != null && options.ascending == false) {\r\n\t\t\tthis._options.order = order + '.desc';\r\n\t\t} else {\r\n\t\t\tthis._options.order = order + '.asc';\r\n\t\t}\r\n\t\treturn this;\r\n\t}\r\n\tcolumns(columns : string) : AkSupaQueryBuilder {\r\n\t\tthis._options.columns = columns;\r\n\t\treturn this;\r\n\t}\r\n\r\n\t// 新增:专门的 count 方法\r\n\tcount(option : CountOption = 'exact') : AkSupaQueryBuilder {\r\n\t\tthis._options.count = option;\r\n\t\tthis._options.head = true; // count 操作默认使用 head 模式\r\n\t\treturn this;\r\n\t}\r\n\r\n\t// 新增:便捷的 count 方法\r\n\tcountExact() : AkSupaQueryBuilder {\r\n\t\treturn this.count('exact');\r\n\t}\r\n\r\n\tcountEstimated() : AkSupaQueryBuilder {\r\n\t\treturn this.count('estimated');\r\n\t}\r\n\r\n\tcountPlanned() : AkSupaQueryBuilder {\r\n\t\treturn this.count('planned');\r\n\t}\r\n\r\n\t// 新增:head 模式方法\r\n\thead(enable : boolean = true) : AkSupaQueryBuilder {\r\n\t\tthis._options.head = enable;\r\n\t\treturn this;\r\n\t}\r\n\r\n\tvalues(values : UTSJSONObject) : AkSupaQueryBuilder {\r\n\t\tthis._values = values;\r\n\t\treturn this;\r\n\t}\r\n\tsingle() : AkSupaQueryBuilder {\r\n\t\tthis._single = true;\r\n\t\treturn this;\r\n\t}\r\n\trange(from : number, to : number) : AkSupaQueryBuilder {\r\n\t\tthis._options.rangeFrom = from;\r\n\t\tthis._options.rangeTo = to;\r\n\t\t//__f__('log','at components/supadb/aksupa.uts:209','设置 range:', from, 'to', to);\r\n\t\treturn this;\r\n\t}\r\n\t// 将 _conditions 强类型直接转换为 Supabase/PostgREST 查询字符串(不再用 UTSJSONObject 做中转)\r\n\tprivate _buildFilter() : string | null {\r\n\t\tif (this._conditions.length == 0 && (this._orString==null || this._orString == \"\")) {\r\n\t\t\t// 兼容 where(filter) 方式\r\n\t\t\tif (this._filter == null) return null;\r\n\t\t\t// 兼容旧的 UTSJSONObject filter\r\n\t\t\treturn buildSupabaseFilterQuery(this._filter);\r\n\t\t}\r\n\r\n\t\t// 先分组 and/or,全部用 AkSupaCondition 强类型\r\n\t\tconst ands: AkSupaCondition[] = [];\r\n\t\tconst ors: AkSupaCondition[] = [];\r\n\t\tfor (const c of this._conditions) {\r\n\t\t\tif (c.logic == \"or\") {\r\n\t\t\t\tors.push(c);\r\n\t\t\t} else {\r\n\t\t\t\tands.push(c);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst params: string[] = [];\r\n\t\t// 处理 and 条件\r\n\t\tfor (const cond of ands) {\r\n\t\t\tconst k = cond.field;\r\n\t\t\tconst op = cond.op;\r\n\t\t\tconst val = cond.value;\r\n\t\t\tif ((op == 'in' || op == 'not.in') && Array.isArray(val)) {\r\n\t\t\t\tparams.push(`${k}=${op}.(${val.map(x => typeof x == 'object' ? encodeURIComponent(JSON.stringify(x)) : encodeURIComponent(x.toString())).join(',')})`);\r\n\t\t\t} else if ((op == 'is' || op == 'not.is') && (val == null || val == 'null')) {\r\n\t\t\t\tparams.push(`${k}=${op}.null`);\r\n\t\t\t} else {\r\n\t\t\t\tconst opvalstr: string = (typeof val == 'object') ? JSON.stringify(val) : (val as string);\r\n\t\t\t\tparams.push(`${k}=${op}.${encodeURIComponent(opvalstr)}`);\r\n\t\t\t}\r\n\t\t}\r\n\t\t// 处理 or 条件\r\n\t\tif (ors.length > 0) {\r\n\t\t\tconst orStr = ors.map(o => {\r\n\t\t\t\tconst k = o.field;\r\n\t\t\t\tconst op = o.op;\r\n\t\t\t\tconst val = o.value;\r\n\t\t\t\tif (op == \"in\" && Array.isArray(val)) {\r\n\t\t\t\t\treturn `${k}.in.(${val.map(x => encodeURIComponent(x as string)).join(\",\")})`;\r\n\t\t\t\t}\r\n\t\t\t\tif (op == \"is\" && (val == null)) {\r\n\t\t\t\t\treturn `${k}.is.null`;\r\n\t\t\t\t}\r\n\t\t\t\treturn `${k}.${op}.${encodeURIComponent(val as string)}`;\r\n\t\t\t}).join(\",\");\r\n\t\t\tparams.push(`or=(${orStr})`);\r\n\t\t}\r\n\t\tif (this._orString!=null && this._orString !== \"\") {\r\n\t\t\tparams.push(`or=(${encodeURIComponent(this._orString!!)})`);\r\n\t\t}\r\n\t\treturn params.length > 0 ? params.join('&') : null;\r\n\t}\r\n\r\n\tselect(columns : string = \"*\", opt : UTSJSONObject | null = null) : AkSupaQueryBuilder {\r\n\t\tthis._action = 'select';\r\n\t\tif (columns != null) {\r\n\t\t\tthis._options.columns = columns;\r\n\t\t}\r\n\t\tif (opt != null) {\r\n\t\t\t// 合并 opt 到 this._options\r\n\t\t\tObject.assign(this._options, opt);\r\n\t\t}\r\n\t\treturn this;\r\n\t}\r\n\tinsert(values : UTSJSONObject | Array) : AkSupaQueryBuilder {\r\n\t\tthis._action = 'insert';\r\n\t\t// 检查是否为空\r\n\t\tif (Array.isArray(values)) {\r\n\t\t\tif (values.length == 0) throw toUniError('No values set for insert', 'Insert操作缺少数据');\r\n\t\t} else {\r\n\t\t\tif (UTSJSONObject.keys(values).length == 0) throw toUniError('No values set for insert', 'Insert操作缺少数据');\r\n\t\t}\r\n\t\tthis._values = values;\r\n\t\treturn this;\r\n\t}\r\n\tupdate(values : UTSJSONObject) : AkSupaQueryBuilder {\r\n\t\tthis._action = 'update';\r\n\t\t//__f__('log','at components/supadb/aksupa.uts:293','ak update', this._action)\r\n\t\tif (UTSJSONObject.keys(values).length == 0) throw toUniError('No values set for update', '更新操作缺少数据');\r\n\t\tthis._values = values;\r\n\t\t//__f__('log','at components/supadb/aksupa.uts:296','ak update', values)\r\n\t\treturn this;\r\n\t}\r\n\tdelete() : AkSupaQueryBuilder {\r\n\t\tthis._action = 'delete';\r\n\t\t//__f__('log','at components/supadb/aksupa.uts:301','delete action now')\r\n\t\tconst filter = this._buildFilter();\r\n\t\t//__f__('log','at components/supadb/aksupa.uts:303',filter)\r\n\t\tif (filter == null) throw toUniError('No filter set for delete', '删除操作缺少筛选条件');\r\n\t\t//__f__('log','at components/supadb/aksupa.uts:305','delete action')\r\n\t\treturn this;\r\n\t}\r\n\r\n\trpc(functionName : string, params ?: UTSJSONObject) : AkSupaQueryBuilder {\r\n\t\tthis._action = 'rpc';\r\n\t\tthis._rpcFunction = functionName;\r\n\t\tthis._rpcParams = params;\r\n\t\treturn this;\r\n\t}\r\n\t// 链式请求最终执行方法 - 返回 UTSJSONObject\r\n\tasync execute() : Promise> {\r\n\t\t//__f__('log','at components/supadb/aksupa.uts:317','execute')\r\n\t\tconst filter = this._buildFilter();\r\n\t\t//__f__('log','at components/supadb/aksupa.uts:319','execute', filter)\r\n\t\tlet res : any;\r\n\t\tswitch (this._action) {\r\n\t\t\tcase 'select': {\r\n\t\t\t\t// 传递 single 状态到 options\r\n\t\t\t\tif (this._single) {\r\n\t\t\t\t\tthis._options.single = true;\r\n\t\t\t\t\t// 如果是 single 请求,自动设置 limit 为 1\r\n\t\t\t\t\tif (this._options.limit == null) {\r\n\t\t\t\t\t\tthis._options.limit = 1;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t//__f__('log','at components/supadb/aksupa.uts:330',this._options)\r\n\t\t\t\t}\t\t\t\t// 保证分页统计\r\n\t\t\t\tif (this._options.limit != null) {\r\n\t\t\t\t\tif (this._options.getcount == null && this._options.count == null) {\r\n\t\t\t\t\t\tthis._options.count = 'exact'; // 优先使用新的 count 选项\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tres = await this._supa.select(this._table, filter, this._options);\r\n\t\t\t\t// 解析 content-range header\r\n\t\t\t\tlet total = 0;\r\n\t\t\t\tlet hasmore = false;\r\n\t\t\t\tconst page = this._page;\r\n\t\t\t\tlet resdata = res.data\r\n\t\t\t\tlet limit = 0;\r\n\t\t\t\tif (typeof this._options.limit == 'number') {\r\n\t\t\t\t\tlimit = this._options.limit ?? 0;\r\n\t\t\t\t} else if (Array.isArray(resdata)) {\r\n\t\t\t\t\tlimit = resdata.length;\r\n\t\t\t\t}\r\n\t\t\t\tlet contentRange : string | null = null;\r\n\t\t\t\tif (res.headers != null) {\r\n\t\t\t\t\tlet theheader = res.headers as UTSJSONObject\r\n\t\t\t\t\tif (typeof theheader.get == 'function') {\r\n\r\n\t\t\t\t\t\tcontentRange = theheader.get('content-range') as string | null;\r\n\t\t\t\t\t} else if (typeof theheader['content-range'] == 'string') {\r\n\t\t\t\t\t\tcontentRange = theheader['content-range'] as string;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (contentRange != null) {\r\n\t\t\t\t\tconst match = /\\/(\\d+)$/.exec(contentRange);\r\n\t\t\t\t\tif (match != null) {\r\n\t\t\t\t\t\ttotal = parseInt(match[1] ?? \"0\");\r\n\t\t\t\t\t\thasmore = (page * limit) < total;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (total == 0) {\r\n\t\t\t\t\tif (typeof res['count'] == 'number') {\r\n\t\t\t\t\t\ttotal = res['count'] as number ?? 0;\r\n\t\t\t\t\t} else if (Array.isArray(resdata)) {\r\n\t\t\t\t\t\ttotal = resdata.length;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\ttotal = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (!hasmore) hasmore = (page * limit) < total;\t\t\t\t// 如果是 head 模式,只返回 count 信息\r\n\t\t\t\tif (this._options.head == true) {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tdata: null, // head 模式不返回数据\r\n\t\t\t\t\t\ttotal,\r\n\t\t\t\t\t\tpage,\r\n\t\t\t\t\t\tlimit,\r\n\t\t\t\t\t\thasmore: false, // head 模式不需要分页信息\r\n\t\t\t\t\t\torigin: res,\r\n\t\t\t\t\t\tstatus: res.status,\r\n\t\t\t\t\t\theaders: res.headers,\r\n\t\t\t\t\t\terror: res.error\r\n\t\t\t\t\t} as AkReqResponse;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn {\r\n\t\t\t\t\tdata: res.data,\r\n\t\t\t\t\ttotal,\r\n\t\t\t\t\tpage,\r\n\t\t\t\t\tlimit,\r\n\t\t\t\t\thasmore,\r\n\t\t\t\t\torigin: res,\r\n\t\t\t\t\tstatus: res.status,\r\n\t\t\t\t\theaders: res.headers,\r\n\t\t\t\t\terror: res.error\r\n\t\t\t\t} as AkReqResponse;\r\n\t\t\t}\r\n\t\t\tcase 'insert': {\r\n\t\t\t\tconst insertValues = this._values;\r\n\t\t\t\tif (insertValues == null) throw toUniError('No values set for insert', '插入操作缺少数据');\r\n\t\t\t\tres = await this._supa.insert(this._table, insertValues);\r\n\t\t\t\tbreak;\r\n\t\t\t} case 'update': {\r\n\t\t\t\tconst updateValues = this._values;\r\n\t\t\t\tif (updateValues == null) throw toUniError('No values set for update', '更新操作缺少数据');\r\n\t\t\t\tif (filter == null) throw toUniError('No filter set for update', '更新操作缺少筛选条件');\r\n\t\t\t\t// Update操作只支持单个对象,不支持数组\r\n\t\t\t\tif (Array.isArray(updateValues)) throw toUniError('Update does not support array values', '更新操作不支持数组数据');\r\n\t\t\t\tres = await this._supa.update(this._table, filter, updateValues as UTSJSONObject);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tcase 'delete': {\r\n\t\t\t\tif (filter == null) throw toUniError('No filter set for delete', '删除操作缺少筛选条件');\r\n\t\t\t\tres = await this._supa.delete(this._table, filter);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tcase 'rpc': {\r\n\t\t\t\tif (this._rpcFunction == null) throw toUniError('No RPC function specified', 'RPC调用缺少函数名');\r\n\t\t\t\tres = await this._supa.rpc(this._rpcFunction as string, this._rpcParams);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tdefault: {\r\n\t\t\t\tres = await this._supa.select(this._table, filter, this._options);\r\n\t\t\t}\r\n\t\t}\r\n\t\t// 保证 data 字段存在(不能赋null,赋空对象或空字符串)\r\n\t\tif (res[\"data\"] == null) res[\"data\"] = {};\r\n\t\treturn res;\r\n\t}\t// 新增:支持类型转换的执行方法\r\n\tasync executeAs() : Promise>> {\r\n\t\tconst result = await this.execute();\r\n\r\n\t\t// 如果原始 data 是 null,直接返回 null\r\n\t\tif (result.data == null) {\r\n\t\t\tconst aaa = {\r\n\t\t\t\tstatus: result.status,\r\n\t\t\t\tdata: null,\r\n\t\t\t\theaders: result.headers,\r\n\t\t\t\terror: result.error,\r\n\t\t\t\ttotal: result.total,\r\n\t\t\t\tpage: result.page,\r\n\t\t\t\tlimit: result.limit,\r\n\t\t\t\thasmore: result.hasmore,\r\n\t\t\t\torigin: result.origin\r\n\t\t\t}\r\n\t\t\treturn aaa;\r\n\t\t}\r\n\r\n\t\t// 尝试类型转换\r\n\t\tlet convertedData : T | Array | null = null;\r\n\r\n\t\ttry {\r\n\t\t\tif (Array.isArray(result.data)) {\r\n\t\t\t\t// 处理数组数据\r\n\t\t\t\tconst dataArray = result.data;\r\n\t\t\t\tconst convertedArray : Array = [];\r\n\t\t\t\t//__f__('log','at components/supadb/aksupa.uts:461',convertedArray)\r\n\t\t\t\tfor (let i = 0; i < dataArray.length; i++) {\r\n\t\t\t\t\tconst item = dataArray[i];\r\n\t\t\t\t\tif (item instanceof UTSJSONObject) {\r\n\r\n\t\t\t\t\t\t// //__f__('log','at components/supadb/aksupa.uts:466',item)\r\n\t\t\t\t\t\tconst parsed = item.parse();\r\n\t\t\t\t\t\t// //__f__('log','at components/supadb/aksupa.uts:468','ak parsed')\r\n\r\n\r\n\r\n\r\n\t\t\t\t\t\tif (parsed != null) {\r\n\t\t\t\t\t\t\tconvertedArray.push(parsed);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t__f__('warn','at components/supadb/aksupa.uts:476','转换失败,使用原始对象:', item);\r\n\t\t\t\t\t\t\tconvertedArray.push(item as T);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// 将普通对象转换为 UTSJSONObject 后再 parse\r\n\t\t\t\t\t\tconst jsonObj = new UTSJSONObject(item);\r\n\r\n\t\t\t\t\t\tconst parsed = jsonObj.parse();\r\n\r\n\r\n\r\n\r\n\t\t\t\t\t\tif (parsed != null) {\r\n\t\t\t\t\t\t\tconvertedArray.push(parsed);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t__f__('warn','at components/supadb/aksupa.uts:492','转换失败,使用原始对象:', item);\r\n\t\t\t\t\t\t\tconvertedArray.push(item as T);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tconvertedData = convertedArray;\r\n\r\n\t\t\t} else {\r\n\t\t\t\t// 处理单个对象\r\n\t\t\t\tconst convertedArray : Array = [];\r\n\t\t\t\tif (result.data instanceof UTSJSONObject) {\r\n\t\t\t\t\tconst parsed = result.data.parse();\r\n\r\n\t\t\t\t\tif (parsed != null) {\r\n\t\t\t\t\t\tconvertedArray.push(parsed);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\t//__f__('log','at components/supadb/aksupa.uts:509','转换失败:', result.data)\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tconst jsonObj = new UTSJSONObject(result.data);\r\n\t\t\t\t\tconst parsed = jsonObj.parse();\r\n\t\t\t\t\tif (parsed != null) {\r\n\t\t\t\t\t\tconvertedArray.push(parsed);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\t//__f__('log','at components/supadb/aksupa.uts:518','转换失败:', result.data)\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tconvertedData = convertedArray;\r\n\t\t\t}\r\n\t\t} catch (e) {\r\n\t\t\t__f__('warn','at components/supadb/aksupa.uts:524','数据类型转换失败,使用原始数据:', e);\r\n\t\t\t__f__('log','at components/supadb/aksupa.uts:525',result.data)\r\n\t\t\t// 转换失败时,使用原始数据\r\n\t\t\tconvertedData = result.data as T | Array;\r\n\t\t}\r\n\t\tresult.data = convertedData\r\n\t\tconst aaa = result as AkReqResponse\r\n\t\t// const aaa = {\r\n\t\t// \tstatus: result.status,\r\n\t\t// \tdata: convertedData,\r\n\t\t// \theaders: result.headers,\r\n\t\t// \terror: result.error,\r\n\t\t// \ttotal: result.total,\r\n\t\t// \tpage: result.page,\r\n\t\t// \tlimit: result.limit,\r\n\t\t// \thasmore: result.hasmore,\r\n\t\t// \torigin: result.origin\r\n\t\t// } \r\n\t\treturn aaa;\r\n\r\n\t}\r\n}\r\n\r\n// 新增:链式 Storage 上传\r\nexport class AkSupaStorageUploadBuilder {\r\n\tprivate _supa : AkSupa;\r\n\tprivate _bucket : string = '';\r\n\tprivate _path : string = '';\r\n private _file : string = '';\r\n\tprivate _options : UTSJSONObject = {};\r\n\r\n\tconstructor(supa : AkSupa, bucket : string) {\r\n\t\tthis._supa = supa;\r\n\t\tthis._bucket = bucket;\r\n\t}\r\n\r\n\tpath(path : string) : AkSupaStorageUploadBuilder {\r\n\t\tthis._path = path;\r\n\t\treturn this;\r\n\t}\r\n\r\n file(file : string) : AkSupaStorageUploadBuilder {\r\n\t\tthis._file = file;\r\n\t\treturn this;\r\n\t}\r\n\r\n\toptions(options : UTSJSONObject) : AkSupaStorageUploadBuilder {\r\n\t\tthis._options = options;\r\n\t\treturn this;\r\n\t}\r\n\tasync upload() : Promise> {\r\n if (this._bucket == '' || this._path == '' || this._file == '') {\r\n\t\t\tthrow toUniError('bucket, path, file are required', '上传文件缺少必要参数');\r\n\t\t}\r\n\t\tconst url = `${this._supa.baseUrl}/storage/v1/object/${this._bucket}/${this._path}`;\r\n\t\tconst apikey = this._supa.apikey;\r\n\t\t// 适配 uni.uploadFile\r\n\t\tconst uploadOptions : AkReqUploadOptions = {\r\n\t\t\turl,\r\n\t\t\tfilePath: this._file, // 这里假设 file 是本地路径\r\n\t\t\tname: 'file', // 默认字段名\r\n\t\t\theaders: {},\r\n\t\t\tapikey,\r\n\t\t\tformData: this._options\r\n\t\t};\r\n\t\treturn await AkReq.upload(uploadOptions);\r\n\t}\r\n}\r\n\r\n// 新增:明确的 StorageBucket 类,支持链式 upload\r\nclass AkSupaStorageBucket {\r\n\tprivate supa : AkSupa;\r\n\tprivate bucket : string;\r\n\tconstructor(supa : AkSupa, bucket : string) {\r\n\t\tthis.supa = supa;\r\n\t\tthis.bucket = bucket;\r\n\t}\r\n\tasync upload(path : string, filePath : string, options ?: UTSJSONObject) : Promise> {\r\n\t\tconst url = `${this.supa.baseUrl}/storage/v1/object/${this.bucket}/${path}`;\r\n\t\tlet headers : UTSJSONObject = { apikey: this.supa.apikey };\r\n\t\tconst formData : UTSJSONObject = {};\r\n\t\tif (options != null && typeof options == 'object') {\r\n\t\t\tif (typeof options.get == 'function' && options.get('x-upsert') != null) {\r\n\t\t\t\theaders['x-upsert'] = options.get('x-upsert');\r\n\t\t\t}\r\n\t\t\tconst keys = UTSJSONObject.keys(options);\r\n\t\t\tfor (let i = 0; i < keys.length; i++) {\r\n\t\t\t\tconst k = keys[i];\r\n\t\t\t\tif (k != 'x-upsert') formData[k] = options.get(k);\r\n\t\t\t}\r\n\t\t}\r\n\t\tconst token = AkReq.getToken();\r\n\t\tif (token != null && !(token == '')) {\r\n\t\t\theaders['Authorization'] = `Bearer ${token}`;\r\n\t\t}\r\n\t\treturn await AkReq.upload({\r\n\t\t\turl,\r\n\t\t\tfilePath,\r\n\t\t\tname: 'file',\r\n\t\t\tapikey: this.supa.apikey,\r\n\t\t\tformData,\r\n\t\t\theaders\r\n\t\t});\r\n\t}\r\n}\r\n\r\nexport class AkSupaStorageApi {\r\n\tprivate _supa : AkSupa;\r\n\tconstructor(supa : AkSupa) {\r\n\t\tthis._supa = supa;\r\n\t}\r\n\tfrom(bucket : string) : AkSupaStorageBucket {\r\n\t\treturn new AkSupaStorageBucket(this._supa, bucket);\r\n\t}\r\n}\r\n\r\nexport class AkSupa {\r\n\tbaseUrl : string;\r\n\tapikey : string;\r\n\tsession : AkSupaSignInResult | null = null;\r\n\tuser : UTSJSONObject | null = null;\r\n\tstorage : AkSupaStorageApi;\r\n\r\n\tconstructor(baseUrl : string, apikey : string) {\r\n\t\tthis.baseUrl = baseUrl;\r\n\t\tthis.apikey = apikey;\r\n\t\tthis.storage = new AkSupaStorageApi(this);\r\n\t\t// [CHANGE][2026-01-30] hydrate user/session from persisted token (see docs: components/supadb/docs/CHANGELOG.md)\r\n\t\ttry {\r\n\t\t\tthis.hydrateSessionFromStorage();\r\n\t\t} catch (e) {\r\n\t\t\t// ignore\r\n\t\t}\r\n\t}\r\n\r\n\t// [CHANGE][2026-01-30] hydrate user from /auth/v1/user when token exists in storage\r\n\tasync hydrateSessionFromStorage() : Promise {\r\n\t\ttry {\r\n\t\t\tconst token = AkReq.getToken();\r\n\t\t\tif (token == null || token == '') return false;\r\n\t\t\tconst res = await AkReq.request({\r\n\t\t\t\turl: this.baseUrl + '/auth/v1/user',\r\n\t\t\t\tmethod: 'GET',\r\n\t\t\t\theaders: {\r\n\t\t\t\t\tapikey: this.apikey,\r\n\t\t\t\t\tAuthorization: `Bearer ${token}`,\r\n\t\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t\t} as UTSJSONObject\r\n\t\t\t}, false);\r\n\t\t\tconst status = res.status ?? 0;\r\n\t\t\tif (!(status >= 200 && status < 400)) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tlet user: UTSJSONObject | null = null;\r\n\t\t\ttry {\r\n\t\t\t\tuser = new UTSJSONObject(res.data);\r\n\t\t\t} catch (e) {\r\n\t\t\t\tuser = null;\r\n\t\t\t}\r\n\t\t\tif (user == null) return false;\r\n\t\t\tthis.user = user;\r\n\t\t\t// 仅补齐最小 session 结构,供 getSession / UI 判断登录态使用\r\n\t\t\tif (this.session == null) {\r\n\t\t\t\tthis.session = {\r\n\t\t\t\t\taccess_token: token,\r\n\t\t\t\t\trefresh_token: AkReq.getRefreshToken() ?? '',\r\n\t\t\t\t\texpires_at: AkReq.getExpiresAt() ?? 0,\r\n\t\t\t\t\tuser: user,\r\n\t\t\t\t\ttoken_type: 'bearer',\r\n\t\t\t\t\texpires_in: 0,\r\n\t\t\t\t\traw: user\r\n\t\t\t\t} as AkSupaSignInResult;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t} catch (e) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tasync resetPassword(email : string) : Promise {\r\n\t\tconst res = await AkReq.request({\r\n\t\t\turl: this.baseUrl + '/auth/v1/recover',\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders: {\r\n\t\t\t\tapikey: this.apikey,\r\n\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t} as UTSJSONObject,\r\n\t\t\tdata: { email } as UTSJSONObject,\r\n\t\t\tcontentType: 'application/json'\r\n\t\t}, false);\r\n\r\n\t\t// Supabase returns 200 when the reset email is sent successfully\r\n\t\treturn res.status == 200;\r\n\t}\r\n\tasync signOut() {\r\n\t\tthis.session = null\r\n\t\tthis.user = null\r\n\t}\r\n\tasync signIn(email : string, password : string) : Promise {\r\n\t\t// 提前检查 apikey 配置是否为占位符,避免发送无效请求导致 401\r\n\t\tif (this.apikey == null || this.apikey.trim() === '' || this.apikey === 'your-anon-key') {\r\n\t\t\tthrow new Error('Supabase 配置错误:请在 ak/config.uts 中设置 SUPA_KEY(当前为占位符)');\r\n\t\t}\r\n\t\tconst res = await AkReq.request({\r\n\t\t\turl: this.baseUrl + '/auth/v1/token?grant_type=password',\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders: {\r\n\t\t\t\tapikey: this.apikey,\r\n\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t} as UTSJSONObject,\r\n\t\t\tdata: { email, password } as UTSJSONObject,\r\n\t\t\tcontentType: 'application/json'\r\n\t\t}, false);\r\n\t\t// 如果响应不是 2xx(例如 401),提取后端错误信息并抛出,便于上层显示具体原因\r\n\t\tconst status = res.status ?? 0;\r\n\t\tif (!(status >= 200 && status < 400)) {\r\n\t\t\tlet msg = 'user.login.login_failed';\r\n\t\t\ttry {\r\n\t\t\t\tif (res.data != null) {\r\n\t\t\t\t\tconst obj = new UTSJSONObject(res.data);\r\n\t\t\t\t\tmsg = obj.getString('message') ?? obj.getString('error') ?? obj.getString('msg') ?? obj.getString('description') ?? obj.getString('error_description') ?? msg;\r\n\t\t\t\t}\r\n\t\t\t} catch (e) {\r\n\t\t\t\t// ignore\r\n\t\t\t}\r\n\t\t\tthrow new Error(msg);\r\n\t\t}\r\n\t\t// 解析成功的返回体\r\n\t\tlet data: UTSJSONObject;\r\n\t\ttry {\r\n\t\t\tdata = new UTSJSONObject(res.data);\r\n\t\t} catch (e) {\r\n\t\t\tdata = new UTSJSONObject({});\r\n\t\t}\r\n\t\tconst access_token = data.getString('access_token') ?? '';\r\n\t\tconst refresh_token = data.getString('refresh_token') ?? '';\r\n\t\tconst expires_at = data.getNumber('expires_at') ?? 0;\r\n\t\tconst user = data.getJSON('user');\r\n\t\tAkReq.setToken(access_token, refresh_token, expires_at);\r\n\t\tconst session : AkSupaSignInResult = {\r\n\t\t\taccess_token: access_token,\r\n\t\t\trefresh_token: refresh_token,\r\n\t\t\texpires_at: expires_at,\r\n\t\t\tuser: user,\r\n\t\t\ttoken_type: data.getString('token_type') ?? '',\r\n\t\t\texpires_in: data.getNumber('expires_in') ?? 0,\r\n\t\t\traw: data\r\n\t\t};\r\n\t\tthis.session = session;\r\n\t\tthis.user = user;\r\n\t\treturn session;\r\n\t}\r\n\r\n\t/**\r\n\t * 获取当前 session 和 user\r\n\t */\r\n\tgetSession() : AkSupaSessionInfo {\r\n\t\treturn {\r\n\t\t\tsession: this.session,\r\n\t\t\tuser: this.user\r\n\t\t};\r\n\t}\r\n\r\n\tasync signUp(email : string, password : string) : Promise {\r\n\t\tconst res = await AkReq.request({\r\n\t\t\turl: this.baseUrl + '/auth/v1/signup',\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders: {\r\n\t\t\t\tapikey: this.apikey,\r\n\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t} as UTSJSONObject,\r\n\t\t\tdata: { email, password } as UTSJSONObject,\r\n\t\t\tcontentType: 'application/json'\r\n\t\t}, false);\r\n\t\treturn res.data as UTSJSONObject;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * 查询表数据(GET方式,支持多条件、limit等,filter自动转为supabase风格query)\r\n\t * filter 支持:\r\n\t * { usr_id: { lt: 800 }, name: { ilike: '%foo%' }, status: 'active', age: { gte: 18, lte: 30 } }\r\n\t * 操作符支持 eq, neq, lt, lte, gt, gte, like, ilike, in, is, not, contains, containedBy, range, fts, plfts, phfts, wfts\r\n\t */\r\nasync select(table : string, filter ?: string | null, options ?: AkSupaSelectOptions) : Promise> {\r\n\tlet url = this.baseUrl + '/rest/v1/' + table;\r\n\tlet headers = {\r\n\t\tapikey: this.apikey,\r\n\t\t'Content-Type': 'application/json',\r\n\t\tAuthorization: `Bearer ${AkReq.getToken() ?? ''}`\r\n\t} as UTSJSONObject;\r\n\tlet params : string[] = [];\r\n\tif (options != null) {\r\n\t\tif (options.columns != null && !(options.columns == \"\")) params.push('select=' + encodeURIComponent(options.columns ?? \"\"));\r\n\t\tif (options.limit != null) {\r\n\t\t\tparams.push('limit=' + options.limit);\r\n\t\t\t//__f__('log','at components/supadb/aksupa.uts:820','设置 limit 参数:', options.limit);\r\n\t\t}\r\n\t\tif (options.order != null && !(options.order == \"\")) params.push('order=' + encodeURIComponent(options.order ?? \"\"));\r\n\t\tif (options.rangeFrom != null && options.rangeTo != null) {\r\n\t\t\theaders['Range'] = `${options.rangeFrom}-${options.rangeTo}`;\r\n\t\t\theaders['Range-Unit'] = 'items';\r\n\t\t\t//__f__('log','at components/supadb/aksupa.uts:826','设置 Range 头部:', `${options.rangeFrom}-${options.rangeTo}`);\r\n\t\t}\r\n\r\n\t\t// 向后兼容:支持旧的 getcount 参数\r\n\t\tlet countOption = options.count ?? options.getcount;\r\n\t\tif (countOption != null) {\r\n\t\t\theaders['Prefer'] = `count=${countOption}`;\r\n\t\t}\r\n\t\t// 新增:head 模式支持\r\n\t\tif (options.head == true) {\r\n\t\t\t//__f__('log','at components/supadb/aksupa.uts:836','使用 head 模式,只返回元数据');\r\n\t\t\t// HEAD 请求用于只获取 count,不返回数据\r\n\t\t\tif (headers['Prefer'] != null) {\r\n\t\t\t\theaders['Prefer'] = (headers['Prefer'] as string) + ',return=minimal';\r\n\t\t\t} else {\r\n\t\t\t\theaders['Prefer'] = 'return=minimal';\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (options.single == true) {\r\n\t\t\t//__f__('log','at components/supadb/aksupa.uts:846','使用 single() 模式');\r\n\t\t\tif (headers['Prefer'] != null) {\r\n\t\t\t\theaders['Prefer'] = (headers['Prefer'] as string) + ',return=representation,single-object';\r\n\t\t\t} else {\r\n\t\t\t\theaders['Prefer'] = 'return=representation,single-object';\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\t// 确保有 select 参数\r\n\t\tif (options.columns == null) {\r\n\t\t\tparams.push('select=*');\r\n\t\t} else if (options.columns == \"\") {\r\n\t\t\tparams.push('select=*');\r\n\t\t}\r\n\t} else {\r\n\t\tparams.push('select=*');\r\n\t}\r\n\t// 直接用 string filter\r\n\tif (filter!=null && filter !== \"\") {\r\n\t\tparams.push(filter!!);\r\n\t}\r\n\tif (params.length > 0) {\r\n\t\turl += '?' + params.join('&');\r\n\t}\r\n\r\n\t//__f__('log','at components/supadb/aksupa.uts:871',url)\r\n\r\n\t// 确定HTTP方法:如果是head模式,使用HEAD方法\r\n\tlet httpMethod: 'GET' | 'HEAD' = 'GET';\r\n\tif (options != null && options.head == true) {\r\n\t\thttpMethod = 'HEAD';\r\n\t\t//__f__('log','at components/supadb/aksupa.uts:877','使用 HEAD 方法进行 count 查询');\r\n\t}\r\n\r\n\tlet reqOptions : AkReqOptions = {\r\n\t\turl,\r\n\t\tmethod: httpMethod,\r\n\t\theaders\r\n\t};\r\n\treturn await this.requestWithAutoRefresh(reqOptions);\r\n}\r\n\r\nasync select_uts(table : string, filter ?: UTSJSONObject | null, options ?: AkSupaSelectOptions) : Promise> {\r\n\tconst filter_str = buildSupabaseFilterQuery(filter)\r\n\treturn this.select(table,filter_str,options)\r\n}\r\n\t/**\r\n\t * 插入表数据\r\n\t * @param table 表名\r\n\t * @param row 插入对象\r\n\t * @returns 插入结果\r\n\t */\r\n\tasync insert(table : string, row : UTSJSONObject | Array) : Promise> {\r\n\t\tconst url = this.baseUrl + '/rest/v1/' + table;\r\n\t\tconst headers = {\r\n\t\t\tapikey: this.apikey,\r\n\t\t\t'Content-Type': 'application/json',\r\n\t\t\tAuthorization: `Bearer ${AkReq.getToken() ?? ''}`,\r\n\t\t\tPrefer: 'return=representation'\r\n\t\t} as UTSJSONObject;\r\n\r\n\t\t// 如果是数组,直接传递;如果是单个对象,也直接传递\r\n\t\t// Supabase REST API 原生支持两种格式\r\n\t\tlet reqOptions : AkReqOptions = {\r\n\t\t\turl,\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders,\r\n\t\t\tdata: row, // 可以是单个对象或数组\r\n\t\t\tcontentType: 'application/json'\r\n\t\t};\r\n\t\treturn await this.requestWithAutoRefresh(reqOptions);\r\n\t}\r\n\r\n\t/**\r\n\t * 更新表数据\r\n\t * @param table 表名\r\n\t * @param filter 过滤条件对象\r\n\t * @param values 更新内容对象\r\n\t * @returns 更新结果\r\n\t */\r\nasync update(table : string, filter : string | null, values : UTSJSONObject) : Promise> {\r\n\tlet url = this.baseUrl + '/rest/v1/' + table;\r\n\tif (filter!=null && filter !== \"\") {\r\n\t\turl += '?' + filter;\r\n\t}\r\n\tconst headers = {\r\n\t\tapikey: this.apikey,\r\n\t\t'Content-Type': 'application/json',\r\n\t\tAuthorization: `Bearer ${AkReq.getToken() ?? ''}`,\r\n\t\tPrefer: 'return=representation'\r\n\t} as UTSJSONObject;\r\n\tlet reqOptions : AkReqOptions = {\r\n\t\turl,\r\n\t\tmethod: 'PATCH',\r\n\t\theaders,\r\n\t\tdata: values,\r\n\t\tcontentType: 'application/json'\r\n\t};\r\n\treturn await this.requestWithAutoRefresh(reqOptions);\r\n}\r\n\r\n\t/**\r\n\t * 删除表数据\r\n\t * @param table 表名\r\n\t * @param filter 过滤条件对象\r\n\t * @returns 删除结果\r\n\t */\r\nasync delete(table : string, filter : string | null) : Promise> {\r\n\tlet url = this.baseUrl + '/rest/v1/' + table;\r\n\tif (filter!=null && filter !== \"\") {\r\n\t\turl += '?' + filter;\r\n\t}\r\n\tconst headers = {\r\n\t\tapikey: this.apikey,\r\n\t\t'Content-Type': 'application/json',\r\n\t\tAuthorization: `Bearer ${AkReq.getToken() ?? ''}`,\r\n\t\tPrefer: 'return=representation'\r\n\t} as UTSJSONObject;\r\n\tlet reqOptions : AkReqOptions = {\r\n\t\turl,\r\n\t\tmethod: 'DELETE',\r\n\t\theaders,\r\n\t\tcontentType: 'application/json'\r\n\t};\r\n\treturn await this.requestWithAutoRefresh(reqOptions);\r\n}\r\n\r\n\t/**\r\n\t * 调用 Supabase/PostgREST RPC (function)\r\n\t * @param functionName 函数名\r\n\t * @param params 参数对象\r\n\t * @returns AkReqResponse\r\n\t */\r\n\tasync rpc(functionName : string, params ?: UTSJSONObject) : Promise> {\r\n\t\tconst url = `${this.baseUrl}/rest/v1/rpc/${functionName}`;\r\n\t\tconst headers = {\r\n\t\t\tapikey: this.apikey,\r\n\t\t\t'Content-Type': 'application/json',\r\n\t\t\tAuthorization: `Bearer ${AkReq.getToken() ?? ''}`\r\n\t\t} as UTSJSONObject;\r\n\t\tlet reqOptions : AkReqOptions = {\r\n\t\t\turl,\r\n\t\t\tmethod: 'POST',\r\n\t\t\theaders,\r\n\t\t\tdata: params ?? {},\r\n\t\t\tcontentType: 'application/json'\r\n\t\t};\r\n\t\treturn await this.requestWithAutoRefresh(reqOptions);\r\n\t}\r\n\t/**\r\n\t * 兼容 supabase-js 风格\r\n\t * @param tableName 表名\r\n\t */\r\n\tfrom(tableName : string) : AkSupaQueryBuilder {\r\n\t\treturn new AkSupaQueryBuilder(this, tableName);\r\n\t}\r\n\r\n /**\r\n * 创建实时订阅通道 (兼容 Supabase Realtime 接口,目前使用轮询模拟)\r\n * @param topic 通道名称,如 public:table\r\n */\r\n channel(topic: string): AkSupaRealtimeChannel {\r\n return new AkSupaRealtimeChannel(this, topic);\r\n }\r\n \r\n /**\r\n * 移除通道\r\n */\r\n removeChannel(channel: AkSupaRealtimeChannel): Promise {\r\n channel.unsubscribe();\r\n return Promise.resolve('ok');\r\n }\r\n\t// AkSupa类内新增:自动刷新session\r\n\tasync refreshSession() : Promise {\r\n\t\tif (this.session == null || this.session?.refresh_token == null) return false;\r\n\t\ttry {\r\n\t\t\tconst res = await AkReq.request({\r\n\t\t\t\turl: this.baseUrl + '/auth/v1/token?grant_type=refresh_token',\r\n\t\t\t\tmethod: 'POST',\r\n\t\t\t\theaders: {\r\n\t\t\t\t\tapikey: this.apikey,\r\n\t\t\t\t\t'Content-Type': 'application/json'\r\n\t\t\t\t} as UTSJSONObject,\r\n\t\t\t\tdata: { refresh_token: this.session?.refresh_token } as UTSJSONObject,\r\n\t\t\t\tcontentType: 'application/json'\r\n\t\t\t}, false);\r\n\t\t\tif (res.status == 200 && (res.data != null)) {\r\n\t\t\t\tconst data = res.data as UTSJSONObject;\r\n\t\t\t\tconst access_token = data.getString('access_token') ?? '';\r\n\t\t\t\tconst refresh_token = data.getString('refresh_token') ?? '';\r\n\t\t\t\tconst expires_at = data.getNumber('expires_at') ?? 0;\r\n\t\t\t\tconst user = data.getJSON('user');\r\n\t\t\t\tthis.session = {\r\n\t\t\t\t\taccess_token,\r\n\t\t\t\t\trefresh_token,\r\n\t\t\t\t\texpires_at,\r\n\t\t\t\t\tuser,\r\n\t\t\t\t\ttoken_type: data.getString('token_type') ?? '',\r\n\t\t\t\t\texpires_in: data.getNumber('expires_in') ?? 0,\r\n\t\t\t\t\traw: data\r\n\t\t\t\t};\r\n\t\t\t\tthis.user = user;\r\n\t\t\t\t// 更新本地token\r\n\t\t\t\tAkReq.setToken(access_token, refresh_token, expires_at);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t} catch (e) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t// AkSupa类内新增:自动刷新封装\r\n\tasync requestWithAutoRefresh(reqOptions : AkReqOptions, isRetry = false) : Promise> {\r\n\t\tlet res = await AkReq.request(reqOptions, false);\r\n\t\t// JWT过期:Supabase风格\r\n\t\tconst isJwtExpired = (res.status == 401); //res != null && res.data != null && typeof res.data == 'object' && (res.data as UTSJSONObject)?.getString('code') == 'PGRST301';\r\n\t\t// 401未授权\r\n\t\tconst isUnauthorized = (res.status == 401);\r\n\t\tif ((isJwtExpired || isUnauthorized) && !isRetry) {\r\n\t\t\tconst ok = await this.refreshSession();\r\n\t\t\tif (ok) {\r\n\t\t\t\tlet headers = reqOptions.headers\r\n\t\t\t\tif (headers == null) {\r\n\t\t\t\t\theaders = new UTSJSONObject()\r\n\t\t\t\t}\r\n\t\t\t\tif (typeof headers.set == 'function') {\r\n\t\t\t\t\theaders.set('Authorization', `Bearer ${AkReq.getToken() ?? ''}`)\r\n\t\t\t\t\treqOptions.headers = headers\r\n\t\t\t\t}\r\n\r\n\t\t\t\tres = await AkReq.request(reqOptions, false);\r\n\t\t\t} else {\r\n\t\t\t\tuni.removeStorageSync('user_id');\r\n\t\t\t\tuni.removeStorageSync('token');\r\n\r\n\t\t\t\t//uni.reLaunch({ url: '/pages/user/login' });\r\n __f__('log','at components/supadb/aksupa.uts:1083','登录已过期,请重新登录');\r\n\t\t\t\tthrow toUniError('登录已过期,请重新登录', '用户认证失败');\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn res;\r\n\t}\r\n}\r\n\r\n// 工具函数:将 UTSJSONObject filter 转为 Supabase/PostgREST 查询字符串\r\nfunction buildSupabaseFilterQuery(filter : UTSJSONObject | null) : string {\r\n\t//__f__('log','at components/supadb/aksupa.uts:1093',filter)\r\n\tif (filter == null) return \"\";\r\n\t// 类型保护:如果不是 UTSJSONObject,自动包裹\r\n\tif (typeof filter.get !== 'function') {\r\n\t\ttry {\r\n\t\t\tfilter = new UTSJSONObject(filter as any)\r\n\t\t} catch (e) {\r\n\t\t\t__f__('warn','at components/supadb/aksupa.uts:1100','filter 不是 UTSJSONObject,且无法转换', filter)\r\n\t\t\treturn ''\r\n\t\t}\r\n\t}\r\n\tconst params : string[] = [];\r\n\tconst keys : string[] = UTSJSONObject.keys(filter);\r\n\tfor (let i = 0; i < keys.length; i++) {\r\n\t\tconst k = keys[i];\r\n\t\tconst v = filter.get(k);\r\n\t\tif (k == 'or' && typeof v == 'string') {\r\n\t\t\tparams.push(`or=(${v})`);\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tif (v != null && typeof v == 'object' && typeof (v as UTSJSONObject).get == 'function') {\r\n\t\t\tconst vObj = v as UTSJSONObject;\r\n\t\t\tconst opKeys = UTSJSONObject.keys(vObj);\r\n\t\t\tfor (let j = 0; j < opKeys.length; j++) {\r\n\t\t\t\tconst op = opKeys[j];\r\n\t\t\t\tconst opVal = vObj.get(op);\r\n\t\t\t\tif ((op == 'in' || op == 'not.in') && Array.isArray(opVal)) {\r\n\t\t\t\t\tparams.push(`${k}=${op}.(${opVal.map(x => typeof x == 'object' ? encodeURIComponent(JSON.stringify(x)) : encodeURIComponent(x.toString())).join(',')})`);\r\n\t\t\t\t} else if (op == 'is' && (opVal == null || opVal == 'null')) {\r\n\t\t\t\t\tparams.push(`${k}=is.null`);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tconst opvalstr : string = (typeof opVal == 'object') ? JSON.stringify(opVal) : (opVal as string);\r\n\t\t\t\t\tparams.push(`${k}=${op}.${encodeURIComponent(opvalstr)}`);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else if (v != null && typeof v == 'object') {\r\n\t\t\tconst vObj = v as UTSJSONObject;\r\n\t\t\tconst opKeys = UTSJSONObject.keys(vObj);\r\n\t\t\tfor (let j = 0; j < opKeys.length; j++) {\r\n\t\t\t\tconst op = opKeys[j];\r\n\t\t\t\tconst opVal = vObj.get(op);\r\n\t\t\t\tparams.push(`${k}=${op}.${encodeURIComponent(!(opVal == null) ? (typeof opVal == 'object' ? JSON.stringify(opVal) : opVal.toString()) : '')}`);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tparams.push(`${k}=eq.${encodeURIComponent(!(v == null) ? v.toString() : '')}`);\r\n\t\t}\r\n\t}\r\n\treturn params.join('&');\r\n}\r\n\r\n/**\r\n * 创建 Supabase 客户端实例\r\n * @param url 项目 URL\r\n * @param key 项目匿名密钥 (Anon Key)\r\n */\r\nexport function createClient(url : string, key : string) : AkSupa {\r\n\treturn new AkSupa(url, key);\r\n}\r\n\r\n// 模拟 Realtime Channel 类 (Polling Fallback)\r\nexport class AkSupaRealtimeChannel {\r\n private _supa: AkSupa;\r\n private _topic: string;\r\n private _timer: number = 0;\r\n private _callback: ((payload: any) => void) | null = null;\r\n private _table: string = '';\r\n private _lastTime: string = new Date().toISOString(); \r\n private _isSubscribed: boolean = false;\r\n\r\n constructor(supa: AkSupa, topic: string) {\r\n this._supa = supa;\r\n this._topic = topic;\r\n }\r\n\r\n // 绑定事件 (仅支持 postgres_changes INSERT)\r\n on(type: string, filter: UTSJSONObject, callback: (payload: any) => void): AkSupaRealtimeChannel {\r\n // 解析 table\r\n const table = filter.getString('table');\r\n if (table != null) {\r\n this._table = table;\r\n }\r\n this._callback = callback;\r\n return this;\r\n }\r\n\r\n // 开始订阅\r\n subscribe(callback?: (status: string, err: any | null) => void): AkSupaRealtimeChannel {\r\n if (this._isSubscribed) return this;\r\n this._isSubscribed = true;\r\n \r\n // 初始回调\r\n if (callback != null) {\r\n callback('SUBSCRIBED', null);\r\n }\r\n\r\n // 如果没有指定 table,无法轮询\r\n if (this._table == '') {\r\n __f__('warn','at components/supadb/aksupa.uts:1190','Realtime check: No table specified for polling.');\r\n return this;\r\n }\r\n\r\n // 开始轮询 (每3秒)\r\n this._timer = setInterval(() => {\r\n this._checkUpdates();\r\n }, 3000);\r\n\r\n return this;\r\n }\r\n\r\n // 停止订阅\r\n unsubscribe() {\r\n if (this._timer > 0) {\r\n clearInterval(this._timer);\r\n this._timer = 0;\r\n }\r\n this._isSubscribed = false;\r\n }\r\n\r\n // 检查更新\r\n private async _checkUpdates() {\r\n if (!this._isSubscribed || this._table == '') return;\r\n \r\n try {\r\n const now = new Date().toISOString();\r\n \r\n const res = await this._supa\r\n .from(this._table)\r\n .select('*')\r\n .gt('created_at', this._lastTime)\r\n .order('created_at', { ascending: true })\r\n .execute();\r\n \r\n if (res.error == null && res.data != null) {\r\n let list: any[] = [];\r\n if (Array.isArray(res.data)) {\r\n list = res.data as any[];\r\n }\r\n \r\n if (list.length > 0) {\r\n // 更新最后时间\r\n const lastItem = list[list.length - 1];\r\n let lastTimeStr: string | null = null;\r\n \r\n if (lastItem instanceof UTSJSONObject) {\r\n lastTimeStr = lastItem.getString('created_at');\r\n } else {\r\n // 尝试转 json\r\n const j = JSON.parse(JSON.stringify(lastItem)) as UTSJSONObject;\r\n lastTimeStr = j.getString('created_at');\r\n }\r\n \r\n if (lastTimeStr != null) {\r\n this._lastTime = lastTimeStr;\r\n } else {\r\n this._lastTime = now;\r\n }\r\n\r\n // 触发回调\r\n if (this._callback != null) {\r\n // 模拟 Realtime payload\r\n list.forEach(item => {\r\n const payload = {\r\n new: item,\r\n eventType: 'INSERT',\r\n old: null\r\n };\r\n this._callback?.(payload);\r\n });\r\n }\r\n }\r\n }\r\n } catch (e) {\r\n __f__('error','at components/supadb/aksupa.uts:1265','Realtime polling error:', e);\r\n }\r\n }\r\n}\r\n\r\nexport default AkSupa;\r\n","// /components/supadb/aksupainstance.uts\r\nimport { createClient } from './aksupa.uts'\r\nimport { SUPA_URL, SUPA_KEY } from '@/ak/config.uts'\r\n\r\n// 创建单一真实的 Supabase 客户端实例 (使用 config.uts 配置)\r\n// Create single source of truth client using config\r\nconst supaInstance = createClient(SUPA_URL, SUPA_KEY)\r\n\r\n// 导出默认实例 (供 login.uvue 等使用)\r\nexport default supaInstance\r\n\r\n// 导出命名实例 'supabase' (供 store.uts 使用)\r\nexport const supabase = supaInstance\r\n\r\n// 导出 isSupabaseReady 状态\r\nexport const isSupabaseReady = true\r\n\r\n// 兼容 ensureSupabaseReady\r\nexport async function ensureSupabaseReady() {\r\n return true\r\n}\r\n\r\n// 检查连接状态的函数\r\nexport function checkConnection() {\r\n return Promise.resolve(true)\r\n}\r\n\r\n// 兼容 supaReady Promise\r\nexport const supaReady = Promise.resolve(true)\r\n\r\n// 如果有其他需要导出的函数,可以这样导出:\r\nexport function initializeSupabase(url: string, key: string) {\r\n return createClient(url, key)\r\n}\r\n","// 电商商城系统类型定义 - UTS Android 兼容\r\n\r\n// 用户类型\r\nexport type UserType = {\r\n\tid: string\r\n\tphone: string\r\n\temail: string | null\r\n\tnickname: string | null\r\n\tavatar_url: string | null\r\n\tgender: number\r\n\tuser_type: number\r\n\tstatus: number\r\n\tcreated_at: string\r\n}\r\n\r\n// 商城用户扩展信息类型\r\nexport type MallUserProfileType = {\r\n\tid: string\r\n\tuser_id: string\r\n\tuser_type: number\r\n\tstatus: number\r\n\treal_name: string | null\r\n\tid_card: string | null\r\n\tcredit_score: number\r\n\tmall_role: string\r\n\tverification_status: number\r\n\tverification_data: UTSJSONObject | null\r\n\tbusiness_license: string | null\r\n\tshop_category: string | null\r\n\tservice_areas: UTSJSONObject | null\r\n\temergency_contact: string | null\r\n\tpreferences: UTSJSONObject | null\r\n\tcreated_at: string\r\n\tupdated_at: string\r\n}\r\n\r\n// 用户地址类型\r\nexport type UserAddressType = {\r\n\tid: string\r\n\tuser_id: string\r\n\treceiver_name: string\r\n\treceiver_phone: string\r\n\tprovince: string\r\n\tcity: string\r\n\tdistrict: string\r\n\taddress_detail: string\r\n\tpostal_code: string | null\r\n\tis_default: boolean\r\n\tlabel: string | null\r\n\tcoordinates: string | null\r\n\tdelivery_instructions: string | null\r\n\tbusiness_hours: string | null\r\n\tstatus: number\r\n\tcreated_at: string\r\n\tupdated_at: string\r\n}\r\n\r\n// 商家类型\r\nexport type MerchantType = {\r\n\tid: string\r\n\tuser_id: string\r\n\tshop_name: string\r\n\tshop_logo: string | null\r\n\tshop_banner: string | null\r\n\tshop_description: string | null\r\n\tcontact_name: string\r\n\tcontact_phone: string\r\n\tshop_status: number\r\n\trating: number\r\n\ttotal_sales: number\r\n\tcreated_at: string\r\n}\r\n\r\n// 商品类型\r\nexport type ProductType = {\r\n\tid: string\r\n\tmerchant_id: string\r\n\tcategory_id: string\r\n\tname: string\r\n\tdescription: string | null\r\n\timages: Array\r\n\tprice: number\r\n\toriginal_price: number | null\r\n\tstock: number\r\n\tsales: number\r\n\tstatus: number\r\n\tcreated_at: string\r\n\t// 药品相关字段\r\n\tspecification?: string | null // 规格说明\r\n\tusage?: string | null // 用法用量\r\n\tside_effects?: string | null // 副作用\r\n\tprecautions?: string | null // 注意事项\r\n\texpiry_date?: string | null // 有效期\r\n\tstorage_conditions?: string | null // 储存条件\r\n\tapproval_number?: string | null // 批准文号\r\n\ttags?: Array | null // 商品标签\r\n}\r\n\r\n// 商品SKU类型\r\nexport type ProductSkuType = {\r\n\tid: string\r\n\tproduct_id: string\r\n\tsku_code: string\r\n\tspecifications: UTSJSONObject | null\r\n\tprice: number\r\n\tstock: number\r\n\timage_url: string | null\r\n\tstatus: number\r\n}\r\n\r\n// 购物车类型\r\nexport type CartItemType = {\r\n\tid: string\r\n\tuser_id: string\r\n\tproduct_id: string\r\n\tsku_id: string\r\n\tquantity: number\r\n\tselected: boolean\r\n\tproduct: ProductType | null\r\n\tsku: ProductSkuType | null\r\n}\r\n\r\n// 订单类型\r\nexport type OrderType = {\r\n\tid: string\r\n\torder_no: string\r\n\tuser_id: string\r\n\tmerchant_id: string\r\n\tstatus: number\r\n\ttotal_amount: number\r\n\tdiscount_amount: number\r\n\tdelivery_fee: number\r\n\tactual_amount: number\r\n\tpayment_method: number | null\r\n\tpayment_status: number\r\n\tdelivery_address: UTSJSONObject\r\n\tcreated_at: string\r\n}\r\n\r\n// 订单商品类型\r\nexport type OrderItemType = {\r\n\tid: string\r\n\torder_id: string\r\n\tproduct_id: string\r\n\tsku_id: string\r\n\tproduct_name: string\r\n\tsku_specifications: UTSJSONObject | null\r\n\tprice: number\r\n\tquantity: number\r\n\ttotal_amount: number\r\n}\r\n\r\n// 配送员类型\r\nexport type DeliveryDriverType = {\r\n\tid: string\r\n\tuser_id: string\r\n\treal_name: string\r\n\tid_card: string\r\n\tdriver_license: string | null\r\n\tvehicle_type: number\r\n\tvehicle_number: string | null\r\n\twork_status: number\r\n\tcurrent_location: UTSJSONObject | null\r\n\tservice_areas: Array\r\n\trating: number\r\n\ttotal_orders: number\r\n\tauth_status: number\r\n\tcreated_at: string\r\n\tupdated_at: string\r\n}\r\n\r\n// 配送任务类型\r\nexport type DeliveryTaskType = {\r\n\tid: string\r\n\torder_id: string\r\n\tdriver_id: string | null\r\n\tpickup_address: UTSJSONObject\r\n\tdelivery_address: UTSJSONObject\r\n\tdistance: number | null\r\n\testimated_time: number | null\r\n\tdelivery_fee: number\r\n\tstatus: number\r\n\tpickup_time: string | null\r\n\tdelivered_time: string | null\r\n\tdelivery_code: string | null\r\n\tremark: string | null\r\n\tcreated_at: string\r\n\tupdated_at: string\r\n}\r\n\r\n// 优惠券模板类型\r\nexport type CouponTemplateType = {\r\n\tid: string\r\n\tname: string\r\n\tdescription: string | null\r\n\tcoupon_type: number\r\n\tdiscount_type: number\r\n\tdiscount_value: number\r\n\tmin_order_amount: number\r\n\tmax_discount_amount: number | null\r\n\ttotal_quantity: number | null\r\n\tper_user_limit: number\r\n\tusage_limit: number\r\n\tmerchant_id: string | null\r\n\tcategory_ids: Array\r\n\tproduct_ids: Array\r\n\tuser_type_limit: number | null\r\n\tstart_time: string\r\n\tend_time: string\r\n\tstatus: number\r\n\tcreated_at: string\r\n}\r\n\r\n// 用户优惠券类型\r\nexport type UserCouponType = {\r\n\tid: string\r\n\tuser_id: string\r\n\ttemplate_id: string\r\n\tcoupon_code: string\r\n\tstatus: number\r\n\tused_at: string | null\r\n\torder_id: string | null\r\n\treceived_at: string\r\n\texpire_at: string\r\n}\r\n\r\n// 分页数据类型\r\nexport type PageDataType = {\r\n\tdata: Array\r\n\ttotal: number\r\n\tpage: number\r\n\tpageSize: number\r\n\thasMore: boolean\r\n}\r\n\r\n// API响应类型\r\nexport type ApiResponseType = {\r\n\tsuccess: boolean\r\n\tdata: T | null\r\n\tmessage: string\r\n\tcode: number\r\n}\r\n\r\n// 订单状态枚举\r\nexport const ORDER_STATUS = {\r\n\tPENDING_PAYMENT: 1,\r\n\tPAID: 2,\r\n\tSHIPPED: 3,\r\n\tDELIVERED: 4,\r\n\tCOMPLETED: 5,\r\n\tCANCELLED: 6,\r\n\tREFUNDING: 7,\r\n\tREFUNDED: 8\r\n}\r\n\r\n// 优惠券类型枚举\r\nexport const COUPON_TYPE = {\r\n\tDISCOUNT_AMOUNT: 1, // 满减券\r\n\tDISCOUNT_PERCENT: 2, // 折扣券\r\n\tFREE_SHIPPING: 3, // 免运费券\r\n\tNEWBIE: 4, // 新人券\r\n\tMEMBER: 5, // 会员券\r\n\tCATEGORY: 6, // 品类券\r\n\tMERCHANT: 7, // 商家券\r\n\tLIMITED_TIME: 8 // 限时券\r\n}\r\n\r\n// 支付方式枚举\r\nexport const PAYMENT_METHOD = {\r\n\tWECHAT: 1,\r\n\tALIPAY: 2,\r\n\tUNIONPAY: 3,\r\n\tBALANCE: 4\r\n}\r\n\r\n// 配送状态枚举\r\nexport const DELIVERY_STATUS = {\r\n\tPENDING: 1,\r\n\tASSIGNED: 2,\r\n\tPICKED_UP: 3,\r\n\tIN_TRANSIT: 4,\r\n\tDELIVERED: 5,\r\n\tFAILED: 6\r\n}\r\n\r\n// 用户类型枚举\r\nexport const MALL_USER_TYPE = {\r\n\tCONSUMER: 1, // 消费者\r\n\tMERCHANT: 2, // 商家\r\n\tDELIVERY: 3, // 配送员\r\n\tSERVICE: 4, // 客服\r\n\tADMIN: 5 // 管理员\r\n}\r\n\r\n// 用户状态枚举\r\nexport const USER_STATUS = {\r\n\tNORMAL: 1, // 正常\r\n\tFROZEN: 2, // 冻结\r\n\tCANCELLED: 3, // 注销\r\n\tPENDING: 4 // 待审核\r\n} as const\r\n\r\n// 认证状态枚举\r\nexport const VERIFICATION_STATUS = {\r\n\tUNVERIFIED: 0, // 未认证\r\n\tVERIFIED: 1, // 已认证\r\n\tFAILED: 2 // 认证失败\r\n}\r\n\r\n// 地址标签枚举\r\nexport const ADDRESS_LABEL = {\r\n\tHOME: 'home', // 家\r\n\tOFFICE: 'office', // 公司\r\n\tSCHOOL: 'school', // 学校\r\n\tOTHER: 'other' // 其他\r\n}\r\n\r\n// 收藏类型枚举\r\nexport const FAVORITE_TYPE = {\r\n\tPRODUCT: 'product', // 商品\r\n\tSHOP: 'shop' // 店铺\r\n}\r\n\r\n// =========================\r\n// 订阅相关类型与枚举\r\n// =========================\r\n\r\n// 订阅周期枚举\r\nexport const SUBSCRIPTION_PERIOD = {\r\n\tMONTHLY: 'monthly',\r\n\tYEARLY: 'yearly'\r\n}\r\n\r\n// 订阅状态枚举\r\nexport const SUBSCRIPTION_STATUS = {\r\n\tTRIAL: 'trial',\r\n\tACTIVE: 'active',\r\n\tPAST_DUE: 'past_due',\r\n\tCANCELED: 'canceled',\r\n\tEXPIRED: 'expired'\r\n}\r\n\r\n// 软件订阅方案类型\r\nexport type SubscriptionPlanType = {\r\n\tid: string\r\n\tplan_code: string\r\n\tname: string\r\n\tdescription: string | null\r\n\tfeatures: UTSJSONObject | null // { featureKey: description }\r\n\tprice: number // 单位:元(或分,取决于后端;前端以显示为准)\r\n\tcurrency: string | null // 'CNY' | 'USD' ...\r\n\tbilling_period: string // 'monthly' | 'yearly'\r\n\ttrial_days: number | null\r\n\tis_active: boolean\r\n\tsort_order?: number | null\r\n\tcreated_at?: string\r\n\tupdated_at?: string\r\n}\r\n\r\n// 用户订阅记录类型\r\nexport type UserSubscriptionType = {\r\n\tid: string\r\n\tuser_id: string\r\n\tplan_id: string\r\n\tstatus: string\r\n\tstart_date: string\r\n\tend_date: string | null\r\n\tnext_billing_date: string | null\r\n\tauto_renew: boolean\r\n\tcancel_at_period_end?: boolean | null\r\n\tmetadata?: UTSJSONObject | null\r\n\tcreated_at?: string\r\n\tupdated_at?: string\r\n}\r\n\r\n// 用户基础信息类型 (兼容 pages/user/types.uts)\r\nexport type UserProfile = {\r\n id?: string;\r\n username: string;\r\n email: string;\r\n gender?: string;\r\n birthday?: string;\r\n height_cm?: number;\r\n weight_kg?: number;\r\n bio?: string;\r\n avatar_url?: string;\r\n preferred_language?: string;\r\n role?: string;\r\n school_id?: string;\r\n grade_id?: string;\r\n class_id?: string;\r\n created_at?: string;\r\n updated_at?: string;\r\n}\r\n\r\nexport type UserStats = {\r\n trainings: number;\r\n points: number;\r\n streak: number;\r\n}\r\n\r\n// 足迹项类型\r\nexport type FootprintItemType = {\r\n id: string\r\n name: string\r\n price: number\r\n original_price: number | null\r\n image: string\r\n sales: number\r\n shopId: string\r\n shopName: string\r\n viewTime: number\r\n}\r\n","// 设备信息类型\r\nexport type DeviceInfo = {\r\n\tid: string\r\n\tdevice_name?: string\r\n\tstatus?: string // 'online' | 'offline' | 其他状态\r\n\tuser_id?: string\r\n\t// 可根据实际需求添加更多字段\r\n}\r\n\r\n// 设备查询参数类型\r\nexport type DeviceParams = {\r\n\tuser_id: string\r\n\t// 可根据实际需求添加更多查询参数\r\n}\r\n","import supabase, { supaReady } from '@/components/supadb/aksupainstance.uts'\r\nimport type { UserProfile } from '@/types/mall-types.uts'\r\n\r\n/**\r\n * 确保用户资料存在,如果不存在则创建基础资料\r\n * @param sessionUser 会话用户对象 (UTSJSONObject)\r\n * @returns 创建的用户资料,如果创建失败则返回 null\r\n */\r\nexport async function ensureUserProfile(sessionUser: UTSJSONObject): Promise {\r\n\ttry {\r\n\t\tawait supaReady\r\n \r\n\t\t// 从 sessionUser 中获取用户ID和邮箱\r\n\t\tconst userId = sessionUser.getString('id')\r\n\t\tconst email = sessionUser.getString('email') ?? ''\r\n\t\t\r\n\t\tif (userId == null || userId === '') {\r\n\t\t\t__f__('error','at utils/sapi.uts:18','无法获取用户ID')\r\n\t\t\treturn null\r\n\t\t}\r\n\t\t\r\n\t\t// 检查用户是否已存在(ak_users 通过 auth_id 关联 auth.users.id)\r\n\t\tconst checkRes = await supabase.from('ak_users')\r\n\t\t\t.select('*', {})\r\n\t\t\t.eq('auth_id', userId)\r\n\t\t\t.single()\r\n\t\t\t.execute()\r\n\t\t\r\n\t\t__f__('log','at utils/sapi.uts:29','ensureUserProfile check ak_users:', {\r\n\t\t\tstatus: checkRes.status,\r\n\t\t\thasData: checkRes.data != null\r\n\t\t})\r\n\t\t\r\n\t\tif (checkRes.status >= 200 && checkRes.status < 300 && checkRes.data != null) {\r\n\t\t\t// 用户已存在,返回现有资料(H5 下 checkRes.data 可能是 plain object,不一定是 UTSJSONObject)\r\n\t\t\tconst data = checkRes.data\r\n\t\t\tlet existingUser: UTSJSONObject\r\n\t\t\tif (data instanceof UTSJSONObject) {\r\n\t\t\t\texistingUser = data\r\n\t\t\t} else {\r\n\t\t\t\texistingUser = new UTSJSONObject(data)\r\n\t\t\t}\r\n\t\t\treturn {\r\n\t\t\t\tid: existingUser.getString('id') ?? '',\r\n\t\t\t\tusername: existingUser.getString('username') ?? '',\r\n\t\t\t\temail: existingUser.getString('email') ?? email,\r\n\t\t\t\tgender: existingUser.getString('gender'),\r\n\t\t\t\tbirthday: existingUser.getString('birthday'),\r\n\t\t\t\theight_cm: existingUser.getNumber('height_cm'),\r\n\t\t\t\tweight_kg: existingUser.getNumber('weight_kg'),\r\n\t\t\t\tbio: existingUser.getString('bio'),\r\n\t\t\t\tavatar_url: existingUser.getString('avatar_url'),\r\n\t\t\t\tpreferred_language: existingUser.getString('preferred_language'),\r\n\t\t\t\trole: existingUser.getString('role') ?? 'consumer',\r\n\t\t\t\tcreated_at: existingUser.getString('created_at'),\r\n\t\t\t\tupdated_at: existingUser.getString('updated_at')\r\n\t\t\t} as UserProfile\r\n\t\t}\r\n\t\t\r\n\t\t// 用户不存在,创建新用户资料\r\n\t\tconst newUserData = new UTSJSONObject()\r\n\t\tnewUserData.set('id', userId)\r\n\t\tnewUserData.set('email', email)\r\n\t\tnewUserData.set('username', email.split('@')[0] ?? 'user') // 默认用户名为邮箱前缀\r\n\t\t\r\n\t\tconst insertRes = await supabase.from('ak_users')\r\n\t\t\t.insert(newUserData)\r\n\t\t\t.select('*', {})\r\n\t\t\t.single()\r\n\t\t\t.execute()\r\n\t\t\r\n\t\t__f__('log','at utils/sapi.uts:72','ensureUserProfile insert ak_users status:', insertRes.status)\r\n\t\t\r\n\t\tif (insertRes.status >= 200 && insertRes.status < 300 && insertRes.data != null) {\r\n\t\t\tconst rawData = insertRes.data\r\n\t\t\tconst newUser = (rawData instanceof UTSJSONObject)\r\n\t\t\t\t? (rawData as UTSJSONObject)\r\n\t\t\t\t: new UTSJSONObject(rawData)\r\n\t\t\treturn {\r\n\t\t\t\tid: newUser.getString('id') ?? '',\r\n\t\t\t\tusername: newUser.getString('username') ?? '',\r\n\t\t\t\temail: newUser.getString('email') ?? email,\r\n\t\t\t\tgender: newUser.getString('gender'),\r\n\t\t\t\tbirthday: newUser.getString('birthday'),\r\n\t\t\t\theight_cm: newUser.getNumber('height_cm'),\r\n\t\t\t\tweight_kg: newUser.getNumber('weight_kg'),\r\n\t\t\t\tbio: newUser.getString('bio'),\r\n\t\t\t\tavatar_url: newUser.getString('avatar_url'),\r\n\t\t\t\tpreferred_language: newUser.getString('preferred_language'),\r\n\t\t\t\trole: newUser.getString('role') ?? 'consumer',\r\n\t\t\t\tcreated_at: newUser.getString('created_at'),\r\n\t\t\t\tupdated_at: newUser.getString('updated_at')\r\n\t\t\t} as UserProfile\r\n\t\t} else {\r\n\t\t\t__f__('error','at utils/sapi.uts:95','创建用户资料失败:', insertRes.status)\r\n\t\t\treturn null\r\n\t\t}\r\n\t} catch (error) {\r\n\t\t__f__('error','at utils/sapi.uts:99','ensureUserProfile 异常:', error)\r\n\t\treturn null\r\n\t}\r\n}\r\n","import supa, { supaReady } from '@/components/supadb/aksupainstance.uts'\r\nimport type { UserProfile, UserStats } from '@/types/mall-types.uts'\r\nimport type { DeviceInfo } from '@/pages/sense/types.uts'\r\nimport { SenseDataService, type DeviceParams } from '@/pages/sense/senseDataService.uts'\r\nimport { reactive } from 'vue'\r\nimport { ensureUserProfile } from './sapi.uts'\r\n\r\n// 设备状态类型\r\nexport type DeviceState = {\r\n\tdevices : Array\r\n\tcurrentDevice : DeviceInfo | null\r\n\tisLoading : boolean\r\n\tlastUpdated : number | null\r\n}\r\n\r\n//定义一个大写的State类型\r\nexport type State = {\r\n\tglobalNum : number\r\n\tuserProfile ?: UserProfile\r\n\tisLoggedIn : boolean // 新增字段\r\n\tdeviceState : DeviceState // 新增设备状态\r\n\t// 如有需要,可增加更多属性\r\n}\r\n\r\n// 实例化为state\r\nexport const state = reactive({\r\n\tglobalNum: 0,\r\n\tuserProfile: { username: '', email: '' },\r\n\tisLoggedIn: false,\r\n\tdeviceState: {\r\n\t\tdevices: [],\r\n\t\tcurrentDevice: null,\r\n\t\tisLoading: false,\r\n\t\tlastUpdated: null\r\n\t} as DeviceState\r\n} as State)\r\n// 定义修改属性值的方法\r\nexport const setGlobalNum = (num : number) => {\r\n\tstate.globalNum = num\r\n}\r\n// 新增:设置登录状态的方法\r\nexport const setIsLoggedIn = (val : boolean) => {\r\n\tstate.isLoggedIn = val\r\n}\r\n// 定义全局设置用户信息的方法\r\nexport const setUserProfile = (profile : UserProfile) => {\r\n\tstate.userProfile = profile\r\n}\r\n\r\n// 获取当前用户信息(含补全 profile)\r\nexport async function getCurrentUser() : Promise {\r\n\ttry {\r\n\t\tawait supaReady\r\n\t} catch (_) {}\r\n\r\n\tconst sessionInfo = supa.getSession()\r\n\tif (sessionInfo.user == null) {\r\n\t\tstate.userProfile = { username: '', email: '' } as UserProfile\r\n\t\tstate.isLoggedIn = false // 未登录\r\n\t\treturn null\r\n\t}\r\n\tconst userId = sessionInfo.user?.getString(\"id\")\r\n\tif (userId == null) {\r\n\t\tstate.userProfile = { username: '', email: '' } as UserProfile\r\n\t\tstate.isLoggedIn = false // 未登录\r\n\t\treturn null\r\n\t}\t// 查询 ak_users 表补全 profile\r\n\tconst res = await supa.from('ak_users').select('*', {}).eq('id', userId).execute()\r\n\t__f__('log','at utils/store.uts:69',res)\r\n\tif (res.status >= 200 && res.status < 300 && (res.data != null)) {\r\n\t\tlet user : UTSJSONObject | null = null;\r\n\t\tconst data = res.data as any;\r\n\t\tif (Array.isArray(data)) {\r\n\t\t\tif (data.length > 0) {\r\n\t\t\t\tuser = data[0] as UTSJSONObject;\r\n\t\t\t}\r\n\t\t} else if (data != null) {\r\n\t\t\tuser = data as UTSJSONObject;\r\n\t\t} __f__('log','at utils/store.uts:79',user)\r\n\t\tif (user == null) {\r\n\t\t\t__f__('log','at utils/store.uts:81','用户资料为空,尝试创建基础资料...')\t\t\t// 如果用户资料为空,尝试创建基础用户资料\r\n\t\t\tconst sessionUser = sessionInfo.user\r\n\t\t\tif (sessionUser != null) {\r\n\t\t\t\tconst createdProfile = await ensureUserProfile(sessionUser)\r\n\t\t\t\tif (createdProfile != null) {\r\n\t\t\t\t\tstate.userProfile = createdProfile\r\n\t\t\t\t\tstate.isLoggedIn = true\r\n\t\t\t\t\treturn createdProfile\r\n\t\t\t\t} else {\r\n\t\t\t\t\t__f__('error','at utils/store.uts:90','创建用户资料失败')\r\n\t\t\t\t\tstate.userProfile = { username: '', email: '' } as UserProfile\r\n\t\t\t\t\tstate.isLoggedIn = false\r\n\t\t\t\t\treturn null\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t__f__('error','at utils/store.uts:96','会话用户信息为空')\r\n\t\t\t\tstate.userProfile = { username: '', email: '' } as UserProfile\r\n\t\t\t\tstate.isLoggedIn = false\r\n\t\t\t\treturn null\r\n\t\t\t}\r\n\t\t}\r\n\t\t__f__('log','at utils/store.uts:102',user)\r\n\t\t// 直接用 getString/getNumber,无需兜底属性\t\t\r\n\t\tconst profile : UserProfile = {\r\n\t\t\tid: user.getString('id'),\r\n\t\t\tusername: user.getString('username') ?? \"\",\r\n\t\t\temail: user.getString('email') ?? \"\",\r\n\t\t\tgender: user.getString('gender'),\r\n\t\t\tbirthday: user.getString('birthday'),\r\n\t\t\theight_cm: user.getNumber('height_cm'),\r\n\t\t\tweight_kg: user.getNumber('weight_kg'),\r\n\t\t\tbio: user.getString('bio'),\r\n\t\t\tavatar_url: user.getString('avatar_url'),\r\n\t\t\tpreferred_language: user.getString('preferred_language'),\r\n\t\t\trole: user.getString('role'),\r\n\t\t\tschool_id: user.getString('school_id'),\r\n\t\t\tgrade_id: user.getString('grade_id'),\r\n\t\t\tclass_id: user.getString('class_id')\r\n\t\t}\r\n\t\tstate.userProfile = profile\r\n\t\tstate.isLoggedIn = true // 登录成功\r\n\t\treturn profile\r\n\t} else {\r\n\t\tstate.userProfile = { username: '', email: '' } as UserProfile\r\n\t\tstate.isLoggedIn = false // 未登录\r\n\t\treturn null\r\n\t}\r\n}\r\n\r\n// 登出并清空用户信息\r\nexport function logout() {\r\n\tsupa.signOut()\r\n\tstate.userProfile = { username: '', email: '' } as UserProfile\r\n\tstate.isLoggedIn = false // 登出\r\n}\r\n\r\n// 获取当前用户ID(优先级:state.userProfile.id > session > localStorage)\r\nexport function getCurrentUserId() : string {\r\n\ttry {\r\n\t\tconst profile = state.userProfile\r\n\t\tif (profile != null && profile.id != null) {\r\n\t\t\tconst profileId = profile.id\r\n\t\t\tif (profileId != null) {\r\n\t\t\t\treturn profileId\r\n\t\t\t}\r\n\t\t}\r\n\t} catch (e) { }\r\n\ttry {\r\n\t\tconst session = supa.getSession()\r\n\t\tif (session != null) {\r\n\t\t\tconst curuser = session.user\r\n\t\t\tconst userId = curuser?.getString('id')\r\n\t\t\tif (userId != null) return userId\r\n\t\t}\r\n\t} catch (e) { }\r\n\treturn ''\r\n}\r\n\r\n// 获取当前用户的class_id\r\nexport function getCurrentUserClassId() : string | null {\r\n\ttry {\r\n\t\tconst profile = state.userProfile\r\n\t\tif (profile != null && profile.class_id != null) {\r\n\t\t\treturn profile.class_id\r\n\t\t}\r\n\t} catch (e) {\r\n\t\t__f__('error','at utils/store.uts:167','获取用户class_id失败:', e)\r\n\t}\r\n\treturn null\r\n}\r\n\r\n// User store API for component compatibility\r\nexport function getUserStore() {\r\n\treturn {\r\n\t\tgetUserId() : string | null {\r\n\t\t\tconst sessionInfo = supa.getSession()\r\n\t\t\treturn sessionInfo.user?.getString(\"id\") ?? null\r\n\t\t},\r\n\r\n\t\tgetUserName() : string | null {\r\n\t\t\treturn state.userProfile?.username ?? null\r\n\t\t},\r\n\r\n\t\tgetUserRole() : string | null {\r\n\t\t\t// Default role logic - can be enhanced based on your needs\r\n\t\t\tconst sessionInfo = supa.getSession()\r\n\t\t\tif (sessionInfo.user == null) return null\r\n\r\n\t\t\t// You can add role detection logic here\r\n\t\t\t// For now, return a default role\r\n\t\t\treturn 'teacher' // or determine from user profile/database\r\n\t\t},\r\n\r\n\t\tgetProfile() : UserProfile | null {\r\n\t\t\treturn state.userProfile\r\n\t\t}\r\n\t}\r\n}\r\n\r\n// ========== 设备状态管理方法 ==========\r\n\r\n/**\r\n * 设置设备加载状态\r\n */\r\nexport const setDeviceLoading = (loading : boolean) => {\r\n\tstate.deviceState.isLoading = loading\r\n}\r\n\r\n/**\r\n * 设置设备列表\r\n */\r\nexport const setDevices = (devices : Array) => {\r\n\tstate.deviceState.devices = devices\r\n\tstate.deviceState.lastUpdated = Date.now()\r\n}\r\n\r\n/**\r\n * 添加设备到列表\r\n */\r\nexport const addDevice = (device : DeviceInfo) => {\r\n\tconst existingIndex = state.deviceState.devices.findIndex(d => d.id === device.id)\r\n\tif (existingIndex >= 0) {\r\n\t\t// 更新现有设备\r\n\t\tstate.deviceState.devices[existingIndex] = device\r\n\t} else {\r\n\t\t// 添加新设备\r\n\t\tstate.deviceState.devices.push(device)\r\n\t}\r\n\tstate.deviceState.lastUpdated = Date.now()\r\n}\r\n\r\n/**\r\n * 从列表中移除设备\r\n */\r\nexport const removeDevice = (deviceId : string) => {\r\n\tconst index = state.deviceState.devices.findIndex(d => d.id === deviceId)\r\n\tif (index >= 0) {\r\n\t\tstate.deviceState.devices.splice(index, 1)\r\n\t\t// 如果移除的是当前设备,清空当前设备\r\n\t\tif (state.deviceState.currentDevice?.id === deviceId) {\r\n\t\t\tstate.deviceState.currentDevice = null\r\n\t\t}\r\n\t\tstate.deviceState.lastUpdated = Date.now()\r\n\t}\r\n}\r\n\r\n/**\r\n * 更新设备信息\r\n */\r\nexport const updateDevice = (device : DeviceInfo) => {\r\n\tconst index = state.deviceState.devices.findIndex(d => d.id === device.id)\r\n\tif (index >= 0) {\r\n\t\tstate.deviceState.devices[index] = device\r\n\t\t// 如果更新的是当前设备,也更新当前设备\r\n\t\tif (state.deviceState.currentDevice?.id === device.id) {\r\n\t\t\tstate.deviceState.currentDevice = device\r\n\t\t}\r\n\t\tstate.deviceState.lastUpdated = Date.now()\r\n\t}\r\n}\r\n\r\n/**\r\n * 设置当前选中的设备\r\n */\r\nexport const setCurrentDevice = (device : DeviceInfo | null) => {\r\n\tstate.deviceState.currentDevice = device\r\n}\r\n\r\n/**\r\n * 根据设备ID获取设备信息\r\n */\r\nexport const getDeviceById = (deviceId : string) : DeviceInfo | null => {\r\n\treturn state.deviceState.devices.find(d => d.id === deviceId) ?? null\r\n}\r\n\r\n/**\r\n * 获取在线设备列表\r\n */\r\nexport const getOnlineDevices = () : Array => {\r\n\treturn state.deviceState.devices.filter(d => d.status === 'online')\r\n}\r\n\r\n/**\r\n * 从服务器加载设备列表\r\n */\r\nexport const loadDevices = async (forceRefresh : boolean) : Promise => {\r\n\tconst userId = getCurrentUserId()\r\n\tif (userId == null || userId === '') {\r\n\t\t__f__('log','at utils/store.uts:289','用户未登录,无法加载设备列表')\r\n\t\treturn false\r\n\t}\r\n\r\n\t// 如果不是强制刷新且数据较新(5分钟内),直接返回\r\n\tconst now = Date.now()\r\n\tconst lastUpdated = state.deviceState.lastUpdated\r\n\tif (forceRefresh == false && lastUpdated != null && (now - lastUpdated < 5 * 60 * 1000)) {\r\n\t\t__f__('log','at utils/store.uts:297','设备数据较新,跳过刷新')\r\n\t\treturn true\r\n\t}\r\n\tsetDeviceLoading(true)\r\n\ttry {\r\n\t\tconst result = await SenseDataService.getDevices({ user_id: userId })\r\n\t\tif (result.error === null && result.data != null) {\r\n\t\t\tconst devices = result.data as Array\r\n\t\t\tsetDevices(devices)\r\n\t\t\t__f__('log','at utils/store.uts:306',`加载设备列表成功,共${devices.length}个设备`)\r\n\t\t\treturn true\r\n\t\t} else {\r\n\t\t\t__f__('log','at utils/store.uts:309','加载设备列表失败:', result.error?.message ?? '未知错误')\r\n\t\t\treturn false\r\n\t\t}\r\n\t} catch (error) {\r\n\t\t__f__('log','at utils/store.uts:313','加载设备列表异常:', error)\r\n\t\treturn false\r\n\t} finally {\r\n\t\tsetDeviceLoading(false)\r\n\t}\r\n}\r\n\r\n/**\r\n * 从服务器加载设备列表 - 带默认参数的重载版本\r\n */\r\nexport const loadDevicesWithDefault = async () : Promise => {\r\n\treturn await loadDevices(false)\r\n}\r\n\r\n/**\r\n * 绑定新设备\r\n */\r\nexport const bindNewDevice = async (deviceData : UTSJSONObject) : Promise => {\r\n\tconst userId = getCurrentUserId()\r\n\tif (userId == null) {\r\n\t\t__f__('log','at utils/store.uts:333','用户未登录,无法绑定设备')\r\n\t\treturn false\r\n\t}\r\n\r\n\t// 确保设备数据中包含用户ID\r\n\tdeviceData.set('user_id', userId)\r\n\ttry {\r\n\t\tconst result = await SenseDataService.bindDevice(deviceData)\r\n\t\tif (result.error === null && result.data != null) {\r\n\t\t\t// 添加到本地状态\r\n\t\t\taddDevice(result.data as DeviceInfo)\r\n\t\t\tconst deviceName = (result.data as DeviceInfo).device_name ?? '未知设备'\r\n\t\t\t__f__('log','at utils/store.uts:345','设备绑定成功:', deviceName)\r\n\t\t\treturn true\r\n\t\t} else {\r\n\t\t\t__f__('log','at utils/store.uts:348','设备绑定失败:', result.error?.message ?? '未知错误')\r\n\t\t\treturn false\r\n\t\t}\r\n\t} catch (error) {\r\n\t\t__f__('log','at utils/store.uts:352','设备绑定异常:', error)\r\n\t\treturn false\r\n\t}\r\n}\r\n\r\n/**\r\n * 解绑设备\r\n */\r\nexport const unbindDevice = async (deviceId : string) : Promise => {\r\n\ttry {\r\n\t\tconst result = await SenseDataService.unbindDevice(deviceId)\r\n\t\tif (result.error === null) {\r\n\t\t\t// 从本地状态中移除\r\n\t\t\tremoveDevice(deviceId)\r\n\t\t\t__f__('log','at utils/store.uts:366','设备解绑成功')\r\n\t\t\treturn true\r\n\t\t} else {\r\n\t\t\t__f__('log','at utils/store.uts:369','设备解绑失败:', result.error?.message ?? '未知错误')\r\n\t\t\treturn false\r\n\t\t}\r\n\t} catch (error) {\r\n\t\t__f__('log','at utils/store.uts:373','设备解绑异常:', error)\r\n\t\treturn false\r\n\t}\r\n}\r\n\r\n/**\r\n * 更新设备配置\r\n */\r\nexport const updateDeviceConfig = async (deviceId : string, configData : UTSJSONObject) : Promise => {\r\n\ttry {\r\n\t\tconst result = await SenseDataService.updateDevice(deviceId, configData)\r\n\t\tif (result.error === null && result.data != null) {\r\n\t\t\t// 更新本地状态\r\n\t\t\tupdateDevice(result.data as DeviceInfo)\r\n\t\t\t__f__('log','at utils/store.uts:387','设备配置更新成功')\r\n\t\t\treturn true\r\n\t\t} else {\r\n\t\t\t__f__('log','at utils/store.uts:390','设备配置更新失败:', result.error?.message ?? '未知错误')\r\n\t\t\treturn false\r\n\t\t}\r\n\t} catch (error) {\r\n\t\t__f__('log','at utils/store.uts:394','设备配置更新异常:', error)\r\n\t\treturn false\r\n\t}\r\n}\r\n\r\n// ========== 设备管理 API ==========\r\n\r\n/**\r\n * 获取设备管理相关的API\r\n */\r\nexport function getDeviceStore() {\r\n\treturn {\r\n\t\t// 获取设备状态\r\n\t\tgetDevices() : Array {\r\n\t\t\treturn state.deviceState.devices\r\n\t\t},\r\n\r\n\t\tgetCurrentDevice() : DeviceInfo | null {\r\n\t\t\treturn state.deviceState.currentDevice\r\n\t\t},\r\n\r\n\t\tisLoading() : boolean {\r\n\t\t\treturn state.deviceState.isLoading\r\n\t\t},\r\n\t\tgetLastUpdated() : number | null {\r\n\t\t\treturn state.deviceState.lastUpdated\r\n\t\t},\r\n\r\n\t\t// 设备操作方法\r\n\t\tasync loadDevices(forceRefresh : boolean) : Promise {\r\n\t\t\treturn await loadDevices(forceRefresh)\r\n\t\t},\r\n\r\n\t\tasync refreshDevices() : Promise {\r\n\t\t\treturn await loadDevicesWithDefault()\r\n\t\t},\r\n\r\n\t\tasync bindDevice(deviceData : UTSJSONObject) : Promise {\r\n\t\t\treturn await bindNewDevice(deviceData)\r\n\t\t},\r\n\r\n\t\tasync unbindDevice(deviceId : string) : Promise {\r\n\t\t\treturn await unbindDevice(deviceId)\r\n\t\t},\r\n\r\n\t\tasync updateDevice(deviceId : string, configData : UTSJSONObject) : Promise {\r\n\t\t\treturn await updateDeviceConfig(deviceId, configData)\r\n\t\t},\r\n\r\n\t\t// 设备查询方法\r\n\t\tgetDeviceById(deviceId : string) : DeviceInfo | null {\r\n\t\t\treturn getDeviceById(deviceId)\r\n\t\t},\r\n\r\n\t\tgetOnlineDevices() : Array {\r\n\t\t\treturn getOnlineDevices()\r\n\t\t},\r\n\r\n\t\t// 设备选择\r\n\t\tsetCurrentDevice(device : DeviceInfo | null) {\r\n\t\t\tsetCurrentDevice(device)\r\n\t\t}\r\n\t}\r\n}","import 'D:/HBuilderX/HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-console/src/runtime/app/index.ts';// 简化的main.uts,移除i18n依赖\r\nimport { createSSRApp } from 'vue'\r\nimport App from './App.uvue'\r\nimport i18n from '@/uni_modules/i18n/index.uts'\r\n\r\nexport function createApp() {\r\n const app = createSSRApp(App)\r\n \r\n // 注册 i18n 全局属性,使组件可以使用 $t 方法\r\n\tapp.config.globalProperties.$t = (key: string, values?: any, locale?: string): string => {\r\n\t\tif (i18n.global == null) {\r\n\t\t\t__f__('error','at main.uts:12','i18n is not initialized')\r\n\t\t\treturn key\r\n\t\t}\r\n const params = values as UTSJSONObject | null\r\n\t\tconst res = i18n.global.t(key, params, locale)\r\n if (res.length > 0) {\r\n return res\r\n }\r\n return key\r\n\t}\r\n \r\n return { app }\r\n}\r\n\nexport function main(app: IApp) {\n definePageRoutes();\n defineAppConfig();\n (createApp()['app'] as VueApp).mount(app, GenUniApp());\n}\n\nexport class UniAppConfig extends io.dcloud.uniapp.appframe.AppConfig {\n override name: string = \"mall\"\n override appid: string = \"__UNI__EC68BC3\"\n override versionName: string = \"1.0.0\"\n override versionCode: string = \"100\"\n override uniCompilerVersion: string = \"4.87\"\n \n constructor() { super() }\n}\n\nimport GenPagesUserLoginClass from './pages/user/login.uvue'\nimport GenPagesUserBootClass from './pages/user/boot.uvue'\nimport GenPagesUserRegisterClass from './pages/user/register.uvue'\nimport GenPagesUserForgotPasswordClass from './pages/user/forgot-password.uvue'\nimport GenPagesUserTermsClass from './pages/user/terms.uvue'\nimport GenPagesUserCenterClass from './pages/user/center.uvue'\nimport GenPagesUserProfileClass from './pages/user/profile.uvue'\nimport GenPagesUserChangePasswordClass from './pages/user/change-password.uvue'\nimport GenPagesUserBindPhoneClass from './pages/user/bind-phone.uvue'\nimport GenPagesUserBindEmailClass from './pages/user/bind-email.uvue'\nimport GenPagesMallConsumerIndexClass from './pages/mall/consumer/index.uvue'\nimport GenPagesMallConsumerCategoryClass from './pages/mall/consumer/category.uvue'\nimport GenPagesMallConsumerMessagesClass from './pages/mall/consumer/messages.uvue'\nimport GenPagesMallConsumerCartClass from './pages/mall/consumer/cart.uvue'\nimport GenPagesMallConsumerProfileClass from './pages/mall/consumer/profile.uvue'\nimport GenPagesMallConsumerSettingsClass from './pages/mall/consumer/settings.uvue'\nimport GenPagesMallConsumerWalletClass from './pages/mall/consumer/wallet.uvue'\nimport GenPagesMallConsumerWithdrawClass from './pages/mall/consumer/withdraw.uvue'\nimport GenPagesMallConsumerSearchClass from './pages/mall/consumer/search.uvue'\nimport GenPagesMallConsumerProductDetailClass from './pages/mall/consumer/product-detail.uvue'\nimport GenPagesMallConsumerShopDetailClass from './pages/mall/consumer/shop-detail.uvue'\nimport GenPagesMallConsumerCouponsClass from './pages/mall/consumer/coupons.uvue'\nimport GenPagesMallConsumerFavoritesClass from './pages/mall/consumer/favorites.uvue'\nimport GenPagesMallConsumerFootprintClass from './pages/mall/consumer/footprint.uvue'\nimport GenPagesMallConsumerAddressListClass from './pages/mall/consumer/address-list.uvue'\nimport GenPagesMallConsumerAddressEditClass from './pages/mall/consumer/address-edit.uvue'\nimport GenPagesMallConsumerCheckoutClass from './pages/mall/consumer/checkout.uvue'\nimport GenPagesMallConsumerPaymentClass from './pages/mall/consumer/payment.uvue'\nimport GenPagesMallConsumerPaymentSuccessClass from './pages/mall/consumer/payment-success.uvue'\nimport GenPagesMallConsumerOrdersClass from './pages/mall/consumer/orders.uvue'\nimport GenPagesMallConsumerOrderDetailClass from './pages/mall/consumer/order-detail.uvue'\nimport GenPagesMallConsumerLogisticsClass from './pages/mall/consumer/logistics.uvue'\nimport GenPagesMallConsumerReviewClass from './pages/mall/consumer/review.uvue'\nimport GenPagesMallConsumerRefundClass from './pages/mall/consumer/refund.uvue'\nimport GenPagesMallConsumerApplyRefundClass from './pages/mall/consumer/apply-refund.uvue'\nimport GenPagesMallConsumerRefundReviewClass from './pages/mall/consumer/refund-review.uvue'\nimport GenPagesMallConsumerChatClass from './pages/mall/consumer/chat.uvue'\nimport GenPagesMallConsumerSubscriptionFollowedShopsClass from './pages/mall/consumer/subscription/followed-shops.uvue'\nimport GenPagesMallConsumerPointsIndexClass from './pages/mall/consumer/points/index.uvue'\nimport GenPagesMallConsumerRedPacketsIndexClass from './pages/mall/consumer/red-packets/index.uvue'\nimport GenPagesMallConsumerBankCardsIndexClass from './pages/mall/consumer/bank-cards/index.uvue'\nimport GenPagesMallConsumerBankCardsAddClass from './pages/mall/consumer/bank-cards/add.uvue'\nfunction definePageRoutes() {\n__uniRoutes.push({ path: \"pages/user/login\", component: GenPagesUserLoginClass, meta: { isQuit: true } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"用户登录\"],[\"navigationStyle\",\"custom\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/user/boot\", component: GenPagesUserBootClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/user/register\", component: GenPagesUserRegisterClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"注册\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/user/forgot-password\", component: GenPagesUserForgotPasswordClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"忘记密码\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/user/terms\", component: GenPagesUserTermsClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"用户协议与隐私政策\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/user/center\", component: GenPagesUserCenterClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"用户中心\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/user/profile\", component: GenPagesUserProfileClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"个人资料\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/user/change-password\", component: GenPagesUserChangePasswordClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"修改密码\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/user/bind-phone\", component: GenPagesUserBindPhoneClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"绑定手机\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/user/bind-email\", component: GenPagesUserBindEmailClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"绑定邮箱\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/index\", component: GenPagesMallConsumerIndexClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"首页\"],[\"navigationStyle\",\"custom\"],[\"enablePullDownRefresh\",false]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/category\", component: GenPagesMallConsumerCategoryClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"分类\"],[\"navigationStyle\",\"custom\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/messages\", component: GenPagesMallConsumerMessagesClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"消息\"],[\"enablePullDownRefresh\",true]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/cart\", component: GenPagesMallConsumerCartClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"购物车\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/profile\", component: GenPagesMallConsumerProfileClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"我的\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/settings\", component: GenPagesMallConsumerSettingsClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"设置\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/wallet\", component: GenPagesMallConsumerWalletClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"我的钱包\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/withdraw\", component: GenPagesMallConsumerWithdrawClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"余额提现\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/search\", component: GenPagesMallConsumerSearchClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"搜索\"],[\"navigationStyle\",\"custom\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/product-detail\", component: GenPagesMallConsumerProductDetailClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"商品详情\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/shop-detail\", component: GenPagesMallConsumerShopDetailClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"店铺详情\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/coupons\", component: GenPagesMallConsumerCouponsClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"我的优惠券\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/favorites\", component: GenPagesMallConsumerFavoritesClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"我的收藏\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/footprint\", component: GenPagesMallConsumerFootprintClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"我的足迹\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/address-list\", component: GenPagesMallConsumerAddressListClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"收货地址\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/address-edit\", component: GenPagesMallConsumerAddressEditClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"编辑地址\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/checkout\", component: GenPagesMallConsumerCheckoutClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"确认订单\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/payment\", component: GenPagesMallConsumerPaymentClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"收银台\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/payment-success\", component: GenPagesMallConsumerPaymentSuccessClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"支付成功\"],[\"navigationStyle\",\"custom\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/orders\", component: GenPagesMallConsumerOrdersClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"我的订单\"],[\"enablePullDownRefresh\",true]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/order-detail\", component: GenPagesMallConsumerOrderDetailClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"订单详情\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/logistics\", component: GenPagesMallConsumerLogisticsClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"物流详情\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/review\", component: GenPagesMallConsumerReviewClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"评价晒单\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/refund\", component: GenPagesMallConsumerRefundClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"退款/售后\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/apply-refund\", component: GenPagesMallConsumerApplyRefundClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"申请售后\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/refund-review\", component: GenPagesMallConsumerRefundReviewClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"服务评价\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/chat\", component: GenPagesMallConsumerChatClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"客服聊天\"],[\"navigationStyle\",\"custom\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/subscription/followed-shops\", component: GenPagesMallConsumerSubscriptionFollowedShopsClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"关注店铺\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/points/index\", component: GenPagesMallConsumerPointsIndexClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"积分管理\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/red-packets/index\", component: GenPagesMallConsumerRedPacketsIndexClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"我的红包\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/bank-cards/index\", component: GenPagesMallConsumerBankCardsIndexClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"银行卡管理\"]]) } as UniPageRoute)\n__uniRoutes.push({ path: \"pages/mall/consumer/bank-cards/add\", component: GenPagesMallConsumerBankCardsAddClass, meta: { isQuit: false } as UniPageMeta, style: _uM([[\"navigationBarTitleText\",\"添加银行卡\"]]) } as UniPageRoute)\n}\nconst __uniTabBar: Map | null = _uM([[\"color\",\"#999999\"],[\"selectedColor\",\"#ff5000\"],[\"backgroundColor\",\"#ffffff\"],[\"borderStyle\",\"black\"],[\"list\",[_uM([[\"pagePath\",\"pages/mall/consumer/index\"],[\"text\",\"首页\"],[\"iconPath\",\"static/tabbar/home.png\"],[\"selectedIconPath\",\"static/tabbar/home-active.png\"]]),_uM([[\"pagePath\",\"pages/mall/consumer/category\"],[\"text\",\"分类\"],[\"iconPath\",\"static/tabbar/category.png\"],[\"selectedIconPath\",\"static/tabbar/category-active.png\"]]),_uM([[\"pagePath\",\"pages/mall/consumer/messages\"],[\"text\",\"消息\"],[\"iconPath\",\"static/tabbar/messages.png\"],[\"selectedIconPath\",\"static/tabbar/messages-active.png\"]]),_uM([[\"pagePath\",\"pages/mall/consumer/cart\"],[\"text\",\"购物车\"],[\"iconPath\",\"static/tabbar/cart.png\"],[\"selectedIconPath\",\"static/tabbar/cart-active.png\"]]),_uM([[\"pagePath\",\"pages/mall/consumer/profile\"],[\"text\",\"我的\"],[\"iconPath\",\"static/tabbar/profile.png\"],[\"selectedIconPath\",\"static/tabbar/profile-active.png\"]])]]])\nconst __uniLaunchPage: Map = _uM([[\"url\",\"pages/user/login\"],[\"style\",_uM([[\"navigationBarTitleText\",\"用户登录\"],[\"navigationStyle\",\"custom\"]])]])\nfunction defineAppConfig(){\n __uniConfig.entryPagePath = '/pages/user/login'\n __uniConfig.globalStyle = _uM([[\"navigationBarTextStyle\",\"black\"],[\"navigationBarTitleText\",\"mall\"],[\"navigationBarBackgroundColor\",\"#FFFFFF\"],[\"backgroundColor\",\"#F8F8F8\"]])\n __uniConfig.getTabBarConfig = ():Map | null => _uM([[\"color\",\"#999999\"],[\"selectedColor\",\"#ff5000\"],[\"backgroundColor\",\"#ffffff\"],[\"borderStyle\",\"black\"],[\"list\",[_uM([[\"pagePath\",\"pages/mall/consumer/index\"],[\"text\",\"首页\"],[\"iconPath\",\"static/tabbar/home.png\"],[\"selectedIconPath\",\"static/tabbar/home-active.png\"]]),_uM([[\"pagePath\",\"pages/mall/consumer/category\"],[\"text\",\"分类\"],[\"iconPath\",\"static/tabbar/category.png\"],[\"selectedIconPath\",\"static/tabbar/category-active.png\"]]),_uM([[\"pagePath\",\"pages/mall/consumer/messages\"],[\"text\",\"消息\"],[\"iconPath\",\"static/tabbar/messages.png\"],[\"selectedIconPath\",\"static/tabbar/messages-active.png\"]]),_uM([[\"pagePath\",\"pages/mall/consumer/cart\"],[\"text\",\"购物车\"],[\"iconPath\",\"static/tabbar/cart.png\"],[\"selectedIconPath\",\"static/tabbar/cart-active.png\"]]),_uM([[\"pagePath\",\"pages/mall/consumer/profile\"],[\"text\",\"我的\"],[\"iconPath\",\"static/tabbar/profile.png\"],[\"selectedIconPath\",\"static/tabbar/profile-active.png\"]])]]])\n __uniConfig.tabBar = __uniConfig.getTabBarConfig()\n __uniConfig.conditionUrl = ''\n __uniConfig.uniIdRouter = new Map()\n \n __uniConfig.ready = true\n}\n","import supa from '@/components/supadb/aksupainstance.uts'\r\nimport type { AkReqResponse } from '@/uni_modules/ak-req/index.uts'\r\n\r\n// 使用单例 Supabase 客户端\r\n// const supa = createClient(SUPA_URL, SUPA_KEY)\r\n\r\n// 类型定义\r\nexport type Brand = {\r\n id: string\r\n name: string\r\n logo_url: string\r\n description: string\r\n}\r\n\r\nexport type Category = {\r\n id: string\r\n name: string\r\n icon: string\r\n description: string\r\n color: string\r\n parent_id?: string\r\n level?: number\r\n slug?: string\r\n created_at?: string\r\n}\r\n\r\nexport type Product = {\r\n id: string\r\n category_id: string\r\n merchant_id: string\r\n name: string\r\n subtitle?: string\r\n description?: string\r\n base_price?: number\r\n market_price?: number\r\n cost_price?: number\r\n main_image_url?: string\r\n image_url?: string\r\n image_urls?: string\r\n video_urls?: string\r\n images?: string[]\r\n sale_count?: number\r\n view_count?: number\r\n total_stock?: number\r\n available_stock?: number\r\n is_hot?: boolean\r\n is_new?: boolean\r\n is_featured?: boolean\r\n status?: number\r\n rating_avg?: number\r\n rating_count?: number\r\n rating?: number\r\n review_count?: number\r\n brand_id?: string\r\n shop_id?: string\r\n tags?: string\r\n attributes?: string\r\n created_at?: string\r\n updated_at?: string\r\n price?: number\r\n original_price?: number\r\n stock?: number\r\n sales?: number\r\n cover?: string\r\n brand_name?: string\r\n category_name?: string\r\n shop_name?: string\r\n merchant_name?: string\r\n}\r\n\r\nexport type Shop = {\r\n id: string\r\n merchant_id: string\r\n shop_name: string\r\n shop_logo?: string\r\n shop_banner?: string\r\n description?: string\r\n contact_name?: string\r\n contact_phone?: string\r\n rating_avg?: number\r\n total_sales?: number\r\n product_count?: number\r\n total_sales_count?: number\r\n created_at?: string\r\n}\r\n\r\nexport type CartItem = {\r\n id: string\r\n user_id: string\r\n product_id: string\r\n sku_id?: string\r\n merchant_id?: string\r\n quantity: number\r\n selected: boolean\r\n product_name?: string\r\n product_image?: string\r\n product_price?: number\r\n product_specification?: string\r\n shop_id?: string\r\n shop_name?: string\r\n created_at?: string\r\n updated_at?: string\r\n}\r\n\r\nexport type UserAddress = {\r\n id: string\r\n user_id: string\r\n recipient_name: string\r\n phone: string\r\n province: string\r\n city: string\r\n district: string\r\n detail_address: string\r\n postal_code?: string\r\n is_default: boolean\r\n label?: string\r\n created_at?: string\r\n updated_at?: string\r\n}\r\n\r\nexport type UserCoupon = {\r\n id: string\r\n user_id: string\r\n template_id: string\r\n coupon_code: string\r\n status: number // 1: unused, 2: used, 3: expired\r\n received_at: string\r\n expire_at: string\r\n used_at?: string\r\n // join fields from template or view\r\n template_name?: string\r\n amount?: number\r\n min_spend?: number\r\n name?: string\r\n title?: string\r\n}\r\n\r\nexport type ChatRoom = {\r\n id: string\r\n user_id: string\r\n merchant_id: string\r\n shop_name: string\r\n shop_logo?: string\r\n last_message?: string\r\n last_message_at?: string\r\n unread_count: number\r\n is_top: boolean\r\n created_at?: string\r\n updated_at?: string\r\n}\r\n\r\nexport type Notification = {\r\n id: string\r\n user_id: string\r\n type: string\r\n title: string\r\n content: string\r\n icon_url?: string\r\n link_url?: string\r\n is_read: boolean\r\n extra_data?: string\r\n created_at?: string\r\n}\r\n\r\nexport type ChatMessage = {\r\n id: string\r\n session_id?: string\r\n sender_id?: string\r\n receiver_id?: string\r\n content: string\r\n msg_type: string\r\n is_read: boolean\r\n is_from_user: boolean\r\n extra_data?: string\r\n created_at?: string\r\n}\r\n\r\nexport type PaginatedResponse = {\r\n data: T[]\r\n total: number\r\n page: number\r\n limit: number\r\n hasmore: boolean\r\n}\r\n\r\nexport type ProductSku = {\r\n id: string\r\n product_id: string\r\n sku_code: string\r\n specifications: string // JSON string\r\n price: number\r\n market_price?: number\r\n cost_price?: number\r\n stock?: number\r\n warning_stock?: number\r\n image_url?: string\r\n weight?: number\r\n status?: number\r\n created_at?: string\r\n}\r\n\r\nexport type AddAddressParams = {\r\n recipient_name: string\r\n phone: string\r\n province: string\r\n city: string\r\n district: string\r\n detail_address: string\r\n postal_code?: string\r\n is_default?: boolean\r\n label?: string\r\n}\r\n\r\nexport type UpdateAddressParams = {\r\n recipient_name?: string\r\n phone?: string\r\n province?: string\r\n city?: string\r\n district?: string\r\n detail_address?: string\r\n postal_code?: string\r\n is_default?: boolean\r\n label?: string\r\n}\r\n\r\nexport type CreateOrderParams = {\r\n merchant_id: string\r\n product_amount: number\r\n shipping_fee: number\r\n total_amount: number\r\n shipping_address: any\r\n items: any[]\r\n}\r\n\r\nexport type ShopOrderParams = {\r\n shipping_address: any\r\n shopGroups: any[]\r\n deliveryFee: number\r\n discountAmount: number\r\n}\r\n\r\nexport type ShopOrderResponse = {\r\n success: boolean\r\n orderIds: string[]\r\n error?: string\r\n}\r\n\r\nexport type RefundResponse = {\r\n success: boolean\r\n message: string\r\n}\r\n\r\nexport type ConfirmReceiptResponse = {\r\n success: boolean\r\n error?: string\r\n}\r\n\r\nclass SupabaseService {\r\n // 获取当前用户ID\r\n public getCurrentUserId(): string | null {\r\n try {\r\n // 1. 优先从 Supabase 会话获取\r\n const session = supa.getSession()\r\n if (session != null && session.user != null) {\r\n return session.user.getString('id')\r\n }\r\n \r\n // 2. 尝试从 Storage 恢复 Session (针对 App 重启后内存丢失的情况)\r\n // 注意:这里无法异步调用 hydrate,所以只能依赖 UI 层或 init 层的预加载\r\n // 但我们可以返回本地存储 ID 作为 fallback,前提是 Token 有效\r\n \r\n // 后备:尝试从本地存储获取\r\n const userId = uni.getStorageSync('user_id')\r\n return userId != null ? userId as string : null\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:276','获取用户ID失败:', e)\r\n return null\r\n }\r\n }\r\n\r\n // 确保会话有效 (异步)\r\n async ensureSession(): Promise {\r\n let session = supa.getSession()\r\n if (session.user == null) {\r\n __f__('log','at utils/supabaseService.uts:285','Session user is null, attempting to hydrate from storage...')\r\n await supa.hydrateSessionFromStorage()\r\n session = supa.getSession()\r\n }\r\n \r\n if (session.user != null) {\r\n // 同步 user_id 到 storage 保持一致\r\n const uid = session.user!!.getString('id')\r\n if (uid != null) {\r\n uni.setStorageSync('user_id', uid)\r\n return uid\r\n }\r\n }\r\n return this.getCurrentUserId()\r\n }\r\n\r\n // 获取所有分类\r\n async getCategories(): Promise {\r\n try {\r\n const response = await supa\r\n .from('ml_categories')\r\n .select('*')\r\n .order('name', { ascending: true })\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:311','获取分类失败:', response.error)\r\n return []\r\n }\r\n \r\n const rawData = response.data\r\n if (rawData == null) {\r\n return []\r\n }\r\n \r\n const categories: Category[] = []\r\n const rawList = rawData as any[]\r\n for (let i: number = 0; i < rawList.length; i++) {\r\n const item = rawList[i]\r\n const catObj = item as UTSJSONObject\r\n const idVal = catObj.get('id')\r\n const nameVal = catObj.get('name')\r\n const iconVal = catObj.get('icon')\r\n const iconUrlVal = catObj.get('icon_url')\r\n const descVal = catObj.get('description')\r\n const colorVal = catObj.get('color')\r\n const parentIdVal = catObj.get('parent_id')\r\n const levelVal = catObj.get('level')\r\n \r\n const cat: Category = {\r\n id: (typeof idVal == 'string') ? (idVal as string) : '',\r\n name: (typeof nameVal == 'string') ? (nameVal as string) : '',\r\n icon: (typeof iconVal == 'string') ? (iconVal as string) : ((typeof iconUrlVal == 'string') ? (iconUrlVal as string) : ''),\r\n description: (typeof descVal == 'string') ? (descVal as string) : '',\r\n color: (typeof colorVal == 'string') ? (colorVal as string) : '#4CAF50',\r\n parent_id: (typeof parentIdVal == 'string') ? (parentIdVal as string) : null,\r\n level: (typeof levelVal == 'number') ? (levelVal as number) : 0\r\n } as Category\r\n categories.push(cat)\r\n }\r\n return categories\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:347','获取分类异常:', error)\r\n return []\r\n }\r\n }\r\n\r\n // 获取一级分类\r\n async getParentCategories(): Promise {\r\n try {\r\n const response = await supa\r\n .from('ml_categories')\r\n .select('*')\r\n .is('parent_id', null)\r\n .order('sort_order', { ascending: true })\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:363','获取一级分类失败:', response.error)\r\n return []\r\n }\r\n \r\n const rawData = response.data\r\n if (rawData == null) {\r\n return []\r\n }\r\n\r\n const categories: Category[] = []\r\n const rawList = rawData as Array\r\n for (let i = 0; i < rawList.length; i++) {\r\n const item = rawList[i]\r\n const icon = this.getCategoryIcon(item)\r\n const cat: Category = {\r\n id: item['id'] as string,\r\n name: item['name'] as string,\r\n icon: icon,\r\n description: (item['description'] as string) ?? '',\r\n color: (item['color'] as string) ?? '#4CAF50',\r\n level: 1,\r\n slug: item['slug'] as string\r\n }\r\n categories.push(cat)\r\n }\r\n return categories\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:390','获取一级分类异常:', error)\r\n return []\r\n }\r\n }\r\n\r\n // 获取子分类\r\n async getSubCategories(parentId: string): Promise {\r\n try {\r\n const response = await supa\r\n .from('ml_categories')\r\n .select('*')\r\n .eq('parent_id', parentId)\r\n .order('sort_order', { ascending: true })\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:406','获取子分类失败:', response.error)\r\n return []\r\n }\r\n \r\n const rawData = response.data\r\n if (rawData == null) {\r\n return []\r\n }\r\n\r\n const categories: Category[] = []\r\n const rawList = rawData as Array\r\n for (let i = 0; i < rawList.length; i++) {\r\n const item = rawList[i]\r\n const icon = this.getCategoryIcon(item)\r\n const cat: Category = {\r\n id: item['id'] as string,\r\n name: item['name'] as string,\r\n icon: icon,\r\n description: (item['description'] as string) ?? '',\r\n color: (item['color'] as string) ?? '#4CAF50',\r\n level: 2,\r\n parent_id: item['parent_id'] as string,\r\n slug: item['slug'] as string\r\n }\r\n categories.push(cat)\r\n }\r\n return categories\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:434','获取子分类异常:', error)\r\n return []\r\n }\r\n }\r\n\r\n // 获取分类图标的辅助方法\r\n getCategoryIcon(item: UTSJSONObject): string {\r\n const icon = item['icon'] as string | null\r\n if (icon != null && icon.length > 0) {\r\n return icon\r\n }\r\n const iconUrl = item['icon_url'] as string | null\r\n if (iconUrl != null && iconUrl.length > 0) {\r\n return iconUrl\r\n }\r\n // 根据分类名称返回默认图标\r\n const name = (item['name'] as string) ?? ''\r\n if (name.includes('数码') || name.includes('电器') || name.includes('手机')) return '📱'\r\n if (name.includes('服装') || name.includes('衣服') || name.includes('鞋')) return '👕'\r\n if (name.includes('食品') || name.includes('水果') || name.includes('零食')) return '🍎'\r\n if (name.includes('美妆') || name.includes('护肤') || name.includes('化妆')) return '💄'\r\n if (name.includes('母婴') || name.includes('婴儿') || name.includes('儿童')) return '👶'\r\n if (name.includes('家居') || name.includes('家具') || name.includes('装饰')) return '🏠'\r\n if (name.includes('图书') || name.includes('文具')) return '📚'\r\n if (name.includes('运动') || name.includes('户外') || name.includes('健身')) return '⚽'\r\n if (name.includes('医药') || name.includes('保健') || name.includes('健康')) return '💊'\r\n return '📦'\r\n }\r\n\r\n // 获取所有品牌\r\n async getBrands(): Promise {\r\n try {\r\n const response = await supa\r\n .from('ml_brands')\r\n .select('*')\r\n .eq('is_active', true)\r\n .order('name', { ascending: true })\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:474','获取品牌失败:', response.error)\r\n return []\r\n }\r\n \r\n const rawData = response.data\r\n if (rawData == null) {\r\n return []\r\n }\r\n \r\n const brands: Brand[] = []\r\n const rawList = rawData as any[]\r\n for (let i: number = 0; i < rawList.length; i++) {\r\n const item = rawList[i]\r\n const brandObj = item as UTSJSONObject\r\n const idVal = brandObj.get('id')\r\n const nameVal = brandObj.get('name')\r\n const logoVal = brandObj.get('logo_url')\r\n const descVal = brandObj.get('description')\r\n \r\n const brand: Brand = {\r\n id: (typeof idVal == 'string') ? (idVal as string) : '',\r\n name: (typeof nameVal == 'string') ? (nameVal as string) : '',\r\n logo_url: (typeof logoVal == 'string') ? (logoVal as string) : '',\r\n description: (typeof descVal == 'string') ? (descVal as string) : ''\r\n } as Brand\r\n brands.push(brand)\r\n }\r\n return brands\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:503','获取品牌异常:', error)\r\n return []\r\n }\r\n }\r\n\r\n // 获取指定分类的商品\r\n async getProductsByCategory(\r\n categoryId: string, \r\n page: number = 1, \r\n limit: number = 20\r\n ): Promise> {\r\n try {\r\n const response = await supa\r\n .from('ml_products_detail_view')\r\n .select('*', { count: 'exact' })\r\n .eq('category_id', categoryId)\r\n .eq('status', 1) \r\n .order('sale_count', { ascending: false })\r\n .page(page)\r\n .limit(limit)\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:526','获取商品失败:', response.error)\r\n return {\r\n data: [] as Product[],\r\n total: 0,\r\n page,\r\n limit,\r\n hasmore: false\r\n }\r\n }\r\n \r\n return {\r\n data: response.data as Product[],\r\n total: response.total ?? 0,\r\n page,\r\n limit,\r\n hasmore: response.hasmore ?? false\r\n }\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:544','获取商品异常:', error)\r\n return {\r\n data: [] as Product[],\r\n total: 0,\r\n page,\r\n limit,\r\n hasmore: false\r\n }\r\n }\r\n }\r\n\r\n // 根据商品ID获取SKU列表\r\n async getProductSkus(productId: string): Promise {\r\n try {\r\n const response = await supa\r\n .from('ml_product_skus')\r\n .select('*')\r\n .eq('product_id', productId)\r\n .eq('status', 1)\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:566','获取商品SKU失败:', response.error)\r\n return []\r\n }\r\n \r\n return response.data as ProductSku[]\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:572','获取商品SKU异常:', error)\r\n return []\r\n }\r\n }\r\n\r\n // 搜索商品\r\n async searchProducts(\r\n keyword: string, \r\n page: number = 1, \r\n limit: number = 20,\r\n sortBy: string = 'sales',\r\n ascending: boolean = false\r\n ): Promise> {\r\n try {\r\n let query = supa\r\n .from('ml_products_detail_view')\r\n .select('*', { count: 'exact' })\r\n .eq('status', 1)\r\n .or(`name.ilike.%${keyword}%,description.ilike.%${keyword}%,subtitle.ilike.%${keyword}%,brand_name.ilike.%${keyword}%`)\r\n \r\n // 根据sortBy和ascending设置排序\r\n if (sortBy === 'price') {\r\n query = query.order('base_price', { ascending })\r\n } else if (sortBy === 'sales' || sortBy === 'sale_count') {\r\n query = query.order('sale_count', { ascending: false }) // 销量总是降序\r\n } else {\r\n // 默认按销量降序\r\n query = query.order('sale_count', { ascending: false })\r\n }\r\n \r\n const response = await query\r\n .page(page)\r\n .limit(limit)\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:608','搜索商品失败:', response.error)\r\n return {\r\n data: [] as Product[],\r\n total: 0,\r\n page,\r\n limit,\r\n hasmore: false\r\n }\r\n }\r\n \r\n return {\r\n data: response.data as Product[],\r\n total: response.total ?? 0,\r\n page,\r\n limit,\r\n hasmore: response.hasmore ?? false\r\n }\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:626','搜索商品异常:', error)\r\n return {\r\n data: [] as Product[],\r\n total: 0,\r\n page,\r\n limit,\r\n hasmore: false\r\n }\r\n }\r\n }\r\n\r\n // 搜索店铺\r\n async searchShops(\r\n keyword: string,\r\n page: number = 1,\r\n limit: number = 20\r\n ): Promise> {\r\n try {\r\n const response = await supa\r\n .from('ml_shops')\r\n .select('*', { count: 'exact' })\r\n .eq('status', 1)\r\n .ilike('shop_name', `%${keyword}%`)\r\n .order('product_count', { ascending: false })\r\n .page(page)\r\n .limit(limit)\r\n .execute()\r\n\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:655','搜索店铺失败:', response.error)\r\n return { data: [] as Shop[], total: 0, page, limit, hasmore: false }\r\n }\r\n\r\n // 映射数据确保类型安全\r\n const shops: Shop[] = []\r\n const dataList = response.data as any[]\r\n for (let i = 0; i < dataList.length; i++) {\r\n shops.push(dataList[i] as Shop)\r\n }\r\n\r\n return {\r\n data: shops,\r\n total: response.total ?? 0,\r\n page,\r\n limit,\r\n hasmore: response.hasmore ?? false\r\n }\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:674','搜索店铺异常:', error)\r\n return { data: [] as Shop[], total: 0, page, limit, hasmore: false }\r\n }\r\n }\r\n\r\n // 获取单个商品详情\r\n async getProductById(productId: string): Promise {\r\n try {\r\n const response = await supa\r\n .from('ml_products_detail_view')\r\n .select('*')\r\n .eq('id', productId)\r\n .single()\r\n .executeAs()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:690','获取商品详情失败:', response.error)\r\n return null\r\n }\r\n \r\n return response.data as Product\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:696','获取商品详情异常:', error)\r\n return null\r\n }\r\n }\r\n\r\n // --- 关注店铺相关 ---\r\n\r\n // 检查是否已关注店铺\r\n async isShopFollowed(shopId: string, userId: string): Promise {\r\n try {\r\n const res = await supa\r\n .from('ml_shop_follows')\r\n .select('id', { count: 'exact' })\r\n .eq('shop_id', shopId)\r\n .eq('user_id', userId)\r\n .limit(1)\r\n .execute()\r\n \r\n return (res.total != null && res.total! > 0)\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:716','Check follow error:', e)\r\n return false\r\n }\r\n }\r\n\r\n // 关注店铺\r\n async followShop(shopId: string, userId: string): Promise {\r\n try {\r\n const res = await supa\r\n .from('ml_shop_follows')\r\n .insert({\r\n user_id: userId,\r\n shop_id: shopId\r\n })\r\n .execute()\r\n \r\n return res.error == null\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:734','Follow shop error:', e)\r\n return false\r\n }\r\n }\r\n\r\n // 取消关注\r\n async unfollowShop(shopId: string, userId: string): Promise {\r\n try {\r\n const res = await supa\r\n .from('ml_shop_follows')\r\n .eq('shop_id', shopId)\r\n .eq('user_id', userId)\r\n .delete()\r\n .execute()\r\n \r\n return res.error == null\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:751','Unfollow shop error:', e)\r\n return false\r\n }\r\n }\r\n\r\n // 获取我关注的店铺列表\r\n async getFollowedShops(userId: string): Promise {\r\n try {\r\n // 关联查询店铺信息\r\n const res = await supa\r\n .from('ml_shop_follows')\r\n .select('*, ml_shops(*)') \r\n .eq('user_id', userId)\r\n .order('created_at', { ascending: false })\r\n .execute()\r\n \r\n if (res.error != null) {\r\n __f__('error','at utils/supabaseService.uts:768','getFollowedShops error:', res.error)\r\n return []\r\n }\r\n \r\n return res.data as any[]\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:774','getFollowedShops exception:', e)\r\n return []\r\n }\r\n }\r\n\r\n // 根据商户ID获取店铺信息\r\n async getShopByMerchantId(merchantId: string): Promise {\r\n try {\r\n // 1. Try querying by merchant_id\r\n let response = await supa\r\n .from('ml_shops')\r\n .select('*')\r\n .eq('merchant_id', merchantId)\r\n .limit(1)\r\n .execute()\r\n \r\n if (response.error == null && response.data != null && (response.data as any[]).length > 0) {\r\n return (response.data as any[])[0] as Shop\r\n }\r\n\r\n // 2. Fallback: Try querying by id (Maybe the passed ID is the Shop ID?)\r\n __f__('log','at utils/supabaseService.uts:795','getShopByMerchantId: merchant_id not found, trying id...', merchantId)\r\n response = await supa\r\n .from('ml_shops')\r\n .select('*')\r\n .eq('id', merchantId)\r\n .limit(1)\r\n .execute()\r\n\r\n if (response.error == null && response.data != null && (response.data as any[]).length > 0) {\r\n __f__('log','at utils/supabaseService.uts:804','Found shop by ID instead of MerchantID')\r\n // Fix the merchant_id reference if we found it by ID\r\n const shop = (response.data as any[])[0] as Shop\r\n return shop\r\n }\r\n\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:811','获取店铺信息失败:', response.error)\r\n }\r\n return null\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:815','获取店铺信息异常:', error)\r\n return null\r\n }\r\n }\r\n\r\n // 根据商户ID获取商品列表\r\n async getProductsByMerchantId(merchantId: string, page: number = 1, limit: number = 20): Promise> {\r\n try {\r\n __f__('log','at utils/supabaseService.uts:823','getProductsByMerchantId querying for:', merchantId)\r\n \r\n // 1. Try fetching from view strictly first\r\n let query = supa\r\n .from('ml_products_detail_view')\r\n .select('*', { count: 'exact' })\r\n .eq('merchant_id', merchantId)\r\n // .eq('status', 1) // Temporarily disabled status check to see if products exist at all\r\n .order('created_at', { ascending: false })\r\n .page(page)\r\n .limit(limit)\r\n \r\n const response = await query.execute()\r\n \r\n // 检查视图结果:如果有错误 OR 数据为空,都尝试去查原始表\r\n if (response.error != null || (response.data != null && (response.data as any[]).length === 0)) {\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:840','获取商户商品失败 (View):', response.error)\r\n } else {\r\n __f__('log','at utils/supabaseService.uts:842','View returned 0 products, trying raw table fallback...')\r\n }\r\n \r\n // Fallback: Try raw table\r\n __f__('log','at utils/supabaseService.uts:846','Falling back to raw ml_products table...')\r\n const query2 = supa\r\n .from('ml_products')\r\n .select('*', { count: 'exact' })\r\n .eq('merchant_id', merchantId)\r\n // .eq('status', 1) // Also disabled here\r\n .order('created_at', { ascending: false })\r\n .page(page)\r\n .limit(limit)\r\n \r\n const res2 = await query2.execute()\r\n if (res2.error != null) {\r\n __f__('error','at utils/supabaseService.uts:858','获取商户商品失败 (Raw):', res2.error)\r\n return {data:[] as Product[], total:0, page, limit, hasmore:false}\r\n }\r\n \r\n __f__('log','at utils/supabaseService.uts:862',`Fallback (Raw) found: ${(res2.data as any[]).length} products`)\r\n \r\n // Map raw data to Product interface (manually if needed for extra safety)\r\n const mappedData: Product[] = []\r\n const rawData = res2.data as any[]\r\n for(let i = 0; i < rawData.length; i++) {\r\n mappedData.push(rawData[i] as Product)\r\n }\r\n\r\n return {\r\n data: mappedData,\r\n total: res2.total ?? 0,\r\n page,\r\n limit,\r\n hasmore: res2.hasmore ?? false\r\n }\r\n }\r\n \r\n __f__('log','at utils/supabaseService.uts:880',`Merchant products found: ${(response.data as any[]).length}`)\r\n return {\r\n data: response.data as Product[],\r\n total: response.total ?? 0,\r\n page,\r\n limit,\r\n hasmore: response.hasmore ?? false\r\n }\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:889','获取商户商品异常:', error)\r\n return {\r\n data: [] as Product[],\r\n total: 0,\r\n page,\r\n limit,\r\n hasmore: false\r\n }\r\n }\r\n }\r\n\r\n // 获取热销商品(按销量排序)\r\n async getHotProducts(limit: number = 10): Promise {\r\n try {\r\n const response = await supa\r\n .from('ml_products_detail_view')\r\n .select('*')\r\n .eq('is_hot', true)\r\n .eq('status', 1)\r\n .order('sale_count', { ascending: false })\r\n .limit(limit)\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:913','获取热销商品失败:', response.error)\r\n return []\r\n }\r\n \r\n return response.data as Product[]\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:919','获取热销商品异常:', error)\r\n return []\r\n }\r\n }\r\n\r\n // 获取按价格排序的商品(升序:从低到高)\r\n async getProductsByPrice(limit: number = 10, ascending: boolean = true): Promise {\r\n try {\r\n const response = await supa\r\n .from('ml_products_detail_view')\r\n .select('*')\r\n .eq('status', 1)\r\n .order('base_price', { ascending })\r\n .limit(limit)\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:936','获取价格排序商品失败:', response.error)\r\n return []\r\n }\r\n \r\n return response.data as Product[]\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:942','获取价格排序商品异常:', error)\r\n return []\r\n }\r\n }\r\n\r\n // 获取新品(按创建时间排序,最新的在前)\r\n async getProductsByNewest(limit: number = 10): Promise {\r\n try {\r\n const response = await supa\r\n .from('ml_products_detail_view')\r\n .select('*')\r\n .eq('is_new', true) \r\n .eq('status', 1)\r\n .order('published_at', { ascending: false }) // Use published_at for newest\r\n .limit(limit)\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:960','获取新品失败:', response.error)\r\n return []\r\n }\r\n \r\n return response.data as Product[]\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:966','获取新品异常:', error)\r\n return []\r\n }\r\n }\r\n\r\n // 获取推荐商品(is_featured=true)\r\n async getRecommendedProducts(limit: number = 10): Promise {\r\n try {\r\n // 查询 is_featured = true 的商品\r\n const response = await supa\r\n .from('ml_products_detail_view')\r\n .select('*')\r\n .eq('is_featured', true)\r\n .eq('status', 1)\r\n .order('sale_count', { ascending: false })\r\n .limit(limit)\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:985','获取推荐商品失败:', response.error)\r\n return []\r\n }\r\n \r\n const rawData = response.data\r\n if (rawData == null) {\r\n return []\r\n }\r\n \r\n const products: Product[] = []\r\n const rawList = rawData as any[]\r\n for (let i: number = 0; i < rawList.length; i++) {\r\n const item = rawList[i]\r\n const prodObj = item as UTSJSONObject\r\n const imagesRaw = prodObj.getArray('images')\r\n const product: Product = {\r\n id: prodObj.getString('id') ?? '',\r\n name: prodObj.getString('name') ?? '',\r\n description: prodObj.getString('description') ?? '',\r\n price: prodObj.getNumber('price') ?? 0,\r\n original_price: prodObj.getNumber('original_price') ?? 0,\r\n image_url: prodObj.getString('image_url') ?? '',\r\n images: imagesRaw != null ? (imagesRaw as string[]) : [] as string[],\r\n category_id: prodObj.getString('category_id') ?? '',\r\n brand_id: prodObj.getString('brand_id') ?? '',\r\n shop_id: prodObj.getString('shop_id') ?? '',\r\n stock: prodObj.getNumber('stock') ?? 0,\r\n sale_count: prodObj.getNumber('sale_count') ?? 0,\r\n status: prodObj.getNumber('status') ?? 1,\r\n is_featured: prodObj.getBoolean('is_featured') ?? false,\r\n is_new: prodObj.getBoolean('is_new') ?? false,\r\n rating: prodObj.getNumber('rating') ?? 0,\r\n review_count: prodObj.getNumber('review_count') ?? 0,\r\n merchant_id: ''\r\n } as Product\r\n products.push(product)\r\n }\r\n return products\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:1024','获取推荐商品异常:', error)\r\n return []\r\n }\r\n }\r\n\r\n // 获取特价商品(这里假设没有specific flag, just use logic or tag if exists, defaulting to hot for now or just skip)\r\n // Modify to use compatible logic if badge column doesn't exist\r\n async getDiscountProducts(limit: number = 10): Promise {\r\n return [] as Product[] // 暂无特价字段\r\n }\r\n\r\n // 获取当前用户的购物车商品(关联商品和店铺信息)\r\n async getCartItems(): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('warn','at utils/supabaseService.uts:1040','用户未登录,无法获取购物车')\r\n return []\r\n }\r\n\r\n // 查询购物车表,并关联商品表(使用内联关联)\r\n // 注意:使用 !inner 进行内连接,或者 left join (默认)\r\n // 修改查询语法以符合 PostgREST 规范\r\n // 尝试简化查询,先只查购物车,再查商品,避免复杂的嵌套查询导致 400 错误\r\n const response = await supa\r\n .from('ml_shopping_cart')\r\n .select('*')\r\n .eq('user_id', userId)\r\n .order('created_at', { ascending: false })\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:1056','获取购物车失败:', response.error)\r\n return []\r\n }\r\n \r\n const cartData = response.data as any[]\r\n // __f__('log','at utils/supabaseService.uts:1061','Raw Cart Data:', JSON.stringify(cartData))\r\n \r\n if (cartData == null || cartData.length === 0) {\r\n return []\r\n }\r\n\r\n // 收集所有 product_id 和 sku_id\r\n const productIds: string[] = []\r\n const skuIds: string[] = []\r\n for (let i = 0; i < cartData.length; i++) {\r\n let item = cartData[i]\r\n let pid: string = ''\r\n let sid: string = ''\r\n if (item instanceof UTSJSONObject) {\r\n pid = item.getString('product_id') ?? ''\r\n sid = item.getString('sku_id') ?? ''\r\n } else {\r\n const itemObj = JSON.parse(JSON.stringify(item)) as UTSJSONObject\r\n pid = itemObj.getString('product_id') ?? ''\r\n sid = itemObj.getString('sku_id') ?? ''\r\n }\r\n if (pid !== '' && !productIds.includes(pid)) {\r\n productIds.push(pid)\r\n }\r\n if (sid !== '' && !skuIds.includes(sid)) {\r\n skuIds.push(sid)\r\n }\r\n }\r\n\r\n // 批量查询商品详情 (使用视图关联店铺信息,修复字段名 specification -> attributes)\r\n const productMap = new Map()\r\n \r\n if (productIds.length > 0) {\r\n // Convert string array to any array for .in()\r\n const productIdsAny: any[] = []\r\n for(let i=0; i()\r\n if (skuIds.length > 0) {\r\n const skuIdsAny: any[] = []\r\n for(let i=0; i 0) {\r\n productPrice = skuPrice\r\n }\r\n const skuImg = sku.getString('image_url')\r\n if (skuImg != null && skuImg !== '') {\r\n productImage = skuImg\r\n }\r\n \r\n const specRaw = sku.get('specifications')\r\n if (specRaw != null) {\r\n // 优先使用SKU的规格\r\n if (typeof specRaw === 'string') {\r\n productSpec = specRaw\r\n } else if (specRaw instanceof UTSJSONObject) {\r\n const keys = UTSJSONObject.keys(specRaw)\r\n const parts: string[] = []\r\n for(let k = 0; k < keys.length; k++) {\r\n let val = specRaw.get(keys[k])\r\n if (val != null) {\r\n parts.push(`${keys[k]}: ${val}`)\r\n }\r\n }\r\n productSpec = parts.join('; ')\r\n } else {\r\n try {\r\n let jsonStr = JSON.stringify(specRaw)\r\n productSpec = jsonStr.replace(/[\"{}]/g, '').replace(/,/g, '; ')\r\n } catch (e) {}\r\n }\r\n }\r\n } else {\r\n const sObj = JSON.parse(JSON.stringify(sku)) as UTSJSONObject\r\n const skuPrice = sObj.getNumber('price') ?? 0\r\n if (skuPrice > 0) productPrice = skuPrice\r\n\r\n const skuImg = sObj.getString('image_url') ?? ''\r\n if (skuImg !== '') productImage = skuImg\r\n\r\n const specRaw = sObj.get('specifications')\r\n if (specRaw != null) {\r\n // 优先使用SKU的规格\r\n if (typeof specRaw === 'string') {\r\n productSpec = specRaw\r\n } else if (specRaw instanceof UTSJSONObject) {\r\n const keys = UTSJSONObject.keys(specRaw)\r\n const parts: string[] = []\r\n for(let k = 0; k < keys.length; k++) {\r\n let val = specRaw.get(keys[k])\r\n if (val != null) {\r\n parts.push(`${keys[k]}: ${val}`)\r\n }\r\n }\r\n productSpec = parts.join('; ')\r\n } else {\r\n try {\r\n let jsonStr = JSON.stringify(specRaw)\r\n productSpec = jsonStr.replace(/[\"{}]/g, '').replace(/,/g, '; ')\r\n } catch (e) {}\r\n }\r\n }\r\n }\r\n }\r\n\r\n \r\n \r\n let shopIdStr = merchantId != '' ? merchantId : 'unknown_shop'\r\n\r\n \r\n cartItems.push({\r\n id: itemId,\r\n user_id: userIdVal,\r\n product_id: productId,\r\n sku_id: skuId,\r\n merchant_id: merchantId,\r\n quantity: quantity,\r\n selected: selected,\r\n product_name: productName,\r\n product_image: productImage,\r\n product_price: productPrice,\r\n product_specification: productSpec,\r\n shop_id: shopIdStr,\r\n shop_name: shopNameStr,\r\n created_at: createdAt,\r\n updated_at: updatedAt\r\n } as CartItem)\r\n }\r\n }\r\n \r\n return cartItems\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:1371','获取购物车异常:', error)\r\n return []\r\n }\r\n }\r\n\r\n // 获取用户通知 (系统、活动、订单)\r\n async getUserNotifications(type: string | null = null): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) return []\r\n\r\n let query = supa\r\n .from('ml_notifications')\r\n .select('*')\r\n .eq('user_id', userId)\r\n \r\n if (type != null) {\r\n query = query.eq('type', type)\r\n }\r\n \r\n const response = await query.order('created_at', { ascending: false }).execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:1394','获取通知失败:', response.error)\r\n return []\r\n }\r\n return response.data as Notification[]\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:1399','获取通知异常:', e)\r\n return []\r\n }\r\n }\r\n\r\n // 获取聊天会话列表\r\n async getChatRooms(): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) return []\r\n\r\n const response = await supa\r\n .from('ml_chat_rooms')\r\n .select('*')\r\n .eq('user_id', userId)\r\n .order('updated_at', { ascending: false })\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:1418','获取聊天会话失败:', response.error)\r\n return []\r\n }\r\n return response.data as ChatRoom[]\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:1423','获取聊天会话异常:', e)\r\n return []\r\n }\r\n }\r\n\r\n // 获取用户聊天消息\r\n async getUserChatMessages(): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) return []\r\n\r\n const response = await supa\r\n .from('ml_chat_messages')\r\n .select('*')\r\n .or(`sender_id.eq.${userId},receiver_id.eq.${userId}`)\r\n .order('created_at', { ascending: false })\r\n .limit(50)\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:1443','获取聊天记录失败:', response.error)\r\n return []\r\n }\r\n return response.data as ChatMessage[]\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:1448','获取聊天记录异常:', e)\r\n return []\r\n }\r\n }\r\n\r\n // 获取与特定商家的聊天记录\r\n async getChatMessages(merchantId: string): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) return []\r\n\r\n const response = await supa\r\n .from('ml_chat_messages')\r\n .select('*')\r\n .or(`and(sender_id.eq.${userId},receiver_id.eq.${merchantId}),and(sender_id.eq.${merchantId},receiver_id.eq.${userId})`)\r\n .order('created_at', { ascending: false })\r\n .limit(50)\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:1468','获取聊天记录失败:', response.error)\r\n return []\r\n }\r\n return response.data as ChatMessage[]\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:1473','获取聊天记录异常:', e)\r\n return []\r\n }\r\n }\r\n\r\n // 发送聊天消息\r\n async sendChatMessage(content: string, toId: string | null = null, type: string = 'text'): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) return false\r\n \r\n const payload = {\r\n sender_id: userId,\r\n content: content,\r\n msg_type: type,\r\n is_from_user: true,\r\n created_at: new Date().toISOString()\r\n } as UTSJSONObject\r\n if (toId != null) {\r\n payload.set('receiver_id', toId)\r\n }\r\n\r\n const response = await supa\r\n .from('ml_chat_messages')\r\n .insert(payload)\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:1501','发送消息失败:', response.error)\r\n return false\r\n }\r\n return true\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:1506','发送消息异常:', e)\r\n return false\r\n }\r\n }\r\n\r\n // 模拟客服回复\r\n async simulateServiceReply(content: string): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) return false\r\n\r\n const response = await supa\r\n .from('ml_chat_messages')\r\n .insert({\r\n receiver_id: userId,\r\n content: content,\r\n msg_type: 'text',\r\n is_from_user: false,\r\n created_at: new Date().toISOString()\r\n })\r\n .execute()\r\n return response.error == null\r\n } catch (e) {\r\n return false\r\n }\r\n }\r\n\r\n // 添加商品到购物车\r\n async addToCart(productId: string, quantity: number = 1, skuId?: string): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('error','at utils/supabaseService.uts:1538','用户未登录,无法添加商品到购物车')\r\n return false\r\n }\r\n \r\n const realSkuId = (skuId != null && skuId.length > 0) ? skuId : null\r\n\r\n // 检查商品是否已在购物车中\r\n // 注意:必须处理 sku_id 为空的情况,使用 is.null 过滤器\r\n let query = supa\r\n .from('ml_shopping_cart')\r\n .select('*')\r\n .eq('user_id', userId)\r\n .eq('product_id', productId)\r\n \r\n if (realSkuId != null) {\r\n query = query.eq('sku_id', realSkuId)\r\n } else {\r\n query = query.is('sku_id', null)\r\n }\r\n\r\n const existingResponse = await query.single().execute()\r\n\r\n let existingItem: any | null = null\r\n \r\n if (existingResponse.data != null) {\r\n const rawData = existingResponse.data as any\r\n if (Array.isArray(rawData)) {\r\n if (rawData.length > 0) {\r\n existingItem = rawData[0]\r\n }\r\n } else {\r\n existingItem = rawData\r\n }\r\n }\r\n\r\n let response: AkReqResponse\r\n if (existingItem != null) {\r\n // 商品已存在,更新数量\r\n __f__('log','at utils/supabaseService.uts:1576','Found existing cart item:', JSON.stringify(existingItem))\r\n\r\n // 确保 existingItem.id 存在\r\n let itemId: string | null = null\r\n let itemQty: any | null = null\r\n\r\n if (existingItem instanceof UTSJSONObject) {\r\n itemId = existingItem.getString('id')\r\n itemQty = existingItem.getNumber('quantity')\r\n } else {\r\n const obj = JSON.parse(JSON.stringify(existingItem)) as UTSJSONObject\r\n itemId = obj.getString('id')\r\n itemQty = obj.getNumber('quantity')\r\n }\r\n\r\n if (itemId != null) {\r\n let currentQty = 0\r\n if (typeof itemQty === 'number') {\r\n currentQty = itemQty as number\r\n } else {\r\n const qStr = `${itemQty ?? 0}`\r\n currentQty = parseInt(qStr)\r\n }\r\n const newQty = currentQty + quantity\r\n\r\n response = await supa\r\n .from('ml_shopping_cart')\r\n .update({\r\n quantity: newQty,\r\n updated_at: new Date().toISOString()\r\n })\r\n .eq('id', itemId)\r\n .execute()\r\n } else {\r\n __f__('error','at utils/supabaseService.uts:1610','购物车已有商品但缺少ID,无法更新. Data:', JSON.stringify(existingItem))\r\n return false\r\n }\r\n } else {\r\n // 商品不存在,添加新记录\r\n response = await supa\r\n .from('ml_shopping_cart')\r\n .insert({\r\n user_id: userId,\r\n product_id: productId,\r\n sku_id: realSkuId,\r\n quantity: quantity,\r\n selected: true,\r\n created_at: new Date().toISOString(),\r\n updated_at: new Date().toISOString()\r\n })\r\n .execute()\r\n }\r\n\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:1630','添加商品到购物车失败:', response.error)\r\n return false\r\n }\r\n\r\n return true\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:1636','添加商品到购物车异常:', error)\r\n return false\r\n }\r\n }\r\n\r\n // 更新购物车商品数量\r\n async updateCartItemQuantity(cartItemId: string, quantity: number): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('error','at utils/supabaseService.uts:1646','用户未登录,无法更新购物车')\r\n return false\r\n }\r\n\r\n if (quantity < 1) {\r\n // 数量小于1时删除商品\r\n return await this.deleteCartItem(cartItemId)\r\n }\r\n\r\n const response = await supa\r\n .from('ml_shopping_cart')\r\n .update({\r\n quantity: quantity,\r\n updated_at: new Date().toISOString()\r\n })\r\n .eq('id', cartItemId)\r\n .eq('user_id', userId)\r\n .execute()\r\n\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:1666','更新购物车商品数量失败:', response.error)\r\n return false\r\n }\r\n\r\n return true\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:1672','更新购物车商品数量异常:', error)\r\n return false\r\n }\r\n }\r\n\r\n // 更新购物车商品选中状态\r\n async updateCartItemSelection(cartItemId: string, selected: boolean): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('error','at utils/supabaseService.uts:1682','用户未登录,无法更新购物车')\r\n return false\r\n }\r\n\r\n const response = await supa\r\n .from('ml_shopping_cart')\r\n .update({\r\n selected: selected,\r\n updated_at: new Date().toISOString()\r\n })\r\n .eq('id', cartItemId)\r\n .eq('user_id', userId)\r\n .execute()\r\n\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:1697','更新购物车商品选中状态失败:', response.error)\r\n return false\r\n }\r\n\r\n return true\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:1703','更新购物车商品选中状态异常:', error)\r\n return false\r\n }\r\n }\r\n\r\n // 批量更新购物车商品选中状态\r\n async batchUpdateCartItemSelection(cartItemIds: string[], selected: boolean): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('error','at utils/supabaseService.uts:1713','用户未登录,无法更新购物车')\r\n return false\r\n }\r\n\r\n const response = await supa\r\n .from('ml_shopping_cart')\r\n .update({\r\n selected: selected,\r\n updated_at: new Date().toISOString()\r\n })\r\n .eq('user_id', userId)\r\n .in('id', cartItemIds as any[])\r\n .execute()\r\n\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:1728','批量更新购物车商品选中状态失败:', response.error)\r\n return false\r\n }\r\n\r\n return true\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:1734','批量更新购物车商品选中状态异常:', error)\r\n return false\r\n }\r\n }\r\n\r\n // 删除购物车商品\r\n async deleteCartItem(cartItemId: string): Promise {\r\n return true\r\n /*\r\n try {\r\n __f__('log','at utils/supabaseService.uts:1744','正在执行删除购物车商品,ID:', cartItemId)\r\n const userId = this.getCurrentUserId()\r\n if (!userId) {\r\n __f__('error','at utils/supabaseService.uts:1747','用户未登录,无法删除购物车商品')\r\n return false\r\n }\r\n\r\n const response = await supa\r\n .from('ml_shopping_cart')\r\n .eq('id', cartItemId)\r\n .eq('user_id', userId)\r\n .delete()\r\n .execute()\r\n\r\n if (response.error) {\r\n __f__('error','at utils/supabaseService.uts:1759','删除购物车商品失败:', response.error)\r\n return false\r\n }\r\n\r\n return true\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:1765','删除购物车商品异常:', error)\r\n return false\r\n }\r\n */\r\n }\r\n\r\n // 批量删除购物车商品\r\n async batchDeleteCartItems(cartItemIds: string[]): Promise {\r\n return true\r\n /*\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (!userId) {\r\n __f__('error','at utils/supabaseService.uts:1778','用户未登录,无法删除购物车商品')\r\n return false\r\n }\r\n\r\n const response = await supa\r\n .from('ml_shopping_cart')\r\n .eq('user_id', userId)\r\n .in('id', cartItemIds)\r\n .delete()\r\n .execute()\r\n\r\n if (response.error) {\r\n __f__('error','at utils/supabaseService.uts:1790','批量删除购物车商品失败:', response.error)\r\n return false\r\n }\r\n\r\n return true\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:1796','批量删除购物车商品异常:', error)\r\n return false\r\n }\r\n */\r\n }\r\n\r\n // 清空购物车\r\n async clearCart(): Promise {\r\n return true\r\n /*\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (!userId) {\r\n __f__('error','at utils/supabaseService.uts:1809','用户未登录,无法清空购物车')\r\n return false\r\n }\r\n\r\n const response = await supa\r\n .from('ml_shopping_cart')\r\n .eq('user_id', userId)\r\n .delete()\r\n .execute()\r\n\r\n if (response.error) {\r\n __f__('error','at utils/supabaseService.uts:1820','清空购物车失败:', response.error)\r\n return false\r\n }\r\n\r\n return true\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:1826','清空购物车异常:', error)\r\n return false\r\n }\r\n */\r\n }\r\n\r\n // 获取当前用户的所有地址\r\n async getAddresses(): Promise {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('warn','at utils/supabaseService.uts:1836','[getAddresses] 用户未登录,无法获取地址')\r\n return []\r\n }\r\n\r\n try {\r\n __f__('log','at utils/supabaseService.uts:1841','[getAddresses] 查询地址, userId:', userId)\r\n \r\n const response = await supa\r\n .from('ml_user_addresses')\r\n .select('*')\r\n .eq('user_id', userId)\r\n .order('is_default', { ascending: false })\r\n .order('created_at', { ascending: false })\r\n .execute()\r\n \r\n __f__('log','at utils/supabaseService.uts:1851','[getAddresses] response.error:', response.error)\r\n __f__('log','at utils/supabaseService.uts:1852','[getAddresses] response.data:', JSON.stringify(response.data))\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:1855','[getAddresses] 获取地址失败:', response.error)\r\n return []\r\n }\r\n \r\n const data = response.data\r\n if (data == null) {\r\n return []\r\n }\r\n \r\n const result: UserAddress[] = []\r\n const rawData = data as any[]\r\n for (let i = 0; i < rawData.length; i++) {\r\n const item = rawData[i]\r\n let itemObj: UTSJSONObject\r\n if (item instanceof UTSJSONObject) {\r\n itemObj = item as UTSJSONObject\r\n } else {\r\n itemObj = JSON.parse(JSON.stringify(item)) as UTSJSONObject\r\n }\r\n \r\n const addrObj = new UTSJSONObject()\r\n addrObj.set('id', itemObj.getString('id') ?? '')\r\n addrObj.set('user_id', itemObj.getString('user_id') ?? '')\r\n addrObj.set('recipient_name', itemObj.getString('receiver_name') ?? itemObj.getString('recipient_name') ?? '')\r\n addrObj.set('phone', itemObj.getString('receiver_phone') ?? itemObj.getString('phone') ?? '')\r\n addrObj.set('province', itemObj.getString('province') ?? '')\r\n addrObj.set('city', itemObj.getString('city') ?? '')\r\n addrObj.set('district', itemObj.getString('district') ?? '')\r\n addrObj.set('detail_address', itemObj.getString('address_detail') ?? itemObj.getString('detail_address') ?? '')\r\n addrObj.set('is_default', itemObj.getBoolean('is_default') ?? false)\r\n result.push(addrObj as UserAddress)\r\n }\r\n \r\n __f__('log','at utils/supabaseService.uts:1888','[getAddresses] 返回地址数量:', result.length)\r\n return result\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:1891','[getAddresses] 获取地址异常:', error)\r\n return []\r\n }\r\n }\r\n\r\n // 根据ID获取地址详情\r\n async getAddressById(addressId: string): Promise {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('warn','at utils/supabaseService.uts:1900','用户未登录,无法获取地址')\r\n return null\r\n }\r\n\r\n try {\r\n const query = supa\r\n .from('ml_user_addresses')\r\n .select('*, recipient_name:receiver_name, phone:receiver_phone, detail_address:address_detail')\r\n .eq('id', addressId)\r\n .eq('user_id', userId)\r\n .single()\r\n \r\n const response = await query.execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:1915','获取地址详情失败:', response.error)\r\n return null\r\n }\r\n \r\n return response.data as UserAddress\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:1921','获取地址详情异常:', error)\r\n return null\r\n }\r\n }\r\n\r\n // 添加新地址\r\n async addAddress(address: AddAddressParams): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('error','at utils/supabaseService.uts:1931','用户未登录,无法添加地址')\r\n return false\r\n }\r\n\r\n // 如果设置为默认地址,需要先取消其他默认地址\r\n if (address.is_default == true) {\r\n await this.clearDefaultAddress(userId)\r\n }\r\n\r\n const response = await supa\r\n .from('ml_user_addresses')\r\n .insert({\r\n user_id: userId,\r\n receiver_name: address.recipient_name,\r\n receiver_phone: address.phone,\r\n province: address.province,\r\n city: address.city,\r\n district: address.district,\r\n address_detail: address.detail_address,\r\n postal_code: address.postal_code ?? null,\r\n is_default: address.is_default ?? false,\r\n created_at: new Date().toISOString(),\r\n updated_at: new Date().toISOString()\r\n })\r\n .execute()\r\n\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:1958','添加地址失败:', response.error)\r\n return false\r\n }\r\n\r\n return true\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:1964','添加地址异常:', error)\r\n return false\r\n }\r\n }\r\n\r\n // 更新地址\r\n async updateAddress(addressId: string, address: UpdateAddressParams): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('error','at utils/supabaseService.uts:1974','用户未登录,无法更新地址')\r\n return false\r\n }\r\n\r\n // 如果设置为默认地址,需要先取消其他默认地址\r\n if (address.is_default == true) {\r\n await this.clearDefaultAddress(userId)\r\n }\r\n \r\n // 构造更新数据,映射字段名到数据库列名\r\n const updateData = {}\r\n if (address.recipient_name != null) updateData['receiver_name'] = address.recipient_name\r\n if (address.phone != null) updateData['receiver_phone'] = address.phone\r\n if (address.province != null) updateData['province'] = address.province\r\n if (address.city != null) updateData['city'] = address.city\r\n if (address.district != null) updateData['district'] = address.district\r\n if (address.detail_address != null) updateData['address_detail'] = address.detail_address\r\n if (address.postal_code != null) updateData['postal_code'] = address.postal_code\r\n if (address.is_default != null) updateData['is_default'] = address.is_default\r\n if (address.label != null) updateData['label'] = address.label\r\n updateData['updated_at'] = new Date().toISOString()\r\n\r\n const response = await supa\r\n .from('ml_user_addresses')\r\n .update(updateData)\r\n .eq('id', addressId)\r\n .eq('user_id', userId)\r\n .execute()\r\n\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2004','更新地址失败:', response.error)\r\n return false\r\n }\r\n\r\n return true\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:2010','更新地址异常:', error)\r\n return false\r\n }\r\n }\r\n \r\n // 确认收货\r\n async confirmReceipt(orderId: string): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n return { success: false, error: '用户未登录' }\r\n }\r\n\r\n const response = await supa\r\n .from('ml_orders')\r\n .update({\r\n order_status: 4, // 4: 已完成\r\n delivered_at: new Date().toISOString(),\r\n completed_at: new Date().toISOString(), // 也更新完成时间\r\n updated_at: new Date().toISOString()\r\n })\r\n .eq('id', orderId)\r\n .eq('user_id', userId)\r\n .execute()\r\n \r\n if (response.error != null) {\r\n return { success: false, error: response.error.message }\r\n }\r\n \r\n return { success: true }\r\n } catch (e: any) {\r\n return { success: false, error: e.message }\r\n }\r\n }\r\n\r\n // 删除地址\r\n async deleteAddress(addressId: string): Promise {\r\n try {\r\n __f__('log','at utils/supabaseService.uts:2048','正在执行删除地址,ID:', addressId)\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('error','at utils/supabaseService.uts:2051','用户未登录,无法删除地址')\r\n return false\r\n }\r\n\r\n const response = await supa\r\n .from('ml_user_addresses')\r\n .eq('id', addressId)\r\n .eq('user_id', userId)\r\n .delete()\r\n .execute()\r\n\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2063','删除地址失败:', response.error)\r\n return false\r\n }\r\n\r\n return true\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:2069','删除地址异常:', error)\r\n return false\r\n }\r\n }\r\n\r\n // 清除默认地址(内部使用)\r\n private async clearDefaultAddress(userId: string): Promise {\r\n try {\r\n await supa\r\n .from('ml_user_addresses')\r\n .update({\r\n is_default: false,\r\n updated_at: new Date().toISOString()\r\n })\r\n .eq('user_id', userId)\r\n .eq('is_default', true)\r\n .execute()\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:2087','清除默认地址异常:', error)\r\n }\r\n }\r\n\r\n // 获取用户资料\r\n async getUserProfile(): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) return null\r\n \r\n // 联合查询 auth user 和 profile\r\n // 由于 Supabase auth table 不可直接访问,这里查询 ml_user_profiles\r\n const response = await supa\r\n .from('ml_user_profiles')\r\n .select('*')\r\n .eq('user_id', userId)\r\n .single()\r\n .execute()\r\n \r\n if (response.error != null) {\r\n // 如果不存在 profile,可能只有 auth user,这里暂时返回空或创建默认\r\n return null\r\n }\r\n return response.data\r\n } catch (e) {\r\n return null\r\n }\r\n }\r\n \r\n // 创建订单\r\n async createOrder(orderData: CreateOrderParams): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('error','at utils/supabaseService.uts:2121','CreateOrder: User not logged in')\r\n return null\r\n }\r\n \r\n const orderNo = 'ML' + Date.now() + Math.floor(Math.random() * 1000)\r\n \r\n let merchantId = orderData.merchant_id\r\n if (merchantId == null || merchantId == '' || merchantId == 'unknown') {\r\n merchantId = userId\r\n }\r\n \r\n let shippingAddrStr = '{}'\r\n if (orderData.shipping_address != null) {\r\n if (typeof orderData.shipping_address === 'string') {\r\n shippingAddrStr = orderData.shipping_address\r\n } else {\r\n shippingAddrStr = JSON.stringify(orderData.shipping_address)\r\n }\r\n }\r\n \r\n const orderPayload = new UTSJSONObject()\r\n orderPayload.set('user_id', userId)\r\n orderPayload.set('merchant_id', merchantId)\r\n orderPayload.set('order_no', orderNo)\r\n orderPayload.set('product_amount', orderData.product_amount)\r\n orderPayload.set('shipping_fee', orderData.shipping_fee)\r\n orderPayload.set('total_amount', orderData.total_amount)\r\n orderPayload.set('paid_amount', 0)\r\n orderPayload.set('shipping_address', shippingAddrStr)\r\n orderPayload.set('order_status', 1)\r\n orderPayload.set('payment_status', 1)\r\n orderPayload.set('shipping_status', 1)\r\n orderPayload.set('created_at', new Date().toISOString())\r\n orderPayload.set('updated_at', new Date().toISOString())\r\n \r\n __f__('log','at utils/supabaseService.uts:2156','[CreateOrder] 插入订单数据:', JSON.stringify(orderPayload))\r\n __f__('log','at utils/supabaseService.uts:2157','[CreateOrder] 期望的订单号:', orderNo)\r\n \r\n const orderResponse = await supa\r\n .from('ml_orders')\r\n .insert(orderPayload)\r\n .execute()\r\n \r\n __f__('log','at utils/supabaseService.uts:2164','[CreateOrder] insert 完成')\r\n __f__('log','at utils/supabaseService.uts:2165','[CreateOrder] orderResponse.error:', orderResponse.error)\r\n \r\n if (orderResponse.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2168','[CreateOrder] 创建订单失败:', orderResponse.error)\r\n return null\r\n }\r\n \r\n __f__('log','at utils/supabaseService.uts:2172','[CreateOrder] 开始查询新创建的订单, order_no:', orderNo)\r\n \r\n const queryResponse = await supa\r\n .from('ml_orders')\r\n .select('id, order_no')\r\n .eq('order_no', orderNo)\r\n .execute()\r\n \r\n __f__('log','at utils/supabaseService.uts:2180','[CreateOrder] queryResponse.error:', queryResponse.error)\r\n __f__('log','at utils/supabaseService.uts:2181','[CreateOrder] queryResponse.data:', JSON.stringify(queryResponse.data))\r\n \r\n if (queryResponse.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2184','[CreateOrder] 查询订单失败:', queryResponse.error)\r\n return null\r\n }\r\n \r\n const queryData = queryResponse.data as any\r\n let orderId = ''\r\n \r\n if (Array.isArray(queryData) && queryData.length > 0) {\r\n const firstItem = queryData[0] as Record\r\n orderId = firstItem['id'] as string\r\n __f__('log','at utils/supabaseService.uts:2194','[CreateOrder] 找到新创建的订单, id:', orderId)\r\n } else {\r\n __f__('error','at utils/supabaseService.uts:2196','[CreateOrder] 未找到新创建的订单,插入可能失败')\r\n return null\r\n }\r\n \r\n __f__('log','at utils/supabaseService.uts:2200','[CreateOrder] 订单创建成功, orderId:', orderId)\r\n \r\n const orderItems: UTSJSONObject[] = []\r\n const rawItems = orderData.items as any[]\r\n \r\n for(let i = 0; i < rawItems.length; i++) {\r\n let item: UTSJSONObject\r\n const rawItem = rawItems[i]\r\n item = rawItem as UTSJSONObject\r\n\r\n const itemJson = new UTSJSONObject()\r\n \r\n let pId = item.get('product_id')\r\n if (pId == null) {\r\n pId = item.get('id')\r\n }\r\n \r\n itemJson.set('order_id', orderId)\r\n itemJson.set('product_id', pId)\r\n \r\n const skuIdVal = item.get('sku_id')\r\n if (skuIdVal != null && skuIdVal !== '') {\r\n itemJson.set('sku_id', skuIdVal)\r\n }\r\n \r\n itemJson.set('product_name', item.get('product_name') ?? '')\r\n \r\n const sName = item.get('sku_name')\r\n itemJson.set('sku_name', sName ?? '')\r\n \r\n const specVal = item.get('specifications')\r\n let skuSnapshot = '{}'\r\n if (specVal != null) {\r\n if (typeof specVal === 'string') {\r\n skuSnapshot = specVal as string\r\n } else {\r\n skuSnapshot = JSON.stringify(specVal)\r\n }\r\n }\r\n itemJson.set('sku_snapshot', skuSnapshot)\r\n itemJson.set('specifications', skuSnapshot)\r\n \r\n const img1 = item.get('product_image')\r\n const img2 = item.get('image_url')\r\n let imgUrl = (img1 ?? img2 ?? '') as string\r\n while (imgUrl.indexOf('`') >= 0) {\r\n imgUrl = imgUrl.replace('`', '')\r\n }\r\n itemJson.set('image_url', imgUrl)\r\n\r\n const iPrice = item.getNumber('price') ?? 0\r\n const iQty = item.getNumber('quantity') ?? 1\r\n itemJson.set('price', iPrice)\r\n itemJson.set('quantity', iQty)\r\n itemJson.set('total_amount', iPrice * iQty)\r\n itemJson.set('created_at', new Date().toISOString())\r\n \r\n orderItems.push(itemJson)\r\n }\r\n \r\n __f__('log','at utils/supabaseService.uts:2260','[CreateOrder] 插入订单项数量:', orderItems.length)\r\n __f__('log','at utils/supabaseService.uts:2261','[CreateOrder] 订单项数据:', JSON.stringify(orderItems))\r\n \r\n for (let j: number = 0; j < orderItems.length; j++) {\r\n const itemJson = orderItems[j]\r\n const itemsResponse = await supa\r\n .from('ml_order_items')\r\n .insert(itemJson)\r\n .execute()\r\n \r\n if (itemsResponse.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2271','[CreateOrder] 创建订单项失败:', itemsResponse.error)\r\n }\r\n }\r\n \r\n __f__('log','at utils/supabaseService.uts:2275','[CreateOrder] 订单项创建成功')\r\n \r\n const cartItemIds: string[] = []\r\n for(let i = 0; i < rawItems.length; i++) {\r\n const item = rawItems[i] as UTSJSONObject\r\n const iid = item.getString('id')\r\n if (iid != null && iid.length > 10) {\r\n cartItemIds.push(iid)\r\n }\r\n }\r\n \r\n if (cartItemIds.length > 0) {\r\n await this.batchDeleteCartItems(cartItemIds)\r\n }\r\n \r\n return orderId\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:2292','[CreateOrder] 创建订单异常:', error)\r\n return null\r\n }\r\n }\r\n\r\n // 批量通过店铺创建订单\r\n async createOrdersByShop(params: ShopOrderParams): Promise {\r\n try {\r\n const orderIds: string[] = []\r\n const groups = params.shopGroups as any[]\r\n \r\n let grandTotal = 0.0\r\n for(let k = 0; k < groups.length; k++) {\r\n const g = groups[k] as UTSJSONObject\r\n // 安全获取 items 数组\r\n const gItemsRaw = g.get('items')\r\n if (gItemsRaw == null) continue\r\n const gItems = gItemsRaw as any[]\r\n \r\n for(let gi = 0; gi < gItems.length; gi++) {\r\n const it = gItems[gi] as UTSJSONObject\r\n const itPrice = it.getNumber('price') ?? 0\r\n const itQty = it.getNumber('quantity') ?? 1\r\n grandTotal += itPrice * itQty\r\n }\r\n }\r\n \r\n // 为每个店铺创建一个订单\r\n for (let i = 0; i < groups.length; i++) {\r\n const group = groups[i] as UTSJSONObject\r\n const shopItemsRaw = group.get('items')\r\n if (shopItemsRaw == null) continue\r\n const shopItems = shopItemsRaw as any[]\r\n \r\n let productAmount = 0.0\r\n for(let j = 0; j < shopItems.length; j++) {\r\n const sItem = shopItems[j] as UTSJSONObject\r\n const siPrice = sItem.getNumber('price') ?? 0\r\n const siQty = sItem.getNumber('quantity') ?? 1\r\n productAmount += siPrice * siQty\r\n }\r\n \r\n // 简单平摊运费和优惠 (实际逻辑可能更复杂)\r\n const ratio = grandTotal > 0 ? (productAmount / grandTotal) : 0\r\n const shopShippingFee = params.deliveryFee * ratio\r\n const shopDiscount = params.discountAmount * ratio\r\n const shopTotal = productAmount + shopShippingFee - shopDiscount\r\n \r\n const mId = group.getString('merchant_id')\r\n const sId = group.getString('shopId')\r\n const shopName = group.getString('shopName')\r\n\r\n const orderId = await this.createOrder({\r\n merchant_id: (mId != null && mId != '') ? mId : (sId ?? ''), // 兼容旧字段\r\n product_amount: productAmount,\r\n shipping_fee: shopShippingFee,\r\n total_amount: shopTotal,\r\n shipping_address: params.shipping_address,\r\n items: shopItems\r\n })\r\n \r\n if (orderId != null) {\r\n orderIds.push(orderId)\r\n } else {\r\n return { success: false, orderIds, error: `店铺 ${shopName} 订单创建失败` }\r\n }\r\n }\r\n \r\n return { success: true, orderIds }\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:2362','批量创建订单异常:', e)\r\n return { success: false, orderIds: [], error: '系统异常' }\r\n }\r\n }\r\n\r\n // 获取订单列表\r\n async getOrders(status: number = 0): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n \r\n let query = supa\r\n .from('ml_orders')\r\n .select(`\r\n *,\r\n ml_order_items (*)\r\n `)\r\n .eq('user_id', userId)\r\n .order('created_at', { ascending: false })\r\n \r\n if (status > 0) {\r\n query = query.eq('order_status', status)\r\n }\r\n \r\n const response = await query.execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2392','获取订单列表失败:', response.error)\r\n const empty: any[] = []\r\n return empty\r\n }\r\n \r\n const data = response.data\r\n if (data == null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n return data as any[]\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:2404','获取订单列表异常:', error)\r\n const empty: any[] = []\r\n return empty\r\n }\r\n }\r\n \r\n // 获取订单详情\r\n async getOrderDetail(orderId: string): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) return null\r\n \r\n const response = await supa\r\n .from('ml_orders')\r\n .select(`\r\n *,\r\n ml_order_items (*)\r\n `)\r\n .eq('id', orderId)\r\n .eq('user_id', userId)\r\n .single()\r\n .execute()\r\n \r\n if (response.error != null) {\r\n return null\r\n }\r\n return response.data\r\n } catch (e) {\r\n return null\r\n }\r\n }\r\n\r\n // 支付订单\r\n async payOrder(orderId: string, paymentMethod: string, amount: number): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('error','at utils/supabaseService.uts:2441','[payOrder] 用户未登录')\r\n return false\r\n }\r\n \r\n __f__('log','at utils/supabaseService.uts:2445','[payOrder] 开始更新订单状态, orderId:', orderId, 'userId:', userId)\r\n \r\n const updatePayload = new UTSJSONObject()\r\n updatePayload.set('order_status', 2)\r\n updatePayload.set('payment_status', 1)\r\n updatePayload.set('payment_method', paymentMethod)\r\n updatePayload.set('payment_time', new Date().toISOString())\r\n updatePayload.set('paid_amount', amount)\r\n updatePayload.set('updated_at', new Date().toISOString())\r\n \r\n __f__('log','at utils/supabaseService.uts:2455','[payOrder] 更新数据:', JSON.stringify(updatePayload))\r\n \r\n const response = await supa\r\n .from('ml_orders')\r\n .update(updatePayload)\r\n .eq('id', orderId)\r\n .eq('user_id', userId)\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2465','[payOrder] 更新订单失败:', response.error)\r\n return false\r\n }\r\n \r\n __f__('log','at utils/supabaseService.uts:2469','[payOrder] 订单状态更新成功')\r\n\r\n if (paymentMethod === 'balance') {\r\n __f__('log','at utils/supabaseService.uts:2472','[payOrder] 余额支付,暂不扣减余额')\r\n }\r\n\r\n return true\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:2477','[payOrder] 支付异常:', e)\r\n return false\r\n }\r\n }\r\n\r\n // 根据ID获取订单信息\r\n async getOrderById(orderId: string): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('error','at utils/supabaseService.uts:2487','[getOrderById] 用户未登录')\r\n return null\r\n }\r\n \r\n __f__('log','at utils/supabaseService.uts:2491','[getOrderById] 查询订单, orderId:', orderId)\r\n \r\n const response = await supa\r\n .from('ml_orders')\r\n .select('*')\r\n .eq('id', orderId)\r\n .eq('user_id', userId)\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2501','[getOrderById] 查询订单失败:', response.error)\r\n return null\r\n }\r\n \r\n const data = response.data as any[]\r\n if (data == null || data.length === 0) {\r\n __f__('log','at utils/supabaseService.uts:2507','[getOrderById] 未找到订单')\r\n return null\r\n }\r\n \r\n const orderRaw = data[0]\r\n let orderObj: UTSJSONObject\r\n if (orderRaw instanceof UTSJSONObject) {\r\n orderObj = orderRaw as UTSJSONObject\r\n } else {\r\n orderObj = JSON.parse(JSON.stringify(orderRaw)) as UTSJSONObject\r\n }\r\n \r\n __f__('log','at utils/supabaseService.uts:2519','[getOrderById] 订单数据:', JSON.stringify(orderObj))\r\n return orderObj\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:2522','[getOrderById] 查询异常:', e)\r\n return null\r\n }\r\n }\r\n\r\n // 提交售后申请\r\n async createRefund(data: any): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) return { success: false, message: '请先登录' }\r\n \r\n const d = data as UTSJSONObject\r\n const orderId = d.getString('order_id')\r\n const refundType = d.getNumber('refund_type')\r\n const refundReason = d.getString('refund_reason')\r\n const refundAmount = d.getNumber('refund_amount')\r\n const description = d.getString('description')\r\n const images = d.getArray('images')\r\n\r\n const payload = {\r\n user_id: userId,\r\n order_id: orderId,\r\n refund_no: 'REF' + Date.now() + Math.floor(Math.random() * 1000),\r\n refund_type: refundType,\r\n refund_reason: refundReason,\r\n refund_amount: refundAmount,\r\n description: description ?? '',\r\n images: images ?? ([] as any[]),\r\n status: 1 // Pending\r\n }\r\n \r\n const response = await supa\r\n .from('ml_refunds')\r\n .insert(payload)\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2559','提交售后失败:', response.error)\r\n return { success: false, message: '提交失败: ' + (response.error.message ?? '未知错误') }\r\n }\r\n \r\n return { success: true, message: '申请提交成功' }\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:2565','提交售后异常:', e)\r\n return { success: false, message: '系统异常' }\r\n }\r\n }\r\n\r\n // 再次购买\r\n async rePurchase(order: any): Promise {\r\n try {\r\n // 将 order 转换为 UTSJSONObject 以安全访问属性\r\n const orderObj = order as UTSJSONObject\r\n // 尝试获取 ml_order_items 或 items\r\n let itemsKey = 'ml_order_items'\r\n let itemsRaw = orderObj.get(itemsKey)\r\n \r\n if (itemsRaw == null) {\r\n itemsKey = 'items'\r\n itemsRaw = orderObj.get(itemsKey)\r\n }\r\n \r\n if (itemsRaw == null) return false\r\n \r\n // 断言为数组\r\n const items = itemsRaw as any[]\r\n if (items.length === 0) return false\r\n\r\n // 简单的循环添加,实际项目中可以优化为批量插入\r\n for (let i = 0; i < items.length; i++) {\r\n // 同样,item 也是 UTSJSONObject 或支持访问的对象\r\n const item = items[i] as UTSJSONObject\r\n const productId = item.getString('product_id') \r\n const skuId = item.getString('sku_id')\r\n // 数量可能是数字或字符串\r\n const quantity = item.getNumber('quantity') ?? 1\r\n \r\n if (productId != null) {\r\n await this.addToCart(productId, quantity, skuId ?? null)\r\n }\r\n }\r\n return true\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:2605','rePurchase error', e)\r\n return false\r\n }\r\n }\r\n\r\n // 申请售后 (Legacy/Simple update)\r\n async applyRefund(orderId: string, reason: string): Promise {\r\n try {\r\n // 更新订单状态为 退款中 (6)\r\n const response = await supa\r\n .from('ml_orders')\r\n .update({\r\n order_status: 6,\r\n cancel_reason: reason,\r\n updated_at: new Date().toISOString()\r\n })\r\n .eq('id', orderId)\r\n .execute()\r\n \r\n return response.error === null\r\n } catch (e) {\r\n return false\r\n }\r\n }\r\n\r\n // 获取售后记录列表\r\n async getRefunds(statusList: number[] = [], page: number = 1, pageSize: number = 10): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n\r\n let query = supa\r\n .from('ml_refunds')\r\n .select(`\r\n *,\r\n order:ml_orders!inner (\r\n order_no,\r\n created_at,\r\n ml_order_items (\r\n product_id,\r\n product_name,\r\n image_url\r\n )\r\n )\r\n `)\r\n .eq('user_id', userId)\r\n .order('created_at', { ascending: false })\r\n\r\n if (statusList.length > 0) {\r\n // 显式转换为 any[] 以匹配 .in 方法的参数要求\r\n const anyList = statusList as any[]\r\n query = query.in('status', anyList)\r\n }\r\n\r\n query = query.range((page - 1) * pageSize, page * pageSize - 1)\r\n\r\n const response = await query.execute()\r\n\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2667','获取售后列表失败:', response.error)\r\n const empty: any[] = []\r\n return empty\r\n }\r\n\r\n const data = response.data\r\n if (data == null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n\r\n return data\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:2680','获取售后列表异常:', e)\r\n const empty: any[] = []\r\n return empty\r\n }\r\n }\r\n\r\n async deleteRefund(refundId: string): Promise {\r\n try {\r\n const response = await supa\r\n .from('ml_refunds')\r\n .delete()\r\n .eq('id', refundId)\r\n .execute()\r\n\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2695','删除退款记录失败:', response.error)\r\n return false\r\n }\r\n\r\n return true\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:2701','删除退款记录异常:', e)\r\n return false\r\n }\r\n }\r\n\r\n async getUserBalance(): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n __f__('log','at utils/supabaseService.uts:2709','[Supabase] getUserBalance userId:', userId)\r\n if (userId == null) return 0\r\n \r\n // 优先查 ml_user_wallets\r\n const walletRes = await supa\r\n .from('ml_user_wallets')\r\n .select('balance')\r\n .eq('user_id', userId!)\r\n .single()\r\n .execute()\r\n \r\n if (walletRes.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2721','[Supabase] getUserBalance error:', walletRes.error)\r\n } else {\r\n __f__('log','at utils/supabaseService.uts:2723','[Supabase] getUserBalance data:', walletRes.data)\r\n }\r\n\r\n if (walletRes.error == null && walletRes.data != null) {\r\n let data = walletRes.data\r\n // 如果是数组,取第一项\r\n if (Array.isArray(data)) {\r\n const arr = data as any[]\r\n if (arr.length > 0) {\r\n data = arr[0]\r\n }\r\n }\r\n\r\n let val:number = 0\r\n if (data instanceof UTSJSONObject) {\r\n val = data.getNumber('balance') ?? 0\r\n // 尝试字符串转换,防止精度丢失导致转为string\r\n if (val === 0 && data.getString('balance') != null) {\r\n val = parseFloat(data.getString('balance')!)\r\n }\r\n return val\r\n } else {\r\n // 对于 Map 或 loose object\r\n const jsonObj = JSON.parse(JSON.stringify(data)) as UTSJSONObject\r\n val = jsonObj.getNumber('balance') ?? 0\r\n if (val === 0 && jsonObj.getString('balance') != null) {\r\n val = parseFloat(jsonObj.getString('balance')!)\r\n }\r\n return val\r\n }\r\n }\r\n\r\n __f__('log','at utils/supabaseService.uts:2755','[Supabase] Wallet table empty, checking profile...')\r\n\r\n // Fallback to profile\r\n const profile = await this.getUserProfile()\r\n if (profile != null) {\r\n if (profile instanceof UTSJSONObject) {\r\n return profile.getNumber('balance') ?? 0\r\n } else {\r\n const pObj = JSON.parse(JSON.stringify(profile)) as UTSJSONObject\r\n return pObj.getNumber('balance') ?? 0\r\n }\r\n }\r\n return 0\r\n } catch(e) {\r\n __f__('error','at utils/supabaseService.uts:2769','[Supabase] getUserBalance exception:', e)\r\n return 0\r\n }\r\n }\r\n \r\n // 获取用户积分\r\n async getUserPoints(): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n __f__('log','at utils/supabaseService.uts:2778','[Supabase] getUserPoints userId:', userId)\r\n if (userId == null) return 0\r\n \r\n // 查 ml_user_points\r\n const res = await supa\r\n .from('ml_user_points')\r\n .select('points')\r\n .eq('user_id', userId!)\r\n .single()\r\n .execute()\r\n \r\n if (res.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2790','[Supabase] getUserPoints error:', res.error)\r\n } else {\r\n __f__('log','at utils/supabaseService.uts:2792','[Supabase] getUserPoints data:', res.data)\r\n }\r\n\r\n if (res.error == null && res.data != null) {\r\n let data = res.data\r\n // 如果是数组,取第一项\r\n if (Array.isArray(data)) {\r\n const arr = data as any[]\r\n if (arr.length > 0) {\r\n data = arr[0]\r\n }\r\n }\r\n\r\n if (data instanceof UTSJSONObject) {\r\n return data.getNumber('points') ?? 0\r\n } else {\r\n // 尝试转为 UTSJSONObject\r\n const jsonObj = JSON.parse(JSON.stringify(data)) as UTSJSONObject\r\n const val = jsonObj.getNumber('points')\r\n if (val != null) return val\r\n\r\n return 0\r\n }\r\n }\r\n \r\n // Fallback check profile if needed\r\n const profile = await this.getUserProfile()\r\n if (profile != null) {\r\n if (profile instanceof UTSJSONObject) {\r\n return profile.getNumber('points') ?? 0\r\n } else {\r\n const pObj = JSON.parse(JSON.stringify(profile)) as UTSJSONObject\r\n return pObj.getNumber('points') ?? 0\r\n }\r\n }\r\n \r\n return 0\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:2830','[Supabase] getUserPoints exception:', e)\r\n return 0\r\n }\r\n }\r\n\r\n // 获取钱包交易记录\r\n async getTransactions(page: number = 1, limit: number = 20): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n\r\n const from = (page - 1) * limit\r\n const to = from + limit - 1\r\n\r\n const response = await supa\r\n .from('ml_wallet_transactions')\r\n .select('*')\r\n .eq('user_id', userId!)\r\n .order('created_at', { ascending: false })\r\n .range(from, to)\r\n .execute()\r\n\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2856','获取交易记录失败:', response.error)\r\n const empty: any[] = []\r\n return empty\r\n }\r\n \r\n const data = response.data\r\n if (data == null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n\r\n return data as any[]\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:2869','获取交易记录异常:', e)\r\n const empty: any[] = []\r\n return empty\r\n }\r\n }\r\n \r\n // 获取积分记录\r\n async getPointRecords(): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n \r\n const res = await supa\r\n .from('ml_point_records')\r\n .select('*')\r\n .eq('user_id', userId!)\r\n .order('created_at', { ascending: false })\r\n .execute()\r\n \r\n if (res.error != null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n const data = res.data\r\n if (data == null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n return data as any[]\r\n } catch (e) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n }\r\n\r\n // 获取用户红包\r\n async getUserRedPackets(): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n\r\n const res = await supa\r\n .from('ml_user_red_packets')\r\n .select('*')\r\n .eq('user_id', userId!)\r\n .order('created_at', { ascending: false })\r\n .execute()\r\n\r\n if (res.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2924','获取红包失败:', res.error)\r\n const empty: any[] = []\r\n return empty\r\n }\r\n const data = res.data\r\n if (data == null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n return data as any[]\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:2935','获取红包异常:', e)\r\n const empty: any[] = []\r\n return empty\r\n }\r\n }\r\n\r\n // 获取用户银行卡\r\n async getUserBankCards(): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n\r\n const res = await supa\r\n .from('ml_user_bank_cards')\r\n .select('*')\r\n .eq('user_id', userId!)\r\n .order('created_at', { ascending: false })\r\n .execute()\r\n\r\n if (res.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2958','获取银行卡失败:', res.error)\r\n const empty: any[] = []\r\n return empty\r\n }\r\n const data = res.data\r\n if (data == null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n return data as any[]\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:2969','获取银行卡异常:', e)\r\n const empty: any[] = []\r\n return empty\r\n }\r\n }\r\n\r\n // 余额充值 (调用 RPC)\r\n async rechargeBalance(amount: number): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) return false\r\n \r\n const res = await supa.rpc('recharge_wallet', { \r\n p_user_id: userId,\r\n p_amount: amount \r\n })\r\n \r\n if (res.error != null) {\r\n __f__('error','at utils/supabaseService.uts:2987','充值失败RPC:', res.error)\r\n return false\r\n }\r\n \r\n // 简单判断: 如果没有error且data里success为true\r\n const data = res.data\r\n if (data instanceof UTSJSONObject) {\r\n return data.getBoolean('success') ?? false\r\n }\r\n // 如果返回不是对象,作为失败处理\r\n return false\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:2999','充值异常:', e)\r\n return false\r\n }\r\n }\r\n\r\n // 余额提现 (调用 RPC)\r\n async withdrawBalance(amount: number): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) return false\r\n \r\n const res = await supa.rpc('withdraw_wallet', { \r\n p_user_id: userId,\r\n p_amount: amount \r\n })\r\n \r\n if (res.error != null) {\r\n __f__('error','at utils/supabaseService.uts:3016','提现失败RPC:', res.error)\r\n return false\r\n }\r\n \r\n const data = res.data\r\n if (data instanceof UTSJSONObject) {\r\n return data.getBoolean('success') ?? false\r\n }\r\n return false\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:3026','提现异常:', e)\r\n return false\r\n }\r\n }\r\n\r\n // 添加银行卡\r\n async addBankCard(card: UTSJSONObject): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) return false\r\n \r\n // 补全 user_id\r\n card.set('user_id', userId)\r\n \r\n const res = await supa\r\n .from('ml_user_bank_cards')\r\n .insert(card)\r\n .execute()\r\n \r\n if (res.error != null) {\r\n __f__('error','at utils/supabaseService.uts:3046','添加银行卡失败:', res.error)\r\n return false\r\n }\r\n return true\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:3051','添加银行卡异常:', e)\r\n return false\r\n }\r\n }\r\n \r\n // 删除银行卡\r\n async deleteBankCard(cardId: string): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) return false\r\n \r\n const res = await supa\r\n .from('ml_user_bank_cards')\r\n .eq('id', cardId)\r\n .eq('user_id', userId!)\r\n .delete()\r\n .execute()\r\n \r\n if (res.error != null) {\r\n __f__('error','at utils/supabaseService.uts:3070','删除银行卡失败:', res.error)\r\n return false\r\n }\r\n return true\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:3075','删除银行卡异常:', e)\r\n return false\r\n }\r\n }\r\n\r\n // 收藏相关\r\n async checkFavorite(productId: string): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n __f__('log','at utils/supabaseService.uts:3084',`[CheckFav] Checking for User: ${userId}, Product: ${productId}`)\r\n \r\n if (userId == null) return false\r\n \r\n const response = await supa\r\n .from('ml_user_favorites')\r\n .select('*') // Select all to verify data\r\n .eq('user_id', userId!)\r\n .eq('target_id', productId)\r\n .eq('target_type', 1) // 1 for product\r\n .limit(1)\r\n .execute()\r\n \r\n // __f__('log','at utils/supabaseService.uts:3097',`[CheckFav] Response: ${JSON.stringify(response)}`)\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:3100',`[CheckFav] Error: ${JSON.stringify(response.error)}`)\r\n return false\r\n }\r\n \r\n const data = response.data\r\n if (Array.isArray(data)) {\r\n if ((data as any[]).length > 0) {\r\n // Double check: ensure the returned item actually matches the product ID\r\n // This guards against potential query filter failures\r\n const item = data[0]\r\n let targetId = ''\r\n if (item instanceof UTSJSONObject) {\r\n targetId = item.getString('target_id') ?? ''\r\n } else {\r\n const itemObj = JSON.parse(JSON.stringify(item)) as UTSJSONObject\r\n targetId = itemObj.getString('target_id') ?? ''\r\n }\r\n \r\n if (targetId !== '' && targetId !== productId) {\r\n __f__('error','at utils/supabaseService.uts:3119',`[CheckFav] ID Mismatch! Query ${productId}, Got ${targetId}`)\r\n return false\r\n }\r\n \r\n return true\r\n }\r\n } else if (data instanceof UTSJSONObject) {\r\n // Handle single object return case (though limit(1) usually returns array)\r\n let targetId = data.getString('target_id') ?? ''\r\n if (targetId !== '' && targetId !== productId) {\r\n return false\r\n }\r\n return true\r\n }\r\n \r\n return false\r\n } catch(e) {\r\n __f__('error','at utils/supabaseService.uts:3136',`[CheckFav] Exception: ${e}`)\r\n return false\r\n }\r\n }\r\n \r\n async toggleFavorite(productId: string): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) return false\r\n \r\n __f__('log','at utils/supabaseService.uts:3146',`[ToggleFav] Toggling for ${productId}`)\r\n \r\n // Check if exists\r\n const exists = await this.checkFavorite(productId)\r\n __f__('log','at utils/supabaseService.uts:3150',`[ToggleFav] Current status: ${exists}`)\r\n \r\n if (exists) {\r\n // Delete\r\n const response = await supa\r\n .from('ml_user_favorites')\r\n .eq('user_id', userId!)\r\n .eq('target_id', productId)\r\n .eq('target_type', 1)\r\n .delete()\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:3163','取消收藏失败:', response.error)\r\n return true // 仍然是收藏状态\r\n }\r\n return false // 已取消收藏\r\n } else {\r\n // Add\r\n const response = await supa\r\n .from('ml_user_favorites')\r\n .insert({\r\n user_id: userId,\r\n target_id: productId,\r\n target_type: 1,\r\n created_at: new Date().toISOString()\r\n })\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:3180','添加收藏失败:', response.error)\r\n return false // 添加失败,仍未收藏\r\n }\r\n return true // 已收藏\r\n }\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:3186','切换收藏状态异常:', e)\r\n // 发生异常时,尝试查询当前状态返回\r\n return await this.checkFavorite(productId)\r\n }\r\n }\r\n \r\n async getFavorites(): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n \r\n // 第一步:查询收藏列表\r\n const response = await supa\r\n .from('ml_user_favorites')\r\n .select('*')\r\n .eq('user_id', userId!)\r\n .eq('target_type', 1)\r\n .order('created_at', { ascending: false })\r\n .execute()\r\n \r\n if (response.error != null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n const favorites = response.data as any[]\r\n if (favorites == null || favorites.length === 0) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n \r\n // 第二步:收集商品ID\r\n const productIds: string[] = []\r\n for (let i = 0; i < favorites.length; i++) {\r\n let item: any = favorites[i]\r\n let pid = ''\r\n if (item instanceof UTSJSONObject) {\r\n pid = item.getString('target_id') ?? ''\r\n } else {\r\n const itemObj = JSON.parse(JSON.stringify(item)) as UTSJSONObject\r\n pid = itemObj.getString('target_id') ?? ''\r\n }\r\n if (pid !== '') productIds.push(pid)\r\n }\r\n \r\n if (productIds.length === 0) return []\r\n \r\n // 第三步:批量查询商品详情\r\n const anyProductIds = productIds as any[]\r\n const productRes = await supa\r\n .from('ml_products')\r\n .select('id, name, main_image_url, base_price, sale_count')\r\n .in('id', anyProductIds)\r\n .execute()\r\n \r\n if (productRes.error != null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n const products = productRes.data as any[]\r\n const productMap = new Map()\r\n \r\n for (let i = 0; i < products.length; i++) {\r\n // 显式声明类型为 any\r\n let p: any = products[i]\r\n let pid = ''\r\n if (p instanceof UTSJSONObject) {\r\n pid = p.getString('id') ?? ''\r\n } else {\r\n const pObj = JSON.parse(JSON.stringify(p)) as UTSJSONObject\r\n pid = pObj.getString('id') ?? ''\r\n }\r\n if (pid !== '') productMap.set(pid, p)\r\n }\r\n \r\n // 第四步:组合数据\r\n const result: any[] = []\r\n for (let i = 0; i < favorites.length; i++) {\r\n let item: any = favorites[i]\r\n let newItem: UTSJSONObject\r\n \r\n if (item instanceof UTSJSONObject) {\r\n // Deep copy to ensure we have a fresh object to modify\r\n newItem = JSON.parse(JSON.stringify(item)) as UTSJSONObject\r\n } else {\r\n newItem = JSON.parse(JSON.stringify(item)) as UTSJSONObject\r\n }\r\n \r\n let targetId = newItem.getString('target_id')\r\n // Careful with null targetId\r\n if (targetId != null) {\r\n const product = productMap.get(targetId as string)\r\n if (product != null) {\r\n newItem.set('ml_products', product)\r\n result.push(newItem)\r\n }\r\n }\r\n }\r\n \r\n return result\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:3289','获取收藏列表异常:', e)\r\n return []\r\n }\r\n }\r\n\r\n // 获取足迹列表\r\n async getFootprints(): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('log','at utils/supabaseService.uts:3299','[getFootprints] 用户未登录')\r\n const empty: any[] = []\r\n return empty\r\n }\r\n\r\n __f__('log','at utils/supabaseService.uts:3304','[getFootprints] 查询足迹, userId:', userId)\r\n\r\n // 1. 获取足迹记录\r\n const response = await supa\r\n .from('ml_user_footprints')\r\n .select('*')\r\n .eq('user_id', userId!)\r\n .order('updated_at', { ascending: false })\r\n .limit(50)\r\n .execute()\r\n\r\n __f__('log','at utils/supabaseService.uts:3315','[getFootprints] 足迹查询 error:', response.error)\r\n __f__('log','at utils/supabaseService.uts:3316','[getFootprints] 足迹查询 data:', JSON.stringify(response.data))\r\n\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:3319','[getFootprints] 获取足迹失败:', response.error)\r\n const empty: any[] = []\r\n return empty\r\n }\r\n\r\n const footprints = response.data as any[]\r\n if (footprints == null || footprints.length === 0) {\r\n __f__('log','at utils/supabaseService.uts:3326','[getFootprints] 没有足迹记录')\r\n const empty: any[] = []\r\n return empty\r\n }\r\n\r\n __f__('log','at utils/supabaseService.uts:3331','[getFootprints] 足迹记录数量:', footprints.length)\r\n\r\n // 2. 收集商品ID\r\n const productIds: string[] = []\r\n for (let i = 0; i < footprints.length; i++) {\r\n let item = footprints[i]\r\n let pid = ''\r\n if (item instanceof UTSJSONObject) {\r\n pid = item.getString('product_id') ?? ''\r\n } else {\r\n const itemObj = JSON.parse(JSON.stringify(item)) as UTSJSONObject\r\n pid = itemObj.getString('product_id') ?? ''\r\n }\r\n if (pid !== '' && !productIds.includes(pid)) productIds.push(pid)\r\n }\r\n\r\n if (productIds.length === 0) return []\r\n \r\n const productIdsAny: any[] = []\r\n for(let i=0; i()\r\n for(let i=0; i {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('log','at utils/supabaseService.uts:3463','[addFootprint] 用户未登录')\r\n return false\r\n }\r\n \r\n __f__('log','at utils/supabaseService.uts:3467','[addFootprint] 添加足迹, userId:', userId, 'productId:', productId)\r\n \r\n // 检查是否已存在\r\n const checkRes = await supa\r\n .from('ml_user_footprints')\r\n .select('id')\r\n .eq('user_id', userId!)\r\n .eq('product_id', productId)\r\n .execute()\r\n \r\n __f__('log','at utils/supabaseService.uts:3477','[addFootprint] 检查结果 error:', checkRes.error)\r\n __f__('log','at utils/supabaseService.uts:3478','[addFootprint] 检查结果 data:', JSON.stringify(checkRes.data))\r\n\r\n const checkData = checkRes.data as any[]\r\n const exists = checkData != null && Array.isArray(checkData) && checkData.length > 0\r\n \r\n if (checkRes.error == null && exists) {\r\n __f__('log','at utils/supabaseService.uts:3484','[addFootprint] 足迹已存在,更新时间')\r\n // 更新时间\r\n const updateRes = await supa\r\n .from('ml_user_footprints')\r\n .update({ updated_at: new Date().toISOString() })\r\n .eq('user_id', userId!)\r\n .eq('product_id', productId)\r\n .execute()\r\n __f__('log','at utils/supabaseService.uts:3492','[addFootprint] 更新结果 error:', updateRes.error)\r\n } else {\r\n __f__('log','at utils/supabaseService.uts:3494','[addFootprint] 足迹不存在,插入新记录')\r\n // 插入新记录\r\n const insertPayload = new UTSJSONObject()\r\n insertPayload.set('user_id', userId!)\r\n insertPayload.set('product_id', productId)\r\n insertPayload.set('created_at', new Date().toISOString())\r\n insertPayload.set('updated_at', new Date().toISOString())\r\n \r\n const insertRes = await supa\r\n .from('ml_user_footprints')\r\n .insert(insertPayload)\r\n .execute()\r\n __f__('log','at utils/supabaseService.uts:3506','[addFootprint] 插入结果 error:', insertRes.error)\r\n }\r\n return true\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:3510','[addFootprint] 添加足迹异常:', e)\r\n return false\r\n }\r\n }\r\n\r\n async getAddressList(): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n const empty: UserAddress[] = []\r\n return empty\r\n }\r\n\r\n const response = await supa\r\n .from('ml_user_addresses')\r\n .select('*, recipient_name:receiver_name, phone:receiver_phone, detail_address:address_detail')\r\n .eq('user_id', userId!)\r\n .order('is_default', { ascending: false })\r\n .order('created_at', { ascending: false })\r\n .execute()\r\n\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:3532','获取地址列表失败:', response.error)\r\n const empty: UserAddress[] = []\r\n return empty\r\n }\r\n return response.data as UserAddress[]\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:3538','获取地址列表异常:', e)\r\n const empty: UserAddress[] = []\r\n return empty\r\n }\r\n }\r\n\r\n // 设置默认地址\r\n async setDefaultAddress(addressId: string): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('error','at utils/supabaseService.uts:3549','用户未登录,无法设置默认地址')\r\n return false\r\n }\r\n\r\n // 先取消所有默认地址\r\n await this.clearDefaultAddress(userId!)\r\n\r\n // 设置新的默认地址\r\n const response = await supa\r\n .from('ml_user_addresses')\r\n .update({\r\n is_default: true,\r\n updated_at: new Date().toISOString()\r\n })\r\n .eq('id', addressId)\r\n .eq('user_id', userId!)\r\n .execute()\r\n\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:3568','设置默认地址失败:', response.error)\r\n return false\r\n }\r\n\r\n return true\r\n } catch (error) {\r\n __f__('error','at utils/supabaseService.uts:3574','设置默认地址异常:', error)\r\n return false\r\n }\r\n }\r\n\r\n // 获取用户优惠券列表\r\n async getUserCoupons(status: number = 1): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n const empty: UserCoupon[] = []\r\n return empty\r\n }\r\n\r\n // 假设有一个视图或者直接关联 ml_user_coupons 和 ml_coupon_templates\r\n // 这里简化处理,尝试直接从 ml_user_coupons 读取,并且加入 template 信息\r\n // 如果没有 view,可能需要改为两个查询或者使用 left join\r\n const response = await supa\r\n .from('ml_user_coupons')\r\n .select(`\r\n *,\r\n template:ml_coupon_templates(name, amount, min_spend)\r\n `)\r\n .eq('user_id', userId!)\r\n .eq('status', status)\r\n .order('expire_at', { ascending: true })\r\n .execute()\r\n\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:3603','获取优惠券失败:', response.error)\r\n const empty: UserCoupon[] = []\r\n return empty\r\n }\r\n\r\n // 映射数据,将 template 的字段展平\r\n const coupons: UserCoupon[] = []\r\n const rawData = response.data as any[]\r\n for (let i = 0; i < rawData.length; i++) {\r\n const item = rawData[i]\r\n let template: any | null = null\r\n let itemId = ''\r\n let itemUserId = ''\r\n let itemTmplId = ''\r\n let itemCode = ''\r\n let itemStatus = 0\r\n let itemRecv = ''\r\n let itemExpire = ''\r\n \r\n if (item instanceof UTSJSONObject) {\r\n template = item.get('template') as any | null\r\n itemId = item.getString('id') ?? ''\r\n itemUserId = item.getString('user_id') ?? ''\r\n itemTmplId = item.getString('template_id') ?? ''\r\n itemCode = item.getString('coupon_code') ?? ''\r\n itemStatus = item.getNumber('status') ?? 0\r\n itemRecv = item.getString('received_at') ?? ''\r\n itemExpire = item.getString('expire_at') ?? ''\r\n } else {\r\n const iObj = JSON.parse(JSON.stringify(item)) as UTSJSONObject\r\n template = iObj.get('template') as any | null\r\n itemId = iObj.getString('id') ?? ''\r\n itemUserId = iObj.getString('user_id') ?? ''\r\n itemTmplId = iObj.getString('template_id') ?? ''\r\n itemCode = iObj.getString('coupon_code') ?? ''\r\n itemStatus = iObj.getNumber('status') ?? 0\r\n itemRecv = iObj.getString('received_at') ?? ''\r\n itemExpire = iObj.getString('expire_at') ?? ''\r\n }\r\n \r\n if (template == null) template = new UTSJSONObject()\r\n \r\n let tName = ''\r\n let tAmount = 0\r\n let tMin = 0\r\n \r\n if (template instanceof UTSJSONObject) {\r\n tName = template.getString('name') ?? '优惠券'\r\n tAmount = template.getNumber('amount') ?? 0\r\n tMin = template.getNumber('min_spend') ?? 0\r\n } else {\r\n const tObj = JSON.parse(JSON.stringify(template)) as UTSJSONObject\r\n tName = tObj.getString('name') ?? '优惠券'\r\n tAmount = tObj.getNumber('amount') ?? 0\r\n tMin = tObj.getNumber('min_spend') ?? 0\r\n }\r\n\r\n const couponObj = new UTSJSONObject()\r\n couponObj.set('id', itemId)\r\n couponObj.set('user_id', itemUserId)\r\n couponObj.set('template_id', itemTmplId)\r\n couponObj.set('coupon_code', itemCode)\r\n couponObj.set('status', itemStatus)\r\n couponObj.set('received_at', itemRecv)\r\n couponObj.set('expire_at', itemExpire)\r\n couponObj.set('template_name', tName)\r\n couponObj.set('amount', tAmount)\r\n couponObj.set('min_spend', tMin)\r\n \r\n coupons.push(couponObj as UserCoupon)\r\n }\r\n\r\n return coupons\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:3677','获取优惠券异常:', e)\r\n const empty: UserCoupon[] = []\r\n return empty\r\n }\r\n }\r\n\r\n // 获取可用优惠券数量\r\n async getUserCouponCount(): Promise {\r\n try {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) return 0\r\n\r\n const response = await supa\r\n .from('ml_user_coupons')\r\n .select('id', { count: 'exact' })\r\n .eq('user_id', userId!)\r\n .eq('status', 1) // 1: unused\r\n .gt('expire_at', new Date().toISOString()) // 未过期\r\n .limit(1) // Limit to 1 to reduce data transfer, we only want the count\r\n .execute()\r\n\r\n if (response.error != null) {\r\n return 0\r\n }\r\n return response.total ?? 0\r\n } catch (e) {\r\n return 0\r\n }\r\n }\r\n\r\n // 获取店铺/商品可用优惠券\r\n async getAvailableCoupons(merchantId: string): Promise {\r\n return this.fetchShopCoupons(merchantId)\r\n }\r\n\r\n // ALIAS for Cache busting: 获取店铺优惠券\r\n async fetchShopCoupons(merchantId: string): Promise {\r\n try {\r\n // 查询该商家的优惠券 + 平台通用券 (merchant_id is null)\r\n // 注意:这里简化逻辑,实际可能需要联合查询用户是否已领取\r\n const response = await supa\r\n .from('ml_coupon_templates')\r\n .select('*')\r\n .or(`merchant_id.eq.${merchantId},merchant_id.is.null`)\r\n .eq('status', 1)\r\n .gt('end_time', new Date().toISOString())\r\n .order('discount_value', { ascending: false })\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:3727','Fetch coupons failed:', response.error)\r\n const empty: any[] = []\r\n return empty\r\n }\r\n \r\n const data = response.data\r\n if (data == null) {\r\n const empty: any[] = []\r\n return empty\r\n }\r\n return data as any[]\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:3739','Fetch coupons error:', e)\r\n const empty: any[] = []\r\n return empty\r\n }\r\n }\r\n\r\n // 领取优惠券\r\n async claimCoupon(templateId: string, userId: string): Promise {\r\n return this.claimShopCoupon(templateId, userId)\r\n }\r\n\r\n // ALIAS for Cache busting\r\n async claimShopCoupon(templateId: string, userId: string): Promise {\r\n try {\r\n __f__('log','at utils/supabaseService.uts:3753','Claiming coupon templateId:', templateId, 'userId:', userId)\r\n\r\n // 1. Fetch template details to get merchant_id and validity\r\n const tmplRes = await supa\r\n .from('ml_coupon_templates')\r\n .select('*')\r\n .eq('id', templateId)\r\n .limit(1)\r\n .execute()\r\n \r\n if (tmplRes.error != null) {\r\n __f__('error','at utils/supabaseService.uts:3764','Claim Coupon: Template query error', tmplRes.error)\r\n return false\r\n }\r\n\r\n // Null check for data\r\n if (tmplRes.data == null) {\r\n __f__('error','at utils/supabaseService.uts:3770','Claim Coupon: Template data response is null')\r\n return false\r\n }\r\n \r\n const dataList = tmplRes.data as any[]\r\n if (dataList.length === 0) {\r\n __f__('error','at utils/supabaseService.uts:3776','Claim Coupon: Template not found (empty list)')\r\n return false\r\n }\r\n\r\n const template = dataList[0]\r\n \r\n // Safe property access\r\n let validDays = 0\r\n let endTimeStr: string | null = null\r\n let merchantId: string | null = null\r\n \r\n if (template instanceof UTSJSONObject) {\r\n validDays = template.getNumber('valid_days') ?? 0\r\n endTimeStr = template.getString('end_time')\r\n merchantId = template.getString('merchant_id')\r\n } else {\r\n const tJson = JSON.parse(JSON.stringify(template)) as UTSJSONObject\r\n validDays = tJson.getNumber('valid_days') ?? 0\r\n endTimeStr = tJson.getString('end_time')\r\n merchantId = tJson.getString('merchant_id')\r\n }\r\n \r\n // Calculate expire_at\r\n let expireAt = new Date(Date.now() + 30 * 24 * 60 * 60 * 1000).toISOString()\r\n if (validDays > 0) {\r\n expireAt = new Date(Date.now() + (validDays * 24 * 60 * 60 * 1000)).toISOString()\r\n } else if (endTimeStr != null && endTimeStr !== '') {\r\n expireAt = endTimeStr\r\n }\r\n \r\n // Handle UUID fields: Empty string is not valid UUID, must be null\r\n if (merchantId != null && merchantId.length === 0) {\r\n merchantId = null\r\n }\r\n\r\n // 2. Insert into user coupons with merchant_id\r\n const insertData = {\r\n user_id: userId,\r\n template_id: templateId,\r\n merchant_id: merchantId, // Important for shop filtering: null for platform coupons\r\n coupon_code: 'C' + Date.now() + Math.floor(Math.random() * 1000), \r\n status: 1, \r\n expire_at: expireAt,\r\n received_at: new Date().toISOString()\r\n }\r\n \r\n __f__('log','at utils/supabaseService.uts:3822','Claim Coupon Insert Payload:', JSON.stringify(insertData))\r\n\r\n const response = await supa\r\n .from('ml_user_coupons')\r\n .insert(insertData)\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:3830','Claim Coupon: Insert failed:', JSON.stringify(response.error))\r\n // 尝试降级:如果 merchant_id 报错,尝试不带 merchant_id (仅调试用,或兼容旧表结构)\r\n if (JSON.stringify(response.error).includes('merchant_id')) {\r\n __f__('log','at utils/supabaseService.uts:3833','Retrying without merchant_id...')\r\n const fallbackData = {\r\n user_id: userId,\r\n template_id: templateId,\r\n coupon_code: 'C' + Date.now() + Math.random().toString().substring(2,6),\r\n status: 1,\r\n expire_at: expireAt,\r\n received_at: new Date().toISOString()\r\n }\r\n const res2 = await supa.from('ml_user_coupons').insert(fallbackData).execute()\r\n if (res2.error == null) return true\r\n }\r\n return false\r\n }\r\n return true\r\n } catch(e) {\r\n __f__('error','at utils/supabaseService.uts:3849','Claim coupon error:', e)\r\n return false\r\n }\r\n }\r\n\r\n // ==========================================\r\n // 聊天相关方法\r\n // ==========================================\r\n\r\n // 获取特定会话的消息历史\r\n async getChatMessages(merchantId: string, page: number = 1, pageSize: number = 20): Promise {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n const empty: ChatMessage[] = []\r\n return empty\r\n }\r\n \r\n // 计算分页 range\r\n const fromIndex = (page - 1) * pageSize\r\n const toIndex = fromIndex + pageSize - 1\r\n\r\n try {\r\n // 使用 or 组合条件查询:(sender_id=me AND receiver_id=merchant) OR (sender_id=merchant AND receiver_id=me)\r\n // 注意:Supabase postgrest-js 的 .or() 语法如果是针对同一列很简单,针对复杂逻辑用 string syntax\r\n // 这里简化处理,如果不加 userId 过滤,全靠 RLS\r\n const response = await supa\r\n .from('ml_chat_messages')\r\n .select('*')\r\n .or(`sender_id.eq.${merchantId},receiver_id.eq.${merchantId}`)\r\n .order('created_at', { ascending: false })\r\n .range(fromIndex, toIndex)\r\n .execute()\r\n\r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:3883','getChatMessages error:', response.error)\r\n const empty: ChatMessage[] = []\r\n return empty\r\n }\r\n \r\n const data = response.data\r\n if (data == null) {\r\n const empty: ChatMessage[] = []\r\n return empty\r\n }\r\n\r\n return data as ChatMessage[]\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:3896','getChatMessages exception:', e)\r\n const empty: ChatMessage[] = []\r\n return empty\r\n }\r\n }\r\n\r\n // 发送消息\r\n async sendMessage(merchantId: string, content: string, msgType: string = 'text'): Promise {\r\n // 确保 session 有效\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) {\r\n __f__('error','at utils/supabaseService.uts:3907',\"sendMessage failed: user not logged in or session lost\")\r\n return false\r\n }\r\n\r\n try {\r\n // Debug check\r\n // const session = supa.getSession()\r\n // __f__('log','at utils/supabaseService.uts:3914',\"Sending check: UserID\", userId, \"AuthID:\", session.user?.getString('id'))\r\n \r\n const msg = {\r\n sender_id: userId!,\r\n receiver_id: merchantId,\r\n content: content,\r\n msg_type: msgType,\r\n is_read: false,\r\n is_from_user: true\r\n }\r\n \r\n const response = await supa\r\n .from('ml_chat_messages')\r\n .insert(msg)\r\n .execute()\r\n \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:3931','sendMessage error:', response.error)\r\n return false\r\n }\r\n return true\r\n } catch (e) {\r\n __f__('error','at utils/supabaseService.uts:3936','sendMessage exception:', e)\r\n return false\r\n }\r\n }\r\n \r\n // 标记会话已读\r\n async markRead(merchantId: string): Promise {\r\n const userId = this.getCurrentUserId()\r\n if (userId == null) return false\r\n try {\r\n const response = await supa\r\n .from('ml_chat_messages')\r\n .update({ is_read: true })\r\n .eq('sender_id', merchantId)\r\n .eq('receiver_id', userId)\r\n .eq('is_read', false)\r\n .execute() \r\n\r\n if (response.error != null) return false\r\n } catch (e) { return false }\r\n return true\r\n }\r\n\r\n // 提交商品评价\r\n async submitProductReviews(reviews: Array): Promise {\r\n try {\r\n for (let i: number = 0; i < reviews.length; i++) {\r\n const review = reviews[i]\r\n const response = await supa\r\n .from('ml_product_reviews')\r\n .insert(review)\r\n .execute() \r\n if (response.error != null) {\r\n __f__('error','at utils/supabaseService.uts:3969','提交商品评价失败:', response.error)\r\n return false\r\n }\r\n }\r\n return true\r\n } catch (e) { \r\n __f__('error','at utils/supabaseService.uts:3975','提交商品评价失败:', e)\r\n return false \r\n }\r\n }\r\n\r\n // 提交店铺评价\r\n async submitShopReview(review: UTSJSONObject): Promise {\r\n try {\r\n const response = await supa\r\n .from('ml_shop_reviews')\r\n .insert(review)\r\n .execute() \r\n return response.error == null\r\n } catch (e) { \r\n __f__('error','at utils/supabaseService.uts:3989','提交店铺评价失败:', e)\r\n return false \r\n }\r\n }\r\n\r\n // 更新订单状态\r\n async updateOrderStatus(orderId: string, status: number): Promise {\r\n try {\r\n const updateData = new UTSJSONObject()\r\n updateData.set('order_status', status)\r\n const response = await supa\r\n .from('ml_orders')\r\n .update(updateData) \r\n .eq('id', orderId)\r\n .execute() \r\n return response.error == null\r\n } catch (e) { \r\n __f__('error','at utils/supabaseService.uts:4006','更新订单状态失败:', e)\r\n return false \r\n }\r\n }\r\n}\r\n\r\n// 导出单例实例\r\nexport const supabaseService = new SupabaseService()\r\n\r\n// 默认导出\r\nexport default supabaseService\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\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\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\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\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\n",null,null,null,null],"names":[],"mappings":";;;;;;;;;;;;;;+BAmFC,kBAAA;+BAxBc,gBAAA;AAHf,OAAuB,0BAAmB,CAAjC,UAAA;OAAc,0BAAmB,CAAzB,UAAA;+BAqBZ,kBAAA;+BAkFC,aAAA;+BAwHC,aAAA;;;;;;;;;YAhNP,IAAM,SAAS,IAAI,KAAK;YACxB,IAAM,YAAY,IAAI;YACtB,IAAM,eAAe,IAAI;YACzB,IAAM,OAAO;gBAAC;gBAAK;gBAAM;aAAK;YAC9B,IAAM,aAAa,IAAI;YAUvB,IAAM,WAAW,SAMZ,YALH,OAAM,IACN,QAAO,IACP,SAAQ,IACR,YAAW,KAAK,EAChB,QAAO;YAGT,IAAM,cAAc,IAAO,IAAI,MAAM,GAAA,WAAA,IAAA,EAAI;gBAAA,OAAA,eAAA;wBACvC,IAAI;4BAEF,IAAM,UAAU,MAAM,gBAAgB,cAAc,CAAC;4BACrD,IAAI,QAAO,EAAA,CAAI,IAAI,EAAE;gCACnB,SAAS,IAAI,GAAG,QAAQ,cAAc;gCACtC,SAAS,KAAK,GAAG,QAAQ,KAAK;gCAC9B,SAAS,MAAM,GAAG,QAAQ,cAAc;gCACxC,SAAS,SAAS,GAAG,QAAQ,UAAU;gCACvC,SAAS,KAAK,GAAG,QAAQ,KAAK,CAAA,EAAA,CAAI;gCAClC,aAAa,KAAK,GAAG,CAAA,KAAG,QAAQ,QAAQ,GAAA,MAAI,QAAQ,IAAI,GAAA,MAAI,QAAQ,QAAQ,EAAG,IAAI;8BAC9E,IAeN,CAfM;gCAEL,IAAM,kBAAkB,AAvB7B,mBAuBgD;gCAC3C,IAAI,gBAAe,EAAA,CAAI,IAAI,EAAE;oCAC3B,IAAM,YAAW,WAAA,iBAAA,CAAC,KAAK,KAAK,CAAC,gBAAe,EAAA,CAAI,MAAM,GAAA,iDAAC,EAAA,UAAI;oCAC3D,IAAM,eAAe,UAAU,IAAI,CAAC,IAAA,OAAI,OAAA;+CAAI,KAAK,EAAE,CAAA,GAAA,CAAK;;;oCACxD,IAAI,aAAY,EAAA,CAAI,IAAI,EAAE;wCACxB,SAAS,IAAI,GAAG,aAAa,IAAI;wCACjC,SAAS,KAAK,GAAG,aAAa,KAAK;wCACnC,SAAS,MAAM,GAAG,aAAa,MAAM;wCACrC,SAAS,SAAS,GAAG,aAAa,SAAS;wCAC3C,SAAS,KAAK,GAAG,aAAa,KAAK,CAAA,EAAA,CAAI;wCACvC,aAAa,KAAK,GAAG,CAAA,KAAG,aAAa,QAAQ,GAAA,MAAI,aAAa,IAAI,GAAA,MAAI,aAAa,QAAQ,EAAG,IAAI;;;;;yBAIxG,OAAO,kBAAO;4BACd,QAAQ,KAAK,CAAC,aAAa,OAAI;4BAE/B,IAAM,kBAAkB,AAxC3B,mBAwC8C;4BAC3C,IAAI,gBAAe,EAAA,CAAI,IAAI,EAAE;gCAC3B,IAAI;oCACF,IAAM,YAAW,WAAA,iBAAA,CAAC,KAAK,KAAK,CAAC,gBAAe,EAAA,CAAI,MAAM,GAAA,iDAAC,EAAA,UAAI;oCAC3D,IAAM,UAAU,UAAU,IAAI,CAAC,IAAA,OAAI,OAAA;+CAAI,KAAK,EAAE,CAAA,GAAA,CAAK;;;oCACnD,IAAI,QAAO,EAAA,CAAI,IAAI,EAAE;wCACnB,SAAS,IAAI,GAAG,QAAQ,IAAI;wCAC5B,SAAS,KAAK,GAAG,QAAQ,KAAK;wCAC9B,SAAS,MAAM,GAAG,QAAQ,MAAM;wCAChC,SAAS,SAAS,GAAG,QAAQ,SAAS;wCACtC,SAAS,KAAK,GAAG,QAAQ,KAAK,CAAA,EAAA,CAAI;wCAClC,aAAa,KAAK,GAAG,CAAA,KAAG,QAAQ,QAAQ,GAAA,MAAI,QAAQ,IAAI,GAAA,MAAI,QAAQ,QAAQ,EAAG,IAAI;;;iCAErF,OAAO,cAAG;oCACV,QAAQ,KAAK,CAAC,cAAc,GAAA;;;;iBAInC;YAAD;YAEA,UAAO,IAAC,QAAW;gBACjB,IAAI,OAAO,CAAC,KAAK,CAAA,EAAA,CAAI,IAAI,EAAE;oBACzB,OAAO,KAAK,GAAG,IAAI;oBACnB,UAAU,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA,EAAA,CAAI,MAAM;oBACzC,YAAY,UAAU,KAAK;;YAE/B;;YAEA,IAAM,YAAY,IAAC,KAAK,MAAM,CAAI;gBAChC,IAAI,SAAS,KAAK,CAAA,GAAA,CAAK,KAAK;oBAC1B,SAAS,KAAK,GAAG;kBACZ,IAEN,CAFM;oBACL,SAAS,KAAK,GAAG;;YAErB;YAEA,IAAM,iBAAiB,IAAC,GAAG,qBAAwB;gBACjD,SAAS,SAAS,GAAG,EAAE,MAAM,CAAC,KAAK;YACrC;YAEA,IAAM,cAAc,OAAK,WAAA,IAAA,EAAM;gBAAA,OAAA,eAAA;wBAC7B,IAAI,SAAS,IAAI,CAAA,EAAA,CAAI,IAAI;4BAmHpB,+BAlHa,QAAO,UAAU,OAAM;4BACvC;;wBAEF,IAAI,SAAS,KAAK,CAAA,EAAA,CAAI,IAAI;4BA+GrB,+BA9Ga,QAAO,WAAW,OAAM;4BACxC;;wBAEF,IAAI,aAAa,KAAK,CAAA,EAAA,CAAI,IAAI;4BA2GzB,+BA1Ga,QAAO,WAAW,OAAM;4BACxC;;wBAEF,IAAI,SAAS,MAAM,CAAA,EAAA,CAAI,IAAI;4BAuGtB,+BAtGa,QAAO,WAAW,OAAM;4BACxC;;wBAIF,IAAM,UAAU,aAAa,KAAK,CAAC,KAAK,CAAC;wBACzC,IAAM,WAAW,OAAO,CAAC,CAAC,CAAC,CAAA,EAAA,CAAI;wBAC/B,IAAM,OAAO,OAAO,CAAC,CAAC,CAAC,CAAA,EAAA,CAAI;wBAC3B,IAAM,WAAW,QAAQ,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;wBAGvC,IAAM,cAUD,iBATH,iBAAgB,SAAS,IAAI,EAC7B,QAAO,SAAS,KAAK,EACrB,WAAU,UACV,OAAM,MACN,WAAU,UACV,iBAAgB,SAAS,MAAM,EAC/B,cAAa,IACb,aAAY,SAAS,SAAS,EAC9B,QAAO,SAAS,KAAK;wBAGvB,IAAI,UAAU,KAAK;wBAEnB,IAAI,OAAO,KAAK,EAAE;4BAEhB,IAAM,aAUC,oBATH,iBAAgB,SAAS,IAAI,EAC7B,QAAO,SAAS,KAAK,EACrB,WAAU,UACV,OAAM,MACN,WAAU,UACV,iBAAgB,SAAS,MAAM,EAC/B,cAAa,IACX,aAAY,SAAS,SAAS,EAC9B,QAAO,SAAS,KAAK;4BAEzB,UAAU,MAAM,gBAAgB,aAAa,CAAC,UAAU,KAAK,EAAE;0BAC5D,IAGN,CAHM;4BAEL,UAAU,MAAM,gBAAgB,UAAU,CAAC;;wBAG7C,IAAI,SAAS;4BAEX,IAAM,kBAAkB,AA5I3B,mBA4I8C;4BAC3C,IAAI,oBAAW,cAAY,KAAE;4BAC7B,IAAI,gBAAe,EAAA,CAAI,IAAI,EAAE;gCAC3B,IAAI;oCACF,YAAW,WAAA,iBAAA,CAAC,KAAK,KAAK,CAAC,gBAAe,EAAA,CAAI,MAAM,GAAA,iDAAC,EAAA,UAAI;;iCACrD,OAAO,cAAG;oCACV,YAAY,KAAE;;;4BAKlB,IAAI,SAAS,SAAS,EAAE;gCACtB,UAAU,OAAO,CAAC,IAAA,KAAO;oCACvB,KAAK,SAAS,GAAG,KAAK;gCACxB;;;4BAGF,IAAI,OAAO,KAAK,EAAE;gCAChB,IAAM,QAAQ,UAAU,SAAS,CAAC,IAAA,OAAI,OAAA;2CAAI,KAAK,EAAE,CAAA,GAAA,CAAK,UAAU,KAAK;;gCACrE,IAAI,MAAK,GAAA,CAAK,CAAC,CAAC,EAAE;oCAChB,SAAS,CAAC,MAAM,GAAG,qBAUlB,6BATI,SAAS,CAAC,MAAM,MACnB,UAAM,SAAS,IAAI,EACnB,WAAO,SAAS,KAAK,EACrB,cAAU,UACV,UAAM,MACN,cAAU,UACV,YAAQ,SAAS,MAAM,EACvB,eAAW,SAAS,SAAS,EAC7B,WAAO,SAAS,KAAK,GACtB,EAAA,CAAA;;8BAEE,IAaN,CAbM;gCACL,IAAM,aAAY,WAChB,KAAI,UAAQ,KAAK,GAAG,IACpB,OAAM,SAAS,IAAI,EACnB,QAAO,SAAS,KAAK,EACrB,WAAU,UACV,OAAM,MACN,WAAU,UACV,SAAQ,SAAS,MAAM,EACvB,YAAW,SAAS,SAAS,EAC7B,QAAO,SAAS,KAAK;gCAEvB,UAAU,IAAI,CAAC;6BAChB;4BA/LA,mBAiMkB,aAAa,KAAK,SAAS,CAAC;4BAS5C,+BAND,QAAO,QACP,OAAM;4BAGR,WAAW,KAAK;gCA1NL;4BA4NX,GAAG,IAAI;0BACF,IAMN,CANM;4BACL,QAAQ,KAAK,CAAC,UAAO;4BAFlB,+BAID,QAAO,QACP,OAAM;;iBAGX;YAAD;YAEA,IAAM,kBAAkB,KAAK;gBAC3B,IAAM,QAAQ,WAAW,KAAK,CAAC,IAAI;gBACnC,IAAI,MAAK,EAAA,CAAI;oBAAI;;gBAGjB,IAAM,aAAa;gBACnB,IAAM,aAAa,MAAM,KAAK,CAAC;gBAC/B,IAAI,WAAU,EAAA,CAAI,IAAI,EAAE;oBACtB,SAAS,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA,EAAA,CAAI;;gBAIpC,IAAM,YAAY;gBAClB,IAAM,YAAY,MAAM,KAAK,CAAC;gBAC9B,IAAI,UAAS,EAAA,CAAI,IAAI,EAAE;oBACrB,SAAS,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA,EAAA,CAAI;;gBAIlC,IAAI,WAAW;gBACf,IAAI,SAAS,IAAI,CAAA,EAAA,CAAI;oBAAI,WAAW,SAAS,OAAO,CAAC,SAAS,IAAI,EAAE;;gBACpE,IAAI,SAAS,KAAK,CAAA,EAAA,CAAI;oBAAI,WAAW,SAAS,OAAO,CAAC,SAAS,KAAK,EAAE;;gBACtE,WAAW,SAAS,OAAO,CAAC,8BAAc,KAAK,IAAI;gBAGnD,IAAM,WAAW;gBACjB,IAAM,IAAI,SAAS,KAAK,CAAC;gBACzB,IAAI,EAAC,EAAA,CAAI,IAAI,EAAE;oBACb,IAAM,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA,EAAA,CAAI;oBACzB,IAAM,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA,EAAA,CAAI;oBACrB,IAAM,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA,EAAA,CAAI;oBACzB,IAAM,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA,EAAA,CAAI;oBACvB,aAAa,KAAK,GAAG,CAAA,KAAG,SAAS,IAAI,KAAE,MAAI,KAAK,IAAI,KAAE,MAAI,SAAS,IAAI,EAAE,EAAG,IAAI;oBAChF,SAAS,MAAM,GAAG,OAAO,IAAI;kBACxB,IAEN,CAFM;oBACL,SAAS,MAAM,GAAG;;YAEtB;YACA,IAAM,gBAAgB,KAAK;gBAxKrB,+BA0KF,QAAO,MACP,UAAS,cACT,UAAS,IAAC,KAAK,mBAAsB;oBACnC,IAAI,IAAI,OAAO,EAAE;wBAEf,gBAAgB,aAAa,CAAC,UAAU,KAAK,EAAE,IAAI,CAAC,IAAC,QAAW;4BAC9D,IAAI,SAAS;gCAEX,IAAM,kBAAkB,AA9PnC,mBA8PsD;gCAC3C,IAAI,gBAAe,EAAA,CAAI,IAAI,EAAE;oCAC3B,IAAI;wCACF,IAAI,YAAW,WAAA,iBAAA,CAAC,KAAK,KAAK,CAAC,gBAAe,EAAA,CAAI,MAAM,GAAA,iDAAC,EAAA,UAAI;wCACzD,YAAY,UAAU,MAAM,CAAC,IAAA,OAAI,OAAA;mDAAI,KAAK,EAAE,CAAA,GAAA,CAAK,UAAU,KAAK;;;wCAxQ3E,mBAyQ8B,aAAa,KAAK,SAAS,CAAC;;qCAC/C,OAAO,cAAG;wCACV,QAAQ,KAAK,CAAC,cAAc,GAAA;;;gCAjErC,+BAsEO,QAAO,QACP,OAAM;gCAGR,WAAW,KAAK;oCAtSb;gCAwSH,GAAG,IAAI;8BACF,IAMN,CANM;gCACL,QAAQ,KAAK,CAAC,UAAO;gCA9E1B,+BAgFO,QAAO,QACP,OAAM;;wBAGZ;;;gBAEJ;;YAEJ;;;uBA9WE,IAkDO,QAAA,IAlDD,WAAM,mBAAgB;oBAC1B,IAgDc,eAAA,IAhDD,WAAM,qBAAoB,eAAU;wBACjD,IAiBO,QAAA,IAjBD,WAAM,eAAY;4BACtB,IAGO,QAAA,IAHD,WAAM,cAAW;gCACrB,IAA8B,QAAA,IAAxB,WAAM,UAAQ;gCACpB,IAAsE,SAAA,IAA/D,WAAM,yBAAiB,SAAS,IAAI;oCAAb,SAAS,IAAI,GAAA,SAAA,MAAA,CAAA,KAAA;gCAAA;kCAAE,iBAAY;;;;;4BAE3D,IAGO,QAAA,IAHD,WAAM,cAAW;gCACrB,IAA+B,QAAA,IAAzB,WAAM,UAAQ;gCACpB,IAAmG,SAAA,IAA5F,WAAM,yBAAiB,SAAS,KAAK;oCAAd,SAAS,KAAK,GAAA,SAAA,MAAA,CAAA,KAAA;gCAAA;kCAAE,UAAK,UAAS,eAAU,MAAK,iBAAY;;;;;4BAEzF,IAGO,QAAA,IAHD,WAAM,cAAW;gCACrB,IAA+B,QAAA,IAAzB,WAAM,UAAQ;gCACpB,IAAqE,SAAA,IAA9D,WAAM,yBAAiB,aAAA,KAAY;oCAAZ,aAAY,KAAA,GAAA,SAAA,MAAA,CAAA,KAAA;gCAAA;kCAAE,iBAAY;;;;;4BAE1D,IAGO,QAAA,IAHD,WAAM,cAAW;gCACrB,IAA+B,QAAA,IAAzB,WAAM,UAAQ;gCACpB,IAAuE,SAAA,IAAhE,WAAM,yBAAiB,SAAS,MAAM;oCAAf,SAAS,MAAM,GAAA,SAAA,MAAA,CAAA,KAAA;gCAAA;kCAAE,iBAAY;;;;;;wBAI/D,IAsBO,QAAA,IAtBD,WAAM,eAAY;4BACtB,IAIO,QAAA,IAJD,WAAM,cAAW;gCACrB,IAA+B,QAAA,IAAzB,WAAM,UAAQ;gCACpB,IAA0I,YAAA,IAAhI,WAAM,kCAA0B,WAAA,KAAU,mBAAyD,GAAA;oCAAnE,WAAU,KAAA,GAAA,SAAA,MAAA,CAAA,KAAA;gCAAA;kCAA0C,kBAAxC,iBAAY,qBAA6C,eAAU;;;;gCACzH,IAAiE,QAAA,IAA3D,WAAM,cAAY;;4BAE1B,IAWO,QAAA,IAXD,WAAM,cAAW;gCACrB,IAA6B,QAAA,IAAvB,WAAM,UAAQ;gCACpB,IAQO,QAAA,IARD,WAAM,mBAAgB;oCAC1B,IAMiB,UAAA,IAAA,EAAA,cAAA,UAAA,CALD,MAAI,IAAX,KAAA,OAAA,SAAG,UAAA,GAAA,CAAA;+CADZ,IAMiB,QAAA,IAJd,SAAK,KACN,WAAK,IAAA;4CAAC;4CACE,IAAA,aAAA,SAAA,KAAA,CAAA,GAAA,CAAA;yCAAkC,GACzC,aAAK,KAAA;4CAAE,UAAU;wCAAG;+CACnB,MAAG,EAAA,EAAA;4CAAA;yCAAA;;;;;4BAGX,IAGO,QAAA,IAHD,WAAM,0BAAuB;gCACjC,IAAmC,QAAA,IAA7B,WAAM,UAAQ;gCACpB,IAAiF,mBAAA,IAAxE,aAAS,SAAS,SAAS,EAAE,WAAM,WAAW,cAAQ;;;;;wBAInE,IAGS,QAAA,IAHH,WAAM,eAAY;4BACpB,IAAyD,UAAA,IAAjD,WAAM,YAAY,aAAO,cAAa;uCAChC,OAAA,KAAM,GAApB;gCAAA,IAA+E,UAAA,gBAAzD,WAAM,cAAc,aAAO,gBAAe;4BAAM"} \ No newline at end of file diff --git a/unpackage/cache/.app-android/sourcemap/pages/mall/consumer/address-list.kt.map b/unpackage/cache/.app-android/sourcemap/pages/mall/consumer/address-list.kt.map deleted file mode 100644 index 92bc3b6a..00000000 --- a/unpackage/cache/.app-android/sourcemap/pages/mall/consumer/address-list.kt.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["pages/mall/consumer/address-list.uvue","uni_modules/ak-req/ak-req.uts","pages/user/terms.uvue","pages/user/login.uvue","pages/mall/consumer/index.uvue","pages/user/center.uvue"],"sourcesContent":["\r\n\r\n\r\n\r\n\r\n",null,null,null,null,null],"names":[],"mappings":";;;;;;;;;;;;;;+BAiKQ,WAAA;+BA5GF,kBAAA;+BAbS,gBAAA;;AAHf,OAA+B,0BAAmB,CAAzC,UAAA;OAAsB,0BAAmB,CAAjC,UAAA;;;;;;;;;;;;YAejB,IAAM,YAAY,QAAI;YACtB,IAAM,gBAAgB,IAAI,OAAO,EAAE,KAAK;YAExC,IAAM,gBAAgB,OAAK,WAAA,IAAA,EAAM;gBAAA,OAAA,eAAA;wBAC/B,IAAI;4BAEF,IAAM,oBAAoB,MAAM,gBAAgB,YAAY;4BAG5D,IAAM,uBAAuB,kBAAkB,GAAG,CAAC,IAAC,oBAA4B,QAAU;gCACxF,OAUK,QATH,KAAI,KAAK,EAAE,EACX,OAAM,KAAK,cAAc,EACzB,QAAO,KAAK,KAAK,EACjB,WAAU,KAAK,QAAQ,EACvB,OAAM,KAAK,IAAI,EACf,WAAU,KAAK,QAAQ,EACvB,SAAQ,KAAK,cAAc,EAC3B,YAAW,KAAK,UAAU,EAC1B,QAAO;4BAEX;;4BAEA,UAAU,KAAK,GAAG;+CAGC,aAAa,KAAK,SAAS,CAAC,UAAU,KAAK;;yBAC9D,OAAO,kBAAO;4BACd,QAAQ,KAAK,CAAC,aAAa,OAAI;4BAE/B,IAAM,kBAAkB,AA7BtB,mBA6ByC;4BAC3C,IAAI,gBAAe,EAAA,CAAI,IAAI,EAAE;gCAC3B,IAAI;oCACF,UAAU,KAAK,GAAE,WAAA,iBAAA,CAAC,KAAK,KAAK,CAAC,gBAAe,EAAA,CAAI,MAAM,GAAA,gDAAC,EAAA,UAAI;kCAC3D,OAAO,cAAG;oCACV,QAAQ,KAAK,CAAC,YAAY,GAAA;oCAC1B,UAAU,KAAK,GAAG,KAAE;;8BAEjB,IAEN,CAFM;gCACL,UAAU,KAAK,GAAG,KAAE;;;iBAGzB;YAAD;YAEA,UAAO,IAAC,QAAW;gBACjB,IAAI,OAAO,CAAC,aAAa,CAAA,EAAA,CAAI,QAAQ;oBACnC,cAAc,KAAK,GAAG,IAAI;;YAE9B;;YAEA,UAAO,KAAK;gBACV;YACF;;YAKA,IAAM,iBAAiB,IAAC,MAAM,UAAU,MAAM,CAAG;gBAC/C,OAAO,KAAG,KAAK,QAAQ,GAAG,KAAK,IAAI,GAAG,KAAK,QAAQ,GAAA,MAAI,KAAK,MAAM;YACpE;YAEA,IAAM,aAAa,KAAK;iDAEpB,MAAK;YAET;YAGA,IAAM,gBAAgB,IAAC,IAAI,MAAM,CAAI;+CAE7B,QAAO,MACP,UAAS,cACT,UAAS,IAAC,IAAO;oBACb,IAAI,IAAI,OAAO,EAAE;wBAEb,gBAAgB,aAAa,CAAC,IAAI,IAAI,CAAC,IAAC,QAAW;4BAC/C,IAAI,SAAS;gCAET,IAAM,QAAQ,UAAU,KAAK,CAAC,SAAS,CAAC,IAAA,OAAI,OAAA;2CAAI,KAAK,EAAE,CAAA,GAAA,CAAK;;gCAC5D,IAAI,MAAK,GAAA,CAAK,CAAC,CAAC,EAAE;oCACd,UAAU,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;uDAEZ,aAAa,KAAK,SAAS,CAAC,UAAU,KAAK;mEAE1D,QAAO,QACP,OAAM;;8BAGX,IAMN,CANM;gCACH,QAAQ,KAAK,CAAC,UAAO;+DAEjB,QAAO,QACP,OAAM;;wBAGlB;;;gBAER;;YAER;YAEA,IAAM,cAAc,IAAC,IAAI,MAAM,CAAI;iDAE/B,MAAK,0CAAwC;YAEjD;YAEA,IAAM,gBAAgB,IAAC,MAAM,QAAW;gBACtC,IAAI,cAAc,KAAK,EAAE;oBACnB,UAAM,mBAAmB;wBAC3B,IAAA,KAAI,KAAK,EAAE;wBACX,IAAA,iBAAgB,KAAK,IAAI;wBACzB,IAAA,QAAO,KAAK,KAAK;wBACjB,IAAA,WAAU,KAAK,QAAQ;wBACvB,IAAA,OAAM,KAAK,IAAI;wBACf,IAAA,WAAU,KAAK,QAAQ;wBACvB,IAAA,SAAQ,KAAK,MAAM;wBACnB,IAAA,aAAY,KAAK,SAAS;qBAC3B;oBAlIU;kBAoIN,IAEN,CAFM;oBACL,YAAY,KAAK,EAAE;;YAEvB;;uBA9KE,IA+BO,QAAA,IA/BD,WAAM,sBAAmB;oBAC7B,IAyBO,QAAA,IAzBD,WAAM,iBAAc;wBACZ,IAAA,UAAA,KAAS,CAAC,MAAM,CAAA,GAAA,CAAA,CAAA,EAA5B;4BAAA,IAGO,QAAA,gBAH6B,WAAM;gCACxC,IAAkC,QAAA,IAA5B,WAAM,eAAa;gCACzB,IAAsC,QAAA,IAAhC,WAAM,eAAa;;0BAG3B,KAAA;4BAAA,IAkBO,UAAA,IAAA,SAAA,CAAA,GAAA,cAAA,UAAA,CAlB8B,UAAA,KAAS,EAAA,IAAzB,MAAM,OAAN,SAAI,UAAA,GAAA,CAAA;uCAAzB,IAkBO,QAAA,IAlB0C,SAAK,KAAK,EAAE,EAAE,WAAM,gBAAgB,aAAK,KAAA;oCAAE,cAAc;gCAAI;;oCAC5G,IAQO,QAAA,IARD,WAAM,iBAAc;wCACxB,IAKO,QAAA,IALD,WAAM,gBAAa;4CACvB,IAA8C,QAAA,IAAxC,WAAM,cAAW,IAAI,KAAK,IAAI,GAAA,CAAA;4CACpC,IAAgD,QAAA,IAA1C,WAAM,eAAY,IAAI,KAAK,KAAK,GAAA,CAAA;uDAC1B,KAAK,SAAS,GAA1B;gDAAA,IAAyD,QAAA,gBAA7B,WAAM,gBAAc;4CAAE;;;;uDACtC,KAAK,KAAK,GAAtB;gDAAA,IAAiE,QAAA,gBAAzC,WAAM,kBAAe,KAAK,KAAK,GAAA,CAAA;4CAAA;;;;wCAEzD,IAA4D,QAAA,IAAtD,WAAM,iBAAc,IAAI,eAAe,QAAI,CAAA;;oCAEnD,IAOO,QAAA,IAPD,WAAM,iBAAc;wCACtB,IAEO,QAAA,IAFD,WAAM,eAAe,aAAK,cAAA,KAAA;4CAAO,YAAY,KAAK,EAAE;wCAAA;0CAAA;4CAAA;yCAAA;4CACtD,IAAmC,QAAA,IAA7B,WAAM,gBAAc;;;;wCAE9B,IAEO,QAAA,IAFD,WAAM,eAAe,aAAK,cAAA,KAAA;4CAAO,cAAc,KAAK,EAAE;wCAAA;0CAAA;4CAAA;yCAAA;4CACxD,IAAoC,QAAA,IAA9B,WAAM,gBAAc;;;;;;;;;;;;oBAMtC,IAEO,QAAA,IAFD,WAAM,eAAY;wBACtB,IAA2D,UAAA,IAAnD,WAAM,WAAW,aAAO,aAAY"} \ No newline at end of file diff --git a/unpackage/cache/.app-android/sourcemap/pages/mall/consumer/apply-refund.kt.map b/unpackage/cache/.app-android/sourcemap/pages/mall/consumer/apply-refund.kt.map deleted file mode 100644 index e457927e..00000000 --- a/unpackage/cache/.app-android/sourcemap/pages/mall/consumer/apply-refund.kt.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["pages/mall/consumer/apply-refund.uvue","pages/user/terms.uvue","pages/mall/consumer/index.uvue","uni_modules/ak-req/ak-req.uts"],"sourcesContent":["\r\n\r\n\r\n\r\n\r\n",null],"names":[],"mappings":";;;;;;;;;;;;;;+BAgSM,eAAA;+BAoDH,aAAA;;;;;;;;;YAnOH,IAAM,YAAY,IAAI,OAAO,EAAE,KAAK;YACpC,IAAM,cAAc,IAAI,MAAM,EAAE;YAChC,IAAM,YAAY,IAAI,MAAM,EAAE;YAC9B,IAAM,WAAW,IAAI,OAAO,EAAE,KAAK;YACnC,IAAM,aAAa,IAAI,MAAM,EAAE;YAC/B,IAAM,gBAAgB,IAAI,MAAM,EAAE;YAClC,IAAM,gBAA+B;gBAAC;gBAAQ;gBAAU;aAAQ,CAAA,GAA3C,SAAM,MAAM;YACjC,IAAM,kBAAkB,QAAU,MAAM,EAAI,CAAC;YAC7C,IAAM,mBAAmB,IAAI,OAAO,EAAE,KAAK;YAC3C,IAAM,qBAAqB,IAAI,OAAO,EAAE,KAAK;YAC7C,IAAM,eAAe,QAAU,MAAM,EAAI,IAAI,EAAE,CAAC,EAAE,CAAC;YAEnD,IAAM,UAAU,iBAWX,YAVH,KAAI,IACJ,WAAU,IACV,QAAO,IACP,SAAQ,SACR,WAAU,IACV,YAAW,CAAC,EACZ,YAAW,CAAC,EACZ,MAAK,IACL,aAAY,oBACZ,qBAAoB;YAGtB,IAAM,iBAAiB,OAAI,IAAI,CAAG;gBAChC,IAAI,cAAc,KAAK,CAAA,GAAA,CAAK,SAAS;oBACnC,cAAc,KAAK,GAAG;kBACjB,IAEN,CAFM;oBACL,cAAc,KAAK,GAAG;;gBAsMvB,+BAnMC,QAAO,SACP,OAAM;YAEV;YAEA,IAAM,gBAAgB,IAAC,YAAY,MAAM,GAAG,MAAM,CAAG;gBACnD,IAAI,WAAU,EAAA,CAAI,QAAQ;oBACxB,OAAO;kBACF,IAIN,CAJM,IAAI,WAAU,EAAA,CAAI,UAAU;oBACjC,OAAO;kBACF,IAEN,CAFM;oBACL,OAAO;;YAEX;YAEA,IAAM,cAAc,OAAU,WAAQ,IAAI,EAAI;gBAAA,OAAA,eAAA;wBAC5C,UAAU,KAAK,GAAG,IAAI;wBAEtB,IAAM,OAAO,aAAK,IAAI;wBACtB,IAAI,KAAI,EAAA,CAAI,IAAI,EAAE;4BAChB,QAAQ,KAAK,CAAC,KAAK,GAAG;4BACtB,UAAU,KAAK,GAAG,KAAK;4BACvB;;wBAGF,IAAM,YAAY,KAAK,SAAS,CAAC;wBACjC,IAAI,UAAS,EAAA,CAAI,IAAI,CAAA,EAAA,CAAI,UAAS,EAAA,CAAI,IAAI;4BACxC,QAAQ,KAAK,CAAC,KAAK,GAAG;4BACtB,UAAU,KAAK,GAAG,KAAK;4BACvB;;wBAGF,IAAM,SAAS,WAAS,IAAI,CAAA,KAAA,CAAA,EAAA,CAAO,MAAM;wBACzC,IAAM,UAA8B,oBAAlB,SAAQ,IAAI;wBAC9B,IAAM,SAAS,MAAM,aAAK,MAAM,CAAC,YAAY,QAAQ;wBACrD,IAAM,OAAO,OAAO,IAAI;wBACxB,IAAM,QAAQ,OAAO,KAAK;wBAE1B,IAAI,SAAM,OAAO,CAAC,MAAK,EAAA,CAAI,CAAA,KAAI,EAAA,UAAA,GAAA,CAAA,EAAC,MAAM,CAAA,CAAA,CAAG,CAAC,EAAE;4BAC1C,IAAM,UAAU,CAAA,KAAI,EAAA,UAAA,GAAA,CAAA,CAAA,CAAC,CAAC,CAAC,CAAA,EAAA,CAAI;4BAC3B,IAAM,iBAWD,YAVH,KAAI,IAAI,CAAA,KAAA,CAAA,EAAA,CAAO,MAAM,EACrB,WAAU,QAAQ,SAAS,CAAC,YAAW,EAAA,CAAI,IAC3C,QAAO,QAAQ,SAAS,CAAC,SAAQ,EAAA,CAAI,IACrC,SAAQ,QAAQ,SAAS,CAAC,UAAS,EAAA,CAAI,SACvC,WAAU,QAAQ,SAAS,CAAC,YAAW,EAAA,CAAI,IAC3C,YAAW,QAAQ,SAAS,CAAC,aAAY,EAAA,CAAI,CAAC,EAC9C,YAAW,QAAQ,SAAS,CAAC,aAAY,EAAA,CAAI,CAAC,EAC9C,MAAK,QAAQ,SAAS,CAAC,OAAM,EAAA,CAAI,IACjC,aAAY,QAAQ,SAAS,CAAC,cAAa,EAAA,CAAI,oBAC/C,qBAAoB,QAAQ,SAAS,CAAC,sBAAqB,EAAA,CAAI;4BAEjE,QAAQ,KAAK,GAAG;4BAEhB,IAAI,EAAE,UAAU,CAAA,EAAA,CAAI,IAAI,CAAA,EAAA,CAAI,EAAE,UAAU,CAAA,EAAA,CAAI,IAAI;gCAC9C,WAAW,KAAK,GAAG,EAAE,UAAU;;4BAGjC,eAAe;0BACV,IAkCN,CAlCM;4BACL,QAAQ,KAAK,CAAC,EAAE,GAAG,KAAK,SAAS,CAAC,MAAK,EAAA,CAAI;4BAC3C,QAAQ,KAAK,CAAC,QAAQ,GAAG,KAAK,SAAS,CAAC,YAAW,EAAA,CAAI;4BACvD,QAAQ,KAAK,CAAC,KAAK,GAAG,KAAK,SAAS,CAAC,SAAQ,EAAA,CAAI;4BAEjD,IAAI,QAAQ,KAAK,CAAC,QAAQ,CAAA,EAAA,CAAI,IAAI;gCAChC,IAAM,WAAW,QAAQ,KAAK,CAAC,KAAK;gCACpC,IAAI,SAAQ,EAAA,CAAI,IAAI,CAAA,EAAA,CAAI,SAAQ,EAAA,CAAI,IAAI;oCACtC,IAAM,QAAQ,SAAS,KAAK,CAAC;oCAC7B,IAAI,MAAM,MAAM,CAAA,CAAA,CAAG,CAAC,EAAE;wCACpB,QAAQ,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC;;;;4BAKvC,IAAM,aAAa,AAAI,cAAc;gCACnC,IAAA,KAAI,QAAQ,KAAK,CAAC,EAAE;gCACpB,IAAA,WAAU,QAAQ,KAAK,CAAC,QAAQ;gCAChC,IAAA,QAAO,QAAQ,KAAK,CAAC,KAAK;gCAC1B,IAAA,SAAQ,QAAQ,KAAK,CAAC,MAAM;gCAC5B,IAAA,qBAAoB,QAAQ,KAAK,CAAC,kBAAkB;6BACtD,EAAA,qBAAA,cAAA,2BAAA,GAAA,EAAA,EAAA;4BAEA,IAAM,eAAe,MAAM,aAAK,IAAI,CAAC,YAAY,MAAM,CAAC,YAAY,OAAO;4BAC3E,IAAI,aAAa,KAAK,CAAA,EAAA,CAAI,IAAI,EAAE;gCAC9B,IAAM,8BAMD,YALH,KAAI,QAAQ,KAAK,CAAC,EAAE,EACpB,WAAU,QAAQ,KAAK,CAAC,QAAQ,EAChC,QAAO,QAAQ,KAAK,CAAC,KAAK,EAC1B,SAAQ,QAAQ,KAAK,CAAC,MAAM,EAC5B,qBAAoB,QAAQ,KAAK,CAAC,kBAAkB;gCAEtD,eAAe;;;wBAInB,UAAU,KAAK,GAAG,KAAK;iBACxB;YAAD;YAEA,IAAM,cAAc,OAAU,WAAQ,IAAI,EAAI;gBAAA,OAAA,eAAA;wBAC5C,SAAS,KAAK,GAAG,IAAI;wBACrB,YAAY,KAAK,GAAG;wBACpB,UAAU,KAAK,GAAG;wBAElB,IAAI;4BACF,IAAM,QAAQ,MAAM,GAAG,QAAQ,KAAK,CAAC,EAAE,CAAA,EAAA,CAAI;4BAC3C,IAAM,4BAAa,uBAAA,qBAAA,cAAA,2BAAA,GAAA,EAAA,EAAA;gCACjB,IAAA,WAAU,QAAQ,KAAK,CAAC,QAAQ;gCAChC,IAAA,SAAQ,QAAQ,KAAK,CAAC,MAAM;gCAC5B,IAAA,WAAU,QAAQ,KAAK,CAAC,QAAQ;gCAChC,IAAA,YAAW,QAAQ,KAAK,CAAC,SAAS;gCAClC,IAAA,YAAW,QAAQ,KAAK,CAAC,SAAS;gCAClC,IAAA,MAAK,QAAQ,KAAK,CAAC,GAAG;gCACtB,IAAA,aAAY,QAAQ,KAAK,CAAC,UAAU;gCACpC,IAAA,qBAAoB,QAAQ,KAAK,CAAC,kBAAkB;6BACrD;4BAED,IAAM,SAAS,MAAM,aAClB,IAAI,CAAC,YACL,MAAM,CAAC,YACP,EAAE,CAAC,MAAM,QACT,OAAO;4BAEV,IAAI,OAAO,KAAK,CAAA,EAAA,CAAI,IAAI,EAAE;gCACxB,YAAY,KAAK,GAAG;8BACf,IAEN,CAFM;gCACL,UAAU,KAAK,GAAG;;;yBAEpB,OAAO,cAAG;4BACV,UAAU,KAAK,GAAG;;wBAGpB,SAAS,KAAK,GAAG,KAAK;iBACvB;YAAD;YAEA,IAAM,WAAW,OAAI,IAAI,CAAG;gBAC1B;YACF;YAEA,IAAM,UAAU,OAAI,MAAM,CAAG;gBAC3B,OAAO,KAAG,KAAK,GAAG,KAAE,MAAI,KAAK,KAAK,CAAC,KAAK,MAAM,GAAE,CAAA,CAAG,GAAG;YACxD;YAEA,IAAM,eAAe,OAAI,IAAI,CAAG;gBAC1B,mCACF,QAAO,CAAC,EACR,WAAU;oBAAC;iBAAa,EACxB,aAAY;oBAAC;oBAAS;iBAAS,EAC/B,UAAS,IAAC,KAAK,mBAAsB;oBACnC,IAAM,aAAa,IAAI,aAAa,CAAC,CAAC,CAAC;oBACvC,IAAM,SAAS,QAAQ,KAAK,CAAC,EAAE,CAAA,EAAA,CAAI;oBACnC,IAAI,MAAM;oBAEV,IAAM,YAAY,IAAI,SAAS;oBAC/B,IAAI,SAAM,OAAO,CAAC,WAAU,EAAA,CAAI,UAAU,MAAM,CAAA,CAAA,CAAG,CAAC,EAAE;wBACpD,IAAM,SAAS,sBAAsB,SAAS,CAAC,CAAC,CAAC;wBACjD,IAAM,WAAW,QAAQ,IAAI;wBAC7B,IAAI,SAAQ,EAAA,CAAI,IAAI,CAAA,EAAA,CAAI,SAAQ,EAAA,CAAI,IAAI;4BACtC,IAAM,MAAM,SAAS,WAAW,CAAC;4BACjC,IAAI,IAAG,EAAA,CAAI,CAAC,EAAE;gCACZ,MAAM,SAAS,SAAS,CAAC,IAAG,CAAA,CAAG,CAAC;;;;oBAKtC,IAAM,OAAO;oBACb,IAAM,aAAa,cAAY,SAAM,MAAI,OAAI,MAAI;oBAEjD,aAAK,OAAO,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,YAAY,YAAY,eAAE,EAAE,IAAI,CAAC,IAAC,aAAgB;wBACnF,IAAI,aAAa,MAAM,CAAA,EAAA,CAAI,GAAG,CAAA,EAAA,CAAI,aAAa,MAAM,CAAA,EAAA,CAAI,GAAG,EAAE;4BAC5D,IAAM,OAAO,aAAa,IAAI;4BAC9B,IAAI,KAAI,EAAA,CAAI,IAAI,EAAE;gCAChB,IAAM,UAAU,KAAI,EAAA,CAAI;gCACxB,IAAI,YAAY,QAAQ,SAAS,CAAC;gCAClC,IAAI,UAAS,EAAA,CAAI,IAAI,CAAA,EAAA,CAAI,UAAS,EAAA,CAAI,IAAI;oCACxC,YAAY,kDAAiD,CAAA,CAAG;oCAChE,WAAW,KAAK,GAAG;oCACnB,QAAQ,KAAK,CAAC,UAAU,GAAG;oCAC3B;oCAkBX,+BAjB2B,QAAO,SAAS,OAAM;;;0BAGrC,IAEN,CAFM;4BAcZ,+BAbuB,QAAO,QAAQ,OAAM;;oBAEzC;;gBACF;;YAEJ;YAEA,IAAM,gBAAgB,IAAC,GAAG,gBAAgB,IAAI,CAAG;gBAC/C,IAAM,OAAM,EAAE,MAAM,CAAC,KAAK;gBAC1B,IAAI,AADE,KACC,EAAA,CAAI,IAAI;oBACb,QAAQ,KAAK,CAAC,SAAS,GAAG,CAAC;kBACtB,IAEN,CAFM;oBACL,QAAQ,KAAK,CAAC,SAAS,GAAG,SAJtB;;YAMR;YAEA,IAAM,gBAAgB,IAAC,GAAG,gBAAgB,IAAI,CAAG;gBAC/C,IAAM,OAAM,EAAE,MAAM,CAAC,KAAK;gBAC1B,IAAI,AADE,KACC,EAAA,CAAI,IAAI;oBACb,QAAQ,KAAK,CAAC,SAAS,GAAG,CAAC;kBACtB,IAEN,CAFM;oBACL,QAAQ,KAAK,CAAC,SAAS,GAAG,SAJtB;;YAMR;YAEA,IAAM,sBAAsB,OAAI,IAAI,CAAG;gBACrC,IAAM,MAAM,cAAc,OAAO,CAAC,QAAQ,KAAK,CAAC,MAAM;gBACtD,gBAAgB,KAAK,GAAG;oBAAC,IAAA,IAAG,EAAA,CAAI,CAAC,EAAG;wBAAA;oBAAA,EAAM,IAAC,CAAD;AAAA,yBAAC;oBAAD;iBAAE;gBAC5C,iBAAiB,KAAK,GAAG,IAAI;YAC/B;YAEA,IAAM,2BAA2B,IAAC,GAAG,2BAA2B,IAAI,CAAG;gBACrE,IAAM,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC7B,gBAAgB,KAAK,GAAG;oBAAC,IAAA,CAAC,IAAG,EAAA,CAAI,CAAC,CAAA,EAAA,CAAI,IAAG,CAAA,CAAG,cAAc,MAAM,GAAI;wBAAA;oBAAA,EAAM,IAAC,CAAD;AAAA,yBAAC;oBAAD;iBAAE;YAC9E;YAEA,IAAM,sBAAsB,OAAI,IAAI,CAAG;gBACrC,QAAQ,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC,gBAAgB,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC9D,iBAAiB,KAAK,GAAG,KAAK;YAChC;YAEA,IAAM,uBAAuB,IAAC,MAAM,SAAM,MAAM,IAAI,IAAI,CAAG;gBACzD,aAAa,KAAK,GAAG;YACvB;YAEA,IAAM,wBAAwB,OAAI,IAAI,CAAG;gBACvC,IAAM,WAAW,QAAQ,KAAK,CAAC,QAAQ;gBACvC,IAAI,SAAQ,EAAA,CAAI,IAAI,CAAA,EAAA,CAAI,SAAQ,EAAA,CAAI,IAAI;oBACtC,IAAM,QAAQ,SAAS,KAAK,CAAC;oBAC7B,IAAI,MAAM,MAAM,CAAA,EAAA,CAAI,CAAC,EAAE;wBACrB,aAAa,KAAK,GAAG;4BAAC,SAAS,KAAK,CAAC,CAAC,CAAC;4BAAG,SAAS,KAAK,CAAC,CAAC,CAAC;4BAAG,SAAS,KAAK,CAAC,CAAC,CAAC;yBAAE;;;gBAGrF,mBAAmB,KAAK,GAAG,IAAI;YACjC;YAEA,IAAM,wBAAwB,OAAI,IAAI,CAAG;gBACvC,mBAAmB,KAAK,GAAG,KAAK;gBAChC,IAAM,IAAI,aAAa,KAAK,CAAC,CAAC,CAAC;gBAC/B,IAAM,IAAI,aAAa,KAAK,CAAC,CAAC,CAAC;gBAC/B,IAAM,IAAI,aAAa,KAAK,CAAC,CAAC,CAAC;gBAC/B,IAAM,KAAK,IAAA,EAAC,CAAA,CAAG,EAAE,EAAG;oBAAA,IAAG,CAAA,CAAG;gBAAA,EAAI,IAAM,CAAN;oBAAA,GAAE,CAAA,CAAG;gBAAA;gBACnC,IAAM,KAAK,IAAA,EAAC,CAAA,CAAG,EAAE,EAAG;oBAAA,IAAG,CAAA,CAAG;gBAAA,EAAI,IAAM,CAAN;oBAAA,GAAE,CAAA,CAAG;gBAAA;gBACnC,QAAQ,KAAK,CAAC,QAAQ,GAAG,KAAG,IAAC,MAAI,KAAE,MAAI;YACzC;YAEA,UAAU,KAAK;gBACb;YACF;;;;;;;uBA1YE,IAsGO,QAAA,IAtGD,WAAM,iBAAc;oBACxB,IAMO,QAAA,IAND,WAAM,gBAAa;wBACvB,IAIO,QAAA,IAJD,WAAM,oBAAiB;4BAC3B,IAES,UAAA,IAFD,WAAM,gBAAgB,aAAO,qBAChC,IAAA,cAAA,KAAa,CAAA,GAAA,CAAA,SAAA;gCAAA;4BAAA,EAAA,IAAA,CAAA;gCAAA;4BAAA;4BAAA,GAAA,CAAA;;;oBAKtB,IA4FO,QAAA,IA5FD,WAAM,iBAAc;wBACxB,IA0Fc,eAAA,IA1FD,eAAU,YAAW,WAAM;uCAC1B,UAAA,KAAS,GAArB;gCAAA,IAEO,QAAA,gBAFgB,WAAM;oCAC3B,IAAwC,QAAA,IAAlC,WAAM,iBAAe;;8BAGZ,KAAA;gCAAA,IAAA,QAAA,KAAO,CAAC,KAAK,CAAA,EAAA,CAAA,IAA9B;oCAAA,IAGO,QAAA,gBAH+B,WAAM;wCAC1C,IAAoC,QAAA,IAA9B,WAAM,eAAa;wCACzB,IAA6D,UAAA,IAArD,WAAM,gBAAgB,aAAO,cAAa;;kCAGpD,KAAA;oCAAA,IA+EO,QAAA,gBA/EM,WAAM;wCACjB,IAEO,QAAA,IAFD,WAAM,mBAAgB;4CAC1B,IAAwF,SAAA,IAAjF,WAAM,UAAU,SAAK,WAAA,KAAU,EAAE,UAAK,cAAc,aAAO;;;;wCAGpE,IAkEO,iBAAA,IAlEA,cAAQ,WAAQ,6BACrB,gBAGO,GAAA;mDAAA;gDAHP,IAGO,QAAA,IAHD,WAAM,gBAAa;oDACvB,IAAoC,QAAA,IAA9B,WAAM,gBAAc;oDAC1B,IAAyG,SAAA,IAAlG,WAAM,eAAc,UAAK,YAAW,UAAK,wBAAgB,QAAA,KAAO,CAAC,QAAQ;wDAAhB,QAAA,KAAO,CAAC,QAAQ,GAAA,SAAA,MAAA,CAAA,KAAA;oDAAA;sDAAE,iBAAY;;;;;gDAGhG,IAIO,QAAA,IAJD,WAAM,gBAAa;oDACvB,IAAmC,QAAA,IAA7B,WAAM,gBAAc;oDAC1B,IAAgG,SAAA,IAAzF,WAAM,wBAAuB,UAAK,SAAQ,UAAK,wBAAgB,QAAA,KAAO,CAAC,KAAK;wDAAb,QAAA,KAAO,CAAC,KAAK,GAAA,SAAA,MAAA,CAAA,KAAA;oDAAA;sDAAE,cAAA;;;;oDACrF,IAAqC,QAAA,IAA/B,WAAM,cAAY;;gDAG1B,IAmBO,QAAA,IAnBD,WAAM,gBAAa;oDACvB,IAAmC,QAAA,IAA7B,WAAM,gBAAc;oDAC1B,IAGO,QAAA,IAHD,WAAM,gBAAgB,aAAO;wDACjC,IAA2D,QAAA,IAAA,EAAA,IAAlD,cAAc,QAAA,KAAO,CAAC,MAAM,CAAA,EAAA,CAAA,WAAA,CAAA;wDACrC,IAAmC,QAAA,IAA7B,WAAM,iBAAe;;+DAEjB,iBAAA,KAAgB,GAA5B;wDAAA,IAYO,QAAA,gBAZuB,WAAM;4DAClC,IAMc,wBAAA,IAND,WAAM,eAAe,WAAO,gBAAA,KAAe,EAAG,qBAAiB,iBAAkB,cAAQ,wDACpG,gBAIqB,GAAA;uEAAA;oEAJrB,IAIqB,+BAAA,IAJD,WAAqB,IAArB,IAAA,WAAA,0CACZ,gBAAiC,GAAA;+EAAA;4EAAvC,IAEO,UAAA,IAAA,EAAA,cAAA,UAAA,CAFkB,eAAa,IAAxB,GAAG,KAAH,SAAC,UAAA,GAAA,CAAA;uFAAf,IAEO,QAAA,IAFkC,SAAK,GAAG,WAAM,oBAClD,cAAc,KAAC,CAAA;;;;;;;;;;4DAIxB,IAGO,QAAA,IAHD,WAAM,mBAAgB;gEAC1B,IAAqD,UAAA,IAA5C,aAAK,KAAA;oEAAE,iBAAA,KAAgB,GAAA,KAAA;gEAAA,IAAU,MAAE,CAAA,EAAA;oEAAA;iEAAA;gEAC5C,IAA8E,UAAA,IAArE,aAAO,qBAAqB,WAAM,0BAAwB;;;;;;;gDAKzE,IAaO,QAAA,IAbD,WAAM,gBAAa;oDACvB,IAAmC,QAAA,IAA7B,WAAM,gBAAc;oDAC1B,IAGO,QAAA,IAHD,WAAM,gBAAgB,aAAO;wDACjC,IAAkG,QAAA,IAAA,EAAA,IAAzF,IAAA,QAAA,KAAO,CAAC,QAAQ,CAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAY,QAAA,KAAO,CAAC,QAAQ,CAAA,EAAA,CAAA,IAAS;4DAAA,QAAA,KAAO,CAAC,QAAQ;wDAAR,EAAQ,IAAA,CAAA;4DAAA;wDAAA;wDAAA,GAAA,CAAA;wDAC9E,IAAmC,QAAA,IAA7B,WAAM,iBAAe;;+DAEjB,mBAAA,KAAkB,GAA9B;wDAAA,IAMO,QAAA,gBANyB,WAAM;4DACpC,IAA0H,wBAAA,IAA5G,eAAW,IAAI,EAAG,aAAO,AAAM,OAAO,WAAW,IAAK,WAAO,aAAA,KAAY,EAAG,cAAQ;;;;4DAClG,IAGO,QAAA,IAHD,WAAM,mBAAgB;gEAC1B,IAAuD,UAAA,IAA9C,aAAK,KAAA;oEAAE,mBAAA,KAAkB,GAAA,KAAA;gEAAA,IAAU,MAAE,CAAA,EAAA;oEAAA;iEAAA;gEAC9C,IAAgF,UAAA,IAAvE,aAAO,uBAAuB,WAAM,0BAAwB;;;;;;;gDAK3E,IAGO,QAAA,IAHD,WAAM,gBAAa;oDACvB,IAAwC,QAAA,IAAlC,WAAM,gBAAc;oDAC1B,IAAyL,SAAA,IAAlL,WAAM,eAAc,UAAK,UAAS,UAAK,UAAU,WAAO,IAAA,QAAA,KAAO,CAAC,SAAS,CAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAY,QAAA,KAAO,CAAC,SAAS,GAAA,CAAA,CAAA,CAAA,EAAO;wDAAA,QAAA,KAAO,CAAC,SAAS;oDAAT,EAAS,IAAA,CAAA;wDAAA;oDAAA;oDAAA,EAAO,iBAAY,SAAS,aAAO;;;;gDAG1K,IAGO,QAAA,IAHD,WAAM,gBAAa;oDACvB,IAAwC,QAAA,IAAlC,WAAM,gBAAc;oDAC1B,IAAyL,SAAA,IAAlL,WAAM,eAAc,UAAK,UAAS,UAAK,UAAU,WAAO,IAAA,QAAA,KAAO,CAAC,SAAS,CAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAY,QAAA,KAAO,CAAC,SAAS,GAAA,CAAA,CAAA,CAAA,EAAO;wDAAA,QAAA,KAAO,CAAC,SAAS;oDAAT,EAAS,IAAA,CAAA;wDAAA;oDAAA;oDAAA,EAAO,iBAAY,SAAS,aAAO;;;;gDAG1K,IAGO,QAAA,IAHD,WAAM,gBAAa;oDACvB,IAAqC,QAAA,IAA/B,WAAM,gBAAc;oDAC1B,IAAmG,YAAA,IAAzF,WAAM,kBAAiB,UAAK,uBAAe,QAAA,KAAO,CAAC,GAAG;wDAAX,QAAA,KAAO,CAAC,GAAG,GAAA,SAAA,MAAA,CAAA,KAAA;oDAAA;sDAAE,iBAAY;;;;;gDAGhF,IAES,UAAA,IAFD,eAAU,UAAS,WAAM,eAAe,cAAU,SAAA,KAAQ,EAAG,aAAS,SAAA,KAAQ,GAAE,QAExF,CAAA,EAAA;oDAAA;oDAAA;iDAAA;;;;wCAGU,IAAA,YAAA,KAAW,CAAA,EAAA,CAAA,IAAvB;4CAAA,IAEO,QAAA,gBAFwB,WAAM;gDACnC,IAAmD,QAAA,IAA7C,WAAM,iBAAc,IAAI,YAAA,KAAW,GAAA,CAAA;;0CAE1B,KAAA;4CAAA,IAAA,UAAA,KAAS,CAAA,EAAA,CAAA,IAA1B;gDAAA,IAEO,QAAA,gBAF2B,WAAM;oDACtC,IAA+C,QAAA,IAAzC,WAAM,eAAY,IAAI,UAAA,KAAS,GAAA,CAAA"} \ No newline at end of file diff --git a/unpackage/cache/.app-android/sourcemap/pages/user/register.kt.map b/unpackage/cache/.app-android/sourcemap/pages/user/register.kt.map deleted file mode 100644 index 37f80292..00000000 --- a/unpackage/cache/.app-android/sourcemap/pages/user/register.kt.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["pages/user/register.uvue","pages/user/login.uvue","uni_modules/ak-req/ak-req.uts"],"sourcesContent":["\r\n\r\n\r\n\r\n\r\n",null,null],"names":[],"mappings":";;;;;;;;;;;;;;;+BAoIe,cAAA;;;;;;;;;;YAtCd,IAAM,QAAQ,IAAI,MAAM,EAAE;YAC1B,IAAM,WAAW,IAAI,MAAM,EAAE;YAC7B,IAAM,kBAAkB,IAAI,MAAM,EAAE;YACpC,IAAM,WAAW,IAAI,OAAO,EAAE,KAAK;YACnC,IAAM,cAAc,IAAI,OAAO,EAAE,KAAK;YACtC,IAAM,YAAY,IAAI,OAAO,EAAE,KAAK;YACpC,IAAM,UAAU,IAAI,MAAM,EAAE;YAE5B,IAAM,uBAAuB,IAAC,GAAG,8BAA8B,IAAI,CAAG;gBACrE,SAAS,KAAK,GAAG,SAAS,KAAK,CAAA,EAAA,CAAI,KAAK;YACzC;YAEA,IAAM,gBAAgB,OAAI,OAAO,CAAG;gBACnC,IAAI,MAAM,KAAK,CAAC,IAAI,GAAE,EAAA,CAAI,IAAI;mDAE5B,QAAO,SACP,OAAM;oBAEP,OAAO,KAAK;;gBAEb,IAAM,UAAU,MAAM,KAAK,CAAC,OAAO,CAAC;gBACpC,IAAM,WAAW,MAAM,KAAK,CAAC,WAAW,CAAC;gBACzC,IAAI,QAAO,EAAA,CAAI,CAAC,CAAC,CAAA,EAAA,CAAI,SAAQ,EAAA,CAAI,CAAC,CAAC,CAAA,EAAA,CAAI,QAAO,CAAA,CAAG,UAAU;mDAEzD,QAAO,YACP,OAAM;oBAEP,OAAO,KAAK;;gBAEb,OAAO,IAAI;YACZ;YAEA,IAAM,mBAAmB,OAAI,OAAO,CAAG;gBACtC,IAAI,SAAS,KAAK,CAAC,IAAI,GAAE,EAAA,CAAI,IAAI;mDAE/B,QAAO,SACP,OAAM;oBAEP,OAAO,KAAK;;gBAEb,IAAI,SAAS,KAAK,CAAC,MAAM,CAAA,CAAA,CAAG,CAAC,EAAE;mDAE7B,QAAO,cACP,OAAM;oBAEP,OAAO,KAAK;;gBAEb,OAAO,IAAI;YACZ;YAEA,IAAM,0BAA0B,OAAI,OAAO,CAAG;gBAC7C,IAAI,gBAAgB,KAAK,CAAC,IAAI,GAAE,EAAA,CAAI,IAAI;mDAEtC,QAAO,SACP,OAAM;oBAEP,OAAO,KAAK;;gBAEb,IAAI,gBAAgB,KAAK,CAAA,EAAA,CAAI,SAAS,KAAK,EAAE;mDAE3C,QAAO,cACP,OAAM;oBAEP,OAAO,KAAK;;gBAEb,OAAO,IAAI;YACZ;YAEA,IAAM,iBAAiB,OAAU,WAAQ,IAAI,EAAI;gBAAA,OAAA,eAAA;wBAChD,IAAI,SAAS,KAAK,CAAA,EAAA,CAAI,KAAK,EAAE;4BAC5B,YAAY,KAAK,GAAG,IAAI;2DAEvB,QAAO,aACP,OAAM;4BAEP;;wBAGD,IAAI,gBAAe,EAAA,CAAI,KAAK,EAAE;4BAC7B;;wBAED,IAAI,mBAAkB,EAAA,CAAI,KAAK,EAAE;4BAChC;;wBAED,IAAI,0BAAyB,EAAA,CAAI,KAAK,EAAE;4BACvC;;wBAGD,UAAU,KAAK,GAAG,IAAI;wBAEtB,IAAI;4BACH,IAAM,SAAS,MAAM,aAAK,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,SAAS,KAAK;4BAEnE,QAAQ,GAAG,CAAC,WAAW,QAAK;4BAE5B,IAAM,YAAY,QAAQ,UAAU,cAAa,EAAA,CAAI;4BACrD,IAAM,WAAW,QAAQ,UAAU,OAAM,EAAA,CAAI;4BAC7C,IAAM,OAAO,QAAQ,UAAU,QAAO,EAAA,CAAI,CAAC;4BAE3C,QAAQ,GAAG,CAAC,SAAS,WAAW,SAAS,UAAU,QAAQ,MAAG;4BAE9D,IAAI,KAAI,EAAA,CAAI,GAAG,CAAA,EAAA,CAAI,CAAC,UAAS,EAAA,CAAI,qBAAoB,EAAA,CAAI,SAAS,QAAQ,CAAC,qBAAqB,GAAG;gCAClG,QAAQ,IAAI,CAAC,mBAAgB;;4BAG9B,IAAI,MAAM,iBAAuB,IAAI;4BACrC,IAAI,aAAa,KAAK;4BAEtB,IAAI,OAAM,EAAA,CAAI,IAAI,EAAE;gCACnB,IAAM,YAAY,OAAO,OAAO,CAAC;gCACjC,IAAI,UAAS,EAAA,CAAI,IAAI,EAAE;oCACtB,OAAO;oCACP,QAAQ,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,OAAO,KAAK,SAAS,CAAC,UAAO;kCACjE,IAQN,CARM;oCACN,IAAM,KAAK,OAAO,SAAS,CAAC;oCAC5B,IAAI,GAAE,EAAA,CAAI,IAAI,CAAA,EAAA,CAAI,GAAE,EAAA,CAAI,IAAI;wCAC3B,OAAO;wCACP,QAAQ,GAAG,CAAC,wBAAwB,IAAC;sCAC/B,IAEN,CAFM;wCACN,QAAQ,IAAI,CAAC,eAAY;;;gCAI3B,IAAM,eAAe,OAAO,OAAO,CAAC;gCACpC,IAAI,aAAY,EAAA,CAAI,IAAI,EAAE;oCACzB,aAAa,IAAI;oCACjB,QAAQ,GAAG,CAAC,oBAAiB;kCACvB,IAEN,CAFM;oCACN,QAAQ,GAAG,CAAC,wBAAqB;;;4BAInC,IAAI,KAAI,EAAA,CAAI,IAAI,CAAA,EAAA,CAAI,KAAI,EAAA,CAAI,CAAC,CAAA,EAAA,CAAI,KAAI,EAAA,CAAI,GAAG,EAAE;gCAC7C,IAAI,KAAI,EAAA,CAAI,GAAG,CAAA,EAAA,CAAI,SAAS,QAAQ,CAAC,uBAAuB;oCAC3D,MAAM,AAAI,SAAM,gBAAgB;kCAC1B,IAEN,CAFM;oCACN,MAAM,AAAI,SAAM,IAAA,SAAQ,EAAA,CAAI,IAAK;wCAAA;oCAAA,EAAW,IAAU,CAAV;wCAAA;oCAAA;oCAAU,CAAC;;;4BAIzD,IAAI,KAAI,EAAA,CAAI,IAAI,EAAE;gCACjB,IAAI;oCACH,IAAM,gBAAgB,MAAM,kBAAkB;oCAC9C,IAAI,cAAa,EAAA,CAAI,IAAI,EAAE;wCAC1B,QAAQ,GAAG,CAAC,aAAa,cAAc,EAAC,EAAA;sCAClC,IAEN,CAFM;wCACN,QAAQ,IAAI,CAAC,mBAAgB;qCAC7B;kCACA,OAAO,yBAAc;oCACtB,QAAQ,KAAK,CAAC,aAAa,cAAW;;8BAEjC,IAEN,CAFM;gCACN,QAAQ,IAAI,CAAC,iBAAc;;4BAG5B,IAAI,WAAU,EAAA,CAAI,KAAK,CAAA,EAAA,CAAI,KAAI,EAAA,CAAI,IAAI,EAAE;gCACxC,QAAQ,GAAG,CAAC,UAAO;;2DAInB,QAAO,QACP,OAAM;4BAGP,WAAW,KAAK;gCA9HJ,iCAgIV,MAAK;4BAEP;8BAAG,IAAI;;yBACN,OAAO,gBAAK;4BACb,QAAQ,KAAK,CAAC,SAAS,KAAE;4BAEzB,IAAI,eAAe;4BACnB,IAAI,IAAG,EAAA,CAAI,IAAI,EAAE;gCAChB,IAAM,QAAQ,IAAG,EAAA,CAAI;gCACrB,IAAI,MAAM,OAAO,CAAA,EAAA,CAAI,IAAI,CAAA,EAAA,CAAI,MAAM,OAAO,CAAC,IAAI,GAAE,EAAA,CAAI,IAAI;oCACxD,eAAe,MAAM,OAAO;oCAC5B,IAAI,MAAM,OAAO,CAAC,QAAQ,CAAC,sBAAqB,EAAA,CAAI,MAAM,OAAO,CAAC,QAAQ,CAAC,OAAO;wCACjF,eAAe;;;;2DAMjB,QAAO,cACP,OAAM,QACN,WAAU,IAAI;;iCAEN;4BACT,UAAU,KAAK,GAAG,KAAK;;iBAExB;YAAD;YAEA,IAAM,kBAAkB,OAAI,IAAI,CAAG;iDAEjC,MAAK;YAEP;YAEA,IAAM,kBAAkB,IAAC,MAAM,MAAM,GAAG,IAAI,CAAG;iDAE7C,MAAK,4BAA0B;YAEjC;;;;uBAxSA,IAqFO,QAAA,IArFD,WAAM,qBAAkB;oBAE7B,IAEO,QAAA,IAFD,WAAM,WAAQ;wBACnB,IAAsD,SAAA,IAA9C,SAAK,QAAA,KAAO,EAAE,UAAK,aAAY,WAAM;;;;oBAI9C,IAwEO,QAAA,IAxED,WAAM,iBAAc;wBACzB,IAA+B,QAAA,IAAzB,WAAM,UAAQ;wBAGpB,IAuCO,QAAA,IAvCD,WAAM,iBAAc;4BAEzB,IAUO,QAAA,IAVD,WAAM,gBAAa;gCACxB,IAQO,QAAA,IARD,WAAM,kBAAe;oCAC1B,IAA2D,SAAA,IAApD,SAAI,4BAA2B,WAAM;oCAC5C,IAKE,SAAA,IAJD,UAAK,QACL,iBAAY,wBACH,MAAA,KAAK;wCAAL,MAAK,KAAA,GAAA,SAAA,MAAA,CAAA,KAAA;oCAAA;sCACd,WAAM;;;;;;4BAMT,IAUO,QAAA,IAVD,WAAM,gBAAa;gCACxB,IAQO,QAAA,IARD,WAAM,kBAAe;oCAC1B,IAA0D,SAAA,IAAnD,SAAI,2BAA0B,WAAM;oCAC3C,IAKE,SAAA,IAJD,UAAK,YACL,iBAAY,wBACH,SAAA,KAAQ;wCAAR,SAAQ,KAAA,GAAA,SAAA,MAAA,CAAA,KAAA;oCAAA;sCACjB,WAAM;;;;;;4BAMT,IAUO,QAAA,IAVD,WAAM,gBAAa;gCACxB,IAQO,QAAA,IARD,WAAM,kBAAe;oCAC1B,IAA0D,SAAA,IAAnD,SAAI,2BAA0B,WAAM;oCAC3C,IAKE,SAAA,IAJD,UAAK,YACL,iBAAY,wBACH,gBAAA,KAAe;wCAAf,gBAAe,KAAA,GAAA,SAAA,MAAA,CAAA,KAAA;oCAAA;sCACxB,WAAM;;;;;;;wBAOV,IAEO,QAAA,IAFD,WAAK,IAAA;4BAAC;4BAA+C,IAAA,UAAA,KAAS,EAAA;gCAAA;4BAAA,EAAA,IAAA,CAAA;gCAAA;4BAAA;yBAAA,GAAxC,aAAO,iBAAqD,QAExF,CAAA;wBAGA,IAGO,QAAA,IAHD,WAAM,SAAM;4BACjB,IAAoC,QAAA,IAA9B,WAAM,cAAY;4BACxB,IAA4D,QAAA,IAAtD,WAAM,aAAa,aAAO,kBAAiB;;wBAIlD,IAcO,QAAA,IAdD,WAAM,aAAU;4BACrB,IAYiB,2BAAA,IAZA,cAAQ,uBAAoB,6BAC5C,gBAIE,GAAA;uCAAA;oCAJF,IAIE,qBAAA,IAHD,WAAK,IAAA;wCAAC;wCAEE,IAAA,YAAA,KAAW,EAAA;4CAAA;wCAAA,EAAA,IAAA,CAAA;4CAAA;wCAAA;qCAAA,GADlB,aAAS,SAAA,KAAQ;;;;oCAGnB,IAKO,QAAA,IALD,WAAM,kBAAe;wCAAC;wCAE3B,IAAkE,QAAA,IAA5D,WAAM,cAAc,aAAK,KAAA;4CAAE,gBAAe,CAAA;wCAAA;2CAAK,UAAM,CAAA,EAAA;4CAAA;yCAAA;wCAAO;wCAElE,IAAkE,QAAA,IAA5D,WAAM,cAAc,aAAK,KAAA;4CAAE,gBAAe,CAAA;wCAAA;2CAAK,UAAM,CAAA,EAAA;4CAAA;yCAAA;;;;;;;oBAO/D,IAEO,QAAA,IAFD,WAAM,WAAQ;wBACnB,IAA0E,QAAA,IAApE,WAAM,gBAAc"} \ No newline at end of file diff --git a/unpackage/cache/.app-android/sourcemap/pages/user/terms.kt.map b/unpackage/cache/.app-android/sourcemap/pages/user/terms.kt.map deleted file mode 100644 index ca99b776..00000000 --- a/unpackage/cache/.app-android/sourcemap/pages/user/terms.kt.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["pages/user/terms.uvue"],"sourcesContent":["\r\n\r\n\r\n\r\n\r\n"],"names":[],"mappings":";;;;;;;;;;;;;;+BAwCQ,gBAAA;AAHF;;;;;;eApCL,IAgCO,QAAA,IAhCD,WAAM,SAAM;YACjB,IAIO,QAAA,IAJD,WAAM,WAAQ;gBACnB,IAA4C,QAAA,IAAtC,WAAM,QAAQ,aAAO,KAAA,MAAM,GAAE,MAAE,CAAA,EAAA;oBAAA;iBAAA;gBACrC,IAAoC,QAAA,IAA9B,WAAM,UAAQ;gBACpB,IAA4B,QAAA,IAAtB,WAAM;;YAGb,IAwBc,eAAA,IAxBD,WAAM,WAAU,cAAS,QAAO,oBAAe;gBAC3D,IAkBO,QAAA,IAlBD,WAAM,SAAM;oBACjB,IAA4B,QAAA,IAAtB,WAAM,OAAK;oBACjB,IACO,QAAA,IADD,WAAM,MAAI;oBAEhB,IACO,QAAA,IADD,WAAM,MAAI;oBAEhB,IACO,QAAA,IADD,WAAM,MAAI;oBAGhB,IAA6B,QAAA,IAAvB,WAAM;oBAEZ,IAA4B,QAAA,IAAtB,WAAM,OAAK;oBACjB,IACO,QAAA,IADD,WAAM,MAAI;oBAEhB,IACO,QAAA,IADD,WAAM,MAAI;oBAEhB,IACO,QAAA,IADD,WAAM,MAAI;;gBAIjB,IAEO,QAAA,IAFD,WAAM,WAAQ;oBACnB,IAAwD,UAAA,IAAhD,WAAM,WAAW,aAAO,KAAA,MAAM,GAAE,WAAO,CAAA,EAAA;wBAAA;qBAAA;;;;;aAShD;aAAA,gBAAM;QACD;IACL;;;;;;;;;;;;;;;;;;;;AAED"} \ No newline at end of file diff --git a/unpackage/cache/.app-android/src/.manifest.json b/unpackage/cache/.app-android/src/.manifest.json deleted file mode 100644 index 4fb1e78e..00000000 --- a/unpackage/cache/.app-android/src/.manifest.json +++ /dev/null @@ -1,180 +0,0 @@ -{ - "version": "1", - "env": { - "compiler_version": "4.87" - }, - "files": { - "pages/mall/consumer/product-detail.kt": { - "class": "GenPagesMallConsumerProductDetail", - "md5": "4e756fdb94de5573bc2715145dece9bc8c99af61" - }, - "pages/user/bind-email.kt": { - "class": "GenPagesUserBindEmail", - "md5": "aee9fa605a8e6e4ee45803d08723ad6e295f06e0" - }, - "pages/mall/consumer/settings.kt": { - "class": "GenPagesMallConsumerSettings", - "md5": "d034c374b240ec8fe6486fcfa13b4b9b1d763050" - }, - "pages/mall/consumer/bank-cards/add.kt": { - "md5": "3c6aac904a1936597085c45c7c4bedeaff363a9b", - "class": "GenPagesMallConsumerBankCardsAdd" - }, - "pages/mall/consumer/category.kt": { - "md5": "2dcf3698347162bb746ac896df34d3a107bed212", - "class": "GenPagesMallConsumerCategory" - }, - "pages/mall/consumer/orders.kt": { - "class": "GenPagesMallConsumerOrders", - "md5": "41d37ff1e250582d0c38db76aeda46fc3e1ff340" - }, - "pages/mall/consumer/search.kt": { - "class": "GenPagesMallConsumerSearch", - "md5": "6b576067c2a70283a5b5a3e3b6293e73fda9b80d" - }, - "pages/mall/consumer/red-packets/index.kt": { - "md5": "be843ebd29b8ccbe79b0aeebe4ff9705713653be", - "class": "GenPagesMallConsumerRedPacketsIndex" - }, - "pages/mall/consumer/index.kt": { - "class": "GenPagesMallConsumerIndex", - "md5": "49603a8ea07789e89d9903991f320f450f40de8a" - }, - "pages/mall/consumer/subscription/followed-shops.kt": { - "class": "GenPagesMallConsumerSubscriptionFollowedShops", - "md5": "8a6a67a2f94fd417bc0bbaa3efefb8addde555aa" - }, - "pages/user/center.kt": { - "class": "GenPagesUserCenter", - "md5": "9293e191b60202923582fa83b20c47d622e310ae" - }, - "pages/user/boot.kt": { - "class": "GenPagesUserBoot", - "md5": "9baf4c624c55a76325065bf0f036e746db562da6" - }, - "pages/mall/consumer/messages.kt": { - "class": "GenPagesMallConsumerMessages", - "md5": "581abaf91885d575890ed8175055fcef6918c9b0" - }, - "pages/mall/consumer/review.kt": { - "class": "GenPagesMallConsumerReview", - "md5": "750f0c6b0d079c4143da00073dc605903ba88e9a" - }, - "pages/mall/consumer/shop-detail.kt": { - "class": "GenPagesMallConsumerShopDetail", - "md5": "c078b39268477dcd0f75cdba4d85d0e0e67f5b29" - }, - "pages/mall/consumer/bank-cards/index.kt": { - "class": "GenPagesMallConsumerBankCardsIndex", - "md5": "911f58fed35c1d455d792f3ad433c9a40e01d124" - }, - "pages/mall/consumer/address-edit.kt": { - "md5": "859d62f5dc150e33f5e7fabb19a9c13aa058b72d", - "class": "GenPagesMallConsumerAddressEdit" - }, - "pages/mall/consumer/payment.kt": { - "class": "GenPagesMallConsumerPayment", - "md5": "a77df7ecdcbb34652b6fe745564c34720ffdcc7e" - }, - "pages/mall/consumer/apply-refund.kt": { - "class": "GenPagesMallConsumerApplyRefund", - "md5": "a86129830ca463f2df49b881132395fd7932c9e6" - }, - "index.kt": { - "md5": "0eb3eeb5515f8dac4c8792799220d0c0585b1ebb", - "class": "" - }, - "pages/user/terms.kt": { - "class": "GenPagesUserTerms", - "md5": "de5c535d6211c15adb1e6116ec85dd32170e5f82" - }, - "pages/user/bind-phone.kt": { - "class": "GenPagesUserBindPhone", - "md5": "e1bf96825ebb2a94422a22c58cbc5103f08e43c0" - }, - "pages/user/login.kt": { - "class": "GenPagesUserLogin", - "md5": "f88fe2b13f1852cee0954dc3cbc89cd85458eaea" - }, - "pages/mall/consumer/profile.kt": { - "class": "GenPagesMallConsumerProfile", - "md5": "be9a6138b1afc81f2a72c018b9948d7a5ed40585" - }, - "pages/user/change-password.kt": { - "md5": "795ad70c7e0b3734eaf7e6e57dbb145a8f91ef80", - "class": "GenPagesUserChangePassword" - }, - "pages/mall/consumer/withdraw.kt": { - "md5": "7b61b5f784ea6c284470cfdd4f652cb9bf021d7f", - "class": "GenPagesMallConsumerWithdraw" - }, - "pages/mall/consumer/refund.kt": { - "class": "GenPagesMallConsumerRefund", - "md5": "a3517526e4f03109e6f99aa3cb140cc1180006de" - }, - "pages/mall/consumer/logistics.kt": { - "md5": "bd07b05e86256793afec51cd31596b4e7d122094", - "class": "GenPagesMallConsumerLogistics" - }, - "pages/mall/consumer/cart.kt": { - "md5": "32cc7eb21d6cb86e14aa7d226a084c7372b3b21d", - "class": "GenPagesMallConsumerCart" - }, - "pages/user/register.kt": { - "md5": "e444fb6046165f02349e6d76e57d0c33ddf0c660", - "class": "GenPagesUserRegister" - }, - "pages/mall/consumer/address-list.kt": { - "md5": "ac9cc2a590fb3edd39bc9616b5c429df760e1bbb", - "class": "GenPagesMallConsumerAddressList" - }, - "pages/mall/consumer/coupons.kt": { - "class": "GenPagesMallConsumerCoupons", - "md5": "64b97464a4d79b46d0770dea8775c83c59eb3e32" - }, - "pages/mall/consumer/payment-success.kt": { - "class": "GenPagesMallConsumerPaymentSuccess", - "md5": "79a34cb30dd086480775979a909d8d898c30521a" - }, - "pages/user/profile.kt": { - "class": "GenPagesUserProfile", - "md5": "ecdba401cb07f3c537743b280d6a1d226f2213aa" - }, - "pages/mall/consumer/points/index.kt": { - "md5": "6eb89fb539ac964daef68725906debc54aa0edaa", - "class": "GenPagesMallConsumerPointsIndex" - }, - "pages/mall/consumer/footprint.kt": { - "md5": "0bf5ffd845295c3f7d8dd3a16e1564f1e3e3543d", - "class": "GenPagesMallConsumerFootprint" - }, - "pages/mall/consumer/order-detail.kt": { - "md5": "543d3d319489e9e8eb038d99cfc1847ccc35d4bd", - "class": "GenPagesMallConsumerOrderDetail" - }, - "pages/mall/consumer/checkout.kt": { - "class": "GenPagesMallConsumerCheckout", - "md5": "47200b9d642455a0b201a9bada6d54228d33c9e6" - }, - "pages/user/forgot-password.kt": { - "md5": "305feeb7c31852b47942fd6e4b37ac887844add9", - "class": "GenPagesUserForgotPassword" - }, - "pages/mall/consumer/wallet.kt": { - "class": "GenPagesMallConsumerWallet", - "md5": "f482b2dd024e3760e928161f755f455f2322c351" - }, - "pages/mall/consumer/refund-review.kt": { - "md5": "4fbba416086db4f0d23a7ab2bc6b135c65169b0d", - "class": "GenPagesMallConsumerRefundReview" - }, - "pages/mall/consumer/chat.kt": { - "md5": "e790eec966126f3bad6fd189c923214013bf9b75", - "class": "GenPagesMallConsumerChat" - }, - "pages/mall/consumer/favorites.kt": { - "class": "GenPagesMallConsumerFavorites", - "md5": "3b3c316fab71330b4a8b87146970ea19f461b833" - } - } -} \ No newline at end of file diff --git a/unpackage/cache/.app-android/src/index.kt b/unpackage/cache/.app-android/src/index.kt deleted file mode 100644 index cf960be4..00000000 --- a/unpackage/cache/.app-android/src/index.kt +++ /dev/null @@ -1,14208 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.connectSocket as uni_connectSocket -import io.dcloud.uniapp.extapi.getStorageSync as uni_getStorageSync -import io.dcloud.uniapp.extapi.removeStorageSync as uni_removeStorageSync -import io.dcloud.uniapp.extapi.request as uni_request -import io.dcloud.uniapp.extapi.setStorageSync as uni_setStorageSync -import io.dcloud.uniapp.extapi.showToast as uni_showToast -import io.dcloud.uniapp.extapi.uploadFile as uni_uploadFile -val runBlock1 = run { - __uniConfig.getAppStyles = fun(): Map>> { - return GenApp.styles - } -} -fun initRuntimeSocket(hosts: String, port: String, id: String): UTSPromise { - if (hosts == "" || port == "" || id == "") { - return UTSPromise.resolve(null) - } - return hosts.split(",").reduce>(fun(promise: UTSPromise, host: String): UTSPromise { - return promise.then(fun(socket): UTSPromise { - if (socket != null) { - return UTSPromise.resolve(socket) - } - return tryConnectSocket(host, port, id) - } - ) - } - , UTSPromise.resolve(null)) -} -val SOCKET_TIMEOUT: Number = 500 -fun tryConnectSocket(host: String, port: String, id: String): UTSPromise { - return UTSPromise(fun(resolve, reject){ - val socket = uni_connectSocket(ConnectSocketOptions(url = "ws://" + host + ":" + port + "/" + id, fail = fun(_) { - resolve(null) - } - )) - val timer = setTimeout(fun(){ - socket.close(CloseSocketOptions(code = 1006, reason = "connect timeout")) - resolve(null) - } - , SOCKET_TIMEOUT) - socket.onOpen(fun(e){ - clearTimeout(timer) - resolve(socket) - } - ) - socket.onClose(fun(e){ - clearTimeout(timer) - resolve(null) - } - ) - socket.onError(fun(e){ - clearTimeout(timer) - resolve(null) - } - ) - } - ) -} -fun initRuntimeSocketService(): UTSPromise { - val hosts: String = "192.168.139.1,192.168.29.1,19.19.1.40,127.0.0.1" - val port: String = "8090" - val id: String = "app-android_he_lbd" - if (hosts == "" || port == "" || id == "") { - return UTSPromise.resolve(false) - } - var socketTask: SocketTask? = null - __registerWebViewUniConsole(fun(): String { - return "!function(){\"use strict\";\"function\"==typeof SuppressedError&&SuppressedError;var e=[\"log\",\"warn\",\"error\",\"info\",\"debug\"],n=e.reduce((function(e,n){return e[n]=console[n].bind(console),e}),{}),t=null,r=new Set,o={};function i(e){if(null!=t){var n=e.map((function(e){if(\"string\"==typeof e)return e;var n=e&&\"promise\"in e&&\"reason\"in e,t=n?\"UnhandledPromiseRejection: \":\"\";if(n&&(e=e.reason),e instanceof Error&&e.stack)return e.message&&!e.stack.includes(e.message)?\"\".concat(t).concat(e.message,\"\\n\").concat(e.stack):\"\".concat(t).concat(e.stack);if(\"object\"==typeof e&&null!==e)try{return t+JSON.stringify(e)}catch(e){return t+String(e)}return t+String(e)})).filter(Boolean);n.length>0&&t(JSON.stringify(Object.assign({type:\"error\",data:n},o)))}else e.forEach((function(e){r.add(e)}))}function a(e,n){try{return{type:e,args:u(n)}}catch(e){}return{type:e,args:[]}}function u(e){return e.map((function(e){return c(e)}))}function c(e,n){if(void 0===n&&(n=0),n>=7)return{type:\"object\",value:\"[Maximum depth reached]\"};switch(typeof e){case\"string\":return{type:\"string\",value:e};case\"number\":return function(e){return{type:\"number\",value:String(e)}}(e);case\"boolean\":return function(e){return{type:\"boolean\",value:String(e)}}(e);case\"object\":try{return function(e,n){if(null===e)return{type:\"null\"};if(function(e){return e.\$&&s(e.\$)}(e))return function(e,n){return{type:\"object\",className:\"ComponentPublicInstance\",value:{properties:Object.entries(e.\$.type).map((function(e){return f(e[0],e[1],n+1)}))}}}(e,n);if(s(e))return function(e,n){return{type:\"object\",className:\"ComponentInternalInstance\",value:{properties:Object.entries(e.type).map((function(e){return f(e[0],e[1],n+1)}))}}}(e,n);if(function(e){return e.style&&null!=e.tagName&&null!=e.nodeName}(e))return function(e,n){return{type:\"object\",value:{properties:Object.entries(e).filter((function(e){var n=e[0];return[\"id\",\"tagName\",\"nodeName\",\"dataset\",\"offsetTop\",\"offsetLeft\",\"style\"].includes(n)})).map((function(e){return f(e[0],e[1],n+1)}))}}}(e,n);if(function(e){return\"function\"==typeof e.getPropertyValue&&\"function\"==typeof e.setProperty&&e.\$styles}(e))return function(e,n){return{type:\"object\",value:{properties:Object.entries(e.\$styles).map((function(e){return f(e[0],e[1],n+1)}))}}}(e,n);if(Array.isArray(e))return{type:\"object\",subType:\"array\",value:{properties:e.map((function(e,t){return function(e,n,t){var r=c(e,t);return r.name=\"\".concat(n),r}(e,t,n+1)}))}};if(e instanceof Set)return{type:\"object\",subType:\"set\",className:\"Set\",description:\"Set(\".concat(e.size,\")\"),value:{entries:Array.from(e).map((function(e){return function(e,n){return{value:c(e,n)}}(e,n+1)}))}};if(e instanceof Map)return{type:\"object\",subType:\"map\",className:\"Map\",description:\"Map(\".concat(e.size,\")\"),value:{entries:Array.from(e.entries()).map((function(e){return function(e,n){return{key:c(e[0],n),value:c(e[1],n)}}(e,n+1)}))}};if(e instanceof Promise)return{type:\"object\",subType:\"promise\",value:{properties:[]}};if(e instanceof RegExp)return{type:\"object\",subType:\"regexp\",value:String(e),className:\"Regexp\"};if(e instanceof Date)return{type:\"object\",subType:\"date\",value:String(e),className:\"Date\"};if(e instanceof Error)return{type:\"object\",subType:\"error\",value:e.message||String(e),className:e.name||\"Error\"};var t=void 0,r=e.constructor;r&&r.get\$UTSMetadata\$&&(t=r.get\$UTSMetadata\$().name);var o=Object.entries(e);(function(e){return e.modifier&&e.modifier._attribute&&e.nodeContent})(e)&&(o=o.filter((function(e){var n=e[0];return\"modifier\"!==n&&\"nodeContent\"!==n})));return{type:\"object\",className:t,value:{properties:o.map((function(e){return f(e[0],e[1],n+1)}))}}}(e,n)}catch(e){return{type:\"object\",value:{properties:[]}}}case\"undefined\":return{type:\"undefined\"};case\"function\":return function(e){return{type:\"function\",value:\"function \".concat(e.name,\"() {}\")}}(e);case\"symbol\":return function(e){return{type:\"symbol\",value:e.description}}(e);case\"bigint\":return function(e){return{type:\"bigint\",value:String(e)}}(e)}}function s(e){return e.type&&null!=e.uid&&e.appContext}function f(e,n,t){var r=c(n,t);return r.name=e,r}var l=null,p=[],y={},g=\"---BEGIN:EXCEPTION---\",d=\"---END:EXCEPTION---\";function v(e){null!=l?l(JSON.stringify(Object.assign({type:\"console\",data:e},y))):p.push.apply(p,e)}var m=/^\\s*at\\s+[\\w/./-]+:\\d+\$/;function b(){function t(e){return function(){for(var t=[],r=0;r0){var t=p.slice();p.length=0,v(t)}}((function(e){_(e)}),{channel:e}),function(e,n){if(void 0===n&&(n={}),t=e,Object.assign(o,n),null!=e&&r.size>0){var a=Array.from(r);r.clear(),i(a)}}((function(e){_(e)}),{channel:e}),window.addEventListener(\"error\",(function(e){i([e.error])})),window.addEventListener(\"unhandledrejection\",(function(e){i([e])}))}}()}();" - } - , fun(data: String){ - socketTask?.send(SendSocketMessageOptions(data = data)) - } - ) - return UTSPromise.resolve().then(fun(): UTSPromise { - return initRuntimeSocket(hosts, port, id).then(fun(socket): Boolean { - if (socket == null) { - return false - } - socketTask = socket - return true - } - ) - } - ).`catch`(fun(): Boolean { - return false - } - ) -} -val runBlock2 = run { - initRuntimeSocketService() -} -open class GenApp : BaseApp { - constructor(__ins: ComponentInternalInstance) : super(__ins) { - onLaunch(fun(_: OnLaunchOptions) { - console.log("App Launch", " at App.uvue:4") - } - , __ins) - onAppShow(fun(_: OnShowOptions) { - console.log("App Show", " at App.uvue:7") - } - , __ins) - onAppHide(fun() { - console.log("App Hide", " at App.uvue:10") - } - , __ins) - } - companion object { - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - )) - } - val styles0: Map>> - get() { - return _uM("theme-vars" to _pS(_uM("--primary-color" to "#1890ff", "--primary-hover" to "#40a9ff", "--primary-active" to "#096dd9", "--success-color" to "#52c41a", "--success-hover" to "#73d13d", "--success-active" to "#389e0d", "--warning-color" to "#faad14", "--warning-hover" to "#ffc53d", "--warning-active" to "#d48806", "--error-color" to "#ff4d4f", "--error-hover" to "#ff7875", "--error-active" to "#d4380d", "--text-primary" to "#262626", "--text-secondary" to "#595959", "--text-disabled" to "#bfbfbf", "--text-inverse" to "#ffffff", "--border-color" to "#d9d9d9", "--border-color-light" to "#f0f0f0", "--border-color-dark" to "#bfbfbf", "--background-color" to "#ffffff", "--background-color-light" to "#fafafa", "--background-color-dark" to "#f5f5f5", "--shadow-sm" to "0 1px 3px rgba(0, 0, 0, 0.08)", "--shadow" to "0 2px 8px rgba(0, 0, 0, 0.06)", "--shadow-lg" to "0 4px 12px rgba(0, 0, 0, 0.08)", "--shadow-xl" to "0 6px 16px rgba(0, 0, 0, 0.12)", "--border-radius-sm" to "2px", "--border-radius" to "4px", "--border-radius-lg" to "6px", "--border-radius-xl" to "8px", "--spacing-xs" to "4px", "--spacing-sm" to "8px", "--spacing" to "16px", "--spacing-lg" to "24px", "--spacing-xl" to "32px", "--spacing-xxl" to "48px", "--font-size-xs" to "12px", "--font-size-sm" to "14px", "--font-size" to "16px", "--font-size-lg" to "18px", "--font-size-xl" to "20px", "--font-size-xxl" to "24px", "--line-height-tight" to "1.25", "--line-height-normal" to "1.5", "--line-height-relaxed" to "1.75")), "text-xs" to _pS(_uM("fontSize" to "var(--font-size-xs)")), "text-sm" to _pS(_uM("fontSize" to "var(--font-size-sm)")), "text-base" to _pS(_uM("fontSize" to "var(--font-size)")), "text-lg" to _pS(_uM("fontSize" to "var(--font-size-lg)")), "text-xl" to _pS(_uM("fontSize" to "var(--font-size-xl)")), "text-2xl" to _pS(_uM("fontSize" to "var(--font-size-xxl)")), "font-medium" to _pS(_uM("fontWeight" to "400")), "font-semibold" to _pS(_uM("fontWeight" to "700")), "font-bold" to _pS(_uM("fontWeight" to "700")), "text-primary" to _pS(_uM("color" to "var(--primary-color)")), "text-success" to _pS(_uM("color" to "var(--success-color)")), "text-warning" to _pS(_uM("color" to "var(--warning-color)")), "text-error" to _pS(_uM("color" to "var(--error-color)")), "text-secondary" to _pS(_uM("color" to "var(--text-secondary)")), "text-disabled" to _pS(_uM("color" to "var(--text-disabled)")), "bg-white" to _pS(_uM("backgroundColor" to "var(--background-color)")), "bg-light" to _pS(_uM("backgroundColor" to "var(--background-color-light)")), "bg-dark" to _pS(_uM("backgroundColor" to "var(--background-color-dark)")), "border" to _pS(_uM("borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "var(--border-color)", "borderRightColor" to "var(--border-color)", "borderBottomColor" to "var(--border-color)", "borderLeftColor" to "var(--border-color)")), "border-light" to _pS(_uM("borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "var(--border-color-light)", "borderRightColor" to "var(--border-color-light)", "borderBottomColor" to "var(--border-color-light)", "borderLeftColor" to "var(--border-color-light)")), "border-primary" to _pS(_uM("borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "var(--primary-color)", "borderRightColor" to "var(--primary-color)", "borderBottomColor" to "var(--primary-color)", "borderLeftColor" to "var(--primary-color)")), "shadow-sm" to _pS(_uM("boxShadow" to "var(--shadow-sm)")), "shadow" to _pS(_uM("boxShadow" to "var(--shadow)")), "shadow-lg" to _pS(_uM("boxShadow" to "var(--shadow-lg)")), "shadow-xl" to _pS(_uM("boxShadow" to "var(--shadow-xl)")), "rounded-sm" to _pS(_uM("borderTopLeftRadius" to "var(--border-radius-sm)", "borderTopRightRadius" to "var(--border-radius-sm)", "borderBottomRightRadius" to "var(--border-radius-sm)", "borderBottomLeftRadius" to "var(--border-radius-sm)")), "rounded" to _pS(_uM("borderTopLeftRadius" to "var(--border-radius)", "borderTopRightRadius" to "var(--border-radius)", "borderBottomRightRadius" to "var(--border-radius)", "borderBottomLeftRadius" to "var(--border-radius)")), "rounded-lg" to _pS(_uM("borderTopLeftRadius" to "var(--border-radius-lg)", "borderTopRightRadius" to "var(--border-radius-lg)", "borderBottomRightRadius" to "var(--border-radius-lg)", "borderBottomLeftRadius" to "var(--border-radius-lg)")), "rounded-xl" to _pS(_uM("borderTopLeftRadius" to "var(--border-radius-xl)", "borderTopRightRadius" to "var(--border-radius-xl)", "borderBottomRightRadius" to "var(--border-radius-xl)", "borderBottomLeftRadius" to "var(--border-radius-xl)")), "m-1" to _pS(_uM("marginTop" to "var(--spacing-xs)", "marginRight" to "var(--spacing-xs)", "marginBottom" to "var(--spacing-xs)", "marginLeft" to "var(--spacing-xs)")), "m-2" to _pS(_uM("marginTop" to "var(--spacing-sm)", "marginRight" to "var(--spacing-sm)", "marginBottom" to "var(--spacing-sm)", "marginLeft" to "var(--spacing-sm)")), "m-3" to _pS(_uM("marginTop" to "var(--spacing)", "marginRight" to "var(--spacing)", "marginBottom" to "var(--spacing)", "marginLeft" to "var(--spacing)")), "m-4" to _pS(_uM("marginTop" to "var(--spacing-lg)", "marginRight" to "var(--spacing-lg)", "marginBottom" to "var(--spacing-lg)", "marginLeft" to "var(--spacing-lg)")), "m-5" to _pS(_uM("marginTop" to "var(--spacing-xl)", "marginRight" to "var(--spacing-xl)", "marginBottom" to "var(--spacing-xl)", "marginLeft" to "var(--spacing-xl)")), "p-1" to _pS(_uM("paddingTop" to "var(--spacing-xs)", "paddingRight" to "var(--spacing-xs)", "paddingBottom" to "var(--spacing-xs)", "paddingLeft" to "var(--spacing-xs)")), "p-2" to _pS(_uM("paddingTop" to "var(--spacing-sm)", "paddingRight" to "var(--spacing-sm)", "paddingBottom" to "var(--spacing-sm)", "paddingLeft" to "var(--spacing-sm)")), "p-3" to _pS(_uM("paddingTop" to "var(--spacing)", "paddingRight" to "var(--spacing)", "paddingBottom" to "var(--spacing)", "paddingLeft" to "var(--spacing)")), "p-4" to _pS(_uM("paddingTop" to "var(--spacing-lg)", "paddingRight" to "var(--spacing-lg)", "paddingBottom" to "var(--spacing-lg)", "paddingLeft" to "var(--spacing-lg)")), "p-5" to _pS(_uM("paddingTop" to "var(--spacing-xl)", "paddingRight" to "var(--spacing-xl)", "paddingBottom" to "var(--spacing-xl)", "paddingLeft" to "var(--spacing-xl)")), "flex" to _pS(_uM("display" to "flex")), "inline-flex" to _pS(_uM("display" to "flex")), "block" to _pS(_uM("display" to "flex")), "inline-block" to _pS(_uM("display" to "flex")), "flex-col" to _pS(_uM("flexDirection" to "column")), "flex-row" to _pS(_uM("flexDirection" to "row")), "flex-wrap" to _pS(_uM("flexWrap" to "wrap")), "flex-nowrap" to _pS(_uM("flexWrap" to "nowrap")), "items-start" to _pS(_uM("alignItems" to "flex-start")), "items-center" to _pS(_uM("alignItems" to "center")), "items-end" to _pS(_uM("alignItems" to "flex-end")), "items-stretch" to _pS(_uM("alignItems" to "stretch")), "justify-start" to _pS(_uM("justifyContent" to "flex-start")), "justify-center" to _pS(_uM("justifyContent" to "center")), "justify-end" to _pS(_uM("justifyContent" to "flex-end")), "justify-between" to _pS(_uM("justifyContent" to "space-between")), "justify-around" to _pS(_uM("justifyContent" to "space-around")), "flex-1" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "flex-auto" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "auto")), "flex-none" to _pS(_uM("flexGrow" to 0, "flexShrink" to 0, "flexBasis" to "auto")), "w-full" to _pS(_uM("width" to "100%")), "h-full" to _pS(_uM("height" to "100%")), "text-left" to _pS(_uM("textAlign" to "left")), "text-center" to _pS(_uM("textAlign" to "center")), "text-right" to _pS(_uM("textAlign" to "right")), "app-root" to _pS(_uM("backgroundColor" to "var(--background-color)", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "btn" to _pS(_uM("display" to "flex", "alignItems" to "center", "justifyContent" to "center", "paddingTop" to "var(--spacing-sm)", "paddingRight" to "var(--spacing)", "paddingBottom" to "var(--spacing-sm)", "paddingLeft" to "var(--spacing)", "fontSize" to "var(--font-size-sm)", "fontWeight" to "400", "lineHeight" to "var(--line-height-tight)", "whiteSpace" to "nowrap", "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "rgba(0,0,0,0)", "borderRightColor" to "rgba(0,0,0,0)", "borderBottomColor" to "rgba(0,0,0,0)", "borderLeftColor" to "rgba(0,0,0,0)", "borderTopLeftRadius" to "var(--border-radius)", "borderTopRightRadius" to "var(--border-radius)", "borderBottomRightRadius" to "var(--border-radius)", "borderBottomLeftRadius" to "var(--border-radius)", "transitionProperty" to "all", "transitionDuration" to "0.2s", "transitionTimingFunction" to "ease", "opacity:disabled" to 0.6)), "btn-primary" to _pS(_uM("color" to "var(--text-inverse)", "backgroundColor" to "var(--primary-color)", "borderTopColor" to "var(--primary-color)", "borderRightColor" to "var(--primary-color)", "borderBottomColor" to "var(--primary-color)", "borderLeftColor" to "var(--primary-color)")), "btn-secondary" to _pS(_uM("color" to "var(--text-secondary)", "backgroundColor" to "var(--background-color)", "borderTopColor" to "var(--border-color)", "borderRightColor" to "var(--border-color)", "borderBottomColor" to "var(--border-color)", "borderLeftColor" to "var(--border-color)")), "card" to _pS(_uM("backgroundColor" to "var(--background-color)", "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "var(--border-color-light)", "borderRightColor" to "var(--border-color-light)", "borderBottomColor" to "var(--border-color-light)", "borderLeftColor" to "var(--border-color-light)", "borderTopLeftRadius" to "var(--border-radius-lg)", "borderTopRightRadius" to "var(--border-radius-lg)", "borderBottomRightRadius" to "var(--border-radius-lg)", "borderBottomLeftRadius" to "var(--border-radius-lg)", "boxShadow" to "var(--shadow)", "overflow" to "hidden")), "input" to _pS(_uM("display" to "flex", "width" to "100%", "paddingTop" to "var(--spacing-sm)", "paddingRight" to "var(--spacing)", "paddingBottom" to "var(--spacing-sm)", "paddingLeft" to "var(--spacing)", "fontSize" to "var(--font-size-sm)", "lineHeight" to "var(--line-height-tight)", "color" to "var(--text-primary)", "backgroundColor" to "var(--background-color)", "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "var(--border-color)", "borderRightColor" to "var(--border-color)", "borderBottomColor" to "var(--border-color)", "borderLeftColor" to "var(--border-color)", "borderTopLeftRadius" to "var(--border-radius)", "borderTopRightRadius" to "var(--border-radius)", "borderBottomRightRadius" to "var(--border-radius)", "borderBottomLeftRadius" to "var(--border-radius)", "transitionProperty" to "borderColor", "transitionDuration" to "0.2s", "transitionTimingFunction" to "ease", "borderTopColor:focus" to "var(--primary-color)", "borderRightColor:focus" to "var(--primary-color)", "borderBottomColor:focus" to "var(--primary-color)", "borderLeftColor:focus" to "var(--primary-color)", "boxShadow:focus" to "0 0 0 2px rgba(24, 144, 255, 0.2)")), "@TRANSITION" to _uM("btn" to _uM("property" to "all", "duration" to "0.2s", "timingFunction" to "ease"), "input" to _uM("property" to "borderColor", "duration" to "0.2s", "timingFunction" to "ease"))) - } - } -} -val GenAppClass = CreateVueAppComponent(GenApp::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "app", name = "", inheritAttrs = true, inject = Map(), props = Map(), propsNeedCastKeys = _uA(), emits = Map(), components = Map(), styles = GenApp.styles) -} -, fun(instance): GenApp { - return GenApp(instance) -} -) -val messages: UTSJSONObject = UTSJSONObject(UTSSourceMapPosition("messages", "uni_modules/i18n/index.uts", 4, 7)) -val defaultLocale = "zh-CN" -var currentLocale = defaultLocale -fun t(key: String, values: UTSJSONObject? = null, locale: String? = null): String { - return key -} -open class LocaleWrapper : IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("LocaleWrapper", "uni_modules/i18n/index.uts", 17, 7) - } - open var value: String - get(): String { - return currentLocale - } - set(newLocale: String) { - currentLocale = newLocale - } -} -val localeObj = LocaleWrapper() -open class I18nGlobal : IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("I18nGlobal", "uni_modules/i18n/index.uts", 27, 7) - } - open fun t(key: String, values: UTSJSONObject? = null, locale: String? = null): String { - return uni.UNIEC68BC3.t(key, values, locale) - } - open var locale: LocaleWrapper = localeObj -} -open class I18nInstance : IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("I18nInstance", "uni_modules/i18n/index.uts", 34, 7) - } - open var global: I18nGlobal = I18nGlobal() -} -val i18n = I18nInstance() -open class AkReqOptions ( - @JsonNotNull - open var url: String, - open var method: String? = null, - open var data: Any? = null, - open var headers: UTSJSONObject? = null, - open var timeout: Number? = null, - open var contentType: String? = null, - open var retryCount: Number? = null, - open var retryDelayMs: Number? = null, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("AkReqOptions", "uni_modules/ak-req/interface.uts", 2, 13) - } -} -open class AkReqUploadOptions ( - @JsonNotNull - open var url: String, - @JsonNotNull - open var filePath: String, - @JsonNotNull - open var name: String, - open var formData: UTSJSONObject? = null, - open var headers: UTSJSONObject? = null, - open var apikey: String? = null, - open var timeout: Number? = null, - open var onProgress: ((progress: Number, transferredBytes: Number?, totalBytes: Number?) -> Unit)? = null, - open var retryCount: Number? = null, - open var retryDelayMs: Number? = null, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("AkReqUploadOptions", "uni_modules/ak-req/interface.uts", 14, 13) - } -} -open class AkReqResponse ( - @JsonNotNull - open var status: Number, - open var data: Any? = null, - @JsonNotNull - open var headers: UTSJSONObject, - open var error: UniError? = null, - open var total: Number? = null, - open var page: Number? = null, - open var limit: Number? = null, - open var hasmore: Boolean? = null, - open var origin: Any? = null, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("AkReqResponse", "uni_modules/ak-req/interface.uts", 28, 13) - } -} -val SUPA_URL: String = "http://192.168.1.61:18000" -val SUPA_KEY: String = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlzcyI6InN1cGFiYXNlLTEiLCJpYXQiOjE3Njk2NzY0OTgsImV4cCI6MTkyNzM1NjQ5OH0.ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" -val IS_TEST_MODE: Boolean = true -val ACCESS_TOKEN_KEY = "akreq_access_token" -val REFRESH_TOKEN_KEY = "akreq_refresh_token" -val EXPIRES_AT_KEY = "akreq_expires_at" -var _accessToken: String? = null -var _refreshToken: String? = null -var _expiresAt: Number? = null -open class AkReq : IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("AkReq", "uni_modules/ak-req/ak-req.uts", 11, 14) - } - companion object { - fun setToken(token: String, refreshToken: String, expiresAt: Number) { - _accessToken = token - _refreshToken = refreshToken - _expiresAt = expiresAt - uni_setStorageSync(ACCESS_TOKEN_KEY, token) - uni_setStorageSync(REFRESH_TOKEN_KEY, refreshToken) - uni_setStorageSync(EXPIRES_AT_KEY, expiresAt) - } - fun getToken(): String? { - if (_accessToken != null) { - return _accessToken - } - val t = uni_getStorageSync(ACCESS_TOKEN_KEY) as String? - _accessToken = t - return t - } - fun getRefreshToken(): String? { - if (_refreshToken != null) { - return _refreshToken - } - val t = uni_getStorageSync(REFRESH_TOKEN_KEY) as String? - _refreshToken = t - return t - } - fun getExpiresAt(): Number? { - val kVal = _expiresAt - if (kVal != null) { - return kVal - } - val t = uni_getStorageSync(EXPIRES_AT_KEY) as Number? - _expiresAt = t - return t - } - fun clearToken() { - _accessToken = null - _refreshToken = null - _expiresAt = null - uni_removeStorageSync(ACCESS_TOKEN_KEY) - uni_removeStorageSync(REFRESH_TOKEN_KEY) - uni_removeStorageSync(EXPIRES_AT_KEY) - } - fun isTokenExpiring(): Boolean { - val expiresAt = this.getExpiresAt() - if (expiresAt == null || expiresAt == 0) { - return true - } - val now = Math.floor(Date.now() / 1000) - return (expiresAt - now) < 300 - } - fun refreshTokenIfNeeded(apikey: String?): UTSPromise { - return wrapUTSPromise(suspend w@{ - val accessToken = this.getToken() - if (accessToken == null || accessToken === "") { - return@w false - } - if (!this.isTokenExpiring()) { - return@w false - } - val refreshToken = this.getRefreshToken() - if (refreshToken == null || refreshToken === "") { - this.clearToken() - return@w false - } - var headers: UTSJSONObject = object : UTSJSONObject(UTSSourceMapPosition("headers", "uni_modules/ak-req/ak-req.uts", 74, 13)) { - } - if (apikey != null && apikey !== "") { - headers = Object.assign(UTSJSONObject(), headers, object : UTSJSONObject() { - var apikey = apikey - }) as UTSJSONObject - } - try { - val res = await(this.request(AkReqOptions(url = SUPA_URL + "/auth/v1/token?grant_type=refresh_token", method = "POST", data = (object : UTSJSONObject() { - var refresh_token = refreshToken - }), headers = headers, contentType = "application/json"), true)) - val data = res.data as UTSJSONObject? - var accessToken: String? = null - var refreshTokenNew: String? = null - var expiresAt: Number? = null - if (data != null && UTSAndroid.`typeof`(data["getString"]) === "function" && UTSAndroid.`typeof`(data["getNumber"]) === "function") { - accessToken = data.getString("access_token") - refreshTokenNew = data.getString("refresh_token") - expiresAt = data.getNumber("expires_at") - } - if (accessToken != null && refreshTokenNew != null && expiresAt != null) { - this.setToken(accessToken, refreshTokenNew, expiresAt) - return@w true - } else { - this.clearToken() - return@w false - } - } - catch (e: Throwable) { - this.clearToken() - return@w false - } - }) - } - fun request(options: AkReqOptions, skipRefresh: Boolean?): UTSPromise> { - return wrapUTSPromise(suspend w@{ - if (skipRefresh != true) { - var apikey: String? = null - val headersObj = options.headers - if (headersObj != null && UTSAndroid.`typeof`(headersObj["getString"]) === "function") { - apikey = headersObj.getString("apikey") - } - await(this.refreshTokenIfNeeded(apikey)) - } - var headers = options.headers ?: (UTSJSONObject()) - val token = this.getToken() - if (token != null && token != "") { - headers = Object.assign(UTSJSONObject(), headers, object : UTSJSONObject() { - var Authorization = "Bearer " + token - }) as UTSJSONObject - } - var contentType = options.contentType ?: "" - if (headers != null && UTSAndroid.`typeof`(headers["getString"]) === "function") { - val headerContentType = headers.getString("Content-Type") - if (headerContentType != null) { - contentType = headerContentType - } - } - if (contentType != null && contentType != "") { - headers = Object.assign(UTSJSONObject(), headers, object : UTSJSONObject() { - var `Content-Type` = contentType - }) as UTSJSONObject - } - headers = Object.assign(object : UTSJSONObject() { - var Accept = "application/json" - }, headers) as UTSJSONObject - val timeout = options.timeout ?: 10000 - val maxRetry = Math.max(0, options.retryCount ?: 0) - val baseDelay = Math.max(0, options.retryDelayMs ?: 300) - val doOnce = fun(): UTSPromise> { - return UTSPromise>(fun(resolve, _reject){ - uni_request(RequestOptions(url = options.url, method = options.method ?: "GET", data = options.data, header = headers, timeout = timeout, success = fun(res){ - if (options.method == "HEAD") { - val result = AkReq.createResponse(res.statusCode, _uA(), res.header as UTSJSONObject) - resolve(result) - return - } - var data: Any? - if (UTSAndroid.`typeof`(res.data) == "string") { - val strData = res.data as String - if (strData.length > 0 && UTSRegExp("[^\\s]", "").test(strData)) { - try { - data = UTSAndroid.consoleDebugError(JSON.parse(strData), " at uni_modules/ak-req/ak-req.uts:162") as UTSJSONObject - } catch (e: Throwable) { - data = UTSJSONObject(object : UTSJSONObject() { - var raw = strData - }) - } - } else { - data = null - } - } else if (UTSArray.isArray(res.data)) { - data = res.data as UTSArray - } else { - val objData = res.data as UTSJSONObject? - data = objData - if (objData != null) { - val accessToken = objData.getString("access_token") - val refreshTokenNew = objData.getString("refresh_token") - val expiresAt = objData.getNumber("expires_at") - if (accessToken != null && refreshTokenNew != null && expiresAt != null) { - AkReq.setToken(accessToken, refreshTokenNew, expiresAt) - } - } - } - val result = AkReq.createResponse(res.statusCode, data ?: UTSJSONObject(), res.header as UTSJSONObject) - resolve(result) - } - , fail = fun(err){ - val result = AkReq.createResponse(err.errCode, err.data ?: UTSJSONObject(), UTSJSONObject(), UniError("uni-request", err.errCode, err.errMsg ?: "request fail")) - resolve(result) - } - )) - } - ) - } - var attempt: Number = 0 - var lastRes: AkReqResponse? = null - while(attempt <= maxRetry){ - val res = await(doOnce()) - lastRes = res - val status = res.status ?: 0 - val isOk = status >= 200 && status < 400 - if (isOk) { - return@w res - } - if (attempt === maxRetry) { - break - } - val delay = baseDelay * Math.pow(2, attempt) - await(UTSPromise(fun(r, _reject){ - setTimeout(fun(){ - r(Unit) - } - , delay) - } - )) - attempt++ - } - val finalRes = lastRes!!!! - if ((finalRes.status === 401) && (skipRefresh !== true)) { - try { - this.clearToken() - uni_showToast(ShowToastOptions(title = "未授权或登录已过期,请重新登录", icon = "none")) - } - catch (e: Throwable) {} - try {} catch (e: Throwable) {} - } - return@w finalRes - }) - } - fun upload(options: AkReqUploadOptions): UTSPromise> { - return wrapUTSPromise(suspend w@{ - var apikey: String? = null - val hdr = options.headers - if (hdr != null && UTSAndroid.`typeof`(hdr["getString"]) === "function") { - apikey = hdr.getString("apikey") - } - if (apikey == null && options.apikey != null) { - apikey = options.apikey - } - await(this.refreshTokenIfNeeded(if (apikey != null) { - apikey - } else { - null - } - )) - var headers = options.headers ?: (UTSJSONObject()) - val token = this.getToken() - if (token != null && token !== "") { - headers = Object.assign(UTSJSONObject(), headers, object : UTSJSONObject() { - var Authorization = "Bearer " + token - }) as UTSJSONObject - } - if (apikey != null && apikey !== "") { - headers = Object.assign(UTSJSONObject(), headers, _uO("apikey" to apikey)) as UTSJSONObject - } - headers = Object.assign(object : UTSJSONObject() { - var Accept = "application/json" - }, headers) as UTSJSONObject - val timeout = options.timeout ?: 10000 - val maxRetry = Math.max(0, options.retryCount ?: 0) - val baseDelay = Math.max(0, options.retryDelayMs ?: 300) - val doOnce = fun(): UTSPromise> { - return UTSPromise>(fun(resolve, _reject){ - val task = uni_uploadFile(UploadFileOptions(url = options.url, filePath = options.filePath, name = options.name, formData = options.formData ?: UTSJSONObject(), header = headers, timeout = timeout, success = fun(res: UploadFileSuccess){ - var parsed: UTSJSONObject? = null - try { - parsed = UTSAndroid.consoleDebugError(JSON.parse(res.data), " at uni_modules/ak-req/ak-req.uts:275") as UTSJSONObject - } - catch (e: Throwable) { - parsed = null - } - if (parsed != null) { - val accessToken = parsed.getString("access_token") - val refreshTokenNew = parsed.getString("refresh_token") - val expiresAt = parsed.getNumber("expires_at") - if (accessToken != null && refreshTokenNew != null && expiresAt != null) { - AkReq.setToken(accessToken, refreshTokenNew, expiresAt) - } - } - val result = AkReq.createResponse(res.statusCode, parsed ?: UTSJSONObject(), headers) - resolve(result) - } - , fail = fun(err){ - val result = AkReq.createResponse(err.errCode, err.data ?: UTSJSONObject(), UTSJSONObject(), UniError("uni-upload", err.errCode, err.errMsg ?: "upload fail")) - resolve(result) - } - )) - if (options.onProgress != null && task != null) { - val progressCallback = fun(res: OnProgressUpdateResult){ - val percent = res.progress as Number - val sent = res.totalBytesSent as Number? - val expected = res.totalBytesExpectedToSend as Number? - if (options.onProgress != null) { - options.onProgress!!(percent, sent, expected) - } - } - task.onProgressUpdate(progressCallback) - } - } - ) - } - var attempt: Number = 0 - var lastRes: AkReqResponse? = null - while(attempt <= maxRetry){ - val res = await(doOnce()) - lastRes = res - val status = res.status ?: 0 - val isOk = status >= 200 && status < 400 - if (isOk) { - return@w res - } - if (attempt === maxRetry) { - break - } - val delay = baseDelay * Math.pow(2, attempt) - await(UTSPromise(fun(resolve, _reject){ - setTimeout(fun(){ - resolve(Unit) - } - , delay) - } - )) - attempt++ - } - return@w lastRes!!!! - }) - } - fun createResponse(status: Number, data: Any, headers: UTSJSONObject, error: UniError? = null, total: Number? = null, page: Number? = null, limit: Number? = null, hasmore: Boolean? = null, origin: Any? = null): AkReqResponse { - return AkReqResponse(status = status, data = data, headers = headers, error = error, total = total, page = page, limit = limit, hasmore = hasmore, origin = origin) - } - inline fun requestAs(options: AkReqOptions, skipRefresh: Boolean?): UTSPromise> { - return wrapUTSPromise(suspend w@{ - val genericTypeT = object : io.dcloud.uts.gson.reflect.TypeToken() { - }.type - val response = await(this.request(options, skipRefresh)) - var convertedData: T? = null - try { - if (response.data is UTSJSONObject) { - convertedData = (response.data as UTSJSONObject).parse() - } else if (UTSArray.isArray(response.data)) { - val convertedArray: UTSArray = _uA() - val dataArray = response.data as UTSArray - run { - var i: Number = 0 - while(i < dataArray.length){ - val item = dataArray[i] - if (item is UTSJSONObject) { - val parsed = (item as UTSJSONObject).parse() - if (parsed != null) { - convertedArray.push(parsed) - } - } else { - convertedArray.push(item) - } - i++ - } - } - convertedData = UTSObject.toGenericType(convertedArray, genericTypeT) - } - } - catch (e: Throwable) { - console.warn("类型转换失败,使用原始 UTSJSONObject:", e, " at uni_modules/ak-req/ak-req.uts:419") - convertedData = UTSObject.toGenericType(response.data, genericTypeT) - } - val aaa: UTSJSONObject = object : UTSJSONObject(UTSSourceMapPosition("aaa", "uni_modules/ak-req/ak-req.uts", 392, 15)) { - var status = response.status - var data = convertedData!!!! - var headers = response.headers - var error = response.error - var total = response.total - var page = response.page - var limit = response.limit - var hasmore = response.hasmore - var origin = response.origin - } - return@w aaa - }) - } - } -} -fun toUniError(error: Any, defaultMessage: String = "操作失败"): UniError { - if (error is UniError) { - return error as UniError - } - var errorMessage = defaultMessage - var errorCode: Number = -1 - try { - if (error is UTSError) { - errorMessage = if ((error as UTSError).message != null && (error as UTSError).message != "") { - (error as UTSError).message - } else { - defaultMessage - } - } else if (UTSAndroid.`typeof`(error) === "string") { - errorMessage = error as String - } else if (error != null && UTSAndroid.`typeof`(error) === "object") { - val errorObj = error as UTSJSONObject - var message: String = "" - if (errorObj["message"] != null) { - val msgValue = errorObj["message"] - if (UTSAndroid.`typeof`(msgValue) === "string") { - message = msgValue as String - } - } else if (errorObj["errMsg"] != null) { - val msgValue = errorObj["errMsg"] - if (UTSAndroid.`typeof`(msgValue) === "string") { - message = msgValue as String - } - } else if (errorObj["error"] != null) { - val msgValue = errorObj["error"] - if (UTSAndroid.`typeof`(msgValue) === "string") { - message = msgValue as String - } - } else if (errorObj["details"] != null) { - val msgValue = errorObj["details"] - if (UTSAndroid.`typeof`(msgValue) === "string") { - message = msgValue as String - } - } else if (errorObj["msg"] != null) { - val msgValue = errorObj["msg"] - if (UTSAndroid.`typeof`(msgValue) === "string") { - message = msgValue as String - } - } - if (message != "") { - errorMessage = message - } - var code: Number = 0 - if (errorObj["code"] != null) { - val codeValue = errorObj["code"] - if (UTSAndroid.`typeof`(codeValue) === "number") { - code = codeValue as Number - } - } else if (errorObj["errCode"] != null) { - val codeValue = errorObj["errCode"] - if (UTSAndroid.`typeof`(codeValue) === "number") { - code = codeValue as Number - } - } else if (errorObj["status"] != null) { - val codeValue = errorObj["status"] - if (UTSAndroid.`typeof`(codeValue) === "number") { - code = codeValue as Number - } - } - if (code != 0) { - errorCode = code - } - } - } - catch (e: Throwable) { - console.error("Error converting to UniError:", e, " at utils/utils.uts:128") - errorMessage = defaultMessage - } - val uniError = UniError("AppError", errorCode, errorMessage) - return uniError -} -open class AkSupaSignInResult ( - @JsonNotNull - open var access_token: String, - @JsonNotNull - open var refresh_token: String, - @JsonNotNull - open var expires_at: Number, - open var user: UTSJSONObject? = null, - open var token_type: String? = null, - open var expires_in: Number? = null, - @JsonNotNull - open var raw: UTSJSONObject, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("AkSupaSignInResult", "components/supadb/aksupa.uts", 4, 13) - } -} -typealias CountOption = String -open class AkSupaSelectOptions ( - open var limit: Number? = null, - open var order: String? = null, - open var getcount: String? = null, - open var count: CountOption? = null, - open var head: Boolean? = null, - open var columns: String? = null, - open var single: Boolean? = null, - open var rangeFrom: Number? = null, - open var rangeTo: Number? = null, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("AkSupaSelectOptions", "components/supadb/aksupa.uts", 16, 13) - } -} -open class OrderOptions ( - open var ascending: Boolean? = null, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("OrderOptions", "components/supadb/aksupa.uts", 28, 13) - } -} -open class AkSupaSessionInfo ( - open var session: AkSupaSignInResult? = null, - open var user: UTSJSONObject? = null, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("AkSupaSessionInfo", "components/supadb/aksupa.uts", 32, 13) - } -} -open class AkSupaCondition ( - @JsonNotNull - open var field: String, - @JsonNotNull - open var op: String, - @JsonNotNull - open var value: Any, - @JsonNotNull - open var logic: String, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("AkSupaCondition", "components/supadb/aksupa.uts", 38, 6) - } -} -open class AkSupaQueryBuilder : IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("AkSupaQueryBuilder", "components/supadb/aksupa.uts", 44, 14) - } - private var _supa: AkSupa - private var _table: String - private var _filter: UTSJSONObject? = null - private var _options: AkSupaSelectOptions = AkSupaSelectOptions() - private var _values: Any? = null - private var _single: Boolean = false - private var _conditions: UTSArray = _uA() - private var _nextLogic: String = "and" - private var _action: String? = null - private var _orString: String? = null - private var _rpcFunction: String? = null - private var _rpcParams: UTSJSONObject? = null - private var _page: Number = 1 - constructor(supa: AkSupa, table: String){ - this._supa = supa - this._table = table - } - open fun eq(field: String, value: Any): AkSupaQueryBuilder { - return this._addCond(field, "eq", value) - } - open fun neq(field: String, value: Any): AkSupaQueryBuilder { - return this._addCond(field, "neq", value) - } - open fun gt(field: String, value: Any): AkSupaQueryBuilder { - return this._addCond(field, "gt", value) - } - open fun gte(field: String, value: Any): AkSupaQueryBuilder { - return this._addCond(field, "gte", value) - } - open fun lt(field: String, value: Any): AkSupaQueryBuilder { - return this._addCond(field, "lt", value) - } - open fun lte(field: String, value: Any): AkSupaQueryBuilder { - return this._addCond(field, "lte", value) - } - open fun like(field: String, value: Any): AkSupaQueryBuilder { - return this._addCond(field, "like", value) - } - open fun ilike(field: String, value: Any): AkSupaQueryBuilder { - return this._addCond(field, "ilike", value) - } - open fun `in`(field: String, value: UTSArray): AkSupaQueryBuilder { - return this._addCond(field, "in", value) - } - open fun `is`(field: String, value: Any?): AkSupaQueryBuilder { - return this._addCond(field, "is", value) - } - open fun contains(field: String, value: Any): AkSupaQueryBuilder { - return this._addCond(field, "cs", value) - } - open fun containedBy(field: String, value: Any): AkSupaQueryBuilder { - return this._addCond(field, "cd", value) - } - open fun not(field: String, opOrValue: Any, value: Any? = null): AkSupaQueryBuilder { - if (value != null) { - val combinedOp = "not." + opOrValue - var safeValue = value - if (value == null) { - safeValue = "null" - } - return this._addCond(field, combinedOp, safeValue) - } else { - var safeValue = opOrValue - if (opOrValue == null) { - safeValue = "null" - } - return this._addCond(field, "not", safeValue) - } - } - open fun and(): AkSupaQueryBuilder { - this._nextLogic = "and" - return this - } - open fun or(str: String?): AkSupaQueryBuilder { - if (UTSAndroid.`typeof`(str) == "string") { - this._orString = str - } else { - this._nextLogic = "or" - } - return this - } - private fun _addCond(afield: String, op: String, value: Any?): AkSupaQueryBuilder { - val field = UTSAndroid.consoleDebugError(encodeURIComponent(afield), " at components/supadb/aksupa.uts:109")!!!! - var safeValue = value - if (value == null) { - safeValue = "null" - } - this._conditions.push(AkSupaCondition(field = field, op = op, value = safeValue, logic = this._nextLogic)) - this._nextLogic = "and" - return this - } - open fun where(filter: UTSJSONObject): AkSupaQueryBuilder { - this._filter = filter - return this - } - open fun page(page: Number): AkSupaQueryBuilder { - this._page = page - var limit: Number = 0 - if (UTSAndroid.`typeof`(this._options.limit) == "number") { - limit = this._options.limit ?: 0 - } - if (limit > 0) { - val from = (page - 1) * limit - val to = from + limit - 1 - this.range(from, to) - } - return this - } - open fun limit(limit: Number): AkSupaQueryBuilder { - this._options.limit = limit - val from = (this._page - 1) * limit - val to = from + limit - 1 - this.range(from, to) - return this - } - open fun order(order: String, options: OrderOptions?): AkSupaQueryBuilder { - if (options != null && options.ascending == false) { - this._options.order = order + ".desc" - } else { - this._options.order = order + ".asc" - } - return this - } - open fun columns(columns: String): AkSupaQueryBuilder { - this._options.columns = columns - return this - } - open fun count(option: CountOption = "exact"): AkSupaQueryBuilder { - this._options.count = option - this._options.head = true - return this - } - open fun countExact(): AkSupaQueryBuilder { - return this.count("exact") - } - open fun countEstimated(): AkSupaQueryBuilder { - return this.count("estimated") - } - open fun countPlanned(): AkSupaQueryBuilder { - return this.count("planned") - } - open fun head(enable: Boolean = true): AkSupaQueryBuilder { - this._options.head = enable - return this - } - open fun values(values: UTSJSONObject): AkSupaQueryBuilder { - this._values = values - return this - } - open fun single(): AkSupaQueryBuilder { - this._single = true - return this - } - open fun range(from: Number, to: Number): AkSupaQueryBuilder { - this._options.rangeFrom = from - this._options.rangeTo = to - return this - } - private fun _buildFilter(): String? { - if (this._conditions.length == 0 && (this._orString == null || this._orString == "")) { - if (this._filter == null) { - return null - } - return buildSupabaseFilterQuery(this._filter) - } - val ands: UTSArray = _uA() - val ors: UTSArray = _uA() - for(c in resolveUTSValueIterator(this._conditions)){ - if (c.logic == "or") { - ors.push(c) - } else { - ands.push(c) - } - } - val params: UTSArray = _uA() - for(cond in resolveUTSValueIterator(ands)){ - val k = cond.field - val op = cond.op - val kVal = cond.value - if ((op == "in" || op == "not.in") && UTSArray.isArray(kVal)) { - params.push("" + k + "=" + op + ".(" + (kVal as UTSArray).map(fun(x): String? { - return if (UTSAndroid.`typeof`(x) == "object") { - UTSAndroid.consoleDebugError(encodeURIComponent(JSON.stringify(x)), " at components/supadb/aksupa.uts:222") - } else { - UTSAndroid.consoleDebugError(encodeURIComponent(x.toString()), " at components/supadb/aksupa.uts:222") - } - }).join(",") + ")") - } else if ((op == "is" || op == "not.is") && (kVal == null || kVal == "null")) { - params.push("" + k + "=" + op + ".null") - } else { - val opvalstr: String = if ((UTSAndroid.`typeof`(kVal) == "object")) { - JSON.stringify(kVal) - } else { - (kVal as String) - } - params.push("" + k + "=" + op + "." + UTSAndroid.consoleDebugError(encodeURIComponent(opvalstr), " at components/supadb/aksupa.uts:229")) - } - } - if (ors.length > 0) { - val orStr = ors.map(fun(o): String { - val k = o.field - val op = o.op - val kVal = o.value - if (op == "in" && UTSArray.isArray(kVal)) { - return "" + k + ".in.(" + (kVal as UTSArray).map(fun(x): String? { - return UTSAndroid.consoleDebugError(encodeURIComponent(x as String), " at components/supadb/aksupa.uts:239") - } - ).join(",") + ")" - } - if (op == "is" && (kVal == null)) { - return "" + k + ".is.null" - } - return "" + k + "." + op + "." + UTSAndroid.consoleDebugError(encodeURIComponent(kVal as String), " at components/supadb/aksupa.uts:244") - } - ).join(",") - params.push("or=(" + orStr + ")") - } - if (this._orString != null && this._orString !== "") { - params.push("or=(" + UTSAndroid.consoleDebugError(encodeURIComponent(this._orString!!!!), " at components/supadb/aksupa.uts:249") + ")") - } - return if (params.length > 0) { - params.join("&") - } else { - null - } - } - open fun select(columns: String = "*", opt: UTSJSONObject? = null): AkSupaQueryBuilder { - this._action = "select" - if (columns != null) { - this._options.columns = columns - } - if (opt != null) { - Object.assign(this._options, opt) - } - return this - } - open fun insert(values: Any): AkSupaQueryBuilder { - this._action = "insert" - if (UTSArray.isArray(values)) { - if ((values as UTSArray).length == 0) { - throw toUniError("No values set for insert", "Insert操作缺少数据") - } - } else { - if (UTSJSONObject.keys(values as UTSJSONObject).length == 0) { - throw toUniError("No values set for insert", "Insert操作缺少数据") - } - } - this._values = values - return this - } - open fun update(values: UTSJSONObject): AkSupaQueryBuilder { - this._action = "update" - if (UTSJSONObject.keys(values).length == 0) { - throw toUniError("No values set for update", "更新操作缺少数据") - } - this._values = values - return this - } - open fun `delete`(): AkSupaQueryBuilder { - this._action = "delete" - val filter = this._buildFilter() - if (filter == null) { - throw toUniError("No filter set for delete", "删除操作缺少筛选条件") - } - return this - } - open fun rpc(functionName: String, params: UTSJSONObject?): AkSupaQueryBuilder { - this._action = "rpc" - this._rpcFunction = functionName - this._rpcParams = params - return this - } - open fun execute(): UTSPromise> { - return wrapUTSPromise(suspend w@{ - val filter = this._buildFilter() - var res: Any - when (this._action) { - "select" -> - { - if (this._single) { - this._options.single = true - if (this._options.limit == null) { - this._options.limit = 1 - } - } - if (this._options.limit != null) { - if (this._options.getcount == null && this._options.count == null) { - this._options.count = "exact" - } - } - res = await(this._supa.select(this._table, filter, this._options)) - var total: Number = 0 - var hasmore = false - val page = this._page - var resdata = res.data - var limit: Number = 0 - if (UTSAndroid.`typeof`(this._options.limit) == "number") { - limit = this._options.limit ?: 0 - } else if (UTSArray.isArray(resdata)) { - limit = (resdata as UTSArray).length - } - var contentRange: String? = null - if (res.headers != null) { - var theheader = res.headers as UTSJSONObject - if (UTSAndroid.`typeof`(theheader["get"]) == "function") { - contentRange = theheader.get("content-range") as String? - } else if (UTSAndroid.`typeof`(theheader["content-range"]) == "string") { - contentRange = theheader["content-range"] as String - } - } - if (contentRange != null) { - val match = UTSRegExp("\\/(\\d+)\$", "").exec(contentRange) - if (match != null) { - total = parseInt(match[1] ?: "0") - hasmore = (page * limit) < total - } - } - if (total == 0) { - if (UTSAndroid.`typeof`(res["count"]) == "number") { - total = res["count"] as Number ?: 0 - } else if (UTSArray.isArray(resdata)) { - total = (resdata as UTSArray).length - } else { - total = 0 - } - } - if (!hasmore) { - hasmore = (page * limit) < total - } - if (this._options.head == true) { - return@w AkReqResponse(data = null, total = total, page = page, limit = limit, hasmore = false, origin = res, status = res.status, headers = res.headers, error = res.error) - } - return@w AkReqResponse(data = res.data, total = total, page = page, limit = limit, hasmore = hasmore, origin = res, status = res.status, headers = res.headers, error = res.error) - } - "insert" -> - { - val insertValues = this._values - if (insertValues == null) { - throw toUniError("No values set for insert", "插入操作缺少数据") - } - res = await(this._supa.insert(this._table, insertValues)) - } - "update" -> - { - val updateValues = this._values - if (updateValues == null) { - throw toUniError("No values set for update", "更新操作缺少数据") - } - if (filter == null) { - throw toUniError("No filter set for update", "更新操作缺少筛选条件") - } - if (UTSArray.isArray(updateValues)) { - throw toUniError("Update does not support array values", "更新操作不支持数组数据") - } - res = await(this._supa.update(this._table, filter, updateValues as UTSJSONObject)) - } - "delete" -> - { - if (filter == null) { - throw toUniError("No filter set for delete", "删除操作缺少筛选条件") - } - res = await(this._supa.`delete`(this._table, filter)) - } - "rpc" -> - { - if (this._rpcFunction == null) { - throw toUniError("No RPC function specified", "RPC调用缺少函数名") - } - res = await(this._supa.rpc(this._rpcFunction as String, this._rpcParams)) - } - else -> - res = await(this._supa.select(this._table, filter, this._options)) - } - if (res["data"] == null) { - res["data"] = UTSJSONObject() - } - return@w res - }) - } - inline fun executeAs(): UTSPromise> { - return wrapUTSPromise(suspend w@{ - val genericTypeT = object : io.dcloud.uts.gson.reflect.TypeToken() { - }.type - val result = await(this.execute()) - if (result.data == null) { - val aaa: UTSJSONObject = object : UTSJSONObject(UTSSourceMapPosition("aaa", "components/supadb/aksupa.uts", 439, 19)) { - var status = result.status - var data = null - var headers = result.headers - var error = result.error - var total = result.total - var page = result.page - var limit = result.limit - var hasmore = result.hasmore - var origin = result.origin - } - return@w aaa - } - var convertedData: Any? = null - try { - if (UTSArray.isArray(result.data)) { - val dataArray = result.data as UTSArray - val convertedArray: UTSArray = _uA() - run { - var i: Number = 0 - while(i < dataArray.length){ - val item = dataArray[i] - if (item is UTSJSONObject) { - val parsed = (item as UTSJSONObject).parse() - if (parsed != null) { - convertedArray.push(parsed) - } else { - console.warn("转换失败,使用原始对象:", item, " at components/supadb/aksupa.uts:476") - convertedArray.push(UTSObject.toGenericType(item, genericTypeT)) - } - } else { - val jsonObj = UTSJSONObject(item, UTSSourceMapPosition("jsonObj", "components/supadb/aksupa.uts", 476, 31)) - val parsed = jsonObj.parse() - if (parsed != null) { - convertedArray.push(parsed) - } else { - console.warn("转换失败,使用原始对象:", item, " at components/supadb/aksupa.uts:492") - convertedArray.push(UTSObject.toGenericType(item, genericTypeT)) - } - } - i++ - } - } - convertedData = convertedArray - } else { - val convertedArray: UTSArray = _uA() - if (result.data is UTSJSONObject) { - val parsed = (result.data as UTSJSONObject).parse() - if (parsed != null) { - convertedArray.push(parsed) - } - } else { - val jsonObj = UTSJSONObject(result.data, UTSSourceMapPosition("jsonObj", "components/supadb/aksupa.uts", 502, 27)) - val parsed = jsonObj.parse() - if (parsed != null) { - convertedArray.push(parsed) - } - } - convertedData = convertedArray - } - } - catch (e: Throwable) { - console.warn("数据类型转换失败,使用原始数据:", e, " at components/supadb/aksupa.uts:524") - console.log(result.data, " at components/supadb/aksupa.uts:525") - convertedData = UTSObject.toGenericType(result.data, genericTypeT) - } - result.data = convertedData - val aaa = result as AkReqResponse - return@w aaa - }) - } -} -open class AkSupaStorageBucket : IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("AkSupaStorageBucket", "components/supadb/aksupa.uts", 578, 7) - } - private var supa: AkSupa - private var bucket: String - constructor(supa: AkSupa, bucket: String){ - this.supa = supa - this.bucket = bucket - } - open fun upload(path: String, filePath: String, options: UTSJSONObject?): UTSPromise> { - return wrapUTSPromise(suspend w@{ - val url = "" + this.supa.baseUrl + "/storage/v1/object/" + this.bucket + "/" + path - var headers: UTSJSONObject = _uO("__\$originalPosition" to UTSSourceMapPosition("headers", "components/supadb/aksupa.uts", 587, 13), "apikey" to this.supa.apikey) - val formData: UTSJSONObject = object : UTSJSONObject(UTSSourceMapPosition("formData", "components/supadb/aksupa.uts", 588, 15)) { - } - if (options != null && UTSAndroid.`typeof`(options) == "object") { - if (UTSAndroid.`typeof`(options["get"]) == "function" && options.get("x-upsert") != null) { - headers["x-upsert"] = options.get("x-upsert") - } - val keys = UTSJSONObject.keys(options) - run { - var i: Number = 0 - while(i < keys.length){ - val k = keys[i] - if (k != "x-upsert") { - formData[k] = options.get(k) - } - i++ - } - } - } - val token = AkReq.getToken() - if (token != null && !(token == "")) { - headers["Authorization"] = "Bearer " + token - } - return@w await(AkReq.upload(AkReqUploadOptions(url = url, filePath = filePath, name = "file", apikey = this.supa.apikey, formData = formData, headers = headers))) - }) - } -} -open class AkSupaStorageApi : IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("AkSupaStorageApi", "components/supadb/aksupa.uts", 614, 14) - } - private var _supa: AkSupa - constructor(supa: AkSupa){ - this._supa = supa - } - open fun from(bucket: String): AkSupaStorageBucket { - return AkSupaStorageBucket(this._supa, bucket) - } -} -open class AkSupa : IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("AkSupa", "components/supadb/aksupa.uts", 623, 14) - } - open lateinit var baseUrl: String - open lateinit var apikey: String - open var session: AkSupaSignInResult? = null - open var user: UTSJSONObject? = null - open lateinit var storage: AkSupaStorageApi - constructor(baseUrl: String, apikey: String){ - this.baseUrl = baseUrl - this.apikey = apikey - this.storage = AkSupaStorageApi(this) - try { - this.hydrateSessionFromStorage() - } - catch (e: Throwable) {} - } - open fun hydrateSessionFromStorage(): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val token = AkReq.getToken() - if (token == null || token == "") { - return@w false - } - val res = await(AkReq.request(AkReqOptions(url = this.baseUrl + "/auth/v1/user", method = "GET", headers = _uO("apikey" to this.apikey, "Authorization" to ("Bearer " + token), "Content-Type" to "application/json")), false)) - val status = res.status ?: 0 - if (!(status >= 200 && status < 400)) { - return@w false - } - var user: UTSJSONObject? = null - try { - user = UTSJSONObject(res.data) - } - catch (e: Throwable) { - user = null - } - if (user == null) { - return@w false - } - this.user = user - if (this.session == null) { - this.session = AkSupaSignInResult(access_token = token, refresh_token = AkReq.getRefreshToken() ?: "", expires_at = AkReq.getExpiresAt() ?: 0, user = user, token_type = "bearer", expires_in = 0, raw = user) - } - return@w true - } - catch (e: Throwable) { - return@w false - } - }) - } - open fun resetPassword(email: String): UTSPromise { - return wrapUTSPromise(suspend w@{ - val res = await(AkReq.request(AkReqOptions(url = this.baseUrl + "/auth/v1/recover", method = "POST", headers = _uO("apikey" to this.apikey, "Content-Type" to "application/json"), data = _uO("email" to email), contentType = "application/json"), false)) - return@w res.status == 200 - }) - } - open fun signOut(): UTSPromise { - return wrapUTSPromise(suspend { - this.session = null - this.user = null - }) - } - open fun signIn(email: String, password: String): UTSPromise { - return wrapUTSPromise(suspend w@{ - if (this.apikey == null || this.apikey.trim() === "" || this.apikey === "your-anon-key") { - throw UTSError("Supabase 配置错误:请在 ak/config.uts 中设置 SUPA_KEY(当前为占位符)") - } - val res = await(AkReq.request(AkReqOptions(url = this.baseUrl + "/auth/v1/token?grant_type=password", method = "POST", headers = _uO("apikey" to this.apikey, "Content-Type" to "application/json"), data = _uO("email" to email, "password" to password), contentType = "application/json"), false)) - val status = res.status ?: 0 - if (!(status >= 200 && status < 400)) { - var msg = "user.login.login_failed" - try { - if (res.data != null) { - val obj = UTSJSONObject(res.data, UTSSourceMapPosition("obj", "components/supadb/aksupa.uts", 727, 27)) - msg = obj.getString("message") ?: obj.getString("error") ?: obj.getString("msg") ?: obj.getString("description") ?: obj.getString("error_description") ?: msg - } - } - catch (e: Throwable) {} - throw UTSError(msg) - } - var data: UTSJSONObject - try { - data = UTSJSONObject(res.data) - } - catch (e: Throwable) { - data = UTSJSONObject(UTSJSONObject()) - } - val access_token = data.getString("access_token") ?: "" - val refresh_token = data.getString("refresh_token") ?: "" - val expires_at = data.getNumber("expires_at") ?: 0 - val user = data.getJSON("user") - AkReq.setToken(access_token, refresh_token, expires_at) - val session = AkSupaSignInResult(access_token = access_token, refresh_token = refresh_token, expires_at = expires_at, user = user, token_type = data.getString("token_type") ?: "", expires_in = data.getNumber("expires_in") ?: 0, raw = data) - this.session = session - this.user = user - return@w session - }) - } - open fun getSession(): AkSupaSessionInfo { - return AkSupaSessionInfo(session = this.session, user = this.user) - } - open fun signUp(email: String, password: String): UTSPromise { - return wrapUTSPromise(suspend w@{ - val res = await(AkReq.request(AkReqOptions(url = this.baseUrl + "/auth/v1/signup", method = "POST", headers = _uO("apikey" to this.apikey, "Content-Type" to "application/json"), data = _uO("email" to email, "password" to password), contentType = "application/json"), false)) - return@w res.data as UTSJSONObject - }) - } - open fun select(table: String, filter: String?, options: AkSupaSelectOptions?): UTSPromise> { - return wrapUTSPromise(suspend w@{ - var url = this.baseUrl + "/rest/v1/" + table - var headers: UTSJSONObject = _uO("__\$originalPosition" to UTSSourceMapPosition("headers", "components/supadb/aksupa.uts", 792, 13), "apikey" to this.apikey, "Content-Type" to "application/json", "Authorization" to ("Bearer " + (AkReq.getToken() ?: ""))) - var params: UTSArray = _uA() - if (options != null) { - if (options.columns != null && !(options.columns == "")) { - params.push("select=" + UTSAndroid.consoleDebugError(encodeURIComponent(options.columns ?: ""), " at components/supadb/aksupa.uts:800")) - } - if (options.limit != null) { - params.push("limit=" + options.limit!!) - } - if (options.order != null && !(options.order == "")) { - params.push("order=" + UTSAndroid.consoleDebugError(encodeURIComponent(options.order ?: ""), " at components/supadb/aksupa.uts:806")) - } - if (options.rangeFrom != null && options.rangeTo != null) { - headers["Range"] = "" + options.rangeFrom!! + "-" + options.rangeTo!! - headers["Range-Unit"] = "items" - } - var countOption = options.count ?: options.getcount - if (countOption != null) { - headers["Prefer"] = "count=" + countOption - } - if (options.head == true) { - if (headers["Prefer"] != null) { - headers["Prefer"] = (headers["Prefer"] as String) + ",return=minimal" - } else { - headers["Prefer"] = "return=minimal" - } - } - if (options.single == true) { - if (headers["Prefer"] != null) { - headers["Prefer"] = (headers["Prefer"] as String) + ",return=representation,single-object" - } else { - headers["Prefer"] = "return=representation,single-object" - } - } - if (options.columns == null) { - params.push("select=*") - } else if (options.columns == "") { - params.push("select=*") - } - } else { - params.push("select=*") - } - if (filter != null && filter !== "") { - params.push(filter!!!!) - } - if (params.length > 0) { - url += "?" + params.join("&") - } - var httpMethod: String = "GET" - if (options != null && options.head == true) { - httpMethod = "HEAD" - } - var reqOptions = AkReqOptions(url = url, method = httpMethod, headers = headers) - return@w await(this.requestWithAutoRefresh(reqOptions)) - }) - } - open fun select_uts(table: String, filter: UTSJSONObject?, options: AkSupaSelectOptions?): UTSPromise> { - return wrapUTSPromise(suspend w@{ - val filter_str = buildSupabaseFilterQuery(filter) - return@w this.select(table, filter_str, options) - }) - } - open fun insert(table: String, row: Any): UTSPromise> { - return wrapUTSPromise(suspend w@{ - val url = this.baseUrl + "/rest/v1/" + table - val headers: UTSJSONObject = _uO("__\$originalPosition" to UTSSourceMapPosition("headers", "components/supadb/aksupa.uts", 881, 15), "apikey" to this.apikey, "Content-Type" to "application/json", "Authorization" to ("Bearer " + (AkReq.getToken() ?: "")), "Prefer" to "return=representation") - var reqOptions = AkReqOptions(url = url, method = "POST", headers = headers, data = row, contentType = "application/json") - return@w await(this.requestWithAutoRefresh(reqOptions)) - }) - } - open fun update(table: String, filter: String?, values: UTSJSONObject): UTSPromise> { - return wrapUTSPromise(suspend w@{ - var url = this.baseUrl + "/rest/v1/" + table - if (filter != null && filter !== "") { - url += "?" + filter - } - val headers: UTSJSONObject = _uO("__\$originalPosition" to UTSSourceMapPosition("headers", "components/supadb/aksupa.uts", 910, 15), "apikey" to this.apikey, "Content-Type" to "application/json", "Authorization" to ("Bearer " + (AkReq.getToken() ?: "")), "Prefer" to "return=representation") - var reqOptions = AkReqOptions(url = url, method = "PATCH", headers = headers, data = values, contentType = "application/json") - return@w await(this.requestWithAutoRefresh(reqOptions)) - }) - } - open fun `delete`(table: String, filter: String?): UTSPromise> { - return wrapUTSPromise(suspend w@{ - var url = this.baseUrl + "/rest/v1/" + table - if (filter != null && filter !== "") { - url += "?" + filter - } - val headers: UTSJSONObject = _uO("__\$originalPosition" to UTSSourceMapPosition("headers", "components/supadb/aksupa.uts", 936, 15), "apikey" to this.apikey, "Content-Type" to "application/json", "Authorization" to ("Bearer " + (AkReq.getToken() ?: "")), "Prefer" to "return=representation") - var reqOptions = AkReqOptions(url = url, method = "DELETE", headers = headers, contentType = "application/json") - return@w await(this.requestWithAutoRefresh(reqOptions)) - }) - } - open fun rpc(functionName: String, params: UTSJSONObject?): UTSPromise> { - return wrapUTSPromise(suspend w@{ - val url = "" + this.baseUrl + "/rest/v1/rpc/" + functionName - val headers: UTSJSONObject = _uO("__\$originalPosition" to UTSSourceMapPosition("headers", "components/supadb/aksupa.uts", 958, 15), "apikey" to this.apikey, "Content-Type" to "application/json", "Authorization" to ("Bearer " + (AkReq.getToken() ?: ""))) - var reqOptions = AkReqOptions(url = url, method = "POST", headers = headers, data = params ?: UTSJSONObject(), contentType = "application/json") - return@w await(this.requestWithAutoRefresh(reqOptions)) - }) - } - open fun from(tableName: String): AkSupaQueryBuilder { - return AkSupaQueryBuilder(this, tableName) - } - open fun channel(topic: String): AkSupaRealtimeChannel { - return AkSupaRealtimeChannel(this, topic) - } - open fun removeChannel(channel: AkSupaRealtimeChannel): UTSPromise { - channel.unsubscribe() - return UTSPromise.resolve("ok") - } - open fun refreshSession(): UTSPromise { - return wrapUTSPromise(suspend w@{ - if (this.session == null || this.session?.refresh_token == null) { - return@w false - } - try { - val res = await(AkReq.request(AkReqOptions(url = this.baseUrl + "/auth/v1/token?grant_type=refresh_token", method = "POST", headers = _uO("apikey" to this.apikey, "Content-Type" to "application/json"), data = _uO("refresh_token" to this.session?.refresh_token), contentType = "application/json"), false)) - if (res.status == 200 && (res.data != null)) { - val data = res.data as UTSJSONObject - val access_token = data.getString("access_token") ?: "" - val refresh_token = data.getString("refresh_token") ?: "" - val expires_at = data.getNumber("expires_at") ?: 0 - val user = data.getJSON("user") - this.session = AkSupaSignInResult(access_token = access_token, refresh_token = refresh_token, expires_at = expires_at, user = user, token_type = data.getString("token_type") ?: "", expires_in = data.getNumber("expires_in") ?: 0, raw = data) - this.user = user - AkReq.setToken(access_token, refresh_token, expires_at) - return@w true - } - return@w false - } - catch (e: Throwable) { - return@w false - } - }) - } - open fun requestWithAutoRefresh(reqOptions: AkReqOptions, isRetry: Boolean = false): UTSPromise> { - return wrapUTSPromise(suspend w@{ - var res = await(AkReq.request(reqOptions, false)) - val isJwtExpired = (res.status == 401) - val isUnauthorized = (res.status == 401) - if ((isJwtExpired || isUnauthorized) && !isRetry) { - val ok = await(this.refreshSession()) - if (ok) { - var headers = reqOptions.headers - if (headers == null) { - headers = UTSJSONObject() - } - if (UTSAndroid.`typeof`(headers["set"]) == "function") { - headers.set("Authorization", "Bearer " + (AkReq.getToken() ?: "")) - reqOptions.headers = headers - } - res = await(AkReq.request(reqOptions, false)) - } else { - uni_removeStorageSync("user_id") - uni_removeStorageSync("token") - console.log("登录已过期,请重新登录", " at components/supadb/aksupa.uts:1083") - throw toUniError("登录已过期,请重新登录", "用户认证失败") - } - } - return@w res - }) - } -} -fun buildSupabaseFilterQuery(reassignedFilter: UTSJSONObject?): String { - var filter = reassignedFilter - if (filter == null) { - return "" - } - if (UTSAndroid.`typeof`(filter["get"]) !== "function") { - try { - filter = UTSJSONObject(filter as Any) - } - catch (e: Throwable) { - console.warn("filter 不是 UTSJSONObject,且无法转换", filter, " at components/supadb/aksupa.uts:1100") - return "" - } - } - val params: UTSArray = _uA() - val keys: UTSArray = UTSJSONObject.keys(filter) - run { - var i: Number = 0 - while(i < keys.length){ - val k = keys[i] - val v = filter.get(k) - if (k == "or" && UTSAndroid.`typeof`(v) == "string") { - params.push("or=(" + v as String + ")") - i++ - continue - } - if (v != null && UTSAndroid.`typeof`(v) == "object" && UTSAndroid.`typeof`((v as UTSJSONObject)["get"]) == "function") { - val vObj = v as UTSJSONObject - val opKeys = UTSJSONObject.keys(vObj) - run { - var j: Number = 0 - while(j < opKeys.length){ - val op = opKeys[j] - val opVal = vObj.get(op) - if ((op == "in" || op == "not.in") && UTSArray.isArray(opVal)) { - params.push("" + k + "=" + op + ".(" + (opVal as UTSArray).map(fun(x): String? { - return if (UTSAndroid.`typeof`(x) == "object") { - UTSAndroid.consoleDebugError(encodeURIComponent(JSON.stringify(x)), " at components/supadb/aksupa.uts:1096") - } else { - UTSAndroid.consoleDebugError(encodeURIComponent(x.toString()), " at components/supadb/aksupa.uts:1096") - } - }).join(",") + ")") - } else if (op == "is" && (opVal == null || opVal == "null")) { - params.push("" + k + "=is.null") - } else { - val opvalstr: String = if ((UTSAndroid.`typeof`(opVal) == "object")) { - JSON.stringify(opVal) - } else { - (opVal as String) - } - params.push("" + k + "=" + op + "." + UTSAndroid.consoleDebugError(encodeURIComponent(opvalstr), " at components/supadb/aksupa.uts:1103")) - } - j++ - } - } - } else if (v != null && UTSAndroid.`typeof`(v) == "object") { - val vObj = v as UTSJSONObject - val opKeys = UTSJSONObject.keys(vObj) - run { - var j: Number = 0 - while(j < opKeys.length){ - val op = opKeys[j] - val opVal = vObj.get(op) - params.push("" + k + "=" + op + "." + UTSAndroid.consoleDebugError(encodeURIComponent(if (!(opVal == null)) { - if (UTSAndroid.`typeof`(opVal) == "object") { - JSON.stringify(opVal) - } else { - opVal.toString() - } - } else { - "" - }), " at components/supadb/aksupa.uts:1113")) - j++ - } - } - } else { - params.push("" + k + "=eq." + UTSAndroid.consoleDebugError(encodeURIComponent(if (!(v == null)) { - v.toString() - } else { - "" - } - ), " at components/supadb/aksupa.uts:1117")) - } - i++ - } - } - return params.join("&") -} -fun createClient(url: String, key: String): AkSupa { - return AkSupa(url, key) -} -open class AkSupaRealtimeChannel : IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("AkSupaRealtimeChannel", "components/supadb/aksupa.uts", 1131, 14) - } - private var _supa: AkSupa - private var _topic: String - private var _timer: Number = 0 - private var _callback: ((payload: Any) -> Unit)? = null - private var _table: String = "" - private var _lastTime: String = Date().toISOString() - private var _isSubscribed: Boolean = false - constructor(supa: AkSupa, topic: String){ - this._supa = supa - this._topic = topic - } - open fun on(type: String, filter: UTSJSONObject, callback: (payload: Any) -> Unit): AkSupaRealtimeChannel { - val table = filter.getString("table") - if (table != null) { - this._table = table - } - this._callback = callback - return this - } - open fun subscribe(callback: ((status: String, err: Any?) -> Unit)?): AkSupaRealtimeChannel { - if (this._isSubscribed) { - return this - } - this._isSubscribed = true - if (callback != null) { - callback("SUBSCRIBED", null) - } - if (this._table == "") { - console.warn("Realtime check: No table specified for polling.", " at components/supadb/aksupa.uts:1190") - return this - } - this._timer = setInterval(fun(){ - this._checkUpdates() - } - , 3000) - return this - } - open fun unsubscribe() { - if (this._timer > 0) { - clearInterval(this._timer) - this._timer = 0 - } - this._isSubscribed = false - } - private fun _checkUpdates(): UTSPromise { - return wrapUTSPromise(suspend w@{ - if (!this._isSubscribed || this._table == "") { - return@w - } - try { - val now = Date().toISOString() - val res = await(this._supa.from(this._table).select("*").gt("created_at", this._lastTime).order("created_at", OrderOptions(ascending = true)).execute()) - if (res.error == null && res.data != null) { - var list: UTSArray = _uA() - if (UTSArray.isArray(res.data)) { - list = res.data as UTSArray - } - if (list.length > 0) { - val lastItem = list[list.length - 1] - var lastTimeStr: String? = null - if (lastItem is UTSJSONObject) { - lastTimeStr = (lastItem as UTSJSONObject).getString("created_at") - } else { - val j = UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(lastItem)), " at components/supadb/aksupa.uts:1207") as UTSJSONObject - lastTimeStr = j.getString("created_at") - } - if (lastTimeStr != null) { - this._lastTime = lastTimeStr - } else { - this._lastTime = now - } - if (this._callback != null) { - list.forEach(fun(item){ - val payload: UTSJSONObject = object : UTSJSONObject(UTSSourceMapPosition("payload", "components/supadb/aksupa.uts", 1220, 35)) { - var `new` = item - var eventType = "INSERT" - var old = null - } - this._callback?.invoke(payload) - } - ) - } - } - } - } - catch (e: Throwable) { - console.error("Realtime polling error:", e, " at components/supadb/aksupa.uts:1265") - } - }) - } -} -val supaInstance = createClient(SUPA_URL, SUPA_KEY) -val supaReady = UTSPromise.resolve(true) -open class UserType ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var phone: String, - open var email: String? = null, - open var nickname: String? = null, - open var avatar_url: String? = null, - @JsonNotNull - open var gender: Number, - @JsonNotNull - open var user_type: Number, - @JsonNotNull - open var status: Number, - @JsonNotNull - open var created_at: String, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("UserType", "types/mall-types.uts", 3, 13) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return UserTypeReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class UserTypeReactiveObject : UserType, IUTSReactive { - override var __v_raw: UserType - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: UserType, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, phone = __v_raw.phone, email = __v_raw.email, nickname = __v_raw.nickname, avatar_url = __v_raw.avatar_url, gender = __v_raw.gender, user_type = __v_raw.user_type, status = __v_raw.status, created_at = __v_raw.created_at) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UserTypeReactiveObject { - return UserTypeReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var phone: String - get() { - return _tRG(__v_raw, "phone", __v_raw.phone, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("phone")) { - return - } - val oldValue = __v_raw.phone - __v_raw.phone = value - _tRS(__v_raw, "phone", oldValue, value) - } - override var email: String? - get() { - return _tRG(__v_raw, "email", __v_raw.email, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("email")) { - return - } - val oldValue = __v_raw.email - __v_raw.email = value - _tRS(__v_raw, "email", oldValue, value) - } - override var nickname: String? - get() { - return _tRG(__v_raw, "nickname", __v_raw.nickname, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("nickname")) { - return - } - val oldValue = __v_raw.nickname - __v_raw.nickname = value - _tRS(__v_raw, "nickname", oldValue, value) - } - override var avatar_url: String? - get() { - return _tRG(__v_raw, "avatar_url", __v_raw.avatar_url, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("avatar_url")) { - return - } - val oldValue = __v_raw.avatar_url - __v_raw.avatar_url = value - _tRS(__v_raw, "avatar_url", oldValue, value) - } - override var gender: Number - get() { - return _tRG(__v_raw, "gender", __v_raw.gender, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("gender")) { - return - } - val oldValue = __v_raw.gender - __v_raw.gender = value - _tRS(__v_raw, "gender", oldValue, value) - } - override var user_type: Number - get() { - return _tRG(__v_raw, "user_type", __v_raw.user_type, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("user_type")) { - return - } - val oldValue = __v_raw.user_type - __v_raw.user_type = value - _tRS(__v_raw, "user_type", oldValue, value) - } - override var status: Number - get() { - return _tRG(__v_raw, "status", __v_raw.status, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("status")) { - return - } - val oldValue = __v_raw.status - __v_raw.status = value - _tRS(__v_raw, "status", oldValue, value) - } - override var created_at: String - get() { - return _tRG(__v_raw, "created_at", __v_raw.created_at, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("created_at")) { - return - } - val oldValue = __v_raw.created_at - __v_raw.created_at = value - _tRS(__v_raw, "created_at", oldValue, value) - } -} -open class MerchantType ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var user_id: String, - @JsonNotNull - open var shop_name: String, - open var shop_logo: String? = null, - open var shop_banner: String? = null, - open var shop_description: String? = null, - @JsonNotNull - open var contact_name: String, - @JsonNotNull - open var contact_phone: String, - @JsonNotNull - open var shop_status: Number, - @JsonNotNull - open var rating: Number, - @JsonNotNull - open var total_sales: Number, - @JsonNotNull - open var created_at: String, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("MerchantType", "types/mall-types.uts", 55, 13) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return MerchantTypeReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class MerchantTypeReactiveObject : MerchantType, IUTSReactive { - override var __v_raw: MerchantType - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: MerchantType, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, user_id = __v_raw.user_id, shop_name = __v_raw.shop_name, shop_logo = __v_raw.shop_logo, shop_banner = __v_raw.shop_banner, shop_description = __v_raw.shop_description, contact_name = __v_raw.contact_name, contact_phone = __v_raw.contact_phone, shop_status = __v_raw.shop_status, rating = __v_raw.rating, total_sales = __v_raw.total_sales, created_at = __v_raw.created_at) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): MerchantTypeReactiveObject { - return MerchantTypeReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var user_id: String - get() { - return _tRG(__v_raw, "user_id", __v_raw.user_id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("user_id")) { - return - } - val oldValue = __v_raw.user_id - __v_raw.user_id = value - _tRS(__v_raw, "user_id", oldValue, value) - } - override var shop_name: String - get() { - return _tRG(__v_raw, "shop_name", __v_raw.shop_name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("shop_name")) { - return - } - val oldValue = __v_raw.shop_name - __v_raw.shop_name = value - _tRS(__v_raw, "shop_name", oldValue, value) - } - override var shop_logo: String? - get() { - return _tRG(__v_raw, "shop_logo", __v_raw.shop_logo, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("shop_logo")) { - return - } - val oldValue = __v_raw.shop_logo - __v_raw.shop_logo = value - _tRS(__v_raw, "shop_logo", oldValue, value) - } - override var shop_banner: String? - get() { - return _tRG(__v_raw, "shop_banner", __v_raw.shop_banner, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("shop_banner")) { - return - } - val oldValue = __v_raw.shop_banner - __v_raw.shop_banner = value - _tRS(__v_raw, "shop_banner", oldValue, value) - } - override var shop_description: String? - get() { - return _tRG(__v_raw, "shop_description", __v_raw.shop_description, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("shop_description")) { - return - } - val oldValue = __v_raw.shop_description - __v_raw.shop_description = value - _tRS(__v_raw, "shop_description", oldValue, value) - } - override var contact_name: String - get() { - return _tRG(__v_raw, "contact_name", __v_raw.contact_name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("contact_name")) { - return - } - val oldValue = __v_raw.contact_name - __v_raw.contact_name = value - _tRS(__v_raw, "contact_name", oldValue, value) - } - override var contact_phone: String - get() { - return _tRG(__v_raw, "contact_phone", __v_raw.contact_phone, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("contact_phone")) { - return - } - val oldValue = __v_raw.contact_phone - __v_raw.contact_phone = value - _tRS(__v_raw, "contact_phone", oldValue, value) - } - override var shop_status: Number - get() { - return _tRG(__v_raw, "shop_status", __v_raw.shop_status, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("shop_status")) { - return - } - val oldValue = __v_raw.shop_status - __v_raw.shop_status = value - _tRS(__v_raw, "shop_status", oldValue, value) - } - override var rating: Number - get() { - return _tRG(__v_raw, "rating", __v_raw.rating, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("rating")) { - return - } - val oldValue = __v_raw.rating - __v_raw.rating = value - _tRS(__v_raw, "rating", oldValue, value) - } - override var total_sales: Number - get() { - return _tRG(__v_raw, "total_sales", __v_raw.total_sales, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("total_sales")) { - return - } - val oldValue = __v_raw.total_sales - __v_raw.total_sales = value - _tRS(__v_raw, "total_sales", oldValue, value) - } - override var created_at: String - get() { - return _tRG(__v_raw, "created_at", __v_raw.created_at, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("created_at")) { - return - } - val oldValue = __v_raw.created_at - __v_raw.created_at = value - _tRS(__v_raw, "created_at", oldValue, value) - } -} -open class ProductType ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var merchant_id: String, - @JsonNotNull - open var category_id: String, - @JsonNotNull - open var name: String, - open var description: String? = null, - @JsonNotNull - open var images: UTSArray, - @JsonNotNull - open var price: Number, - open var original_price: Number? = null, - @JsonNotNull - open var stock: Number, - @JsonNotNull - open var sales: Number, - @JsonNotNull - open var status: Number, - @JsonNotNull - open var created_at: String, - open var specification: String? = null, - open var usage: String? = null, - open var side_effects: String? = null, - open var precautions: String? = null, - open var expiry_date: String? = null, - open var storage_conditions: String? = null, - open var approval_number: String? = null, - open var tags: UTSArray? = null, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("ProductType", "types/mall-types.uts", 70, 13) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return ProductTypeReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class ProductTypeReactiveObject : ProductType, IUTSReactive { - override var __v_raw: ProductType - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: ProductType, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, merchant_id = __v_raw.merchant_id, category_id = __v_raw.category_id, name = __v_raw.name, description = __v_raw.description, images = __v_raw.images, price = __v_raw.price, original_price = __v_raw.original_price, stock = __v_raw.stock, sales = __v_raw.sales, status = __v_raw.status, created_at = __v_raw.created_at, specification = __v_raw.specification, usage = __v_raw.usage, side_effects = __v_raw.side_effects, precautions = __v_raw.precautions, expiry_date = __v_raw.expiry_date, storage_conditions = __v_raw.storage_conditions, approval_number = __v_raw.approval_number, tags = __v_raw.tags) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): ProductTypeReactiveObject { - return ProductTypeReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var merchant_id: String - get() { - return _tRG(__v_raw, "merchant_id", __v_raw.merchant_id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("merchant_id")) { - return - } - val oldValue = __v_raw.merchant_id - __v_raw.merchant_id = value - _tRS(__v_raw, "merchant_id", oldValue, value) - } - override var category_id: String - get() { - return _tRG(__v_raw, "category_id", __v_raw.category_id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("category_id")) { - return - } - val oldValue = __v_raw.category_id - __v_raw.category_id = value - _tRS(__v_raw, "category_id", oldValue, value) - } - override var name: String - get() { - return _tRG(__v_raw, "name", __v_raw.name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("name")) { - return - } - val oldValue = __v_raw.name - __v_raw.name = value - _tRS(__v_raw, "name", oldValue, value) - } - override var description: String? - get() { - return _tRG(__v_raw, "description", __v_raw.description, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("description")) { - return - } - val oldValue = __v_raw.description - __v_raw.description = value - _tRS(__v_raw, "description", oldValue, value) - } - override var images: UTSArray - get() { - return _tRG(__v_raw, "images", __v_raw.images, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("images")) { - return - } - val oldValue = __v_raw.images - __v_raw.images = value - _tRS(__v_raw, "images", oldValue, value) - } - override var price: Number - get() { - return _tRG(__v_raw, "price", __v_raw.price, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("price")) { - return - } - val oldValue = __v_raw.price - __v_raw.price = value - _tRS(__v_raw, "price", oldValue, value) - } - override var original_price: Number? - get() { - return _tRG(__v_raw, "original_price", __v_raw.original_price, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("original_price")) { - return - } - val oldValue = __v_raw.original_price - __v_raw.original_price = value - _tRS(__v_raw, "original_price", oldValue, value) - } - override var stock: Number - get() { - return _tRG(__v_raw, "stock", __v_raw.stock, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("stock")) { - return - } - val oldValue = __v_raw.stock - __v_raw.stock = value - _tRS(__v_raw, "stock", oldValue, value) - } - override var sales: Number - get() { - return _tRG(__v_raw, "sales", __v_raw.sales, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("sales")) { - return - } - val oldValue = __v_raw.sales - __v_raw.sales = value - _tRS(__v_raw, "sales", oldValue, value) - } - override var status: Number - get() { - return _tRG(__v_raw, "status", __v_raw.status, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("status")) { - return - } - val oldValue = __v_raw.status - __v_raw.status = value - _tRS(__v_raw, "status", oldValue, value) - } - override var created_at: String - get() { - return _tRG(__v_raw, "created_at", __v_raw.created_at, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("created_at")) { - return - } - val oldValue = __v_raw.created_at - __v_raw.created_at = value - _tRS(__v_raw, "created_at", oldValue, value) - } - override var specification: String? - get() { - return _tRG(__v_raw, "specification", __v_raw.specification, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("specification")) { - return - } - val oldValue = __v_raw.specification - __v_raw.specification = value - _tRS(__v_raw, "specification", oldValue, value) - } - override var usage: String? - get() { - return _tRG(__v_raw, "usage", __v_raw.usage, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("usage")) { - return - } - val oldValue = __v_raw.usage - __v_raw.usage = value - _tRS(__v_raw, "usage", oldValue, value) - } - override var side_effects: String? - get() { - return _tRG(__v_raw, "side_effects", __v_raw.side_effects, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("side_effects")) { - return - } - val oldValue = __v_raw.side_effects - __v_raw.side_effects = value - _tRS(__v_raw, "side_effects", oldValue, value) - } - override var precautions: String? - get() { - return _tRG(__v_raw, "precautions", __v_raw.precautions, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("precautions")) { - return - } - val oldValue = __v_raw.precautions - __v_raw.precautions = value - _tRS(__v_raw, "precautions", oldValue, value) - } - override var expiry_date: String? - get() { - return _tRG(__v_raw, "expiry_date", __v_raw.expiry_date, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("expiry_date")) { - return - } - val oldValue = __v_raw.expiry_date - __v_raw.expiry_date = value - _tRS(__v_raw, "expiry_date", oldValue, value) - } - override var storage_conditions: String? - get() { - return _tRG(__v_raw, "storage_conditions", __v_raw.storage_conditions, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("storage_conditions")) { - return - } - val oldValue = __v_raw.storage_conditions - __v_raw.storage_conditions = value - _tRS(__v_raw, "storage_conditions", oldValue, value) - } - override var approval_number: String? - get() { - return _tRG(__v_raw, "approval_number", __v_raw.approval_number, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("approval_number")) { - return - } - val oldValue = __v_raw.approval_number - __v_raw.approval_number = value - _tRS(__v_raw, "approval_number", oldValue, value) - } - override var tags: UTSArray? - get() { - return _tRG(__v_raw, "tags", __v_raw.tags, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("tags")) { - return - } - val oldValue = __v_raw.tags - __v_raw.tags = value - _tRS(__v_raw, "tags", oldValue, value) - } -} -open class ProductSkuType ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var product_id: String, - @JsonNotNull - open var sku_code: String, - open var specifications: UTSJSONObject? = null, - @JsonNotNull - open var price: Number, - @JsonNotNull - open var stock: Number, - open var image_url: String? = null, - @JsonNotNull - open var status: Number, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("ProductSkuType", "types/mall-types.uts", 94, 13) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return ProductSkuTypeReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class ProductSkuTypeReactiveObject : ProductSkuType, IUTSReactive { - override var __v_raw: ProductSkuType - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: ProductSkuType, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, product_id = __v_raw.product_id, sku_code = __v_raw.sku_code, specifications = __v_raw.specifications, price = __v_raw.price, stock = __v_raw.stock, image_url = __v_raw.image_url, status = __v_raw.status) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): ProductSkuTypeReactiveObject { - return ProductSkuTypeReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var product_id: String - get() { - return _tRG(__v_raw, "product_id", __v_raw.product_id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("product_id")) { - return - } - val oldValue = __v_raw.product_id - __v_raw.product_id = value - _tRS(__v_raw, "product_id", oldValue, value) - } - override var sku_code: String - get() { - return _tRG(__v_raw, "sku_code", __v_raw.sku_code, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("sku_code")) { - return - } - val oldValue = __v_raw.sku_code - __v_raw.sku_code = value - _tRS(__v_raw, "sku_code", oldValue, value) - } - override var specifications: UTSJSONObject? - get() { - return _tRG(__v_raw, "specifications", __v_raw.specifications, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("specifications")) { - return - } - val oldValue = __v_raw.specifications - __v_raw.specifications = value - _tRS(__v_raw, "specifications", oldValue, value) - } - override var price: Number - get() { - return _tRG(__v_raw, "price", __v_raw.price, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("price")) { - return - } - val oldValue = __v_raw.price - __v_raw.price = value - _tRS(__v_raw, "price", oldValue, value) - } - override var stock: Number - get() { - return _tRG(__v_raw, "stock", __v_raw.stock, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("stock")) { - return - } - val oldValue = __v_raw.stock - __v_raw.stock = value - _tRS(__v_raw, "stock", oldValue, value) - } - override var image_url: String? - get() { - return _tRG(__v_raw, "image_url", __v_raw.image_url, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("image_url")) { - return - } - val oldValue = __v_raw.image_url - __v_raw.image_url = value - _tRS(__v_raw, "image_url", oldValue, value) - } - override var status: Number - get() { - return _tRG(__v_raw, "status", __v_raw.status, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("status")) { - return - } - val oldValue = __v_raw.status - __v_raw.status = value - _tRS(__v_raw, "status", oldValue, value) - } -} -open class OrderType ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var order_no: String, - @JsonNotNull - open var user_id: String, - @JsonNotNull - open var merchant_id: String, - @JsonNotNull - open var status: Number, - @JsonNotNull - open var total_amount: Number, - @JsonNotNull - open var discount_amount: Number, - @JsonNotNull - open var delivery_fee: Number, - @JsonNotNull - open var actual_amount: Number, - open var payment_method: Number? = null, - @JsonNotNull - open var payment_status: Number, - @JsonNotNull - open var delivery_address: UTSJSONObject, - @JsonNotNull - open var created_at: String, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("OrderType", "types/mall-types.uts", 116, 13) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return OrderTypeReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class OrderTypeReactiveObject : OrderType, IUTSReactive { - override var __v_raw: OrderType - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: OrderType, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, order_no = __v_raw.order_no, user_id = __v_raw.user_id, merchant_id = __v_raw.merchant_id, status = __v_raw.status, total_amount = __v_raw.total_amount, discount_amount = __v_raw.discount_amount, delivery_fee = __v_raw.delivery_fee, actual_amount = __v_raw.actual_amount, payment_method = __v_raw.payment_method, payment_status = __v_raw.payment_status, delivery_address = __v_raw.delivery_address, created_at = __v_raw.created_at) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): OrderTypeReactiveObject { - return OrderTypeReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var order_no: String - get() { - return _tRG(__v_raw, "order_no", __v_raw.order_no, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("order_no")) { - return - } - val oldValue = __v_raw.order_no - __v_raw.order_no = value - _tRS(__v_raw, "order_no", oldValue, value) - } - override var user_id: String - get() { - return _tRG(__v_raw, "user_id", __v_raw.user_id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("user_id")) { - return - } - val oldValue = __v_raw.user_id - __v_raw.user_id = value - _tRS(__v_raw, "user_id", oldValue, value) - } - override var merchant_id: String - get() { - return _tRG(__v_raw, "merchant_id", __v_raw.merchant_id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("merchant_id")) { - return - } - val oldValue = __v_raw.merchant_id - __v_raw.merchant_id = value - _tRS(__v_raw, "merchant_id", oldValue, value) - } - override var status: Number - get() { - return _tRG(__v_raw, "status", __v_raw.status, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("status")) { - return - } - val oldValue = __v_raw.status - __v_raw.status = value - _tRS(__v_raw, "status", oldValue, value) - } - override var total_amount: Number - get() { - return _tRG(__v_raw, "total_amount", __v_raw.total_amount, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("total_amount")) { - return - } - val oldValue = __v_raw.total_amount - __v_raw.total_amount = value - _tRS(__v_raw, "total_amount", oldValue, value) - } - override var discount_amount: Number - get() { - return _tRG(__v_raw, "discount_amount", __v_raw.discount_amount, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("discount_amount")) { - return - } - val oldValue = __v_raw.discount_amount - __v_raw.discount_amount = value - _tRS(__v_raw, "discount_amount", oldValue, value) - } - override var delivery_fee: Number - get() { - return _tRG(__v_raw, "delivery_fee", __v_raw.delivery_fee, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("delivery_fee")) { - return - } - val oldValue = __v_raw.delivery_fee - __v_raw.delivery_fee = value - _tRS(__v_raw, "delivery_fee", oldValue, value) - } - override var actual_amount: Number - get() { - return _tRG(__v_raw, "actual_amount", __v_raw.actual_amount, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("actual_amount")) { - return - } - val oldValue = __v_raw.actual_amount - __v_raw.actual_amount = value - _tRS(__v_raw, "actual_amount", oldValue, value) - } - override var payment_method: Number? - get() { - return _tRG(__v_raw, "payment_method", __v_raw.payment_method, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("payment_method")) { - return - } - val oldValue = __v_raw.payment_method - __v_raw.payment_method = value - _tRS(__v_raw, "payment_method", oldValue, value) - } - override var payment_status: Number - get() { - return _tRG(__v_raw, "payment_status", __v_raw.payment_status, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("payment_status")) { - return - } - val oldValue = __v_raw.payment_status - __v_raw.payment_status = value - _tRS(__v_raw, "payment_status", oldValue, value) - } - override var delivery_address: UTSJSONObject - get() { - return _tRG(__v_raw, "delivery_address", __v_raw.delivery_address, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("delivery_address")) { - return - } - val oldValue = __v_raw.delivery_address - __v_raw.delivery_address = value - _tRS(__v_raw, "delivery_address", oldValue, value) - } - override var created_at: String - get() { - return _tRG(__v_raw, "created_at", __v_raw.created_at, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("created_at")) { - return - } - val oldValue = __v_raw.created_at - __v_raw.created_at = value - _tRS(__v_raw, "created_at", oldValue, value) - } -} -open class CouponTemplateType ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var name: String, - open var description: String? = null, - @JsonNotNull - open var coupon_type: Number, - @JsonNotNull - open var discount_type: Number, - @JsonNotNull - open var discount_value: Number, - @JsonNotNull - open var min_order_amount: Number, - open var max_discount_amount: Number? = null, - open var total_quantity: Number? = null, - @JsonNotNull - open var per_user_limit: Number, - @JsonNotNull - open var usage_limit: Number, - open var merchant_id: String? = null, - @JsonNotNull - open var category_ids: UTSArray, - @JsonNotNull - open var product_ids: UTSArray, - open var user_type_limit: Number? = null, - @JsonNotNull - open var start_time: String, - @JsonNotNull - open var end_time: String, - @JsonNotNull - open var status: Number, - @JsonNotNull - open var created_at: String, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("CouponTemplateType", "types/mall-types.uts", 180, 13) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return CouponTemplateTypeReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class CouponTemplateTypeReactiveObject : CouponTemplateType, IUTSReactive { - override var __v_raw: CouponTemplateType - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: CouponTemplateType, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, name = __v_raw.name, description = __v_raw.description, coupon_type = __v_raw.coupon_type, discount_type = __v_raw.discount_type, discount_value = __v_raw.discount_value, min_order_amount = __v_raw.min_order_amount, max_discount_amount = __v_raw.max_discount_amount, total_quantity = __v_raw.total_quantity, per_user_limit = __v_raw.per_user_limit, usage_limit = __v_raw.usage_limit, merchant_id = __v_raw.merchant_id, category_ids = __v_raw.category_ids, product_ids = __v_raw.product_ids, user_type_limit = __v_raw.user_type_limit, start_time = __v_raw.start_time, end_time = __v_raw.end_time, status = __v_raw.status, created_at = __v_raw.created_at) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): CouponTemplateTypeReactiveObject { - return CouponTemplateTypeReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var name: String - get() { - return _tRG(__v_raw, "name", __v_raw.name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("name")) { - return - } - val oldValue = __v_raw.name - __v_raw.name = value - _tRS(__v_raw, "name", oldValue, value) - } - override var description: String? - get() { - return _tRG(__v_raw, "description", __v_raw.description, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("description")) { - return - } - val oldValue = __v_raw.description - __v_raw.description = value - _tRS(__v_raw, "description", oldValue, value) - } - override var coupon_type: Number - get() { - return _tRG(__v_raw, "coupon_type", __v_raw.coupon_type, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("coupon_type")) { - return - } - val oldValue = __v_raw.coupon_type - __v_raw.coupon_type = value - _tRS(__v_raw, "coupon_type", oldValue, value) - } - override var discount_type: Number - get() { - return _tRG(__v_raw, "discount_type", __v_raw.discount_type, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("discount_type")) { - return - } - val oldValue = __v_raw.discount_type - __v_raw.discount_type = value - _tRS(__v_raw, "discount_type", oldValue, value) - } - override var discount_value: Number - get() { - return _tRG(__v_raw, "discount_value", __v_raw.discount_value, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("discount_value")) { - return - } - val oldValue = __v_raw.discount_value - __v_raw.discount_value = value - _tRS(__v_raw, "discount_value", oldValue, value) - } - override var min_order_amount: Number - get() { - return _tRG(__v_raw, "min_order_amount", __v_raw.min_order_amount, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("min_order_amount")) { - return - } - val oldValue = __v_raw.min_order_amount - __v_raw.min_order_amount = value - _tRS(__v_raw, "min_order_amount", oldValue, value) - } - override var max_discount_amount: Number? - get() { - return _tRG(__v_raw, "max_discount_amount", __v_raw.max_discount_amount, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("max_discount_amount")) { - return - } - val oldValue = __v_raw.max_discount_amount - __v_raw.max_discount_amount = value - _tRS(__v_raw, "max_discount_amount", oldValue, value) - } - override var total_quantity: Number? - get() { - return _tRG(__v_raw, "total_quantity", __v_raw.total_quantity, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("total_quantity")) { - return - } - val oldValue = __v_raw.total_quantity - __v_raw.total_quantity = value - _tRS(__v_raw, "total_quantity", oldValue, value) - } - override var per_user_limit: Number - get() { - return _tRG(__v_raw, "per_user_limit", __v_raw.per_user_limit, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("per_user_limit")) { - return - } - val oldValue = __v_raw.per_user_limit - __v_raw.per_user_limit = value - _tRS(__v_raw, "per_user_limit", oldValue, value) - } - override var usage_limit: Number - get() { - return _tRG(__v_raw, "usage_limit", __v_raw.usage_limit, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("usage_limit")) { - return - } - val oldValue = __v_raw.usage_limit - __v_raw.usage_limit = value - _tRS(__v_raw, "usage_limit", oldValue, value) - } - override var merchant_id: String? - get() { - return _tRG(__v_raw, "merchant_id", __v_raw.merchant_id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("merchant_id")) { - return - } - val oldValue = __v_raw.merchant_id - __v_raw.merchant_id = value - _tRS(__v_raw, "merchant_id", oldValue, value) - } - override var category_ids: UTSArray - get() { - return _tRG(__v_raw, "category_ids", __v_raw.category_ids, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("category_ids")) { - return - } - val oldValue = __v_raw.category_ids - __v_raw.category_ids = value - _tRS(__v_raw, "category_ids", oldValue, value) - } - override var product_ids: UTSArray - get() { - return _tRG(__v_raw, "product_ids", __v_raw.product_ids, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("product_ids")) { - return - } - val oldValue = __v_raw.product_ids - __v_raw.product_ids = value - _tRS(__v_raw, "product_ids", oldValue, value) - } - override var user_type_limit: Number? - get() { - return _tRG(__v_raw, "user_type_limit", __v_raw.user_type_limit, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("user_type_limit")) { - return - } - val oldValue = __v_raw.user_type_limit - __v_raw.user_type_limit = value - _tRS(__v_raw, "user_type_limit", oldValue, value) - } - override var start_time: String - get() { - return _tRG(__v_raw, "start_time", __v_raw.start_time, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("start_time")) { - return - } - val oldValue = __v_raw.start_time - __v_raw.start_time = value - _tRS(__v_raw, "start_time", oldValue, value) - } - override var end_time: String - get() { - return _tRG(__v_raw, "end_time", __v_raw.end_time, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("end_time")) { - return - } - val oldValue = __v_raw.end_time - __v_raw.end_time = value - _tRS(__v_raw, "end_time", oldValue, value) - } - override var status: Number - get() { - return _tRG(__v_raw, "status", __v_raw.status, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("status")) { - return - } - val oldValue = __v_raw.status - __v_raw.status = value - _tRS(__v_raw, "status", oldValue, value) - } - override var created_at: String - get() { - return _tRG(__v_raw, "created_at", __v_raw.created_at, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("created_at")) { - return - } - val oldValue = __v_raw.created_at - __v_raw.created_at = value - _tRS(__v_raw, "created_at", oldValue, value) - } -} -val ORDER_STATUS: UTSJSONObject = object : UTSJSONObject(UTSSourceMapPosition("ORDER_STATUS", "types/mall-types.uts", 229, 14)) { - var PENDING_PAYMENT: Number = 1 - var PAID: Number = 2 - var SHIPPED: Number = 3 - var DELIVERED: Number = 4 - var COMPLETED: Number = 5 - var CANCELLED: Number = 6 - var REFUNDING: Number = 7 - var REFUNDED: Number = 8 -} -val COUPON_TYPE: UTSJSONObject = object : UTSJSONObject(UTSSourceMapPosition("COUPON_TYPE", "types/mall-types.uts", 240, 14)) { - var DISCOUNT_AMOUNT: Number = 1 - var DISCOUNT_PERCENT: Number = 2 - var FREE_SHIPPING: Number = 3 - var NEWBIE: Number = 4 - var MEMBER: Number = 5 - var CATEGORY: Number = 6 - var MERCHANT: Number = 7 - var LIMITED_TIME: Number = 8 -} -val PAYMENT_METHOD: UTSJSONObject = object : UTSJSONObject(UTSSourceMapPosition("PAYMENT_METHOD", "types/mall-types.uts", 251, 14)) { - var WECHAT: Number = 1 - var ALIPAY: Number = 2 - var UNIONPAY: Number = 3 - var BALANCE: Number = 4 -} -val DELIVERY_STATUS: UTSJSONObject = object : UTSJSONObject(UTSSourceMapPosition("DELIVERY_STATUS", "types/mall-types.uts", 258, 14)) { - var PENDING: Number = 1 - var ASSIGNED: Number = 2 - var PICKED_UP: Number = 3 - var IN_TRANSIT: Number = 4 - var DELIVERED: Number = 5 - var FAILED: Number = 6 -} -val MALL_USER_TYPE: UTSJSONObject = object : UTSJSONObject(UTSSourceMapPosition("MALL_USER_TYPE", "types/mall-types.uts", 267, 14)) { - var CONSUMER: Number = 1 - var MERCHANT: Number = 2 - var DELIVERY: Number = 3 - var SERVICE: Number = 4 - var ADMIN: Number = 5 -} -val VERIFICATION_STATUS: UTSJSONObject = object : UTSJSONObject(UTSSourceMapPosition("VERIFICATION_STATUS", "types/mall-types.uts", 282, 14)) { - var UNVERIFIED: Number = 0 - var VERIFIED: Number = 1 - var FAILED: Number = 2 -} -val ADDRESS_LABEL: UTSJSONObject = object : UTSJSONObject(UTSSourceMapPosition("ADDRESS_LABEL", "types/mall-types.uts", 288, 14)) { - var HOME = "home" - var OFFICE = "office" - var SCHOOL = "school" - var OTHER = "other" -} -val FAVORITE_TYPE: UTSJSONObject = object : UTSJSONObject(UTSSourceMapPosition("FAVORITE_TYPE", "types/mall-types.uts", 295, 14)) { - var PRODUCT = "product" - var SHOP = "shop" -} -val SUBSCRIPTION_PERIOD: UTSJSONObject = object : UTSJSONObject(UTSSourceMapPosition("SUBSCRIPTION_PERIOD", "types/mall-types.uts", 303, 14)) { - var MONTHLY = "monthly" - var YEARLY = "yearly" -} -val SUBSCRIPTION_STATUS: UTSJSONObject = object : UTSJSONObject(UTSSourceMapPosition("SUBSCRIPTION_STATUS", "types/mall-types.uts", 308, 14)) { - var TRIAL = "trial" - var ACTIVE = "active" - var PAST_DUE = "past_due" - var CANCELED = "canceled" - var EXPIRED = "expired" -} -open class UserProfile ( - open var id: String? = null, - @JsonNotNull - open var username: String, - @JsonNotNull - open var email: String, - open var gender: String? = null, - open var birthday: String? = null, - open var height_cm: Number? = null, - open var weight_kg: Number? = null, - open var bio: String? = null, - open var avatar_url: String? = null, - open var preferred_language: String? = null, - open var role: String? = null, - open var school_id: String? = null, - open var grade_id: String? = null, - open var class_id: String? = null, - open var created_at: String? = null, - open var updated_at: String? = null, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("UserProfile", "types/mall-types.uts", 347, 13) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return UserProfileReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class UserProfileReactiveObject : UserProfile, IUTSReactive { - override var __v_raw: UserProfile - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: UserProfile, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, username = __v_raw.username, email = __v_raw.email, gender = __v_raw.gender, birthday = __v_raw.birthday, height_cm = __v_raw.height_cm, weight_kg = __v_raw.weight_kg, bio = __v_raw.bio, avatar_url = __v_raw.avatar_url, preferred_language = __v_raw.preferred_language, role = __v_raw.role, school_id = __v_raw.school_id, grade_id = __v_raw.grade_id, class_id = __v_raw.class_id, created_at = __v_raw.created_at, updated_at = __v_raw.updated_at) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UserProfileReactiveObject { - return UserProfileReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String? - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var username: String - get() { - return _tRG(__v_raw, "username", __v_raw.username, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("username")) { - return - } - val oldValue = __v_raw.username - __v_raw.username = value - _tRS(__v_raw, "username", oldValue, value) - } - override var email: String - get() { - return _tRG(__v_raw, "email", __v_raw.email, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("email")) { - return - } - val oldValue = __v_raw.email - __v_raw.email = value - _tRS(__v_raw, "email", oldValue, value) - } - override var gender: String? - get() { - return _tRG(__v_raw, "gender", __v_raw.gender, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("gender")) { - return - } - val oldValue = __v_raw.gender - __v_raw.gender = value - _tRS(__v_raw, "gender", oldValue, value) - } - override var birthday: String? - get() { - return _tRG(__v_raw, "birthday", __v_raw.birthday, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("birthday")) { - return - } - val oldValue = __v_raw.birthday - __v_raw.birthday = value - _tRS(__v_raw, "birthday", oldValue, value) - } - override var height_cm: Number? - get() { - return _tRG(__v_raw, "height_cm", __v_raw.height_cm, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("height_cm")) { - return - } - val oldValue = __v_raw.height_cm - __v_raw.height_cm = value - _tRS(__v_raw, "height_cm", oldValue, value) - } - override var weight_kg: Number? - get() { - return _tRG(__v_raw, "weight_kg", __v_raw.weight_kg, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("weight_kg")) { - return - } - val oldValue = __v_raw.weight_kg - __v_raw.weight_kg = value - _tRS(__v_raw, "weight_kg", oldValue, value) - } - override var bio: String? - get() { - return _tRG(__v_raw, "bio", __v_raw.bio, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("bio")) { - return - } - val oldValue = __v_raw.bio - __v_raw.bio = value - _tRS(__v_raw, "bio", oldValue, value) - } - override var avatar_url: String? - get() { - return _tRG(__v_raw, "avatar_url", __v_raw.avatar_url, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("avatar_url")) { - return - } - val oldValue = __v_raw.avatar_url - __v_raw.avatar_url = value - _tRS(__v_raw, "avatar_url", oldValue, value) - } - override var preferred_language: String? - get() { - return _tRG(__v_raw, "preferred_language", __v_raw.preferred_language, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("preferred_language")) { - return - } - val oldValue = __v_raw.preferred_language - __v_raw.preferred_language = value - _tRS(__v_raw, "preferred_language", oldValue, value) - } - override var role: String? - get() { - return _tRG(__v_raw, "role", __v_raw.role, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("role")) { - return - } - val oldValue = __v_raw.role - __v_raw.role = value - _tRS(__v_raw, "role", oldValue, value) - } - override var school_id: String? - get() { - return _tRG(__v_raw, "school_id", __v_raw.school_id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("school_id")) { - return - } - val oldValue = __v_raw.school_id - __v_raw.school_id = value - _tRS(__v_raw, "school_id", oldValue, value) - } - override var grade_id: String? - get() { - return _tRG(__v_raw, "grade_id", __v_raw.grade_id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("grade_id")) { - return - } - val oldValue = __v_raw.grade_id - __v_raw.grade_id = value - _tRS(__v_raw, "grade_id", oldValue, value) - } - override var class_id: String? - get() { - return _tRG(__v_raw, "class_id", __v_raw.class_id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("class_id")) { - return - } - val oldValue = __v_raw.class_id - __v_raw.class_id = value - _tRS(__v_raw, "class_id", oldValue, value) - } - override var created_at: String? - get() { - return _tRG(__v_raw, "created_at", __v_raw.created_at, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("created_at")) { - return - } - val oldValue = __v_raw.created_at - __v_raw.created_at = value - _tRS(__v_raw, "created_at", oldValue, value) - } - override var updated_at: String? - get() { - return _tRG(__v_raw, "updated_at", __v_raw.updated_at, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("updated_at")) { - return - } - val oldValue = __v_raw.updated_at - __v_raw.updated_at = value - _tRS(__v_raw, "updated_at", oldValue, value) - } -} -open class FootprintItemType ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var name: String, - @JsonNotNull - open var price: Number, - open var original_price: Number? = null, - @JsonNotNull - open var image: String, - @JsonNotNull - open var sales: Number, - @JsonNotNull - open var shopId: String, - @JsonNotNull - open var shopName: String, - @JsonNotNull - open var viewTime: Number, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("FootprintItemType", "types/mall-types.uts", 371, 13) - } -} -open class DeviceInfo ( - @JsonNotNull - open var id: String, - open var device_name: String? = null, - open var status: String? = null, - open var user_id: String? = null, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("DeviceInfo", "pages/sense/types.uts", 2, 13) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return DeviceInfoReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class DeviceInfoReactiveObject : DeviceInfo, IUTSReactive { - override var __v_raw: DeviceInfo - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: DeviceInfo, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, device_name = __v_raw.device_name, status = __v_raw.status, user_id = __v_raw.user_id) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): DeviceInfoReactiveObject { - return DeviceInfoReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var device_name: String? - get() { - return _tRG(__v_raw, "device_name", __v_raw.device_name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("device_name")) { - return - } - val oldValue = __v_raw.device_name - __v_raw.device_name = value - _tRS(__v_raw, "device_name", oldValue, value) - } - override var status: String? - get() { - return _tRG(__v_raw, "status", __v_raw.status, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("status")) { - return - } - val oldValue = __v_raw.status - __v_raw.status = value - _tRS(__v_raw, "status", oldValue, value) - } - override var user_id: String? - get() { - return _tRG(__v_raw, "user_id", __v_raw.user_id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("user_id")) { - return - } - val oldValue = __v_raw.user_id - __v_raw.user_id = value - _tRS(__v_raw, "user_id", oldValue, value) - } -} -fun ensureUserProfile(sessionUser: UTSJSONObject): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - await(supaReady) - val userId = sessionUser.getString("id") - val email = sessionUser.getString("email") ?: "" - if (userId == null || userId === "") { - console.error("无法获取用户ID", " at utils/sapi.uts:18") - return@w null - } - val checkRes = await(supaInstance.from("ak_users").select("*", UTSJSONObject()).eq("auth_id", userId).single().execute()) - console.log("ensureUserProfile check ak_users:", object : UTSJSONObject() { - var status = checkRes.status - var hasData = checkRes.data != null - }, " at utils/sapi.uts:29") - if (checkRes.status >= 200 && checkRes.status < 300 && checkRes.data != null) { - val data = checkRes.data - var existingUser: UTSJSONObject - if (data is UTSJSONObject) { - existingUser = data as UTSJSONObject - } else { - existingUser = UTSJSONObject(data) - } - return@w UserProfile(id = existingUser.getString("id") ?: "", username = existingUser.getString("username") ?: "", email = existingUser.getString("email") ?: email, gender = existingUser.getString("gender"), birthday = existingUser.getString("birthday"), height_cm = existingUser.getNumber("height_cm"), weight_kg = existingUser.getNumber("weight_kg"), bio = existingUser.getString("bio"), avatar_url = existingUser.getString("avatar_url"), preferred_language = existingUser.getString("preferred_language"), role = existingUser.getString("role") ?: "consumer", created_at = existingUser.getString("created_at"), updated_at = existingUser.getString("updated_at")) - } - val newUserData = UTSJSONObject(UTSSourceMapPosition("newUserData", "utils/sapi.uts", 55, 15)) - newUserData.set("id", userId) - newUserData.set("email", email) - newUserData.set("username", email.split("@")[0] ?: "user") - val insertRes = await(supaInstance.from("ak_users").insert(newUserData).select("*", UTSJSONObject()).single().execute()) - console.log("ensureUserProfile insert ak_users status:", insertRes.status, " at utils/sapi.uts:72") - if (insertRes.status >= 200 && insertRes.status < 300 && insertRes.data != null) { - val rawData = insertRes.data - val newUser = if ((rawData is UTSJSONObject)) { - (rawData as UTSJSONObject) - } else { - UTSJSONObject(rawData) - } - return@w UserProfile(id = newUser.getString("id") ?: "", username = newUser.getString("username") ?: "", email = newUser.getString("email") ?: email, gender = newUser.getString("gender"), birthday = newUser.getString("birthday"), height_cm = newUser.getNumber("height_cm"), weight_kg = newUser.getNumber("weight_kg"), bio = newUser.getString("bio"), avatar_url = newUser.getString("avatar_url"), preferred_language = newUser.getString("preferred_language"), role = newUser.getString("role") ?: "consumer", created_at = newUser.getString("created_at"), updated_at = newUser.getString("updated_at")) - } else { - console.error("创建用户资料失败:", insertRes.status, " at utils/sapi.uts:95") - return@w null - } - } - catch (error: Throwable) { - console.error("ensureUserProfile 异常:", error, " at utils/sapi.uts:99") - return@w null - } - }) -} -open class DeviceState ( - @JsonNotNull - open var devices: UTSArray, - open var currentDevice: DeviceInfo? = null, - @JsonNotNull - open var isLoading: Boolean = false, - open var lastUpdated: Number? = null, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("DeviceState", "utils/store.uts", 8, 13) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return DeviceStateReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class DeviceStateReactiveObject : DeviceState, IUTSReactive { - override var __v_raw: DeviceState - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: DeviceState, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(devices = __v_raw.devices, currentDevice = __v_raw.currentDevice, isLoading = __v_raw.isLoading, lastUpdated = __v_raw.lastUpdated) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): DeviceStateReactiveObject { - return DeviceStateReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var devices: UTSArray - get() { - return _tRG(__v_raw, "devices", __v_raw.devices, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("devices")) { - return - } - val oldValue = __v_raw.devices - __v_raw.devices = value - _tRS(__v_raw, "devices", oldValue, value) - } - override var currentDevice: DeviceInfo? - get() { - return _tRG(__v_raw, "currentDevice", __v_raw.currentDevice, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("currentDevice")) { - return - } - val oldValue = __v_raw.currentDevice - __v_raw.currentDevice = value - _tRS(__v_raw, "currentDevice", oldValue, value) - } - override var isLoading: Boolean - get() { - return _tRG(__v_raw, "isLoading", __v_raw.isLoading, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("isLoading")) { - return - } - val oldValue = __v_raw.isLoading - __v_raw.isLoading = value - _tRS(__v_raw, "isLoading", oldValue, value) - } - override var lastUpdated: Number? - get() { - return _tRG(__v_raw, "lastUpdated", __v_raw.lastUpdated, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("lastUpdated")) { - return - } - val oldValue = __v_raw.lastUpdated - __v_raw.lastUpdated = value - _tRS(__v_raw, "lastUpdated", oldValue, value) - } -} -open class State ( - @JsonNotNull - open var globalNum: Number, - open var userProfile: UserProfile? = null, - @JsonNotNull - open var isLoggedIn: Boolean = false, - @JsonNotNull - open var deviceState: DeviceState, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("State", "utils/store.uts", 15, 13) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return StateReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class StateReactiveObject : State, IUTSReactive { - override var __v_raw: State - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: State, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(globalNum = __v_raw.globalNum, userProfile = __v_raw.userProfile, isLoggedIn = __v_raw.isLoggedIn, deviceState = __v_raw.deviceState) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): StateReactiveObject { - return StateReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var globalNum: Number - get() { - return _tRG(__v_raw, "globalNum", __v_raw.globalNum, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("globalNum")) { - return - } - val oldValue = __v_raw.globalNum - __v_raw.globalNum = value - _tRS(__v_raw, "globalNum", oldValue, value) - } - override var userProfile: UserProfile? - get() { - return _tRG(__v_raw, "userProfile", __v_raw.userProfile, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("userProfile")) { - return - } - val oldValue = __v_raw.userProfile - __v_raw.userProfile = value - _tRS(__v_raw, "userProfile", oldValue, value) - } - override var isLoggedIn: Boolean - get() { - return _tRG(__v_raw, "isLoggedIn", __v_raw.isLoggedIn, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("isLoggedIn")) { - return - } - val oldValue = __v_raw.isLoggedIn - __v_raw.isLoggedIn = value - _tRS(__v_raw, "isLoggedIn", oldValue, value) - } - override var deviceState: DeviceState - get() { - return _tRG(__v_raw, "deviceState", __v_raw.deviceState, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("deviceState")) { - return - } - val oldValue = __v_raw.deviceState - __v_raw.deviceState = value - _tRS(__v_raw, "deviceState", oldValue, value) - } -} -val state = reactive(State(globalNum = 0, userProfile = UserProfile(username = "", email = ""), isLoggedIn = false, deviceState = DeviceState(devices = _uA(), currentDevice = null, isLoading = false, lastUpdated = null))) -val setIsLoggedIn = fun(kVal: Boolean){ - state.isLoggedIn = kVal -} -val setUserProfile = fun(profile: UserProfile){ - state.userProfile = profile -} -fun getCurrentUser(): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - await(supaReady) - } - catch (_: Throwable) {} - val sessionInfo = supaInstance.getSession() - if (sessionInfo.user == null) { - state.userProfile = UserProfile(username = "", email = "") - state.isLoggedIn = false - return@w null - } - val userId = sessionInfo.user?.getString("id") - if (userId == null) { - state.userProfile = UserProfile(username = "", email = "") - state.isLoggedIn = false - return@w null - } - val res = await(supaInstance.from("ak_users").select("*", UTSJSONObject()).eq("id", userId).execute()) - console.log(res, " at utils/store.uts:69") - if (res.status >= 200 && res.status < 300 && (res.data != null)) { - var user: UTSJSONObject? = null - val data = res.data as Any - if (UTSArray.isArray(data)) { - if ((data as UTSArray).length > 0) { - user = (data as UTSArray)[0] as UTSJSONObject - } - } else if (data != null) { - user = data as UTSJSONObject - } - console.log(user, " at utils/store.uts:79") - if (user == null) { - console.log("用户资料为空,尝试创建基础资料...", " at utils/store.uts:81") - val sessionUser = sessionInfo.user!! - if (sessionUser != null) { - val createdProfile = await(ensureUserProfile(sessionUser)) - if (createdProfile != null) { - state.userProfile = createdProfile - state.isLoggedIn = true - return@w createdProfile - } else { - console.error("创建用户资料失败", " at utils/store.uts:90") - state.userProfile = UserProfile(username = "", email = "") - state.isLoggedIn = false - return@w null - } - } else { - console.error("会话用户信息为空", " at utils/store.uts:96") - state.userProfile = UserProfile(username = "", email = "") - state.isLoggedIn = false - return@w null - } - } - console.log(user, " at utils/store.uts:102") - val profile = UserProfile(id = user.getString("id"), username = user.getString("username") ?: "", email = user.getString("email") ?: "", gender = user.getString("gender"), birthday = user.getString("birthday"), height_cm = user.getNumber("height_cm"), weight_kg = user.getNumber("weight_kg"), bio = user.getString("bio"), avatar_url = user.getString("avatar_url"), preferred_language = user.getString("preferred_language"), role = user.getString("role"), school_id = user.getString("school_id"), grade_id = user.getString("grade_id"), class_id = user.getString("class_id")) - state.userProfile = profile - state.isLoggedIn = true - return@w profile - } else { - state.userProfile = UserProfile(username = "", email = "") - state.isLoggedIn = false - return@w null - } - }) -} -fun logout() { - supaInstance.signOut() - state.userProfile = UserProfile(username = "", email = "") - state.isLoggedIn = false -} -val GenPagesUserLoginClass = CreateVueComponent(GenPagesUserLogin::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesUserLogin.inheritAttrs, inject = GenPagesUserLogin.inject, props = GenPagesUserLogin.props, propsNeedCastKeys = GenPagesUserLogin.propsNeedCastKeys, emits = GenPagesUserLogin.emits, components = GenPagesUserLogin.components, styles = GenPagesUserLogin.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesUserLogin.setup(props as GenPagesUserLogin) - } - ) -} -, fun(instance, renderer): GenPagesUserLogin { - return GenPagesUserLogin(instance, renderer) -} -) -val GenPagesUserBootClass = CreateVueComponent(GenPagesUserBoot::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesUserBoot.inheritAttrs, inject = GenPagesUserBoot.inject, props = GenPagesUserBoot.props, propsNeedCastKeys = GenPagesUserBoot.propsNeedCastKeys, emits = GenPagesUserBoot.emits, components = GenPagesUserBoot.components, styles = GenPagesUserBoot.styles) -} -, fun(instance, renderer): GenPagesUserBoot { - return GenPagesUserBoot(instance, renderer) -} -) -val GenPagesUserRegisterClass = CreateVueComponent(GenPagesUserRegister::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesUserRegister.inheritAttrs, inject = GenPagesUserRegister.inject, props = GenPagesUserRegister.props, propsNeedCastKeys = GenPagesUserRegister.propsNeedCastKeys, emits = GenPagesUserRegister.emits, components = GenPagesUserRegister.components, styles = GenPagesUserRegister.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesUserRegister.setup(props as GenPagesUserRegister) - } - ) -} -, fun(instance, renderer): GenPagesUserRegister { - return GenPagesUserRegister(instance, renderer) -} -) -val GenPagesUserForgotPasswordClass = CreateVueComponent(GenPagesUserForgotPassword::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesUserForgotPassword.inheritAttrs, inject = GenPagesUserForgotPassword.inject, props = GenPagesUserForgotPassword.props, propsNeedCastKeys = GenPagesUserForgotPassword.propsNeedCastKeys, emits = GenPagesUserForgotPassword.emits, components = GenPagesUserForgotPassword.components, styles = GenPagesUserForgotPassword.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesUserForgotPassword.setup(props as GenPagesUserForgotPassword) - } - ) -} -, fun(instance, renderer): GenPagesUserForgotPassword { - return GenPagesUserForgotPassword(instance, renderer) -} -) -val GenPagesUserTermsClass = CreateVueComponent(GenPagesUserTerms::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesUserTerms.inheritAttrs, inject = GenPagesUserTerms.inject, props = GenPagesUserTerms.props, propsNeedCastKeys = GenPagesUserTerms.propsNeedCastKeys, emits = GenPagesUserTerms.emits, components = GenPagesUserTerms.components, styles = GenPagesUserTerms.styles) -} -, fun(instance, renderer): GenPagesUserTerms { - return GenPagesUserTerms(instance, renderer) -} -) -open class Brand ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var name: String, - @JsonNotNull - open var logo_url: String, - @JsonNotNull - open var description: String, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("Brand", "utils/supabaseService.uts", 7, 13) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return BrandReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class BrandReactiveObject : Brand, IUTSReactive { - override var __v_raw: Brand - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: Brand, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, name = __v_raw.name, logo_url = __v_raw.logo_url, description = __v_raw.description) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): BrandReactiveObject { - return BrandReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var name: String - get() { - return _tRG(__v_raw, "name", __v_raw.name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("name")) { - return - } - val oldValue = __v_raw.name - __v_raw.name = value - _tRS(__v_raw, "name", oldValue, value) - } - override var logo_url: String - get() { - return _tRG(__v_raw, "logo_url", __v_raw.logo_url, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("logo_url")) { - return - } - val oldValue = __v_raw.logo_url - __v_raw.logo_url = value - _tRS(__v_raw, "logo_url", oldValue, value) - } - override var description: String - get() { - return _tRG(__v_raw, "description", __v_raw.description, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("description")) { - return - } - val oldValue = __v_raw.description - __v_raw.description = value - _tRS(__v_raw, "description", oldValue, value) - } -} -open class Category ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var name: String, - @JsonNotNull - open var icon: String, - @JsonNotNull - open var description: String, - @JsonNotNull - open var color: String, - open var parent_id: String? = null, - open var level: Number? = null, - open var slug: String? = null, - open var created_at: String? = null, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("Category", "utils/supabaseService.uts", 13, 13) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return CategoryReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class CategoryReactiveObject : Category, IUTSReactive { - override var __v_raw: Category - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: Category, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, name = __v_raw.name, icon = __v_raw.icon, description = __v_raw.description, color = __v_raw.color, parent_id = __v_raw.parent_id, level = __v_raw.level, slug = __v_raw.slug, created_at = __v_raw.created_at) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): CategoryReactiveObject { - return CategoryReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var name: String - get() { - return _tRG(__v_raw, "name", __v_raw.name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("name")) { - return - } - val oldValue = __v_raw.name - __v_raw.name = value - _tRS(__v_raw, "name", oldValue, value) - } - override var icon: String - get() { - return _tRG(__v_raw, "icon", __v_raw.icon, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("icon")) { - return - } - val oldValue = __v_raw.icon - __v_raw.icon = value - _tRS(__v_raw, "icon", oldValue, value) - } - override var description: String - get() { - return _tRG(__v_raw, "description", __v_raw.description, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("description")) { - return - } - val oldValue = __v_raw.description - __v_raw.description = value - _tRS(__v_raw, "description", oldValue, value) - } - override var color: String - get() { - return _tRG(__v_raw, "color", __v_raw.color, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("color")) { - return - } - val oldValue = __v_raw.color - __v_raw.color = value - _tRS(__v_raw, "color", oldValue, value) - } - override var parent_id: String? - get() { - return _tRG(__v_raw, "parent_id", __v_raw.parent_id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("parent_id")) { - return - } - val oldValue = __v_raw.parent_id - __v_raw.parent_id = value - _tRS(__v_raw, "parent_id", oldValue, value) - } - override var level: Number? - get() { - return _tRG(__v_raw, "level", __v_raw.level, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("level")) { - return - } - val oldValue = __v_raw.level - __v_raw.level = value - _tRS(__v_raw, "level", oldValue, value) - } - override var slug: String? - get() { - return _tRG(__v_raw, "slug", __v_raw.slug, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("slug")) { - return - } - val oldValue = __v_raw.slug - __v_raw.slug = value - _tRS(__v_raw, "slug", oldValue, value) - } - override var created_at: String? - get() { - return _tRG(__v_raw, "created_at", __v_raw.created_at, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("created_at")) { - return - } - val oldValue = __v_raw.created_at - __v_raw.created_at = value - _tRS(__v_raw, "created_at", oldValue, value) - } -} -open class Product ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var category_id: String, - @JsonNotNull - open var merchant_id: String, - @JsonNotNull - open var name: String, - open var subtitle: String? = null, - open var description: String? = null, - open var base_price: Number? = null, - open var market_price: Number? = null, - open var cost_price: Number? = null, - open var main_image_url: String? = null, - open var image_url: String? = null, - open var image_urls: String? = null, - open var video_urls: String? = null, - open var images: UTSArray? = null, - open var sale_count: Number? = null, - open var view_count: Number? = null, - open var total_stock: Number? = null, - open var available_stock: Number? = null, - open var is_hot: Boolean? = null, - open var is_new: Boolean? = null, - open var is_featured: Boolean? = null, - open var status: Number? = null, - open var rating_avg: Number? = null, - open var rating_count: Number? = null, - open var rating: Number? = null, - open var review_count: Number? = null, - open var brand_id: String? = null, - open var shop_id: String? = null, - open var tags: String? = null, - open var attributes: String? = null, - open var created_at: String? = null, - open var updated_at: String? = null, - open var price: Number? = null, - open var original_price: Number? = null, - open var stock: Number? = null, - open var sales: Number? = null, - open var cover: String? = null, - open var brand_name: String? = null, - open var category_name: String? = null, - open var shop_name: String? = null, - open var merchant_name: String? = null, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("Product", "utils/supabaseService.uts", 24, 13) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return ProductReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class ProductReactiveObject : Product, IUTSReactive { - override var __v_raw: Product - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: Product, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, category_id = __v_raw.category_id, merchant_id = __v_raw.merchant_id, name = __v_raw.name, subtitle = __v_raw.subtitle, description = __v_raw.description, base_price = __v_raw.base_price, market_price = __v_raw.market_price, cost_price = __v_raw.cost_price, main_image_url = __v_raw.main_image_url, image_url = __v_raw.image_url, image_urls = __v_raw.image_urls, video_urls = __v_raw.video_urls, images = __v_raw.images, sale_count = __v_raw.sale_count, view_count = __v_raw.view_count, total_stock = __v_raw.total_stock, available_stock = __v_raw.available_stock, is_hot = __v_raw.is_hot, is_new = __v_raw.is_new, is_featured = __v_raw.is_featured, status = __v_raw.status, rating_avg = __v_raw.rating_avg, rating_count = __v_raw.rating_count, rating = __v_raw.rating, review_count = __v_raw.review_count, brand_id = __v_raw.brand_id, shop_id = __v_raw.shop_id, tags = __v_raw.tags, attributes = __v_raw.attributes, created_at = __v_raw.created_at, updated_at = __v_raw.updated_at, price = __v_raw.price, original_price = __v_raw.original_price, stock = __v_raw.stock, sales = __v_raw.sales, cover = __v_raw.cover, brand_name = __v_raw.brand_name, category_name = __v_raw.category_name, shop_name = __v_raw.shop_name, merchant_name = __v_raw.merchant_name) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): ProductReactiveObject { - return ProductReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var category_id: String - get() { - return _tRG(__v_raw, "category_id", __v_raw.category_id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("category_id")) { - return - } - val oldValue = __v_raw.category_id - __v_raw.category_id = value - _tRS(__v_raw, "category_id", oldValue, value) - } - override var merchant_id: String - get() { - return _tRG(__v_raw, "merchant_id", __v_raw.merchant_id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("merchant_id")) { - return - } - val oldValue = __v_raw.merchant_id - __v_raw.merchant_id = value - _tRS(__v_raw, "merchant_id", oldValue, value) - } - override var name: String - get() { - return _tRG(__v_raw, "name", __v_raw.name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("name")) { - return - } - val oldValue = __v_raw.name - __v_raw.name = value - _tRS(__v_raw, "name", oldValue, value) - } - override var subtitle: String? - get() { - return _tRG(__v_raw, "subtitle", __v_raw.subtitle, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("subtitle")) { - return - } - val oldValue = __v_raw.subtitle - __v_raw.subtitle = value - _tRS(__v_raw, "subtitle", oldValue, value) - } - override var description: String? - get() { - return _tRG(__v_raw, "description", __v_raw.description, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("description")) { - return - } - val oldValue = __v_raw.description - __v_raw.description = value - _tRS(__v_raw, "description", oldValue, value) - } - override var base_price: Number? - get() { - return _tRG(__v_raw, "base_price", __v_raw.base_price, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("base_price")) { - return - } - val oldValue = __v_raw.base_price - __v_raw.base_price = value - _tRS(__v_raw, "base_price", oldValue, value) - } - override var market_price: Number? - get() { - return _tRG(__v_raw, "market_price", __v_raw.market_price, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("market_price")) { - return - } - val oldValue = __v_raw.market_price - __v_raw.market_price = value - _tRS(__v_raw, "market_price", oldValue, value) - } - override var cost_price: Number? - get() { - return _tRG(__v_raw, "cost_price", __v_raw.cost_price, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("cost_price")) { - return - } - val oldValue = __v_raw.cost_price - __v_raw.cost_price = value - _tRS(__v_raw, "cost_price", oldValue, value) - } - override var main_image_url: String? - get() { - return _tRG(__v_raw, "main_image_url", __v_raw.main_image_url, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("main_image_url")) { - return - } - val oldValue = __v_raw.main_image_url - __v_raw.main_image_url = value - _tRS(__v_raw, "main_image_url", oldValue, value) - } - override var image_url: String? - get() { - return _tRG(__v_raw, "image_url", __v_raw.image_url, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("image_url")) { - return - } - val oldValue = __v_raw.image_url - __v_raw.image_url = value - _tRS(__v_raw, "image_url", oldValue, value) - } - override var image_urls: String? - get() { - return _tRG(__v_raw, "image_urls", __v_raw.image_urls, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("image_urls")) { - return - } - val oldValue = __v_raw.image_urls - __v_raw.image_urls = value - _tRS(__v_raw, "image_urls", oldValue, value) - } - override var video_urls: String? - get() { - return _tRG(__v_raw, "video_urls", __v_raw.video_urls, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("video_urls")) { - return - } - val oldValue = __v_raw.video_urls - __v_raw.video_urls = value - _tRS(__v_raw, "video_urls", oldValue, value) - } - override var images: UTSArray? - get() { - return _tRG(__v_raw, "images", __v_raw.images, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("images")) { - return - } - val oldValue = __v_raw.images - __v_raw.images = value - _tRS(__v_raw, "images", oldValue, value) - } - override var sale_count: Number? - get() { - return _tRG(__v_raw, "sale_count", __v_raw.sale_count, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("sale_count")) { - return - } - val oldValue = __v_raw.sale_count - __v_raw.sale_count = value - _tRS(__v_raw, "sale_count", oldValue, value) - } - override var view_count: Number? - get() { - return _tRG(__v_raw, "view_count", __v_raw.view_count, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("view_count")) { - return - } - val oldValue = __v_raw.view_count - __v_raw.view_count = value - _tRS(__v_raw, "view_count", oldValue, value) - } - override var total_stock: Number? - get() { - return _tRG(__v_raw, "total_stock", __v_raw.total_stock, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("total_stock")) { - return - } - val oldValue = __v_raw.total_stock - __v_raw.total_stock = value - _tRS(__v_raw, "total_stock", oldValue, value) - } - override var available_stock: Number? - get() { - return _tRG(__v_raw, "available_stock", __v_raw.available_stock, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("available_stock")) { - return - } - val oldValue = __v_raw.available_stock - __v_raw.available_stock = value - _tRS(__v_raw, "available_stock", oldValue, value) - } - override var is_hot: Boolean? - get() { - return _tRG(__v_raw, "is_hot", __v_raw.is_hot, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("is_hot")) { - return - } - val oldValue = __v_raw.is_hot - __v_raw.is_hot = value - _tRS(__v_raw, "is_hot", oldValue, value) - } - override var is_new: Boolean? - get() { - return _tRG(__v_raw, "is_new", __v_raw.is_new, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("is_new")) { - return - } - val oldValue = __v_raw.is_new - __v_raw.is_new = value - _tRS(__v_raw, "is_new", oldValue, value) - } - override var is_featured: Boolean? - get() { - return _tRG(__v_raw, "is_featured", __v_raw.is_featured, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("is_featured")) { - return - } - val oldValue = __v_raw.is_featured - __v_raw.is_featured = value - _tRS(__v_raw, "is_featured", oldValue, value) - } - override var status: Number? - get() { - return _tRG(__v_raw, "status", __v_raw.status, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("status")) { - return - } - val oldValue = __v_raw.status - __v_raw.status = value - _tRS(__v_raw, "status", oldValue, value) - } - override var rating_avg: Number? - get() { - return _tRG(__v_raw, "rating_avg", __v_raw.rating_avg, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("rating_avg")) { - return - } - val oldValue = __v_raw.rating_avg - __v_raw.rating_avg = value - _tRS(__v_raw, "rating_avg", oldValue, value) - } - override var rating_count: Number? - get() { - return _tRG(__v_raw, "rating_count", __v_raw.rating_count, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("rating_count")) { - return - } - val oldValue = __v_raw.rating_count - __v_raw.rating_count = value - _tRS(__v_raw, "rating_count", oldValue, value) - } - override var rating: Number? - get() { - return _tRG(__v_raw, "rating", __v_raw.rating, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("rating")) { - return - } - val oldValue = __v_raw.rating - __v_raw.rating = value - _tRS(__v_raw, "rating", oldValue, value) - } - override var review_count: Number? - get() { - return _tRG(__v_raw, "review_count", __v_raw.review_count, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("review_count")) { - return - } - val oldValue = __v_raw.review_count - __v_raw.review_count = value - _tRS(__v_raw, "review_count", oldValue, value) - } - override var brand_id: String? - get() { - return _tRG(__v_raw, "brand_id", __v_raw.brand_id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("brand_id")) { - return - } - val oldValue = __v_raw.brand_id - __v_raw.brand_id = value - _tRS(__v_raw, "brand_id", oldValue, value) - } - override var shop_id: String? - get() { - return _tRG(__v_raw, "shop_id", __v_raw.shop_id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("shop_id")) { - return - } - val oldValue = __v_raw.shop_id - __v_raw.shop_id = value - _tRS(__v_raw, "shop_id", oldValue, value) - } - override var tags: String? - get() { - return _tRG(__v_raw, "tags", __v_raw.tags, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("tags")) { - return - } - val oldValue = __v_raw.tags - __v_raw.tags = value - _tRS(__v_raw, "tags", oldValue, value) - } - override var attributes: String? - get() { - return _tRG(__v_raw, "attributes", __v_raw.attributes, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("attributes")) { - return - } - val oldValue = __v_raw.attributes - __v_raw.attributes = value - _tRS(__v_raw, "attributes", oldValue, value) - } - override var created_at: String? - get() { - return _tRG(__v_raw, "created_at", __v_raw.created_at, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("created_at")) { - return - } - val oldValue = __v_raw.created_at - __v_raw.created_at = value - _tRS(__v_raw, "created_at", oldValue, value) - } - override var updated_at: String? - get() { - return _tRG(__v_raw, "updated_at", __v_raw.updated_at, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("updated_at")) { - return - } - val oldValue = __v_raw.updated_at - __v_raw.updated_at = value - _tRS(__v_raw, "updated_at", oldValue, value) - } - override var price: Number? - get() { - return _tRG(__v_raw, "price", __v_raw.price, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("price")) { - return - } - val oldValue = __v_raw.price - __v_raw.price = value - _tRS(__v_raw, "price", oldValue, value) - } - override var original_price: Number? - get() { - return _tRG(__v_raw, "original_price", __v_raw.original_price, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("original_price")) { - return - } - val oldValue = __v_raw.original_price - __v_raw.original_price = value - _tRS(__v_raw, "original_price", oldValue, value) - } - override var stock: Number? - get() { - return _tRG(__v_raw, "stock", __v_raw.stock, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("stock")) { - return - } - val oldValue = __v_raw.stock - __v_raw.stock = value - _tRS(__v_raw, "stock", oldValue, value) - } - override var sales: Number? - get() { - return _tRG(__v_raw, "sales", __v_raw.sales, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("sales")) { - return - } - val oldValue = __v_raw.sales - __v_raw.sales = value - _tRS(__v_raw, "sales", oldValue, value) - } - override var cover: String? - get() { - return _tRG(__v_raw, "cover", __v_raw.cover, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("cover")) { - return - } - val oldValue = __v_raw.cover - __v_raw.cover = value - _tRS(__v_raw, "cover", oldValue, value) - } - override var brand_name: String? - get() { - return _tRG(__v_raw, "brand_name", __v_raw.brand_name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("brand_name")) { - return - } - val oldValue = __v_raw.brand_name - __v_raw.brand_name = value - _tRS(__v_raw, "brand_name", oldValue, value) - } - override var category_name: String? - get() { - return _tRG(__v_raw, "category_name", __v_raw.category_name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("category_name")) { - return - } - val oldValue = __v_raw.category_name - __v_raw.category_name = value - _tRS(__v_raw, "category_name", oldValue, value) - } - override var shop_name: String? - get() { - return _tRG(__v_raw, "shop_name", __v_raw.shop_name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("shop_name")) { - return - } - val oldValue = __v_raw.shop_name - __v_raw.shop_name = value - _tRS(__v_raw, "shop_name", oldValue, value) - } - override var merchant_name: String? - get() { - return _tRG(__v_raw, "merchant_name", __v_raw.merchant_name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("merchant_name")) { - return - } - val oldValue = __v_raw.merchant_name - __v_raw.merchant_name = value - _tRS(__v_raw, "merchant_name", oldValue, value) - } -} -open class Shop ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var merchant_id: String, - @JsonNotNull - open var shop_name: String, - open var shop_logo: String? = null, - open var shop_banner: String? = null, - open var description: String? = null, - open var contact_name: String? = null, - open var contact_phone: String? = null, - open var rating_avg: Number? = null, - open var total_sales: Number? = null, - open var product_count: Number? = null, - open var total_sales_count: Number? = null, - open var created_at: String? = null, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("Shop", "utils/supabaseService.uts", 67, 13) - } -} -open class CartItem ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var user_id: String, - @JsonNotNull - open var product_id: String, - open var sku_id: String? = null, - open var merchant_id: String? = null, - @JsonNotNull - open var quantity: Number, - @JsonNotNull - open var selected: Boolean = false, - open var product_name: String? = null, - open var product_image: String? = null, - open var product_price: Number? = null, - open var product_specification: String? = null, - open var shop_id: String? = null, - open var shop_name: String? = null, - open var created_at: String? = null, - open var updated_at: String? = null, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("CartItem", "utils/supabaseService.uts", 82, 13) - } -} -open class UserAddress ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var user_id: String, - @JsonNotNull - open var recipient_name: String, - @JsonNotNull - open var phone: String, - @JsonNotNull - open var province: String, - @JsonNotNull - open var city: String, - @JsonNotNull - open var district: String, - @JsonNotNull - open var detail_address: String, - open var postal_code: String? = null, - @JsonNotNull - open var is_default: Boolean = false, - open var label: String? = null, - open var created_at: String? = null, - open var updated_at: String? = null, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("UserAddress", "utils/supabaseService.uts", 99, 13) - } -} -open class UserCoupon ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var user_id: String, - @JsonNotNull - open var template_id: String, - @JsonNotNull - open var coupon_code: String, - @JsonNotNull - open var status: Number, - @JsonNotNull - open var received_at: String, - @JsonNotNull - open var expire_at: String, - open var used_at: String? = null, - open var template_name: String? = null, - open var amount: Number? = null, - open var min_spend: Number? = null, - open var name: String? = null, - open var title: String? = null, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("UserCoupon", "utils/supabaseService.uts", 114, 13) - } -} -open class ChatRoom ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var user_id: String, - @JsonNotNull - open var merchant_id: String, - @JsonNotNull - open var shop_name: String, - open var shop_logo: String? = null, - open var last_message: String? = null, - open var last_message_at: String? = null, - @JsonNotNull - open var unread_count: Number, - @JsonNotNull - open var is_top: Boolean = false, - open var created_at: String? = null, - open var updated_at: String? = null, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("ChatRoom", "utils/supabaseService.uts", 130, 13) - } -} -open class Notification ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var user_id: String, - @JsonNotNull - open var type: String, - @JsonNotNull - open var title: String, - @JsonNotNull - open var content: String, - open var icon_url: String? = null, - open var link_url: String? = null, - @JsonNotNull - open var is_read: Boolean = false, - open var extra_data: String? = null, - open var created_at: String? = null, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("Notification", "utils/supabaseService.uts", 143, 13) - } -} -open class ChatMessage ( - @JsonNotNull - open var id: String, - open var session_id: String? = null, - open var sender_id: String? = null, - open var receiver_id: String? = null, - @JsonNotNull - open var content: String, - @JsonNotNull - open var msg_type: String, - @JsonNotNull - open var is_read: Boolean = false, - @JsonNotNull - open var is_from_user: Boolean = false, - open var extra_data: String? = null, - open var created_at: String? = null, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("ChatMessage", "utils/supabaseService.uts", 155, 13) - } -} -open class PaginatedResponse ( - @JsonNotNull - open var data: UTSArray, - @JsonNotNull - open var total: Number, - @JsonNotNull - open var page: Number, - @JsonNotNull - open var limit: Number, - @JsonNotNull - open var hasmore: Boolean = false, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("PaginatedResponse", "utils/supabaseService.uts", 167, 13) - } -} -open class ProductSku ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var product_id: String, - @JsonNotNull - open var sku_code: String, - @JsonNotNull - open var specifications: String, - @JsonNotNull - open var price: Number, - open var market_price: Number? = null, - open var cost_price: Number? = null, - open var stock: Number? = null, - open var warning_stock: Number? = null, - open var image_url: String? = null, - open var weight: Number? = null, - open var status: Number? = null, - open var created_at: String? = null, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("ProductSku", "utils/supabaseService.uts", 174, 13) - } -} -open class AddAddressParams ( - @JsonNotNull - open var recipient_name: String, - @JsonNotNull - open var phone: String, - @JsonNotNull - open var province: String, - @JsonNotNull - open var city: String, - @JsonNotNull - open var district: String, - @JsonNotNull - open var detail_address: String, - open var postal_code: String? = null, - open var is_default: Boolean? = null, - open var label: String? = null, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("AddAddressParams", "utils/supabaseService.uts", 189, 13) - } -} -open class UpdateAddressParams ( - open var recipient_name: String? = null, - open var phone: String? = null, - open var province: String? = null, - open var city: String? = null, - open var district: String? = null, - open var detail_address: String? = null, - open var postal_code: String? = null, - open var is_default: Boolean? = null, - open var label: String? = null, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("UpdateAddressParams", "utils/supabaseService.uts", 200, 13) - } -} -open class CreateOrderParams ( - @JsonNotNull - open var merchant_id: String, - @JsonNotNull - open var product_amount: Number, - @JsonNotNull - open var shipping_fee: Number, - @JsonNotNull - open var total_amount: Number, - @JsonNotNull - open var shipping_address: Any, - @JsonNotNull - open var items: UTSArray, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("CreateOrderParams", "utils/supabaseService.uts", 211, 13) - } -} -open class ShopOrderParams ( - @JsonNotNull - open var shipping_address: Any, - @JsonNotNull - open var shopGroups: UTSArray, - @JsonNotNull - open var deliveryFee: Number, - @JsonNotNull - open var discountAmount: Number, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("ShopOrderParams", "utils/supabaseService.uts", 219, 13) - } -} -open class ShopOrderResponse ( - @JsonNotNull - open var success: Boolean = false, - @JsonNotNull - open var orderIds: UTSArray, - open var error: String? = null, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("ShopOrderResponse", "utils/supabaseService.uts", 225, 13) - } -} -open class RefundResponse ( - @JsonNotNull - open var success: Boolean = false, - @JsonNotNull - open var message: String, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("RefundResponse", "utils/supabaseService.uts", 230, 13) - } -} -open class ConfirmReceiptResponse ( - @JsonNotNull - open var success: Boolean = false, - open var error: String? = null, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("ConfirmReceiptResponse", "utils/supabaseService.uts", 234, 13) - } -} -open class SupabaseService : IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("SupabaseService", "utils/supabaseService.uts", 238, 7) - } - public open fun getCurrentUserId(): String? { - try { - val session = supaInstance.getSession() - if (session != null && session.user != null) { - return session.user!!.getString("id") - } - val userId = uni_getStorageSync("user_id") - return if (userId != null) { - userId as String - } else { - null - } - } - catch (e: Throwable) { - console.error("获取用户ID失败:", e, " at utils/supabaseService.uts:276") - return null - } - } - open fun ensureSession(): UTSPromise { - return wrapUTSPromise(suspend w@{ - var session = supaInstance.getSession() - if (session.user == null) { - console.log("Session user is null, attempting to hydrate from storage...", " at utils/supabaseService.uts:285") - await(supaInstance.hydrateSessionFromStorage()) - session = supaInstance.getSession() - } - if (session.user != null) { - val uid = session.user!!!!.getString("id") - if (uid != null) { - uni_setStorageSync("user_id", uid) - return@w uid - } - } - return@w this.getCurrentUserId() - }) - } - open fun getCategories(): UTSPromise> { - return wrapUTSPromise(suspend w@{ - try { - val response = await(supaInstance.from("ml_categories").select("*").order("name", OrderOptions(ascending = true)).execute()) - if (response.error != null) { - console.error("获取分类失败:", response.error, " at utils/supabaseService.uts:311") - return@w _uA() - } - val rawData = response.data - if (rawData == null) { - return@w _uA() - } - val categories: UTSArray = _uA() - val rawList = rawData as UTSArray - run { - var i: Number = 0 - while(i < rawList.length){ - val item = rawList[i] - val catObj = item as UTSJSONObject - val idVal = catObj.get("id") - val nameVal = catObj.get("name") - val iconVal = catObj.get("icon") - val iconUrlVal = catObj.get("icon_url") - val descVal = catObj.get("description") - val colorVal = catObj.get("color") - val parentIdVal = catObj.get("parent_id") - val levelVal = catObj.get("level") - val cat: Category = Category(id = if ((UTSAndroid.`typeof`(idVal) == "string")) { - (idVal as String) - } else { - "" - } - , name = if ((UTSAndroid.`typeof`(nameVal) == "string")) { - (nameVal as String) - } else { - "" - } - , icon = if ((UTSAndroid.`typeof`(iconVal) == "string")) { - (iconVal as String) - } else { - if ((UTSAndroid.`typeof`(iconUrlVal) == "string")) { - (iconUrlVal as String) - } else { - "" - } - } - , description = if ((UTSAndroid.`typeof`(descVal) == "string")) { - (descVal as String) - } else { - "" - } - , color = if ((UTSAndroid.`typeof`(colorVal) == "string")) { - (colorVal as String) - } else { - "#4CAF50" - } - , parent_id = if ((UTSAndroid.`typeof`(parentIdVal) == "string")) { - (parentIdVal as String) - } else { - null - } - , level = if ((UTSAndroid.`typeof`(levelVal) == "number")) { - (levelVal as Number) - } else { - 0 - } - ) - categories.push(cat) - i++ - } - } - return@w categories - } - catch (error: Throwable) { - console.error("获取分类异常:", error, " at utils/supabaseService.uts:347") - return@w _uA() - } - }) - } - open fun getParentCategories(): UTSPromise> { - return wrapUTSPromise(suspend w@{ - try { - val response = await(supaInstance.from("ml_categories").select("*").`is`("parent_id", null).order("sort_order", OrderOptions(ascending = true)).execute()) - if (response.error != null) { - console.error("获取一级分类失败:", response.error, " at utils/supabaseService.uts:363") - return@w _uA() - } - val rawData = response.data - if (rawData == null) { - return@w _uA() - } - val categories: UTSArray = _uA() - val rawList = rawData as UTSArray - run { - var i: Number = 0 - while(i < rawList.length){ - val item = rawList[i] - val icon = this.getCategoryIcon(item) - val cat = Category(id = item["id"] as String, name = item["name"] as String, icon = icon, description = (item["description"] as String) ?: "", color = (item["color"] as String) ?: "#4CAF50", level = 1, slug = item["slug"] as String) - categories.push(cat) - i++ - } - } - return@w categories - } - catch (error: Throwable) { - console.error("获取一级分类异常:", error, " at utils/supabaseService.uts:390") - return@w _uA() - } - }) - } - open fun getSubCategories(parentId: String): UTSPromise> { - return wrapUTSPromise(suspend w@{ - try { - val response = await(supaInstance.from("ml_categories").select("*").eq("parent_id", parentId).order("sort_order", OrderOptions(ascending = true)).execute()) - if (response.error != null) { - console.error("获取子分类失败:", response.error, " at utils/supabaseService.uts:406") - return@w _uA() - } - val rawData = response.data - if (rawData == null) { - return@w _uA() - } - val categories: UTSArray = _uA() - val rawList = rawData as UTSArray - run { - var i: Number = 0 - while(i < rawList.length){ - val item = rawList[i] - val icon = this.getCategoryIcon(item) - val cat = Category(id = item["id"] as String, name = item["name"] as String, icon = icon, description = (item["description"] as String) ?: "", color = (item["color"] as String) ?: "#4CAF50", level = 2, parent_id = item["parent_id"] as String, slug = item["slug"] as String) - categories.push(cat) - i++ - } - } - return@w categories - } - catch (error: Throwable) { - console.error("获取子分类异常:", error, " at utils/supabaseService.uts:434") - return@w _uA() - } - }) - } - open fun getCategoryIcon(item: UTSJSONObject): String { - val icon = item["icon"] as String? - if (icon != null && icon.length > 0) { - return icon - } - val iconUrl = item["icon_url"] as String? - if (iconUrl != null && iconUrl.length > 0) { - return iconUrl - } - val name = (item["name"] as String) ?: "" - if (name.includes("数码") || name.includes("电器") || name.includes("手机")) { - return "📱" - } - if (name.includes("服装") || name.includes("衣服") || name.includes("鞋")) { - return "👕" - } - if (name.includes("食品") || name.includes("水果") || name.includes("零食")) { - return "🍎" - } - if (name.includes("美妆") || name.includes("护肤") || name.includes("化妆")) { - return "💄" - } - if (name.includes("母婴") || name.includes("婴儿") || name.includes("儿童")) { - return "👶" - } - if (name.includes("家居") || name.includes("家具") || name.includes("装饰")) { - return "🏠" - } - if (name.includes("图书") || name.includes("文具")) { - return "📚" - } - if (name.includes("运动") || name.includes("户外") || name.includes("健身")) { - return "⚽" - } - if (name.includes("医药") || name.includes("保健") || name.includes("健康")) { - return "💊" - } - return "📦" - } - open fun getBrands(): UTSPromise> { - return wrapUTSPromise(suspend w@{ - try { - val response = await(supaInstance.from("ml_brands").select("*").eq("is_active", true).order("name", OrderOptions(ascending = true)).execute()) - if (response.error != null) { - console.error("获取品牌失败:", response.error, " at utils/supabaseService.uts:474") - return@w _uA() - } - val rawData = response.data - if (rawData == null) { - return@w _uA() - } - val brands: UTSArray = _uA() - val rawList = rawData as UTSArray - run { - var i: Number = 0 - while(i < rawList.length){ - val item = rawList[i] - val brandObj = item as UTSJSONObject - val idVal = brandObj.get("id") - val nameVal = brandObj.get("name") - val logoVal = brandObj.get("logo_url") - val descVal = brandObj.get("description") - val brand: Brand = Brand(id = if ((UTSAndroid.`typeof`(idVal) == "string")) { - (idVal as String) - } else { - "" - } - , name = if ((UTSAndroid.`typeof`(nameVal) == "string")) { - (nameVal as String) - } else { - "" - } - , logo_url = if ((UTSAndroid.`typeof`(logoVal) == "string")) { - (logoVal as String) - } else { - "" - } - , description = if ((UTSAndroid.`typeof`(descVal) == "string")) { - (descVal as String) - } else { - "" - } - ) - brands.push(brand) - i++ - } - } - return@w brands - } - catch (error: Throwable) { - console.error("获取品牌异常:", error, " at utils/supabaseService.uts:503") - return@w _uA() - } - }) - } - open fun getProductsByCategory(categoryId: String, page: Number = 1, limit: Number = 20): UTSPromise> { - return wrapUTSPromise(suspend w@{ - try { - val response = await(supaInstance.from("ml_products_detail_view").select("*", object : UTSJSONObject() { - var count = "exact" - }).eq("category_id", categoryId).eq("status", 1).order("sale_count", OrderOptions(ascending = false)).page(page).limit(limit).execute()) - if (response.error != null) { - console.error("获取商品失败:", response.error, " at utils/supabaseService.uts:526") - return@w PaginatedResponse(data = _uA(), total = 0, page = page, limit = limit, hasmore = false) - } - return@w PaginatedResponse(data = response.data as UTSArray, total = response.total ?: 0, page = page, limit = limit, hasmore = response.hasmore ?: false) - } - catch (error: Throwable) { - console.error("获取商品异常:", error, " at utils/supabaseService.uts:544") - return@w PaginatedResponse(data = _uA(), total = 0, page = page, limit = limit, hasmore = false) - } - }) - } - open fun getProductSkus(productId: String): UTSPromise> { - return wrapUTSPromise(suspend w@{ - try { - val response = await(supaInstance.from("ml_product_skus").select("*").eq("product_id", productId).eq("status", 1).execute()) - if (response.error != null) { - console.error("获取商品SKU失败:", response.error, " at utils/supabaseService.uts:566") - return@w _uA() - } - return@w response.data as UTSArray - } - catch (error: Throwable) { - console.error("获取商品SKU异常:", error, " at utils/supabaseService.uts:572") - return@w _uA() - } - }) - } - open fun searchProducts(keyword: String, page: Number = 1, limit: Number = 20, sortBy: String = "sales", ascending: Boolean = false): UTSPromise> { - return wrapUTSPromise(suspend w@{ - try { - var query = supaInstance.from("ml_products_detail_view").select("*", object : UTSJSONObject() { - var count = "exact" - }).eq("status", 1).or("name.ilike.%" + keyword + "%,description.ilike.%" + keyword + "%,subtitle.ilike.%" + keyword + "%,brand_name.ilike.%" + keyword + "%") - if (sortBy === "price") { - query = query.order("base_price", OrderOptions(ascending = ascending)) - } else if (sortBy === "sales" || sortBy === "sale_count") { - query = query.order("sale_count", OrderOptions(ascending = false)) - } else { - query = query.order("sale_count", OrderOptions(ascending = false)) - } - val response = await(query.page(page).limit(limit).execute()) - if (response.error != null) { - console.error("搜索商品失败:", response.error, " at utils/supabaseService.uts:608") - return@w PaginatedResponse(data = _uA(), total = 0, page = page, limit = limit, hasmore = false) - } - return@w PaginatedResponse(data = response.data as UTSArray, total = response.total ?: 0, page = page, limit = limit, hasmore = response.hasmore ?: false) - } - catch (error: Throwable) { - console.error("搜索商品异常:", error, " at utils/supabaseService.uts:626") - return@w PaginatedResponse(data = _uA(), total = 0, page = page, limit = limit, hasmore = false) - } - }) - } - open fun searchShops(keyword: String, page: Number = 1, limit: Number = 20): UTSPromise> { - return wrapUTSPromise(suspend w@{ - try { - val response = await(supaInstance.from("ml_shops").select("*", object : UTSJSONObject() { - var count = "exact" - }).eq("status", 1).ilike("shop_name", "%" + keyword + "%").order("product_count", OrderOptions(ascending = false)).page(page).limit(limit).execute()) - if (response.error != null) { - console.error("搜索店铺失败:", response.error, " at utils/supabaseService.uts:655") - return@w PaginatedResponse(data = _uA(), total = 0, page = page, limit = limit, hasmore = false) - } - val shops: UTSArray = _uA() - val dataList = response.data as UTSArray - run { - var i: Number = 0 - while(i < dataList.length){ - shops.push(dataList[i] as Shop) - i++ - } - } - return@w PaginatedResponse(data = shops, total = response.total ?: 0, page = page, limit = limit, hasmore = response.hasmore ?: false) - } - catch (error: Throwable) { - console.error("搜索店铺异常:", error, " at utils/supabaseService.uts:674") - return@w PaginatedResponse(data = _uA(), total = 0, page = page, limit = limit, hasmore = false) - } - }) - } - open fun getProductById(productId: String): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val response = await(supaInstance.from("ml_products_detail_view").select("*").eq("id", productId).single().executeAs()) - if (response.error != null) { - console.error("获取商品详情失败:", response.error, " at utils/supabaseService.uts:690") - return@w null - } - return@w response.data as Product - } - catch (error: Throwable) { - console.error("获取商品详情异常:", error, " at utils/supabaseService.uts:696") - return@w null - } - }) - } - open fun isShopFollowed(shopId: String, userId: String): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val res = await(supaInstance.from("ml_shop_follows").select("id", object : UTSJSONObject() { - var count = "exact" - }).eq("shop_id", shopId).eq("user_id", userId).limit(1).execute()) - return@w (res.total != null && res.total!! > 0) - } - catch (e: Throwable) { - console.error("Check follow error:", e, " at utils/supabaseService.uts:716") - return@w false - } - }) - } - open fun followShop(shopId: String, userId: String): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val res = await(supaInstance.from("ml_shop_follows").insert(object : UTSJSONObject() { - var user_id = userId - var shop_id = shopId - }).execute()) - return@w res.error == null - } - catch (e: Throwable) { - console.error("Follow shop error:", e, " at utils/supabaseService.uts:734") - return@w false - } - }) - } - open fun unfollowShop(shopId: String, userId: String): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val res = await(supaInstance.from("ml_shop_follows").eq("shop_id", shopId).eq("user_id", userId).`delete`().execute()) - return@w res.error == null - } - catch (e: Throwable) { - console.error("Unfollow shop error:", e, " at utils/supabaseService.uts:751") - return@w false - } - }) - } - open fun getFollowedShops(userId: String): UTSPromise> { - return wrapUTSPromise(suspend w@{ - try { - val res = await(supaInstance.from("ml_shop_follows").select("*, ml_shops(*)").eq("user_id", userId).order("created_at", OrderOptions(ascending = false)).execute()) - if (res.error != null) { - console.error("getFollowedShops error:", res.error, " at utils/supabaseService.uts:768") - return@w _uA() - } - return@w res.data as UTSArray - } - catch (e: Throwable) { - console.error("getFollowedShops exception:", e, " at utils/supabaseService.uts:774") - return@w _uA() - } - }) - } - open fun getShopByMerchantId(merchantId: String): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - var response = await(supaInstance.from("ml_shops").select("*").eq("merchant_id", merchantId).limit(1).execute()) - if (response.error == null && response.data != null && (response.data as UTSArray).length > 0) { - return@w (response.data as UTSArray)[0] as Shop - } - console.log("getShopByMerchantId: merchant_id not found, trying id...", merchantId, " at utils/supabaseService.uts:795") - response = await(supaInstance.from("ml_shops").select("*").eq("id", merchantId).limit(1).execute()) - if (response.error == null && response.data != null && (response.data as UTSArray).length > 0) { - console.log("Found shop by ID instead of MerchantID", " at utils/supabaseService.uts:804") - val shop = (response.data as UTSArray)[0] as Shop - return@w shop - } - if (response.error != null) { - console.error("获取店铺信息失败:", response.error, " at utils/supabaseService.uts:811") - } - return@w null - } - catch (error: Throwable) { - console.error("获取店铺信息异常:", error, " at utils/supabaseService.uts:815") - return@w null - } - }) - } - open fun getProductsByMerchantId(merchantId: String, page: Number = 1, limit: Number = 20): UTSPromise> { - return wrapUTSPromise(suspend w@{ - try { - console.log("getProductsByMerchantId querying for:", merchantId, " at utils/supabaseService.uts:823") - var query = supaInstance.from("ml_products_detail_view").select("*", object : UTSJSONObject() { - var count = "exact" - }).eq("merchant_id", merchantId).order("created_at", OrderOptions(ascending = false)).page(page).limit(limit) - val response = await(query.execute()) - if (response.error != null || (response.data != null && (response.data as UTSArray).length === 0)) { - if (response.error != null) { - console.error("获取商户商品失败 (View):", response.error, " at utils/supabaseService.uts:840") - } else { - console.log("View returned 0 products, trying raw table fallback...", " at utils/supabaseService.uts:842") - } - console.log("Falling back to raw ml_products table...", " at utils/supabaseService.uts:846") - val query2 = supaInstance.from("ml_products").select("*", object : UTSJSONObject() { - var count = "exact" - }).eq("merchant_id", merchantId).order("created_at", OrderOptions(ascending = false)).page(page).limit(limit) - val res2 = await(query2.execute()) - if (res2.error != null) { - console.error("获取商户商品失败 (Raw):", res2.error, " at utils/supabaseService.uts:858") - return@w PaginatedResponse(data = _uA(), total = 0, page = page, limit = limit, hasmore = false) - } - console.log("Fallback (Raw) found: " + (res2.data as UTSArray).length + " products", " at utils/supabaseService.uts:862") - val mappedData: UTSArray = _uA() - val rawData = res2.data as UTSArray - run { - var i: Number = 0 - while(i < rawData.length){ - mappedData.push(rawData[i] as Product) - i++ - } - } - return@w PaginatedResponse(data = mappedData, total = res2.total ?: 0, page = page, limit = limit, hasmore = res2.hasmore ?: false) - } - console.log("Merchant products found: " + (response.data as UTSArray).length, " at utils/supabaseService.uts:880") - return@w PaginatedResponse(data = response.data as UTSArray, total = response.total ?: 0, page = page, limit = limit, hasmore = response.hasmore ?: false) - } - catch (error: Throwable) { - console.error("获取商户商品异常:", error, " at utils/supabaseService.uts:889") - return@w PaginatedResponse(data = _uA(), total = 0, page = page, limit = limit, hasmore = false) - } - }) - } - open fun getHotProducts(limit: Number = 10): UTSPromise> { - return wrapUTSPromise(suspend w@{ - try { - val response = await(supaInstance.from("ml_products_detail_view").select("*").eq("is_hot", true).eq("status", 1).order("sale_count", OrderOptions(ascending = false)).limit(limit).execute()) - if (response.error != null) { - console.error("获取热销商品失败:", response.error, " at utils/supabaseService.uts:913") - return@w _uA() - } - return@w response.data as UTSArray - } - catch (error: Throwable) { - console.error("获取热销商品异常:", error, " at utils/supabaseService.uts:919") - return@w _uA() - } - }) - } - open fun getProductsByPrice(limit: Number = 10, ascending: Boolean = true): UTSPromise> { - return wrapUTSPromise(suspend w@{ - try { - val response = await(supaInstance.from("ml_products_detail_view").select("*").eq("status", 1).order("base_price", OrderOptions(ascending = ascending)).limit(limit).execute()) - if (response.error != null) { - console.error("获取价格排序商品失败:", response.error, " at utils/supabaseService.uts:936") - return@w _uA() - } - return@w response.data as UTSArray - } - catch (error: Throwable) { - console.error("获取价格排序商品异常:", error, " at utils/supabaseService.uts:942") - return@w _uA() - } - }) - } - open fun getProductsByNewest(limit: Number = 10): UTSPromise> { - return wrapUTSPromise(suspend w@{ - try { - val response = await(supaInstance.from("ml_products_detail_view").select("*").eq("is_new", true).eq("status", 1).order("published_at", OrderOptions(ascending = false)).limit(limit).execute()) - if (response.error != null) { - console.error("获取新品失败:", response.error, " at utils/supabaseService.uts:960") - return@w _uA() - } - return@w response.data as UTSArray - } - catch (error: Throwable) { - console.error("获取新品异常:", error, " at utils/supabaseService.uts:966") - return@w _uA() - } - }) - } - open fun getRecommendedProducts(limit: Number = 10): UTSPromise> { - return wrapUTSPromise(suspend w@{ - try { - val response = await(supaInstance.from("ml_products_detail_view").select("*").eq("is_featured", true).eq("status", 1).order("sale_count", OrderOptions(ascending = false)).limit(limit).execute()) - if (response.error != null) { - console.error("获取推荐商品失败:", response.error, " at utils/supabaseService.uts:985") - return@w _uA() - } - val rawData = response.data - if (rawData == null) { - return@w _uA() - } - val products: UTSArray = _uA() - val rawList = rawData as UTSArray - run { - var i: Number = 0 - while(i < rawList.length){ - val item = rawList[i] - val prodObj = item as UTSJSONObject - val imagesRaw = prodObj.getArray("images") - val product: Product = Product(id = prodObj.getString("id") ?: "", name = prodObj.getString("name") ?: "", description = prodObj.getString("description") ?: "", price = prodObj.getNumber("price") ?: 0, original_price = prodObj.getNumber("original_price") ?: 0, image_url = prodObj.getString("image_url") ?: "", images = if (imagesRaw != null) { - (imagesRaw as UTSArray) - } else { - _uA() - } - , category_id = prodObj.getString("category_id") ?: "", brand_id = prodObj.getString("brand_id") ?: "", shop_id = prodObj.getString("shop_id") ?: "", stock = prodObj.getNumber("stock") ?: 0, sale_count = prodObj.getNumber("sale_count") ?: 0, status = prodObj.getNumber("status") ?: 1, is_featured = prodObj.getBoolean("is_featured") ?: false, is_new = prodObj.getBoolean("is_new") ?: false, rating = prodObj.getNumber("rating") ?: 0, review_count = prodObj.getNumber("review_count") ?: 0, merchant_id = "") - products.push(product) - i++ - } - } - return@w products - } - catch (error: Throwable) { - console.error("获取推荐商品异常:", error, " at utils/supabaseService.uts:1024") - return@w _uA() - } - }) - } - open fun getDiscountProducts(limit: Number = 10): UTSPromise> { - return wrapUTSPromise(suspend w@{ - return@w _uA() - }) - } - open fun getCartItems(): UTSPromise> { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - console.warn("用户未登录,无法获取购物车", " at utils/supabaseService.uts:1040") - return@w _uA() - } - val response = await(supaInstance.from("ml_shopping_cart").select("*").eq("user_id", userId).order("created_at", OrderOptions(ascending = false)).execute()) - if (response.error != null) { - console.error("获取购物车失败:", response.error, " at utils/supabaseService.uts:1056") - return@w _uA() - } - val cartData = response.data as UTSArray - if (cartData == null || cartData.length === 0) { - return@w _uA() - } - val productIds: UTSArray = _uA() - val skuIds: UTSArray = _uA() - run { - var i: Number = 0 - while(i < cartData.length){ - var item = cartData[i] - var pid: String = "" - var sid: String = "" - if (item is UTSJSONObject) { - pid = (item as UTSJSONObject).getString("product_id") ?: "" - sid = (item as UTSJSONObject).getString("sku_id") ?: "" - } else { - val itemObj = UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(item)), " at utils/supabaseService.uts:991") as UTSJSONObject - pid = itemObj.getString("product_id") ?: "" - sid = itemObj.getString("sku_id") ?: "" - } - if (pid !== "" && !productIds.includes(pid)) { - productIds.push(pid) - } - if (sid !== "" && !skuIds.includes(sid)) { - skuIds.push(sid) - } - i++ - } - } - val productMap = Map() - if (productIds.length > 0) { - val productIdsAny: UTSArray = _uA() - run { - var i: Number = 0 - while(i < productIds.length){ - productIdsAny.push(productIds[i]) - i++ - } - } - val productRes = await(supaInstance.from("ml_products_detail_view").select("id,name,main_image_url,base_price,attributes,merchant_id,shop_name").`in`("id", productIdsAny).execute()) - if (productRes.error == null && productRes.data != null) { - val products = productRes.data as UTSArray - run { - var i: Number = 0 - while(i < products.length){ - var p = products[i] - var pid: String = "" - if (p is UTSJSONObject) { - pid = (p as UTSJSONObject).getString("id") ?: "" - } else { - val pObj = UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(p)), " at utils/supabaseService.uts:1024") as UTSJSONObject - pid = pObj.getString("id") ?: "" - } - if (pid !== "") { - productMap.set(pid, p) - } - i++ - } - } - } - } - val skuMap = Map() - if (skuIds.length > 0) { - val skuIdsAny: UTSArray = _uA() - run { - var i: Number = 0 - while(i < skuIds.length){ - skuIdsAny.push(skuIds[i]) - i++ - } - } - val skuRes = await(supaInstance.from("ml_product_skus").select("id, specifications, price, image_url").`in`("id", skuIdsAny).execute()) - if (skuRes.error == null && skuRes.data != null) { - val skus = skuRes.data as UTSArray - run { - var i: Number = 0 - while(i < skus.length){ - var s = skus[i] - var sid: String = "" - if (s is UTSJSONObject) { - sid = (s as UTSJSONObject).getString("id") ?: "" - } else { - val sObj = UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(s)), " at utils/supabaseService.uts:1054") as UTSJSONObject - sid = sObj.getString("id") ?: "" - } - if (sid !== "") { - skuMap.set(sid, s) - } - i++ - } - } - } - } - val cartItems: UTSArray = _uA() - if ((cartData as UTSArray) != null) { - val cartArray = cartData as UTSArray - run { - var i: Number = 0 - while(i < cartArray.length){ - var item = cartArray[i] - var itemId: String = "" - var userIdVal: String = "" - var productId: String = "" - var skuId: String = "" - var quantity: Number = 0 - var selected: Boolean = false - var createdAt: String = "" - var updatedAt: String = "" - if (item is UTSJSONObject) { - itemId = (item as UTSJSONObject).getString("id") ?: "" - userIdVal = (item as UTSJSONObject).getString("user_id") ?: "" - productId = (item as UTSJSONObject).getString("product_id") ?: "" - skuId = (item as UTSJSONObject).getString("sku_id") ?: "" - quantity = (item as UTSJSONObject).getNumber("quantity") ?: 0 - selected = (item as UTSJSONObject).getBoolean("selected") ?: false - createdAt = (item as UTSJSONObject).getString("created_at") ?: "" - updatedAt = (item as UTSJSONObject).getString("updated_at") ?: "" - } else { - val iObj = UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(item)), " at utils/supabaseService.uts:1088") as UTSJSONObject - itemId = iObj.getString("id") ?: "" - userIdVal = iObj.getString("user_id") ?: "" - productId = iObj.getString("product_id") ?: "" - skuId = iObj.getString("sku_id") ?: "" - quantity = iObj.getNumber("quantity") ?: 0 - selected = iObj.getBoolean("selected") ?: false - createdAt = iObj.getString("created_at") ?: "" - updatedAt = iObj.getString("updated_at") ?: "" - } - val product = productMap.get(productId) - val sku = if ((skuId !== "" && skuMap.has(skuId))) { - skuMap.get(skuId) - } else { - null - } - var merchantId: String = "" - var productName: String = "" - var productImage: String = "" - var productPrice: Number = 0 - var productSpec: String = "" - var shopNameStr: String = "未知店铺" - if (product != null) { - if (product is UTSJSONObject) { - merchantId = (product as UTSJSONObject).getString("merchant_id") ?: "" - productName = (product as UTSJSONObject).getString("name") ?: "" - productImage = (product as UTSJSONObject).getString("main_image_url") ?: "" - productPrice = (product as UTSJSONObject).getNumber("base_price") ?: 0 - shopNameStr = (product as UTSJSONObject).getString("shop_name") ?: "未知店铺" - } else { - val pObj = UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(product)), " at utils/supabaseService.uts:1143") as UTSJSONObject - merchantId = pObj.getString("merchant_id") ?: "" - productName = pObj.getString("name") ?: "" - productImage = pObj.getString("main_image_url") ?: "" - productPrice = pObj.getNumber("base_price") ?: 0 - shopNameStr = pObj.getString("shop_name") ?: "未知店铺" - } - } - if (sku != null) { - if (sku is UTSJSONObject) { - val skuPrice = (sku as UTSJSONObject).getNumber("price") - if (skuPrice != null && skuPrice > 0) { - productPrice = skuPrice - } - val skuImg = (sku as UTSJSONObject).getString("image_url") - if (skuImg != null && skuImg !== "") { - productImage = skuImg - } - val specRaw = (sku as UTSJSONObject).get("specifications") - if (specRaw != null) { - if (UTSAndroid.`typeof`(specRaw) === "string") { - productSpec = specRaw as String - } else if (specRaw is UTSJSONObject) { - val keys = UTSJSONObject.keys(specRaw as UTSJSONObject) - val parts: UTSArray = _uA() - run { - var k: Number = 0 - while(k < keys.length){ - var kVal = (specRaw as UTSJSONObject).get(keys[k]) - if (kVal != null) { - parts.push("" + keys[k] + ": " + kVal) - } - k++ - } - } - productSpec = parts.join("; ") - } else { - try { - var jsonStr = JSON.stringify(specRaw) - productSpec = jsonStr.replace(UTSRegExp("[\"{}]", "g"), "").replace(UTSRegExp(",", "g"), "; ") - } - catch (e: Throwable) {} - } - } - } else { - val sObj = UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(sku)), " at utils/supabaseService.uts:1215") as UTSJSONObject - val skuPrice = sObj.getNumber("price") ?: 0 - if (skuPrice > 0) { - productPrice = skuPrice - } - val skuImg = sObj.getString("image_url") ?: "" - if (skuImg !== "") { - productImage = skuImg - } - val specRaw = sObj.get("specifications") - if (specRaw != null) { - if (UTSAndroid.`typeof`(specRaw) === "string") { - productSpec = specRaw as String - } else if (specRaw is UTSJSONObject) { - val keys = UTSJSONObject.keys(specRaw as UTSJSONObject) - val parts: UTSArray = _uA() - run { - var k: Number = 0 - while(k < keys.length){ - var kVal = (specRaw as UTSJSONObject).get(keys[k]) - if (kVal != null) { - parts.push("" + keys[k] + ": " + kVal) - } - k++ - } - } - productSpec = parts.join("; ") - } else { - try { - var jsonStr = JSON.stringify(specRaw) - productSpec = jsonStr.replace(UTSRegExp("[\"{}]", "g"), "").replace(UTSRegExp(",", "g"), "; ") - } - catch (e: Throwable) {} - } - } - } - } - var shopIdStr = if (merchantId != "") { - merchantId - } else { - "unknown_shop" - } - cartItems.push(CartItem(id = itemId, user_id = userIdVal, product_id = productId, sku_id = skuId, merchant_id = merchantId, quantity = quantity, selected = selected, product_name = productName, product_image = productImage, product_price = productPrice, product_specification = productSpec, shop_id = shopIdStr, shop_name = shopNameStr, created_at = createdAt, updated_at = updatedAt)) - i++ - } - } - } - return@w cartItems - } - catch (error: Throwable) { - console.error("获取购物车异常:", error, " at utils/supabaseService.uts:1371") - return@w _uA() - } - }) - } - open fun getUserNotifications(type: String? = null): UTSPromise> { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - return@w _uA() - } - var query = supaInstance.from("ml_notifications").select("*").eq("user_id", userId) - if (type != null) { - query = query.eq("type", type) - } - val response = await(query.order("created_at", OrderOptions(ascending = false)).execute()) - if (response.error != null) { - console.error("获取通知失败:", response.error, " at utils/supabaseService.uts:1394") - return@w _uA() - } - return@w response.data as UTSArray - } - catch (e: Throwable) { - console.error("获取通知异常:", e, " at utils/supabaseService.uts:1399") - return@w _uA() - } - }) - } - open fun getChatRooms(): UTSPromise> { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - return@w _uA() - } - val response = await(supaInstance.from("ml_chat_rooms").select("*").eq("user_id", userId).order("updated_at", OrderOptions(ascending = false)).execute()) - if (response.error != null) { - console.error("获取聊天会话失败:", response.error, " at utils/supabaseService.uts:1418") - return@w _uA() - } - return@w response.data as UTSArray - } - catch (e: Throwable) { - console.error("获取聊天会话异常:", e, " at utils/supabaseService.uts:1423") - return@w _uA() - } - }) - } - open fun getUserChatMessages(): UTSPromise> { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - return@w _uA() - } - val response = await(supaInstance.from("ml_chat_messages").select("*").or("sender_id.eq." + userId + ",receiver_id.eq." + userId).order("created_at", OrderOptions(ascending = false)).limit(50).execute()) - if (response.error != null) { - console.error("获取聊天记录失败:", response.error, " at utils/supabaseService.uts:1443") - return@w _uA() - } - return@w response.data as UTSArray - } - catch (e: Throwable) { - console.error("获取聊天记录异常:", e, " at utils/supabaseService.uts:1448") - return@w _uA() - } - }) - } - open fun getChatMessages(merchantId: String): UTSPromise> { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - return@w _uA() - } - val response = await(supaInstance.from("ml_chat_messages").select("*").or("and(sender_id.eq." + userId + ",receiver_id.eq." + merchantId + "),and(sender_id.eq." + merchantId + ",receiver_id.eq." + userId + ")").order("created_at", OrderOptions(ascending = false)).limit(50).execute()) - if (response.error != null) { - console.error("获取聊天记录失败:", response.error, " at utils/supabaseService.uts:1468") - return@w _uA() - } - return@w response.data as UTSArray - } - catch (e: Throwable) { - console.error("获取聊天记录异常:", e, " at utils/supabaseService.uts:1473") - return@w _uA() - } - }) - } - open fun sendChatMessage(content: String, toId: String? = null, type: String = "text"): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - return@w false - } - val payload: UTSJSONObject = _uO("__\$originalPosition" to UTSSourceMapPosition("payload", "utils/supabaseService.uts", 1378, 19), "sender_id" to userId, "content" to content, "msg_type" to type, "is_from_user" to true, "created_at" to Date().toISOString()) - if (toId != null) { - payload.set("receiver_id", toId) - } - val response = await(supaInstance.from("ml_chat_messages").insert(payload).execute()) - if (response.error != null) { - console.error("发送消息失败:", response.error, " at utils/supabaseService.uts:1501") - return@w false - } - return@w true - } - catch (e: Throwable) { - console.error("发送消息异常:", e, " at utils/supabaseService.uts:1506") - return@w false - } - }) - } - open fun simulateServiceReply(content: String): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - return@w false - } - val response = await(supaInstance.from("ml_chat_messages").insert(_uO("receiver_id" to userId, "content" to content, "msg_type" to "text", "is_from_user" to false, "created_at" to Date().toISOString())).execute()) - return@w response.error == null - } - catch (e: Throwable) { - return@w false - } - }) - } - open fun addToCart(productId: String, quantity: Number = 1, skuId: String?): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - console.error("用户未登录,无法添加商品到购物车", " at utils/supabaseService.uts:1538") - return@w false - } - val realSkuId = if ((skuId != null && skuId.length > 0)) { - skuId - } else { - null - } - var query = supaInstance.from("ml_shopping_cart").select("*").eq("user_id", userId).eq("product_id", productId) - if (realSkuId != null) { - query = query.eq("sku_id", realSkuId) - } else { - query = query.`is`("sku_id", null) - } - val existingResponse = await(query.single().execute()) - var existingItem: Any? = null - if (existingResponse.data != null) { - val rawData = existingResponse.data as Any - if (UTSArray.isArray(rawData)) { - if ((rawData as UTSArray).length > 0) { - existingItem = (rawData as UTSArray)[0] - } - } else { - existingItem = rawData - } - } - var response: AkReqResponse - if (existingItem != null) { - console.log("Found existing cart item:", JSON.stringify(existingItem), " at utils/supabaseService.uts:1576") - var itemId: String? = null - var itemQty: Any? = null - if (existingItem is UTSJSONObject) { - itemId = (existingItem as UTSJSONObject).getString("id") - itemQty = (existingItem as UTSJSONObject).getNumber("quantity") - } else { - val obj = UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(existingItem)), " at utils/supabaseService.uts:1472") as UTSJSONObject - itemId = obj.getString("id") - itemQty = obj.getNumber("quantity") - } - if (itemId != null) { - var currentQty: Number = 0 - if (UTSAndroid.`typeof`(itemQty) === "number") { - currentQty = itemQty as Number - } else { - val qStr = "" + (itemQty ?: 0) - currentQty = parseInt(qStr) - } - val newQty = currentQty + quantity - response = await(supaInstance.from("ml_shopping_cart").update(object : UTSJSONObject() { - var quantity = newQty - var updated_at = Date().toISOString() - }).eq("id", itemId).execute()) - } else { - console.error("购物车已有商品但缺少ID,无法更新. Data:", JSON.stringify(existingItem), " at utils/supabaseService.uts:1610") - return@w false - } - } else { - response = await(supaInstance.from("ml_shopping_cart").insert(_uO("user_id" to userId, "product_id" to productId, "sku_id" to realSkuId, "quantity" to quantity, "selected" to true, "created_at" to Date().toISOString(), "updated_at" to Date().toISOString())).execute()) - } - if (response.error != null) { - console.error("添加商品到购物车失败:", response.error, " at utils/supabaseService.uts:1630") - return@w false - } - return@w true - } - catch (error: Throwable) { - console.error("添加商品到购物车异常:", error, " at utils/supabaseService.uts:1636") - return@w false - } - }) - } - open fun updateCartItemQuantity(cartItemId: String, quantity: Number): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - console.error("用户未登录,无法更新购物车", " at utils/supabaseService.uts:1646") - return@w false - } - if (quantity < 1) { - return@w await(this.deleteCartItem(cartItemId)) - } - val response = await(supaInstance.from("ml_shopping_cart").update(_uO("quantity" to quantity, "updated_at" to Date().toISOString())).eq("id", cartItemId).eq("user_id", userId).execute()) - if (response.error != null) { - console.error("更新购物车商品数量失败:", response.error, " at utils/supabaseService.uts:1666") - return@w false - } - return@w true - } - catch (error: Throwable) { - console.error("更新购物车商品数量异常:", error, " at utils/supabaseService.uts:1672") - return@w false - } - }) - } - open fun updateCartItemSelection(cartItemId: String, selected: Boolean): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - console.error("用户未登录,无法更新购物车", " at utils/supabaseService.uts:1682") - return@w false - } - val response = await(supaInstance.from("ml_shopping_cart").update(_uO("selected" to selected, "updated_at" to Date().toISOString())).eq("id", cartItemId).eq("user_id", userId).execute()) - if (response.error != null) { - console.error("更新购物车商品选中状态失败:", response.error, " at utils/supabaseService.uts:1697") - return@w false - } - return@w true - } - catch (error: Throwable) { - console.error("更新购物车商品选中状态异常:", error, " at utils/supabaseService.uts:1703") - return@w false - } - }) - } - open fun batchUpdateCartItemSelection(cartItemIds: UTSArray, selected: Boolean): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - console.error("用户未登录,无法更新购物车", " at utils/supabaseService.uts:1713") - return@w false - } - val response = await(supaInstance.from("ml_shopping_cart").update(_uO("selected" to selected, "updated_at" to Date().toISOString())).eq("user_id", userId).`in`("id", cartItemIds as UTSArray).execute()) - if (response.error != null) { - console.error("批量更新购物车商品选中状态失败:", response.error, " at utils/supabaseService.uts:1728") - return@w false - } - return@w true - } - catch (error: Throwable) { - console.error("批量更新购物车商品选中状态异常:", error, " at utils/supabaseService.uts:1734") - return@w false - } - }) - } - open fun deleteCartItem(cartItemId: String): UTSPromise { - return wrapUTSPromise(suspend w@{ - return@w true - }) - } - open fun batchDeleteCartItems(cartItemIds: UTSArray): UTSPromise { - return wrapUTSPromise(suspend w@{ - return@w true - }) - } - open fun clearCart(): UTSPromise { - return wrapUTSPromise(suspend w@{ - return@w true - }) - } - open fun getAddresses(): UTSPromise> { - return wrapUTSPromise(suspend w@{ - val userId = this.getCurrentUserId() - if (userId == null) { - console.warn("[getAddresses] 用户未登录,无法获取地址", " at utils/supabaseService.uts:1836") - return@w _uA() - } - try { - console.log("[getAddresses] 查询地址, userId:", userId, " at utils/supabaseService.uts:1841") - val response = await(supaInstance.from("ml_user_addresses").select("*").eq("user_id", userId).order("is_default", OrderOptions(ascending = false)).order("created_at", OrderOptions(ascending = false)).execute()) - console.log("[getAddresses] response.error:", response.error, " at utils/supabaseService.uts:1851") - console.log("[getAddresses] response.data:", JSON.stringify(response.data), " at utils/supabaseService.uts:1852") - if (response.error != null) { - console.error("[getAddresses] 获取地址失败:", response.error, " at utils/supabaseService.uts:1855") - return@w _uA() - } - val data = response.data - if (data == null) { - return@w _uA() - } - val result: UTSArray = _uA() - val rawData = data as UTSArray - run { - var i: Number = 0 - while(i < rawData.length){ - val item = rawData[i] - var itemObj: UTSJSONObject - if (item is UTSJSONObject) { - itemObj = item as UTSJSONObject - } else { - itemObj = UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(item)), " at utils/supabaseService.uts:1739") as UTSJSONObject - } - val addrObj = UTSJSONObject(UTSSourceMapPosition("addrObj", "utils/supabaseService.uts", 1741, 23)) - addrObj.set("id", itemObj.getString("id") ?: "") - addrObj.set("user_id", itemObj.getString("user_id") ?: "") - addrObj.set("recipient_name", itemObj.getString("receiver_name") ?: itemObj.getString("recipient_name") ?: "") - addrObj.set("phone", itemObj.getString("receiver_phone") ?: itemObj.getString("phone") ?: "") - addrObj.set("province", itemObj.getString("province") ?: "") - addrObj.set("city", itemObj.getString("city") ?: "") - addrObj.set("district", itemObj.getString("district") ?: "") - addrObj.set("detail_address", itemObj.getString("address_detail") ?: itemObj.getString("detail_address") ?: "") - addrObj.set("is_default", itemObj.getBoolean("is_default") ?: false) - result.push(addrObj as UserAddress) - i++ - } - } - console.log("[getAddresses] 返回地址数量:", result.length, " at utils/supabaseService.uts:1888") - return@w result - } - catch (error: Throwable) { - console.error("[getAddresses] 获取地址异常:", error, " at utils/supabaseService.uts:1891") - return@w _uA() - } - }) - } - open fun getAddressById(addressId: String): UTSPromise { - return wrapUTSPromise(suspend w@{ - val userId = this.getCurrentUserId() - if (userId == null) { - console.warn("用户未登录,无法获取地址", " at utils/supabaseService.uts:1900") - return@w null - } - try { - val query = supaInstance.from("ml_user_addresses").select("*, recipient_name:receiver_name, phone:receiver_phone, detail_address:address_detail").eq("id", addressId).eq("user_id", userId).single() - val response = await(query.execute()) - if (response.error != null) { - console.error("获取地址详情失败:", response.error, " at utils/supabaseService.uts:1915") - return@w null - } - return@w response.data as UserAddress - } - catch (error: Throwable) { - console.error("获取地址详情异常:", error, " at utils/supabaseService.uts:1921") - return@w null - } - }) - } - open fun addAddress(address: AddAddressParams): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - console.error("用户未登录,无法添加地址", " at utils/supabaseService.uts:1931") - return@w false - } - if (address.is_default == true) { - await(this.clearDefaultAddress(userId)) - } - val response = await(supaInstance.from("ml_user_addresses").insert(object : UTSJSONObject() { - var user_id = userId - var receiver_name = address.recipient_name - var receiver_phone = address.phone - var province = address.province - var city = address.city - var district = address.district - var address_detail = address.detail_address - var postal_code = address.postal_code ?: null - var is_default = address.is_default ?: false - var created_at = Date().toISOString() - var updated_at = Date().toISOString() - }).execute()) - if (response.error != null) { - console.error("添加地址失败:", response.error, " at utils/supabaseService.uts:1958") - return@w false - } - return@w true - } - catch (error: Throwable) { - console.error("添加地址异常:", error, " at utils/supabaseService.uts:1964") - return@w false - } - }) - } - open fun updateAddress(addressId: String, address: UpdateAddressParams): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - console.error("用户未登录,无法更新地址", " at utils/supabaseService.uts:1974") - return@w false - } - if (address.is_default == true) { - await(this.clearDefaultAddress(userId)) - } - val updateData: UTSJSONObject = object : UTSJSONObject(UTSSourceMapPosition("updateData", "utils/supabaseService.uts", 1839, 19)) { - } - if (address.recipient_name != null) { - updateData["receiver_name"] = address.recipient_name - } - if (address.phone != null) { - updateData["receiver_phone"] = address.phone - } - if (address.province != null) { - updateData["province"] = address.province - } - if (address.city != null) { - updateData["city"] = address.city - } - if (address.district != null) { - updateData["district"] = address.district - } - if (address.detail_address != null) { - updateData["address_detail"] = address.detail_address - } - if (address.postal_code != null) { - updateData["postal_code"] = address.postal_code - } - if (address.is_default != null) { - updateData["is_default"] = address.is_default - } - if (address.label != null) { - updateData["label"] = address.label - } - updateData["updated_at"] = Date().toISOString() - val response = await(supaInstance.from("ml_user_addresses").update(updateData).eq("id", addressId).eq("user_id", userId).execute()) - if (response.error != null) { - console.error("更新地址失败:", response.error, " at utils/supabaseService.uts:2004") - return@w false - } - return@w true - } - catch (error: Throwable) { - console.error("更新地址异常:", error, " at utils/supabaseService.uts:2010") - return@w false - } - }) - } - open fun confirmReceipt(orderId: String): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - return@w ConfirmReceiptResponse(success = false, error = "用户未登录") - } - val response = await(supaInstance.from("ml_orders").update(object : UTSJSONObject() { - var order_status: Number = 4 - var delivered_at = Date().toISOString() - var completed_at = Date().toISOString() - var updated_at = Date().toISOString() - }).eq("id", orderId).eq("user_id", userId).execute()) - if (response.error != null) { - return@w ConfirmReceiptResponse(success = false, error = response.error!!.message) - } - return@w ConfirmReceiptResponse(success = true) - } - catch (e: Throwable) { - return@w ConfirmReceiptResponse(success = false, error = e.message) - } - }) - } - open fun deleteAddress(addressId: String): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - console.log("正在执行删除地址,ID:", addressId, " at utils/supabaseService.uts:2048") - val userId = this.getCurrentUserId() - if (userId == null) { - console.error("用户未登录,无法删除地址", " at utils/supabaseService.uts:2051") - return@w false - } - val response = await(supaInstance.from("ml_user_addresses").eq("id", addressId).eq("user_id", userId).`delete`().execute()) - if (response.error != null) { - console.error("删除地址失败:", response.error, " at utils/supabaseService.uts:2063") - return@w false - } - return@w true - } - catch (error: Throwable) { - console.error("删除地址异常:", error, " at utils/supabaseService.uts:2069") - return@w false - } - }) - } - private fun clearDefaultAddress(userId: String): UTSPromise { - return wrapUTSPromise(suspend { - try { - await(supaInstance.from("ml_user_addresses").update(object : UTSJSONObject() { - var is_default = false - var updated_at = Date().toISOString() - }).eq("user_id", userId).eq("is_default", true).execute()) - } - catch (error: Throwable) { - console.error("清除默认地址异常:", error, " at utils/supabaseService.uts:2087") - } - }) - } - open fun getUserProfile(): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - return@w null - } - val response = await(supaInstance.from("ml_user_profiles").select("*").eq("user_id", userId).single().execute()) - if (response.error != null) { - return@w null - } - return@w response.data - } - catch (e: Throwable) { - return@w null - } - }) - } - open fun createOrder(orderData: CreateOrderParams): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - console.error("CreateOrder: User not logged in", " at utils/supabaseService.uts:2121") - return@w null - } - val orderNo = "ML" + Date.now() + Math.floor(Math.random() * 1000) - var merchantId = orderData.merchant_id - if (merchantId == null || merchantId == "" || merchantId == "unknown") { - merchantId = userId - } - var shippingAddrStr = "{}" - if (orderData.shipping_address != null) { - if (UTSAndroid.`typeof`(orderData.shipping_address) === "string") { - shippingAddrStr = orderData.shipping_address as String - } else { - shippingAddrStr = JSON.stringify(orderData.shipping_address) - } - } - val orderPayload = UTSJSONObject(UTSSourceMapPosition("orderPayload", "utils/supabaseService.uts", 1992, 19)) - orderPayload.set("user_id", userId) - orderPayload.set("merchant_id", merchantId) - orderPayload.set("order_no", orderNo) - orderPayload.set("product_amount", orderData.product_amount) - orderPayload.set("shipping_fee", orderData.shipping_fee) - orderPayload.set("total_amount", orderData.total_amount) - orderPayload.set("paid_amount", 0) - orderPayload.set("shipping_address", shippingAddrStr) - orderPayload.set("order_status", 1) - orderPayload.set("payment_status", 1) - orderPayload.set("shipping_status", 1) - orderPayload.set("created_at", Date().toISOString()) - orderPayload.set("updated_at", Date().toISOString()) - console.log("[CreateOrder] 插入订单数据:", JSON.stringify(orderPayload), " at utils/supabaseService.uts:2156") - console.log("[CreateOrder] 期望的订单号:", orderNo, " at utils/supabaseService.uts:2157") - val orderResponse = await(supaInstance.from("ml_orders").insert(orderPayload).execute()) - console.log("[CreateOrder] insert 完成", " at utils/supabaseService.uts:2164") - console.log("[CreateOrder] orderResponse.error:", orderResponse.error, " at utils/supabaseService.uts:2165") - if (orderResponse.error != null) { - console.error("[CreateOrder] 创建订单失败:", orderResponse.error, " at utils/supabaseService.uts:2168") - return@w null - } - console.log("[CreateOrder] 开始查询新创建的订单, order_no:", orderNo, " at utils/supabaseService.uts:2172") - val queryResponse = await(supaInstance.from("ml_orders").select("id, order_no").eq("order_no", orderNo).execute()) - console.log("[CreateOrder] queryResponse.error:", queryResponse.error, " at utils/supabaseService.uts:2180") - console.log("[CreateOrder] queryResponse.data:", JSON.stringify(queryResponse.data), " at utils/supabaseService.uts:2181") - if (queryResponse.error != null) { - console.error("[CreateOrder] 查询订单失败:", queryResponse.error, " at utils/supabaseService.uts:2184") - return@w null - } - val queryData = queryResponse.data as Any - var orderId = "" - if (UTSArray.isArray(queryData) && (queryData as UTSArray).length > 0) { - val firstItem = (queryData as UTSArray)[0] as Record - orderId = firstItem["id"] as String - console.log("[CreateOrder] 找到新创建的订单, id:", orderId, " at utils/supabaseService.uts:2194") - } else { - console.error("[CreateOrder] 未找到新创建的订单,插入可能失败", " at utils/supabaseService.uts:2196") - return@w null - } - console.log("[CreateOrder] 订单创建成功, orderId:", orderId, " at utils/supabaseService.uts:2200") - val orderItems: UTSArray = _uA() - val rawItems = orderData.items as UTSArray - run { - var i: Number = 0 - while(i < rawItems.length){ - var item: UTSJSONObject - val rawItem = rawItems[i] - item = rawItem as UTSJSONObject - val itemJson = UTSJSONObject(UTSSourceMapPosition("itemJson", "utils/supabaseService.uts", 2048, 23)) - var pId = item.get("product_id") - if (pId == null) { - pId = item.get("id") - } - itemJson.set("order_id", orderId) - itemJson.set("product_id", pId) - val skuIdVal = item.get("sku_id") - if (skuIdVal != null && skuIdVal !== "") { - itemJson.set("sku_id", skuIdVal) - } - itemJson.set("product_name", item.get("product_name") ?: "") - val sName = item.get("sku_name") - itemJson.set("sku_name", sName ?: "") - val specVal = item.get("specifications") - var skuSnapshot = "{}" - if (specVal != null) { - if (UTSAndroid.`typeof`(specVal) === "string") { - skuSnapshot = specVal as String - } else { - skuSnapshot = JSON.stringify(specVal) - } - } - itemJson.set("sku_snapshot", skuSnapshot) - itemJson.set("specifications", skuSnapshot) - val img1 = item.get("product_image") - val img2 = item.get("image_url") - var imgUrl = (img1 ?: img2 ?: "") as String - while(imgUrl.indexOf("`") >= 0){ - imgUrl = imgUrl.replace("`", "") - } - itemJson.set("image_url", imgUrl) - val iPrice = item.getNumber("price") ?: 0 - val iQty = item.getNumber("quantity") ?: 1 - itemJson.set("price", iPrice) - itemJson.set("quantity", iQty) - itemJson.set("total_amount", iPrice * iQty) - itemJson.set("created_at", Date().toISOString()) - orderItems.push(itemJson) - i++ - } - } - console.log("[CreateOrder] 插入订单项数量:", orderItems.length, " at utils/supabaseService.uts:2260") - console.log("[CreateOrder] 订单项数据:", JSON.stringify(orderItems), " at utils/supabaseService.uts:2261") - run { - var j: Number = 0 - while(j < orderItems.length){ - val itemJson = orderItems[j] - val itemsResponse = await(supaInstance.from("ml_order_items").insert(itemJson).execute()) - if (itemsResponse.error != null) { - console.error("[CreateOrder] 创建订单项失败:", itemsResponse.error, " at utils/supabaseService.uts:2271") - } - j++ - } - } - console.log("[CreateOrder] 订单项创建成功", " at utils/supabaseService.uts:2275") - val cartItemIds: UTSArray = _uA() - run { - var i: Number = 0 - while(i < rawItems.length){ - val item = rawItems[i] as UTSJSONObject - val iid = item.getString("id") - if (iid != null && iid.length > 10) { - cartItemIds.push(iid) - } - i++ - } - } - if (cartItemIds.length > 0) { - await(this.batchDeleteCartItems(cartItemIds)) - } - return@w orderId - } - catch (error: Throwable) { - console.error("[CreateOrder] 创建订单异常:", error, " at utils/supabaseService.uts:2292") - return@w null - } - }) - } - open fun createOrdersByShop(params: ShopOrderParams): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val orderIds: UTSArray = _uA() - val groups = params.shopGroups as UTSArray - var grandTotal: Number = 0.0 - run { - var k: Number = 0 - while(k < groups.length){ - val g = groups[k] as UTSJSONObject - val gItemsRaw = g.get("items") - if (gItemsRaw == null) { - k++ - continue - } - val gItems = gItemsRaw as UTSArray - run { - var gi: Number = 0 - while(gi < gItems.length){ - val it = gItems[gi] as UTSJSONObject - val itPrice = it.getNumber("price") ?: 0 - val itQty = it.getNumber("quantity") ?: 1 - grandTotal += itPrice * itQty - gi++ - } - } - k++ - } - } - run { - var i: Number = 0 - while(i < groups.length){ - val group = groups[i] as UTSJSONObject - val shopItemsRaw = group.get("items") - if (shopItemsRaw == null) { - i++ - continue - } - val shopItems = shopItemsRaw as UTSArray - var productAmount: Number = 0.0 - run { - var j: Number = 0 - while(j < shopItems.length){ - val sItem = shopItems[j] as UTSJSONObject - val siPrice = sItem.getNumber("price") ?: 0 - val siQty = sItem.getNumber("quantity") ?: 1 - productAmount += siPrice * siQty - j++ - } - } - val ratio = if (grandTotal > 0) { - (productAmount / grandTotal) - } else { - 0 - } - val shopShippingFee = params.deliveryFee * ratio - val shopDiscount = params.discountAmount * ratio - val shopTotal = productAmount + shopShippingFee - shopDiscount - val mId = group.getString("merchant_id") - val sId = group.getString("shopId") - val shopName = group.getString("shopName") - val orderId = await(this.createOrder(CreateOrderParams(merchant_id = if ((mId != null && mId != "")) { - mId - } else { - (sId ?: "") - } - , product_amount = productAmount, shipping_fee = shopShippingFee, total_amount = shopTotal, shipping_address = params.shipping_address, items = shopItems))) - if (orderId != null) { - orderIds.push(orderId) - } else { - return@w ShopOrderResponse(success = false, orderIds = orderIds, error = "店铺 " + shopName + " 订单创建失败") - } - i++ - } - } - return@w ShopOrderResponse(success = true, orderIds = orderIds) - } - catch (e: Throwable) { - console.error("批量创建订单异常:", e, " at utils/supabaseService.uts:2362") - return@w ShopOrderResponse(success = false, orderIds = _uA(), error = "系统异常") - } - }) - } - open fun getOrders(status: Number = 0): UTSPromise> { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - val empty: UTSArray = _uA() - return@w empty - } - var query = supaInstance.from("ml_orders").select("\n *,\n ml_order_items (*)\n ").eq("user_id", userId).order("created_at", OrderOptions(ascending = false)) - if (status > 0) { - query = query.eq("order_status", status) - } - val response = await(query.execute()) - if (response.error != null) { - console.error("获取订单列表失败:", response.error, " at utils/supabaseService.uts:2392") - val empty: UTSArray = _uA() - return@w empty - } - val data = response.data - if (data == null) { - val empty: UTSArray = _uA() - return@w empty - } - return@w data as UTSArray - } - catch (error: Throwable) { - console.error("获取订单列表异常:", error, " at utils/supabaseService.uts:2404") - val empty: UTSArray = _uA() - return@w empty - } - }) - } - open fun getOrderDetail(orderId: String): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - return@w null - } - val response = await(supaInstance.from("ml_orders").select("\n *,\n ml_order_items (*)\n ").eq("id", orderId).eq("user_id", userId).single().execute()) - if (response.error != null) { - return@w null - } - return@w response.data - } - catch (e: Throwable) { - return@w null - } - }) - } - open fun payOrder(orderId: String, paymentMethod: String, amount: Number): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - console.error("[payOrder] 用户未登录", " at utils/supabaseService.uts:2441") - return@w false - } - console.log("[payOrder] 开始更新订单状态, orderId:", orderId, "userId:", userId, " at utils/supabaseService.uts:2445") - val updatePayload = UTSJSONObject(UTSSourceMapPosition("updatePayload", "utils/supabaseService.uts", 2256, 19)) - updatePayload.set("order_status", 2) - updatePayload.set("payment_status", 1) - updatePayload.set("payment_method", paymentMethod) - updatePayload.set("payment_time", Date().toISOString()) - updatePayload.set("paid_amount", amount) - updatePayload.set("updated_at", Date().toISOString()) - console.log("[payOrder] 更新数据:", JSON.stringify(updatePayload), " at utils/supabaseService.uts:2455") - val response = await(supaInstance.from("ml_orders").update(updatePayload).eq("id", orderId).eq("user_id", userId).execute()) - if (response.error != null) { - console.error("[payOrder] 更新订单失败:", response.error, " at utils/supabaseService.uts:2465") - return@w false - } - console.log("[payOrder] 订单状态更新成功", " at utils/supabaseService.uts:2469") - if (paymentMethod === "balance") { - console.log("[payOrder] 余额支付,暂不扣减余额", " at utils/supabaseService.uts:2472") - } - return@w true - } - catch (e: Throwable) { - console.error("[payOrder] 支付异常:", e, " at utils/supabaseService.uts:2477") - return@w false - } - }) - } - open fun getOrderById(orderId: String): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - console.error("[getOrderById] 用户未登录", " at utils/supabaseService.uts:2487") - return@w null - } - console.log("[getOrderById] 查询订单, orderId:", orderId, " at utils/supabaseService.uts:2491") - val response = await(supaInstance.from("ml_orders").select("*").eq("id", orderId).eq("user_id", userId).execute()) - if (response.error != null) { - console.error("[getOrderById] 查询订单失败:", response.error, " at utils/supabaseService.uts:2501") - return@w null - } - val data = response.data as UTSArray - if (data == null || data.length === 0) { - console.log("[getOrderById] 未找到订单", " at utils/supabaseService.uts:2507") - return@w null - } - val orderRaw = data[0] - var orderObj: UTSJSONObject - if (orderRaw is UTSJSONObject) { - orderObj = orderRaw as UTSJSONObject - } else { - orderObj = UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(orderRaw)), " at utils/supabaseService.uts:2315") as UTSJSONObject - } - console.log("[getOrderById] 订单数据:", JSON.stringify(orderObj), " at utils/supabaseService.uts:2519") - return@w orderObj - } - catch (e: Throwable) { - console.error("[getOrderById] 查询异常:", e, " at utils/supabaseService.uts:2522") - return@w null - } - }) - } - open fun createRefund(data: Any): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - return@w RefundResponse(success = false, message = "请先登录") - } - val d = data as UTSJSONObject - val orderId = d.getString("order_id") - val refundType = d.getNumber("refund_type") - val refundReason = d.getString("refund_reason") - val refundAmount = d.getNumber("refund_amount") - val description = d.getString("description") - val images = d.getArray("images") - val payload: UTSJSONObject = object : UTSJSONObject(UTSSourceMapPosition("payload", "utils/supabaseService.uts", 2338, 19)) { - var user_id = userId - var order_id = orderId - var refund_no = "REF" + Date.now() + Math.floor(Math.random() * 1000) - var refund_type = refundType - var refund_reason = refundReason - var refund_amount = refundAmount - var description = description ?: "" - var images = images ?: (_uA()) - var status: Number = 1 - } - val response = await(supaInstance.from("ml_refunds").insert(payload).execute()) - if (response.error != null) { - console.error("提交售后失败:", response.error, " at utils/supabaseService.uts:2559") - return@w RefundResponse(success = false, message = "提交失败: " + (response.error!!.message ?: "未知错误")) - } - return@w RefundResponse(success = true, message = "申请提交成功") - } - catch (e: Throwable) { - console.error("提交售后异常:", e, " at utils/supabaseService.uts:2565") - return@w RefundResponse(success = false, message = "系统异常") - } - }) - } - open fun rePurchase(order: Any): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val orderObj = order as UTSJSONObject - var itemsKey = "ml_order_items" - var itemsRaw = orderObj.get(itemsKey) - if (itemsRaw == null) { - itemsKey = "items" - itemsRaw = orderObj.get(itemsKey) - } - if (itemsRaw == null) { - return@w false - } - val items = itemsRaw as UTSArray - if (items.length === 0) { - return@w false - } - run { - var i: Number = 0 - while(i < items.length){ - val item = items[i] as UTSJSONObject - val productId = item.getString("product_id") - val skuId = item.getString("sku_id") - val quantity = item.getNumber("quantity") ?: 1 - if (productId != null) { - await(this.addToCart(productId, quantity, skuId ?: null)) - } - i++ - } - } - return@w true - } - catch (e: Throwable) { - console.error("rePurchase error", e, " at utils/supabaseService.uts:2605") - return@w false - } - }) - } - open fun applyRefund(orderId: String, reason: String): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val response = await(supaInstance.from("ml_orders").update(object : UTSJSONObject() { - var order_status: Number = 6 - var cancel_reason = reason - var updated_at = Date().toISOString() - }).eq("id", orderId).execute()) - return@w response.error == null - } - catch (e: Throwable) { - return@w false - } - }) - } - open fun getRefunds(statusList: UTSArray = _uA(), page: Number = 1, pageSize: Number = 10): UTSPromise> { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - val empty: UTSArray = _uA() - return@w empty - } - var query = supaInstance.from("ml_refunds").select("\n *,\n order:ml_orders!inner (\n order_no,\n created_at,\n ml_order_items (\n product_id,\n product_name,\n image_url\n )\n )\n ").eq("user_id", userId).order("created_at", OrderOptions(ascending = false)) - if (statusList.length > 0) { - val anyList = statusList as UTSArray - query = query.`in`("status", anyList) - } - query = query.range((page - 1) * pageSize, page * pageSize - 1) - val response = await(query.execute()) - if (response.error != null) { - console.error("获取售后列表失败:", response.error, " at utils/supabaseService.uts:2667") - val empty: UTSArray = _uA() - return@w empty - } - val data = response.data - if (data == null) { - val empty: UTSArray = _uA() - return@w empty - } - return@w data - } - catch (e: Throwable) { - console.error("获取售后列表异常:", e, " at utils/supabaseService.uts:2680") - val empty: UTSArray = _uA() - return@w empty - } - }) - } - open fun deleteRefund(refundId: String): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val response = await(supaInstance.from("ml_refunds").`delete`().eq("id", refundId).execute()) - if (response.error != null) { - console.error("删除退款记录失败:", response.error, " at utils/supabaseService.uts:2695") - return@w false - } - return@w true - } - catch (e: Throwable) { - console.error("删除退款记录异常:", e, " at utils/supabaseService.uts:2701") - return@w false - } - }) - } - open fun getUserBalance(): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - console.log("[Supabase] getUserBalance userId:", userId, " at utils/supabaseService.uts:2709") - if (userId == null) { - return@w 0 - } - val walletRes = await(supaInstance.from("ml_user_wallets").select("balance").eq("user_id", userId!!).single().execute()) - if (walletRes.error != null) { - console.error("[Supabase] getUserBalance error:", walletRes.error, " at utils/supabaseService.uts:2721") - } else { - console.log("[Supabase] getUserBalance data:", walletRes.data, " at utils/supabaseService.uts:2723") - } - if (walletRes.error == null && walletRes.data != null) { - var data = walletRes.data - if (UTSArray.isArray(data)) { - val arr = data as UTSArray - if (arr.length > 0) { - data = arr[0] - } - } - var kVal: Number = 0 - if (data is UTSJSONObject) { - kVal = (data as UTSJSONObject).getNumber("balance") ?: 0 - if (kVal === 0 && (data as UTSJSONObject).getString("balance") != null) { - kVal = parseFloat((data as UTSJSONObject).getString("balance")!!) - } - return@w kVal - } else { - val jsonObj = UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(data)), " at utils/supabaseService.uts:2526") as UTSJSONObject - kVal = jsonObj.getNumber("balance") ?: 0 - if (kVal === 0 && jsonObj.getString("balance") != null) { - kVal = parseFloat(jsonObj.getString("balance")!!) - } - return@w kVal - } - } - console.log("[Supabase] Wallet table empty, checking profile...", " at utils/supabaseService.uts:2755") - val profile = await(this.getUserProfile()) - if (profile != null) { - if (profile is UTSJSONObject) { - return@w (profile as UTSJSONObject).getNumber("balance") ?: 0 - } else { - val pObj = UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(profile)), " at utils/supabaseService.uts:2542") as UTSJSONObject - return@w pObj.getNumber("balance") ?: 0 - } - } - return@w 0 - } - catch (e: Throwable) { - console.error("[Supabase] getUserBalance exception:", e, " at utils/supabaseService.uts:2769") - return@w 0 - } - }) - } - open fun getUserPoints(): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - console.log("[Supabase] getUserPoints userId:", userId, " at utils/supabaseService.uts:2778") - if (userId == null) { - return@w 0 - } - val res = await(supaInstance.from("ml_user_points").select("points").eq("user_id", userId!!).single().execute()) - if (res.error != null) { - console.error("[Supabase] getUserPoints error:", res.error, " at utils/supabaseService.uts:2790") - } else { - console.log("[Supabase] getUserPoints data:", res.data, " at utils/supabaseService.uts:2792") - } - if (res.error == null && res.data != null) { - var data = res.data - if (UTSArray.isArray(data)) { - val arr = data as UTSArray - if (arr.length > 0) { - data = arr[0] - } - } - if (data is UTSJSONObject) { - return@w (data as UTSJSONObject).getNumber("points") ?: 0 - } else { - val jsonObj = UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(data)), " at utils/supabaseService.uts:2587") as UTSJSONObject - val kVal = jsonObj.getNumber("points") - if (kVal != null) { - return@w kVal - } - return@w 0 - } - } - val profile = await(this.getUserProfile()) - if (profile != null) { - if (profile is UTSJSONObject) { - return@w (profile as UTSJSONObject).getNumber("points") ?: 0 - } else { - val pObj = UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(profile)), " at utils/supabaseService.uts:2601") as UTSJSONObject - return@w pObj.getNumber("points") ?: 0 - } - } - return@w 0 - } - catch (e: Throwable) { - console.error("[Supabase] getUserPoints exception:", e, " at utils/supabaseService.uts:2830") - return@w 0 - } - }) - } - open fun getTransactions(page: Number = 1, limit: Number = 20): UTSPromise> { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - val empty: UTSArray = _uA() - return@w empty - } - val from = (page - 1) * limit - val to = from + limit - 1 - val response = await(supaInstance.from("ml_wallet_transactions").select("*").eq("user_id", userId!!).order("created_at", OrderOptions(ascending = false)).range(from, to).execute()) - if (response.error != null) { - console.error("获取交易记录失败:", response.error, " at utils/supabaseService.uts:2856") - val empty: UTSArray = _uA() - return@w empty - } - val data = response.data - if (data == null) { - val empty: UTSArray = _uA() - return@w empty - } - return@w data as UTSArray - } - catch (e: Throwable) { - console.error("获取交易记录异常:", e, " at utils/supabaseService.uts:2869") - val empty: UTSArray = _uA() - return@w empty - } - }) - } - open fun getPointRecords(): UTSPromise> { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - val empty: UTSArray = _uA() - return@w empty - } - val res = await(supaInstance.from("ml_point_records").select("*").eq("user_id", userId!!).order("created_at", OrderOptions(ascending = false)).execute()) - if (res.error != null) { - val empty: UTSArray = _uA() - return@w empty - } - val data = res.data - if (data == null) { - val empty: UTSArray = _uA() - return@w empty - } - return@w data as UTSArray - } - catch (e: Throwable) { - val empty: UTSArray = _uA() - return@w empty - } - }) - } - open fun getUserRedPackets(): UTSPromise> { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - val empty: UTSArray = _uA() - return@w empty - } - val res = await(supaInstance.from("ml_user_red_packets").select("*").eq("user_id", userId!!).order("created_at", OrderOptions(ascending = false)).execute()) - if (res.error != null) { - console.error("获取红包失败:", res.error, " at utils/supabaseService.uts:2924") - val empty: UTSArray = _uA() - return@w empty - } - val data = res.data - if (data == null) { - val empty: UTSArray = _uA() - return@w empty - } - return@w data as UTSArray - } - catch (e: Throwable) { - console.error("获取红包异常:", e, " at utils/supabaseService.uts:2935") - val empty: UTSArray = _uA() - return@w empty - } - }) - } - open fun getUserBankCards(): UTSPromise> { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - val empty: UTSArray = _uA() - return@w empty - } - val res = await(supaInstance.from("ml_user_bank_cards").select("*").eq("user_id", userId!!).order("created_at", OrderOptions(ascending = false)).execute()) - if (res.error != null) { - console.error("获取银行卡失败:", res.error, " at utils/supabaseService.uts:2958") - val empty: UTSArray = _uA() - return@w empty - } - val data = res.data - if (data == null) { - val empty: UTSArray = _uA() - return@w empty - } - return@w data as UTSArray - } - catch (e: Throwable) { - console.error("获取银行卡异常:", e, " at utils/supabaseService.uts:2969") - val empty: UTSArray = _uA() - return@w empty - } - }) - } - open fun rechargeBalance(amount: Number): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - return@w false - } - val res = await(supaInstance.rpc("recharge_wallet", object : UTSJSONObject() { - var p_user_id = userId - var p_amount = amount - })) - if (res.error != null) { - console.error("充值失败RPC:", res.error, " at utils/supabaseService.uts:2987") - return@w false - } - val data = res.data - if (data is UTSJSONObject) { - return@w (data as UTSJSONObject).getBoolean("success") ?: false - } - return@w false - } - catch (e: Throwable) { - console.error("充值异常:", e, " at utils/supabaseService.uts:2999") - return@w false - } - }) - } - open fun withdrawBalance(amount: Number): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - return@w false - } - val res = await(supaInstance.rpc("withdraw_wallet", object : UTSJSONObject() { - var p_user_id = userId - var p_amount = amount - })) - if (res.error != null) { - console.error("提现失败RPC:", res.error, " at utils/supabaseService.uts:3016") - return@w false - } - val data = res.data - if (data is UTSJSONObject) { - return@w (data as UTSJSONObject).getBoolean("success") ?: false - } - return@w false - } - catch (e: Throwable) { - console.error("提现异常:", e, " at utils/supabaseService.uts:3026") - return@w false - } - }) - } - open fun addBankCard(card: UTSJSONObject): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - return@w false - } - card.set("user_id", userId) - val res = await(supaInstance.from("ml_user_bank_cards").insert(card).execute()) - if (res.error != null) { - console.error("添加银行卡失败:", res.error, " at utils/supabaseService.uts:3046") - return@w false - } - return@w true - } - catch (e: Throwable) { - console.error("添加银行卡异常:", e, " at utils/supabaseService.uts:3051") - return@w false - } - }) - } - open fun deleteBankCard(cardId: String): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - return@w false - } - val res = await(supaInstance.from("ml_user_bank_cards").eq("id", cardId).eq("user_id", userId!!).`delete`().execute()) - if (res.error != null) { - console.error("删除银行卡失败:", res.error, " at utils/supabaseService.uts:3070") - return@w false - } - return@w true - } - catch (e: Throwable) { - console.error("删除银行卡异常:", e, " at utils/supabaseService.uts:3075") - return@w false - } - }) - } - open fun checkFavorite(productId: String): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - console.log("[CheckFav] Checking for User: " + userId + ", Product: " + productId, " at utils/supabaseService.uts:3084") - if (userId == null) { - return@w false - } - val response = await(supaInstance.from("ml_user_favorites").select("*").eq("user_id", userId!!).eq("target_id", productId).eq("target_type", 1).limit(1).execute()) - if (response.error != null) { - console.error("[CheckFav] Error: " + JSON.stringify(response.error), " at utils/supabaseService.uts:3100") - return@w false - } - val data = response.data - if (UTSArray.isArray(data)) { - if ((data as UTSArray).length > 0) { - val item = (data as UTSArray)[0] - var targetId = "" - if (item is UTSJSONObject) { - targetId = (item as UTSJSONObject).getString("target_id") ?: "" - } else { - val itemObj = UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(item)), " at utils/supabaseService.uts:2870") as UTSJSONObject - targetId = itemObj.getString("target_id") ?: "" - } - if (targetId !== "" && targetId !== productId) { - console.error("[CheckFav] ID Mismatch! Query " + productId + ", Got " + targetId, " at utils/supabaseService.uts:3119") - return@w false - } - return@w true - } - } else if (data is UTSJSONObject) { - var targetId = (data as UTSJSONObject).getString("target_id") ?: "" - if (targetId !== "" && targetId !== productId) { - return@w false - } - return@w true - } - return@w false - } - catch (e: Throwable) { - console.error("[CheckFav] Exception: " + e, " at utils/supabaseService.uts:3136") - return@w false - } - }) - } - open fun toggleFavorite(productId: String): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - return@w false - } - console.log("[ToggleFav] Toggling for " + productId, " at utils/supabaseService.uts:3146") - val exists = await(this.checkFavorite(productId)) - console.log("[ToggleFav] Current status: " + exists, " at utils/supabaseService.uts:3150") - if (exists) { - val response = await(supaInstance.from("ml_user_favorites").eq("user_id", userId!!).eq("target_id", productId).eq("target_type", 1).`delete`().execute()) - if (response.error != null) { - console.error("取消收藏失败:", response.error, " at utils/supabaseService.uts:3163") - return@w true - } - return@w false - } else { - val response = await(supaInstance.from("ml_user_favorites").insert(object : UTSJSONObject() { - var user_id = userId - var target_id = productId - var target_type: Number = 1 - var created_at = Date().toISOString() - }).execute()) - if (response.error != null) { - console.error("添加收藏失败:", response.error, " at utils/supabaseService.uts:3180") - return@w false - } - return@w true - } - } - catch (e: Throwable) { - console.error("切换收藏状态异常:", e, " at utils/supabaseService.uts:3186") - return@w await(this.checkFavorite(productId)) - } - }) - } - open fun getFavorites(): UTSPromise> { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - val empty: UTSArray = _uA() - return@w empty - } - val response = await(supaInstance.from("ml_user_favorites").select("*").eq("user_id", userId!!).eq("target_type", 1).order("created_at", OrderOptions(ascending = false)).execute()) - if (response.error != null) { - val empty: UTSArray = _uA() - return@w empty - } - val favorites = response.data as UTSArray - if (favorites == null || favorites.length === 0) { - val empty: UTSArray = _uA() - return@w empty - } - val productIds: UTSArray = _uA() - run { - var i: Number = 0 - while(i < favorites.length){ - var item: Any = favorites[i] - var pid = "" - if (item is UTSJSONObject) { - pid = (item as UTSJSONObject).getString("target_id") ?: "" - } else { - val itemObj = UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(item)), " at utils/supabaseService.uts:2976") as UTSJSONObject - pid = itemObj.getString("target_id") ?: "" - } - if (pid !== "") { - productIds.push(pid) - } - i++ - } - } - if (productIds.length === 0) { - return@w _uA() - } - val anyProductIds = productIds as UTSArray - val productRes = await(supaInstance.from("ml_products").select("id, name, main_image_url, base_price, sale_count").`in`("id", anyProductIds).execute()) - if (productRes.error != null) { - val empty: UTSArray = _uA() - return@w empty - } - val products = productRes.data as UTSArray - val productMap = Map() - run { - var i: Number = 0 - while(i < products.length){ - var p: Any = products[i] - var pid = "" - if (p is UTSJSONObject) { - pid = (p as UTSJSONObject).getString("id") ?: "" - } else { - val pObj = UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(p)), " at utils/supabaseService.uts:3005") as UTSJSONObject - pid = pObj.getString("id") ?: "" - } - if (pid !== "") { - productMap.set(pid, p) - } - i++ - } - } - val result: UTSArray = _uA() - run { - var i: Number = 0 - while(i < favorites.length){ - var item: Any = favorites[i] - var newItem: UTSJSONObject - if (item is UTSJSONObject) { - newItem = UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(item)), " at utils/supabaseService.uts:3018") as UTSJSONObject - } else { - newItem = UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(item)), " at utils/supabaseService.uts:3021") as UTSJSONObject - } - var targetId = newItem.getString("target_id") - if (targetId != null) { - val product = productMap.get(targetId as String) - if (product != null) { - newItem.set("ml_products", product) - result.push(newItem) - } - } - i++ - } - } - return@w result - } - catch (e: Throwable) { - console.error("获取收藏列表异常:", e, " at utils/supabaseService.uts:3289") - return@w _uA() - } - }) - } - open fun getFootprints(): UTSPromise> { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - console.log("[getFootprints] 用户未登录", " at utils/supabaseService.uts:3299") - val empty: UTSArray = _uA() - return@w empty - } - console.log("[getFootprints] 查询足迹, userId:", userId, " at utils/supabaseService.uts:3304") - val response = await(supaInstance.from("ml_user_footprints").select("*").eq("user_id", userId!!).order("updated_at", OrderOptions(ascending = false)).limit(50).execute()) - console.log("[getFootprints] 足迹查询 error:", response.error, " at utils/supabaseService.uts:3315") - console.log("[getFootprints] 足迹查询 data:", JSON.stringify(response.data), " at utils/supabaseService.uts:3316") - if (response.error != null) { - console.error("[getFootprints] 获取足迹失败:", response.error, " at utils/supabaseService.uts:3319") - val empty: UTSArray = _uA() - return@w empty - } - val footprints = response.data as UTSArray - if (footprints == null || footprints.length === 0) { - console.log("[getFootprints] 没有足迹记录", " at utils/supabaseService.uts:3326") - val empty: UTSArray = _uA() - return@w empty - } - console.log("[getFootprints] 足迹记录数量:", footprints.length, " at utils/supabaseService.uts:3331") - val productIds: UTSArray = _uA() - run { - var i: Number = 0 - while(i < footprints.length){ - var item = footprints[i] - var pid = "" - if (item is UTSJSONObject) { - pid = (item as UTSJSONObject).getString("product_id") ?: "" - } else { - val itemObj = UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(item)), " at utils/supabaseService.uts:3081") as UTSJSONObject - pid = itemObj.getString("product_id") ?: "" - } - if (pid !== "" && !productIds.includes(pid)) { - productIds.push(pid) - } - i++ - } - } - if (productIds.length === 0) { - return@w _uA() - } - val productIdsAny: UTSArray = _uA() - run { - var i: Number = 0 - while(i < productIds.length){ - productIdsAny.push(productIds[i]) - i++ - } - } - val productRes = await(supaInstance.from("ml_products_detail_view").select("id, name, main_image_url, base_price, market_price, sale_count, merchant_id, shop_name").`in`("id", productIdsAny).execute()) - var products: UTSArray = _uA() - if (productRes.error == null && productRes.data != null) { - products = productRes.data as UTSArray - } else { - console.warn("View查询失败,尝试查询基础表", " at utils/supabaseService.uts:3366") - val baseRes = await(supaInstance.from("ml_products").select("id, name, main_image_url, base_price, market_price, sale_count, merchant_id").`in`("id", productIdsAny).execute()) - if (baseRes.error == null) { - products = baseRes.data as UTSArray - } - } - val productMap = Map() - run { - var i: Number = 0 - while(i < products.length){ - var p = products[i] - var pid = "" - if (p is UTSJSONObject) { - pid = (p as UTSJSONObject).getString("id") ?: "" - } else { - val pObj = UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(p)), " at utils/supabaseService.uts:3123") as UTSJSONObject - pid = pObj.getString("id") ?: "" - } - if (pid !== "") { - productMap.set(pid, p) - } - i++ - } - } - val result: UTSArray = _uA() - run { - var i: Number = 0 - while(i < footprints.length){ - var fp = footprints[i] - var pid = "" - var viewTime: Number = 0 - if (fp is UTSJSONObject) { - pid = (fp as UTSJSONObject).getString("product_id") ?: "" - val dateStr = (fp as UTSJSONObject).getString("updated_at") - if (dateStr != null) { - viewTime = Date(dateStr).getTime() - } - } else { - val fpObj = UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(fp)), " at utils/supabaseService.uts:3142") as UTSJSONObject - pid = fpObj.getString("product_id") ?: "" - val dateStr = fpObj.getString("updated_at") - if (dateStr != null) { - viewTime = Date(dateStr).getTime() - } - } - val product = productMap.get(pid) - if (product != null) { - var pName = "" - var pImage = "" - var pPrice: Number = 0 - var pOriginalPrice: Number = 0 - var pSales: Number = 0 - var pShopId = "" - var pShopName = "" - if (product is UTSJSONObject) { - pName = (product as UTSJSONObject).getString("name") ?: "" - pImage = (product as UTSJSONObject).getString("main_image_url") ?: "" - pPrice = (product as UTSJSONObject).getNumber("base_price") ?: 0 - pOriginalPrice = (product as UTSJSONObject).getNumber("market_price") ?: 0 - pSales = (product as UTSJSONObject).getNumber("sale_count") ?: 0 - pShopId = (product as UTSJSONObject).getString("merchant_id") ?: "" - pShopName = (product as UTSJSONObject).getString("shop_name") ?: "" - } else { - val pObj = UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(product)), " at utils/supabaseService.uts:3167") as UTSJSONObject - pName = pObj.getString("name") ?: "" - pImage = pObj.getString("main_image_url") ?: "" - pPrice = pObj.getNumber("base_price") ?: 0 - pOriginalPrice = pObj.getNumber("market_price") ?: 0 - pSales = pObj.getNumber("sale_count") ?: 0 - pShopId = pObj.getString("merchant_id") ?: "" - pShopName = pObj.getString("shop_name") ?: "" - } - val fpObj = UTSJSONObject(UTSSourceMapPosition("fpObj", "utils/supabaseService.uts", 3176, 27)) - fpObj.set("id", pid) - fpObj.set("name", pName) - fpObj.set("price", pPrice) - fpObj.set("original_price", pOriginalPrice) - fpObj.set("image", pImage) - fpObj.set("sales", pSales) - fpObj.set("shopId", pShopId) - fpObj.set("shopName", pShopName) - fpObj.set("viewTime", viewTime) - result.push(fpObj) - } - i++ - } - } - return@w result - } - catch (error: Throwable) { - console.error("获取足迹异常:", error, " at utils/supabaseService.uts:3453") - return@w _uA() - } - }) - } - open fun addFootprint(productId: String): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - console.log("[addFootprint] 用户未登录", " at utils/supabaseService.uts:3463") - return@w false - } - console.log("[addFootprint] 添加足迹, userId:", userId, "productId:", productId, " at utils/supabaseService.uts:3467") - val checkRes = await(supaInstance.from("ml_user_footprints").select("id").eq("user_id", userId!!).eq("product_id", productId).execute()) - console.log("[addFootprint] 检查结果 error:", checkRes.error, " at utils/supabaseService.uts:3477") - console.log("[addFootprint] 检查结果 data:", JSON.stringify(checkRes.data), " at utils/supabaseService.uts:3478") - val checkData = checkRes.data as UTSArray - val exists = checkData != null && UTSArray.isArray(checkData) && checkData.length > 0 - if (checkRes.error == null && exists) { - console.log("[addFootprint] 足迹已存在,更新时间", " at utils/supabaseService.uts:3484") - val updateRes = await(supaInstance.from("ml_user_footprints").update(object : UTSJSONObject() { - var updated_at = Date().toISOString() - }).eq("user_id", userId!!).eq("product_id", productId).execute()) - console.log("[addFootprint] 更新结果 error:", updateRes.error, " at utils/supabaseService.uts:3492") - } else { - console.log("[addFootprint] 足迹不存在,插入新记录", " at utils/supabaseService.uts:3494") - val insertPayload = UTSJSONObject(UTSSourceMapPosition("insertPayload", "utils/supabaseService.uts", 3230, 23)) - insertPayload.set("user_id", userId!!) - insertPayload.set("product_id", productId) - insertPayload.set("created_at", Date().toISOString()) - insertPayload.set("updated_at", Date().toISOString()) - val insertRes = await(supaInstance.from("ml_user_footprints").insert(insertPayload).execute()) - console.log("[addFootprint] 插入结果 error:", insertRes.error, " at utils/supabaseService.uts:3506") - } - return@w true - } - catch (e: Throwable) { - console.error("[addFootprint] 添加足迹异常:", e, " at utils/supabaseService.uts:3510") - return@w false - } - }) - } - open fun getAddressList(): UTSPromise> { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - val empty: UTSArray = _uA() - return@w empty - } - val response = await(supaInstance.from("ml_user_addresses").select("*, recipient_name:receiver_name, phone:receiver_phone, detail_address:address_detail").eq("user_id", userId!!).order("is_default", OrderOptions(ascending = false)).order("created_at", OrderOptions(ascending = false)).execute()) - if (response.error != null) { - console.error("获取地址列表失败:", response.error, " at utils/supabaseService.uts:3532") - val empty: UTSArray = _uA() - return@w empty - } - return@w response.data as UTSArray - } - catch (e: Throwable) { - console.error("获取地址列表异常:", e, " at utils/supabaseService.uts:3538") - val empty: UTSArray = _uA() - return@w empty - } - }) - } - open fun setDefaultAddress(addressId: String): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - console.error("用户未登录,无法设置默认地址", " at utils/supabaseService.uts:3549") - return@w false - } - await(this.clearDefaultAddress(userId!!)) - val response = await(supaInstance.from("ml_user_addresses").update(object : UTSJSONObject() { - var is_default = true - var updated_at = Date().toISOString() - }).eq("id", addressId).eq("user_id", userId!!).execute()) - if (response.error != null) { - console.error("设置默认地址失败:", response.error, " at utils/supabaseService.uts:3568") - return@w false - } - return@w true - } - catch (error: Throwable) { - console.error("设置默认地址异常:", error, " at utils/supabaseService.uts:3574") - return@w false - } - }) - } - open fun getUserCoupons(status: Number = 1): UTSPromise> { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - val empty: UTSArray = _uA() - return@w empty - } - val response = await(supaInstance.from("ml_user_coupons").select("\n *,\n template:ml_coupon_templates(name, amount, min_spend)\n ").eq("user_id", userId!!).eq("status", status).order("expire_at", OrderOptions(ascending = true)).execute()) - if (response.error != null) { - console.error("获取优惠券失败:", response.error, " at utils/supabaseService.uts:3603") - val empty: UTSArray = _uA() - return@w empty - } - val coupons: UTSArray = _uA() - val rawData = response.data as UTSArray - run { - var i: Number = 0 - while(i < rawData.length){ - val item = rawData[i] - var template: Any? = null - var itemId = "" - var itemUserId = "" - var itemTmplId = "" - var itemCode = "" - var itemStatus: Number = 0 - var itemRecv = "" - var itemExpire = "" - if (item is UTSJSONObject) { - template = (item as UTSJSONObject).get("template") as Any? - itemId = (item as UTSJSONObject).getString("id") ?: "" - itemUserId = (item as UTSJSONObject).getString("user_id") ?: "" - itemTmplId = (item as UTSJSONObject).getString("template_id") ?: "" - itemCode = (item as UTSJSONObject).getString("coupon_code") ?: "" - itemStatus = (item as UTSJSONObject).getNumber("status") ?: 0 - itemRecv = (item as UTSJSONObject).getString("received_at") ?: "" - itemExpire = (item as UTSJSONObject).getString("expire_at") ?: "" - } else { - val iObj = UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(item)), " at utils/supabaseService.uts:3356") as UTSJSONObject - template = iObj.get("template") as Any? - itemId = iObj.getString("id") ?: "" - itemUserId = iObj.getString("user_id") ?: "" - itemTmplId = iObj.getString("template_id") ?: "" - itemCode = iObj.getString("coupon_code") ?: "" - itemStatus = iObj.getNumber("status") ?: 0 - itemRecv = iObj.getString("received_at") ?: "" - itemExpire = iObj.getString("expire_at") ?: "" - } - if (template == null) { - template = UTSJSONObject() - } - var tName = "" - var tAmount: Number = 0 - var tMin: Number = 0 - if (template is UTSJSONObject) { - tName = (template as UTSJSONObject).getString("name") ?: "优惠券" - tAmount = (template as UTSJSONObject).getNumber("amount") ?: 0 - tMin = (template as UTSJSONObject).getNumber("min_spend") ?: 0 - } else { - val tObj = UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(template)), " at utils/supabaseService.uts:3377") as UTSJSONObject - tName = tObj.getString("name") ?: "优惠券" - tAmount = tObj.getNumber("amount") ?: 0 - tMin = tObj.getNumber("min_spend") ?: 0 - } - val couponObj = UTSJSONObject(UTSSourceMapPosition("couponObj", "utils/supabaseService.uts", 3382, 23)) - couponObj.set("id", itemId) - couponObj.set("user_id", itemUserId) - couponObj.set("template_id", itemTmplId) - couponObj.set("coupon_code", itemCode) - couponObj.set("status", itemStatus) - couponObj.set("received_at", itemRecv) - couponObj.set("expire_at", itemExpire) - couponObj.set("template_name", tName) - couponObj.set("amount", tAmount) - couponObj.set("min_spend", tMin) - coupons.push(couponObj as UserCoupon) - i++ - } - } - return@w coupons - } - catch (e: Throwable) { - console.error("获取优惠券异常:", e, " at utils/supabaseService.uts:3677") - val empty: UTSArray = _uA() - return@w empty - } - }) - } - open fun getUserCouponCount(): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val userId = this.getCurrentUserId() - if (userId == null) { - return@w 0 - } - val response = await(supaInstance.from("ml_user_coupons").select("id", object : UTSJSONObject() { - var count = "exact" - }).eq("user_id", userId!!).eq("status", 1).gt("expire_at", Date().toISOString()).limit(1).execute()) - if (response.error != null) { - return@w 0 - } - return@w response.total ?: 0 - } - catch (e: Throwable) { - return@w 0 - } - }) - } - open fun getAvailableCoupons(merchantId: String): UTSPromise> { - return wrapUTSPromise(suspend w@{ - return@w this.fetchShopCoupons(merchantId) - }) - } - open fun fetchShopCoupons(merchantId: String): UTSPromise> { - return wrapUTSPromise(suspend w@{ - try { - val response = await(supaInstance.from("ml_coupon_templates").select("*").or("merchant_id.eq." + merchantId + ",merchant_id.is.null").eq("status", 1).gt("end_time", Date().toISOString()).order("discount_value", OrderOptions(ascending = false)).execute()) - if (response.error != null) { - console.error("Fetch coupons failed:", response.error, " at utils/supabaseService.uts:3727") - val empty: UTSArray = _uA() - return@w empty - } - val data = response.data - if (data == null) { - val empty: UTSArray = _uA() - return@w empty - } - return@w data as UTSArray - } - catch (e: Throwable) { - console.error("Fetch coupons error:", e, " at utils/supabaseService.uts:3739") - val empty: UTSArray = _uA() - return@w empty - } - }) - } - open fun claimCoupon(templateId: String, userId: String): UTSPromise { - return wrapUTSPromise(suspend w@{ - return@w this.claimShopCoupon(templateId, userId) - }) - } - open fun claimShopCoupon(templateId: String, userId: String): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - console.log("Claiming coupon templateId:", templateId, "userId:", userId, " at utils/supabaseService.uts:3753") - val tmplRes = await(supaInstance.from("ml_coupon_templates").select("*").eq("id", templateId).limit(1).execute()) - if (tmplRes.error != null) { - console.error("Claim Coupon: Template query error", tmplRes.error, " at utils/supabaseService.uts:3764") - return@w false - } - if (tmplRes.data == null) { - console.error("Claim Coupon: Template data response is null", " at utils/supabaseService.uts:3770") - return@w false - } - val dataList = tmplRes.data as UTSArray - if (dataList.length === 0) { - console.error("Claim Coupon: Template not found (empty list)", " at utils/supabaseService.uts:3776") - return@w false - } - val template = dataList[0] - var validDays: Number = 0 - var endTimeStr: String? = null - var merchantId: String? = null - if (template is UTSJSONObject) { - validDays = (template as UTSJSONObject).getNumber("valid_days") ?: 0 - endTimeStr = (template as UTSJSONObject).getString("end_time") - merchantId = (template as UTSJSONObject).getString("merchant_id") - } else { - val tJson = UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(template)), " at utils/supabaseService.uts:3501") as UTSJSONObject - validDays = tJson.getNumber("valid_days") ?: 0 - endTimeStr = tJson.getString("end_time") - merchantId = tJson.getString("merchant_id") - } - var expireAt = Date(Date.now() + 2592000000).toISOString() - if (validDays > 0) { - expireAt = Date(Date.now() + (validDays * 86400000)).toISOString() - } else if (endTimeStr != null && endTimeStr !== "") { - expireAt = endTimeStr - } - if (merchantId != null && merchantId.length === 0) { - merchantId = null - } - val insertData: UTSJSONObject = object : UTSJSONObject(UTSSourceMapPosition("insertData", "utils/supabaseService.uts", 3519, 19)) { - var user_id = userId - var template_id = templateId - var merchant_id = merchantId - var coupon_code = "C" + Date.now() + Math.floor(Math.random() * 1000) - var status: Number = 1 - var expire_at = expireAt - var received_at = Date().toISOString() - } - console.log("Claim Coupon Insert Payload:", JSON.stringify(insertData), " at utils/supabaseService.uts:3822") - val response = await(supaInstance.from("ml_user_coupons").insert(insertData).execute()) - if (response.error != null) { - console.error("Claim Coupon: Insert failed:", JSON.stringify(response.error), " at utils/supabaseService.uts:3830") - if (JSON.stringify(response.error).includes("merchant_id")) { - console.log("Retrying without merchant_id...", " at utils/supabaseService.uts:3833") - val fallbackData: UTSJSONObject = object : UTSJSONObject(UTSSourceMapPosition("fallbackData", "utils/supabaseService.uts", 3538, 27)) { - var user_id = userId - var template_id = templateId - var coupon_code = "C" + Date.now() + Math.random().toString(10).substring(2, 6) - var status: Number = 1 - var expire_at = expireAt - var received_at = Date().toISOString() - } - val res2 = await(supaInstance.from("ml_user_coupons").insert(fallbackData).execute()) - if (res2.error == null) { - return@w true - } - } - return@w false - } - return@w true - } - catch (e: Throwable) { - console.error("Claim coupon error:", e, " at utils/supabaseService.uts:3849") - return@w false - } - }) - } - open fun getChatMessages(merchantId: String, page: Number = 1, pageSize: Number = 20): UTSPromise> { - return wrapUTSPromise(suspend w@{ - val userId = this.getCurrentUserId() - if (userId == null) { - val empty: UTSArray = _uA() - return@w empty - } - val fromIndex = (page - 1) * pageSize - val toIndex = fromIndex + pageSize - 1 - try { - val response = await(supaInstance.from("ml_chat_messages").select("*").or("sender_id.eq." + merchantId + ",receiver_id.eq." + merchantId).order("created_at", OrderOptions(ascending = false)).range(fromIndex, toIndex).execute()) - if (response.error != null) { - console.error("getChatMessages error:", response.error, " at utils/supabaseService.uts:3883") - val empty: UTSArray = _uA() - return@w empty - } - val data = response.data - if (data == null) { - val empty: UTSArray = _uA() - return@w empty - } - return@w data as UTSArray - } - catch (e: Throwable) { - console.error("getChatMessages exception:", e, " at utils/supabaseService.uts:3896") - val empty: UTSArray = _uA() - return@w empty - } - }) - } - open fun sendMessage(merchantId: String, content: String, msgType: String = "text"): UTSPromise { - return wrapUTSPromise(suspend w@{ - val userId = this.getCurrentUserId() - if (userId == null) { - console.error("sendMessage failed: user not logged in or session lost", " at utils/supabaseService.uts:3907") - return@w false - } - try { - val msg: UTSJSONObject = _uO("__\$originalPosition" to UTSSourceMapPosition("msg", "utils/supabaseService.uts", 3613, 19), "sender_id" to userId!!, "receiver_id" to merchantId, "content" to content, "msg_type" to msgType, "is_read" to false, "is_from_user" to true) - val response = await(supaInstance.from("ml_chat_messages").insert(msg).execute()) - if (response.error != null) { - console.error("sendMessage error:", response.error, " at utils/supabaseService.uts:3931") - return@w false - } - return@w true - } - catch (e: Throwable) { - console.error("sendMessage exception:", e, " at utils/supabaseService.uts:3936") - return@w false - } - }) - } - open fun markRead(merchantId: String): UTSPromise { - return wrapUTSPromise(suspend w@{ - val userId = this.getCurrentUserId() - if (userId == null) { - return@w false - } - try { - val response = await(supaInstance.from("ml_chat_messages").update(object : UTSJSONObject() { - var is_read = true - }).eq("sender_id", merchantId).eq("receiver_id", userId).eq("is_read", false).execute()) - if (response.error != null) { - return@w false - } - } - catch (e: Throwable) { - return@w false - } - return@w true - }) - } - open fun submitProductReviews(reviews: UTSArray): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - run { - var i: Number = 0 - while(i < reviews.length){ - val review = reviews[i] - val response = await(supaInstance.from("ml_product_reviews").insert(review).execute()) - if (response.error != null) { - console.error("提交商品评价失败:", response.error, " at utils/supabaseService.uts:3969") - return@w false - } - i++ - } - } - return@w true - } - catch (e: Throwable) { - console.error("提交商品评价失败:", e, " at utils/supabaseService.uts:3975") - return@w false - } - }) - } - open fun submitShopReview(review: UTSJSONObject): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val response = await(supaInstance.from("ml_shop_reviews").insert(review).execute()) - return@w response.error == null - } - catch (e: Throwable) { - console.error("提交店铺评价失败:", e, " at utils/supabaseService.uts:3989") - return@w false - } - }) - } - open fun updateOrderStatus(orderId: String, status: Number): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val updateData = UTSJSONObject(UTSSourceMapPosition("updateData", "utils/supabaseService.uts", 3695, 19)) - updateData.set("order_status", status) - val response = await(supaInstance.from("ml_orders").update(updateData).eq("id", orderId).execute()) - return@w response.error == null - } - catch (e: Throwable) { - console.error("更新订单状态失败:", e, " at utils/supabaseService.uts:4006") - return@w false - } - }) - } -} -val supabaseService = SupabaseService() -open class ProfileType ( - @JsonNotNull - open var id: String, - open var username: String? = null, - open var email: String? = null, - open var avatar_url: String? = null, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("ProfileType", "pages/user/center.uvue", 81, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return ProfileTypeReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class ProfileTypeReactiveObject : ProfileType, IUTSReactive { - override var __v_raw: ProfileType - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: ProfileType, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, username = __v_raw.username, email = __v_raw.email, avatar_url = __v_raw.avatar_url) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): ProfileTypeReactiveObject { - return ProfileTypeReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var username: String? - get() { - return _tRG(__v_raw, "username", __v_raw.username, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("username")) { - return - } - val oldValue = __v_raw.username - __v_raw.username = value - _tRS(__v_raw, "username", oldValue, value) - } - override var email: String? - get() { - return _tRG(__v_raw, "email", __v_raw.email, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("email")) { - return - } - val oldValue = __v_raw.email - __v_raw.email = value - _tRS(__v_raw, "email", oldValue, value) - } - override var avatar_url: String? - get() { - return _tRG(__v_raw, "avatar_url", __v_raw.avatar_url, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("avatar_url")) { - return - } - val oldValue = __v_raw.avatar_url - __v_raw.avatar_url = value - _tRS(__v_raw, "avatar_url", oldValue, value) - } -} -open class UserStatsType ( - @JsonNotNull - open var trainings: Number, - @JsonNotNull - open var points: Number, - @JsonNotNull - open var streak: Number, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("UserStatsType", "pages/user/center.uvue", 88, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return UserStatsTypeReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class UserStatsTypeReactiveObject : UserStatsType, IUTSReactive { - override var __v_raw: UserStatsType - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: UserStatsType, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(trainings = __v_raw.trainings, points = __v_raw.points, streak = __v_raw.streak) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UserStatsTypeReactiveObject { - return UserStatsTypeReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var trainings: Number - get() { - return _tRG(__v_raw, "trainings", __v_raw.trainings, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("trainings")) { - return - } - val oldValue = __v_raw.trainings - __v_raw.trainings = value - _tRS(__v_raw, "trainings", oldValue, value) - } - override var points: Number - get() { - return _tRG(__v_raw, "points", __v_raw.points, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("points")) { - return - } - val oldValue = __v_raw.points - __v_raw.points = value - _tRS(__v_raw, "points", oldValue, value) - } - override var streak: Number - get() { - return _tRG(__v_raw, "streak", __v_raw.streak, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("streak")) { - return - } - val oldValue = __v_raw.streak - __v_raw.streak = value - _tRS(__v_raw, "streak", oldValue, value) - } -} -val GenPagesUserCenterClass = CreateVueComponent(GenPagesUserCenter::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesUserCenter.inheritAttrs, inject = GenPagesUserCenter.inject, props = GenPagesUserCenter.props, propsNeedCastKeys = GenPagesUserCenter.propsNeedCastKeys, emits = GenPagesUserCenter.emits, components = GenPagesUserCenter.components, styles = GenPagesUserCenter.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesUserCenter.setup(props as GenPagesUserCenter) - } - ) -} -, fun(instance, renderer): GenPagesUserCenter { - return GenPagesUserCenter(instance, renderer) -} -) -val GenPagesUserProfileClass = CreateVueComponent(GenPagesUserProfile::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesUserProfile.inheritAttrs, inject = GenPagesUserProfile.inject, props = GenPagesUserProfile.props, propsNeedCastKeys = GenPagesUserProfile.propsNeedCastKeys, emits = GenPagesUserProfile.emits, components = GenPagesUserProfile.components, styles = GenPagesUserProfile.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesUserProfile.setup(props as GenPagesUserProfile) - } - ) -} -, fun(instance, renderer): GenPagesUserProfile { - return GenPagesUserProfile(instance, renderer) -} -) -val GenPagesUserChangePasswordClass = CreateVueComponent(GenPagesUserChangePassword::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesUserChangePassword.inheritAttrs, inject = GenPagesUserChangePassword.inject, props = GenPagesUserChangePassword.props, propsNeedCastKeys = GenPagesUserChangePassword.propsNeedCastKeys, emits = GenPagesUserChangePassword.emits, components = GenPagesUserChangePassword.components, styles = GenPagesUserChangePassword.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesUserChangePassword.setup(props as GenPagesUserChangePassword) - } - ) -} -, fun(instance, renderer): GenPagesUserChangePassword { - return GenPagesUserChangePassword(instance, renderer) -} -) -val GenPagesUserBindPhoneClass = CreateVueComponent(GenPagesUserBindPhone::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesUserBindPhone.inheritAttrs, inject = GenPagesUserBindPhone.inject, props = GenPagesUserBindPhone.props, propsNeedCastKeys = GenPagesUserBindPhone.propsNeedCastKeys, emits = GenPagesUserBindPhone.emits, components = GenPagesUserBindPhone.components, styles = GenPagesUserBindPhone.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesUserBindPhone.setup(props as GenPagesUserBindPhone) - } - ) -} -, fun(instance, renderer): GenPagesUserBindPhone { - return GenPagesUserBindPhone(instance, renderer) -} -) -val GenPagesUserBindEmailClass = CreateVueComponent(GenPagesUserBindEmail::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesUserBindEmail.inheritAttrs, inject = GenPagesUserBindEmail.inject, props = GenPagesUserBindEmail.props, propsNeedCastKeys = GenPagesUserBindEmail.propsNeedCastKeys, emits = GenPagesUserBindEmail.emits, components = GenPagesUserBindEmail.components, styles = GenPagesUserBindEmail.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesUserBindEmail.setup(props as GenPagesUserBindEmail) - } - ) -} -, fun(instance, renderer): GenPagesUserBindEmail { - return GenPagesUserBindEmail(instance, renderer) -} -) -open class SortTab ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var name: String, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("SortTab", "pages/mall/consumer/index.uvue", 337, 6) - } -} -val GenPagesMallConsumerIndexClass = CreateVueComponent(GenPagesMallConsumerIndex::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesMallConsumerIndex.inheritAttrs, inject = GenPagesMallConsumerIndex.inject, props = GenPagesMallConsumerIndex.props, propsNeedCastKeys = GenPagesMallConsumerIndex.propsNeedCastKeys, emits = GenPagesMallConsumerIndex.emits, components = GenPagesMallConsumerIndex.components, styles = GenPagesMallConsumerIndex.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesMallConsumerIndex.setup(props as GenPagesMallConsumerIndex) - } - ) -} -, fun(instance, renderer): GenPagesMallConsumerIndex { - return GenPagesMallConsumerIndex(instance, renderer) -} -) -open class LocalCategory ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var name: String, - @JsonNotNull - open var icon: String, - @JsonNotNull - open var description: String, - @JsonNotNull - open var color: String, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("LocalCategory", "pages/mall/consumer/category.uvue", 118, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return LocalCategoryReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class LocalCategoryReactiveObject : LocalCategory, IUTSReactive { - override var __v_raw: LocalCategory - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: LocalCategory, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, name = __v_raw.name, icon = __v_raw.icon, description = __v_raw.description, color = __v_raw.color) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): LocalCategoryReactiveObject { - return LocalCategoryReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var name: String - get() { - return _tRG(__v_raw, "name", __v_raw.name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("name")) { - return - } - val oldValue = __v_raw.name - __v_raw.name = value - _tRS(__v_raw, "name", oldValue, value) - } - override var icon: String - get() { - return _tRG(__v_raw, "icon", __v_raw.icon, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("icon")) { - return - } - val oldValue = __v_raw.icon - __v_raw.icon = value - _tRS(__v_raw, "icon", oldValue, value) - } - override var description: String - get() { - return _tRG(__v_raw, "description", __v_raw.description, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("description")) { - return - } - val oldValue = __v_raw.description - __v_raw.description = value - _tRS(__v_raw, "description", oldValue, value) - } - override var color: String - get() { - return _tRG(__v_raw, "color", __v_raw.color, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("color")) { - return - } - val oldValue = __v_raw.color - __v_raw.color = value - _tRS(__v_raw, "color", oldValue, value) - } -} -val GenPagesMallConsumerCategoryClass = CreateVueComponent(GenPagesMallConsumerCategory::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesMallConsumerCategory.inheritAttrs, inject = GenPagesMallConsumerCategory.inject, props = GenPagesMallConsumerCategory.props, propsNeedCastKeys = GenPagesMallConsumerCategory.propsNeedCastKeys, emits = GenPagesMallConsumerCategory.emits, components = GenPagesMallConsumerCategory.components, styles = GenPagesMallConsumerCategory.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesMallConsumerCategory.setup(props as GenPagesMallConsumerCategory) - } - ) -} -, fun(instance, renderer): GenPagesMallConsumerCategory { - return GenPagesMallConsumerCategory(instance, renderer) -} -) -open class MessageItem ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var title: String, - @JsonNotNull - open var content: String, - @JsonNotNull - open var time: String, - @JsonNotNull - open var read: Boolean = false, - @JsonNotNull - open var type: String, - open var avatar: String? = null, - @JsonNotNull - open var important: Boolean = false, - @JsonNotNull - open var coupon: String, - @JsonNotNull - open var expiry: String, - @JsonNotNull - open var claimed: Boolean = false, - @JsonNotNull - open var order_no: String, - @JsonNotNull - open var status: String, - @JsonNotNull - open var statusText: String, - @JsonNotNull - open var role: String, - @JsonNotNull - open var lastMessage: String, - @JsonNotNull - open var online: Boolean = false, - @JsonNotNull - open var unreadCount: Number, - @JsonNotNull - open var tags: UTSArray, - @JsonNotNull - open var icon: String, - @JsonNotNull - open var color: String, - @JsonNotNull - open var active: Boolean = false, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("MessageItem", "pages/mall/consumer/messages.uvue", 221, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return MessageItemReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class MessageItemReactiveObject : MessageItem, IUTSReactive { - override var __v_raw: MessageItem - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: MessageItem, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, title = __v_raw.title, content = __v_raw.content, time = __v_raw.time, read = __v_raw.read, type = __v_raw.type, avatar = __v_raw.avatar, important = __v_raw.important, coupon = __v_raw.coupon, expiry = __v_raw.expiry, claimed = __v_raw.claimed, order_no = __v_raw.order_no, status = __v_raw.status, statusText = __v_raw.statusText, role = __v_raw.role, lastMessage = __v_raw.lastMessage, online = __v_raw.online, unreadCount = __v_raw.unreadCount, tags = __v_raw.tags, icon = __v_raw.icon, color = __v_raw.color, active = __v_raw.active) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): MessageItemReactiveObject { - return MessageItemReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var title: String - get() { - return _tRG(__v_raw, "title", __v_raw.title, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("title")) { - return - } - val oldValue = __v_raw.title - __v_raw.title = value - _tRS(__v_raw, "title", oldValue, value) - } - override var content: String - get() { - return _tRG(__v_raw, "content", __v_raw.content, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("content")) { - return - } - val oldValue = __v_raw.content - __v_raw.content = value - _tRS(__v_raw, "content", oldValue, value) - } - override var time: String - get() { - return _tRG(__v_raw, "time", __v_raw.time, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("time")) { - return - } - val oldValue = __v_raw.time - __v_raw.time = value - _tRS(__v_raw, "time", oldValue, value) - } - override var read: Boolean - get() { - return _tRG(__v_raw, "read", __v_raw.read, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("read")) { - return - } - val oldValue = __v_raw.read - __v_raw.read = value - _tRS(__v_raw, "read", oldValue, value) - } - override var type: String - get() { - return _tRG(__v_raw, "type", __v_raw.type, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("type")) { - return - } - val oldValue = __v_raw.type - __v_raw.type = value - _tRS(__v_raw, "type", oldValue, value) - } - override var avatar: String? - get() { - return _tRG(__v_raw, "avatar", __v_raw.avatar, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("avatar")) { - return - } - val oldValue = __v_raw.avatar - __v_raw.avatar = value - _tRS(__v_raw, "avatar", oldValue, value) - } - override var important: Boolean - get() { - return _tRG(__v_raw, "important", __v_raw.important, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("important")) { - return - } - val oldValue = __v_raw.important - __v_raw.important = value - _tRS(__v_raw, "important", oldValue, value) - } - override var coupon: String - get() { - return _tRG(__v_raw, "coupon", __v_raw.coupon, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("coupon")) { - return - } - val oldValue = __v_raw.coupon - __v_raw.coupon = value - _tRS(__v_raw, "coupon", oldValue, value) - } - override var expiry: String - get() { - return _tRG(__v_raw, "expiry", __v_raw.expiry, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("expiry")) { - return - } - val oldValue = __v_raw.expiry - __v_raw.expiry = value - _tRS(__v_raw, "expiry", oldValue, value) - } - override var claimed: Boolean - get() { - return _tRG(__v_raw, "claimed", __v_raw.claimed, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("claimed")) { - return - } - val oldValue = __v_raw.claimed - __v_raw.claimed = value - _tRS(__v_raw, "claimed", oldValue, value) - } - override var order_no: String - get() { - return _tRG(__v_raw, "order_no", __v_raw.order_no, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("order_no")) { - return - } - val oldValue = __v_raw.order_no - __v_raw.order_no = value - _tRS(__v_raw, "order_no", oldValue, value) - } - override var status: String - get() { - return _tRG(__v_raw, "status", __v_raw.status, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("status")) { - return - } - val oldValue = __v_raw.status - __v_raw.status = value - _tRS(__v_raw, "status", oldValue, value) - } - override var statusText: String - get() { - return _tRG(__v_raw, "statusText", __v_raw.statusText, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("statusText")) { - return - } - val oldValue = __v_raw.statusText - __v_raw.statusText = value - _tRS(__v_raw, "statusText", oldValue, value) - } - override var role: String - get() { - return _tRG(__v_raw, "role", __v_raw.role, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("role")) { - return - } - val oldValue = __v_raw.role - __v_raw.role = value - _tRS(__v_raw, "role", oldValue, value) - } - override var lastMessage: String - get() { - return _tRG(__v_raw, "lastMessage", __v_raw.lastMessage, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("lastMessage")) { - return - } - val oldValue = __v_raw.lastMessage - __v_raw.lastMessage = value - _tRS(__v_raw, "lastMessage", oldValue, value) - } - override var online: Boolean - get() { - return _tRG(__v_raw, "online", __v_raw.online, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("online")) { - return - } - val oldValue = __v_raw.online - __v_raw.online = value - _tRS(__v_raw, "online", oldValue, value) - } - override var unreadCount: Number - get() { - return _tRG(__v_raw, "unreadCount", __v_raw.unreadCount, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("unreadCount")) { - return - } - val oldValue = __v_raw.unreadCount - __v_raw.unreadCount = value - _tRS(__v_raw, "unreadCount", oldValue, value) - } - override var tags: UTSArray - get() { - return _tRG(__v_raw, "tags", __v_raw.tags, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("tags")) { - return - } - val oldValue = __v_raw.tags - __v_raw.tags = value - _tRS(__v_raw, "tags", oldValue, value) - } - override var icon: String - get() { - return _tRG(__v_raw, "icon", __v_raw.icon, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("icon")) { - return - } - val oldValue = __v_raw.icon - __v_raw.icon = value - _tRS(__v_raw, "icon", oldValue, value) - } - override var color: String - get() { - return _tRG(__v_raw, "color", __v_raw.color, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("color")) { - return - } - val oldValue = __v_raw.color - __v_raw.color = value - _tRS(__v_raw, "color", oldValue, value) - } - override var active: Boolean - get() { - return _tRG(__v_raw, "active", __v_raw.active, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("active")) { - return - } - val oldValue = __v_raw.active - __v_raw.active = value - _tRS(__v_raw, "active", oldValue, value) - } -} -open class MessageTab ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var name: String, - @JsonNotNull - open var unread: Number, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("MessageTab", "pages/mall/consumer/messages.uvue", 247, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return MessageTabReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class MessageTabReactiveObject : MessageTab, IUTSReactive { - override var __v_raw: MessageTab - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: MessageTab, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, name = __v_raw.name, unread = __v_raw.unread) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): MessageTabReactiveObject { - return MessageTabReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var name: String - get() { - return _tRG(__v_raw, "name", __v_raw.name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("name")) { - return - } - val oldValue = __v_raw.name - __v_raw.name = value - _tRS(__v_raw, "name", oldValue, value) - } - override var unread: Number - get() { - return _tRG(__v_raw, "unread", __v_raw.unread, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("unread")) { - return - } - val oldValue = __v_raw.unread - __v_raw.unread = value - _tRS(__v_raw, "unread", oldValue, value) - } -} -val GenPagesMallConsumerMessagesClass = CreateVueComponent(GenPagesMallConsumerMessages::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesMallConsumerMessages.inheritAttrs, inject = GenPagesMallConsumerMessages.inject, props = GenPagesMallConsumerMessages.props, propsNeedCastKeys = GenPagesMallConsumerMessages.propsNeedCastKeys, emits = GenPagesMallConsumerMessages.emits, components = GenPagesMallConsumerMessages.components, styles = GenPagesMallConsumerMessages.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesMallConsumerMessages.setup(props as GenPagesMallConsumerMessages) - } - ) -} -, fun(instance, renderer): GenPagesMallConsumerMessages { - return GenPagesMallConsumerMessages(instance, renderer) -} -) -open class LocalCartItem ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var shopId: String, - @JsonNotNull - open var shopName: String, - @JsonNotNull - open var name: String, - @JsonNotNull - open var price: Number, - @JsonNotNull - open var image: String, - @JsonNotNull - open var spec: String, - @JsonNotNull - open var quantity: Number, - @JsonNotNull - open var selected: Boolean = false, - @JsonNotNull - open var productId: String, - @JsonNotNull - open var skuId: String, - @JsonNotNull - open var merchantId: String, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("LocalCartItem", "pages/mall/consumer/cart.uvue", 173, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return LocalCartItemReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class LocalCartItemReactiveObject : LocalCartItem, IUTSReactive { - override var __v_raw: LocalCartItem - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: LocalCartItem, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, shopId = __v_raw.shopId, shopName = __v_raw.shopName, name = __v_raw.name, price = __v_raw.price, image = __v_raw.image, spec = __v_raw.spec, quantity = __v_raw.quantity, selected = __v_raw.selected, productId = __v_raw.productId, skuId = __v_raw.skuId, merchantId = __v_raw.merchantId) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): LocalCartItemReactiveObject { - return LocalCartItemReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var shopId: String - get() { - return _tRG(__v_raw, "shopId", __v_raw.shopId, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("shopId")) { - return - } - val oldValue = __v_raw.shopId - __v_raw.shopId = value - _tRS(__v_raw, "shopId", oldValue, value) - } - override var shopName: String - get() { - return _tRG(__v_raw, "shopName", __v_raw.shopName, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("shopName")) { - return - } - val oldValue = __v_raw.shopName - __v_raw.shopName = value - _tRS(__v_raw, "shopName", oldValue, value) - } - override var name: String - get() { - return _tRG(__v_raw, "name", __v_raw.name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("name")) { - return - } - val oldValue = __v_raw.name - __v_raw.name = value - _tRS(__v_raw, "name", oldValue, value) - } - override var price: Number - get() { - return _tRG(__v_raw, "price", __v_raw.price, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("price")) { - return - } - val oldValue = __v_raw.price - __v_raw.price = value - _tRS(__v_raw, "price", oldValue, value) - } - override var image: String - get() { - return _tRG(__v_raw, "image", __v_raw.image, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("image")) { - return - } - val oldValue = __v_raw.image - __v_raw.image = value - _tRS(__v_raw, "image", oldValue, value) - } - override var spec: String - get() { - return _tRG(__v_raw, "spec", __v_raw.spec, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("spec")) { - return - } - val oldValue = __v_raw.spec - __v_raw.spec = value - _tRS(__v_raw, "spec", oldValue, value) - } - override var quantity: Number - get() { - return _tRG(__v_raw, "quantity", __v_raw.quantity, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("quantity")) { - return - } - val oldValue = __v_raw.quantity - __v_raw.quantity = value - _tRS(__v_raw, "quantity", oldValue, value) - } - override var selected: Boolean - get() { - return _tRG(__v_raw, "selected", __v_raw.selected, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("selected")) { - return - } - val oldValue = __v_raw.selected - __v_raw.selected = value - _tRS(__v_raw, "selected", oldValue, value) - } - override var productId: String - get() { - return _tRG(__v_raw, "productId", __v_raw.productId, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("productId")) { - return - } - val oldValue = __v_raw.productId - __v_raw.productId = value - _tRS(__v_raw, "productId", oldValue, value) - } - override var skuId: String - get() { - return _tRG(__v_raw, "skuId", __v_raw.skuId, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("skuId")) { - return - } - val oldValue = __v_raw.skuId - __v_raw.skuId = value - _tRS(__v_raw, "skuId", oldValue, value) - } - override var merchantId: String - get() { - return _tRG(__v_raw, "merchantId", __v_raw.merchantId, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("merchantId")) { - return - } - val oldValue = __v_raw.merchantId - __v_raw.merchantId = value - _tRS(__v_raw, "merchantId", oldValue, value) - } -} -open class CartGroup ( - @JsonNotNull - open var shopId: String, - @JsonNotNull - open var shopName: String, - @JsonNotNull - open var merchantId: String, - @JsonNotNull - open var items: UTSArray, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("CartGroup", "pages/mall/consumer/cart.uvue", 188, 6) - } -} -open class RecommendProduct ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var shopId: String, - @JsonNotNull - open var shopName: String, - @JsonNotNull - open var name: String, - @JsonNotNull - open var price: Number, - @JsonNotNull - open var image: String, - @JsonNotNull - open var skuId: String, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("RecommendProduct", "pages/mall/consumer/cart.uvue", 195, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return RecommendProductReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class RecommendProductReactiveObject : RecommendProduct, IUTSReactive { - override var __v_raw: RecommendProduct - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: RecommendProduct, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, shopId = __v_raw.shopId, shopName = __v_raw.shopName, name = __v_raw.name, price = __v_raw.price, image = __v_raw.image, skuId = __v_raw.skuId) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): RecommendProductReactiveObject { - return RecommendProductReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var shopId: String - get() { - return _tRG(__v_raw, "shopId", __v_raw.shopId, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("shopId")) { - return - } - val oldValue = __v_raw.shopId - __v_raw.shopId = value - _tRS(__v_raw, "shopId", oldValue, value) - } - override var shopName: String - get() { - return _tRG(__v_raw, "shopName", __v_raw.shopName, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("shopName")) { - return - } - val oldValue = __v_raw.shopName - __v_raw.shopName = value - _tRS(__v_raw, "shopName", oldValue, value) - } - override var name: String - get() { - return _tRG(__v_raw, "name", __v_raw.name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("name")) { - return - } - val oldValue = __v_raw.name - __v_raw.name = value - _tRS(__v_raw, "name", oldValue, value) - } - override var price: Number - get() { - return _tRG(__v_raw, "price", __v_raw.price, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("price")) { - return - } - val oldValue = __v_raw.price - __v_raw.price = value - _tRS(__v_raw, "price", oldValue, value) - } - override var image: String - get() { - return _tRG(__v_raw, "image", __v_raw.image, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("image")) { - return - } - val oldValue = __v_raw.image - __v_raw.image = value - _tRS(__v_raw, "image", oldValue, value) - } - override var skuId: String - get() { - return _tRG(__v_raw, "skuId", __v_raw.skuId, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("skuId")) { - return - } - val oldValue = __v_raw.skuId - __v_raw.skuId = value - _tRS(__v_raw, "skuId", oldValue, value) - } -} -val GenPagesMallConsumerCartClass = CreateVueComponent(GenPagesMallConsumerCart::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesMallConsumerCart.inheritAttrs, inject = GenPagesMallConsumerCart.inject, props = GenPagesMallConsumerCart.props, propsNeedCastKeys = GenPagesMallConsumerCart.propsNeedCastKeys, emits = GenPagesMallConsumerCart.emits, components = GenPagesMallConsumerCart.components, styles = GenPagesMallConsumerCart.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesMallConsumerCart.setup(props as GenPagesMallConsumerCart) - } - ) -} -, fun(instance, renderer): GenPagesMallConsumerCart { - return GenPagesMallConsumerCart(instance, renderer) -} -) -open class UserStatsType__1 ( - @JsonNotNull - open var points: Number, - @JsonNotNull - open var balance: Number, - @JsonNotNull - open var level: Number, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("UserStatsType", "pages/mall/consumer/profile.uvue", 255, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return UserStatsType__1ReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class UserStatsType__1ReactiveObject : UserStatsType__1, IUTSReactive { - override var __v_raw: UserStatsType__1 - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: UserStatsType__1, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(points = __v_raw.points, balance = __v_raw.balance, level = __v_raw.level) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UserStatsType__1ReactiveObject { - return UserStatsType__1ReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var points: Number - get() { - return _tRG(__v_raw, "points", __v_raw.points, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("points")) { - return - } - val oldValue = __v_raw.points - __v_raw.points = value - _tRS(__v_raw, "points", oldValue, value) - } - override var balance: Number - get() { - return _tRG(__v_raw, "balance", __v_raw.balance, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("balance")) { - return - } - val oldValue = __v_raw.balance - __v_raw.balance = value - _tRS(__v_raw, "balance", oldValue, value) - } - override var level: Number - get() { - return _tRG(__v_raw, "level", __v_raw.level, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("level")) { - return - } - val oldValue = __v_raw.level - __v_raw.level = value - _tRS(__v_raw, "level", oldValue, value) - } -} -open class OrderCountsType ( - @JsonNotNull - open var total: Number, - @JsonNotNull - open var pending: Number, - @JsonNotNull - open var toship: Number, - @JsonNotNull - open var shipped: Number, - @JsonNotNull - open var review: Number, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("OrderCountsType", "pages/mall/consumer/profile.uvue", 261, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return OrderCountsTypeReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class OrderCountsTypeReactiveObject : OrderCountsType, IUTSReactive { - override var __v_raw: OrderCountsType - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: OrderCountsType, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(total = __v_raw.total, pending = __v_raw.pending, toship = __v_raw.toship, shipped = __v_raw.shipped, review = __v_raw.review) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): OrderCountsTypeReactiveObject { - return OrderCountsTypeReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var total: Number - get() { - return _tRG(__v_raw, "total", __v_raw.total, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("total")) { - return - } - val oldValue = __v_raw.total - __v_raw.total = value - _tRS(__v_raw, "total", oldValue, value) - } - override var pending: Number - get() { - return _tRG(__v_raw, "pending", __v_raw.pending, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("pending")) { - return - } - val oldValue = __v_raw.pending - __v_raw.pending = value - _tRS(__v_raw, "pending", oldValue, value) - } - override var toship: Number - get() { - return _tRG(__v_raw, "toship", __v_raw.toship, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("toship")) { - return - } - val oldValue = __v_raw.toship - __v_raw.toship = value - _tRS(__v_raw, "toship", oldValue, value) - } - override var shipped: Number - get() { - return _tRG(__v_raw, "shipped", __v_raw.shipped, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("shipped")) { - return - } - val oldValue = __v_raw.shipped - __v_raw.shipped = value - _tRS(__v_raw, "shipped", oldValue, value) - } - override var review: Number - get() { - return _tRG(__v_raw, "review", __v_raw.review, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("review")) { - return - } - val oldValue = __v_raw.review - __v_raw.review = value - _tRS(__v_raw, "review", oldValue, value) - } -} -open class ServiceCountsType ( - @JsonNotNull - open var coupons: Number, - @JsonNotNull - open var favorites: Number, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("ServiceCountsType", "pages/mall/consumer/profile.uvue", 269, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return ServiceCountsTypeReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class ServiceCountsTypeReactiveObject : ServiceCountsType, IUTSReactive { - override var __v_raw: ServiceCountsType - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: ServiceCountsType, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(coupons = __v_raw.coupons, favorites = __v_raw.favorites) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): ServiceCountsTypeReactiveObject { - return ServiceCountsTypeReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var coupons: Number - get() { - return _tRG(__v_raw, "coupons", __v_raw.coupons, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("coupons")) { - return - } - val oldValue = __v_raw.coupons - __v_raw.coupons = value - _tRS(__v_raw, "coupons", oldValue, value) - } - override var favorites: Number - get() { - return _tRG(__v_raw, "favorites", __v_raw.favorites, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("favorites")) { - return - } - val oldValue = __v_raw.favorites - __v_raw.favorites = value - _tRS(__v_raw, "favorites", oldValue, value) - } -} -open class ConsumptionStatsType ( - @JsonNotNull - open var total_amount: Number, - @JsonNotNull - open var order_count: Number, - @JsonNotNull - open var avg_amount: Number, - @JsonNotNull - open var save_amount: Number, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("ConsumptionStatsType", "pages/mall/consumer/profile.uvue", 274, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return ConsumptionStatsTypeReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class ConsumptionStatsTypeReactiveObject : ConsumptionStatsType, IUTSReactive { - override var __v_raw: ConsumptionStatsType - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: ConsumptionStatsType, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(total_amount = __v_raw.total_amount, order_count = __v_raw.order_count, avg_amount = __v_raw.avg_amount, save_amount = __v_raw.save_amount) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): ConsumptionStatsTypeReactiveObject { - return ConsumptionStatsTypeReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var total_amount: Number - get() { - return _tRG(__v_raw, "total_amount", __v_raw.total_amount, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("total_amount")) { - return - } - val oldValue = __v_raw.total_amount - __v_raw.total_amount = value - _tRS(__v_raw, "total_amount", oldValue, value) - } - override var order_count: Number - get() { - return _tRG(__v_raw, "order_count", __v_raw.order_count, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("order_count")) { - return - } - val oldValue = __v_raw.order_count - __v_raw.order_count = value - _tRS(__v_raw, "order_count", oldValue, value) - } - override var avg_amount: Number - get() { - return _tRG(__v_raw, "avg_amount", __v_raw.avg_amount, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("avg_amount")) { - return - } - val oldValue = __v_raw.avg_amount - __v_raw.avg_amount = value - _tRS(__v_raw, "avg_amount", oldValue, value) - } - override var save_amount: Number - get() { - return _tRG(__v_raw, "save_amount", __v_raw.save_amount, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("save_amount")) { - return - } - val oldValue = __v_raw.save_amount - __v_raw.save_amount = value - _tRS(__v_raw, "save_amount", oldValue, value) - } -} -open class StatsPeriodType ( - @JsonNotNull - open var key: String, - @JsonNotNull - open var label: String, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("StatsPeriodType", "pages/mall/consumer/profile.uvue", 281, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return StatsPeriodTypeReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class StatsPeriodTypeReactiveObject : StatsPeriodType, IUTSReactive { - override var __v_raw: StatsPeriodType - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: StatsPeriodType, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(key = __v_raw.key, label = __v_raw.label) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): StatsPeriodTypeReactiveObject { - return StatsPeriodTypeReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var key: String - get() { - return _tRG(__v_raw, "key", __v_raw.key, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("key")) { - return - } - val oldValue = __v_raw.key - __v_raw.key = value - _tRS(__v_raw, "key", oldValue, value) - } - override var label: String - get() { - return _tRG(__v_raw, "label", __v_raw.label, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("label")) { - return - } - val oldValue = __v_raw.label - __v_raw.label = value - _tRS(__v_raw, "label", oldValue, value) - } -} -val GenPagesMallConsumerProfileClass = CreateVueComponent(GenPagesMallConsumerProfile::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesMallConsumerProfile.inheritAttrs, inject = GenPagesMallConsumerProfile.inject, props = GenPagesMallConsumerProfile.props, propsNeedCastKeys = GenPagesMallConsumerProfile.propsNeedCastKeys, emits = GenPagesMallConsumerProfile.emits, components = GenPagesMallConsumerProfile.components, styles = GenPagesMallConsumerProfile.styles) -} -, fun(instance, renderer): GenPagesMallConsumerProfile { - return GenPagesMallConsumerProfile(instance, renderer) -} -) -open class UserType__1 ( - @JsonNotNull - open var id: String, - open var phone: String? = null, - open var email: String? = null, - open var nickname: String? = null, - open var avatar_url: String? = null, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("UserType", "pages/mall/consumer/settings.uvue", 221, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return UserType__1ReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class UserType__1ReactiveObject : UserType__1, IUTSReactive { - override var __v_raw: UserType__1 - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: UserType__1, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, phone = __v_raw.phone, email = __v_raw.email, nickname = __v_raw.nickname, avatar_url = __v_raw.avatar_url) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UserType__1ReactiveObject { - return UserType__1ReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var phone: String? - get() { - return _tRG(__v_raw, "phone", __v_raw.phone, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("phone")) { - return - } - val oldValue = __v_raw.phone - __v_raw.phone = value - _tRS(__v_raw, "phone", oldValue, value) - } - override var email: String? - get() { - return _tRG(__v_raw, "email", __v_raw.email, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("email")) { - return - } - val oldValue = __v_raw.email - __v_raw.email = value - _tRS(__v_raw, "email", oldValue, value) - } - override var nickname: String? - get() { - return _tRG(__v_raw, "nickname", __v_raw.nickname, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("nickname")) { - return - } - val oldValue = __v_raw.nickname - __v_raw.nickname = value - _tRS(__v_raw, "nickname", oldValue, value) - } - override var avatar_url: String? - get() { - return _tRG(__v_raw, "avatar_url", __v_raw.avatar_url, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("avatar_url")) { - return - } - val oldValue = __v_raw.avatar_url - __v_raw.avatar_url = value - _tRS(__v_raw, "avatar_url", oldValue, value) - } -} -open class NotificationType ( - @JsonNotNull - open var order: Boolean = false, - @JsonNotNull - open var promotion: Boolean = false, - @JsonNotNull - open var review: Boolean = false, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("NotificationType", "pages/mall/consumer/settings.uvue", 229, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return NotificationTypeReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class NotificationTypeReactiveObject : NotificationType, IUTSReactive { - override var __v_raw: NotificationType - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: NotificationType, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(order = __v_raw.order, promotion = __v_raw.promotion, review = __v_raw.review) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): NotificationTypeReactiveObject { - return NotificationTypeReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var order: Boolean - get() { - return _tRG(__v_raw, "order", __v_raw.order, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("order")) { - return - } - val oldValue = __v_raw.order - __v_raw.order = value - _tRS(__v_raw, "order", oldValue, value) - } - override var promotion: Boolean - get() { - return _tRG(__v_raw, "promotion", __v_raw.promotion, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("promotion")) { - return - } - val oldValue = __v_raw.promotion - __v_raw.promotion = value - _tRS(__v_raw, "promotion", oldValue, value) - } - override var review: Boolean - get() { - return _tRG(__v_raw, "review", __v_raw.review, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("review")) { - return - } - val oldValue = __v_raw.review - __v_raw.review = value - _tRS(__v_raw, "review", oldValue, value) - } -} -open class PrivacyType ( - @JsonNotNull - open var hidePurchase: Boolean = false, - @JsonNotNull - open var allowSearchByPhone: Boolean = false, - @JsonNotNull - open var receiveMerchantMsg: Boolean = false, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("PrivacyType", "pages/mall/consumer/settings.uvue", 235, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return PrivacyTypeReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class PrivacyTypeReactiveObject : PrivacyType, IUTSReactive { - override var __v_raw: PrivacyType - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: PrivacyType, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(hidePurchase = __v_raw.hidePurchase, allowSearchByPhone = __v_raw.allowSearchByPhone, receiveMerchantMsg = __v_raw.receiveMerchantMsg) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): PrivacyTypeReactiveObject { - return PrivacyTypeReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var hidePurchase: Boolean - get() { - return _tRG(__v_raw, "hidePurchase", __v_raw.hidePurchase, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("hidePurchase")) { - return - } - val oldValue = __v_raw.hidePurchase - __v_raw.hidePurchase = value - _tRS(__v_raw, "hidePurchase", oldValue, value) - } - override var allowSearchByPhone: Boolean - get() { - return _tRG(__v_raw, "allowSearchByPhone", __v_raw.allowSearchByPhone, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("allowSearchByPhone")) { - return - } - val oldValue = __v_raw.allowSearchByPhone - __v_raw.allowSearchByPhone = value - _tRS(__v_raw, "allowSearchByPhone", oldValue, value) - } - override var receiveMerchantMsg: Boolean - get() { - return _tRG(__v_raw, "receiveMerchantMsg", __v_raw.receiveMerchantMsg, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("receiveMerchantMsg")) { - return - } - val oldValue = __v_raw.receiveMerchantMsg - __v_raw.receiveMerchantMsg = value - _tRS(__v_raw, "receiveMerchantMsg", oldValue, value) - } -} -val GenPagesMallConsumerSettingsClass = CreateVueComponent(GenPagesMallConsumerSettings::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesMallConsumerSettings.inheritAttrs, inject = GenPagesMallConsumerSettings.inject, props = GenPagesMallConsumerSettings.props, propsNeedCastKeys = GenPagesMallConsumerSettings.propsNeedCastKeys, emits = GenPagesMallConsumerSettings.emits, components = GenPagesMallConsumerSettings.components, styles = GenPagesMallConsumerSettings.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesMallConsumerSettings.setup(props as GenPagesMallConsumerSettings) - } - ) -} -, fun(instance, renderer): GenPagesMallConsumerSettings { - return GenPagesMallConsumerSettings(instance, renderer) -} -) -open class TransactionType ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var user_id: String, - @JsonNotNull - open var change_amount: Number, - @JsonNotNull - open var amount: Number, - @JsonNotNull - open var current_balance: Number, - @JsonNotNull - open var change_type: String, - @JsonNotNull - open var type: String, - open var related_id: String? = null, - open var remark: String? = null, - @JsonNotNull - open var created_at: String, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("TransactionType", "pages/mall/consumer/wallet.uvue", 184, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return TransactionTypeReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class TransactionTypeReactiveObject : TransactionType, IUTSReactive { - override var __v_raw: TransactionType - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: TransactionType, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, user_id = __v_raw.user_id, change_amount = __v_raw.change_amount, amount = __v_raw.amount, current_balance = __v_raw.current_balance, change_type = __v_raw.change_type, type = __v_raw.type, related_id = __v_raw.related_id, remark = __v_raw.remark, created_at = __v_raw.created_at) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): TransactionTypeReactiveObject { - return TransactionTypeReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var user_id: String - get() { - return _tRG(__v_raw, "user_id", __v_raw.user_id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("user_id")) { - return - } - val oldValue = __v_raw.user_id - __v_raw.user_id = value - _tRS(__v_raw, "user_id", oldValue, value) - } - override var change_amount: Number - get() { - return _tRG(__v_raw, "change_amount", __v_raw.change_amount, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("change_amount")) { - return - } - val oldValue = __v_raw.change_amount - __v_raw.change_amount = value - _tRS(__v_raw, "change_amount", oldValue, value) - } - override var amount: Number - get() { - return _tRG(__v_raw, "amount", __v_raw.amount, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("amount")) { - return - } - val oldValue = __v_raw.amount - __v_raw.amount = value - _tRS(__v_raw, "amount", oldValue, value) - } - override var current_balance: Number - get() { - return _tRG(__v_raw, "current_balance", __v_raw.current_balance, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("current_balance")) { - return - } - val oldValue = __v_raw.current_balance - __v_raw.current_balance = value - _tRS(__v_raw, "current_balance", oldValue, value) - } - override var change_type: String - get() { - return _tRG(__v_raw, "change_type", __v_raw.change_type, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("change_type")) { - return - } - val oldValue = __v_raw.change_type - __v_raw.change_type = value - _tRS(__v_raw, "change_type", oldValue, value) - } - override var type: String - get() { - return _tRG(__v_raw, "type", __v_raw.type, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("type")) { - return - } - val oldValue = __v_raw.type - __v_raw.type = value - _tRS(__v_raw, "type", oldValue, value) - } - override var related_id: String? - get() { - return _tRG(__v_raw, "related_id", __v_raw.related_id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("related_id")) { - return - } - val oldValue = __v_raw.related_id - __v_raw.related_id = value - _tRS(__v_raw, "related_id", oldValue, value) - } - override var remark: String? - get() { - return _tRG(__v_raw, "remark", __v_raw.remark, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("remark")) { - return - } - val oldValue = __v_raw.remark - __v_raw.remark = value - _tRS(__v_raw, "remark", oldValue, value) - } - override var created_at: String - get() { - return _tRG(__v_raw, "created_at", __v_raw.created_at, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("created_at")) { - return - } - val oldValue = __v_raw.created_at - __v_raw.created_at = value - _tRS(__v_raw, "created_at", oldValue, value) - } -} -open class StatsType ( - @JsonNotNull - open var totalRecharge: Number, - @JsonNotNull - open var totalConsume: Number, - @JsonNotNull - open var totalWithdraw: Number, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("StatsType", "pages/mall/consumer/wallet.uvue", 197, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return StatsTypeReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class StatsTypeReactiveObject : StatsType, IUTSReactive { - override var __v_raw: StatsType - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: StatsType, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(totalRecharge = __v_raw.totalRecharge, totalConsume = __v_raw.totalConsume, totalWithdraw = __v_raw.totalWithdraw) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): StatsTypeReactiveObject { - return StatsTypeReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var totalRecharge: Number - get() { - return _tRG(__v_raw, "totalRecharge", __v_raw.totalRecharge, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("totalRecharge")) { - return - } - val oldValue = __v_raw.totalRecharge - __v_raw.totalRecharge = value - _tRS(__v_raw, "totalRecharge", oldValue, value) - } - override var totalConsume: Number - get() { - return _tRG(__v_raw, "totalConsume", __v_raw.totalConsume, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("totalConsume")) { - return - } - val oldValue = __v_raw.totalConsume - __v_raw.totalConsume = value - _tRS(__v_raw, "totalConsume", oldValue, value) - } - override var totalWithdraw: Number - get() { - return _tRG(__v_raw, "totalWithdraw", __v_raw.totalWithdraw, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("totalWithdraw")) { - return - } - val oldValue = __v_raw.totalWithdraw - __v_raw.totalWithdraw = value - _tRS(__v_raw, "totalWithdraw", oldValue, value) - } -} -val GenPagesMallConsumerWalletClass = CreateVueComponent(GenPagesMallConsumerWallet::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesMallConsumerWallet.inheritAttrs, inject = GenPagesMallConsumerWallet.inject, props = GenPagesMallConsumerWallet.props, propsNeedCastKeys = GenPagesMallConsumerWallet.propsNeedCastKeys, emits = GenPagesMallConsumerWallet.emits, components = GenPagesMallConsumerWallet.components, styles = GenPagesMallConsumerWallet.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesMallConsumerWallet.setup(props as GenPagesMallConsumerWallet) - } - ) -} -, fun(instance, renderer): GenPagesMallConsumerWallet { - return GenPagesMallConsumerWallet(instance, renderer) -} -) -open class BankCard ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var bank_name: String, - @JsonNotNull - open var card_number: String, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("BankCard", "pages/mall/consumer/withdraw.uvue", 78, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return BankCardReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class BankCardReactiveObject : BankCard, IUTSReactive { - override var __v_raw: BankCard - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: BankCard, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, bank_name = __v_raw.bank_name, card_number = __v_raw.card_number) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): BankCardReactiveObject { - return BankCardReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var bank_name: String - get() { - return _tRG(__v_raw, "bank_name", __v_raw.bank_name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("bank_name")) { - return - } - val oldValue = __v_raw.bank_name - __v_raw.bank_name = value - _tRS(__v_raw, "bank_name", oldValue, value) - } - override var card_number: String - get() { - return _tRG(__v_raw, "card_number", __v_raw.card_number, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("card_number")) { - return - } - val oldValue = __v_raw.card_number - __v_raw.card_number = value - _tRS(__v_raw, "card_number", oldValue, value) - } -} -val GenPagesMallConsumerWithdrawClass = CreateVueComponent(GenPagesMallConsumerWithdraw::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesMallConsumerWithdraw.inheritAttrs, inject = GenPagesMallConsumerWithdraw.inject, props = GenPagesMallConsumerWithdraw.props, propsNeedCastKeys = GenPagesMallConsumerWithdraw.propsNeedCastKeys, emits = GenPagesMallConsumerWithdraw.emits, components = GenPagesMallConsumerWithdraw.components, styles = GenPagesMallConsumerWithdraw.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesMallConsumerWithdraw.setup(props as GenPagesMallConsumerWithdraw) - } - ) -} -, fun(instance, renderer): GenPagesMallConsumerWithdraw { - return GenPagesMallConsumerWithdraw(instance, renderer) -} -) -open class HotSearchItemType ( - @JsonNotNull - open var keyword: String, - @JsonNotNull - open var hot: Boolean = false, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("HotSearchItemType", "pages/mall/consumer/search.uvue", 270, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return HotSearchItemTypeReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class HotSearchItemTypeReactiveObject : HotSearchItemType, IUTSReactive { - override var __v_raw: HotSearchItemType - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: HotSearchItemType, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(keyword = __v_raw.keyword, hot = __v_raw.hot) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): HotSearchItemTypeReactiveObject { - return HotSearchItemTypeReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var keyword: String - get() { - return _tRG(__v_raw, "keyword", __v_raw.keyword, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("keyword")) { - return - } - val oldValue = __v_raw.keyword - __v_raw.keyword = value - _tRS(__v_raw, "keyword", oldValue, value) - } - override var hot: Boolean - get() { - return _tRG(__v_raw, "hot", __v_raw.hot, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("hot")) { - return - } - val oldValue = __v_raw.hot - __v_raw.hot = value - _tRS(__v_raw, "hot", oldValue, value) - } -} -open class GuessItemType ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var name: String, - @JsonNotNull - open var price: Number, - @JsonNotNull - open var image: String, - @JsonNotNull - open var sales: Number, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("GuessItemType", "pages/mall/consumer/search.uvue", 275, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return GuessItemTypeReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class GuessItemTypeReactiveObject : GuessItemType, IUTSReactive { - override var __v_raw: GuessItemType - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: GuessItemType, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, name = __v_raw.name, price = __v_raw.price, image = __v_raw.image, sales = __v_raw.sales) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): GuessItemTypeReactiveObject { - return GuessItemTypeReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var name: String - get() { - return _tRG(__v_raw, "name", __v_raw.name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("name")) { - return - } - val oldValue = __v_raw.name - __v_raw.name = value - _tRS(__v_raw, "name", oldValue, value) - } - override var price: Number - get() { - return _tRG(__v_raw, "price", __v_raw.price, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("price")) { - return - } - val oldValue = __v_raw.price - __v_raw.price = value - _tRS(__v_raw, "price", oldValue, value) - } - override var image: String - get() { - return _tRG(__v_raw, "image", __v_raw.image, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("image")) { - return - } - val oldValue = __v_raw.image - __v_raw.image = value - _tRS(__v_raw, "image", oldValue, value) - } - override var sales: Number - get() { - return _tRG(__v_raw, "sales", __v_raw.sales, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("sales")) { - return - } - val oldValue = __v_raw.sales - __v_raw.sales = value - _tRS(__v_raw, "sales", oldValue, value) - } -} -open class SearchResultType ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var name: String, - @JsonNotNull - open var image: String, - @JsonNotNull - open var price: Number, - @JsonNotNull - open var specification: String, - @JsonNotNull - open var tag: String, - @JsonNotNull - open var sales: Number, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("SearchResultType", "pages/mall/consumer/search.uvue", 283, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return SearchResultTypeReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class SearchResultTypeReactiveObject : SearchResultType, IUTSReactive { - override var __v_raw: SearchResultType - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: SearchResultType, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, name = __v_raw.name, image = __v_raw.image, price = __v_raw.price, specification = __v_raw.specification, tag = __v_raw.tag, sales = __v_raw.sales) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): SearchResultTypeReactiveObject { - return SearchResultTypeReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var name: String - get() { - return _tRG(__v_raw, "name", __v_raw.name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("name")) { - return - } - val oldValue = __v_raw.name - __v_raw.name = value - _tRS(__v_raw, "name", oldValue, value) - } - override var image: String - get() { - return _tRG(__v_raw, "image", __v_raw.image, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("image")) { - return - } - val oldValue = __v_raw.image - __v_raw.image = value - _tRS(__v_raw, "image", oldValue, value) - } - override var price: Number - get() { - return _tRG(__v_raw, "price", __v_raw.price, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("price")) { - return - } - val oldValue = __v_raw.price - __v_raw.price = value - _tRS(__v_raw, "price", oldValue, value) - } - override var specification: String - get() { - return _tRG(__v_raw, "specification", __v_raw.specification, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("specification")) { - return - } - val oldValue = __v_raw.specification - __v_raw.specification = value - _tRS(__v_raw, "specification", oldValue, value) - } - override var tag: String - get() { - return _tRG(__v_raw, "tag", __v_raw.tag, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("tag")) { - return - } - val oldValue = __v_raw.tag - __v_raw.tag = value - _tRS(__v_raw, "tag", oldValue, value) - } - override var sales: Number - get() { - return _tRG(__v_raw, "sales", __v_raw.sales, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("sales")) { - return - } - val oldValue = __v_raw.sales - __v_raw.sales = value - _tRS(__v_raw, "sales", oldValue, value) - } -} -open class ShopResultType ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var name: String, - @JsonNotNull - open var logo: String, - @JsonNotNull - open var productCount: Number, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("ShopResultType", "pages/mall/consumer/search.uvue", 293, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return ShopResultTypeReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class ShopResultTypeReactiveObject : ShopResultType, IUTSReactive { - override var __v_raw: ShopResultType - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: ShopResultType, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, name = __v_raw.name, logo = __v_raw.logo, productCount = __v_raw.productCount) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): ShopResultTypeReactiveObject { - return ShopResultTypeReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var name: String - get() { - return _tRG(__v_raw, "name", __v_raw.name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("name")) { - return - } - val oldValue = __v_raw.name - __v_raw.name = value - _tRS(__v_raw, "name", oldValue, value) - } - override var logo: String - get() { - return _tRG(__v_raw, "logo", __v_raw.logo, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("logo")) { - return - } - val oldValue = __v_raw.logo - __v_raw.logo = value - _tRS(__v_raw, "logo", oldValue, value) - } - override var productCount: Number - get() { - return _tRG(__v_raw, "productCount", __v_raw.productCount, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("productCount")) { - return - } - val oldValue = __v_raw.productCount - __v_raw.productCount = value - _tRS(__v_raw, "productCount", oldValue, value) - } -} -val GenPagesMallConsumerSearchClass = CreateVueComponent(GenPagesMallConsumerSearch::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesMallConsumerSearch.inheritAttrs, inject = GenPagesMallConsumerSearch.inject, props = GenPagesMallConsumerSearch.props, propsNeedCastKeys = GenPagesMallConsumerSearch.propsNeedCastKeys, emits = GenPagesMallConsumerSearch.emits, components = GenPagesMallConsumerSearch.components, styles = GenPagesMallConsumerSearch.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesMallConsumerSearch.setup(props as GenPagesMallConsumerSearch) - } - ) -} -, fun(instance, renderer): GenPagesMallConsumerSearch { - return GenPagesMallConsumerSearch(instance, renderer) -} -) -val GenPagesMallConsumerProductDetailClass = CreateVueComponent(GenPagesMallConsumerProductDetail::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesMallConsumerProductDetail.inheritAttrs, inject = GenPagesMallConsumerProductDetail.inject, props = GenPagesMallConsumerProductDetail.props, propsNeedCastKeys = GenPagesMallConsumerProductDetail.propsNeedCastKeys, emits = GenPagesMallConsumerProductDetail.emits, components = GenPagesMallConsumerProductDetail.components, styles = GenPagesMallConsumerProductDetail.styles) -} -, fun(instance, renderer): GenPagesMallConsumerProductDetail { - return GenPagesMallConsumerProductDetail(instance, renderer) -} -) -val GenPagesMallConsumerShopDetailClass = CreateVueComponent(GenPagesMallConsumerShopDetail::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesMallConsumerShopDetail.inheritAttrs, inject = GenPagesMallConsumerShopDetail.inject, props = GenPagesMallConsumerShopDetail.props, propsNeedCastKeys = GenPagesMallConsumerShopDetail.propsNeedCastKeys, emits = GenPagesMallConsumerShopDetail.emits, components = GenPagesMallConsumerShopDetail.components, styles = GenPagesMallConsumerShopDetail.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesMallConsumerShopDetail.setup(props as GenPagesMallConsumerShopDetail) - } - ) -} -, fun(instance, renderer): GenPagesMallConsumerShopDetail { - return GenPagesMallConsumerShopDetail(instance, renderer) -} -) -open class Coupon ( - @JsonNotNull - open var title: String, - @JsonNotNull - open var amount: String, - @JsonNotNull - open var expiry: String, - @JsonNotNull - open var id: String, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("Coupon", "pages/mall/consumer/coupons.uvue", 29, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return CouponReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class CouponReactiveObject : Coupon, IUTSReactive { - override var __v_raw: Coupon - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: Coupon, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(title = __v_raw.title, amount = __v_raw.amount, expiry = __v_raw.expiry, id = __v_raw.id) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): CouponReactiveObject { - return CouponReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var title: String - get() { - return _tRG(__v_raw, "title", __v_raw.title, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("title")) { - return - } - val oldValue = __v_raw.title - __v_raw.title = value - _tRS(__v_raw, "title", oldValue, value) - } - override var amount: String - get() { - return _tRG(__v_raw, "amount", __v_raw.amount, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("amount")) { - return - } - val oldValue = __v_raw.amount - __v_raw.amount = value - _tRS(__v_raw, "amount", oldValue, value) - } - override var expiry: String - get() { - return _tRG(__v_raw, "expiry", __v_raw.expiry, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("expiry")) { - return - } - val oldValue = __v_raw.expiry - __v_raw.expiry = value - _tRS(__v_raw, "expiry", oldValue, value) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } -} -val GenPagesMallConsumerCouponsClass = CreateVueComponent(GenPagesMallConsumerCoupons::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesMallConsumerCoupons.inheritAttrs, inject = GenPagesMallConsumerCoupons.inject, props = GenPagesMallConsumerCoupons.props, propsNeedCastKeys = GenPagesMallConsumerCoupons.propsNeedCastKeys, emits = GenPagesMallConsumerCoupons.emits, components = GenPagesMallConsumerCoupons.components, styles = GenPagesMallConsumerCoupons.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesMallConsumerCoupons.setup(props as GenPagesMallConsumerCoupons) - } - ) -} -, fun(instance, renderer): GenPagesMallConsumerCoupons { - return GenPagesMallConsumerCoupons(instance, renderer) -} -) -open class Product__1 ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var name: String, - @JsonNotNull - open var price: Number, - @JsonNotNull - open var image: String, - @JsonNotNull - open var sales: Number, - open var shopId: String? = null, - open var shopName: String? = null, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("Product", "pages/mall/consumer/favorites.uvue", 36, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return Product__1ReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class Product__1ReactiveObject : Product__1, IUTSReactive { - override var __v_raw: Product__1 - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: Product__1, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, name = __v_raw.name, price = __v_raw.price, image = __v_raw.image, sales = __v_raw.sales, shopId = __v_raw.shopId, shopName = __v_raw.shopName) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): Product__1ReactiveObject { - return Product__1ReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var name: String - get() { - return _tRG(__v_raw, "name", __v_raw.name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("name")) { - return - } - val oldValue = __v_raw.name - __v_raw.name = value - _tRS(__v_raw, "name", oldValue, value) - } - override var price: Number - get() { - return _tRG(__v_raw, "price", __v_raw.price, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("price")) { - return - } - val oldValue = __v_raw.price - __v_raw.price = value - _tRS(__v_raw, "price", oldValue, value) - } - override var image: String - get() { - return _tRG(__v_raw, "image", __v_raw.image, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("image")) { - return - } - val oldValue = __v_raw.image - __v_raw.image = value - _tRS(__v_raw, "image", oldValue, value) - } - override var sales: Number - get() { - return _tRG(__v_raw, "sales", __v_raw.sales, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("sales")) { - return - } - val oldValue = __v_raw.sales - __v_raw.sales = value - _tRS(__v_raw, "sales", oldValue, value) - } - override var shopId: String? - get() { - return _tRG(__v_raw, "shopId", __v_raw.shopId, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("shopId")) { - return - } - val oldValue = __v_raw.shopId - __v_raw.shopId = value - _tRS(__v_raw, "shopId", oldValue, value) - } - override var shopName: String? - get() { - return _tRG(__v_raw, "shopName", __v_raw.shopName, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("shopName")) { - return - } - val oldValue = __v_raw.shopName - __v_raw.shopName = value - _tRS(__v_raw, "shopName", oldValue, value) - } -} -val GenPagesMallConsumerFavoritesClass = CreateVueComponent(GenPagesMallConsumerFavorites::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesMallConsumerFavorites.inheritAttrs, inject = GenPagesMallConsumerFavorites.inject, props = GenPagesMallConsumerFavorites.props, propsNeedCastKeys = GenPagesMallConsumerFavorites.propsNeedCastKeys, emits = GenPagesMallConsumerFavorites.emits, components = GenPagesMallConsumerFavorites.components, styles = GenPagesMallConsumerFavorites.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesMallConsumerFavorites.setup(props as GenPagesMallConsumerFavorites) - } - ) -} -, fun(instance, renderer): GenPagesMallConsumerFavorites { - return GenPagesMallConsumerFavorites(instance, renderer) -} -) -open class FootprintType ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var name: String, - @JsonNotNull - open var price: Number, - @JsonNotNull - open var original_price: Number, - @JsonNotNull - open var image: String, - @JsonNotNull - open var sales: Number, - @JsonNotNull - open var shopId: String, - @JsonNotNull - open var shopName: String, - @JsonNotNull - open var viewTime: Number, - @JsonNotNull - open var selected: Boolean = false, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("FootprintType", "pages/mall/consumer/footprint.uvue", 75, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return FootprintTypeReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class FootprintTypeReactiveObject : FootprintType, IUTSReactive { - override var __v_raw: FootprintType - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: FootprintType, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, name = __v_raw.name, price = __v_raw.price, original_price = __v_raw.original_price, image = __v_raw.image, sales = __v_raw.sales, shopId = __v_raw.shopId, shopName = __v_raw.shopName, viewTime = __v_raw.viewTime, selected = __v_raw.selected) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): FootprintTypeReactiveObject { - return FootprintTypeReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var name: String - get() { - return _tRG(__v_raw, "name", __v_raw.name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("name")) { - return - } - val oldValue = __v_raw.name - __v_raw.name = value - _tRS(__v_raw, "name", oldValue, value) - } - override var price: Number - get() { - return _tRG(__v_raw, "price", __v_raw.price, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("price")) { - return - } - val oldValue = __v_raw.price - __v_raw.price = value - _tRS(__v_raw, "price", oldValue, value) - } - override var original_price: Number - get() { - return _tRG(__v_raw, "original_price", __v_raw.original_price, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("original_price")) { - return - } - val oldValue = __v_raw.original_price - __v_raw.original_price = value - _tRS(__v_raw, "original_price", oldValue, value) - } - override var image: String - get() { - return _tRG(__v_raw, "image", __v_raw.image, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("image")) { - return - } - val oldValue = __v_raw.image - __v_raw.image = value - _tRS(__v_raw, "image", oldValue, value) - } - override var sales: Number - get() { - return _tRG(__v_raw, "sales", __v_raw.sales, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("sales")) { - return - } - val oldValue = __v_raw.sales - __v_raw.sales = value - _tRS(__v_raw, "sales", oldValue, value) - } - override var shopId: String - get() { - return _tRG(__v_raw, "shopId", __v_raw.shopId, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("shopId")) { - return - } - val oldValue = __v_raw.shopId - __v_raw.shopId = value - _tRS(__v_raw, "shopId", oldValue, value) - } - override var shopName: String - get() { - return _tRG(__v_raw, "shopName", __v_raw.shopName, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("shopName")) { - return - } - val oldValue = __v_raw.shopName - __v_raw.shopName = value - _tRS(__v_raw, "shopName", oldValue, value) - } - override var viewTime: Number - get() { - return _tRG(__v_raw, "viewTime", __v_raw.viewTime, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("viewTime")) { - return - } - val oldValue = __v_raw.viewTime - __v_raw.viewTime = value - _tRS(__v_raw, "viewTime", oldValue, value) - } - override var selected: Boolean - get() { - return _tRG(__v_raw, "selected", __v_raw.selected, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("selected")) { - return - } - val oldValue = __v_raw.selected - __v_raw.selected = value - _tRS(__v_raw, "selected", oldValue, value) - } -} -open class FootprintGroup ( - @JsonNotNull - open var dateLabel: String, - @JsonNotNull - open var dateKey: String, - @JsonNotNull - open var items: UTSArray, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("FootprintGroup", "pages/mall/consumer/footprint.uvue", 88, 6) - } -} -open class FootprintSaveType ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var name: String, - @JsonNotNull - open var price: Number, - @JsonNotNull - open var original_price: Number, - @JsonNotNull - open var image: String, - @JsonNotNull - open var sales: Number, - @JsonNotNull - open var shopId: String, - @JsonNotNull - open var shopName: String, - @JsonNotNull - open var viewTime: Number, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("FootprintSaveType", "pages/mall/consumer/footprint.uvue", 94, 6) - } -} -val GenPagesMallConsumerFootprintClass = CreateVueComponent(GenPagesMallConsumerFootprint::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesMallConsumerFootprint.inheritAttrs, inject = GenPagesMallConsumerFootprint.inject, props = GenPagesMallConsumerFootprint.props, propsNeedCastKeys = GenPagesMallConsumerFootprint.propsNeedCastKeys, emits = GenPagesMallConsumerFootprint.emits, components = GenPagesMallConsumerFootprint.components, styles = GenPagesMallConsumerFootprint.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesMallConsumerFootprint.setup(props as GenPagesMallConsumerFootprint) - } - ) -} -, fun(instance, renderer): GenPagesMallConsumerFootprint { - return GenPagesMallConsumerFootprint(instance, renderer) -} -) -open class Address ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var name: String, - @JsonNotNull - open var phone: String, - @JsonNotNull - open var province: String, - @JsonNotNull - open var city: String, - @JsonNotNull - open var district: String, - @JsonNotNull - open var detail: String, - @JsonNotNull - open var isDefault: Boolean = false, - open var label: String? = null, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("Address", "pages/mall/consumer/address-list.uvue", 41, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return AddressReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class AddressReactiveObject : Address, IUTSReactive
{ - override var __v_raw: Address - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: Address, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, name = __v_raw.name, phone = __v_raw.phone, province = __v_raw.province, city = __v_raw.city, district = __v_raw.district, detail = __v_raw.detail, isDefault = __v_raw.isDefault, label = __v_raw.label) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): AddressReactiveObject { - return AddressReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var name: String - get() { - return _tRG(__v_raw, "name", __v_raw.name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("name")) { - return - } - val oldValue = __v_raw.name - __v_raw.name = value - _tRS(__v_raw, "name", oldValue, value) - } - override var phone: String - get() { - return _tRG(__v_raw, "phone", __v_raw.phone, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("phone")) { - return - } - val oldValue = __v_raw.phone - __v_raw.phone = value - _tRS(__v_raw, "phone", oldValue, value) - } - override var province: String - get() { - return _tRG(__v_raw, "province", __v_raw.province, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("province")) { - return - } - val oldValue = __v_raw.province - __v_raw.province = value - _tRS(__v_raw, "province", oldValue, value) - } - override var city: String - get() { - return _tRG(__v_raw, "city", __v_raw.city, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("city")) { - return - } - val oldValue = __v_raw.city - __v_raw.city = value - _tRS(__v_raw, "city", oldValue, value) - } - override var district: String - get() { - return _tRG(__v_raw, "district", __v_raw.district, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("district")) { - return - } - val oldValue = __v_raw.district - __v_raw.district = value - _tRS(__v_raw, "district", oldValue, value) - } - override var detail: String - get() { - return _tRG(__v_raw, "detail", __v_raw.detail, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("detail")) { - return - } - val oldValue = __v_raw.detail - __v_raw.detail = value - _tRS(__v_raw, "detail", oldValue, value) - } - override var isDefault: Boolean - get() { - return _tRG(__v_raw, "isDefault", __v_raw.isDefault, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("isDefault")) { - return - } - val oldValue = __v_raw.isDefault - __v_raw.isDefault = value - _tRS(__v_raw, "isDefault", oldValue, value) - } - override var label: String? - get() { - return _tRG(__v_raw, "label", __v_raw.label, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("label")) { - return - } - val oldValue = __v_raw.label - __v_raw.label = value - _tRS(__v_raw, "label", oldValue, value) - } -} -val GenPagesMallConsumerAddressListClass = CreateVueComponent(GenPagesMallConsumerAddressList::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesMallConsumerAddressList.inheritAttrs, inject = GenPagesMallConsumerAddressList.inject, props = GenPagesMallConsumerAddressList.props, propsNeedCastKeys = GenPagesMallConsumerAddressList.propsNeedCastKeys, emits = GenPagesMallConsumerAddressList.emits, components = GenPagesMallConsumerAddressList.components, styles = GenPagesMallConsumerAddressList.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesMallConsumerAddressList.setup(props as GenPagesMallConsumerAddressList) - } - ) -} -, fun(instance, renderer): GenPagesMallConsumerAddressList { - return GenPagesMallConsumerAddressList(instance, renderer) -} -) -open class Address__1 ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var name: String, - @JsonNotNull - open var phone: String, - @JsonNotNull - open var province: String, - @JsonNotNull - open var city: String, - @JsonNotNull - open var district: String, - @JsonNotNull - open var detail: String, - @JsonNotNull - open var isDefault: Boolean = false, - open var label: String? = null, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("Address", "pages/mall/consumer/address-edit.uvue", 60, 6) - } -} -open class AddressForm ( - @JsonNotNull - open var name: String, - @JsonNotNull - open var phone: String, - @JsonNotNull - open var detail: String, - @JsonNotNull - open var isDefault: Boolean = false, - @JsonNotNull - open var label: String, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("AddressForm", "pages/mall/consumer/address-edit.uvue", 78, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return AddressFormReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class AddressFormReactiveObject : AddressForm, IUTSReactive { - override var __v_raw: AddressForm - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: AddressForm, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(name = __v_raw.name, phone = __v_raw.phone, detail = __v_raw.detail, isDefault = __v_raw.isDefault, label = __v_raw.label) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): AddressFormReactiveObject { - return AddressFormReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var name: String - get() { - return _tRG(__v_raw, "name", __v_raw.name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("name")) { - return - } - val oldValue = __v_raw.name - __v_raw.name = value - _tRS(__v_raw, "name", oldValue, value) - } - override var phone: String - get() { - return _tRG(__v_raw, "phone", __v_raw.phone, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("phone")) { - return - } - val oldValue = __v_raw.phone - __v_raw.phone = value - _tRS(__v_raw, "phone", oldValue, value) - } - override var detail: String - get() { - return _tRG(__v_raw, "detail", __v_raw.detail, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("detail")) { - return - } - val oldValue = __v_raw.detail - __v_raw.detail = value - _tRS(__v_raw, "detail", oldValue, value) - } - override var isDefault: Boolean - get() { - return _tRG(__v_raw, "isDefault", __v_raw.isDefault, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("isDefault")) { - return - } - val oldValue = __v_raw.isDefault - __v_raw.isDefault = value - _tRS(__v_raw, "isDefault", oldValue, value) - } - override var label: String - get() { - return _tRG(__v_raw, "label", __v_raw.label, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("label")) { - return - } - val oldValue = __v_raw.label - __v_raw.label = value - _tRS(__v_raw, "label", oldValue, value) - } -} -val GenPagesMallConsumerAddressEditClass = CreateVueComponent(GenPagesMallConsumerAddressEdit::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesMallConsumerAddressEdit.inheritAttrs, inject = GenPagesMallConsumerAddressEdit.inject, props = GenPagesMallConsumerAddressEdit.props, propsNeedCastKeys = GenPagesMallConsumerAddressEdit.propsNeedCastKeys, emits = GenPagesMallConsumerAddressEdit.emits, components = GenPagesMallConsumerAddressEdit.components, styles = GenPagesMallConsumerAddressEdit.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesMallConsumerAddressEdit.setup(props as GenPagesMallConsumerAddressEdit) - } - ) -} -, fun(instance, renderer): GenPagesMallConsumerAddressEdit { - return GenPagesMallConsumerAddressEdit(instance, renderer) -} -) -open class CheckoutItemType ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var product_id: String, - @JsonNotNull - open var sku_id: String, - @JsonNotNull - open var product_name: String, - @JsonNotNull - open var product_image: String, - @JsonNotNull - open var sku_specifications: Any, - @JsonNotNull - open var price: Number, - @JsonNotNull - open var quantity: Number, - open var shop_id: String? = null, - open var shop_name: String? = null, - open var merchant_id: String? = null, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("CheckoutItemType", "pages/mall/consumer/checkout.uvue", 298, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return CheckoutItemTypeReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class CheckoutItemTypeReactiveObject : CheckoutItemType, IUTSReactive { - override var __v_raw: CheckoutItemType - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: CheckoutItemType, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, product_id = __v_raw.product_id, sku_id = __v_raw.sku_id, product_name = __v_raw.product_name, product_image = __v_raw.product_image, sku_specifications = __v_raw.sku_specifications, price = __v_raw.price, quantity = __v_raw.quantity, shop_id = __v_raw.shop_id, shop_name = __v_raw.shop_name, merchant_id = __v_raw.merchant_id) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): CheckoutItemTypeReactiveObject { - return CheckoutItemTypeReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var product_id: String - get() { - return _tRG(__v_raw, "product_id", __v_raw.product_id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("product_id")) { - return - } - val oldValue = __v_raw.product_id - __v_raw.product_id = value - _tRS(__v_raw, "product_id", oldValue, value) - } - override var sku_id: String - get() { - return _tRG(__v_raw, "sku_id", __v_raw.sku_id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("sku_id")) { - return - } - val oldValue = __v_raw.sku_id - __v_raw.sku_id = value - _tRS(__v_raw, "sku_id", oldValue, value) - } - override var product_name: String - get() { - return _tRG(__v_raw, "product_name", __v_raw.product_name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("product_name")) { - return - } - val oldValue = __v_raw.product_name - __v_raw.product_name = value - _tRS(__v_raw, "product_name", oldValue, value) - } - override var product_image: String - get() { - return _tRG(__v_raw, "product_image", __v_raw.product_image, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("product_image")) { - return - } - val oldValue = __v_raw.product_image - __v_raw.product_image = value - _tRS(__v_raw, "product_image", oldValue, value) - } - override var sku_specifications: Any - get() { - return _tRG(__v_raw, "sku_specifications", __v_raw.sku_specifications, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("sku_specifications")) { - return - } - val oldValue = __v_raw.sku_specifications - __v_raw.sku_specifications = value - _tRS(__v_raw, "sku_specifications", oldValue, value) - } - override var price: Number - get() { - return _tRG(__v_raw, "price", __v_raw.price, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("price")) { - return - } - val oldValue = __v_raw.price - __v_raw.price = value - _tRS(__v_raw, "price", oldValue, value) - } - override var quantity: Number - get() { - return _tRG(__v_raw, "quantity", __v_raw.quantity, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("quantity")) { - return - } - val oldValue = __v_raw.quantity - __v_raw.quantity = value - _tRS(__v_raw, "quantity", oldValue, value) - } - override var shop_id: String? - get() { - return _tRG(__v_raw, "shop_id", __v_raw.shop_id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("shop_id")) { - return - } - val oldValue = __v_raw.shop_id - __v_raw.shop_id = value - _tRS(__v_raw, "shop_id", oldValue, value) - } - override var shop_name: String? - get() { - return _tRG(__v_raw, "shop_name", __v_raw.shop_name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("shop_name")) { - return - } - val oldValue = __v_raw.shop_name - __v_raw.shop_name = value - _tRS(__v_raw, "shop_name", oldValue, value) - } - override var merchant_id: String? - get() { - return _tRG(__v_raw, "merchant_id", __v_raw.merchant_id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("merchant_id")) { - return - } - val oldValue = __v_raw.merchant_id - __v_raw.merchant_id = value - _tRS(__v_raw, "merchant_id", oldValue, value) - } -} -open class DeliveryOptionType ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var name: String, - @JsonNotNull - open var price: Number, - @JsonNotNull - open var description: String, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("DeliveryOptionType", "pages/mall/consumer/checkout.uvue", 312, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return DeliveryOptionTypeReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class DeliveryOptionTypeReactiveObject : DeliveryOptionType, IUTSReactive { - override var __v_raw: DeliveryOptionType - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: DeliveryOptionType, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, name = __v_raw.name, price = __v_raw.price, description = __v_raw.description) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): DeliveryOptionTypeReactiveObject { - return DeliveryOptionTypeReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var name: String - get() { - return _tRG(__v_raw, "name", __v_raw.name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("name")) { - return - } - val oldValue = __v_raw.name - __v_raw.name = value - _tRS(__v_raw, "name", oldValue, value) - } - override var price: Number - get() { - return _tRG(__v_raw, "price", __v_raw.price, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("price")) { - return - } - val oldValue = __v_raw.price - __v_raw.price = value - _tRS(__v_raw, "price", oldValue, value) - } - override var description: String - get() { - return _tRG(__v_raw, "description", __v_raw.description, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("description")) { - return - } - val oldValue = __v_raw.description - __v_raw.description = value - _tRS(__v_raw, "description", oldValue, value) - } -} -open class ShopGroupType ( - @JsonNotNull - open var shopId: String, - @JsonNotNull - open var shopName: String, - @JsonNotNull - open var merchant_id: String, - @JsonNotNull - open var items: UTSArray, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("ShopGroupType", "pages/mall/consumer/checkout.uvue", 319, 6) - } -} -open class CouponTemplateType__1 ( - @JsonNotNull - open var name: String, - @JsonNotNull - open var discount_value: Number, - @JsonNotNull - open var min_order_amount: Number, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("CouponTemplateType", "pages/mall/consumer/checkout.uvue", 326, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return CouponTemplateType__1ReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class CouponTemplateType__1ReactiveObject : CouponTemplateType__1, IUTSReactive { - override var __v_raw: CouponTemplateType__1 - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: CouponTemplateType__1, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(name = __v_raw.name, discount_value = __v_raw.discount_value, min_order_amount = __v_raw.min_order_amount) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): CouponTemplateType__1ReactiveObject { - return CouponTemplateType__1ReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var name: String - get() { - return _tRG(__v_raw, "name", __v_raw.name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("name")) { - return - } - val oldValue = __v_raw.name - __v_raw.name = value - _tRS(__v_raw, "name", oldValue, value) - } - override var discount_value: Number - get() { - return _tRG(__v_raw, "discount_value", __v_raw.discount_value, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("discount_value")) { - return - } - val oldValue = __v_raw.discount_value - __v_raw.discount_value = value - _tRS(__v_raw, "discount_value", oldValue, value) - } - override var min_order_amount: Number - get() { - return _tRG(__v_raw, "min_order_amount", __v_raw.min_order_amount, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("min_order_amount")) { - return - } - val oldValue = __v_raw.min_order_amount - __v_raw.min_order_amount = value - _tRS(__v_raw, "min_order_amount", oldValue, value) - } -} -open class UserCouponType ( - @JsonNotNull - open var id: String, - open var template: CouponTemplateType__1? = null, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("UserCouponType", "pages/mall/consumer/checkout.uvue", 332, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return UserCouponTypeReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class UserCouponTypeReactiveObject : UserCouponType, IUTSReactive { - override var __v_raw: UserCouponType - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: UserCouponType, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, template = __v_raw.template) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UserCouponTypeReactiveObject { - return UserCouponTypeReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var template: CouponTemplateType__1? - get() { - return _tRG(__v_raw, "template", __v_raw.template, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("template")) { - return - } - val oldValue = __v_raw.template - __v_raw.template = value - _tRS(__v_raw, "template", oldValue, value) - } -} -open class AddressItem ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var recipient_name: String, - @JsonNotNull - open var phone: String, - @JsonNotNull - open var province: String, - @JsonNotNull - open var city: String, - @JsonNotNull - open var district: String, - @JsonNotNull - open var detail: String, - @JsonNotNull - open var is_default: Boolean = false, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("AddressItem", "pages/mall/consumer/checkout.uvue", 337, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return AddressItemReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class AddressItemReactiveObject : AddressItem, IUTSReactive { - override var __v_raw: AddressItem - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: AddressItem, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, recipient_name = __v_raw.recipient_name, phone = __v_raw.phone, province = __v_raw.province, city = __v_raw.city, district = __v_raw.district, detail = __v_raw.detail, is_default = __v_raw.is_default) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): AddressItemReactiveObject { - return AddressItemReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var recipient_name: String - get() { - return _tRG(__v_raw, "recipient_name", __v_raw.recipient_name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("recipient_name")) { - return - } - val oldValue = __v_raw.recipient_name - __v_raw.recipient_name = value - _tRS(__v_raw, "recipient_name", oldValue, value) - } - override var phone: String - get() { - return _tRG(__v_raw, "phone", __v_raw.phone, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("phone")) { - return - } - val oldValue = __v_raw.phone - __v_raw.phone = value - _tRS(__v_raw, "phone", oldValue, value) - } - override var province: String - get() { - return _tRG(__v_raw, "province", __v_raw.province, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("province")) { - return - } - val oldValue = __v_raw.province - __v_raw.province = value - _tRS(__v_raw, "province", oldValue, value) - } - override var city: String - get() { - return _tRG(__v_raw, "city", __v_raw.city, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("city")) { - return - } - val oldValue = __v_raw.city - __v_raw.city = value - _tRS(__v_raw, "city", oldValue, value) - } - override var district: String - get() { - return _tRG(__v_raw, "district", __v_raw.district, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("district")) { - return - } - val oldValue = __v_raw.district - __v_raw.district = value - _tRS(__v_raw, "district", oldValue, value) - } - override var detail: String - get() { - return _tRG(__v_raw, "detail", __v_raw.detail, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("detail")) { - return - } - val oldValue = __v_raw.detail - __v_raw.detail = value - _tRS(__v_raw, "detail", oldValue, value) - } - override var is_default: Boolean - get() { - return _tRG(__v_raw, "is_default", __v_raw.is_default, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("is_default")) { - return - } - val oldValue = __v_raw.is_default - __v_raw.is_default = value - _tRS(__v_raw, "is_default", oldValue, value) - } -} -open class NewAddressData ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var name: String, - @JsonNotNull - open var phone: String, - @JsonNotNull - open var province: String, - @JsonNotNull - open var city: String, - @JsonNotNull - open var district: String, - @JsonNotNull - open var detail: String, - @JsonNotNull - open var isDefault: Boolean = false, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("NewAddressData", "pages/mall/consumer/checkout.uvue", 348, 6) - } -} -open class NewAddressForm ( - @JsonNotNull - open var recipient_name: String, - @JsonNotNull - open var phone: String, - @JsonNotNull - open var province: String, - @JsonNotNull - open var city: String, - @JsonNotNull - open var district: String, - @JsonNotNull - open var detail: String, - @JsonNotNull - open var is_default: Boolean = false, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("NewAddressForm", "pages/mall/consumer/checkout.uvue", 360, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return NewAddressFormReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class NewAddressFormReactiveObject : NewAddressForm, IUTSReactive { - override var __v_raw: NewAddressForm - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: NewAddressForm, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(recipient_name = __v_raw.recipient_name, phone = __v_raw.phone, province = __v_raw.province, city = __v_raw.city, district = __v_raw.district, detail = __v_raw.detail, is_default = __v_raw.is_default) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): NewAddressFormReactiveObject { - return NewAddressFormReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var recipient_name: String - get() { - return _tRG(__v_raw, "recipient_name", __v_raw.recipient_name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("recipient_name")) { - return - } - val oldValue = __v_raw.recipient_name - __v_raw.recipient_name = value - _tRS(__v_raw, "recipient_name", oldValue, value) - } - override var phone: String - get() { - return _tRG(__v_raw, "phone", __v_raw.phone, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("phone")) { - return - } - val oldValue = __v_raw.phone - __v_raw.phone = value - _tRS(__v_raw, "phone", oldValue, value) - } - override var province: String - get() { - return _tRG(__v_raw, "province", __v_raw.province, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("province")) { - return - } - val oldValue = __v_raw.province - __v_raw.province = value - _tRS(__v_raw, "province", oldValue, value) - } - override var city: String - get() { - return _tRG(__v_raw, "city", __v_raw.city, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("city")) { - return - } - val oldValue = __v_raw.city - __v_raw.city = value - _tRS(__v_raw, "city", oldValue, value) - } - override var district: String - get() { - return _tRG(__v_raw, "district", __v_raw.district, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("district")) { - return - } - val oldValue = __v_raw.district - __v_raw.district = value - _tRS(__v_raw, "district", oldValue, value) - } - override var detail: String - get() { - return _tRG(__v_raw, "detail", __v_raw.detail, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("detail")) { - return - } - val oldValue = __v_raw.detail - __v_raw.detail = value - _tRS(__v_raw, "detail", oldValue, value) - } - override var is_default: Boolean - get() { - return _tRG(__v_raw, "is_default", __v_raw.is_default, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("is_default")) { - return - } - val oldValue = __v_raw.is_default - __v_raw.is_default = value - _tRS(__v_raw, "is_default", oldValue, value) - } -} -open class MockAddress ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var name: String, - @JsonNotNull - open var phone: String, - @JsonNotNull - open var province: String, - @JsonNotNull - open var city: String, - @JsonNotNull - open var district: String, - @JsonNotNull - open var detail: String, - @JsonNotNull - open var isDefault: Boolean = false, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("MockAddress", "pages/mall/consumer/checkout.uvue", 370, 6) - } -} -val GenPagesMallConsumerCheckoutClass = CreateVueComponent(GenPagesMallConsumerCheckout::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesMallConsumerCheckout.inheritAttrs, inject = GenPagesMallConsumerCheckout.inject, props = GenPagesMallConsumerCheckout.props, propsNeedCastKeys = GenPagesMallConsumerCheckout.propsNeedCastKeys, emits = GenPagesMallConsumerCheckout.emits, components = GenPagesMallConsumerCheckout.components, styles = GenPagesMallConsumerCheckout.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesMallConsumerCheckout.setup(props as GenPagesMallConsumerCheckout) - } - ) -} -, fun(instance, renderer): GenPagesMallConsumerCheckout { - return GenPagesMallConsumerCheckout(instance, renderer) -} -) -open class PaymentMethodType ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var name: String, - @JsonNotNull - open var description: String, - @JsonNotNull - open var icon: String, - @JsonNotNull - open var enabled: Boolean = false, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("PaymentMethodType", "pages/mall/consumer/payment.uvue", 116, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return PaymentMethodTypeReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class PaymentMethodTypeReactiveObject : PaymentMethodType, IUTSReactive { - override var __v_raw: PaymentMethodType - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: PaymentMethodType, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, name = __v_raw.name, description = __v_raw.description, icon = __v_raw.icon, enabled = __v_raw.enabled) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): PaymentMethodTypeReactiveObject { - return PaymentMethodTypeReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var name: String - get() { - return _tRG(__v_raw, "name", __v_raw.name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("name")) { - return - } - val oldValue = __v_raw.name - __v_raw.name = value - _tRS(__v_raw, "name", oldValue, value) - } - override var description: String - get() { - return _tRG(__v_raw, "description", __v_raw.description, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("description")) { - return - } - val oldValue = __v_raw.description - __v_raw.description = value - _tRS(__v_raw, "description", oldValue, value) - } - override var icon: String - get() { - return _tRG(__v_raw, "icon", __v_raw.icon, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("icon")) { - return - } - val oldValue = __v_raw.icon - __v_raw.icon = value - _tRS(__v_raw, "icon", oldValue, value) - } - override var enabled: Boolean - get() { - return _tRG(__v_raw, "enabled", __v_raw.enabled, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("enabled")) { - return - } - val oldValue = __v_raw.enabled - __v_raw.enabled = value - _tRS(__v_raw, "enabled", oldValue, value) - } -} -val GenPagesMallConsumerPaymentClass = CreateVueComponent(GenPagesMallConsumerPayment::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesMallConsumerPayment.inheritAttrs, inject = GenPagesMallConsumerPayment.inject, props = GenPagesMallConsumerPayment.props, propsNeedCastKeys = GenPagesMallConsumerPayment.propsNeedCastKeys, emits = GenPagesMallConsumerPayment.emits, components = GenPagesMallConsumerPayment.components, styles = GenPagesMallConsumerPayment.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesMallConsumerPayment.setup(props as GenPagesMallConsumerPayment) - } - ) -} -, fun(instance, renderer): GenPagesMallConsumerPayment { - return GenPagesMallConsumerPayment(instance, renderer) -} -) -val GenPagesMallConsumerPaymentSuccessClass = CreateVueComponent(GenPagesMallConsumerPaymentSuccess::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesMallConsumerPaymentSuccess.inheritAttrs, inject = GenPagesMallConsumerPaymentSuccess.inject, props = GenPagesMallConsumerPaymentSuccess.props, propsNeedCastKeys = GenPagesMallConsumerPaymentSuccess.propsNeedCastKeys, emits = GenPagesMallConsumerPaymentSuccess.emits, components = GenPagesMallConsumerPaymentSuccess.components, styles = GenPagesMallConsumerPaymentSuccess.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesMallConsumerPaymentSuccess.setup(props as GenPagesMallConsumerPaymentSuccess) - } - ) -} -, fun(instance, renderer): GenPagesMallConsumerPaymentSuccess { - return GenPagesMallConsumerPaymentSuccess(instance, renderer) -} -) -open class OrderTabItem ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var name: String, - @JsonNotNull - open var count: Number, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("OrderTabItem", "pages/mall/consumer/orders.uvue", 184, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return OrderTabItemReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class OrderTabItemReactiveObject : OrderTabItem, IUTSReactive { - override var __v_raw: OrderTabItem - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: OrderTabItem, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, name = __v_raw.name, count = __v_raw.count) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): OrderTabItemReactiveObject { - return OrderTabItemReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var name: String - get() { - return _tRG(__v_raw, "name", __v_raw.name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("name")) { - return - } - val oldValue = __v_raw.name - __v_raw.name = value - _tRS(__v_raw, "name", oldValue, value) - } - override var count: Number - get() { - return _tRG(__v_raw, "count", __v_raw.count, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("count")) { - return - } - val oldValue = __v_raw.count - __v_raw.count = value - _tRS(__v_raw, "count", oldValue, value) - } -} -open class OrderProduct ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var name: String, - @JsonNotNull - open var price: Number, - @JsonNotNull - open var image: String, - @JsonNotNull - open var spec: String, - @JsonNotNull - open var quantity: Number, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("OrderProduct", "pages/mall/consumer/orders.uvue", 191, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return OrderProductReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class OrderProductReactiveObject : OrderProduct, IUTSReactive { - override var __v_raw: OrderProduct - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: OrderProduct, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, name = __v_raw.name, price = __v_raw.price, image = __v_raw.image, spec = __v_raw.spec, quantity = __v_raw.quantity) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): OrderProductReactiveObject { - return OrderProductReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var name: String - get() { - return _tRG(__v_raw, "name", __v_raw.name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("name")) { - return - } - val oldValue = __v_raw.name - __v_raw.name = value - _tRS(__v_raw, "name", oldValue, value) - } - override var price: Number - get() { - return _tRG(__v_raw, "price", __v_raw.price, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("price")) { - return - } - val oldValue = __v_raw.price - __v_raw.price = value - _tRS(__v_raw, "price", oldValue, value) - } - override var image: String - get() { - return _tRG(__v_raw, "image", __v_raw.image, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("image")) { - return - } - val oldValue = __v_raw.image - __v_raw.image = value - _tRS(__v_raw, "image", oldValue, value) - } - override var spec: String - get() { - return _tRG(__v_raw, "spec", __v_raw.spec, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("spec")) { - return - } - val oldValue = __v_raw.spec - __v_raw.spec = value - _tRS(__v_raw, "spec", oldValue, value) - } - override var quantity: Number - get() { - return _tRG(__v_raw, "quantity", __v_raw.quantity, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("quantity")) { - return - } - val oldValue = __v_raw.quantity - __v_raw.quantity = value - _tRS(__v_raw, "quantity", oldValue, value) - } -} -open class OrderItem ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var order_no: String, - @JsonNotNull - open var status: Number, - @JsonNotNull - open var create_time: String, - @JsonNotNull - open var product_amount: Number, - @JsonNotNull - open var shipping_fee: Number, - @JsonNotNull - open var total_amount: Number, - @JsonNotNull - open var products: UTSArray, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("OrderItem", "pages/mall/consumer/orders.uvue", 201, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return OrderItemReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class OrderItemReactiveObject : OrderItem, IUTSReactive { - override var __v_raw: OrderItem - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: OrderItem, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, order_no = __v_raw.order_no, status = __v_raw.status, create_time = __v_raw.create_time, product_amount = __v_raw.product_amount, shipping_fee = __v_raw.shipping_fee, total_amount = __v_raw.total_amount, products = __v_raw.products) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): OrderItemReactiveObject { - return OrderItemReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var order_no: String - get() { - return _tRG(__v_raw, "order_no", __v_raw.order_no, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("order_no")) { - return - } - val oldValue = __v_raw.order_no - __v_raw.order_no = value - _tRS(__v_raw, "order_no", oldValue, value) - } - override var status: Number - get() { - return _tRG(__v_raw, "status", __v_raw.status, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("status")) { - return - } - val oldValue = __v_raw.status - __v_raw.status = value - _tRS(__v_raw, "status", oldValue, value) - } - override var create_time: String - get() { - return _tRG(__v_raw, "create_time", __v_raw.create_time, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("create_time")) { - return - } - val oldValue = __v_raw.create_time - __v_raw.create_time = value - _tRS(__v_raw, "create_time", oldValue, value) - } - override var product_amount: Number - get() { - return _tRG(__v_raw, "product_amount", __v_raw.product_amount, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("product_amount")) { - return - } - val oldValue = __v_raw.product_amount - __v_raw.product_amount = value - _tRS(__v_raw, "product_amount", oldValue, value) - } - override var shipping_fee: Number - get() { - return _tRG(__v_raw, "shipping_fee", __v_raw.shipping_fee, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("shipping_fee")) { - return - } - val oldValue = __v_raw.shipping_fee - __v_raw.shipping_fee = value - _tRS(__v_raw, "shipping_fee", oldValue, value) - } - override var total_amount: Number - get() { - return _tRG(__v_raw, "total_amount", __v_raw.total_amount, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("total_amount")) { - return - } - val oldValue = __v_raw.total_amount - __v_raw.total_amount = value - _tRS(__v_raw, "total_amount", oldValue, value) - } - override var products: UTSArray - get() { - return _tRG(__v_raw, "products", __v_raw.products, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("products")) { - return - } - val oldValue = __v_raw.products - __v_raw.products = value - _tRS(__v_raw, "products", oldValue, value) - } -} -val GenPagesMallConsumerOrdersClass = CreateVueComponent(GenPagesMallConsumerOrders::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesMallConsumerOrders.inheritAttrs, inject = GenPagesMallConsumerOrders.inject, props = GenPagesMallConsumerOrders.props, propsNeedCastKeys = GenPagesMallConsumerOrders.propsNeedCastKeys, emits = GenPagesMallConsumerOrders.emits, components = GenPagesMallConsumerOrders.components, styles = GenPagesMallConsumerOrders.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesMallConsumerOrders.setup(props as GenPagesMallConsumerOrders) - } - ) -} -, fun(instance, renderer): GenPagesMallConsumerOrders { - return GenPagesMallConsumerOrders(instance, renderer) -} -) -open class OrderType__1 ( - @JsonNotNull - open var order_no: String, - @JsonNotNull - open var order_status: Number, - @JsonNotNull - open var total_amount: Number, - @JsonNotNull - open var product_amount: Number, - @JsonNotNull - open var shipping_fee: Number, - @JsonNotNull - open var discount_amount: Number, - @JsonNotNull - open var payment_method: String, - @JsonNotNull - open var created_at: String, - @JsonNotNull - open var paid_at: String, - @JsonNotNull - open var shipped_at: String, - @JsonNotNull - open var completed_at: String, - @JsonNotNull - open var merchant_id: String, - @JsonNotNull - open var shipping_address: Any, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("OrderType", "pages/mall/consumer/order-detail.uvue", 143, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return OrderType__1ReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class OrderType__1ReactiveObject : OrderType__1, IUTSReactive { - override var __v_raw: OrderType__1 - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: OrderType__1, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(order_no = __v_raw.order_no, order_status = __v_raw.order_status, total_amount = __v_raw.total_amount, product_amount = __v_raw.product_amount, shipping_fee = __v_raw.shipping_fee, discount_amount = __v_raw.discount_amount, payment_method = __v_raw.payment_method, created_at = __v_raw.created_at, paid_at = __v_raw.paid_at, shipped_at = __v_raw.shipped_at, completed_at = __v_raw.completed_at, merchant_id = __v_raw.merchant_id, shipping_address = __v_raw.shipping_address) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): OrderType__1ReactiveObject { - return OrderType__1ReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var order_no: String - get() { - return _tRG(__v_raw, "order_no", __v_raw.order_no, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("order_no")) { - return - } - val oldValue = __v_raw.order_no - __v_raw.order_no = value - _tRS(__v_raw, "order_no", oldValue, value) - } - override var order_status: Number - get() { - return _tRG(__v_raw, "order_status", __v_raw.order_status, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("order_status")) { - return - } - val oldValue = __v_raw.order_status - __v_raw.order_status = value - _tRS(__v_raw, "order_status", oldValue, value) - } - override var total_amount: Number - get() { - return _tRG(__v_raw, "total_amount", __v_raw.total_amount, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("total_amount")) { - return - } - val oldValue = __v_raw.total_amount - __v_raw.total_amount = value - _tRS(__v_raw, "total_amount", oldValue, value) - } - override var product_amount: Number - get() { - return _tRG(__v_raw, "product_amount", __v_raw.product_amount, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("product_amount")) { - return - } - val oldValue = __v_raw.product_amount - __v_raw.product_amount = value - _tRS(__v_raw, "product_amount", oldValue, value) - } - override var shipping_fee: Number - get() { - return _tRG(__v_raw, "shipping_fee", __v_raw.shipping_fee, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("shipping_fee")) { - return - } - val oldValue = __v_raw.shipping_fee - __v_raw.shipping_fee = value - _tRS(__v_raw, "shipping_fee", oldValue, value) - } - override var discount_amount: Number - get() { - return _tRG(__v_raw, "discount_amount", __v_raw.discount_amount, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("discount_amount")) { - return - } - val oldValue = __v_raw.discount_amount - __v_raw.discount_amount = value - _tRS(__v_raw, "discount_amount", oldValue, value) - } - override var payment_method: String - get() { - return _tRG(__v_raw, "payment_method", __v_raw.payment_method, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("payment_method")) { - return - } - val oldValue = __v_raw.payment_method - __v_raw.payment_method = value - _tRS(__v_raw, "payment_method", oldValue, value) - } - override var created_at: String - get() { - return _tRG(__v_raw, "created_at", __v_raw.created_at, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("created_at")) { - return - } - val oldValue = __v_raw.created_at - __v_raw.created_at = value - _tRS(__v_raw, "created_at", oldValue, value) - } - override var paid_at: String - get() { - return _tRG(__v_raw, "paid_at", __v_raw.paid_at, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("paid_at")) { - return - } - val oldValue = __v_raw.paid_at - __v_raw.paid_at = value - _tRS(__v_raw, "paid_at", oldValue, value) - } - override var shipped_at: String - get() { - return _tRG(__v_raw, "shipped_at", __v_raw.shipped_at, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("shipped_at")) { - return - } - val oldValue = __v_raw.shipped_at - __v_raw.shipped_at = value - _tRS(__v_raw, "shipped_at", oldValue, value) - } - override var completed_at: String - get() { - return _tRG(__v_raw, "completed_at", __v_raw.completed_at, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("completed_at")) { - return - } - val oldValue = __v_raw.completed_at - __v_raw.completed_at = value - _tRS(__v_raw, "completed_at", oldValue, value) - } - override var merchant_id: String - get() { - return _tRG(__v_raw, "merchant_id", __v_raw.merchant_id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("merchant_id")) { - return - } - val oldValue = __v_raw.merchant_id - __v_raw.merchant_id = value - _tRS(__v_raw, "merchant_id", oldValue, value) - } - override var shipping_address: Any - get() { - return _tRG(__v_raw, "shipping_address", __v_raw.shipping_address, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("shipping_address")) { - return - } - val oldValue = __v_raw.shipping_address - __v_raw.shipping_address = value - _tRS(__v_raw, "shipping_address", oldValue, value) - } -} -open class OrderItemType ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var product_id: String, - @JsonNotNull - open var product_name: String, - @JsonNotNull - open var image_url: String, - @JsonNotNull - open var price: Number, - @JsonNotNull - open var quantity: Number, - @JsonNotNull - open var specifications: Any, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("OrderItemType", "pages/mall/consumer/order-detail.uvue", 159, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return OrderItemTypeReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class OrderItemTypeReactiveObject : OrderItemType, IUTSReactive { - override var __v_raw: OrderItemType - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: OrderItemType, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, product_id = __v_raw.product_id, product_name = __v_raw.product_name, image_url = __v_raw.image_url, price = __v_raw.price, quantity = __v_raw.quantity, specifications = __v_raw.specifications) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): OrderItemTypeReactiveObject { - return OrderItemTypeReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var product_id: String - get() { - return _tRG(__v_raw, "product_id", __v_raw.product_id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("product_id")) { - return - } - val oldValue = __v_raw.product_id - __v_raw.product_id = value - _tRS(__v_raw, "product_id", oldValue, value) - } - override var product_name: String - get() { - return _tRG(__v_raw, "product_name", __v_raw.product_name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("product_name")) { - return - } - val oldValue = __v_raw.product_name - __v_raw.product_name = value - _tRS(__v_raw, "product_name", oldValue, value) - } - override var image_url: String - get() { - return _tRG(__v_raw, "image_url", __v_raw.image_url, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("image_url")) { - return - } - val oldValue = __v_raw.image_url - __v_raw.image_url = value - _tRS(__v_raw, "image_url", oldValue, value) - } - override var price: Number - get() { - return _tRG(__v_raw, "price", __v_raw.price, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("price")) { - return - } - val oldValue = __v_raw.price - __v_raw.price = value - _tRS(__v_raw, "price", oldValue, value) - } - override var quantity: Number - get() { - return _tRG(__v_raw, "quantity", __v_raw.quantity, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("quantity")) { - return - } - val oldValue = __v_raw.quantity - __v_raw.quantity = value - _tRS(__v_raw, "quantity", oldValue, value) - } - override var specifications: Any - get() { - return _tRG(__v_raw, "specifications", __v_raw.specifications, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("specifications")) { - return - } - val oldValue = __v_raw.specifications - __v_raw.specifications = value - _tRS(__v_raw, "specifications", oldValue, value) - } -} -open class AddressType ( - @JsonNotNull - open var name: String, - @JsonNotNull - open var phone: String, - @JsonNotNull - open var province: String, - @JsonNotNull - open var city: String, - @JsonNotNull - open var district: String, - @JsonNotNull - open var detail: String, - @JsonNotNull - open var address: String, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("AddressType", "pages/mall/consumer/order-detail.uvue", 169, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return AddressTypeReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class AddressTypeReactiveObject : AddressType, IUTSReactive { - override var __v_raw: AddressType - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: AddressType, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(name = __v_raw.name, phone = __v_raw.phone, province = __v_raw.province, city = __v_raw.city, district = __v_raw.district, detail = __v_raw.detail, address = __v_raw.address) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): AddressTypeReactiveObject { - return AddressTypeReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var name: String - get() { - return _tRG(__v_raw, "name", __v_raw.name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("name")) { - return - } - val oldValue = __v_raw.name - __v_raw.name = value - _tRS(__v_raw, "name", oldValue, value) - } - override var phone: String - get() { - return _tRG(__v_raw, "phone", __v_raw.phone, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("phone")) { - return - } - val oldValue = __v_raw.phone - __v_raw.phone = value - _tRS(__v_raw, "phone", oldValue, value) - } - override var province: String - get() { - return _tRG(__v_raw, "province", __v_raw.province, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("province")) { - return - } - val oldValue = __v_raw.province - __v_raw.province = value - _tRS(__v_raw, "province", oldValue, value) - } - override var city: String - get() { - return _tRG(__v_raw, "city", __v_raw.city, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("city")) { - return - } - val oldValue = __v_raw.city - __v_raw.city = value - _tRS(__v_raw, "city", oldValue, value) - } - override var district: String - get() { - return _tRG(__v_raw, "district", __v_raw.district, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("district")) { - return - } - val oldValue = __v_raw.district - __v_raw.district = value - _tRS(__v_raw, "district", oldValue, value) - } - override var detail: String - get() { - return _tRG(__v_raw, "detail", __v_raw.detail, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("detail")) { - return - } - val oldValue = __v_raw.detail - __v_raw.detail = value - _tRS(__v_raw, "detail", oldValue, value) - } - override var address: String - get() { - return _tRG(__v_raw, "address", __v_raw.address, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("address")) { - return - } - val oldValue = __v_raw.address - __v_raw.address = value - _tRS(__v_raw, "address", oldValue, value) - } -} -open class DeliveryInfoType ( - @JsonNotNull - open var tracking_no: String, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("DeliveryInfoType", "pages/mall/consumer/order-detail.uvue", 179, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return DeliveryInfoTypeReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class DeliveryInfoTypeReactiveObject : DeliveryInfoType, IUTSReactive { - override var __v_raw: DeliveryInfoType - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: DeliveryInfoType, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(tracking_no = __v_raw.tracking_no) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): DeliveryInfoTypeReactiveObject { - return DeliveryInfoTypeReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var tracking_no: String - get() { - return _tRG(__v_raw, "tracking_no", __v_raw.tracking_no, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("tracking_no")) { - return - } - val oldValue = __v_raw.tracking_no - __v_raw.tracking_no = value - _tRS(__v_raw, "tracking_no", oldValue, value) - } -} -val GenPagesMallConsumerOrderDetailClass = CreateVueComponent(GenPagesMallConsumerOrderDetail::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesMallConsumerOrderDetail.inheritAttrs, inject = GenPagesMallConsumerOrderDetail.inject, props = GenPagesMallConsumerOrderDetail.props, propsNeedCastKeys = GenPagesMallConsumerOrderDetail.propsNeedCastKeys, emits = GenPagesMallConsumerOrderDetail.emits, components = GenPagesMallConsumerOrderDetail.components, styles = GenPagesMallConsumerOrderDetail.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesMallConsumerOrderDetail.setup(props as GenPagesMallConsumerOrderDetail) - } - ) -} -, fun(instance, renderer): GenPagesMallConsumerOrderDetail { - return GenPagesMallConsumerOrderDetail(instance, renderer) -} -) -open class TrackItem ( - @JsonNotNull - open var desc: String, - @JsonNotNull - open var time: String, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("TrackItem", "pages/mall/consumer/logistics.uvue", 46, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return TrackItemReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class TrackItemReactiveObject : TrackItem, IUTSReactive { - override var __v_raw: TrackItem - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: TrackItem, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(desc = __v_raw.desc, time = __v_raw.time) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): TrackItemReactiveObject { - return TrackItemReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var desc: String - get() { - return _tRG(__v_raw, "desc", __v_raw.desc, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("desc")) { - return - } - val oldValue = __v_raw.desc - __v_raw.desc = value - _tRS(__v_raw, "desc", oldValue, value) - } - override var time: String - get() { - return _tRG(__v_raw, "time", __v_raw.time, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("time")) { - return - } - val oldValue = __v_raw.time - __v_raw.time = value - _tRS(__v_raw, "time", oldValue, value) - } -} -val GenPagesMallConsumerLogisticsClass = CreateVueComponent(GenPagesMallConsumerLogistics::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesMallConsumerLogistics.inheritAttrs, inject = GenPagesMallConsumerLogistics.inject, props = GenPagesMallConsumerLogistics.props, propsNeedCastKeys = GenPagesMallConsumerLogistics.propsNeedCastKeys, emits = GenPagesMallConsumerLogistics.emits, components = GenPagesMallConsumerLogistics.components, styles = GenPagesMallConsumerLogistics.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesMallConsumerLogistics.setup(props as GenPagesMallConsumerLogistics) - } - ) -} -, fun(instance, renderer): GenPagesMallConsumerLogistics { - return GenPagesMallConsumerLogistics(instance, renderer) -} -) -open class OrderType__2 ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var order_no: String, - @JsonNotNull - open var created_at: String, - @JsonNotNull - open var merchant_id: String, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("OrderType", "pages/mall/consumer/review.uvue", 151, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return OrderType__2ReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class OrderType__2ReactiveObject : OrderType__2, IUTSReactive { - override var __v_raw: OrderType__2 - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: OrderType__2, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, order_no = __v_raw.order_no, created_at = __v_raw.created_at, merchant_id = __v_raw.merchant_id) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): OrderType__2ReactiveObject { - return OrderType__2ReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var order_no: String - get() { - return _tRG(__v_raw, "order_no", __v_raw.order_no, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("order_no")) { - return - } - val oldValue = __v_raw.order_no - __v_raw.order_no = value - _tRS(__v_raw, "order_no", oldValue, value) - } - override var created_at: String - get() { - return _tRG(__v_raw, "created_at", __v_raw.created_at, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("created_at")) { - return - } - val oldValue = __v_raw.created_at - __v_raw.created_at = value - _tRS(__v_raw, "created_at", oldValue, value) - } - override var merchant_id: String - get() { - return _tRG(__v_raw, "merchant_id", __v_raw.merchant_id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("merchant_id")) { - return - } - val oldValue = __v_raw.merchant_id - __v_raw.merchant_id = value - _tRS(__v_raw, "merchant_id", oldValue, value) - } -} -open class OrderItemType__1 ( - @JsonNotNull - open var id: Number, - @JsonNotNull - open var order_id: Number, - @JsonNotNull - open var product_id: Number, - @JsonNotNull - open var product_name: String, - @JsonNotNull - open var product_image: String, - open var sku_specifications: Any? = null, - @JsonNotNull - open var price: Number, - @JsonNotNull - open var quantity: Number, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("OrderItemType", "pages/mall/consumer/review.uvue", 158, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return OrderItemType__1ReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class OrderItemType__1ReactiveObject : OrderItemType__1, IUTSReactive { - override var __v_raw: OrderItemType__1 - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: OrderItemType__1, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, order_id = __v_raw.order_id, product_id = __v_raw.product_id, product_name = __v_raw.product_name, product_image = __v_raw.product_image, sku_specifications = __v_raw.sku_specifications, price = __v_raw.price, quantity = __v_raw.quantity) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): OrderItemType__1ReactiveObject { - return OrderItemType__1ReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: Number - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var order_id: Number - get() { - return _tRG(__v_raw, "order_id", __v_raw.order_id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("order_id")) { - return - } - val oldValue = __v_raw.order_id - __v_raw.order_id = value - _tRS(__v_raw, "order_id", oldValue, value) - } - override var product_id: Number - get() { - return _tRG(__v_raw, "product_id", __v_raw.product_id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("product_id")) { - return - } - val oldValue = __v_raw.product_id - __v_raw.product_id = value - _tRS(__v_raw, "product_id", oldValue, value) - } - override var product_name: String - get() { - return _tRG(__v_raw, "product_name", __v_raw.product_name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("product_name")) { - return - } - val oldValue = __v_raw.product_name - __v_raw.product_name = value - _tRS(__v_raw, "product_name", oldValue, value) - } - override var product_image: String - get() { - return _tRG(__v_raw, "product_image", __v_raw.product_image, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("product_image")) { - return - } - val oldValue = __v_raw.product_image - __v_raw.product_image = value - _tRS(__v_raw, "product_image", oldValue, value) - } - override var sku_specifications: Any? - get() { - return _tRG(__v_raw, "sku_specifications", __v_raw.sku_specifications, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("sku_specifications")) { - return - } - val oldValue = __v_raw.sku_specifications - __v_raw.sku_specifications = value - _tRS(__v_raw, "sku_specifications", oldValue, value) - } - override var price: Number - get() { - return _tRG(__v_raw, "price", __v_raw.price, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("price")) { - return - } - val oldValue = __v_raw.price - __v_raw.price = value - _tRS(__v_raw, "price", oldValue, value) - } - override var quantity: Number - get() { - return _tRG(__v_raw, "quantity", __v_raw.quantity, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("quantity")) { - return - } - val oldValue = __v_raw.quantity - __v_raw.quantity = value - _tRS(__v_raw, "quantity", oldValue, value) - } -} -open class MerchantRatingType ( - @JsonNotNull - open var description: Number, - @JsonNotNull - open var logistics: Number, - @JsonNotNull - open var service: Number, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("MerchantRatingType", "pages/mall/consumer/review.uvue", 169, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return MerchantRatingTypeReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class MerchantRatingTypeReactiveObject : MerchantRatingType, IUTSReactive { - override var __v_raw: MerchantRatingType - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: MerchantRatingType, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(description = __v_raw.description, logistics = __v_raw.logistics, service = __v_raw.service) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): MerchantRatingTypeReactiveObject { - return MerchantRatingTypeReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var description: Number - get() { - return _tRG(__v_raw, "description", __v_raw.description, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("description")) { - return - } - val oldValue = __v_raw.description - __v_raw.description = value - _tRS(__v_raw, "description", oldValue, value) - } - override var logistics: Number - get() { - return _tRG(__v_raw, "logistics", __v_raw.logistics, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("logistics")) { - return - } - val oldValue = __v_raw.logistics - __v_raw.logistics = value - _tRS(__v_raw, "logistics", oldValue, value) - } - override var service: Number - get() { - return _tRG(__v_raw, "service", __v_raw.service, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("service")) { - return - } - val oldValue = __v_raw.service - __v_raw.service = value - _tRS(__v_raw, "service", oldValue, value) - } -} -open class MerchantType__1 ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var shop_name: String, - @JsonNotNull - open var rating: Number, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("MerchantType", "pages/mall/consumer/review.uvue", 175, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return MerchantType__1ReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class MerchantType__1ReactiveObject : MerchantType__1, IUTSReactive { - override var __v_raw: MerchantType__1 - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: MerchantType__1, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, shop_name = __v_raw.shop_name, rating = __v_raw.rating) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): MerchantType__1ReactiveObject { - return MerchantType__1ReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var shop_name: String - get() { - return _tRG(__v_raw, "shop_name", __v_raw.shop_name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("shop_name")) { - return - } - val oldValue = __v_raw.shop_name - __v_raw.shop_name = value - _tRS(__v_raw, "shop_name", oldValue, value) - } - override var rating: Number - get() { - return _tRG(__v_raw, "rating", __v_raw.rating, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("rating")) { - return - } - val oldValue = __v_raw.rating - __v_raw.rating = value - _tRS(__v_raw, "rating", oldValue, value) - } -} -val GenPagesMallConsumerReviewClass = CreateVueComponent(GenPagesMallConsumerReview::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesMallConsumerReview.inheritAttrs, inject = GenPagesMallConsumerReview.inject, props = GenPagesMallConsumerReview.props, propsNeedCastKeys = GenPagesMallConsumerReview.propsNeedCastKeys, emits = GenPagesMallConsumerReview.emits, components = GenPagesMallConsumerReview.components, styles = GenPagesMallConsumerReview.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesMallConsumerReview.setup(props as GenPagesMallConsumerReview) - } - ) -} -, fun(instance, renderer): GenPagesMallConsumerReview { - return GenPagesMallConsumerReview(instance, renderer) -} -) -open class RefundStatusHistoryItem ( - @JsonNotNull - open var status: Number, - @JsonNotNull - open var remark: String, - @JsonNotNull - open var created_at: String, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("RefundStatusHistoryItem", "pages/mall/consumer/refund.uvue", 106, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return RefundStatusHistoryItemReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class RefundStatusHistoryItemReactiveObject : RefundStatusHistoryItem, IUTSReactive { - override var __v_raw: RefundStatusHistoryItem - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: RefundStatusHistoryItem, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(status = __v_raw.status, remark = __v_raw.remark, created_at = __v_raw.created_at) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): RefundStatusHistoryItemReactiveObject { - return RefundStatusHistoryItemReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var status: Number - get() { - return _tRG(__v_raw, "status", __v_raw.status, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("status")) { - return - } - val oldValue = __v_raw.status - __v_raw.status = value - _tRS(__v_raw, "status", oldValue, value) - } - override var remark: String - get() { - return _tRG(__v_raw, "remark", __v_raw.remark, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("remark")) { - return - } - val oldValue = __v_raw.remark - __v_raw.remark = value - _tRS(__v_raw, "remark", oldValue, value) - } - override var created_at: String - get() { - return _tRG(__v_raw, "created_at", __v_raw.created_at, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("created_at")) { - return - } - val oldValue = __v_raw.created_at - __v_raw.created_at = value - _tRS(__v_raw, "created_at", oldValue, value) - } -} -open class RefundProductInfo ( - @JsonNotNull - open var images: UTSArray, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("RefundProductInfo", "pages/mall/consumer/refund.uvue", 112, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return RefundProductInfoReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class RefundProductInfoReactiveObject : RefundProductInfo, IUTSReactive { - override var __v_raw: RefundProductInfo - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: RefundProductInfo, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(images = __v_raw.images) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): RefundProductInfoReactiveObject { - return RefundProductInfoReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var images: UTSArray - get() { - return _tRG(__v_raw, "images", __v_raw.images, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("images")) { - return - } - val oldValue = __v_raw.images - __v_raw.images = value - _tRS(__v_raw, "images", oldValue, value) - } -} -open class RefundOrderItem ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var product_name: String, - open var sku_specifications: Any? = null, - @JsonNotNull - open var price: Number, - @JsonNotNull - open var quantity: Number, - open var product: RefundProductInfo? = null, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("RefundOrderItem", "pages/mall/consumer/refund.uvue", 116, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return RefundOrderItemReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class RefundOrderItemReactiveObject : RefundOrderItem, IUTSReactive { - override var __v_raw: RefundOrderItem - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: RefundOrderItem, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, product_name = __v_raw.product_name, sku_specifications = __v_raw.sku_specifications, price = __v_raw.price, quantity = __v_raw.quantity, product = __v_raw.product) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): RefundOrderItemReactiveObject { - return RefundOrderItemReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var product_name: String - get() { - return _tRG(__v_raw, "product_name", __v_raw.product_name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("product_name")) { - return - } - val oldValue = __v_raw.product_name - __v_raw.product_name = value - _tRS(__v_raw, "product_name", oldValue, value) - } - override var sku_specifications: Any? - get() { - return _tRG(__v_raw, "sku_specifications", __v_raw.sku_specifications, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("sku_specifications")) { - return - } - val oldValue = __v_raw.sku_specifications - __v_raw.sku_specifications = value - _tRS(__v_raw, "sku_specifications", oldValue, value) - } - override var price: Number - get() { - return _tRG(__v_raw, "price", __v_raw.price, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("price")) { - return - } - val oldValue = __v_raw.price - __v_raw.price = value - _tRS(__v_raw, "price", oldValue, value) - } - override var quantity: Number - get() { - return _tRG(__v_raw, "quantity", __v_raw.quantity, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("quantity")) { - return - } - val oldValue = __v_raw.quantity - __v_raw.quantity = value - _tRS(__v_raw, "quantity", oldValue, value) - } - override var product: RefundProductInfo? - get() { - return _tRG(__v_raw, "product", __v_raw.product, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("product")) { - return - } - val oldValue = __v_raw.product - __v_raw.product = value - _tRS(__v_raw, "product", oldValue, value) - } -} -open class RefundOrderInfo ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var order_no: String, - @JsonNotNull - open var created_at: String, - @JsonNotNull - open var order_items: UTSArray, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("RefundOrderInfo", "pages/mall/consumer/refund.uvue", 125, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return RefundOrderInfoReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class RefundOrderInfoReactiveObject : RefundOrderInfo, IUTSReactive { - override var __v_raw: RefundOrderInfo - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: RefundOrderInfo, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, order_no = __v_raw.order_no, created_at = __v_raw.created_at, order_items = __v_raw.order_items) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): RefundOrderInfoReactiveObject { - return RefundOrderInfoReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var order_no: String - get() { - return _tRG(__v_raw, "order_no", __v_raw.order_no, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("order_no")) { - return - } - val oldValue = __v_raw.order_no - __v_raw.order_no = value - _tRS(__v_raw, "order_no", oldValue, value) - } - override var created_at: String - get() { - return _tRG(__v_raw, "created_at", __v_raw.created_at, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("created_at")) { - return - } - val oldValue = __v_raw.created_at - __v_raw.created_at = value - _tRS(__v_raw, "created_at", oldValue, value) - } - override var order_items: UTSArray - get() { - return _tRG(__v_raw, "order_items", __v_raw.order_items, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("order_items")) { - return - } - val oldValue = __v_raw.order_items - __v_raw.order_items = value - _tRS(__v_raw, "order_items", oldValue, value) - } -} -open class RefundType ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var user_id: String, - @JsonNotNull - open var order_id: String, - @JsonNotNull - open var refund_no: String, - @JsonNotNull - open var refund_type: Number, - @JsonNotNull - open var refund_reason: String, - @JsonNotNull - open var refund_amount: Number, - @JsonNotNull - open var status: Number, - open var status_history: UTSArray? = null, - @JsonNotNull - open var created_at: String, - open var order: RefundOrderInfo? = null, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("RefundType", "pages/mall/consumer/refund.uvue", 132, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return RefundTypeReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class RefundTypeReactiveObject : RefundType, IUTSReactive { - override var __v_raw: RefundType - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: RefundType, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, user_id = __v_raw.user_id, order_id = __v_raw.order_id, refund_no = __v_raw.refund_no, refund_type = __v_raw.refund_type, refund_reason = __v_raw.refund_reason, refund_amount = __v_raw.refund_amount, status = __v_raw.status, status_history = __v_raw.status_history, created_at = __v_raw.created_at, order = __v_raw.order) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): RefundTypeReactiveObject { - return RefundTypeReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var user_id: String - get() { - return _tRG(__v_raw, "user_id", __v_raw.user_id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("user_id")) { - return - } - val oldValue = __v_raw.user_id - __v_raw.user_id = value - _tRS(__v_raw, "user_id", oldValue, value) - } - override var order_id: String - get() { - return _tRG(__v_raw, "order_id", __v_raw.order_id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("order_id")) { - return - } - val oldValue = __v_raw.order_id - __v_raw.order_id = value - _tRS(__v_raw, "order_id", oldValue, value) - } - override var refund_no: String - get() { - return _tRG(__v_raw, "refund_no", __v_raw.refund_no, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("refund_no")) { - return - } - val oldValue = __v_raw.refund_no - __v_raw.refund_no = value - _tRS(__v_raw, "refund_no", oldValue, value) - } - override var refund_type: Number - get() { - return _tRG(__v_raw, "refund_type", __v_raw.refund_type, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("refund_type")) { - return - } - val oldValue = __v_raw.refund_type - __v_raw.refund_type = value - _tRS(__v_raw, "refund_type", oldValue, value) - } - override var refund_reason: String - get() { - return _tRG(__v_raw, "refund_reason", __v_raw.refund_reason, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("refund_reason")) { - return - } - val oldValue = __v_raw.refund_reason - __v_raw.refund_reason = value - _tRS(__v_raw, "refund_reason", oldValue, value) - } - override var refund_amount: Number - get() { - return _tRG(__v_raw, "refund_amount", __v_raw.refund_amount, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("refund_amount")) { - return - } - val oldValue = __v_raw.refund_amount - __v_raw.refund_amount = value - _tRS(__v_raw, "refund_amount", oldValue, value) - } - override var status: Number - get() { - return _tRG(__v_raw, "status", __v_raw.status, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("status")) { - return - } - val oldValue = __v_raw.status - __v_raw.status = value - _tRS(__v_raw, "status", oldValue, value) - } - override var status_history: UTSArray? - get() { - return _tRG(__v_raw, "status_history", __v_raw.status_history, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("status_history")) { - return - } - val oldValue = __v_raw.status_history - __v_raw.status_history = value - _tRS(__v_raw, "status_history", oldValue, value) - } - override var created_at: String - get() { - return _tRG(__v_raw, "created_at", __v_raw.created_at, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("created_at")) { - return - } - val oldValue = __v_raw.created_at - __v_raw.created_at = value - _tRS(__v_raw, "created_at", oldValue, value) - } - override var order: RefundOrderInfo? - get() { - return _tRG(__v_raw, "order", __v_raw.order, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("order")) { - return - } - val oldValue = __v_raw.order - __v_raw.order = value - _tRS(__v_raw, "order", oldValue, value) - } -} -open class TabCountsType ( - @JsonNotNull - open var processing: Number, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("TabCountsType", "pages/mall/consumer/refund.uvue", 146, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return TabCountsTypeReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class TabCountsTypeReactiveObject : TabCountsType, IUTSReactive { - override var __v_raw: TabCountsType - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: TabCountsType, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(processing = __v_raw.processing) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): TabCountsTypeReactiveObject { - return TabCountsTypeReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var processing: Number - get() { - return _tRG(__v_raw, "processing", __v_raw.processing, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("processing")) { - return - } - val oldValue = __v_raw.processing - __v_raw.processing = value - _tRS(__v_raw, "processing", oldValue, value) - } -} -open class TimelineStepType ( - @JsonNotNull - open var status: Number, - @JsonNotNull - open var title: String, - @JsonNotNull - open var time: String, - @JsonNotNull - open var active: Boolean = false, - @JsonNotNull - open var completed: Boolean = false, - @JsonNotNull - open var desc: String, -) : UTSObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("TimelineStepType", "pages/mall/consumer/refund.uvue", 346, 6) - } -} -val GenPagesMallConsumerRefundClass = CreateVueComponent(GenPagesMallConsumerRefund::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesMallConsumerRefund.inheritAttrs, inject = GenPagesMallConsumerRefund.inject, props = GenPagesMallConsumerRefund.props, propsNeedCastKeys = GenPagesMallConsumerRefund.propsNeedCastKeys, emits = GenPagesMallConsumerRefund.emits, components = GenPagesMallConsumerRefund.components, styles = GenPagesMallConsumerRefund.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesMallConsumerRefund.setup(props as GenPagesMallConsumerRefund) - } - ) -} -, fun(instance, renderer): GenPagesMallConsumerRefund { - return GenPagesMallConsumerRefund(instance, renderer) -} -) -val GenPagesMallConsumerApplyRefundClass = CreateVueComponent(GenPagesMallConsumerApplyRefund::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesMallConsumerApplyRefund.inheritAttrs, inject = GenPagesMallConsumerApplyRefund.inject, props = GenPagesMallConsumerApplyRefund.props, propsNeedCastKeys = GenPagesMallConsumerApplyRefund.propsNeedCastKeys, emits = GenPagesMallConsumerApplyRefund.emits, components = GenPagesMallConsumerApplyRefund.components, styles = GenPagesMallConsumerApplyRefund.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesMallConsumerApplyRefund.setup(props as GenPagesMallConsumerApplyRefund) - } - ) -} -, fun(instance, renderer): GenPagesMallConsumerApplyRefund { - return GenPagesMallConsumerApplyRefund(instance, renderer) -} -) -val GenPagesMallConsumerRefundReviewClass = CreateVueComponent(GenPagesMallConsumerRefundReview::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesMallConsumerRefundReview.inheritAttrs, inject = GenPagesMallConsumerRefundReview.inject, props = GenPagesMallConsumerRefundReview.props, propsNeedCastKeys = GenPagesMallConsumerRefundReview.propsNeedCastKeys, emits = GenPagesMallConsumerRefundReview.emits, components = GenPagesMallConsumerRefundReview.components, styles = GenPagesMallConsumerRefundReview.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesMallConsumerRefundReview.setup(props as GenPagesMallConsumerRefundReview) - } - ) -} -, fun(instance, renderer): GenPagesMallConsumerRefundReview { - return GenPagesMallConsumerRefundReview(instance, renderer) -} -) -open class UiChatMessage ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var type: String, - @JsonNotNull - open var content: String, - @JsonNotNull - open var time: String, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("UiChatMessage", "pages/mall/consumer/chat.uvue", 128, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return UiChatMessageReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class UiChatMessageReactiveObject : UiChatMessage, IUTSReactive { - override var __v_raw: UiChatMessage - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: UiChatMessage, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, type = __v_raw.type, content = __v_raw.content, time = __v_raw.time) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UiChatMessageReactiveObject { - return UiChatMessageReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var type: String - get() { - return _tRG(__v_raw, "type", __v_raw.type, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("type")) { - return - } - val oldValue = __v_raw.type - __v_raw.type = value - _tRS(__v_raw, "type", oldValue, value) - } - override var content: String - get() { - return _tRG(__v_raw, "content", __v_raw.content, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("content")) { - return - } - val oldValue = __v_raw.content - __v_raw.content = value - _tRS(__v_raw, "content", oldValue, value) - } - override var time: String - get() { - return _tRG(__v_raw, "time", __v_raw.time, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("time")) { - return - } - val oldValue = __v_raw.time - __v_raw.time = value - _tRS(__v_raw, "time", oldValue, value) - } -} -val GenPagesMallConsumerChatClass = CreateVueComponent(GenPagesMallConsumerChat::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesMallConsumerChat.inheritAttrs, inject = GenPagesMallConsumerChat.inject, props = GenPagesMallConsumerChat.props, propsNeedCastKeys = GenPagesMallConsumerChat.propsNeedCastKeys, emits = GenPagesMallConsumerChat.emits, components = GenPagesMallConsumerChat.components, styles = GenPagesMallConsumerChat.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesMallConsumerChat.setup(props as GenPagesMallConsumerChat) - } - ) -} -, fun(instance, renderer): GenPagesMallConsumerChat { - return GenPagesMallConsumerChat(instance, renderer) -} -) -open class FollowedShop ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var merchant_id: String, - @JsonNotNull - open var shop_name: String, - open var shop_logo: String? = null, - open var description: String? = null, - @JsonNotNull - open var rating_avg: Number, - @JsonNotNull - open var total_sales: Number, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("FollowedShop", "pages/mall/consumer/subscription/followed-shops.uvue", 37, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return FollowedShopReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class FollowedShopReactiveObject : FollowedShop, IUTSReactive { - override var __v_raw: FollowedShop - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: FollowedShop, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, merchant_id = __v_raw.merchant_id, shop_name = __v_raw.shop_name, shop_logo = __v_raw.shop_logo, description = __v_raw.description, rating_avg = __v_raw.rating_avg, total_sales = __v_raw.total_sales) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): FollowedShopReactiveObject { - return FollowedShopReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var merchant_id: String - get() { - return _tRG(__v_raw, "merchant_id", __v_raw.merchant_id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("merchant_id")) { - return - } - val oldValue = __v_raw.merchant_id - __v_raw.merchant_id = value - _tRS(__v_raw, "merchant_id", oldValue, value) - } - override var shop_name: String - get() { - return _tRG(__v_raw, "shop_name", __v_raw.shop_name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("shop_name")) { - return - } - val oldValue = __v_raw.shop_name - __v_raw.shop_name = value - _tRS(__v_raw, "shop_name", oldValue, value) - } - override var shop_logo: String? - get() { - return _tRG(__v_raw, "shop_logo", __v_raw.shop_logo, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("shop_logo")) { - return - } - val oldValue = __v_raw.shop_logo - __v_raw.shop_logo = value - _tRS(__v_raw, "shop_logo", oldValue, value) - } - override var description: String? - get() { - return _tRG(__v_raw, "description", __v_raw.description, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("description")) { - return - } - val oldValue = __v_raw.description - __v_raw.description = value - _tRS(__v_raw, "description", oldValue, value) - } - override var rating_avg: Number - get() { - return _tRG(__v_raw, "rating_avg", __v_raw.rating_avg, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("rating_avg")) { - return - } - val oldValue = __v_raw.rating_avg - __v_raw.rating_avg = value - _tRS(__v_raw, "rating_avg", oldValue, value) - } - override var total_sales: Number - get() { - return _tRG(__v_raw, "total_sales", __v_raw.total_sales, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("total_sales")) { - return - } - val oldValue = __v_raw.total_sales - __v_raw.total_sales = value - _tRS(__v_raw, "total_sales", oldValue, value) - } -} -val GenPagesMallConsumerSubscriptionFollowedShopsClass = CreateVueComponent(GenPagesMallConsumerSubscriptionFollowedShops::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesMallConsumerSubscriptionFollowedShops.inheritAttrs, inject = GenPagesMallConsumerSubscriptionFollowedShops.inject, props = GenPagesMallConsumerSubscriptionFollowedShops.props, propsNeedCastKeys = GenPagesMallConsumerSubscriptionFollowedShops.propsNeedCastKeys, emits = GenPagesMallConsumerSubscriptionFollowedShops.emits, components = GenPagesMallConsumerSubscriptionFollowedShops.components, styles = GenPagesMallConsumerSubscriptionFollowedShops.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesMallConsumerSubscriptionFollowedShops.setup(props as GenPagesMallConsumerSubscriptionFollowedShops) - } - ) -} -, fun(instance, renderer): GenPagesMallConsumerSubscriptionFollowedShops { - return GenPagesMallConsumerSubscriptionFollowedShops(instance, renderer) -} -) -open class PointRecord ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var user_id: String, - @JsonNotNull - open var points: Number, - @JsonNotNull - open var type: String, - @JsonNotNull - open var description: String, - @JsonNotNull - open var created_at: String, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("PointRecord", "pages/mall/consumer/points/index.uvue", 45, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return PointRecordReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class PointRecordReactiveObject : PointRecord, IUTSReactive { - override var __v_raw: PointRecord - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: PointRecord, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, user_id = __v_raw.user_id, points = __v_raw.points, type = __v_raw.type, description = __v_raw.description, created_at = __v_raw.created_at) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): PointRecordReactiveObject { - return PointRecordReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var user_id: String - get() { - return _tRG(__v_raw, "user_id", __v_raw.user_id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("user_id")) { - return - } - val oldValue = __v_raw.user_id - __v_raw.user_id = value - _tRS(__v_raw, "user_id", oldValue, value) - } - override var points: Number - get() { - return _tRG(__v_raw, "points", __v_raw.points, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("points")) { - return - } - val oldValue = __v_raw.points - __v_raw.points = value - _tRS(__v_raw, "points", oldValue, value) - } - override var type: String - get() { - return _tRG(__v_raw, "type", __v_raw.type, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("type")) { - return - } - val oldValue = __v_raw.type - __v_raw.type = value - _tRS(__v_raw, "type", oldValue, value) - } - override var description: String - get() { - return _tRG(__v_raw, "description", __v_raw.description, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("description")) { - return - } - val oldValue = __v_raw.description - __v_raw.description = value - _tRS(__v_raw, "description", oldValue, value) - } - override var created_at: String - get() { - return _tRG(__v_raw, "created_at", __v_raw.created_at, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("created_at")) { - return - } - val oldValue = __v_raw.created_at - __v_raw.created_at = value - _tRS(__v_raw, "created_at", oldValue, value) - } -} -val GenPagesMallConsumerPointsIndexClass = CreateVueComponent(GenPagesMallConsumerPointsIndex::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesMallConsumerPointsIndex.inheritAttrs, inject = GenPagesMallConsumerPointsIndex.inject, props = GenPagesMallConsumerPointsIndex.props, propsNeedCastKeys = GenPagesMallConsumerPointsIndex.propsNeedCastKeys, emits = GenPagesMallConsumerPointsIndex.emits, components = GenPagesMallConsumerPointsIndex.components, styles = GenPagesMallConsumerPointsIndex.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesMallConsumerPointsIndex.setup(props as GenPagesMallConsumerPointsIndex) - } - ) -} -, fun(instance, renderer): GenPagesMallConsumerPointsIndex { - return GenPagesMallConsumerPointsIndex(instance, renderer) -} -) -open class RedPacket ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var user_id: String, - @JsonNotNull - open var amount: Number, - @JsonNotNull - open var name: String, - @JsonNotNull - open var status: Number, - @JsonNotNull - open var expire_at: String, - @JsonNotNull - open var created_at: String, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("RedPacket", "pages/mall/consumer/red-packets/index.uvue", 46, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return RedPacketReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class RedPacketReactiveObject : RedPacket, IUTSReactive { - override var __v_raw: RedPacket - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: RedPacket, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, user_id = __v_raw.user_id, amount = __v_raw.amount, name = __v_raw.name, status = __v_raw.status, expire_at = __v_raw.expire_at, created_at = __v_raw.created_at) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): RedPacketReactiveObject { - return RedPacketReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var user_id: String - get() { - return _tRG(__v_raw, "user_id", __v_raw.user_id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("user_id")) { - return - } - val oldValue = __v_raw.user_id - __v_raw.user_id = value - _tRS(__v_raw, "user_id", oldValue, value) - } - override var amount: Number - get() { - return _tRG(__v_raw, "amount", __v_raw.amount, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("amount")) { - return - } - val oldValue = __v_raw.amount - __v_raw.amount = value - _tRS(__v_raw, "amount", oldValue, value) - } - override var name: String - get() { - return _tRG(__v_raw, "name", __v_raw.name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("name")) { - return - } - val oldValue = __v_raw.name - __v_raw.name = value - _tRS(__v_raw, "name", oldValue, value) - } - override var status: Number - get() { - return _tRG(__v_raw, "status", __v_raw.status, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("status")) { - return - } - val oldValue = __v_raw.status - __v_raw.status = value - _tRS(__v_raw, "status", oldValue, value) - } - override var expire_at: String - get() { - return _tRG(__v_raw, "expire_at", __v_raw.expire_at, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("expire_at")) { - return - } - val oldValue = __v_raw.expire_at - __v_raw.expire_at = value - _tRS(__v_raw, "expire_at", oldValue, value) - } - override var created_at: String - get() { - return _tRG(__v_raw, "created_at", __v_raw.created_at, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("created_at")) { - return - } - val oldValue = __v_raw.created_at - __v_raw.created_at = value - _tRS(__v_raw, "created_at", oldValue, value) - } -} -val GenPagesMallConsumerRedPacketsIndexClass = CreateVueComponent(GenPagesMallConsumerRedPacketsIndex::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesMallConsumerRedPacketsIndex.inheritAttrs, inject = GenPagesMallConsumerRedPacketsIndex.inject, props = GenPagesMallConsumerRedPacketsIndex.props, propsNeedCastKeys = GenPagesMallConsumerRedPacketsIndex.propsNeedCastKeys, emits = GenPagesMallConsumerRedPacketsIndex.emits, components = GenPagesMallConsumerRedPacketsIndex.components, styles = GenPagesMallConsumerRedPacketsIndex.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesMallConsumerRedPacketsIndex.setup(props as GenPagesMallConsumerRedPacketsIndex) - } - ) -} -, fun(instance, renderer): GenPagesMallConsumerRedPacketsIndex { - return GenPagesMallConsumerRedPacketsIndex(instance, renderer) -} -) -open class BankCard__1 ( - @JsonNotNull - open var id: String, - @JsonNotNull - open var user_id: String, - @JsonNotNull - open var bank_name: String, - @JsonNotNull - open var card_no_last4: String, - @JsonNotNull - open var card_type: String, - @JsonNotNull - open var holder_name: String, - @JsonNotNull - open var is_default: Boolean = false, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("BankCard", "pages/mall/consumer/bank-cards/index.uvue", 33, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return BankCard__1ReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class BankCard__1ReactiveObject : BankCard__1, IUTSReactive { - override var __v_raw: BankCard__1 - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: BankCard__1, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(id = __v_raw.id, user_id = __v_raw.user_id, bank_name = __v_raw.bank_name, card_no_last4 = __v_raw.card_no_last4, card_type = __v_raw.card_type, holder_name = __v_raw.holder_name, is_default = __v_raw.is_default) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): BankCard__1ReactiveObject { - return BankCard__1ReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var id: String - get() { - return _tRG(__v_raw, "id", __v_raw.id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("id")) { - return - } - val oldValue = __v_raw.id - __v_raw.id = value - _tRS(__v_raw, "id", oldValue, value) - } - override var user_id: String - get() { - return _tRG(__v_raw, "user_id", __v_raw.user_id, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("user_id")) { - return - } - val oldValue = __v_raw.user_id - __v_raw.user_id = value - _tRS(__v_raw, "user_id", oldValue, value) - } - override var bank_name: String - get() { - return _tRG(__v_raw, "bank_name", __v_raw.bank_name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("bank_name")) { - return - } - val oldValue = __v_raw.bank_name - __v_raw.bank_name = value - _tRS(__v_raw, "bank_name", oldValue, value) - } - override var card_no_last4: String - get() { - return _tRG(__v_raw, "card_no_last4", __v_raw.card_no_last4, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("card_no_last4")) { - return - } - val oldValue = __v_raw.card_no_last4 - __v_raw.card_no_last4 = value - _tRS(__v_raw, "card_no_last4", oldValue, value) - } - override var card_type: String - get() { - return _tRG(__v_raw, "card_type", __v_raw.card_type, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("card_type")) { - return - } - val oldValue = __v_raw.card_type - __v_raw.card_type = value - _tRS(__v_raw, "card_type", oldValue, value) - } - override var holder_name: String - get() { - return _tRG(__v_raw, "holder_name", __v_raw.holder_name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("holder_name")) { - return - } - val oldValue = __v_raw.holder_name - __v_raw.holder_name = value - _tRS(__v_raw, "holder_name", oldValue, value) - } - override var is_default: Boolean - get() { - return _tRG(__v_raw, "is_default", __v_raw.is_default, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("is_default")) { - return - } - val oldValue = __v_raw.is_default - __v_raw.is_default = value - _tRS(__v_raw, "is_default", oldValue, value) - } -} -val GenPagesMallConsumerBankCardsIndexClass = CreateVueComponent(GenPagesMallConsumerBankCardsIndex::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesMallConsumerBankCardsIndex.inheritAttrs, inject = GenPagesMallConsumerBankCardsIndex.inject, props = GenPagesMallConsumerBankCardsIndex.props, propsNeedCastKeys = GenPagesMallConsumerBankCardsIndex.propsNeedCastKeys, emits = GenPagesMallConsumerBankCardsIndex.emits, components = GenPagesMallConsumerBankCardsIndex.components, styles = GenPagesMallConsumerBankCardsIndex.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesMallConsumerBankCardsIndex.setup(props as GenPagesMallConsumerBankCardsIndex) - } - ) -} -, fun(instance, renderer): GenPagesMallConsumerBankCardsIndex { - return GenPagesMallConsumerBankCardsIndex(instance, renderer) -} -) -open class BankCardForm ( - @JsonNotNull - open var holder_name: String, - @JsonNotNull - open var card_no: String, - @JsonNotNull - open var bank_name: String, - @JsonNotNull - open var phone: String, - @JsonNotNull - open var is_default: Boolean = false, -) : UTSReactiveObject(), IUTSSourceMap { - override fun `__$getOriginalPosition`(): UTSSourceMapPosition? { - return UTSSourceMapPosition("BankCardForm", "pages/mall/consumer/bank-cards/add.uvue", 37, 6) - } - override fun __v_create(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): UTSReactiveObject { - return BankCardFormReactiveObject(this, __v_isReadonly, __v_isShallow, __v_skip) - } -} -class BankCardFormReactiveObject : BankCardForm, IUTSReactive { - override var __v_raw: BankCardForm - override var __v_isReadonly: Boolean - override var __v_isShallow: Boolean - override var __v_skip: Boolean - constructor(__v_raw: BankCardForm, __v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean) : super(holder_name = __v_raw.holder_name, card_no = __v_raw.card_no, bank_name = __v_raw.bank_name, phone = __v_raw.phone, is_default = __v_raw.is_default) { - this.__v_raw = __v_raw - this.__v_isReadonly = __v_isReadonly - this.__v_isShallow = __v_isShallow - this.__v_skip = __v_skip - } - override fun __v_clone(__v_isReadonly: Boolean, __v_isShallow: Boolean, __v_skip: Boolean): BankCardFormReactiveObject { - return BankCardFormReactiveObject(this.__v_raw, __v_isReadonly, __v_isShallow, __v_skip) - } - override var holder_name: String - get() { - return _tRG(__v_raw, "holder_name", __v_raw.holder_name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("holder_name")) { - return - } - val oldValue = __v_raw.holder_name - __v_raw.holder_name = value - _tRS(__v_raw, "holder_name", oldValue, value) - } - override var card_no: String - get() { - return _tRG(__v_raw, "card_no", __v_raw.card_no, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("card_no")) { - return - } - val oldValue = __v_raw.card_no - __v_raw.card_no = value - _tRS(__v_raw, "card_no", oldValue, value) - } - override var bank_name: String - get() { - return _tRG(__v_raw, "bank_name", __v_raw.bank_name, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("bank_name")) { - return - } - val oldValue = __v_raw.bank_name - __v_raw.bank_name = value - _tRS(__v_raw, "bank_name", oldValue, value) - } - override var phone: String - get() { - return _tRG(__v_raw, "phone", __v_raw.phone, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("phone")) { - return - } - val oldValue = __v_raw.phone - __v_raw.phone = value - _tRS(__v_raw, "phone", oldValue, value) - } - override var is_default: Boolean - get() { - return _tRG(__v_raw, "is_default", __v_raw.is_default, __v_isReadonly, __v_isShallow) - } - set(value) { - if (!__v_canSet("is_default")) { - return - } - val oldValue = __v_raw.is_default - __v_raw.is_default = value - _tRS(__v_raw, "is_default", oldValue, value) - } -} -val GenPagesMallConsumerBankCardsAddClass = CreateVueComponent(GenPagesMallConsumerBankCardsAdd::class.java, fun(): VueComponentOptions { - return VueComponentOptions(type = "page", name = "", inheritAttrs = GenPagesMallConsumerBankCardsAdd.inheritAttrs, inject = GenPagesMallConsumerBankCardsAdd.inject, props = GenPagesMallConsumerBankCardsAdd.props, propsNeedCastKeys = GenPagesMallConsumerBankCardsAdd.propsNeedCastKeys, emits = GenPagesMallConsumerBankCardsAdd.emits, components = GenPagesMallConsumerBankCardsAdd.components, styles = GenPagesMallConsumerBankCardsAdd.styles, setup = fun(props: ComponentPublicInstance): Any? { - return GenPagesMallConsumerBankCardsAdd.setup(props as GenPagesMallConsumerBankCardsAdd) - } - ) -} -, fun(instance, renderer): GenPagesMallConsumerBankCardsAdd { - return GenPagesMallConsumerBankCardsAdd(instance, renderer) -} -) -fun createApp(): UTSJSONObject { - val app = createSSRApp(GenAppClass) - app.config.globalProperties["\$t"] = true - return _uO("app" to app) -} -fun main(app: IApp) { - definePageRoutes() - defineAppConfig() - (createApp()["app"] as VueApp).mount(app, GenUniApp()) -} -open class UniAppConfig : io.dcloud.uniapp.appframe.AppConfig { - override var name: String = "mall" - override var appid: String = "__UNI__EC68BC3" - override var versionName: String = "1.0.0" - override var versionCode: String = "100" - override var uniCompilerVersion: String = "4.87" - constructor() : super() {} -} -fun definePageRoutes() { - __uniRoutes.push(UniPageRoute(path = "pages/user/login", component = GenPagesUserLoginClass, meta = UniPageMeta(isQuit = true), style = _uM("navigationBarTitleText" to "用户登录", "navigationStyle" to "custom"))) - __uniRoutes.push(UniPageRoute(path = "pages/user/boot", component = GenPagesUserBootClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to ""))) - __uniRoutes.push(UniPageRoute(path = "pages/user/register", component = GenPagesUserRegisterClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "注册"))) - __uniRoutes.push(UniPageRoute(path = "pages/user/forgot-password", component = GenPagesUserForgotPasswordClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "忘记密码"))) - __uniRoutes.push(UniPageRoute(path = "pages/user/terms", component = GenPagesUserTermsClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "用户协议与隐私政策"))) - __uniRoutes.push(UniPageRoute(path = "pages/user/center", component = GenPagesUserCenterClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "用户中心"))) - __uniRoutes.push(UniPageRoute(path = "pages/user/profile", component = GenPagesUserProfileClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "个人资料"))) - __uniRoutes.push(UniPageRoute(path = "pages/user/change-password", component = GenPagesUserChangePasswordClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "修改密码"))) - __uniRoutes.push(UniPageRoute(path = "pages/user/bind-phone", component = GenPagesUserBindPhoneClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "绑定手机"))) - __uniRoutes.push(UniPageRoute(path = "pages/user/bind-email", component = GenPagesUserBindEmailClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "绑定邮箱"))) - __uniRoutes.push(UniPageRoute(path = "pages/mall/consumer/index", component = GenPagesMallConsumerIndexClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "首页", "navigationStyle" to "custom", "enablePullDownRefresh" to false))) - __uniRoutes.push(UniPageRoute(path = "pages/mall/consumer/category", component = GenPagesMallConsumerCategoryClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "分类", "navigationStyle" to "custom"))) - __uniRoutes.push(UniPageRoute(path = "pages/mall/consumer/messages", component = GenPagesMallConsumerMessagesClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "消息", "enablePullDownRefresh" to true))) - __uniRoutes.push(UniPageRoute(path = "pages/mall/consumer/cart", component = GenPagesMallConsumerCartClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "购物车"))) - __uniRoutes.push(UniPageRoute(path = "pages/mall/consumer/profile", component = GenPagesMallConsumerProfileClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "我的"))) - __uniRoutes.push(UniPageRoute(path = "pages/mall/consumer/settings", component = GenPagesMallConsumerSettingsClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "设置"))) - __uniRoutes.push(UniPageRoute(path = "pages/mall/consumer/wallet", component = GenPagesMallConsumerWalletClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "我的钱包"))) - __uniRoutes.push(UniPageRoute(path = "pages/mall/consumer/withdraw", component = GenPagesMallConsumerWithdrawClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "余额提现"))) - __uniRoutes.push(UniPageRoute(path = "pages/mall/consumer/search", component = GenPagesMallConsumerSearchClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "搜索", "navigationStyle" to "custom"))) - __uniRoutes.push(UniPageRoute(path = "pages/mall/consumer/product-detail", component = GenPagesMallConsumerProductDetailClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "商品详情"))) - __uniRoutes.push(UniPageRoute(path = "pages/mall/consumer/shop-detail", component = GenPagesMallConsumerShopDetailClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "店铺详情"))) - __uniRoutes.push(UniPageRoute(path = "pages/mall/consumer/coupons", component = GenPagesMallConsumerCouponsClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "我的优惠券"))) - __uniRoutes.push(UniPageRoute(path = "pages/mall/consumer/favorites", component = GenPagesMallConsumerFavoritesClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "我的收藏"))) - __uniRoutes.push(UniPageRoute(path = "pages/mall/consumer/footprint", component = GenPagesMallConsumerFootprintClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "我的足迹"))) - __uniRoutes.push(UniPageRoute(path = "pages/mall/consumer/address-list", component = GenPagesMallConsumerAddressListClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "收货地址"))) - __uniRoutes.push(UniPageRoute(path = "pages/mall/consumer/address-edit", component = GenPagesMallConsumerAddressEditClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "编辑地址"))) - __uniRoutes.push(UniPageRoute(path = "pages/mall/consumer/checkout", component = GenPagesMallConsumerCheckoutClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "确认订单"))) - __uniRoutes.push(UniPageRoute(path = "pages/mall/consumer/payment", component = GenPagesMallConsumerPaymentClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "收银台"))) - __uniRoutes.push(UniPageRoute(path = "pages/mall/consumer/payment-success", component = GenPagesMallConsumerPaymentSuccessClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "支付成功", "navigationStyle" to "custom"))) - __uniRoutes.push(UniPageRoute(path = "pages/mall/consumer/orders", component = GenPagesMallConsumerOrdersClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "我的订单", "enablePullDownRefresh" to true))) - __uniRoutes.push(UniPageRoute(path = "pages/mall/consumer/order-detail", component = GenPagesMallConsumerOrderDetailClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "订单详情"))) - __uniRoutes.push(UniPageRoute(path = "pages/mall/consumer/logistics", component = GenPagesMallConsumerLogisticsClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "物流详情"))) - __uniRoutes.push(UniPageRoute(path = "pages/mall/consumer/review", component = GenPagesMallConsumerReviewClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "评价晒单"))) - __uniRoutes.push(UniPageRoute(path = "pages/mall/consumer/refund", component = GenPagesMallConsumerRefundClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "退款/售后"))) - __uniRoutes.push(UniPageRoute(path = "pages/mall/consumer/apply-refund", component = GenPagesMallConsumerApplyRefundClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "申请售后"))) - __uniRoutes.push(UniPageRoute(path = "pages/mall/consumer/refund-review", component = GenPagesMallConsumerRefundReviewClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "服务评价"))) - __uniRoutes.push(UniPageRoute(path = "pages/mall/consumer/chat", component = GenPagesMallConsumerChatClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "客服聊天", "navigationStyle" to "custom"))) - __uniRoutes.push(UniPageRoute(path = "pages/mall/consumer/subscription/followed-shops", component = GenPagesMallConsumerSubscriptionFollowedShopsClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "关注店铺"))) - __uniRoutes.push(UniPageRoute(path = "pages/mall/consumer/points/index", component = GenPagesMallConsumerPointsIndexClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "积分管理"))) - __uniRoutes.push(UniPageRoute(path = "pages/mall/consumer/red-packets/index", component = GenPagesMallConsumerRedPacketsIndexClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "我的红包"))) - __uniRoutes.push(UniPageRoute(path = "pages/mall/consumer/bank-cards/index", component = GenPagesMallConsumerBankCardsIndexClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "银行卡管理"))) - __uniRoutes.push(UniPageRoute(path = "pages/mall/consumer/bank-cards/add", component = GenPagesMallConsumerBankCardsAddClass, meta = UniPageMeta(isQuit = false), style = _uM("navigationBarTitleText" to "添加银行卡"))) -} -val __uniTabBar: Map? = _uM("color" to "#999999", "selectedColor" to "#ff5000", "backgroundColor" to "#ffffff", "borderStyle" to "black", "list" to _uA( - _uM("pagePath" to "pages/mall/consumer/index", "text" to "首页", "iconPath" to "static/tabbar/home.png", "selectedIconPath" to "static/tabbar/home-active.png"), - _uM("pagePath" to "pages/mall/consumer/category", "text" to "分类", "iconPath" to "static/tabbar/category.png", "selectedIconPath" to "static/tabbar/category-active.png"), - _uM("pagePath" to "pages/mall/consumer/messages", "text" to "消息", "iconPath" to "static/tabbar/messages.png", "selectedIconPath" to "static/tabbar/messages-active.png"), - _uM("pagePath" to "pages/mall/consumer/cart", "text" to "购物车", "iconPath" to "static/tabbar/cart.png", "selectedIconPath" to "static/tabbar/cart-active.png"), - _uM("pagePath" to "pages/mall/consumer/profile", "text" to "我的", "iconPath" to "static/tabbar/profile.png", "selectedIconPath" to "static/tabbar/profile-active.png") -)) -val __uniLaunchPage: Map = _uM("url" to "pages/user/login", "style" to _uM("navigationBarTitleText" to "用户登录", "navigationStyle" to "custom")) -fun defineAppConfig() { - __uniConfig.entryPagePath = "/pages/user/login" - __uniConfig.globalStyle = _uM("navigationBarTextStyle" to "black", "navigationBarTitleText" to "mall", "navigationBarBackgroundColor" to "#FFFFFF", "backgroundColor" to "#F8F8F8") - __uniConfig.getTabBarConfig = fun(): Map? { - return _uM("color" to "#999999", "selectedColor" to "#ff5000", "backgroundColor" to "#ffffff", "borderStyle" to "black", "list" to _uA( - _uM("pagePath" to "pages/mall/consumer/index", "text" to "首页", "iconPath" to "static/tabbar/home.png", "selectedIconPath" to "static/tabbar/home-active.png"), - _uM("pagePath" to "pages/mall/consumer/category", "text" to "分类", "iconPath" to "static/tabbar/category.png", "selectedIconPath" to "static/tabbar/category-active.png"), - _uM("pagePath" to "pages/mall/consumer/messages", "text" to "消息", "iconPath" to "static/tabbar/messages.png", "selectedIconPath" to "static/tabbar/messages-active.png"), - _uM("pagePath" to "pages/mall/consumer/cart", "text" to "购物车", "iconPath" to "static/tabbar/cart.png", "selectedIconPath" to "static/tabbar/cart-active.png"), - _uM("pagePath" to "pages/mall/consumer/profile", "text" to "我的", "iconPath" to "static/tabbar/profile.png", "selectedIconPath" to "static/tabbar/profile-active.png") - )) - } - __uniConfig.tabBar = __uniConfig.getTabBarConfig() - __uniConfig.conditionUrl = "" - __uniConfig.uniIdRouter = Map() - __uniConfig.ready = true -} -fun VueComponent.`$t`(key: String, values: Any?, locale: String?): String { - if (i18n.global == null) { - console.error("i18n is not initialized", " at main.uts:12") - return key - } - val params = values as UTSJSONObject? - val res = i18n.global.t(key, params, locale) - if (res.length > 0) { - return res - } - return key -} -open class GenUniApp : UniAppImpl() { - open val vm: GenApp? - get() { - return getAppVm() as GenApp? - } - open val `$vm`: GenApp? - get() { - return getAppVm() as GenApp? - } -} -fun getApp(): GenUniApp { - return getUniApp() as GenUniApp -} diff --git a/unpackage/cache/.app-android/src/pages/mall/consumer/address-edit.kt b/unpackage/cache/.app-android/src/pages/mall/consumer/address-edit.kt deleted file mode 100644 index 41b11e6e..00000000 --- a/unpackage/cache/.app-android/src/pages/mall/consumer/address-edit.kt +++ /dev/null @@ -1,364 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.getStorageSync as uni_getStorageSync -import io.dcloud.uniapp.extapi.navigateBack as uni_navigateBack -import io.dcloud.uniapp.framework.onShow as onShow__1 -import io.dcloud.uniapp.framework.onLoad as onLoad__1 -import io.dcloud.uniapp.extapi.setStorageSync as uni_setStorageSync -import io.dcloud.uniapp.extapi.showModal as uni_showModal -import io.dcloud.uniapp.extapi.showToast as uni_showToast -open class GenPagesMallConsumerAddressEdit : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesMallConsumerAddressEdit) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesMallConsumerAddressEdit - val _cache = __ins.renderCache - val isEdit = ref(false) - val addressId = ref("") - val regionString = ref("") - val tags = _uA( - "家", - "公司", - "学校" - ) - val smartInput = ref("") - val formData = reactive(AddressForm(name = "", phone = "", detail = "", isDefault = false, label = "")) - val loadAddress = fun(id: String): UTSPromise { - return wrapUTSPromise(suspend { - try { - val address = await(supabaseService.getAddressById(id)) - if (address != null) { - formData.name = address.recipient_name - formData.phone = address.phone - formData.detail = address.detail_address - formData.isDefault = address.is_default - formData.label = address.label ?: "" - regionString.value = ("" + address.province + " " + address.city + " " + address.district).trim() - } else { - val storedAddresses = uni_getStorageSync("addresses") - if (storedAddresses != null) { - val addresses = UTSAndroid.consoleDebugError(JSON.parse(storedAddresses as String), " at pages/mall/consumer/address-edit.uvue:109") as UTSArray - val localAddress = addresses.find(fun(item): Boolean { - return item.id === id - } - ) - if (localAddress != null) { - formData.name = localAddress.name - formData.phone = localAddress.phone - formData.detail = localAddress.detail - formData.isDefault = localAddress.isDefault - formData.label = localAddress.label ?: "" - regionString.value = ("" + localAddress.province + " " + localAddress.city + " " + localAddress.district).trim() - } - } - } - } - catch (error: Throwable) { - console.error("加载地址详情失败:", error, " at pages/mall/consumer/address-edit.uvue:122") - val storedAddresses = uni_getStorageSync("addresses") - if (storedAddresses != null) { - try { - val addresses = UTSAndroid.consoleDebugError(JSON.parse(storedAddresses as String), " at pages/mall/consumer/address-edit.uvue:127") as UTSArray - val address = addresses.find(fun(item): Boolean { - return item.id === id - } - ) - if (address != null) { - formData.name = address.name - formData.phone = address.phone - formData.detail = address.detail - formData.isDefault = address.isDefault - formData.label = address.label ?: "" - regionString.value = ("" + address.province + " " + address.city + " " + address.district).trim() - } - } - catch (e: Throwable) { - console.error("解析本地地址数据失败", e, " at pages/mall/consumer/address-edit.uvue:138") - } - } - } - }) - } - onLoad__1(fun(options){ - if (options["id"] != null) { - isEdit.value = true - addressId.value = options["id"] as String - loadAddress(addressId.value) - } - } - ) - val selectTag = fun(tag: String){ - if (formData.label === tag) { - formData.label = "" - } else { - formData.label = tag - } - } - val onSwitchChange = fun(e: UniSwitchChangeEvent){ - formData.isDefault = e.detail.value - } - val saveAddress = fun(): UTSPromise { - return wrapUTSPromise(suspend w1@{ - if (formData.name == "") { - uni_showToast(ShowToastOptions(title = "请填写收货人", icon = "none")) - return@w1 - } - if (formData.phone == "") { - uni_showToast(ShowToastOptions(title = "请填写手机号码", icon = "none")) - return@w1 - } - if (regionString.value == "") { - uni_showToast(ShowToastOptions(title = "请填写所在地区", icon = "none")) - return@w1 - } - if (formData.detail == "") { - uni_showToast(ShowToastOptions(title = "请填写详细地址", icon = "none")) - return@w1 - } - val regions = regionString.value.split(" ") - val province = regions[0] ?: "" - val city = regions[1] ?: "" - val district = regions.slice(2).join(" ") - val addressData = AddAddressParams(recipient_name = formData.name, phone = formData.phone, province = province, city = city, district = district, detail_address = formData.detail, postal_code = "", is_default = formData.isDefault, label = formData.label) - var success = false - if (isEdit.value) { - val updateData = UpdateAddressParams(recipient_name = formData.name, phone = formData.phone, province = province, city = city, district = district, detail_address = formData.detail, postal_code = "", is_default = formData.isDefault, label = formData.label) - success = await(supabaseService.updateAddress(addressId.value, updateData)) - } else { - success = await(supabaseService.addAddress(addressData)) - } - if (success) { - val storedAddresses = uni_getStorageSync("addresses") - var addresses: UTSArray = _uA() - if (storedAddresses != null) { - try { - addresses = UTSAndroid.consoleDebugError(JSON.parse(storedAddresses as String), " at pages/mall/consumer/address-edit.uvue:228") as UTSArray - } - catch (e: Throwable) { - addresses = _uA() - } - } - if (formData.isDefault) { - addresses.forEach(fun(item){ - item.isDefault = false - } - ) - } - if (isEdit.value) { - val index = addresses.findIndex(fun(item): Boolean { - return item.id === addressId.value - }) - if (index !== -1) { - addresses[index] = UTSJSONObject.assign(UTSJSONObject(), addresses[index], _uO("name" to formData.name, "phone" to formData.phone, "province" to province, "city" to city, "district" to district, "detail" to formData.detail, "isDefault" to formData.isDefault, "label" to formData.label)) as Address__1 - } - } else { - val newAddress = Address__1(id = "addr_" + Date.now(), name = formData.name, phone = formData.phone, province = province, city = city, district = district, detail = formData.detail, isDefault = formData.isDefault, label = formData.label) - addresses.push(newAddress) - } - uni_setStorageSync("addresses", JSON.stringify(addresses)) - uni_showToast(ShowToastOptions(title = "保存成功", icon = "success")) - setTimeout(fun(){ - uni_navigateBack(null) - }, 1500) - } else { - console.error("保存地址失败", " at pages/mall/consumer/address-edit.uvue:282") - uni_showToast(ShowToastOptions(title = "保存失败", icon = "none")) - } - }) - } - val parseSmartInput = fun(){ - val input = smartInput.value.trim() - if (input == "") { - return - } - val phoneRegex = UTSRegExp("(1[3-9]\\d{9})", "") - val phoneMatch = input.match(phoneRegex) - if (phoneMatch != null) { - formData.phone = phoneMatch[0] ?: "" - } - val nameRegex = UTSRegExp("([\\u4e00-\\u9fa5]{2,4})", "") - val nameMatch = input.match(nameRegex) - if (nameMatch != null) { - formData.name = nameMatch[0] ?: "" - } - var addrText = input - if (formData.name != "") { - addrText = addrText.replace(formData.name, "") - } - if (formData.phone != "") { - addrText = addrText.replace(formData.phone, "") - } - addrText = addrText.replace(UTSRegExp("[,,;;\\s]+", "g"), " ").trim() - val pattern1 = UTSRegExp("^(.*?省)?(.*?市)?(.*?[区县])?(.*)\$", "") - val m = addrText.match(pattern1) - if (m != null) { - val province = m[1] ?: "" - val city = m[2] ?: "" - val district = m[3] ?: "" - val detail = m[4] ?: "" - regionString.value = ("" + province.trim() + " " + city.trim() + " " + district.trim()).trim() - formData.detail = detail.trim() - } else { - formData.detail = addrText - } - } - val deleteAddress = fun(){ - uni_showModal(ShowModalOptions(title = "提示", content = "确定要删除该地址吗?", success = fun(res: UniShowModalResult){ - if (res.confirm) { - supabaseService.deleteAddress(addressId.value).then(fun(success){ - if (success) { - val storedAddresses = uni_getStorageSync("addresses") - if (storedAddresses != null) { - try { - var addresses = UTSAndroid.consoleDebugError(JSON.parse(storedAddresses as String), " at pages/mall/consumer/address-edit.uvue:341") as UTSArray - addresses = addresses.filter(fun(item): Boolean { - return item.id !== addressId.value - } - ) - uni_setStorageSync("addresses", JSON.stringify(addresses)) - } - catch (e: Throwable) { - console.error("解析本地地址数据失败", e, " at pages/mall/consumer/address-edit.uvue:345") - } - } - uni_showToast(ShowToastOptions(title = "删除成功", icon = "success")) - setTimeout(fun(){ - uni_navigateBack(null) - }, 1500) - } else { - console.error("删除地址失败", " at pages/mall/consumer/address-edit.uvue:358") - uni_showToast(ShowToastOptions(title = "删除失败", icon = "none")) - } - } - ) - } - } - )) - } - return fun(): Any? { - val _component_switch = resolveComponent("switch") - return _cE("view", _uM("class" to "page-container"), _uA( - _cE("scroll-view", _uM("class" to "address-edit-page", "direction" to "vertical"), _uA( - _cE("view", _uM("class" to "form-group"), _uA( - _cE("view", _uM("class" to "form-item"), _uA( - _cE("text", _uM("class" to "label"), "收货人"), - _cE("input", _uM("class" to "input", "modelValue" to formData.name, "onInput" to fun(`$event`: UniInputEvent){ - formData.name = `$event`.detail.value - } - , "placeholder" to "请填写收货人姓名"), null, 40, _uA( - "modelValue", - "onInput" - )) - )), - _cE("view", _uM("class" to "form-item"), _uA( - _cE("text", _uM("class" to "label"), "手机号码"), - _cE("input", _uM("class" to "input", "modelValue" to formData.phone, "onInput" to fun(`$event`: UniInputEvent){ - formData.phone = `$event`.detail.value - } - , "type" to "number", "maxlength" to "11", "placeholder" to "请填写手机号码"), null, 40, _uA( - "modelValue", - "onInput" - )) - )), - _cE("view", _uM("class" to "form-item"), _uA( - _cE("text", _uM("class" to "label"), "所在地区"), - _cE("input", _uM("class" to "input", "modelValue" to regionString.value, "onInput" to fun(`$event`: UniInputEvent){ - regionString.value = `$event`.detail.value - } - , "placeholder" to "省市区县、乡镇等"), null, 40, _uA( - "modelValue", - "onInput" - )) - )), - _cE("view", _uM("class" to "form-item"), _uA( - _cE("text", _uM("class" to "label"), "详细地址"), - _cE("input", _uM("class" to "input", "modelValue" to formData.detail, "onInput" to fun(`$event`: UniInputEvent){ - formData.detail = `$event`.detail.value - } - , "placeholder" to "街道、楼牌号等"), null, 40, _uA( - "modelValue", - "onInput" - )) - )) - )), - _cE("view", _uM("class" to "form-group"), _uA( - _cE("view", _uM("class" to "form-item"), _uA( - _cE("text", _uM("class" to "label"), "智能填写"), - _cE("textarea", _uM("class" to "smart-textarea", "modelValue" to smartInput.value, "onInput" to _uA(fun(`$event`: UniInputEvent){ - smartInput.value = `$event`.detail.value - } - , parseSmartInput), "placeholder" to "粘贴姓名+电话+地址,自动识别填充", "maxlength" to "200"), null, 40, _uA( - "modelValue", - "onInput" - )), - _cE("text", _uM("class" to "smart-tip"), "示例:张三 13800138000 北京市朝阳区三里屯SOHO A座") - )), - _cE("view", _uM("class" to "form-item"), _uA( - _cE("text", _uM("class" to "label"), "标签"), - _cE("view", _uM("class" to "tags-container"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(tags, fun(tag, __key, __index, _cached): Any { - return _cE("text", _uM("key" to tag, "class" to _nC(_uA( - "tag-item", - _uM("active" to (formData.label === tag)) - )), "onClick" to fun(){ - selectTag(tag) - } - ), _tD(tag), 11, _uA( - "onClick" - )) - } - ), 64) - )) - )), - _cE("view", _uM("class" to "form-item switch-item"), _uA( - _cE("text", _uM("class" to "label"), "设为默认收货地址"), - _cV(_component_switch, _uM("checked" to formData.isDefault, "color" to "#ff5000", "onChange" to onSwitchChange), null, 8, _uA( - "checked" - )) - )) - )), - _cE("view", _uM("class" to "footer-btn"), _uA( - _cE("button", _uM("class" to "save-btn", "onClick" to saveAddress), "保存"), - if (isTrue(isEdit.value)) { - _cE("button", _uM("key" to 0, "class" to "delete-btn", "onClick" to deleteAddress), "删除收货地址") - } else { - _cC("v-if", true) - } - )) - )) - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("page-container" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "display" to "flex", "flexDirection" to "column")), "address-edit-page" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "form-group" to _pS(_uM("backgroundColor" to "#FFFFFF", "marginBottom" to 15, "paddingTop" to 0, "paddingRight" to 15, "paddingBottom" to 0, "paddingLeft" to 15)), "form-item" to _pS(_uM("display" to "flex", "alignItems" to "center", "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#f5f5f5", "paddingTop" to 15, "paddingRight" to 0, "paddingBottom" to 15, "paddingLeft" to 0, "borderBottomWidth:last-child" to "medium", "borderBottomStyle:last-child" to "none", "borderBottomColor:last-child" to "#000000")), "label" to _pS(_uM("width" to 80, "fontSize" to 15, "color" to "#333333")), "input" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "fontSize" to 15, "color" to "#333333")), "switch-item" to _pS(_uM("justifyContent" to "space-between")), "tags-container" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "display" to "flex", "flexWrap" to "wrap")), "tag-item" to _uM("" to _uM("fontSize" to 12, "color" to "#666666", "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#dddddd", "borderRightColor" to "#dddddd", "borderBottomColor" to "#dddddd", "borderLeftColor" to "#dddddd", "paddingTop" to 4, "paddingRight" to 12, "paddingBottom" to 4, "paddingLeft" to 12, "borderTopLeftRadius" to 15, "borderTopRightRadius" to 15, "borderBottomRightRadius" to 15, "borderBottomLeftRadius" to 15, "marginRight" to 10), ".active" to _uM("backgroundColor" to "#ff5000", "color" to "#FFFFFF", "borderTopColor" to "#ff5000", "borderRightColor" to "#ff5000", "borderBottomColor" to "#ff5000", "borderLeftColor" to "#ff5000")), "footer-btn" to _pS(_uM("marginTop" to 30, "paddingTop" to 0, "paddingRight" to 15, "paddingBottom" to 0, "paddingLeft" to 15)), "save-btn" to _pS(_uM("backgroundColor" to "#ff5000", "color" to "#FFFFFF", "borderTopLeftRadius" to 25, "borderTopRightRadius" to 25, "borderBottomRightRadius" to 25, "borderBottomLeftRadius" to 25, "fontSize" to 16, "height" to 44, "lineHeight" to "44px", "borderTopWidth" to "medium", "borderRightWidth" to "medium", "borderBottomWidth" to "medium", "borderLeftWidth" to "medium", "borderTopStyle" to "none", "borderRightStyle" to "none", "borderBottomStyle" to "none", "borderLeftStyle" to "none", "borderTopColor" to "#000000", "borderRightColor" to "#000000", "borderBottomColor" to "#000000", "borderLeftColor" to "#000000", "marginBottom" to 15)), "delete-btn" to _pS(_uM("backgroundColor" to "#FFFFFF", "color" to "#333333", "borderTopLeftRadius" to 25, "borderTopRightRadius" to 25, "borderBottomRightRadius" to 25, "borderBottomLeftRadius" to 25, "fontSize" to 16, "height" to 44, "lineHeight" to "44px", "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#dddddd", "borderRightColor" to "#dddddd", "borderBottomColor" to "#dddddd", "borderLeftColor" to "#dddddd"))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/mall/consumer/address-list.kt b/unpackage/cache/.app-android/src/pages/mall/consumer/address-list.kt deleted file mode 100644 index 53265b0e..00000000 --- a/unpackage/cache/.app-android/src/pages/mall/consumer/address-list.kt +++ /dev/null @@ -1,205 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.`$emit` as uni__emit -import io.dcloud.uniapp.extapi.getStorageSync as uni_getStorageSync -import io.dcloud.uniapp.extapi.navigateBack as uni_navigateBack -import io.dcloud.uniapp.extapi.navigateTo as uni_navigateTo -import io.dcloud.uniapp.framework.onShow as onShow__1 -import io.dcloud.uniapp.framework.onLoad as onLoad__1 -import io.dcloud.uniapp.extapi.setStorageSync as uni_setStorageSync -import io.dcloud.uniapp.extapi.showModal as uni_showModal -import io.dcloud.uniapp.extapi.showToast as uni_showToast -open class GenPagesMallConsumerAddressList : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesMallConsumerAddressList) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesMallConsumerAddressList - val _cache = __ins.renderCache - val addresses = ref(_uA
()) - val selectionMode = ref(false) - val loadAddresses = fun(): UTSPromise { - return wrapUTSPromise(suspend { - try { - val supabaseAddresses = await(supabaseService.getAddresses()) - val transformedAddresses = supabaseAddresses.map(fun(item: UserAddress): Address { - return Address(id = item.id, name = item.recipient_name, phone = item.phone, province = item.province, city = item.city, district = item.district, detail = item.detail_address, isDefault = item.is_default, label = "") - } - ) - addresses.value = transformedAddresses - uni_setStorageSync("addresses", JSON.stringify(addresses.value)) - } - catch (error: Throwable) { - console.error("加载地址数据失败:", error, " at pages/mall/consumer/address-list.uvue:81") - val storedAddresses = uni_getStorageSync("addresses") - if (storedAddresses != null) { - try { - addresses.value = UTSAndroid.consoleDebugError(JSON.parse(storedAddresses as String), " at pages/mall/consumer/address-list.uvue:86") as UTSArray
- } catch (e: Throwable) { - console.error("解析地址数据失败", e, " at pages/mall/consumer/address-list.uvue:88") - addresses.value = _uA() - } - } else { - addresses.value = _uA() - } - } - }) - } - onLoad__1(fun(options){ - if (options["selectMode"] == "true") { - selectionMode.value = true - } - } - ) - onShow__1(fun(){ - loadAddresses() - } - ) - val getFullAddress = fun(item: Address): String { - return "" + item.province + item.city + item.district + " " + item.detail - } - val addAddress = fun(){ - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/address-edit")) - } - val deleteAddress = fun(id: String){ - uni_showModal(ShowModalOptions(title = "提示", content = "确定要删除该地址吗?", success = fun(res){ - if (res.confirm) { - supabaseService.deleteAddress(id).then(fun(success){ - if (success) { - val index = addresses.value.findIndex(fun(addr): Boolean { - return addr.id === id - }) - if (index !== -1) { - addresses.value.splice(index, 1) - uni_setStorageSync("addresses", JSON.stringify(addresses.value)) - uni_showToast(ShowToastOptions(title = "删除成功", icon = "success")) - } - } else { - console.error("删除地址失败", " at pages/mall/consumer/address-list.uvue:142") - uni_showToast(ShowToastOptions(title = "删除失败", icon = "none")) - } - } - ) - } - } - )) - } - val editAddress = fun(id: String){ - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/address-edit?id=" + id)) - } - val selectAddress = fun(item: Address){ - if (selectionMode.value) { - uni__emit("addressSelected", object : UTSJSONObject() { - var id = item.id - var recipient_name = item.name - var phone = item.phone - var province = item.province - var city = item.city - var district = item.district - var detail = item.detail - var is_default = item.isDefault - }) - uni_navigateBack(null) - } else { - editAddress(item.id) - } - } - return fun(): Any? { - return _cE("view", _uM("class" to "address-list-page"), _uA( - _cE("view", _uM("class" to "address-list"), _uA( - if (addresses.value.length === 0) { - _cE("view", _uM("key" to 0, "class" to "empty-state"), _uA( - _cE("text", _uM("class" to "empty-icon"), "📍"), - _cE("text", _uM("class" to "empty-text"), "暂无收货地址") - )) - } else { - _cE(Fragment, _uM("key" to 1), RenderHelpers.renderList(addresses.value, fun(item, index, __index, _cached): Any { - return _cE("view", _uM("key" to item.id, "class" to "address-item", "onClick" to fun(){ - selectAddress(item) - } - ), _uA( - _cE("view", _uM("class" to "item-content"), _uA( - _cE("view", _uM("class" to "item-header"), _uA( - _cE("text", _uM("class" to "user-name"), _tD(item.name), 1), - _cE("text", _uM("class" to "user-phone"), _tD(item.phone), 1), - if (isTrue(item.isDefault)) { - _cE("text", _uM("key" to 0, "class" to "default-tag"), "默认") - } else { - _cC("v-if", true) - } - , - if (isTrue(item.label)) { - _cE("text", _uM("key" to 1, "class" to "label-tag"), _tD(item.label), 1) - } else { - _cC("v-if", true) - } - )), - _cE("text", _uM("class" to "address-text"), _tD(getFullAddress(item)), 1) - )), - _cE("view", _uM("class" to "item-actions"), _uA( - _cE("view", _uM("class" to "action-item", "onClick" to withModifiers(fun(){ - editAddress(item.id) - } - , _uA( - "stop" - ))), _uA( - _cE("text", _uM("class" to "action-icon"), "📝") - ), 8, _uA( - "onClick" - )), - _cE("view", _uM("class" to "action-item", "onClick" to withModifiers(fun(){ - deleteAddress(item.id) - } - , _uA( - "stop" - ))), _uA( - _cE("text", _uM("class" to "action-icon"), "🗑️") - ), 8, _uA( - "onClick" - )) - )) - ), 8, _uA( - "onClick" - )) - } - ), 128) - } - )), - _cE("view", _uM("class" to "footer-btn"), _uA( - _cE("button", _uM("class" to "add-btn", "onClick" to addAddress), "新建收货地址") - )) - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("item-actions" to _pS(_uM("paddingTop" to 10, "paddingRight" to 10, "paddingBottom" to 10, "paddingLeft" to 10, "borderLeftWidth" to 1, "borderLeftStyle" to "solid", "borderLeftColor" to "#f0f0f0", "display" to "flex", "flexDirection" to "column", "justifyContent" to "center", "alignItems" to "center")), "action-item" to _pS(_uM("marginBottom" to 15, "marginBottom:last-child" to 0)), "footer-btn" to _pS(_uM("position" to "fixed", "bottom" to 0, "left" to 0, "right" to 0, "backgroundColor" to "#FFFFFF", "paddingTop" to 10, "paddingRight" to 15, "paddingBottom" to 30, "paddingLeft" to 15, "boxShadow" to "0 -2px 10px rgba(0,0,0,0.05)", "display" to "flex", "justifyContent" to "center", "alignItems" to "center", "zIndex" to 100)), "add-btn" to _pS(_uM("backgroundColor" to "#ff5000", "color" to "#FFFFFF", "borderTopLeftRadius" to 25, "borderTopRightRadius" to 25, "borderBottomRightRadius" to 25, "borderBottomLeftRadius" to 25, "fontSize" to 16, "height" to 44, "lineHeight" to "44px", "borderTopWidth" to "medium", "borderRightWidth" to "medium", "borderBottomWidth" to "medium", "borderLeftWidth" to "medium", "borderTopStyle" to "none", "borderRightStyle" to "none", "borderBottomStyle" to "none", "borderLeftStyle" to "none", "borderTopColor" to "#000000", "borderRightColor" to "#000000", "borderBottomColor" to "#000000", "borderLeftColor" to "#000000", "width" to "100%"))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/mall/consumer/apply-refund.kt b/unpackage/cache/.app-android/src/pages/mall/consumer/apply-refund.kt deleted file mode 100644 index d556488f..00000000 --- a/unpackage/cache/.app-android/src/pages/mall/consumer/apply-refund.kt +++ /dev/null @@ -1,222 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.navigateBack as uni_navigateBack -import io.dcloud.uniapp.framework.onShow as onShow__1 -import io.dcloud.uniapp.framework.onLoad as onLoad__1 -import io.dcloud.uniapp.extapi.showToast as uni_showToast -open class GenPagesMallConsumerApplyRefund : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesMallConsumerApplyRefund) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesMallConsumerApplyRefund - val _cache = __ins.renderCache - val orderId = ref("") - val orderItemId = ref("") - val refundType = ref(1) - val refundReason = ref("") - val refundAmount = ref("") - val description = ref("") - val maxAmount = ref(0) - val deliveryFee = ref(0) - val submitting = ref(false) - val reasonList = _uA( - "多拍/错拍/不想要", - "快递一直未送达", - "未按约定时间发货", - "快递无记录", - "空包裹/少货/错发", - "质量问题", - "其他" - ) - val loadOrderInfo = fun(): UTSPromise { - return wrapUTSPromise(suspend { - try { - val orderData = await(supabaseService.getOrderDetail(orderId.value)) - if (orderData != null) { - val order = orderData as UTSJSONObject - val total = order.getNumber("total_amount") ?: 0 - val shipping = order.getNumber("shipping_fee") ?: 0 - maxAmount.value = total - deliveryFee.value = shipping - refundAmount.value = maxAmount.value.toString(10) - } - } - catch (err: Throwable) { - console.error("加载订单信息失败", err, " at pages/mall/consumer/apply-refund.uvue:98") - uni_showToast(ShowToastOptions(title = "加载订单失败", icon = "none")) - } - }) - } - onLoad__1(fun(options){ - if (options["orderId"] != null) { - orderId.value = options["orderId"] as String - loadOrderInfo() - } - } - ) - val handleTypeChange = fun(e: Any){ - val target = e as UTSJSONObject - val detail = target["detail"] as UTSJSONObject - val value = detail["value"] as String - refundType.value = parseInt(value) - } - val handleReasonChange = fun(e: Any){ - val target = e as UTSJSONObject - val detail = target["detail"] as UTSJSONObject - val value = detail["value"] as Number - val index = value - refundReason.value = reasonList[index] - } - val submitRefund = fun(): UTSPromise { - return wrapUTSPromise(suspend w1@{ - if (refundReason.value == "") { - uni_showToast(ShowToastOptions(title = "请选择退款原因", icon = "none")) - return@w1 - } - val amount = parseFloat(refundAmount.value) - if (isNaN(amount) || amount <= 0 || amount > maxAmount.value) { - uni_showToast(ShowToastOptions(title = "请输入有效的退款金额", icon = "none")) - return@w1 - } - submitting.value = true - try { - val result = await(supabaseService.createRefund(object : UTSJSONObject() { - var order_id = orderId.value - var refund_type = refundType.value - var refund_reason = refundReason.value - var refund_amount = amount - var description = description.value - })) - if (result.success) { - uni_showToast(ShowToastOptions(title = "提交成功", icon = "success")) - setTimeout(fun(){ - uni_navigateBack(null) - }, 1500) - } else { - uni_showToast(ShowToastOptions(title = result.message, icon = "none")) - } - } - catch (err: Throwable) { - console.error("提交退款失败", err, " at pages/mall/consumer/apply-refund.uvue:171") - uni_showToast(ShowToastOptions(title = "提交异常", icon = "none")) - } - finally { - submitting.value = false - } - }) - } - return fun(): Any? { - val _component_radio = resolveComponent("radio") - val _component_label = resolveComponent("label") - val _component_radio_group = resolveComponent("radio-group") - val _component_picker = resolveComponent("picker") - return _cE("view", _uM("class" to "apply-refund-page"), _uA( - _cE("view", _uM("class" to "section"), _uA( - _cE("view", _uM("class" to "section-title"), "退款类型"), - _cV(_component_radio_group, _uM("onChange" to handleTypeChange, "class" to "type-group"), _uM("default" to withSlotCtx(fun(): UTSArray { - return _uA( - _cV(_component_label, _uM("class" to "type-item"), _uM("default" to withSlotCtx(fun(): UTSArray { - return _uA( - _cV(_component_radio, _uM("value" to "1", "checked" to (refundType.value === 1), "color" to "#ff4444", "class" to "type-radio"), null, 8, _uA( - "checked" - )), - _cE("text", null, "仅退款") - ) - } - ), "_" to 1)), - _cV(_component_label, _uM("class" to "type-item"), _uM("default" to withSlotCtx(fun(): UTSArray { - return _uA( - _cV(_component_radio, _uM("value" to "2", "checked" to (refundType.value === 2), "color" to "#ff4444", "class" to "type-radio"), null, 8, _uA( - "checked" - )), - _cE("text", null, "退货退款") - ) - } - ), "_" to 1)) - ) - } - ), "_" to 1)) - )), - _cE("view", _uM("class" to "section"), _uA( - _cE("view", _uM("class" to "section-title"), "退款原因"), - _cV(_component_picker, _uM("onChange" to handleReasonChange, "range" to reasonList, "class" to "picker"), _uM("default" to withSlotCtx(fun(): UTSArray { - return _uA( - _cE("view", _uM("class" to "picker-content"), _uA( - if (isTrue(refundReason.value)) { - _cE("text", _uM("key" to 0), _tD(refundReason.value), 1) - } else { - _cE("text", _uM("key" to 1, "class" to "placeholder"), "请选择退款原因") - } - , - _cE("text", _uM("class" to "arrow"), ">") - )) - ) - } - ), "_" to 1)) - )), - _cE("view", _uM("class" to "section"), _uA( - _cE("view", _uM("class" to "section-title"), "退款金额"), - _cE("view", _uM("class" to "amount-input-wrap"), _uA( - _cE("text", _uM("class" to "currency"), "¥"), - _cE("input", _uM("type" to "digit", "modelValue" to refundAmount.value, "onInput" to fun(`$event`: UniInputEvent){ - refundAmount.value = `$event`.detail.value - } - , "class" to "amount-input", "placeholder" to ("最多可退 \u00A5" + maxAmount.value)), null, 40, _uA( - "modelValue", - "onInput", - "placeholder" - )) - )), - _cE("text", _uM("class" to "amount-tip"), "最多可退 ¥" + _tD(maxAmount.value) + ",含发货邮费 ¥" + _tD(deliveryFee.value), 1) - )), - _cE("view", _uM("class" to "section"), _uA( - _cE("view", _uM("class" to "section-title"), "退款说明"), - _cE("textarea", _uM("modelValue" to description.value, "onInput" to fun(`$event`: UniInputEvent){ - description.value = `$event`.detail.value - } - , "class" to "desc-input", "placeholder" to "选填:补充详细的退款说明,有助于商家快速处理", "maxlength" to "200"), null, 40, _uA( - "modelValue", - "onInput" - )) - )), - _cE("view", _uM("class" to "submit-bar"), _uA( - _cE("button", _uM("class" to "submit-btn", "onClick" to submitRefund, "loading" to submitting.value), "提交申请", 8, _uA( - "loading" - )) - )) - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("apply-refund-page" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "backgroundColor" to "#f5f5f5", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 80, "paddingLeft" to 15)), "section" to _pS(_uM("backgroundColor" to "#ffffff", "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "marginBottom" to 15)), "section-title" to _pS(_uM("fontSize" to 16, "fontWeight" to "bold", "color" to "#333333", "marginBottom" to 15)), "type-group" to _pS(_uM("display" to "flex", "flexDirection" to "column")), "type-item" to _pS(_uM("display" to "flex", "alignItems" to "center", "marginBottom" to 15, "fontSize" to 14)), "type-radio" to _pS(_uM("marginRight" to 10)), "picker-content" to _pS(_uM("display" to "flex", "justifyContent" to "space-between", "alignItems" to "center", "fontSize" to 14, "color" to "#333333")), "placeholder" to _pS(_uM("color" to "#999999")), "arrow" to _pS(_uM("color" to "#cccccc")), "amount-input-wrap" to _pS(_uM("display" to "flex", "alignItems" to "center", "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#eeeeee", "paddingBottom" to 10, "marginBottom" to 10)), "currency" to _pS(_uM("fontSize" to 24, "fontWeight" to "bold", "color" to "#333333", "marginRight" to 10)), "amount-input" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "fontSize" to 24, "fontWeight" to "bold", "height" to 40)), "amount-tip" to _pS(_uM("fontSize" to 12, "color" to "#999999")), "desc-input" to _pS(_uM("width" to "100%", "height" to 100, "fontSize" to 14, "backgroundColor" to "#f9f9f9", "borderTopLeftRadius" to 4, "borderTopRightRadius" to 4, "borderBottomRightRadius" to 4, "borderBottomLeftRadius" to 4, "paddingTop" to 10, "paddingRight" to 10, "paddingBottom" to 10, "paddingLeft" to 10, "boxSizing" to "border-box")), "submit-bar" to _pS(_uM("position" to "fixed", "bottom" to 0, "left" to 0, "right" to 0, "backgroundColor" to "#ffffff", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "boxShadow" to "0 -2px 10px rgba(0,0,0,0.05)")), "submit-btn" to _pS(_uM("backgroundColor" to "#ff4444", "color" to "#ffffff", "borderTopLeftRadius" to 22, "borderTopRightRadius" to 22, "borderBottomRightRadius" to 22, "borderBottomLeftRadius" to 22, "fontSize" to 16, "fontWeight" to "bold"))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/mall/consumer/bank-cards/add.kt b/unpackage/cache/.app-android/src/pages/mall/consumer/bank-cards/add.kt deleted file mode 100644 index f395c0ff..00000000 --- a/unpackage/cache/.app-android/src/pages/mall/consumer/bank-cards/add.kt +++ /dev/null @@ -1,164 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.navigateBack as uni_navigateBack -import io.dcloud.uniapp.extapi.showToast as uni_showToast -open class GenPagesMallConsumerBankCardsAdd : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesMallConsumerBankCardsAdd) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesMallConsumerBankCardsAdd - val _cache = __ins.renderCache - val loading = ref(false) - val form = reactive(BankCardForm(holder_name = "", card_no = "", bank_name = "", phone = "", is_default = false)) - val onSwitchChange = fun(e: UniSwitchChangeEvent){ - form.is_default = e.detail.value - } - val detectBank = fun(e: Any){ - val kVal = form.card_no - if (kVal.length >= 6) { - if (kVal.startsWith("6222")) { - form.bank_name = "中国工商银行" - } else if (kVal.startsWith("6227")) { - form.bank_name = "中国建设银行" - } else if (kVal.startsWith("6225")) { - form.bank_name = "招商银行" - } else if (kVal.startsWith("6228")) { - form.bank_name = "中国农业银行" - } - } - } - val submit = fun(): UTSPromise { - return wrapUTSPromise(suspend w1@{ - if (form.holder_name == "" || form.card_no == "" || form.bank_name == "") { - uni_showToast(ShowToastOptions(title = "请完善卡片信息", icon = "none")) - return@w1 - } - loading.value = true - try { - val cardData = UTSJSONObject(UTSSourceMapPosition("cardData", "pages/mall/consumer/bank-cards/add.uvue", 79, 15)) - cardData.set("holder_name", form.holder_name) - cardData.set("bank_name", form.bank_name) - cardData.set("card_no", form.card_no) - val last4 = if (form.card_no.length > 4) { - form.card_no.slice(-4) - } else { - form.card_no - } - cardData.set("card_no_last4", last4) - cardData.set("phone", form.phone) - cardData.set("is_default", form.is_default) - cardData.set("card_type", "debit") - val success = await(supabaseService.addBankCard(cardData)) - if (success) { - uni_showToast(ShowToastOptions(title = "添加成功")) - setTimeout(fun(){ - uni_navigateBack(null) - }, 1000) - } else { - uni_showToast(ShowToastOptions(title = "添加失败", icon = "none")) - } - } - catch (e: Throwable) { - console.error(e, " at pages/mall/consumer/bank-cards/add.uvue:101") - uni_showToast(ShowToastOptions(title = "系统错误", icon = "none")) - } - finally { - loading.value = false - } - }) - } - return fun(): Any? { - val _component_switch = resolveComponent("switch") - return _cE("view", _uM("class" to "add-card-page"), _uA( - _cE("view", _uM("class" to "form-container"), _uA( - _cE("view", _uM("class" to "form-item"), _uA( - _cE("text", _uM("class" to "label"), "持卡人"), - _cE("input", _uM("class" to "input", "type" to "text", "modelValue" to form.holder_name, "onInput" to fun(`$event`: UniInputEvent){ - form.holder_name = `$event`.detail.value - } - , "placeholder" to "请输入持卡人姓名"), null, 40, _uA( - "modelValue", - "onInput" - )) - )), - _cE("view", _uM("class" to "form-item"), _uA( - _cE("text", _uM("class" to "label"), "卡号"), - _cE("input", _uM("class" to "input", "type" to "number", "modelValue" to form.card_no, "onInput" to _uA(fun(`$event`: UniInputEvent){ - form.card_no = `$event`.detail.value - } - , detectBank), "placeholder" to "请输入银行卡号", "maxlength" to "19"), null, 40, _uA( - "modelValue", - "onInput" - )) - )), - _cE("view", _uM("class" to "form-item"), _uA( - _cE("text", _uM("class" to "label"), "银行"), - _cE("input", _uM("class" to "input", "type" to "text", "modelValue" to form.bank_name, "onInput" to fun(`$event`: UniInputEvent){ - form.bank_name = `$event`.detail.value - } - , "placeholder" to "自动识别或手动输入"), null, 40, _uA( - "modelValue", - "onInput" - )) - )), - _cE("view", _uM("class" to "form-item"), _uA( - _cE("text", _uM("class" to "label"), "手机号"), - _cE("input", _uM("class" to "input", "type" to "number", "modelValue" to form.phone, "onInput" to fun(`$event`: UniInputEvent){ - form.phone = `$event`.detail.value - } - , "placeholder" to "银行预留手机号", "maxlength" to "11"), null, 40, _uA( - "modelValue", - "onInput" - )) - )), - _cE("view", _uM("class" to "form-item switch-item"), _uA( - _cE("text", _uM("class" to "label"), "设为默认卡"), - _cV(_component_switch, _uM("checked" to form.is_default, "onChange" to onSwitchChange, "color" to "#ff5000"), null, 8, _uA( - "checked" - )) - )) - )), - _cE("view", _uM("class" to "action-section"), _uA( - _cE("button", _uM("class" to _nC(_uA( - "submit-btn", - _uM("disabled" to loading.value) - )), "disabled" to loading.value, "onClick" to submit), "确认添加", 10, _uA( - "disabled" - )) - )) - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("add-card-page" to _pS(_uM("backgroundColor" to "#f5f5f5", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "form-container" to _pS(_uM("backgroundColor" to "#ffffff", "paddingTop" to 0, "paddingRight" to 15, "paddingBottom" to 0, "paddingLeft" to 15)), "form-item" to _pS(_uM("display" to "flex", "alignItems" to "center", "paddingTop" to 15, "paddingRight" to 0, "paddingBottom" to 15, "paddingLeft" to 0, "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#eeeeee", "borderBottomWidth:last-child" to "medium", "borderBottomStyle:last-child" to "none", "borderBottomColor:last-child" to "#000000")), "label" to _pS(_uM("width" to 80, "fontSize" to 15, "color" to "#333333")), "input" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "fontSize" to 15)), "switch-item" to _pS(_uM("justifyContent" to "space-between")), "action-section" to _pS(_uM("paddingTop" to 30, "paddingRight" to 15, "paddingBottom" to 30, "paddingLeft" to 15)), "submit-btn" to _uM("" to _uM("backgroundColor" to "#ff5000", "color" to "#ffffff", "borderTopLeftRadius" to 25, "borderTopRightRadius" to 25, "borderBottomRightRadius" to 25, "borderBottomLeftRadius" to 25, "fontSize" to 16), ".disabled" to _uM("opacity" to 0.6))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/mall/consumer/bank-cards/index.kt b/unpackage/cache/.app-android/src/pages/mall/consumer/bank-cards/index.kt deleted file mode 100644 index f0440f28..00000000 --- a/unpackage/cache/.app-android/src/pages/mall/consumer/bank-cards/index.kt +++ /dev/null @@ -1,175 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.navigateTo as uni_navigateTo -import io.dcloud.uniapp.extapi.showModal as uni_showModal -import io.dcloud.uniapp.extapi.showToast as uni_showToast -open class GenPagesMallConsumerBankCardsIndex : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesMallConsumerBankCardsIndex) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesMallConsumerBankCardsIndex - val _cache = __ins.renderCache - val cards = ref(_uA()) - val loading = ref(true) - val loadData = fun(): UTSPromise { - return wrapUTSPromise(suspend { - loading.value = true - try { - val rawList = await(supabaseService.getUserBankCards()) - val cardList: UTSArray = _uA() - run { - var i: Number = 0 - while(i < rawList.length){ - val item = rawList[i] - var id = "" - var bankName = "" - var last4 = "" - var type = "debit" - var holder = "" - var isDef = false - if (item is UTSJSONObject) { - id = (item as UTSJSONObject).getString("id") ?: "" - bankName = (item as UTSJSONObject).getString("bank_name") ?: "" - last4 = (item as UTSJSONObject).getString("card_no_last4") ?: "" - type = (item as UTSJSONObject).getString("card_type") ?: "debit" - holder = (item as UTSJSONObject).getString("holder_name") ?: "" - isDef = (item as UTSJSONObject).getBoolean("is_default") ?: false - } else { - val obj = UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(item)), " at pages/mall/consumer/bank-cards/index.uvue:70") as UTSJSONObject - id = obj.getString("id") ?: "" - bankName = obj.getString("bank_name") ?: "" - last4 = obj.getString("card_no_last4") ?: "" - type = obj.getString("card_type") ?: "debit" - holder = obj.getString("holder_name") ?: "" - isDef = obj.getBoolean("is_default") ?: false - } - cardList.push(BankCard__1(id = id, user_id = "", bank_name = bankName, card_no_last4 = last4, card_type = type, holder_name = holder, is_default = isDef)) - i++ - } - } - cards.value = cardList - } - catch (e: Throwable) { - console.error(e, " at pages/mall/consumer/bank-cards/index.uvue:92") - } - finally { - loading.value = false - } - }) - } - onShow(fun(){ - loadData() - } - ) - val addCard = fun(){ - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/bank-cards/add")) - } - val deleteCard = fun(card: BankCard__1){ - uni_showModal(ShowModalOptions(title = "删除银行卡", content = "确认删除尾号" + card.card_no_last4 + "的" + card.bank_name + "卡片吗?", success = fun(res){ - if (res.confirm) { - supabaseService.deleteBankCard(card.id).then(fun(success){ - if (success) { - uni_showToast(ShowToastOptions(title = "已删除")) - loadData() - } else { - uni_showToast(ShowToastOptions(title = "删除失败", icon = "none")) - } - } - ) - } - } - )) - } - val getCardClass = fun(bankName: String): String { - if (bankName.includes("招商")) { - return "cmb" - } - if (bankName.includes("建设")) { - return "ccb" - } - if (bankName.includes("工商")) { - return "icbc" - } - if (bankName.includes("农业")) { - return "abc" - } - return "default-bank" - } - return fun(): Any? { - return _cE("view", _uM("class" to "bank-cards-page"), _uA( - _cE("view", _uM("class" to "card-list"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(cards.value, fun(card, __key, __index, _cached): Any { - return _cE("view", _uM("key" to card.id, "class" to _nC(_uA( - "card-item", - getCardClass(card.bank_name) - ))), _uA( - _cE("view", _uM("class" to "card-bg-mask")), - _cE("view", _uM("class" to "card-content"), _uA( - _cE("view", _uM("class" to "card-header"), _uA( - _cE("text", _uM("class" to "bank-name"), _tD(card.bank_name), 1), - _cE("text", _uM("class" to "card-type"), _tD(if (card.card_type === "credit") { - "信用卡" - } else { - "储蓄卡" - } - ), 1) - )), - _cE("view", _uM("class" to "card-number"), _uA( - _cE("text", _uM("class" to "dots"), "**** **** ****"), - _cE("text", _uM("class" to "last-digits"), _tD(card.card_no_last4), 1) - )), - _cE("view", _uM("class" to "delete-btn", "onClick" to withModifiers(fun(){ - deleteCard(card) - } - , _uA( - "stop" - ))), _uA( - _cE("text", _uM("class" to "del-text"), "✕") - ), 8, _uA( - "onClick" - )) - )) - ), 2) - } - ), 128), - _cE("view", _uM("class" to "add-card-btn", "onClick" to addCard), _uA( - _cE("text", _uM("class" to "plus-icon"), "+"), - _cE("text", null, "添加银行卡") - )) - )) - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("bank-cards-page" to _pS(_uM("paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "backgroundColor" to "#f5f5f5", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "height" to 140, "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "marginBottom" to 15, "color" to "#ffffff", "position" to "relative", "overflow" to "hidden", "boxShadow" to "0 4px 8px rgba(0,0,0,0.1)")), "cmb" to _pS(_uM("backgroundImage" to "linear-gradient(135deg, #f55, #c00)", "backgroundColor" to "rgba(0,0,0,0)")), "ccb" to _pS(_uM("backgroundImage" to "linear-gradient(135deg, #09f, #00609c)", "backgroundColor" to "rgba(0,0,0,0)")), "icbc" to _pS(_uM("backgroundImage" to "linear-gradient(135deg, #f66, #c00)", "backgroundColor" to "rgba(0,0,0,0)")), "abc" to _pS(_uM("backgroundImage" to "linear-gradient(135deg, #0b9, #086)", "backgroundColor" to "rgba(0,0,0,0)")), "default-bank" to _pS(_uM("backgroundImage" to "linear-gradient(135deg, #666, #333)", "backgroundColor" to "rgba(0,0,0,0)")), "card-content" to _pS(_uM("paddingTop" to 20, "paddingRight" to 20, "paddingBottom" to 20, "paddingLeft" to 20, "zIndex" to 2, "position" to "relative", "height" to "100%", "boxSizing" to "border-box", "display" to "flex", "flexDirection" to "column", "justifyContent" to "space-between")), "card-header" to _pS(_uM("display" to "flex", "alignItems" to "center")), "bank-name" to _pS(_uM("fontSize" to 18, "fontWeight" to "bold", "marginRight" to 10)), "card-type" to _pS(_uM("fontSize" to 12, "backgroundColor" to "rgba(255,255,255,0.2)", "paddingTop" to 2, "paddingRight" to 6, "paddingBottom" to 2, "paddingLeft" to 6, "borderTopLeftRadius" to 4, "borderTopRightRadius" to 4, "borderBottomRightRadius" to 4, "borderBottomLeftRadius" to 4)), "card-number" to _pS(_uM("display" to "flex", "alignItems" to "center", "justifyContent" to "flex-end", "marginBottom" to 10)), "dots" to _pS(_uM("fontSize" to 24, "marginRight" to 15, "lineHeight" to 1)), "last-digits" to _pS(_uM("fontSize" to 24, "fontFamily" to "monospace")), "add-card-btn" to _pS(_uM("backgroundColor" to "#ffffff", "height" to 60, "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "display" to "flex", "alignItems" to "center", "justifyContent" to "center", "color" to "#666666", "fontSize" to 16, "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "dashed", "borderRightStyle" to "dashed", "borderBottomStyle" to "dashed", "borderLeftStyle" to "dashed", "borderTopColor" to "#cccccc", "borderRightColor" to "#cccccc", "borderBottomColor" to "#cccccc", "borderLeftColor" to "#cccccc")), "plus-icon" to _pS(_uM("fontSize" to 24, "marginRight" to 5)), "delete-btn" to _pS(_uM("position" to "absolute", "top" to 15, "right" to 15, "width" to 24, "height" to 24, "backgroundColor" to "rgba(0,0,0,0.2)", "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "display" to "flex", "alignItems" to "center", "justifyContent" to "center")), "del-text" to _pS(_uM("color" to "#ffffff", "fontSize" to 14, "fontWeight" to "bold"))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/mall/consumer/cart.kt b/unpackage/cache/.app-android/src/pages/mall/consumer/cart.kt deleted file mode 100644 index 03da0ec4..00000000 --- a/unpackage/cache/.app-android/src/pages/mall/consumer/cart.kt +++ /dev/null @@ -1,665 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.getSystemInfoSync as uni_getSystemInfoSync -import io.dcloud.uniapp.extapi.navigateTo as uni_navigateTo -import io.dcloud.uniapp.framework.onShow as onShow__1 -import io.dcloud.uniapp.framework.onLoad as onLoad__1 -import io.dcloud.uniapp.extapi.setStorageSync as uni_setStorageSync -import io.dcloud.uniapp.extapi.showModal as uni_showModal -import io.dcloud.uniapp.extapi.showToast as uni_showToast -import io.dcloud.uniapp.extapi.switchTab as uni_switchTab -open class GenPagesMallConsumerCart : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesMallConsumerCart) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesMallConsumerCart - val _cache = __ins.renderCache - val cartItems = ref(_uA()) - val recommendProducts = ref(_uA()) - val loading = ref(false) - val statusBarHeight = ref(0) - val isManageMode = ref(false) - val updatingItems = ref>(Set()) - val cartGroups = computed>(fun(): UTSArray { - val groups = Map() - cartItems.value.forEach(fun(item: LocalCartItem){ - val shopKey = item.shopId - if (!groups.has(shopKey)) { - groups.set(shopKey, CartGroup(shopId = item.shopId, shopName = item.shopName, merchantId = item.merchantId, items = _uA())) - } - val group = groups.get(shopKey) - if (group != null) { - group.items.push(item) - } - } - ) - val groupArray: UTSArray = _uA() - groups.forEach(fun(value: CartGroup){ - groupArray.push(value) - } - ) - return groupArray - } - ) - val allSelected = computed(fun(): Boolean { - return cartItems.value.length > 0 && cartItems.value.every(fun(item: LocalCartItem): Boolean { - return item.selected - } - ) - } - ) - val selectedCount = computed(fun(): Number { - return cartItems.value.filter(fun(item: LocalCartItem): Boolean { - return item.selected - } - ).reduce(fun(sum: Number, item: LocalCartItem): Number { - return sum + item.quantity - } - , 0) - } - ) - val totalPrice = computed(fun(): String { - return cartItems.value.filter(fun(item: LocalCartItem): Boolean { - return item.selected - } - ).reduce(fun(sum: Number, item: LocalCartItem): Number { - return sum + item.price * item.quantity - } - , 0).toFixed(2) - } - ) - val isShopSelected = fun(shopId: String): Boolean { - val shopItems = cartItems.value.filter(fun(item: LocalCartItem): Boolean { - return item.shopId === shopId - } - ) - return shopItems.length > 0 && shopItems.every(fun(item: LocalCartItem): Boolean { - return item.selected - } - ) - } - val toggleManageMode = fun(){ - isManageMode.value = !isManageMode.value - } - val initPage = fun(){ - val systemInfo = uni_getSystemInfoSync() - statusBarHeight.value = systemInfo.statusBarHeight ?: 0 - } - onMounted(fun(){ - initPage() - } - ) - val loadCartData = fun(): UTSPromise { - return wrapUTSPromise(suspend { - loading.value = true - try { - val supabaseCartItems = await(supabaseService.getCartItems()) - val transformedItems = supabaseCartItems.map(fun(item: CartItem): LocalCartItem { - console.log("CartItem raw: id=" + item.id + ", shop_id=" + item.shop_id + ", shop_name=" + item.shop_name + ", name=" + item.product_name + ", price=" + item.product_price, " at pages/mall/consumer/cart.uvue:288") - val shopId = if ((item.shop_id != null && item.shop_id !== "")) { - item.shop_id!! - } else { - "default_shop" - } - val shopName = if ((item.shop_name != null && item.shop_name !== "")) { - item.shop_name!! - } else { - "商城优选" - } - return LocalCartItem(id = item.id, shopId = shopId, shopName = shopName, name = item.product_name ?: "未知商品", price = if (item.product_price != null) { - item.product_price!! - } else { - 0 - } - , image = item.product_image ?: "/static/images/default-product.png", spec = item.product_specification ?: "标准规格", quantity = item.quantity ?: 1, selected = item.selected ?: false, productId = item.product_id ?: "", skuId = item.sku_id ?: "", merchantId = item.merchant_id ?: "") - } - ) - console.log("Transformed items count:", transformedItems.length, " at pages/mall/consumer/cart.uvue:310") - cartItems.value = transformedItems - var recommends = await(supabaseService.getRecommendedProducts(6)) - if (recommends.length === 0) { - val hotResp = await(supabaseService.searchProducts("", 1, 6, "sales")) - recommends = hotResp.data - } - if (recommends.length > 0) { - recommendProducts.value = recommends.map(fun(p: Product): RecommendProduct { - return RecommendProduct(id = p.id, shopId = p.merchant_id ?: "unknown", shopName = p.shop_name ?: "商城推荐", name = p.name, price = p.base_price ?: p.price ?: 0, image = p.main_image_url ?: "/static/images/default-product.png", skuId = "") - }) - } else { - recommendProducts.value = _uA() - } - } - catch (error: Throwable) { - console.error("加载购物车数据失败:", error, " at pages/mall/consumer/cart.uvue:338") - cartItems.value = _uA() - } - finally { - loading.value = false - } - }) - } - onShow__1(fun(){ - loadCartData() - } - ) - val toggleSelect = fun(itemId: String): UTSPromise { - return wrapUTSPromise(suspend { - val index = cartItems.value.findIndex(fun(item): Boolean { - return item.id === itemId - } - ) - if (index !== -1) { - val newSelected = !cartItems.value[index].selected - cartItems.value[index].selected = newSelected - cartItems.value = cartItems.value.slice() - val success = await(supabaseService.updateCartItemSelection(itemId, newSelected)) - if (!success) { - console.error("更新选中状态失败", " at pages/mall/consumer/cart.uvue:361") - cartItems.value[index].selected = !newSelected - cartItems.value = cartItems.value.slice() - uni_showToast(ShowToastOptions(title = "网络异常,请重试", icon = "none")) - } - } - }) - } - val toggleShopSelect = fun(shopId: String): UTSPromise { - return wrapUTSPromise(suspend w1@{ - val shopItems = cartItems.value.filter(fun(item: LocalCartItem): Boolean { - return item.shopId === shopId - } - ) - if (shopItems.length === 0) { - return@w1 - } - val isAllShopSelected = shopItems.every(fun(item: LocalCartItem): Boolean { - return item.selected - } - ) - val newState = !isAllShopSelected - val shopItemIds = shopItems.map(fun(item: LocalCartItem): String { - return item.id - } - ) - val oldStates = Map() - cartItems.value.forEach(fun(item){ - if (item.shopId === shopId) { - oldStates.set(item.id, item.selected) - item.selected = newState - } - } - ) - cartItems.value = cartItems.value.slice() - val success = await(supabaseService.batchUpdateCartItemSelection(shopItemIds, newState)) - if (!success) { - console.error("批量更新店铺商品选中状态失败", " at pages/mall/consumer/cart.uvue:394") - cartItems.value.forEach(fun(item){ - if (item.shopId === shopId && oldStates.has(item.id)) { - item.selected = oldStates.get(item.id)!! - } - } - ) - cartItems.value = cartItems.value.slice() - uni_showToast(ShowToastOptions(title = "操作失败", icon = "none")) - } - }) - } - val toggleSelectAll = fun(): UTSPromise { - return wrapUTSPromise(suspend w1@{ - val newSelectedState = !allSelected.value - val oldItems = UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(cartItems.value)), " at pages/mall/consumer/cart.uvue:414") as UTSArray - val selectedItems = cartItems.value.map(fun(item): LocalCartItem { - item.selected = newSelectedState - return item - } - ) - cartItems.value = selectedItems - val itemIds = cartItems.value.map(fun(item): String { - return item.id - } - ) - if (itemIds.length === 0) { - return@w1 - } - val success = await(supabaseService.batchUpdateCartItemSelection(itemIds, newSelectedState)) - if (!success) { - console.error("批量更新选中状态失败", " at pages/mall/consumer/cart.uvue:428") - cartItems.value = oldItems - uni_showToast(ShowToastOptions(title = "操作失败", icon = "none")) - } - }) - } - val increaseQuantity = fun(itemId: String): UTSPromise { - return wrapUTSPromise(suspend w1@{ - if (updatingItems.value.has(itemId)) { - return@w1 - } - val index = cartItems.value.findIndex(fun(item): Boolean { - return item.id === itemId - } - ) - if (index !== -1) { - updatingItems.value.add(itemId) - val newQuantity = cartItems.value[index].quantity + 1 - cartItems.value[index].quantity = newQuantity - cartItems.value = cartItems.value.slice() - val success = await(supabaseService.updateCartItemQuantity(itemId, newQuantity)) - updatingItems.value.`delete`(itemId) - if (!success) { - console.error("更新商品数量失败", " at pages/mall/consumer/cart.uvue:452") - cartItems.value[index].quantity = newQuantity - 1 - cartItems.value = cartItems.value.slice() - uni_showToast(ShowToastOptions(title = "更新失败", icon = "none")) - } - } - }) - } - val decreaseQuantity = fun(itemId: String): UTSPromise { - return wrapUTSPromise(suspend w1@{ - if (updatingItems.value.has(itemId)) { - return@w1 - } - val index = cartItems.value.findIndex(fun(item): Boolean { - return item.id === itemId - } - ) - if (index !== -1) { - if (cartItems.value[index].quantity > 1) { - updatingItems.value.add(itemId) - val newQuantity = cartItems.value[index].quantity - 1 - cartItems.value[index].quantity = newQuantity - cartItems.value = cartItems.value.slice() - val success = await(supabaseService.updateCartItemQuantity(itemId, newQuantity)) - updatingItems.value.`delete`(itemId) - if (!success) { - console.error("更新商品数量失败", " at pages/mall/consumer/cart.uvue:477") - cartItems.value[index].quantity = newQuantity + 1 - cartItems.value = cartItems.value.slice() - uni_showToast(ShowToastOptions(title = "更新失败", icon = "none")) - } - } else { - uni_showModal(ShowModalOptions(title = "提示", content = "确定要从购物车移除该商品吗?", success = fun(res){ - if (res.confirm) { - supabaseService.deleteCartItem(itemId).then(fun(success){ - if (success) { - cartItems.value.splice(index, 1) - cartItems.value = cartItems.value.slice() - uni_showToast(ShowToastOptions(title = "已移除", icon = "none")) - } else { - console.error("删除商品失败", " at pages/mall/consumer/cart.uvue:500") - uni_showToast(ShowToastOptions(title = "删除失败", icon = "none")) - } - } - ) - } - } - )) - } - } - }) - } - val deleteSelectedItems = fun(): UTSPromise { - return wrapUTSPromise(suspend w1@{ - if (selectedCount.value === 0) { - uni_showToast(ShowToastOptions(title = "请选择要删除的商品", icon = "none")) - return@w1 - } - uni_showModal(ShowModalOptions(title = "提示", content = "确定要删除选中的 " + selectedCount.value + " 件商品吗?", success = fun(res){ - if (res.confirm) { - val selectedItemIds = cartItems.value.filter(fun(item): Boolean { - return item.selected - } - ).map(fun(item): String { - return item.id - } - ) - supabaseService.batchDeleteCartItems(selectedItemIds).then(fun(success){ - if (success) { - cartItems.value = cartItems.value.filter(fun(item): Boolean { - return !item.selected - }) - if (cartItems.value.length === 0) { - isManageMode.value = false - } - uni_showToast(ShowToastOptions(title = "删除成功", icon = "success")) - } else { - console.error("批量删除商品失败", " at pages/mall/consumer/cart.uvue:549") - uni_showToast(ShowToastOptions(title = "删除失败", icon = "none")) - } - } - ) - } - } - )) - }) - } - val addToCart = fun(product: Any): UTSPromise { - return wrapUTSPromise(suspend { - try { - val target = product as UTSJSONObject - val productId = target.getString("id") ?: "" - val skuId = target.getString("skuId") ?: "" - val success = await(supabaseService.addToCart(productId, 1, skuId)) - if (success) { - uni_showToast(ShowToastOptions(title = "已添加到购物车", icon = "success")) - loadCartData() - } else { - console.error("添加商品到购物车失败", " at pages/mall/consumer/cart.uvue:578") - uni_showToast(ShowToastOptions(title = "添加失败", icon = "none")) - } - } - catch (error: Throwable) { - console.error("添加商品到购物车异常:", error, " at pages/mall/consumer/cart.uvue:585") - uni_showToast(ShowToastOptions(title = "添加失败", icon = "none")) - } - }) - } - val navigateToShop = fun(shopId: String, merchantId: Any){ - if (shopId == "" || shopId === "default_shop" || shopId === "unknown") { - return - } - var url = "/pages/mall/consumer/shop-detail?id=" + shopId - if (merchantId != null) { - val mId = "" + merchantId - if (mId !== "" && mId !== "null" && mId !== "undefined" && mId !== "false") { - url += "&merchantId=" + mId - } - } - uni_navigateTo(NavigateToOptions(url = url)) - } - val goShopping = fun(){ - uni_switchTab(SwitchTabOptions(url = "/pages/mall/consumer/index")) - } - val navigateToProduct = fun(product: Any){ - console.log("navigateToProduct", product, " at pages/mall/consumer/cart.uvue:613") - val productJson = UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(product)), " at pages/mall/consumer/cart.uvue:616") as UTSJSONObject - var productId = productJson.getString("productId") - if (productId == null || productId == "") { - productId = productJson.getString("id") - } - if (productId == null || productId == "") { - console.error("无法获取商品ID", product, " at pages/mall/consumer/cart.uvue:625") - return - } - var paramsArr: UTSArray = _uA() - paramsArr.push("id=" + UTSAndroid.consoleDebugError(encodeURIComponent(productId), " at pages/mall/consumer/cart.uvue:631")) - paramsArr.push("productId=" + UTSAndroid.consoleDebugError(encodeURIComponent(productId), " at pages/mall/consumer/cart.uvue:632")) - val price = productJson.getNumber("price") ?: 0 - paramsArr.push("price=" + price) - var originalPrice = productJson.getNumber("original_price") - if (originalPrice == null) { - originalPrice = productJson.getNumber("originalPrice") - } - if (originalPrice == null) { - originalPrice = parseFloat((price * 1.2).toFixed(2)) - } - paramsArr.push("originalPrice=" + originalPrice) - val name = productJson.getString("name") ?: "" - paramsArr.push("name=" + UTSAndroid.consoleDebugError(encodeURIComponent(name), " at pages/mall/consumer/cart.uvue:647")) - val image = productJson.getString("image") ?: "/static/product1.jpg" - paramsArr.push("image=" + UTSAndroid.consoleDebugError(encodeURIComponent(image), " at pages/mall/consumer/cart.uvue:650")) - val url = "/pages/mall/consumer/product-detail?" + paramsArr.join("&") - console.log("Navigate to:", url, " at pages/mall/consumer/cart.uvue:653") - uni_navigateTo(NavigateToOptions(url = url)) - } - val goToCheckout = fun(){ - if (selectedCount.value === 0) { - uni_showToast(ShowToastOptions(title = "请选择商品", icon = "none")) - return - } - val selectedItems = cartItems.value.filter(fun(item): Boolean { - return item.selected - } - ).map(fun(item): UTSJSONObject { - return (object : UTSJSONObject() { - var id = item.id - var product_id = item.productId ?: item.id - var sku_id = item.skuId ?: item.id - var product_name = item.name - var shop_id = item.shopId - var shop_name = item.shopName - var merchant_id = item.merchantId - var product_image = item.image - var sku_specifications = item.spec - var price = item.price - var quantity = item.quantity - }) - } - ) - uni_setStorageSync("checkout_type", "cart") - try { - uni_setStorageSync("checkout_items", JSON.stringify(selectedItems)) - } - catch (e: Throwable) { - console.error("存储结算数据失败", e, " at pages/mall/consumer/cart.uvue:692") - uni_showToast(ShowToastOptions(title = "系统异常,请重试", icon = "none")) - return - } - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/checkout")) - } - return fun(): Any? { - return _cE("view", _uM("class" to "cart-page"), _uA( - _cE("view", _uM("class" to "smart-navbar", "style" to _nS(_uM("paddingTop" to (statusBarHeight.value + "px")))), _uA( - _cE("view", _uM("class" to "nav-container"), _uA( - _cE("text", _uM("class" to "nav-title"), "购物车"), - _cE("view", _uM("class" to "nav-actions"), _uA( - _cE("view", _uM("class" to "action-btn", "onClick" to toggleManageMode), _uA( - _cE("text", _uM("class" to "action-icon"), _tD(if (isManageMode.value) { - "✓" - } else { - "⚙️" - } - ), 1), - _cE("text", _uM("class" to "action-text"), _tD(if (isManageMode.value) { - "完成" - } else { - "管理" - } - ), 1) - )) - )) - )) - ), 4), - _cE("scroll-view", _uM("scroll-y" to "", "class" to "cart-content", "style" to _nS(_uM("paddingTop" to ((statusBarHeight.value + 10) + "px")))), _uA( - if (isTrue(!loading.value && cartItems.value.length === 0)) { - _cE("view", _uM("key" to 0, "class" to "empty-cart"), _uA( - _cE("text", _uM("class" to "empty-icon"), "🛒"), - _cE("text", _uM("class" to "empty-title"), "购物车是空的"), - _cE("text", _uM("class" to "empty-desc"), "快去挑选喜欢的商品吧"), - _cE("button", _uM("class" to "go-shopping-btn", "onClick" to goShopping), "去逛逛") - )) - } else { - _cE("view", _uM("key" to 1, "class" to "cart-list"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(cartGroups.value, fun(group, __key, __index, _cached): Any { - return _cE("view", _uM("key" to group.shopId, "class" to "shop-group"), _uA( - _cE("view", _uM("class" to "shop-header"), _uA( - _cE("view", _uM("class" to "shop-select", "onClick" to fun(){ - toggleShopSelect(group.shopId) - } - ), _uA( - if (isTrue(isShopSelected(group.shopId))) { - _cE("text", _uM("key" to 0, "class" to "selected-icon"), "✓") - } else { - _cE("text", _uM("key" to 1, "class" to "unselected-icon")) - } - ), 8, _uA( - "onClick" - )), - _cE("text", _uM("class" to "shop-icon", "onClick" to fun(){ - navigateToShop(group.shopId, group.merchantId) - } - ), "🏪", 8, _uA( - "onClick" - )), - _cE("text", _uM("class" to "shop-name", "lines" to 1, "onClick" to fun(){ - navigateToShop(group.shopId, group.merchantId) - } - ), _tD(group.shopName), 9, _uA( - "onClick" - )), - _cE("text", _uM("class" to "shop-arrow", "onClick" to fun(){ - navigateToShop(group.shopId, group.merchantId) - } - ), ">", 8, _uA( - "onClick" - )) - )), - _cE(Fragment, null, RenderHelpers.renderList(group.items, fun(item, __key, __index, _cached): Any { - return _cE("view", _uM("key" to item.id, "class" to "cart-item"), _uA( - _cE("view", _uM("class" to "item-select", "onClick" to fun(){ - toggleSelect(item.id) - } - ), _uA( - if (isTrue(item.selected)) { - _cE("text", _uM("key" to 0, "class" to "selected-icon"), "✓") - } else { - _cE("text", _uM("key" to 1, "class" to "unselected-icon")) - } - ), 8, _uA( - "onClick" - )), - _cE("image", _uM("class" to "item-image", "src" to item.image, "mode" to "aspectFill", "onClick" to fun(){ - navigateToProduct(item) - } - ), null, 8, _uA( - "src", - "onClick" - )), - _cE("view", _uM("class" to "item-info"), _uA( - _cE("view", _uM("class" to "info-top"), _uA( - _cE("text", _uM("class" to "item-name", "lines" to 1), _tD(item.name), 1), - _cE("text", _uM("class" to "item-spec"), _tD(item.spec), 1) - )), - _cE("view", _uM("class" to "item-footer"), _uA( - _cE("text", _uM("class" to "item-price"), "¥" + _tD(item.price), 1), - _cE("view", _uM("class" to "quantity-control"), _uA( - _cE("text", _uM("class" to "quantity-btn", "onClick" to fun(){ - decreaseQuantity(item.id) - } - ), "-", 8, _uA( - "onClick" - )), - _cE("text", _uM("class" to "quantity-value"), _tD(item.quantity), 1), - _cE("text", _uM("class" to "quantity-btn", "onClick" to fun(){ - increaseQuantity(item.id) - } - ), "+", 8, _uA( - "onClick" - )) - )) - )) - )) - )) - } - ), 128) - )) - } - ), 128) - )) - } - , - if (cartItems.value.length > 0) { - _cE("view", _uM("key" to 2, "class" to "cart-action-bar"), _uA( - _cE("view", _uM("class" to "action-bar-content"), _uA( - _cE("view", _uM("class" to "action-left"), _uA( - _cE("view", _uM("class" to "select-all", "onClick" to toggleSelectAll), _uA( - if (isTrue(allSelected.value)) { - _cE("text", _uM("key" to 0, "class" to "selected-icon"), "✓") - } else { - _cE("text", _uM("key" to 1, "class" to "unselected-icon")) - }, - _cE("text", _uM("class" to "select-all-text"), "全选") - )) - )), - _cE("view", _uM("class" to "action-right"), _uA( - if (isTrue(!isManageMode.value)) { - _cE("view", _uM("key" to 0, "class" to "total-info"), _uA( - _cE("text", _uM("class" to "total-text"), "合计:"), - _cE("text", _uM("class" to "total-price"), "¥" + _tD(totalPrice.value), 1) - )) - } else { - _cC("v-if", true) - }, - if (isTrue(!isManageMode.value)) { - _cE("button", _uM("key" to 1, "class" to "checkout-btn", "onClick" to goToCheckout), " 去结算(" + _tD(selectedCount.value) + ") ", 1) - } else { - _cE("button", _uM("key" to 2, "class" to "delete-btn", "onClick" to deleteSelectedItems), " 删除(" + _tD(selectedCount.value) + ") ", 1) - } - )) - )) - )) - } else { - _cC("v-if", true) - } - , - if (recommendProducts.value.length > 0) { - _cE("view", _uM("key" to 3, "class" to "recommend-section"), _uA( - _cE("view", _uM("class" to "section-header"), _uA( - _cE("text", _uM("class" to "section-title"), "猜你喜欢") - )), - _cE("view", _uM("class" to "recommend-list"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(recommendProducts.value, fun(product, __key, __index, _cached): Any { - return _cE("view", _uM("key" to product.id, "class" to "recommend-item", "onClick" to fun(){ - navigateToProduct(product) - }), _uA( - _cE("image", _uM("class" to "recommend-image", "src" to product.image, "mode" to "aspectFill"), null, 8, _uA( - "src" - )), - _cE("text", _uM("class" to "recommend-name", "lines" to 2), _tD(product.name), 1), - _cE("view", _uM("class" to "recommend-bottom"), _uA( - _cE("text", _uM("class" to "recommend-price"), "¥" + _tD(product.price), 1), - _cE("view", _uM("class" to "recommend-add-btn", "onClick" to withModifiers(fun(){ - addToCart(product) - }, _uA( - "stop" - ))), _uA( - _cE("text", _uM("class" to "recommend-add-icon"), "+") - ), 8, _uA( - "onClick" - )) - )) - ), 8, _uA( - "onClick" - )) - }), 128) - )) - )) - } else { - _cC("v-if", true) - } - ), 4) - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("cart-page" to _pS(_uM("width" to "100%", "height" to "100%", "backgroundColor" to "#f5f5f5", "display" to "flex", "flexDirection" to "column")), "smart-navbar" to _pS(_uM("position" to "fixed", "top" to 0, "left" to 0, "right" to 0, "backgroundImage" to "linear-gradient(135deg, #4CAF50 0%, #2E7D32 100%)", "backgroundColor" to "rgba(0,0,0,0)", "zIndex" to 1000, "boxShadow" to "0 2px 12px rgba(76, 175, 80, 0.15)", "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "center", "flexShrink" to 0)), "nav-container" to _pS(_uM("paddingTop" to 0, "paddingRight" to 16, "paddingBottom" to 0, "paddingLeft" to 16, "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "space-between", "width" to "100%", "maxWidth" to 1400, "marginTop" to 0, "marginRight" to "auto", "marginBottom" to 0, "marginLeft" to "auto", "height" to 44)), "nav-title" to _pS(_uM("fontSize" to 18, "fontWeight" to "bold", "color" to "#FFFFFF")), "nav-actions" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center")), "action-btn" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center", "backgroundImage" to "none", "backgroundColor" to "rgba(255,255,255,0.2)", "paddingTop" to 4, "paddingRight" to 12, "paddingBottom" to 4, "paddingLeft" to 12, "borderTopLeftRadius" to 20, "borderTopRightRadius" to 20, "borderBottomRightRadius" to 20, "borderBottomLeftRadius" to 20, "transitionProperty" to "all", "transitionDuration" to "0.2s", "transitionTimingFunction" to "ease", "backgroundImage:hover" to "none", "backgroundColor:hover" to "rgba(255,255,255,0.3)")), "action-icon" to _pS(_uM("fontSize" to 14, "marginRight" to 4, "color" to "#FFFFFF")), "action-text" to _pS(_uM("fontSize" to 12, "color" to "#FFFFFF", "fontWeight" to "bold")), "navbar-placeholder" to _pS(_uM("width" to "100%", "flexShrink" to 0)), "cart-content" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "height" to 0, "paddingBottom" to 60)), "empty-cart" to _pS(_uM("display" to "flex", "flexDirection" to "column", "alignItems" to "center", "justifyContent" to "center", "paddingTop" to 60, "paddingRight" to 20, "paddingBottom" to 60, "paddingLeft" to 20, "textAlign" to "center")), "empty-icon" to _pS(_uM("fontSize" to 80, "color" to "#dddddd", "marginBottom" to 20)), "empty-title" to _pS(_uM("fontSize" to 18, "color" to "#666666", "marginBottom" to 10)), "empty-desc" to _pS(_uM("fontSize" to 14, "color" to "#999999", "marginBottom" to 30)), "go-shopping-btn" to _pS(_uM("backgroundColor" to "#ff5000", "color" to "#FFFFFF", "borderTopWidth" to "medium", "borderRightWidth" to "medium", "borderBottomWidth" to "medium", "borderLeftWidth" to "medium", "borderTopStyle" to "none", "borderRightStyle" to "none", "borderBottomStyle" to "none", "borderLeftStyle" to "none", "borderTopColor" to "#000000", "borderRightColor" to "#000000", "borderBottomColor" to "#000000", "borderLeftColor" to "#000000", "borderTopLeftRadius" to 25, "borderTopRightRadius" to 25, "borderBottomRightRadius" to 25, "borderBottomLeftRadius" to 25, "paddingTop" to 10, "paddingRight" to 40, "paddingBottom" to 10, "paddingLeft" to 40, "fontSize" to 16)), "cart-list" to _pS(_uM("backgroundColor" to "rgba(0,0,0,0)", "marginTop" to 10, "marginRight" to 10, "marginBottom" to 10, "marginLeft" to 10, "borderTopLeftRadius" to 0, "borderTopRightRadius" to 0, "borderBottomRightRadius" to 0, "borderBottomLeftRadius" to 0, "overflow" to "visible")), "shop-group" to _pS(_uM("backgroundColor" to "#FFFFFF", "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "marginBottom" to 12, "overflow" to "hidden")), "shop-header" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "flex-start", "paddingTop" to 12, "paddingRight" to 12, "paddingBottom" to 12, "paddingLeft" to 12, "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#f5f5f5")), "shop-select" to _pS(_uM("width" to 24, "height" to 24, "display" to "flex", "alignItems" to "center", "justifyContent" to "center", "marginRight" to 8, "flexShrink" to 0)), "shop-icon" to _pS(_uM("fontSize" to 16, "marginRight" to 6, "flexShrink" to 0)), "shop-name" to _pS(_uM("fontSize" to 14, "fontWeight" to "700", "color" to "#333333", "marginRight" to 4, "overflow" to "hidden", "textOverflow" to "ellipsis", "whiteSpace" to "nowrap")), "shop-arrow" to _pS(_uM("fontSize" to 12, "color" to "#999999", "flexShrink" to 0)), "cart-item" to _pS(_uM("display" to "flex", "flexDirection" to "row", "paddingTop" to 12, "paddingRight" to 12, "paddingBottom" to 12, "paddingLeft" to 12, "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#f5f5f5", "alignItems" to "center", "height" to 100, "borderBottomWidth:last-child" to "medium", "borderBottomStyle:last-child" to "none", "borderBottomColor:last-child" to "#000000")), "item-select" to _pS(_uM("width" to 30, "height" to "100%", "display" to "flex", "alignItems" to "center", "justifyContent" to "center", "marginRight" to 5)), "selected-icon" to _pS(_uM("width" to 18, "height" to 18, "backgroundColor" to "#ff5000", "color" to "#FFFFFF", "borderTopLeftRadius" to 9, "borderTopRightRadius" to 9, "borderBottomRightRadius" to 9, "borderBottomLeftRadius" to 9, "display" to "flex", "alignItems" to "center", "justifyContent" to "center", "fontSize" to 10)), "unselected-icon" to _pS(_uM("width" to 18, "height" to 18, "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#dddddd", "borderRightColor" to "#dddddd", "borderBottomColor" to "#dddddd", "borderLeftColor" to "#dddddd", "borderTopLeftRadius" to 9, "borderTopRightRadius" to 9, "borderBottomRightRadius" to 9, "borderBottomLeftRadius" to 9)), "item-image" to _pS(_uM("width" to 70, "height" to 70, "borderTopLeftRadius" to 6, "borderTopRightRadius" to 6, "borderBottomRightRadius" to 6, "borderBottomLeftRadius" to 6, "marginRight" to 10, "flexShrink" to 0)), "item-info" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "display" to "flex", "flexDirection" to "column", "justifyContent" to "space-between", "height" to 70, "overflow" to "hidden")), "info-top" to _pS(_uM("display" to "flex", "flexDirection" to "column")), "item-name" to _pS(_uM("fontSize" to 14, "color" to "#333333", "marginBottom" to 2, "overflow" to "hidden", "fontWeight" to "bold", "textOverflow" to "ellipsis")), "item-spec" to _pS(_uM("fontSize" to 12, "color" to "#999999", "marginBottom" to "auto")), "item-footer" to _pS(_uM("display" to "flex", "flexDirection" to "row", "justifyContent" to "space-between", "alignItems" to "center", "width" to "100%")), "item-price" to _pS(_uM("fontSize" to 16, "color" to "#ff5000", "fontWeight" to "bold")), "quantity-control" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center", "backgroundColor" to "#f5f5f5", "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "overflow" to "hidden", "height" to 24)), "quantity-btn" to _pS(_uM("width" to 24, "height" to 24, "display" to "flex", "alignItems" to "center", "justifyContent" to "center", "fontSize" to 14, "color" to "#666666")), "quantity-value" to _pS(_uM("width" to 30, "textAlign" to "center", "fontSize" to 13, "lineHeight" to "24px")), "recommend-section" to _pS(_uM("marginTop" to 20, "marginRight" to 10, "marginBottom" to 20, "marginLeft" to 10, "backgroundColor" to "#FFFFFF", "borderTopLeftRadius" to 10, "borderTopRightRadius" to 10, "borderBottomRightRadius" to 10, "borderBottomLeftRadius" to 10, "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15)), "section-header" to _pS(_uM("marginBottom" to 15)), "section-title" to _pS(_uM("fontSize" to 16, "fontWeight" to "bold", "color" to "#333333")), "recommend-list" to _pS(_uM("display" to "flex", "flexDirection" to "row", "flexWrap" to "wrap", "justifyContent" to "space-between")), "recommend-item" to _pS(_uM("display" to "flex", "flexDirection" to "column", "backgroundImage" to "none", "backgroundColor" to "#ffffff", "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "overflow" to "hidden", "width" to "48%", "marginBottom" to 12)), "recommend-image" to _pS(_uM("width" to "100%", "height" to 170, "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "marginBottom" to 8, "backgroundImage" to "none", "backgroundColor" to "#f5f5f5")), "recommend-name" to _pS(_uM("fontSize" to 13, "color" to "#333333", "marginBottom" to 5, "lineHeight" to 1.4, "height" to 36, "overflow" to "hidden", "textOverflow" to "ellipsis")), "recommend-bottom" to _pS(_uM("display" to "flex", "flexDirection" to "row", "justifyContent" to "space-between", "alignItems" to "center", "paddingRight" to 8)), "recommend-price" to _pS(_uM("fontSize" to 15, "color" to "#ff5000", "fontWeight" to "bold")), "recommend-add-btn" to _pS(_uM("width" to 24, "height" to 24, "backgroundColor" to "#ff5000", "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "display" to "flex", "alignItems" to "center", "justifyContent" to "center")), "recommend-add-icon" to _pS(_uM("color" to "#FFFFFF", "fontSize" to 16, "lineHeight" to 1, "fontWeight" to "bold")), "cart-action-bar" to _pS(_uM("backgroundColor" to "#FFFFFF", "marginTop" to 10, "marginRight" to 10, "marginBottom" to 10, "marginLeft" to 10, "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "paddingTop" to 10, "paddingRight" to 15, "paddingBottom" to 10, "paddingLeft" to 15, "boxShadow" to "0 2px 8px rgba(0,0,0,0.05)")), "action-bar-content" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "space-between", "width" to "100%")), "action-left" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center", "flexShrink" to 0)), "action-right" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "flex-end", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "minWidth" to 0)), "total-info" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center", "marginRight" to 10, "flexShrink" to 1, "overflow" to "hidden")), "total-text" to _pS(_uM("fontSize" to 14, "color" to "#333333", "marginRight" to 2, "whiteSpace" to "nowrap", "flexShrink" to 0)), "total-price" to _pS(_uM("fontSize" to 16, "color" to "#ff5000", "fontWeight" to "bold", "whiteSpace" to "nowrap", "overflow" to "hidden", "textOverflow" to "ellipsis")), "checkout-btn" to _pS(_uM("backgroundColor" to "#ff5000", "color" to "#FFFFFF", "borderTopWidth" to "medium", "borderRightWidth" to "medium", "borderBottomWidth" to "medium", "borderLeftWidth" to "medium", "borderTopStyle" to "none", "borderRightStyle" to "none", "borderBottomStyle" to "none", "borderLeftStyle" to "none", "borderTopColor" to "#000000", "borderRightColor" to "#000000", "borderBottomColor" to "#000000", "borderLeftColor" to "#000000", "borderTopLeftRadius" to 25, "borderTopRightRadius" to 25, "borderBottomRightRadius" to 25, "borderBottomLeftRadius" to 25, "paddingTop" to 6, "paddingRight" to 16, "paddingBottom" to 6, "paddingLeft" to 16, "fontSize" to 14, "whiteSpace" to "nowrap", "flexShrink" to 0, "marginTop" to 0, "marginRight" to 0, "marginBottom" to 0, "marginLeft" to 0)), "delete-btn" to _pS(_uM("backgroundColor" to "#ff3b30", "color" to "#FFFFFF", "borderTopWidth" to "medium", "borderRightWidth" to "medium", "borderBottomWidth" to "medium", "borderLeftWidth" to "medium", "borderTopStyle" to "none", "borderRightStyle" to "none", "borderBottomStyle" to "none", "borderLeftStyle" to "none", "borderTopColor" to "#000000", "borderRightColor" to "#000000", "borderBottomColor" to "#000000", "borderLeftColor" to "#000000", "borderTopLeftRadius" to 25, "borderTopRightRadius" to 25, "borderBottomRightRadius" to 25, "borderBottomLeftRadius" to 25, "paddingTop" to 6, "paddingRight" to 20, "paddingBottom" to 6, "paddingLeft" to 20, "fontSize" to 14, "whiteSpace" to "nowrap", "flexShrink" to 0, "marginTop" to 0, "marginRight" to 0, "marginBottom" to 0, "marginLeft" to 0)), "select-all" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center")), "select-all-text" to _pS(_uM("marginLeft" to 8, "fontSize" to 14, "color" to "#333333", "whiteSpace" to "nowrap")), "@TRANSITION" to _uM("action-btn" to _uM("property" to "all", "duration" to "0.2s", "timingFunction" to "ease"))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/mall/consumer/category.kt b/unpackage/cache/.app-android/src/pages/mall/consumer/category.kt deleted file mode 100644 index 7c55cf21..00000000 --- a/unpackage/cache/.app-android/src/pages/mall/consumer/category.kt +++ /dev/null @@ -1,538 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.chooseImage as uni_chooseImage -import io.dcloud.uniapp.extapi.getStorageSync as uni_getStorageSync -import io.dcloud.uniapp.extapi.hideLoading as uni_hideLoading -import io.dcloud.uniapp.extapi.navigateTo as uni_navigateTo -import io.dcloud.uniapp.extapi.removeStorageSync as uni_removeStorageSync -import io.dcloud.uniapp.extapi.scanCode as uni_scanCode -import io.dcloud.uniapp.extapi.showLoading as uni_showLoading -import io.dcloud.uniapp.extapi.showToast as uni_showToast -open class GenPagesMallConsumerCategory : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesMallConsumerCategory) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesMallConsumerCategory - val _cache = __ins.renderCache - val statusBarHeight = ref(0) - val headerHeight = ref(44) - val primaryCategories = ref(_uA()) - val productList = ref(_uA()) - val activePrimary = ref("") - val cartCount = ref(3) - val hasMore = ref(true) - val hasLoadedFromParams = ref(false) - val currentPage = ref(1) - val loading = ref(false) - val currentCategoryName = ref("") - val currentCategoryDesc = ref("") - val pageParams = ref(UTSJSONObject() as Any) - fun gen_loadProducts_fn(): UTSPromise { - return wrapUTSPromise(suspend w1@{ - if (loading.value) { - return@w1 - } - if (activePrimary.value == "") { - console.warn("activePrimary为空,无法加载商品", " at pages/mall/consumer/category.uvue:149") - return@w1 - } - loading.value = true - try { - console.log("开始加载商品,分类ID:", activePrimary.value, "页码:", currentPage.value, " at pages/mall/consumer/category.uvue:155") - val response = await(supabaseService.getProductsByCategory(activePrimary.value, currentPage.value)) - console.log("商品加载结果:", object : UTSJSONObject() { - var dataCount = response.data.length - var total = response.total - var hasmore = response.hasmore - var page = currentPage.value - }, " at pages/mall/consumer/category.uvue:157") - if (currentPage.value === 1) { - productList.value = response.data - } else { - productList.value.push(*response.data.toTypedArray()) - } - hasMore.value = response.hasmore - val category = primaryCategories.value.find(fun(cat: LocalCategory): Boolean { - return cat.id === activePrimary.value - } - ) - if (category != null) { - currentCategoryName.value = category.name - currentCategoryDesc.value = category.description - } - console.log("商品列表加载完成,当前总数量:", productList.value.length, " at pages/mall/consumer/category.uvue:179") - } - catch (error: Throwable) { - console.error("加载商品数据失败:", error, " at pages/mall/consumer/category.uvue:181") - if (currentPage.value === 1) { - productList.value = _uA() - } - } - finally { - loading.value = false - } - }) - } - val loadProducts = ::gen_loadProducts_fn - fun gen_loadCategories_fn(): UTSPromise { - return wrapUTSPromise(suspend { - try { - val categoriesData = await(supabaseService.getCategories()) - console.log("加载分类数据成功,数量:", categoriesData.length, " at pages/mall/consumer/category.uvue:193") - val categories: UTSArray = _uA() - val rawList = categoriesData as UTSArray - run { - var i: Number = 0 - while(i < rawList.length){ - val raw = rawList[i] - val catObj = if ((raw is UTSJSONObject)) { - (raw as UTSJSONObject) - } else { - (UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(raw)), " at pages/mall/consumer/category.uvue:201") as UTSJSONObject) - } - val name = catObj.getString("name") ?: "" - if (name.includes("医药") || name.includes("健康")) { - i++ - continue - } - val id = catObj.getString("id") ?: "" - val description = catObj.getString("description") ?: "" - val icon = catObj.getString("icon") ?: catObj.getString("icon_url") ?: "📦" - val color = catObj.getString("color") ?: "#4CAF50" - categories.push(LocalCategory(id = id, name = name, icon = icon, description = description, color = color)) - i++ - } - } - if (categories.length > 0) { - primaryCategories.value = categories - if (activePrimary.value == "") { - val defaultCategory = categories.find(fun(c: LocalCategory): Boolean { - return c.name.includes("厨具") - }) ?: categories[0] - activePrimary.value = defaultCategory.id - console.log("设置默认分类为:", defaultCategory.name, "ID:", defaultCategory.id, " at pages/mall/consumer/category.uvue:227") - currentCategoryName.value = defaultCategory.name - currentCategoryDesc.value = defaultCategory.description - } else { - val current = categories.find(fun(c: LocalCategory): Boolean { - return c.id == activePrimary.value - }) - if (current != null) { - currentCategoryName.value = current.name - currentCategoryDesc.value = current.description - if (productList.value.length === 0 && !loading.value) { - loadProducts() - } - } - } - } else { - console.warn("从Supabase获取的分类数据为空", " at pages/mall/consumer/category.uvue:243") - } - } - catch (error: Throwable) { - console.error("加载分类数据失败:", error, " at pages/mall/consumer/category.uvue:246") - } - }) - } - val loadCategories = ::gen_loadCategories_fn - fun gen_loadMore_fn(): Unit { - if (hasMore.value && !loading.value) { - currentPage.value++ - loadProducts() - } - } - val loadMore = ::gen_loadMore_fn - fun gen_selectPrimaryCategory_fn(reassignedCategoryId: String): UTSPromise { - var categoryId = reassignedCategoryId - return wrapUTSPromise(suspend w1@{ - console.log("=== selectPrimaryCategory函数开始执行 ===", " at pages/mall/consumer/category.uvue:260") - console.log("传入的categoryId:", categoryId, " at pages/mall/consumer/category.uvue:261") - console.log("当前时间:", Date.now(), " at pages/mall/consumer/category.uvue:262") - if (categoryId == "") { - console.error("categoryId为空,尝试使用第一个分类", " at pages/mall/consumer/category.uvue:266") - if (primaryCategories.value.length > 0) { - categoryId = primaryCategories.value[0].id - } else { - console.error("没有可用的分类", " at pages/mall/consumer/category.uvue:270") - return@w1 - } - } - console.log("验证后的categoryId:", categoryId, " at pages/mall/consumer/category.uvue:275") - console.log("当前activePrimary的值:", activePrimary.value, " at pages/mall/consumer/category.uvue:276") - activePrimary.value = categoryId - console.log("更新后的activePrimary:", activePrimary.value, " at pages/mall/consumer/category.uvue:280") - val category = primaryCategories.value.find(fun(cat: LocalCategory): Boolean { - return cat.id === categoryId - } - ) - if (category != null) { - currentCategoryName.value = category.name - currentCategoryDesc.value = category.description - console.log("✅ 找到分类:", category.name, "描述:", category.description, " at pages/mall/consumer/category.uvue:287") - } else { - console.error("❌ 未找到分类ID:", categoryId, ",使用第一个分类", " at pages/mall/consumer/category.uvue:289") - if (primaryCategories.value.length > 0) { - val firstCategory = primaryCategories.value[0] - currentCategoryName.value = firstCategory.name - currentCategoryDesc.value = firstCategory.description - activePrimary.value = firstCategory.id - categoryId = firstCategory.id - console.log("使用默认分类:", firstCategory.name, " at pages/mall/consumer/category.uvue:297") - } - } - console.log("准备加载商品数据...", " at pages/mall/consumer/category.uvue:301") - currentPage.value = 1 - hasMore.value = true - await(loadProducts()) - console.log("✅ 加载商品数据成功", " at pages/mall/consumer/category.uvue:308") - console.log("分类:", categoryId, " at pages/mall/consumer/category.uvue:309") - console.log("商品数量:", productList.value.length, " at pages/mall/consumer/category.uvue:310") - console.log("商品列表:", productList.value, " at pages/mall/consumer/category.uvue:311") - console.log("数据更新验证:", " at pages/mall/consumer/category.uvue:314") - console.log("activePrimary:", activePrimary.value, " at pages/mall/consumer/category.uvue:315") - console.log("currentCategoryName:", currentCategoryName.value, " at pages/mall/consumer/category.uvue:316") - console.log("currentCategoryDesc:", currentCategoryDesc.value, " at pages/mall/consumer/category.uvue:317") - console.log("productList长度:", productList.value.length, " at pages/mall/consumer/category.uvue:318") - console.log("=== selectPrimaryCategory函数执行完成 ===", " at pages/mall/consumer/category.uvue:320") - }) - } - val selectPrimaryCategory = ::gen_selectPrimaryCategory_fn - onMounted(fun(){ - loadCategories().then(fun(){ - setTimeout(fun(){ - if (!hasLoadedFromParams.value && activePrimary.value != "") { - loadProducts() - } - } - , 300) - } - ) - } - ) - onLoad(fun(options: Any){ - console.log("=== category页面onLoad被调用 ===", " at pages/mall/consumer/category.uvue:336") - console.log("页面加载时间:", Date.now(), " at pages/mall/consumer/category.uvue:337") - console.log("传入的options参数:", options, " at pages/mall/consumer/category.uvue:338") - console.log("当前活动分类:", activePrimary.value, " at pages/mall/consumer/category.uvue:339") - var categoryId = "" - var categoryName = "" - val optObj = if ((options is UTSJSONObject)) { - (options as UTSJSONObject) - } else { - (UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(options ?: UTSJSONObject())), " at pages/mall/consumer/category.uvue:345") as UTSJSONObject) - } - val optCategoryId = optObj.getString("categoryId") ?: "" - if (optCategoryId !== "") { - categoryId = optCategoryId - categoryName = optObj.getString("name") ?: "" - console.log("✅ onLoad中找到分类参数:", categoryId, categoryName, " at pages/mall/consumer/category.uvue:350") - } - if (categoryId == "") { - val pages = getCurrentPages() - if (pages.length > 0) { - val currentPage = pages[pages.length - 1] - val rawPageOptions = currentPage.options ?: UTSJSONObject() - console.log("从getCurrentPages()获取参数:", rawPageOptions, " at pages/mall/consumer/category.uvue:359") - val pageOptObj = if ((rawPageOptions is UTSJSONObject)) { - (rawPageOptions as UTSJSONObject) - } else { - (UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(rawPageOptions)), " at pages/mall/consumer/category.uvue:360") as UTSJSONObject) - } - val pageCategoryId = pageOptObj.getString("categoryId") ?: "" - if (pageCategoryId !== "") { - categoryId = pageCategoryId - categoryName = pageOptObj.getString("name") ?: "" - console.log("✅ 从getCurrentPages()找到分类参数:", categoryId, categoryName, " at pages/mall/consumer/category.uvue:365") - } - } - } - if (categoryId != "") { - hasLoadedFromParams.value = true - console.log("✅ 准备选中分类:", categoryId, " at pages/mall/consumer/category.uvue:373") - console.log("分类名称:", categoryName ?: "未指定", " at pages/mall/consumer/category.uvue:374") - if (activePrimary.value !== categoryId) { - console.log("当前分类:", activePrimary.value, "与目标分类:", categoryId, "不同,需要更新", " at pages/mall/consumer/category.uvue:378") - console.log("准备调用selectPrimaryCategory函数...", " at pages/mall/consumer/category.uvue:379") - selectPrimaryCategory(categoryId) - } else { - console.log("当前分类已经是目标分类,但可能用户想要刷新页面", " at pages/mall/consumer/category.uvue:382") - console.log("当前分类:", activePrimary.value, "目标分类:", categoryId, " at pages/mall/consumer/category.uvue:383") - setTimeout(fun(){ - selectPrimaryCategory(categoryId) - }, 100) - } - } else { - console.log("⚠️ onLoad中未找到分类参数,将使用从数据库加载的第一个分类", " at pages/mall/consumer/category.uvue:391") - } - console.log("=== category页面onLoad执行完成 ===", " at pages/mall/consumer/category.uvue:395") - } - ) - onShow(fun(){ - console.log("=== category页面onShow被调用 ===", " at pages/mall/consumer/category.uvue:400") - console.log("页面显示时间:", Date.now(), " at pages/mall/consumer/category.uvue:401") - console.log("当前活动分类:", activePrimary.value, " at pages/mall/consumer/category.uvue:402") - val storageCategoryId = (uni_getStorageSync("selectedCategory") as String) ?: "" - if (storageCategoryId !== "") { - console.log("✅ onShow中找到Storage分类参数:", storageCategoryId, " at pages/mall/consumer/category.uvue:407") - hasLoadedFromParams.value = true - uni_removeStorageSync("selectedCategory") - if (activePrimary.value !== storageCategoryId) { - selectPrimaryCategory(storageCategoryId) - } - return - } - val pages = getCurrentPages() - if (pages.length > 0) { - val currentPage = pages[pages.length - 1] - val rawPageOptions = currentPage.options ?: UTSJSONObject() - console.log("onShow中获取参数:", rawPageOptions, " at pages/mall/consumer/category.uvue:428") - val pageOptObj = if ((rawPageOptions is UTSJSONObject)) { - (rawPageOptions as UTSJSONObject) - } else { - (UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(rawPageOptions)), " at pages/mall/consumer/category.uvue:429") as UTSJSONObject) - } - val pageCategoryId = pageOptObj.getString("categoryId") ?: "" - if (pageCategoryId !== "") { - hasLoadedFromParams.value = true - val categoryId = pageCategoryId - val categoryName = pageOptObj.getString("name") ?: "" - console.log("✅ onShow中找到分类参数:", categoryId, categoryName, " at pages/mall/consumer/category.uvue:438") - console.log("URL中的时间戳参数:", pageOptObj.getString("timestamp") ?: "", " at pages/mall/consumer/category.uvue:439") - console.log("URL中的随机参数:", pageOptObj.getString("random") ?: "", " at pages/mall/consumer/category.uvue:440") - if (activePrimary.value !== categoryId) { - console.log("当前分类:", activePrimary.value, "与目标分类:", categoryId, "不同,需要更新", " at pages/mall/consumer/category.uvue:444") - console.log("准备调用selectPrimaryCategory函数...", " at pages/mall/consumer/category.uvue:445") - selectPrimaryCategory(categoryId) - } else { - console.log("当前分类已经是目标分类,但可能用户想要刷新页面", " at pages/mall/consumer/category.uvue:448") - console.log("当前分类:", activePrimary.value, "目标分类:", categoryId, " at pages/mall/consumer/category.uvue:449") - setTimeout(fun(){ - selectPrimaryCategory(categoryId) - }, 100) - } - } else { - console.log("⚠️ onShow中未找到分类参数", " at pages/mall/consumer/category.uvue:457") - } - } - console.log("=== category页面onShow执行完成 ===", " at pages/mall/consumer/category.uvue:461") - } - ) - fun gen_addToCart_fn(product: Product): UTSPromise { - return wrapUTSPromise(suspend w1@{ - uni_showLoading(ShowLoadingOptions(title = "添加中...")) - try { - val pid = (product.id ?: "").toString() - if (pid === "") { - uni_hideLoading() - uni_showToast(ShowToastOptions(title = "商品无效", icon = "none")) - return@w1 - } - val success = await(supabaseService.addToCart(pid, 1, "")) - if (success) { - uni_showToast(ShowToastOptions(title = "已添加到购物车", icon = "success")) - cartCount.value++ - } else { - uni_showToast(ShowToastOptions(title = "添加失败,请先登录", icon = "none")) - } - } - catch (e: Throwable) { - console.error("添加到购物车异常", e, " at pages/mall/consumer/category.uvue:489") - uni_showToast(ShowToastOptions(title = "操作失败", icon = "none")) - } - finally { - uni_hideLoading() - } - }) - } - val addToCart = ::gen_addToCart_fn - fun gen_navigateToSearch_fn(): Unit { - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/search")) - } - val navigateToSearch = ::gen_navigateToSearch_fn - fun gen_navigateToCart_fn(): Unit { - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/cart")) - } - val navigateToCart = ::gen_navigateToCart_fn - fun gen_navigateToProduct_fn(product: Product): Unit { - val id = (product.id ?: "").toString() - if (id === "") { - return - } - val price = (product.base_price ?: 0).toString(10) - val originalPrice = (product.market_price ?: "").toString() - val name = UTSAndroid.consoleDebugError(encodeURIComponent(product.name ?: ""), " at pages/mall/consumer/category.uvue:504") - val image = UTSAndroid.consoleDebugError(encodeURIComponent(product.main_image_url ?: ""), " at pages/mall/consumer/category.uvue:505") - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/product-detail?id=" + id + "&productId=" + id + "&price=" + price + "&originalPrice=" + originalPrice + "&name=" + name + "&image=" + image)) - } - val navigateToProduct = ::gen_navigateToProduct_fn - fun gen_onCamera_fn(): Unit { - uni_chooseImage(ChooseImageOptions(count = 1, sourceType = _uA( - "camera" - ), success = fun(res){ - console.log("相机拍摄成功:", res.tempFilePaths[0], " at pages/mall/consumer/category.uvue:518") - uni_showToast(ShowToastOptions(title = "已拍摄,正在识别...", icon = "loading")) - setTimeout(fun(){ - uni_showToast(ShowToastOptions(title = "识别成功", icon = "success")) - } - , 1000) - } - , fail = fun(err){ - console.error("相机调用失败:", err, " at pages/mall/consumer/category.uvue:532") - } - )) - } - val onCamera = ::gen_onCamera_fn - fun gen_onScan_fn(): Unit { - uni_scanCode(ScanCodeOptions(success = fun(res){ - console.log("扫码成功:", res, " at pages/mall/consumer/category.uvue:541") - uni_showToast(ShowToastOptions(title = "扫码成功: " + res.result, icon = "none")) - } - , fail = fun(err){ - console.error("扫码失败:", err, " at pages/mall/consumer/category.uvue:548") - } - )) - } - val onScan = ::gen_onScan_fn - return fun(): Any? { - return _cE("view", _uM("class" to "category-page"), _uA( - _cE("view", _uM("class" to "search-bar", "style" to _nS(_uM("paddingTop" to (statusBarHeight.value + "px")))), _uA( - _cE("view", _uM("class" to "search-container"), _uA( - _cE("view", _uM("class" to "search-box", "onClick" to navigateToSearch, "style" to _nS(_uM("height" to "30px"))), _uA( - _cE("text", _uM("class" to "search-placeholder"), "请输入药品名称、症状或品牌"), - _cE("view", _uM("class" to "nav-icon-btn", "onClick" to withModifiers(onScan, _uA( - "stop" - ))), _uA( - _cE("text", _uM("class" to "nav-icon"), "🔳") - )), - _cE("view", _uM("class" to "nav-camera-btn", "onClick" to withModifiers(onCamera, _uA( - "stop" - ))), _uA( - _cE("text", _uM("class" to "nav-camera-icon"), "📷") - )), - _cE("view", _uM("class" to "nav-inner-search-btn", "style" to _nS(_uM("height" to "22px"))), _uA( - _cE("text", _uM("class" to "nav-inner-search-text"), "搜索") - ), 4) - ), 4) - )) - ), 4), - _cE("view", _uM("class" to "navbar-placeholder", "style" to _nS(_uM("height" to "44px"))), null, 4), - _cE("view", _uM("class" to "category-content"), _uA( - _cE("scroll-view", _uM("scroll-y" to "", "class" to "primary-category"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(primaryCategories.value, fun(item, __key, __index, _cached): Any { - return _cE("view", _uM("key" to item.id, "class" to _nC(_uA( - "primary-item", - _uM("active" to (activePrimary.value === item.id)) - )), "onClick" to fun(){ - selectPrimaryCategory(item.id) - } - , "style" to _nS(_uM("backgroundColor" to if (activePrimary.value === item.id) { - item.color - } else { - "transparent" - } - ))), _uA( - _cE("text", _uM("class" to "primary-icon"), _tD(item.icon), 1), - _cE("text", _uM("class" to "primary-name"), _tD(item.name), 1) - ), 14, _uA( - "onClick" - )) - } - ), 128) - )), - _cE("scroll-view", _uM("scroll-y" to "", "class" to "product-content", "onScrolltolower" to loadMore, "lower-threshold" to 50), _uA( - _cE("view", _uM("class" to "category-header"), _uA( - _cE("text", _uM("class" to "category-title"), _tD(currentCategoryName.value), 1), - _cE("text", _uM("class" to "category-desc"), _tD(currentCategoryDesc.value), 1) - )), - if (productList.value.length > 0) { - _cE("view", _uM("key" to 0, "class" to "product-grid"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(productList.value, fun(product, __key, __index, _cached): Any { - return _cE("view", _uM("key" to product.id, "class" to "product-card", "onClick" to fun(){ - navigateToProduct(product) - }), _uA( - if (isTrue(product.is_hot)) { - _cE("view", _uM("key" to 0, "class" to "product-badge"), "热销") - } else { - _cC("v-if", true) - }, - _cE("image", _uM("class" to "product-image", "src" to product.main_image_url, "mode" to "aspectFill"), null, 8, _uA( - "src" - )), - _cE("view", _uM("class" to "product-info"), _uA( - _cE("text", _uM("class" to "product-name"), _tD(product.name), 1), - _cE("view", _uM("class" to "price-section"), _uA( - _cE("view", _uM("class" to "current-price"), _uA( - _cE("text", _uM("class" to "price-symbol"), "¥"), - _cE("text", _uM("class" to "price-value"), _tD(product.base_price ?: product.price ?: 0), 1) - )), - if (isTrue(product.market_price != null && product.base_price != null && product.market_price!! > product.base_price!!)) { - _cE("text", _uM("key" to 0, "class" to "original-price"), " ¥" + _tD(product.market_price), 1) - } else { - _cC("v-if", true) - } - )), - _cE("view", _uM("class" to "product-meta"), _uA( - _cE("text", _uM("class" to "manufacturer"), _tD(product.brand_name ?: product.shop_name ?: "自营"), 1), - _cE("view", _uM("class" to "sales-info"), _uA( - _cE("text", _uM("class" to "sales-count"), "已售" + _tD(product.sale_count), 1) - )) - )) - )) - ), 8, _uA( - "onClick" - )) - }), 128) - )) - } else { - _cE("view", _uM("key" to 1, "class" to "empty-state"), _uA( - _cE("text", _uM("class" to "empty-icon"), "💊"), - _cE("text", _uM("class" to "empty-text"), "暂无相关药品"), - _cE("text", _uM("class" to "empty-desc"), "该分类下暂无商品,敬请期待") - )) - } - , - if (isTrue(hasMore.value)) { - _cE("view", _uM("key" to 2, "class" to "load-more"), _uA( - _cE("text", _uM("class" to "load-text"), "上拉加载更多") - )) - } else { - _cC("v-if", true) - } - ), 32) - )) - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("category-page" to _pS(_uM("width" to "100%", "height" to "100%", "overflow" to "hidden", "backgroundColor" to "#f8fafc", "display" to "flex", "flexDirection" to "column", "fontFamily" to "-apple-system, BlinkMacSystemFont, Segoe UI, PingFang SC, Hiragino Sans GB, sans-serif")), "search-bar" to _pS(_uM("position" to "fixed", "top" to 0, "left" to 0, "right" to 0, "backgroundImage" to "linear-gradient(135deg, #4CAF50 0%, #2E7D32 100%)", "backgroundColor" to "rgba(0,0,0,0)", "zIndex" to 1000, "boxShadow" to "0 2px 12px rgba(76, 175, 80, 0.15)")), "navbar-placeholder" to _pS(_uM("flexShrink" to 0)), "search-container" to _pS(_uM("height" to 44, "paddingTop" to 0, "paddingRight" to 16, "paddingBottom" to 0, "paddingLeft" to 16, "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "center", "maxWidth" to 1400, "marginTop" to 0, "marginRight" to "auto", "marginBottom" to 0, "marginLeft" to "auto", "width" to "100%")), "search-box" to _pS(_uM("boxShadow:hover" to "0 2px 8px rgba(0, 0, 0, 0.1)", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "maxWidth" to 600, "backgroundImage" to "none", "backgroundColor" to "#f0f0f0", "borderTopLeftRadius" to 20, "borderTopRightRadius" to 20, "borderBottomRightRadius" to 20, "borderBottomLeftRadius" to 20, "paddingTop" to 0, "paddingRight" to 4, "paddingBottom" to 0, "paddingLeft" to 12, "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "transitionProperty" to "all", "transitionDuration" to "0.3s", "transitionTimingFunction" to "ease", "width" to "100%", "height" to 32)), "search-placeholder" to _pS(_uM("fontSize" to 14, "color" to "#999999", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "whiteSpace" to "nowrap", "overflow" to "hidden", "textOverflow" to "ellipsis")), "nav-inner-search-text" to _pS(_uM("fontSize" to 12, "color" to "#ffffff", "fontWeight" to "normal")), "icon" to _pS(_uM("fontSize" to 22, "color" to "#FFFFFF")), "nav-icon-btn" to _pS(_uM("paddingTop" to 4, "paddingRight" to 8, "paddingBottom" to 4, "paddingLeft" to 4, "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "center", "borderRightWidth" to 1, "borderRightStyle" to "solid", "borderRightColor" to "#dddddd", "marginRight" to 8)), "nav-icon" to _pS(_uM("fontSize" to 18)), "nav-camera-btn" to _pS(_uM("paddingTop" to 4, "paddingRight" to 8, "paddingBottom" to 4, "paddingLeft" to 4, "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "center", "borderRightWidth" to 1, "borderRightStyle" to "solid", "borderRightColor" to "#dddddd", "marginRight" to 8)), "nav-camera-icon" to _pS(_uM("fontSize" to 20)), "nav-inner-search-btn" to _pS(_uM("paddingTop" to 0, "paddingRight" to 12, "paddingBottom" to 0, "paddingLeft" to 12, "backgroundColor" to "#87CEEB", "borderTopLeftRadius" to 16, "borderTopRightRadius" to 16, "borderBottomRightRadius" to 16, "borderBottomLeftRadius" to 16, "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "center", "height" to 24)), "cart-badge" to _pS(_uM("position" to "absolute", "top" to -5, "right" to -5, "backgroundImage" to "none", "backgroundColor" to "#FF5722", "color" to "#FFFFFF", "fontSize" to 10, "minWidth" to 18, "height" to 18, "borderTopLeftRadius" to 9, "borderTopRightRadius" to 9, "borderBottomRightRadius" to 9, "borderBottomLeftRadius" to 9, "display" to "flex", "alignItems" to "center", "justifyContent" to "center", "paddingTop" to 0, "paddingRight" to 4, "paddingBottom" to 0, "paddingLeft" to 4, "borderTopWidth" to 2, "borderRightWidth" to 2, "borderBottomWidth" to 2, "borderLeftWidth" to 2, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#4CAF50", "borderRightColor" to "#4CAF50", "borderBottomColor" to "#4CAF50", "borderLeftColor" to "#4CAF50")), "category-content" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "height" to 0, "display" to "flex", "flexDirection" to "row", "paddingTop" to 0, "paddingRight" to 16, "paddingBottom" to 0, "paddingLeft" to 16, "maxWidth" to 1400, "marginLeft" to "auto", "marginRight" to "auto", "width" to "100%", "overflow" to "hidden")), "primary-category" to _pS(_uM("width" to 120, "height" to "100%", "marginRight" to 20, "backgroundImage" to "none", "backgroundColor" to "#FFFFFF", "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "paddingTop" to 12, "paddingRight" to 0, "paddingBottom" to 12, "paddingLeft" to 0, "boxShadow" to "0 2px 8px rgba(0, 0, 0, 0.08)", "flexShrink" to 0)), "primary-item" to _uM("" to _uM("display" to "flex", "flexDirection" to "column", "alignItems" to "center", "justifyContent" to "center", "paddingTop" to 12, "paddingRight" to 8, "paddingBottom" to 12, "paddingLeft" to 8, "marginTop" to 4, "marginRight" to 8, "marginBottom" to 4, "marginLeft" to 8, "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "transitionProperty" to "all", "transitionDuration" to "0.2s", "transitionTimingFunction" to "ease", "color" to "#666666", "textAlign" to "center", "transform:hover" to "translateY(-2px)"), ".active" to _uM("!color" to "#FFFFFF", "fontWeight" to "bold")), "primary-icon" to _pS(_uM("fontSize" to 24, "marginBottom" to 6, "marginRight" to 0, "textAlign" to "center")), "primary-name" to _pS(_uM("fontSize" to 13, "lineHeight" to 1.4)), "product-content" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "height" to "100%", "paddingTop" to 0, "paddingRight" to 0, "paddingBottom" to 0, "paddingLeft" to 0)), "category-header" to _pS(_uM("marginBottom" to 16, "paddingTop" to 16, "paddingRight" to 8, "paddingBottom" to 0, "paddingLeft" to 8, "backgroundColor" to "#f8fafc", "zIndex" to 10)), "category-title" to _pS(_uM("fontSize" to 20, "fontWeight" to "bold", "color" to "#333333", "marginBottom" to 4)), "category-desc" to _pS(_uM("fontSize" to 14, "color" to "#666666")), "product-grid" to _pS(_uM("display" to "flex", "flexDirection" to "row", "flexWrap" to "wrap", "paddingTop" to 10, "paddingRight" to 10, "paddingBottom" to 10, "paddingLeft" to 10, "width" to "100%")), "product-card" to _pS(_uM("backgroundImage" to "none", "backgroundColor" to "#FFFFFF", "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "overflow" to "hidden", "transitionProperty" to "all", "transitionDuration" to "0.3s", "transitionTimingFunction" to "ease", "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#e0e0e0", "borderRightColor" to "#e0e0e0", "borderBottomColor" to "#e0e0e0", "borderLeftColor" to "#e0e0e0", "position" to "relative", "width" to "44%", "marginTop" to "3%", "marginRight" to "3%", "marginBottom" to "3%", "marginLeft" to "3%", "boxSizing" to "border-box", "transform:hover" to "translateY(-4px)", "boxShadow:hover" to "0 8px 24px rgba(0, 0, 0, 0.12)")), "product-badge" to _pS(_uM("position" to "absolute", "top" to 12, "left" to 12, "backgroundImage" to "none", "backgroundColor" to "#FF5722", "color" to "#FFFFFF", "fontSize" to 11, "paddingTop" to 4, "paddingRight" to 12, "paddingBottom" to 4, "paddingLeft" to 12, "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "fontWeight" to "700", "zIndex" to 2)), "product-image" to _pS(_uM("width" to "100%", "height" to 160, "backgroundImage" to "none", "backgroundColor" to "#FFFFFF")), "product-info" to _pS(_uM("paddingTop" to 16, "paddingRight" to 16, "paddingBottom" to 16, "paddingLeft" to 16)), "product-name" to _pS(_uM("fontSize" to 15, "fontWeight" to "700", "color" to "#333333", "marginBottom" to 4, "lineHeight" to 1.4)), "product-spec" to _pS(_uM("fontSize" to 13, "color" to "#666666", "marginBottom" to 12)), "price-section" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "flex-end", "marginBottom" to 12)), "current-price" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "flex-end", "marginRight" to 8)), "price-symbol" to _pS(_uM("fontSize" to 14, "color" to "#FF5722")), "price-value" to _pS(_uM("fontSize" to 20, "fontWeight" to "bold", "color" to "#FF5722", "marginLeft" to 2)), "original-price" to _pS(_uM("fontSize" to 13, "color" to "#999999")), "product-meta" to _pS(_uM("display" to "flex", "justifyContent" to "space-between", "alignItems" to "center", "fontSize" to 12, "marginBottom" to 12)), "manufacturer" to _pS(_uM("color" to "#666666")), "sales-count" to _pS(_uM("color" to "#999999")), "product-action" to _pS(_uM("marginTop" to 12)), "cart-btn" to _pS(_uM("display" to "flex", "alignItems" to "center", "justifyContent" to "center", "backgroundImage" to "none", "backgroundColor" to "#4CAF50", "color" to "#FFFFFF", "paddingTop" to 8, "paddingRight" to 12, "paddingBottom" to 8, "paddingLeft" to 12, "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "fontSize" to 13, "fontWeight" to "bold", "transitionProperty" to "all", "transitionDuration" to "0.2s", "transitionTimingFunction" to "ease", "backgroundImage:hover" to "none", "backgroundColor:hover" to "#388E3C")), "cart-icon" to _pS(_uM("fontSize" to 14, "marginRight" to 6)), "empty-state" to _pS(_uM("display" to "flex", "flexDirection" to "column", "alignItems" to "center", "justifyContent" to "center", "paddingTop" to 60, "paddingRight" to 20, "paddingBottom" to 60, "paddingLeft" to 20, "textAlign" to "center")), "empty-icon" to _pS(_uM("fontSize" to 60, "color" to "#4CAF50", "marginBottom" to 15)), "empty-text" to _pS(_uM("fontSize" to 18, "color" to "#333333", "fontWeight" to "bold", "marginBottom" to 8)), "empty-desc" to _pS(_uM("fontSize" to 14, "color" to "#666666")), "load-more" to _pS(_uM("textAlign" to "center", "paddingTop" to 20, "paddingRight" to 0, "paddingBottom" to 20, "paddingLeft" to 0, "color" to "#999999", "fontSize" to 14)), "load-text" to _pS(_uM("paddingTop" to 8, "paddingRight" to 16, "paddingBottom" to 8, "paddingLeft" to 16, "backgroundImage" to "none", "backgroundColor" to "#f5f5f5", "borderTopLeftRadius" to 20, "borderTopRightRadius" to 20, "borderBottomRightRadius" to 20, "borderBottomLeftRadius" to 20)), "@TRANSITION" to _uM("search-box" to _uM("property" to "all", "duration" to "0.3s", "timingFunction" to "ease"), "primary-item" to _uM("property" to "all", "duration" to "0.2s", "timingFunction" to "ease"), "product-card" to _uM("property" to "all", "duration" to "0.3s", "timingFunction" to "ease"), "cart-btn" to _uM("property" to "all", "duration" to "0.2s", "timingFunction" to "ease"))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/mall/consumer/chat.kt b/unpackage/cache/.app-android/src/pages/mall/consumer/chat.kt deleted file mode 100644 index bc66acb6..00000000 --- a/unpackage/cache/.app-android/src/pages/mall/consumer/chat.kt +++ /dev/null @@ -1,388 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.chooseImage as uni_chooseImage -import io.dcloud.uniapp.extapi.getSystemInfoSync as uni_getSystemInfoSync -import io.dcloud.uniapp.extapi.navigateBack as uni_navigateBack -import io.dcloud.uniapp.extapi.navigateTo as uni_navigateTo -import io.dcloud.uniapp.extapi.showActionSheet as uni_showActionSheet -import io.dcloud.uniapp.extapi.showModal as uni_showModal -import io.dcloud.uniapp.extapi.showToast as uni_showToast -open class GenPagesMallConsumerChat : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesMallConsumerChat) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesMallConsumerChat - val _cache = __ins.renderCache - val messages = ref(_uA()) - val inputMessage = ref("") - val inputFocus = ref(false) - val showEmoji = ref(false) - val scrollToView = ref("") - val currentUserId = ref("") - val merchantId = ref("") - val headerTitle = ref("在线客服") - val navPaddingTop = ref("30px") - var realtimeChannel: AkSupaRealtimeChannel? = null - val emojiList = _uA( - "😊", - "😂", - "🤣", - "😍", - "😘", - "🥰", - "😭", - "😡", - "👍", - "👏", - "🙏", - "🎉", - "❤️", - "🔥", - "⭐" - ) - fun gen_scrollToBottom_fn(): Unit { - nextTick(fun(){ - if (messages.value.length > 0) { - val lastMsgId = messages.value[messages.value.length - 1].id - scrollToView.value = "msg-" + lastMsgId - } - } - ) - } - val scrollToBottom = ::gen_scrollToBottom_fn - fun gen_getCurrentTime_fn(): String { - val now = Date() - val hours = now.getHours().toString(10).padStart(2, "0") - val minutes = now.getMinutes().toString(10).padStart(2, "0") - return "" + hours + ":" + minutes - } - val getCurrentTime = ::gen_getCurrentTime_fn - fun gen_setupRealtimeSubscription_fn(): Unit { - console.log("开始建立聊天实时订阅...", " at pages/mall/consumer/chat.uvue:167") - val filter = (object : UTSJSONObject(UTSSourceMapPosition("filter", "pages/mall/consumer/chat.uvue", 168, 8)) { - var event = "INSERT" - var schema = "public" - var table = "ml_chat_messages" - }) - realtimeChannel = supaInstance.channel("public:ml_chat_messages").on("postgres_changes", filter, fun(payload: Any){ - val payloadObj = if ((payload is UTSJSONObject)) { - (payload as UTSJSONObject) - } else { - (UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(payload ?: UTSJSONObject())), " at pages/mall/consumer/chat.uvue:176") as UTSJSONObject) - } - val newMsgAny = payloadObj.get("new") - if (newMsgAny == null) { - return - } - val newMsg = if ((newMsgAny is UTSJSONObject)) { - (newMsgAny as UTSJSONObject) - } else { - (UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(newMsgAny)), " at pages/mall/consumer/chat.uvue:179") as UTSJSONObject) - } - console.log("收到新消息:", newMsg, " at pages/mall/consumer/chat.uvue:180") - val senderId = newMsg.getString("sender_id") ?: "" - val receiverId = newMsg.getString("receiver_id") ?: "" - if (senderId === currentUserId.value) { - return - } - if (receiverId === currentUserId.value) { - if (merchantId.value != "" && senderId !== merchantId.value) { - return - } - val createdAt = newMsg.getString("created_at") ?: Date().toISOString() - val date = Date(createdAt) - val timeStr = "" + date.getHours().toString(10).padStart(2, "0") + ":" + date.getMinutes().toString(10).padStart(2, "0") - val incomingMsg = UiChatMessage(id = newMsg.getString("id") ?: Date.now().toString(10), type = "received", content = newMsg.getString("content") ?: "", time = timeStr) - messages.value.push(incomingMsg) - scrollToBottom() - } - } - ).subscribe(fun(status: String, err: Any?){ - console.log("订阅状态:", status, " at pages/mall/consumer/chat.uvue:210") - } - ) - } - val setupRealtimeSubscription = ::gen_setupRealtimeSubscription_fn - fun gen_loadChatHistory_fn(): UTSPromise { - return wrapUTSPromise(suspend w1@{ - var rawMsgs: UTSArray = _uA() - if (merchantId.value != "") { - rawMsgs = await(supabaseService.getChatMessages(merchantId.value)) - } else { - console.warn("No merchant ID provided for chat", " at pages/mall/consumer/chat.uvue:220") - return@w1 - } - messages.value = rawMsgs.reverse().map(fun(m: ChatMessage): UiChatMessage { - val date = Date(m.created_at ?: Date().toISOString()) - val timeStr = "" + date.getHours().toString(10).padStart(2, "0") + ":" + date.getMinutes().toString(10).padStart(2, "0") - val sender = m.sender_id ?: "" - val msgType = if ((currentUserId.value != "" && sender == currentUserId.value)) { - "sent" - } else { - "received" - } - val rawId = (m.id ?: "").toString() - val msgId = if (rawId !== "") { - rawId - } else { - Date.now().toString(10) - } - return UiChatMessage(id = msgId, type = msgType, content = m.content ?: "", time = timeStr) - } - ) - setTimeout(fun(){ - scrollToBottom() - } - , 100) - }) - } - val loadChatHistory = ::gen_loadChatHistory_fn - onLoad(fun(options: Any){ - val sysInfo = uni_getSystemInfoSync() - val statusBarH = sysInfo.statusBarHeight - navPaddingTop.value = (statusBarH + 10) + "px" - val optObj = if ((options is UTSJSONObject)) { - (options as UTSJSONObject) - } else { - (UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(options ?: UTSJSONObject())), " at pages/mall/consumer/chat.uvue:253") as UTSJSONObject) - } - val mid = optObj.getString("merchantId") ?: "" - if (mid !== "") { - merchantId.value = mid - } - val mname = optObj.getString("merchantName") ?: "" - if (mname !== "") { - headerTitle.value = mname - } - } - ) - onMounted(fun(){ - supabaseService.ensureSession().then(fun(uid){ - if (uid != null) { - currentUserId.value = uid - } else { - getCurrentUser().then(fun(user){ - if (user != null) { - currentUserId.value = user.id ?: "" - } - } - ) - } - loadChatHistory() - setupRealtimeSubscription() - } - ) - } - ) - onUnmounted(fun(){ - if (realtimeChannel != null) { - supaInstance.removeChannel(realtimeChannel!!!!) - } - } - ) - val sendMessage = fun(): UTSPromise { - return wrapUTSPromise(suspend w1@{ - val content = inputMessage.value.trim() - if (content == "") { - return@w1 - } - val newMessage = UiChatMessage(id = Date.now().toString(10), type = "sent", content = content, time = getCurrentTime()) - messages.value.push(newMessage) - inputMessage.value = "" - scrollToBottom() - if (merchantId.value != "") { - val success = await(supabaseService.sendMessage(merchantId.value, content)) - if (!success) { - uni_showToast(ShowToastOptions(title = "发送失败", icon = "none")) - } - } - }) - } - fun gen_insertEmoji_fn(emoji: String): Unit { - inputMessage.value += emoji - inputFocus.value = true - } - val insertEmoji = ::gen_insertEmoji_fn - fun gen_showEmojiPicker_fn(): Unit { - showEmoji.value = !showEmoji.value - } - val showEmojiPicker = ::gen_showEmojiPicker_fn - fun gen_showImagePicker_fn(): Unit { - uni_chooseImage(ChooseImageOptions(count = 1, success = fun(res){ - console.log("选择图片:", res.tempFilePaths, " at pages/mall/consumer/chat.uvue:342") - } - )) - } - val showImagePicker = ::gen_showImagePicker_fn - fun gen_showMoreTools_fn(): Unit { - uni_showActionSheet(ShowActionSheetOptions(itemList = _uA( - "发送位置", - "发送文件", - "发送语音" - ), success = fun(res){ - console.log("选择工具:", res.tapIndex, " at pages/mall/consumer/chat.uvue:353") - } - )) - } - val showMoreTools = ::gen_showMoreTools_fn - fun gen_showMoreActions_fn(): Unit { - uni_showActionSheet(ShowActionSheetOptions(itemList = _uA( - "投诉客服", - "结束对话", - "清除记录" - ), success = fun(res){ - when (res.tapIndex) { - 0 -> - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/complaint")) - 1 -> - uni_showModal(ShowModalOptions(title = "确认结束", content = "确定要结束本次对话吗?", success = fun(res){ - if (res.confirm) { - uni_navigateBack(null) - } - } - )) - 2 -> - uni_showModal(ShowModalOptions(title = "确认清除", content = "确定要清除聊天记录吗?", success = fun(res){ - if (res.confirm) { - messages.value = _uA() - } - } - )) - } - } - )) - } - val showMoreActions = ::gen_showMoreActions_fn - val goBack = fun(){ - uni_navigateBack(null) - } - return fun(): Any? { - return _cE("view", _uM("class" to "chat-page"), _uA( - _cE("view", _uM("class" to "chat-header", "style" to _nS(_uM("paddingTop" to navPaddingTop.value))), _uA( - _cE("view", _uM("class" to "header-back", "onClick" to goBack), _uA( - _cE("text", _uM("class" to "back-icon"), "‹") - )), - _cE("view", _uM("class" to "header-info"), _uA( - _cE("text", _uM("class" to "chat-title"), _tD(headerTitle.value), 1), - _cE("text", _uM("class" to "chat-status"), "在线") - )), - _cE("view", _uM("class" to "header-actions"), _uA( - _cE("text", _uM("class" to "action-icon", "onClick" to showMoreActions), "⋮") - )) - ), 4), - _cE("scroll-view", _uM("scroll-y" to "", "class" to "chat-content", "scroll-into-view" to scrollToView.value, "scroll-with-animation" to ""), _uA( - _cE("view", _uM("class" to "chat-messages"), _uA( - _cE("view", _uM("class" to "message-item system"), _uA( - _cE("text", _uM("class" to "system-text"), "客服 小美 已接入,请描述您的问题") - )), - _cE("view", _uM("class" to "time-divider"), _uA( - _cE("text", _uM("class" to "time-text"), "今天 14:30") - )), - _cE(Fragment, null, RenderHelpers.renderList(messages.value, fun(message, __key, __index, _cached): Any { - return _cE("view", _uM("key" to message.id, "class" to _nC(_uA( - "message-item", - message.type - )), "id" to ("msg-" + message.id)), _uA( - if (message.type === "received") { - _cE("view", _uM("key" to 0, "class" to "message-wrapper"), _uA( - _cE("image", _uM("class" to "avatar", "src" to "/static/icons/shop-default.png", "mode" to "aspectFill")), - _cE("view", _uM("class" to "message-content-wrapper"), _uA( - _cE("text", _uM("class" to "sender-name"), _tD(headerTitle.value), 1), - _cE("view", _uM("class" to "message-bubble"), _uA( - _cE("text", _uM("class" to "message-text"), _tD(message.content), 1), - _cE("text", _uM("class" to "message-time"), _tD(message.time), 1) - )) - )) - )) - } else { - _cE("view", _uM("key" to 1, "class" to "message-wrapper me"), _uA( - _cE("view", _uM("class" to "message-content-wrapper"), _uA( - _cE("view", _uM("class" to "message-bubble me"), _uA( - _cE("text", _uM("class" to "message-text"), _tD(message.content), 1), - _cE("text", _uM("class" to "message-time"), _tD(message.time), 1) - )) - )), - _cE("image", _uM("class" to "avatar me", "src" to "/static/avatar-default.png", "mode" to "aspectFill")) - )) - } - ), 10, _uA( - "id" - )) - } - ), 128) - )) - ), 8, _uA( - "scroll-into-view" - )), - _cE("view", _uM("class" to "chat-input"), _uA( - _cE("view", _uM("class" to "input-tools"), _uA( - _cE("text", _uM("class" to "tool-icon", "onClick" to showEmojiPicker), "😊"), - _cE("text", _uM("class" to "tool-icon", "onClick" to showImagePicker), "📷"), - _cE("text", _uM("class" to "tool-icon", "onClick" to showMoreTools), "➕") - )), - _cE("view", _uM("class" to "input-wrapper"), _uA( - _cE("input", _uM("class" to "message-input", "modelValue" to inputMessage.value, "onInput" to fun(`$event`: UniInputEvent){ - inputMessage.value = `$event`.detail.value - } - , "placeholder" to "请输入消息...", "focus" to inputFocus.value, "onConfirm" to sendMessage, "confirm-type" to "send"), null, 40, _uA( - "modelValue", - "onInput", - "focus" - )), - _cE("button", _uM("class" to _nC(_uA( - "send-button", - _uM("active" to inputMessage.value.trim()) - )), "onClick" to sendMessage), " 发送 ", 2) - )) - )), - if (isTrue(showEmoji.value)) { - _cE("scroll-view", _uM("key" to 0, "class" to "emoji-picker", "direction" to "vertical"), _uA( - _cE("view", _uM("class" to "emoji-category"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(emojiList, fun(emoji, __key, __index, _cached): Any { - return _cE("text", _uM("key" to emoji, "class" to "emoji-item", "onClick" to fun(){ - insertEmoji(emoji) - }), _tD(emoji), 9, _uA( - "onClick" - )) - }), 64) - )) - )) - } else { - _cC("v-if", true) - } - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("chat-page" to _pS(_uM("width" to "100%", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "backgroundColor" to "#f5f5f5", "display" to "flex", "flexDirection" to "column")), "chat-header" to _pS(_uM("backgroundColor" to "#FFFFFF", "paddingTop" to 10, "paddingRight" to 15, "paddingBottom" to 10, "paddingLeft" to 15, "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "space-between", "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#eeeeee")), "header-back" to _pS(_uM("width" to 40)), "back-icon" to _pS(_uM("fontSize" to 24, "color" to "#333333")), "header-info" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "textAlign" to "center")), "chat-title" to _pS(_uM("fontSize" to 16, "fontWeight" to "bold", "color" to "#333333", "marginBottom" to 2)), "chat-status" to _pS(_uM("fontSize" to 12, "color" to "#34c759")), "action-icon" to _uM(".header-actions " to _uM("fontSize" to 20, "color" to "#333333", "width" to 40, "textAlign" to "right")), "chat-content" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 70, "paddingLeft" to 15)), "message-item" to _uM(".system" to _uM("textAlign" to "center", "marginBottom" to 20)), "system-text" to _pS(_uM("fontSize" to 12, "color" to "#999999", "backgroundColor" to "#f0f0f0", "paddingTop" to 5, "paddingRight" to 15, "paddingBottom" to 5, "paddingLeft" to 15, "borderTopLeftRadius" to 15, "borderTopRightRadius" to 15, "borderBottomRightRadius" to 15, "borderBottomLeftRadius" to 15)), "time-divider" to _pS(_uM("textAlign" to "center", "marginTop" to 20, "marginRight" to 0, "marginBottom" to 20, "marginLeft" to 0)), "time-text" to _pS(_uM("fontSize" to 12, "color" to "#999999", "backgroundColor" to "#f0f0f0", "paddingTop" to 3, "paddingRight" to 10, "paddingBottom" to 3, "paddingLeft" to 10, "borderTopLeftRadius" to 10, "borderTopRightRadius" to 10, "borderBottomRightRadius" to 10, "borderBottomLeftRadius" to 10)), "message-wrapper" to _uM("" to _uM("display" to "flex", "flexDirection" to "row", "marginBottom" to 15), ".me" to _uM("justifyContent" to "flex-end")), "avatar" to _uM("" to _uM("width" to 40, "height" to 40, "borderTopLeftRadius" to 20, "borderTopRightRadius" to 20, "borderBottomRightRadius" to 20, "borderBottomLeftRadius" to 20, "marginRight" to 10, "flexShrink" to 0), ".me" to _uM("marginRight" to 0, "marginLeft" to 10)), "sender-name" to _pS(_uM("fontSize" to 12, "color" to "#999999", "marginBottom" to 5)), "message-bubble" to _uM("" to _uM("backgroundColor" to "#FFFFFF", "paddingTop" to 10, "paddingRight" to 15, "paddingBottom" to 10, "paddingLeft" to 15, "borderTopLeftRadius" to 18, "borderTopRightRadius" to 18, "borderBottomRightRadius" to 18, "borderBottomLeftRadius" to 18, "position" to "relative", "boxShadow" to "0 2px 6px rgba(0, 0, 0, 0.1)"), ".me" to _uM("backgroundColor" to "#95ec69", "borderBottomRightRadius" to 4)), "message-content" to _uM(".message-bubble-not-me " to _uM("borderBottomLeftRadius" to 4)), "message-text" to _pS(_uM("fontSize" to 15, "color" to "#333333", "lineHeight" to 1.4, "marginBottom" to 5)), "message-time" to _pS(_uM("fontSize" to 11, "color" to "#999999", "textAlign" to "right")), "chat-input" to _pS(_uM("backgroundColor" to "#FFFFFF", "borderTopWidth" to 1, "borderTopStyle" to "solid", "borderTopColor" to "#eeeeee", "paddingTop" to 10, "paddingRight" to 15, "paddingBottom" to 10, "paddingLeft" to 15, "position" to "fixed", "bottom" to 0, "left" to 0, "right" to 0, "zIndex" to 100)), "input-tools" to _pS(_uM("display" to "flex", "flexDirection" to "row", "marginBottom" to 10)), "tool-icon" to _pS(_uM("fontSize" to 20, "marginRight" to 15, "color" to "#666666")), "input-wrapper" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center")), "message-input" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "backgroundColor" to "#f5f5f5", "borderTopLeftRadius" to 20, "borderTopRightRadius" to 20, "borderBottomRightRadius" to 20, "borderBottomLeftRadius" to 20, "paddingTop" to 10, "paddingRight" to 15, "paddingBottom" to 10, "paddingLeft" to 15, "fontSize" to 15, "marginRight" to 10, "minHeight" to 40, "maxHeight" to 100)), "send-button" to _uM("" to _uM("backgroundColor" to "#cccccc", "color" to "#FFFFFF", "borderTopWidth" to "medium", "borderRightWidth" to "medium", "borderBottomWidth" to "medium", "borderLeftWidth" to "medium", "borderTopStyle" to "none", "borderRightStyle" to "none", "borderBottomStyle" to "none", "borderLeftStyle" to "none", "borderTopColor" to "#000000", "borderRightColor" to "#000000", "borderBottomColor" to "#000000", "borderLeftColor" to "#000000", "borderTopLeftRadius" to 20, "borderTopRightRadius" to 20, "borderBottomRightRadius" to 20, "borderBottomLeftRadius" to 20, "paddingTop" to 8, "paddingRight" to 20, "paddingBottom" to 8, "paddingLeft" to 20, "fontSize" to 14, "minWidth" to 60, "transitionProperty" to "all", "transitionDuration" to "0.3s", "transitionTimingFunction" to "ease"), ".active" to _uM("backgroundColor" to "#ff5000")), "emoji-picker" to _pS(_uM("backgroundColor" to "#FFFFFF", "borderTopWidth" to 1, "borderTopStyle" to "solid", "borderTopColor" to "#eeeeee", "paddingTop" to 10, "paddingRight" to 10, "paddingBottom" to 10, "paddingLeft" to 10, "height" to 200, "position" to "fixed", "bottom" to 60, "left" to 0, "right" to 0, "zIndex" to 99)), "emoji-category" to _pS(_uM("display" to "flex", "flexDirection" to "row", "flexWrap" to "wrap")), "emoji-item" to _pS(_uM("fontSize" to 24, "paddingTop" to 8, "paddingRight" to 8, "paddingBottom" to 8, "paddingLeft" to 8, "width" to 45, "height" to 45, "display" to "flex", "alignItems" to "center", "justifyContent" to "center")), "@TRANSITION" to _uM("send-button" to _uM("property" to "all", "duration" to "0.3s", "timingFunction" to "ease"))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/mall/consumer/checkout.kt b/unpackage/cache/.app-android/src/pages/mall/consumer/checkout.kt deleted file mode 100644 index 91767e01..00000000 --- a/unpackage/cache/.app-android/src/pages/mall/consumer/checkout.kt +++ /dev/null @@ -1,1364 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.`$emit` as uni__emit -import io.dcloud.uniapp.extapi.`$off` as uni__off -import io.dcloud.uniapp.extapi.`$on` as uni__on -import io.dcloud.uniapp.extapi.getStorageSync as uni_getStorageSync -import io.dcloud.uniapp.extapi.hideLoading as uni_hideLoading -import io.dcloud.uniapp.extapi.navigateTo as uni_navigateTo -import io.dcloud.uniapp.framework.onShow as onShow__1 -import io.dcloud.uniapp.framework.onLoad as onLoad__1 -import io.dcloud.uniapp.extapi.redirectTo as uni_redirectTo -import io.dcloud.uniapp.extapi.removeStorageSync as uni_removeStorageSync -import io.dcloud.uniapp.extapi.setStorageSync as uni_setStorageSync -import io.dcloud.uniapp.extapi.showLoading as uni_showLoading -import io.dcloud.uniapp.extapi.showToast as uni_showToast -open class GenPagesMallConsumerCheckout : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesMallConsumerCheckout) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesMallConsumerCheckout - val _cache = __ins.renderCache - fun gen_getObjectKeys_fn(obj: Any): UTSArray { - val keys: UTSArray = _uA() - val tempObj = obj as Record - try { - val commonKeys = _uA( - "id", - "name", - "value", - "label", - "key", - "recipient_name", - "phone", - "province", - "city", - "district", - "detail", - "is_default" - ) - run { - var i: Number = 0 - while(i < commonKeys.length){ - val key = commonKeys[i] - if (tempObj[key] != null) { - keys.push(key) - } - i++ - } - } - } - catch (e: Throwable) {} - return keys - } - val getObjectKeys = ::gen_getObjectKeys_fn - val checkoutItems = ref(_uA()) - val selectedAddress = ref(null) - val deliveryOptions = ref(_uA(DeliveryOptionType(id = "standard", name = "快递配送", price = 8.00, description = "1-3天送达"), DeliveryOptionType(id = "express", name = "加急配送", price = 15.00, description = "当天送达"))) - val selectedDelivery = ref("standard") - val selectedCoupon = ref(null) - val remark = ref("") - val showAddressPopup = ref(false) - val addressList = ref(_uA()) - val newAddress = ref(NewAddressForm(recipient_name = "", phone = "", province = "", city = "", district = "", detail = "", is_default = false)) - val showNewAddressForm = ref(false) - val showSaveConfirm = ref(false) - val smartAddressInput = ref("") - val toUTSJSONObject = fun(value: Any): UTSJSONObject { - if (value is UTSJSONObject) { - return value as UTSJSONObject - } - return UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(value ?: UTSJSONObject())), " at pages/mall/consumer/checkout.uvue:431") as UTSJSONObject - } - val shopGroups = computed(fun(): UTSArray { - val groups: UTSArray = _uA() - checkoutItems.value.forEach(fun(item){ - val shopId = item.shop_id ?: "unknown" - var target: ShopGroupType? = null - run { - var i: Number = 0 - while(i < groups.length){ - if (groups[i].shopId == shopId) { - target = groups[i] - break - } - i++ - } - } - if (target == null) { - target = ShopGroupType(shopId = shopId, shopName = item.shop_name ?: "商城优选", merchant_id = item.merchant_id ?: item.shop_id ?: "", items = _uA()) - groups.push(target) - } - target.items.push(item) - } - ) - return groups - } - ) - val getGroupTotal = fun(group: ShopGroupType): String { - var sum: Number = 0 - group.items.forEach(fun(item){ - val price = item.price - val quantity = item.quantity - if (isNaN(price) == false && isNaN(quantity) == false) { - sum += (price * quantity) - } - } - ) - return sum.toFixed(2) - } - val totalAmount = computed(fun(): Number { - console.log("计算商品总价,checkoutItems:", checkoutItems.value, " at pages/mall/consumer/checkout.uvue:474") - if (checkoutItems.value.length == 0) { - console.log("商品列表为空,返回0", " at pages/mall/consumer/checkout.uvue:476") - return 0 - } - val total = checkoutItems.value.reduce(fun(sum, item): Number { - if (item == null) { - return sum - } - val price = item.price - val quantity = item.quantity - if (isNaN(price) || isNaN(quantity) || price <= 0 || quantity <= 0) { - console.warn("商品价格或数量无效:", item, "price:", price, "quantity:", quantity, " at pages/mall/consumer/checkout.uvue:490") - return sum - } - val itemTotal = price * quantity - return sum + itemTotal - } - , 0) - return total - } - ) - val deliveryFee = computed(fun(): Number { - val option = deliveryOptions.value.find(fun(opt): Boolean { - return opt.id === selectedDelivery.value - } - ) - return option?.price ?: 0 - } - ) - val discountAmount = computed(fun(): Number { - val coupon = selectedCoupon.value?.template - if (coupon == null) { - return 0 - } - if (totalAmount.value < coupon.min_order_amount) { - return 0 - } - return coupon.discount_value - } - ) - val actualAmount = computed(fun(): Number { - val total = if (UTSAndroid.`typeof`(totalAmount.value) === "number") { - totalAmount.value - } else { - 0 - } - val delivery = if (UTSAndroid.`typeof`(deliveryFee.value) === "number") { - deliveryFee.value - } else { - 0 - } - val discount = if (UTSAndroid.`typeof`(discountAmount.value) === "number") { - discountAmount.value - } else { - 0 - } - var amount = total + delivery - discount - return if (amount > 0) { - amount - } else { - 0 - } - } - ) - watch(checkoutItems, fun(newItems: UTSArray){ - console.log("checkoutItems变化了:", newItems, " at pages/mall/consumer/checkout.uvue:531") - console.log("商品总价计算:", totalAmount.value, " at pages/mall/consumer/checkout.uvue:532") - } - , WatchOptions(deep = true)) - val processCheckoutItems = fun(items: UTSArray){ - val converted: UTSArray = _uA() - if (items != null && items.length > 0) { - run { - var i: Number = 0 - while(i < items.length){ - val obj = toUTSJSONObject(items[i]) - val id = obj.getString("id") ?: "" - val productId = obj.getString("product_id") ?: obj.getString("productId") ?: id - val skuId = obj.getString("sku_id") ?: obj.getString("skuId") ?: id - val productName = obj.getString("product_name") ?: obj.getString("name") ?: "" - val productImage = obj.getString("product_image") ?: obj.getString("image") ?: "" - var specs: Any = UTSJSONObject() - val skuSpecsAny = obj.get("sku_specifications") - if (skuSpecsAny != null) { - specs = skuSpecsAny - } else { - val specAny = obj.get("spec") - if (specAny != null) { - specs = (object : UTSJSONObject() { - var spec = specAny - } as Any) - } - } - var price: Number = 0 - val priceAny = obj.get("price") - if (priceAny != null) { - val parsed = parseFloat(priceAny.toString()) - if (isNaN(parsed) == false) { - price = parsed - } - } - var quantity: Number = 1 - val quantityAny = obj.get("quantity") - if (quantityAny != null) { - val parsedQ = parseInt(quantityAny.toString()) - if (isNaN(parsedQ) == false && parsedQ >= 1) { - quantity = parsedQ - } - } - val shopId = obj.getString("shop_id") ?: obj.getString("shopId") ?: "unknown" - val shopName = obj.getString("shop_name") ?: obj.getString("shopName") ?: "" - val merchantId = obj.getString("merchant_id") ?: obj.getString("merchantId") ?: "" - converted.push(CheckoutItemType(id = id, product_id = productId, sku_id = skuId, product_name = productName, product_image = productImage, sku_specifications = specs, price = parseFloat(price.toFixed(2)), quantity = quantity, shop_id = shopId, shop_name = shopName, merchant_id = merchantId)) - i++ - } - } - } - checkoutItems.value = converted - if (checkoutItems.value.length > 0) { - console.log("清洗后商品价格明细:", " at pages/mall/consumer/checkout.uvue:593") - checkoutItems.value.forEach(fun(item: CheckoutItemType, index: Number){ - console.log("商品" + index + ":", item.product_name, "价格:", item.price, "shop:", item.shop_id, " at pages/mall/consumer/checkout.uvue:595") - } - ) - } - } - fun gen_getCurrentUserId_fn(): String { - val userId = supabaseService.getCurrentUserId() - return userId ?: "" - } - val getCurrentUserId = ::gen_getCurrentUserId_fn - onMounted(fun(){ - uni__on("addressUpdated", fun(updatedAddressList: UTSArray){ - addressList.value = updatedAddressList - if (selectedAddress.value == null && addressList.value.length > 0) { - var defaultAddress: AddressItem? = null - run { - var i: Number = 0 - while(i < addressList.value.length){ - val addr = addressList.value[i] - if (addr.is_default) { - defaultAddress = addr - break - } - i++ - } - } - if (defaultAddress != null) { - selectedAddress.value = defaultAddress - } - } - } - ) - } - ) - onUnmounted(fun(){ - uni__off("addressUpdated", null) - uni__off("checkoutPageShow", null) - uni_removeStorageSync("checkout_type") - uni_removeStorageSync("checkout_items") - } - ) - fun gen_loadDefaultAddress_fn(): UTSPromise { - return wrapUTSPromise(suspend { - try { - val currentUserId = getCurrentUserId() - if (currentUserId != "") { - val supabaseAddresses = await(supabaseService.getAddresses()) - if (supabaseAddresses != null && supabaseAddresses.length > 0) { - val defaultAddress = supabaseAddresses.find(fun(addr: UserAddress): Boolean { - return addr.is_default === true - } - ) - if (defaultAddress != null) { - val addr = AddressItem(id = defaultAddress.id, recipient_name = defaultAddress.recipient_name, phone = defaultAddress.phone, province = defaultAddress.province, city = defaultAddress.city, district = defaultAddress.district, detail = defaultAddress.detail_address, is_default = defaultAddress.is_default) - selectedAddress.value = addr - } else { - val firstAddress = supabaseAddresses[0] - val addr = AddressItem(id = firstAddress.id, recipient_name = firstAddress.recipient_name, phone = firstAddress.phone, province = firstAddress.province, city = firstAddress.city, district = firstAddress.district, detail = firstAddress.detail_address, is_default = firstAddress.is_default) - selectedAddress.value = addr - } - val localAddresses: UTSArray = _uA() - run { - var i: Number = 0 - while(i < supabaseAddresses.length){ - val addr = supabaseAddresses[i] - localAddresses.push(object : UTSJSONObject() { - var id = addr.id - var name = addr.recipient_name - var phone = addr.phone - var province = addr.province - var city = addr.city - var district = addr.district - var detail = addr.detail_address - var isDefault = addr.is_default - }) - i++ - } - } - uni_setStorageSync("addresses", JSON.stringify(localAddresses)) - } - } - if (selectedAddress.value == null) { - val storedAddresses = uni_getStorageSync("addresses") - val storedAddressesStr = if (storedAddresses != null) { - storedAddresses.toString() - } else { - "" - } - if (storedAddressesStr != "") { - try { - val addresses = UTSAndroid.consoleDebugError(JSON.parse(storedAddressesStr), " at pages/mall/consumer/checkout.uvue:703") as UTSArray - if (addresses != null && addresses.length > 0) { - var picked: UTSJSONObject? = null - run { - var i: Number = 0 - while(i < addresses.length){ - val obj = toUTSJSONObject(addresses[i]) - val isDef = obj.getBoolean("isDefault") ?: obj.getBoolean("is_default") ?: false - if (isDef) { - picked = obj - break - } - i++ - } - } - if (picked == null) { - picked = toUTSJSONObject(addresses[0]) - } - val addr = AddressItem(id = picked.getString("id") ?: "", recipient_name = picked.getString("recipient_name") ?: picked.getString("name") ?: "", phone = picked.getString("phone") ?: "", province = picked.getString("province") ?: "", city = picked.getString("city") ?: "", district = picked.getString("district") ?: "", detail = picked.getString("detail") ?: picked.getString("detail_address") ?: "", is_default = picked.getBoolean("isDefault") ?: picked.getBoolean("is_default") ?: false) - selectedAddress.value = addr - } - } - catch (err: Throwable) { - console.error("解析本地地址数据失败:", err, " at pages/mall/consumer/checkout.uvue:729") - } - } - } - if (selectedAddress.value == null) { - val mockAddresses = _uA( - MockAddress(id = "addr_001", name = "张三", phone = "13800138001", province = "北京市", city = "北京市", district = "朝阳区", detail = "建国路88号SOHO现代城A座1001", isDefault = true), - MockAddress(id = "addr_002", name = "李四", phone = "13900139001", province = "上海市", city = "上海市", district = "浦东新区", detail = "陆家嘴环路1000号汇亚大厦20层", isDefault = false) - ) as UTSArray - uni_setStorageSync("addresses", JSON.stringify(mockAddresses)) - val first = mockAddresses[0] - val addr = AddressItem(id = first.id, recipient_name = first.name, phone = first.phone, province = first.province, city = first.city, district = first.district, detail = first.detail, is_default = first.isDefault) - selectedAddress.value = addr - } - } - catch (error: Throwable) { - console.error("加载地址失败:", error, " at pages/mall/consumer/checkout.uvue:779") - } - }) - } - val loadDefaultAddress = ::gen_loadDefaultAddress_fn - val isLoggedIn = computed(fun(): Boolean { - val userId = getCurrentUserId() - return userId != "" - } - ) - val getFullAddress = fun(address: AddressItem): String { - return "" + address.province + address.city + address.district + address.detail - } - fun gen_loadAddressList_fn(): UTSPromise { - return wrapUTSPromise(suspend { - console.log("[loadAddressList] 开始加载地址列表", " at pages/mall/consumer/checkout.uvue:796") - try { - val currentUserId = getCurrentUserId() - console.log("[loadAddressList] currentUserId:", currentUserId, " at pages/mall/consumer/checkout.uvue:799") - if (currentUserId != "") { - val supabaseAddresses = await(supabaseService.getAddresses()) - console.log("[loadAddressList] supabaseAddresses 数量:", if (supabaseAddresses != null) { - supabaseAddresses.length - } else { - 0 - } - , " at pages/mall/consumer/checkout.uvue:803") - if (supabaseAddresses != null && supabaseAddresses.length > 0) { - val list: UTSArray = _uA() - val localAddresses: UTSArray = _uA() - run { - var i: Number = 0 - while(i < supabaseAddresses.length){ - val addr = supabaseAddresses[i] - console.log("[loadAddressList] 地址", i, ":", addr.recipient_name, addr.phone, addr.detail_address, " at pages/mall/consumer/checkout.uvue:810") - list.push(AddressItem(id = addr.id, recipient_name = addr.recipient_name, phone = addr.phone, province = addr.province, city = addr.city, district = addr.district, detail = addr.detail_address, is_default = addr.is_default)) - localAddresses.push(object : UTSJSONObject() { - var id = addr.id - var name = addr.recipient_name - var phone = addr.phone - var province = addr.province - var city = addr.city - var district = addr.district - var detail = addr.detail_address - var isDefault = addr.is_default - }) - i++ - } - } - addressList.value = list - console.log("[loadAddressList] addressList.value 设置完成, 数量:", addressList.value.length, " at pages/mall/consumer/checkout.uvue:833") - uni_setStorageSync("addresses", JSON.stringify(localAddresses)) - } - } - if (addressList.value.length == 0) { - val storedAddresses = uni_getStorageSync("addresses") - val storedAddressesStr = if (storedAddresses != null) { - storedAddresses.toString() - } else { - "" - } - if (storedAddressesStr != "") { - try { - val addresses = UTSAndroid.consoleDebugError(JSON.parse(storedAddressesStr), " at pages/mall/consumer/checkout.uvue:843") as UTSArray - if (addresses != null && addresses.length > 0) { - val list: UTSArray = _uA() - run { - var i: Number = 0 - while(i < addresses.length){ - val obj = toUTSJSONObject(addresses[i]) - list.push(AddressItem(id = obj.getString("id") ?: "", recipient_name = obj.getString("recipient_name") ?: obj.getString("name") ?: "", phone = obj.getString("phone") ?: "", province = obj.getString("province") ?: "", city = obj.getString("city") ?: "", district = obj.getString("district") ?: "", detail = obj.getString("detail") ?: obj.getString("detail_address") ?: "", is_default = obj.getBoolean("isDefault") ?: obj.getBoolean("is_default") ?: false)) - i++ - } - } - addressList.value = list - } else { - addressList.value = _uA() - } - } catch (err: Throwable) { - addressList.value = _uA() - } - } else { - addressList.value = _uA() - } - } - if (addressList.value.length == 0) { - val mockAddresses = _uA( - MockAddress(id = "addr_001", name = "张三", phone = "13800138001", province = "北京市", city = "北京市", district = "朝阳区", detail = "建国路88号SOHO现代城A座1001", isDefault = true), - MockAddress(id = "addr_002", name = "李四", phone = "13900139001", province = "上海市", city = "上海市", district = "浦东新区", detail = "陆家嘴环路1000号汇亚大厦20层", isDefault = false) - ) as UTSArray - uni_setStorageSync("addresses", JSON.stringify(mockAddresses)) - val list: UTSArray = _uA() - run { - var i: Number = 0 - while(i < mockAddresses.length){ - val addr = mockAddresses[i] - list.push(AddressItem(id = addr.id, recipient_name = addr.name, phone = addr.phone, province = addr.province, city = addr.city, district = addr.district, detail = addr.detail, is_default = addr.isDefault)) - i++ - } - } - addressList.value = list - } - } - catch (error: Throwable) { - console.error("加载地址列表失败:", error, " at pages/mall/consumer/checkout.uvue:914") - } - }) - } - val loadAddressList = ::gen_loadAddressList_fn - fun gen_loadFromLocalStorage_fn(): Unit { - val cartData = uni_getStorageSync("cart") - val cartDataStr = if (cartData != null) { - cartData.toString() - } else { - "" - } - if (cartDataStr != "") { - try { - val cartItems = UTSAndroid.consoleDebugError(JSON.parse(cartDataStr), " at pages/mall/consumer/checkout.uvue:924") as UTSArray - val selectedCartItems: UTSArray = _uA() - run { - var i: Number = 0 - while(i < cartItems.length){ - val obj = toUTSJSONObject(cartItems[i]) - val selected = obj.getBoolean("selected") ?: false - if (selected) { - selectedCartItems.push(obj) - } - i++ - } - } - if (selectedCartItems.length > 0) { - processCheckoutItems(selectedCartItems) - } - } - catch (e: Throwable) { - console.error("解析购物车数据失败:", e, " at pages/mall/consumer/checkout.uvue:935") - } - } - loadDefaultAddress() - } - val loadFromLocalStorage = ::gen_loadFromLocalStorage_fn - fun gen_loadCheckoutData_fn(): Unit { - loadFromLocalStorage() - } - val loadCheckoutData = ::gen_loadCheckoutData_fn - onLoad__1(fun(options: Any){ - var dataLoaded = false - val checkoutTypeAny = uni_getStorageSync("checkout_type") - val checkoutType = if (checkoutTypeAny != null) { - checkoutTypeAny.toString() - } else { - "" - } - if (checkoutType == "buy_now" || checkoutType == "cart") { - console.log("检测到结算模式(" + checkoutType + "),从Storage加载数据", " at pages/mall/consumer/checkout.uvue:951") - val itemsStrAny = uni_getStorageSync("checkout_items") - val itemsStr = if (itemsStrAny != null) { - itemsStrAny.toString() - } else { - "" - } - if (itemsStr != "") { - try { - val items = UTSAndroid.consoleDebugError(JSON.parse(itemsStr as String), " at pages/mall/consumer/checkout.uvue:956") - console.log("从Storage加载的商品数据:", items, " at pages/mall/consumer/checkout.uvue:957") - if (items != null && UTSArray.isArray(items) && (items as UTSArray).length > 0) { - processCheckoutItems(items as UTSArray) - dataLoaded = true - } - } - catch (e: Throwable) { - console.error("解析结算数据失败", e, " at pages/mall/consumer/checkout.uvue:963") - } - } - } - if (dataLoaded == false) { - console.log("未找到预结算数据,尝试从购物车本地存储加载", " at pages/mall/consumer/checkout.uvue:969") - loadFromLocalStorage() - } - loadDefaultAddress() - loadAddressList() - } - ) - fun gen_onShow_fn(): Unit { - val userId = getCurrentUserId() - if (userId != "") { - loadDefaultAddress() - loadAddressList() - } - } - val onShow__1 = ::gen_onShow_fn - uni__on("checkoutPageShow", onShow__1) - val handleSelectAddress = fun(address: AddressItem){ - selectedAddress.value = address - showAddressPopup.value = false - } - val handleAddNewAddress = fun(){ - showNewAddressForm.value = true - } - val saveNewAddress = fun(): UTSPromise { - return wrapUTSPromise(suspend w1@{ - if (newAddress.value.recipient_name == "" || newAddress.value.phone == "" || newAddress.value.detail == "") { - uni_showToast(ShowToastOptions(title = "请填写完整信息", icon = "none")) - return@w1 - } - showSaveConfirm.value = true - }) - } - val handleSaveConfirm = fun(save: Boolean): UTSPromise { - return wrapUTSPromise(suspend { - showSaveConfirm.value = false - val newAddressData = NewAddressData(id = "addr_" + Date.now(), name = newAddress.value.recipient_name, phone = newAddress.value.phone, province = newAddress.value.province, city = newAddress.value.city, district = newAddress.value.district, detail = newAddress.value.detail, isDefault = newAddress.value.is_default) - if (save) { - val storedAddresses = uni_getStorageSync("addresses") - var addresses: UTSArray = _uA() - val storedAddressesStr = if (storedAddresses != null) { - storedAddresses.toString() - } else { - "" - } - if (storedAddressesStr != "") { - try { - addresses = UTSAndroid.consoleDebugError(JSON.parse(storedAddressesStr), " at pages/mall/consumer/checkout.uvue:1033") as UTSArray - } - catch (e: Throwable) { - addresses = _uA() - } - } - val normalized: UTSArray = _uA() - run { - var i: Number = 0 - while(i < addresses.length){ - val obj = toUTSJSONObject(addresses[i]) - val isDef = obj.getBoolean("isDefault") ?: obj.getBoolean("is_default") ?: false - normalized.push(object : UTSJSONObject() { - var id = obj.getString("id") ?: "" - var name = obj.getString("name") ?: obj.getString("recipient_name") ?: "" - var phone = obj.getString("phone") ?: "" - var province = obj.getString("province") ?: "" - var city = obj.getString("city") ?: "" - var district = obj.getString("district") ?: "" - var detail = obj.getString("detail") ?: obj.getString("detail_address") ?: "" - var isDefault = if (newAddressData.isDefault) { - false - } else { - isDef as Boolean - } - var label = obj.getString("label") ?: "" - }) - i++ - } - } - if (normalized.length === 0 && newAddressData.isDefault == false) { - newAddressData.isDefault = true - } - normalized.unshift(newAddressData) - uni_setStorageSync("addresses", JSON.stringify(normalized)) - val updatedList: UTSArray = _uA() - run { - var i: Number = 0 - while(i < normalized.length){ - val obj = toUTSJSONObject(normalized[i]) - updatedList.push(AddressItem(id = obj.getString("id") ?: "", recipient_name = obj.getString("recipient_name") ?: obj.getString("name") ?: "", phone = obj.getString("phone") ?: "", province = obj.getString("province") ?: "", city = obj.getString("city") ?: "", district = obj.getString("district") ?: "", detail = obj.getString("detail") ?: obj.getString("detail_address") ?: "", is_default = obj.getBoolean("isDefault") ?: obj.getBoolean("is_default") ?: false)) - i++ - } - } - uni__emit("addressUpdated", updatedList) - } - val checkoutFormatAddress = AddressItem(id = newAddressData.id ?: "", recipient_name = newAddressData.name ?: "", phone = newAddressData.phone ?: "", province = newAddressData.province, city = newAddressData.city, district = newAddressData.district, detail = newAddressData.detail, is_default = newAddressData.isDefault) - if (checkoutFormatAddress.is_default) { - run { - var i: Number = 0 - while(i < addressList.value.length){ - addressList.value[i].is_default = false - i++ - } - } - } - addressList.value.unshift(checkoutFormatAddress) - if (checkoutFormatAddress.is_default || selectedAddress.value == null) { - selectedAddress.value = checkoutFormatAddress - } - newAddress.value = NewAddressForm(recipient_name = "", phone = "", province = "", city = "", district = "", detail = "", is_default = false) - smartAddressInput.value = "" - showNewAddressForm.value = false - uni_showToast(ShowToastOptions(title = "地址保存成功", icon = "success")) - }) - } - val parseSmartAddress = fun(){ - val input = smartAddressInput.value.trim() - if (input == "") { - return - } - newAddress.value.recipient_name = "" - newAddress.value.phone = "" - newAddress.value.province = "" - newAddress.value.city = "" - newAddress.value.district = "" - newAddress.value.detail = "" - val phoneRegex = UTSRegExp("(1[3-9]\\d{9})", "g") - val phoneMatches = input.match(phoneRegex) - if (phoneMatches != null && phoneMatches.length > 0) { - newAddress.value.phone = phoneMatches[0] ?: "" - } - val nameRegex = UTSRegExp("([\\u4e00-\\u9fa5]{2,4})", "g") - val nameMatches = input.match(nameRegex) - if (nameMatches != null && nameMatches.length > 0) { - newAddress.value.recipient_name = nameMatches[0] ?: "" - } - var addressText = input - if (newAddress.value.recipient_name != "") { - addressText = addressText.replace(newAddress.value.recipient_name, "") - } - if (newAddress.value.phone != "") { - addressText = addressText.replace(newAddress.value.phone, "") - } - addressText = addressText.replace(UTSRegExp("[,,;;\\s]+", "g"), " ").trim() - val patterns = _uA( - UTSRegExp("^(.*?省)?(.*?市)?(.*?[区县])?(.*)\$", ""), - UTSRegExp("^(.*?省)?(.*?市)?(.*)\$", "") - ) - for(pattern in resolveUTSValueIterator(patterns)){ - val match = addressText.match(pattern) - if (match != null) { - val province = match[1] - val city = match[2] - val district = match[3] - val detail = match[4] - if (province != null) { - newAddress.value.province = province.replace("省", "").trim() - } - if (city != null) { - newAddress.value.city = city.replace("市", "").trim() - } - if (district != null) { - newAddress.value.district = district.trim() - } - if (detail != null) { - newAddress.value.detail = detail.trim() - } - if (newAddress.value.detail == "" && district != null && detail != null) { - newAddress.value.detail = detail.trim() - } - break - } - } - if (newAddress.value.province == "" && newAddress.value.city == "" && newAddress.value.district == "") { - val parts = addressText.split(UTSRegExp("[省市县区]", "")) - if (parts.length >= 2) { - newAddress.value.province = parts[0] ?: "" - newAddress.value.city = parts[1] ?: "" - newAddress.value.detail = parts.slice(2).join("").trim() - if (newAddress.value.detail == "") { - newAddress.value.detail = addressText - } - } else { - newAddress.value.detail = addressText - } - } - if (newAddress.value.detail == "" && addressText.trim() != "") { - newAddress.value.detail = addressText.trim() - } - } - val cancelNewAddress = fun(){ - showNewAddressForm.value = false - newAddress.value = NewAddressForm(recipient_name = "", phone = "", province = "", city = "", district = "", detail = "", is_default = false) - smartAddressInput.value = "" - } - fun gen_formatSpecs_fn(specs: Any): String { - if (specs == null) { - return "" - } - try { - val specsStr = JSON.stringify(specs) - if (specsStr == "{}" || specsStr == "[]" || specsStr == "\"\"" || specsStr == "") { - return "" - } - val specsObj = UTSAndroid.consoleDebugError(JSON.parse(specsStr), " at pages/mall/consumer/checkout.uvue:1221") as Record - val parts: UTSArray = _uA() - val possibleKeys = _uA( - "颜色", - "尺寸", - "规格", - "型号", - "版本", - "材质", - "款式", - "color", - "size", - "spec", - "version", - "style" - ) - run { - var i: Number = 0 - while(i < possibleKeys.length){ - val key = possibleKeys[i] - val value = specsObj[key] - if (value != null && value.toString() != "") { - parts.push("" + key + ": " + value.toString()) - } - i++ - } - } - if (parts.length === 0) { - val keyValueRegex = UTSRegExp("\"([^\"]+)\":\\s*\"([^\"]+)\"", "g") - var match: RegExpExecArray? = null - while(true){ - match = keyValueRegex.exec(specsStr) - if (match == null) { - break - } - val key = match[1] - val value = match[2] - if (key != null && value != null && value != "") { - parts.push("" + key + ": " + value) - } - } - } - if (parts.length === 0) { - return "" - } - return parts.join("; ") - } - catch (e: Throwable) { - return "" - } - } - val formatSpecs = ::gen_formatSpecs_fn - val selectDelivery = fun(option: DeliveryOptionType){ - selectedDelivery.value = option.id - } - val selectCoupon = fun(){ - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/coupons", success = fun(res: Any){})) - uni__on("couponSelected", fun(coupon: Any){ - selectedCoupon.value = coupon as UserCouponType - uni__off("couponSelected", null) - } - ) - } - val submitOrder = fun(): UTSPromise { - return wrapUTSPromise(suspend w1@{ - if (selectedAddress.value == null) { - uni_showToast(ShowToastOptions(title = "请选择收货地址", icon = "none")) - return@w1 - } - if (checkoutItems.value.length === 0) { - uni_showToast(ShowToastOptions(title = "订单中没有商品", icon = "none")) - return@w1 - } - uni_showLoading(ShowLoadingOptions(title = "提交中...")) - try { - val userId = supabaseService.getCurrentUserId() - if (userId == null || userId == "") { - uni_hideLoading() - uni_showToast(ShowToastOptions(title = "请先登录", icon = "none")) - return@w1 - } - console.log("[submitOrder] 开始创建订单, userId:", userId, " at pages/mall/consumer/checkout.uvue:1306") - console.log("[submitOrder] shopGroups数量:", shopGroups.value.length, " at pages/mall/consumer/checkout.uvue:1307") - val groups: UTSArray = _uA() - run { - var i: Number = 0 - while(i < shopGroups.value.length){ - val group = shopGroups.value[i] - val items: UTSArray = _uA() - run { - var j: Number = 0 - while(j < group.items.length){ - val item = group.items[j] - items.push(object : UTSJSONObject() { - var id = item.id - var product_id = item.product_id - var sku_id = item.sku_id - var quantity = item.quantity - var price = item.price - var product_name = item.product_name - var product_image = item.product_image - var specifications = item.sku_specifications - }) - j++ - } - } - groups.push(_uO("merchant_id" to if ((group.merchant_id != null && group.merchant_id != "")) { - group.merchant_id - } else { - group.shopId - } - , "shopId" to group.shopId, "shopName" to group.shopName, "items" to items)) - i++ - } - } - console.log("[submitOrder] 准备传递的 groups 数量:", groups.length, " at pages/mall/consumer/checkout.uvue:1334") - val result = await(supabaseService.createOrdersByShop(ShopOrderParams(shipping_address = if (selectedAddress.value != null) { - toUTSJSONObject(selectedAddress.value!!) - } else { - UTSJSONObject() - } - , shopGroups = groups, deliveryFee = deliveryFee.value, discountAmount = discountAmount.value))) - uni_hideLoading() - console.log("[submitOrder] 创建结果 success:", result.success, " at pages/mall/consumer/checkout.uvue:1345") - if (result.success) { - try { - uni_removeStorageSync("checkout_items") - uni_removeStorageSync("checkout_type") - } catch (e: Throwable) { - console.error(e, " at pages/mall/consumer/checkout.uvue:1351") - } - val orderIds = result.orderIds - if (orderIds.length === 1) { - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/payment?orderId=" + orderIds[0] + "&amount=" + actualAmount.value)) - } else { - uni_showToast(ShowToastOptions(title = "成功创建" + orderIds.length + "个订单", icon = "success")) - setTimeout(fun(){ - uni_redirectTo(RedirectToOptions(url = "/pages/mall/consumer/orders")) - }, 1500) - } - } else { - val errMsg = if ((result.error != null && result.error !== "")) { - result.error!! - } else { - "创建订单失败" - } - console.error("[submitOrder] 订单创建失败:", errMsg, " at pages/mall/consumer/checkout.uvue:1366") - uni_showToast(ShowToastOptions(title = errMsg, icon = "none")) - } - } - catch (err: Throwable) { - uni_hideLoading() - console.error("[submitOrder] 提交订单错误:", err, " at pages/mall/consumer/checkout.uvue:1372") - val errMsg = if ((err.message != null && err.message !== "")) { - (err.message as String) - } else { - "提交订单失败" - } - uni_showToast(ShowToastOptions(title = errMsg, icon = "none")) - } - }) - } - val selectAddress = fun(){ - showAddressPopup.value = true - } - val goToLogin = fun(){ - uni_navigateTo(NavigateToOptions(url = "/pages/login/login")) - } - return fun(): Any? { - return _cE("view", _uM("class" to "checkout-page"), _uA( - _cE("scroll-view", _uM("class" to "checkout-content", "scroll-y" to ""), _uA( - _cE("view", _uM("class" to "address-section", "onClick" to selectAddress), _uA( - if (isTrue(selectedAddress.value)) { - _cE("view", _uM("key" to 0, "class" to "address-info"), _uA( - _cE("view", _uM("class" to "address-header"), _uA( - _cE("text", _uM("class" to "recipient"), _tD(selectedAddress.value!!!!.recipient_name), 1), - _cE("text", _uM("class" to "phone"), _tD(selectedAddress.value!!!!.phone), 1), - if (isTrue(selectedAddress.value!!!!.is_default)) { - _cE("view", _uM("key" to 0, "class" to "default-tag"), _uA( - _cE("text", _uM("class" to "tag-text"), "默认") - )) - } else { - _cC("v-if", true) - } - )), - _cE("text", _uM("class" to "address-detail"), _tD(getFullAddress(selectedAddress.value!!!!)), 1) - )) - } else { - _cE("view", _uM("key" to 1, "class" to "no-address"), _uA( - _cE("text", _uM("class" to "no-address-text"), "请选择收货地址"), - _cE("text", _uM("class" to "no-address-arrow"), "›") - )) - } - )), - _cE("view", _uM("class" to "products-section"), _uA( - if (checkoutItems.value.length > 0) { - _cE("view", _uM("key" to 0, "class" to "debug-info"), _uA( - _cE("text", _uM("class" to "debug-text"), "共 " + _tD(checkoutItems.value.length) + " 件商品", 1) - )) - } else { - _cC("v-if", true) - } - , - if (shopGroups.value.length > 0) { - _cE("view", _uM("key" to 1), _uA( - _cE(Fragment, null, RenderHelpers.renderList(shopGroups.value, fun(group, __key, __index, _cached): Any { - return _cE("view", _uM("key" to group.shopId, "class" to "shop-group"), _uA( - _cE("view", _uM("class" to "shop-header"), _uA( - _cE("text", _uM("class" to "shop-icon"), "🏪"), - _cE("text", _uM("class" to "shop-name"), _tD(group.shopName), 1) - )), - _cE(Fragment, null, RenderHelpers.renderList(group.items, fun(item, __key, __index, _cached): Any { - return _cE("view", _uM("key" to item.id, "class" to "product-item"), _uA( - _cE("image", _uM("class" to "product-image", "src" to item.product_image, "mode" to "aspectFill"), null, 8, _uA( - "src" - )), - _cE("view", _uM("class" to "product-info"), _uA( - _cE("text", _uM("class" to "product-name"), _tD(item.product_name), 1), - if (isTrue(item.sku_specifications)) { - _cE("text", _uM("key" to 0, "class" to "product-spec"), _tD(formatSpecs(item.sku_specifications)), 1) - } else { - _cC("v-if", true) - }, - _cE("view", _uM("class" to "product-bottom"), _uA( - _cE("text", _uM("class" to "product-price"), "¥" + _tD(item.price), 1), - _cE("text", _uM("class" to "product-quantity"), "×" + _tD(item.quantity), 1) - )) - )) - )) - }), 128), - _cE("view", _uM("class" to "shop-subtotal"), _uA( - _cE("text", _uM("class" to "subtotal-label"), "配送方式"), - _cE("text", _uM("class" to "subtotal-value"), "快递 免邮") - )), - _cE("view", _uM("class" to "shop-subtotal"), _uA( - _cE("text", _uM("class" to "subtotal-text"), "小计: "), - _cE("text", _uM("class" to "subtotal-price"), "¥" + _tD(getGroupTotal(group)), 1) - )) - )) - }), 128) - )) - } else { - _cE("view", _uM("key" to 2, "class" to "no-products"), _uA( - _cE("text", _uM("class" to "no-products-text"), "暂无商品信息") - )) - } - )), - _cE("view", _uM("class" to "delivery-section"), _uA( - _cE("text", _uM("class" to "section-title"), "配送方式"), - _cE("view", _uM("class" to "delivery-options"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(deliveryOptions.value, fun(option, __key, __index, _cached): Any { - return _cE("view", _uM("key" to option.id, "class" to _nC(_uA( - "delivery-option", - _uM("selected" to (selectedDelivery.value === option.id)) - )), "onClick" to fun(){ - selectDelivery(option) - } - ), _uA( - _cE("text", _uM("class" to "option-name"), _tD(option.name), 1), - _cE("text", _uM("class" to "option-price"), "¥" + _tD(option.price), 1), - if (selectedDelivery.value === option.id) { - _cE("text", _uM("key" to 0, "class" to "option-selected"), "✓") - } else { - _cC("v-if", true) - } - ), 10, _uA( - "onClick" - )) - } - ), 128) - )) - )), - _cE("view", _uM("class" to "coupon-section", "onClick" to selectCoupon), _uA( - _cE("text", _uM("class" to "section-title"), "优惠券"), - _cE("view", _uM("class" to "coupon-info"), _uA( - if (selectedCoupon.value != null) { - _cE("text", _uM("key" to 0, "class" to "coupon-selected"), _tD(selectedCoupon.value!!.template?.name ?: "已选择优惠券 (¥" + (selectedCoupon.value!!.template?.discount_value ?: 0) + ")"), 1) - } else { - _cE("text", _uM("key" to 1, "class" to "coupon-placeholder"), "选择优惠券") - } - , - _cE("text", _uM("class" to "coupon-arrow"), "›") - )) - )), - _cE("view", _uM("class" to "remark-section"), _uA( - _cE("text", _uM("class" to "section-title"), "买家留言"), - _cE("textarea", _uM("class" to "remark-input", "modelValue" to remark.value, "onInput" to fun(`$event`: UniInputEvent){ - remark.value = `$event`.detail.value - } - , "placeholder" to "选填,请先和商家协商一致", "maxlength" to "100"), null, 40, _uA( - "modelValue", - "onInput" - )) - )), - _cE("view", _uM("class" to "price-section"), _uA( - _cE("text", _uM("class" to "section-title"), "价格明细"), - _cE("view", _uM("class" to "price-detail"), _uA( - _cE("view", _uM("class" to "price-row"), _uA( - _cE("text", _uM("class" to "price-label"), "商品总价"), - _cE("text", _uM("class" to "price-value"), "¥" + _tD(totalAmount.value.toFixed(2)), 1) - )), - _cE("view", _uM("class" to "price-row"), _uA( - _cE("text", _uM("class" to "price-label"), "运费"), - _cE("text", _uM("class" to "price-value"), "+¥" + _tD(deliveryFee.value.toFixed(2)), 1) - )), - if (discountAmount.value > 0) { - _cE("view", _uM("key" to 0, "class" to "price-row"), _uA( - _cE("text", _uM("class" to "price-label"), "优惠减免"), - _cE("text", _uM("class" to "price-value discount"), "-¥" + _tD(discountAmount.value.toFixed(2)), 1) - )) - } else { - _cC("v-if", true) - } - , - _cE("view", _uM("class" to "price-row total"), _uA( - _cE("text", _uM("class" to "price-label"), "应付金额"), - _cE("text", _uM("class" to "price-value total-price"), "¥" + _tD(actualAmount.value.toFixed(2)), 1) - )) - )) - )) - )), - _cE("view", _uM("class" to "bottom-bar"), _uA( - _cE("view", _uM("class" to "price-summary"), _uA( - _cE("text", _uM("class" to "summary-label"), "合计:"), - _cE("text", _uM("class" to "summary-price"), "¥" + _tD(actualAmount.value.toFixed(2)), 1) - )), - _cE("button", _uM("class" to "submit-btn", "onClick" to submitOrder), "提交订单") - )), - if (isTrue(showAddressPopup.value)) { - _cE("view", _uM("key" to 0, "class" to "address-popup-mask", "onClick" to fun(){ - showAddressPopup.value = false - }), _uA( - _cE("view", _uM("class" to "address-popup", "onClick" to withModifiers(fun(){}, _uA( - "stop" - ))), _uA( - _cE("view", _uM("class" to "popup-header"), _uA( - _cE("text", _uM("class" to "popup-title"), "选择收货地址"), - _cE("text", _uM("class" to "popup-close", "onClick" to fun(){ - showAddressPopup.value = false - }), "×", 8, _uA( - "onClick" - )) - )), - _cE("scroll-view", _uM("class" to "address-list-container", "scroll-y" to ""), _uA( - if (isLoggedIn.value == false) { - _cE("view", _uM("key" to 0, "class" to "login-prompt", "onClick" to goToLogin), _uA( - _cE("text", _uM("class" to "login-prompt-icon"), "🔒"), - _cE("text", _uM("class" to "login-prompt-text"), "您尚未登录,点击登录以同步服务器地址"), - _cE("text", _uM("class" to "login-prompt-arrow"), "›") - )) - } else { - _cC("v-if", true) - }, - if (isTrue(isLoggedIn.value)) { - _cE("view", _uM("key" to 1), _uA( - if (addressList.value.length > 0) { - _cE("view", _uM("key" to 0), _uA( - _cE(Fragment, null, RenderHelpers.renderList(addressList.value, fun(address, __key, __index, _cached): Any { - return _cE("view", _uM("key" to address.id, "class" to "popup-address-item", "onClick" to fun(){ - handleSelectAddress(address) - }), _uA( - _cE("view", _uM("class" to "popup-address-header"), _uA( - _cE("text", _uM("class" to "popup-address-name"), _tD(address.recipient_name), 1), - _cE("text", _uM("class" to "popup-address-phone"), _tD(address.phone), 1), - if (isTrue(address.is_default)) { - _cE("view", _uM("key" to 0, "class" to "popup-default-tag"), _uA( - _cE("text", _uM("class" to "popup-tag-text"), "默认") - )) - } else { - _cC("v-if", true) - } - )), - _cE("text", _uM("class" to "popup-address-detail"), _tD(getFullAddress(address)), 1), - if (isTrue(selectedAddress.value != null && selectedAddress.value!!.id === address.id)) { - _cE("view", _uM("key" to 0, "class" to "popup-selected-indicator"), _uA( - _cE("text", null, "✓") - )) - } else { - _cC("v-if", true) - } - ), 8, _uA( - "onClick" - )) - }), 128) - )) - } else { - _cE("view", _uM("key" to 1, "class" to "popup-empty-address"), _uA( - _cE("text", _uM("class" to "popup-empty-icon"), "📍"), - _cE("text", _uM("class" to "popup-empty-text"), "暂无收货地址") - )) - } - )) - } else { - _cC("v-if", true) - }, - if (isTrue(isLoggedIn.value == false && addressList.value.length > 0)) { - _cE("view", _uM("key" to 2), _uA( - _cE("text", _uM("class" to "local-address-title"), "本地地址(未同步)"), - _cE(Fragment, null, RenderHelpers.renderList(addressList.value, fun(address, __key, __index, _cached): Any { - return _cE("view", _uM("key" to address.id, "class" to "popup-address-item", "onClick" to fun(){ - handleSelectAddress(address) - }), _uA( - _cE("view", _uM("class" to "popup-address-header"), _uA( - _cE("text", _uM("class" to "popup-address-name"), _tD(address.recipient_name), 1), - _cE("text", _uM("class" to "popup-address-phone"), _tD(address.phone), 1), - if (isTrue(address.is_default)) { - _cE("view", _uM("key" to 0, "class" to "popup-default-tag"), _uA( - _cE("text", _uM("class" to "popup-tag-text"), "默认") - )) - } else { - _cC("v-if", true) - } - )), - _cE("text", _uM("class" to "popup-address-detail"), _tD(getFullAddress(address)), 1), - if (isTrue(selectedAddress.value != null && selectedAddress.value!!.id === address.id)) { - _cE("view", _uM("key" to 0, "class" to "popup-selected-indicator"), _uA( - _cE("text", null, "✓") - )) - } else { - _cC("v-if", true) - } - ), 8, _uA( - "onClick" - )) - }), 128) - )) - } else { - _cC("v-if", true) - }, - if (isTrue(isLoggedIn.value && addressList.value.length === 0)) { - _cE("view", _uM("key" to 3, "class" to "popup-empty-address"), _uA( - _cE("text", _uM("class" to "popup-empty-icon"), "📍"), - _cE("text", _uM("class" to "popup-empty-text"), "暂无收货地址") - )) - } else { - _cC("v-if", true) - } - )), - _cE("view", _uM("class" to "popup-add-address-btn", "onClick" to handleAddNewAddress), _uA( - _cE("text", _uM("class" to "popup-btn-icon"), "+"), - _cE("text", _uM("class" to "popup-btn-text"), "新建收货地址") - )) - ), 8, _uA( - "onClick" - )) - ), 8, _uA( - "onClick" - )) - } else { - _cC("v-if", true) - } - , - if (isTrue(showNewAddressForm.value)) { - _cE("view", _uM("key" to 1, "class" to "address-form-mask", "onClick" to cancelNewAddress), _uA( - _cE("view", _uM("class" to "address-form-popup", "onClick" to withModifiers(fun(){}, _uA( - "stop" - ))), _uA( - _cE("view", _uM("class" to "form-header"), _uA( - _cE("text", _uM("class" to "form-title"), "新建收货地址"), - _cE("text", _uM("class" to "form-close", "onClick" to cancelNewAddress), "×") - )), - _cE("scroll-view", _uM("class" to "form-content", "scroll-y" to ""), _uA( - _cE("view", _uM("class" to "form-item"), _uA( - _cE("text", _uM("class" to "form-label"), "收货人"), - _cE("input", _uM("class" to "form-input", "modelValue" to newAddress.value.recipient_name, "onInput" to fun(`$event`: UniInputEvent){ - newAddress.value.recipient_name = `$event`.detail.value - }, "placeholder" to "请输入收货人姓名"), null, 40, _uA( - "modelValue", - "onInput" - )) - )), - _cE("view", _uM("class" to "form-item"), _uA( - _cE("text", _uM("class" to "form-label"), "手机号"), - _cE("input", _uM("class" to "form-input", "modelValue" to newAddress.value.phone, "onInput" to fun(`$event`: UniInputEvent){ - newAddress.value.phone = `$event`.detail.value - }, "placeholder" to "请输入手机号码", "type" to "number"), null, 40, _uA( - "modelValue", - "onInput" - )) - )), - _cE("view", _uM("class" to "form-item"), _uA( - _cE("text", _uM("class" to "form-label"), "智能填写地址"), - _cE("textarea", _uM("class" to "form-textarea smart-address-input", "modelValue" to smartAddressInput.value, "onInput" to _uA(fun(`$event`: UniInputEvent){ - smartAddressInput.value = `$event`.detail.value - }, parseSmartAddress), "placeholder" to "粘贴如:北京市朝阳区三里屯SOHO A座 张三 13800138000", "maxlength" to "200"), null, 40, _uA( - "modelValue", - "onInput" - )), - _cE("text", _uM("class" to "smart-tip"), "自动识别:地址+姓名+电话(支持粘贴文本)") - )), - _cE("view", _uM("class" to "form-item"), _uA( - _cE("text", _uM("class" to "form-label"), "所在地区"), - _cE("view", _uM("class" to "region-inputs"), _uA( - _cE("input", _uM("class" to "form-input region-input form-input-readonly", "modelValue" to newAddress.value.province, "onInput" to fun(`$event`: UniInputEvent){ - newAddress.value.province = `$event`.detail.value - }, "placeholder" to "省", "readonly" to ""), null, 40, _uA( - "modelValue", - "onInput" - )), - _cE("input", _uM("class" to "form-input region-input form-input-readonly", "modelValue" to newAddress.value.city, "onInput" to fun(`$event`: UniInputEvent){ - newAddress.value.city = `$event`.detail.value - }, "placeholder" to "市", "readonly" to ""), null, 40, _uA( - "modelValue", - "onInput" - )), - _cE("input", _uM("class" to "form-input region-input form-input-readonly", "modelValue" to newAddress.value.district, "onInput" to fun(`$event`: UniInputEvent){ - newAddress.value.district = `$event`.detail.value - }, "placeholder" to "区/县", "readonly" to ""), null, 40, _uA( - "modelValue", - "onInput" - )) - )) - )), - _cE("view", _uM("class" to "form-item"), _uA( - _cE("text", _uM("class" to "form-label"), "详细地址"), - _cE("textarea", _uM("class" to "form-textarea", "modelValue" to newAddress.value.detail, "onInput" to fun(`$event`: UniInputEvent){ - newAddress.value.detail = `$event`.detail.value - }, "placeholder" to "街道、小区、楼栋、门牌号等", "maxlength" to "100"), null, 40, _uA( - "modelValue", - "onInput" - )) - )), - _cE("view", _uM("class" to "form-item checkbox-item"), _uA( - _cE("view", _uM("class" to "checkbox-wrapper", "onClick" to fun(){ - newAddress.value.is_default = if (newAddress.value.is_default) { - false - } else { - true - } - }), _uA( - _cE("view", _uM("class" to _nC(_uA( - "checkbox", - _uM("checked" to newAddress.value.is_default) - ))), _uA( - if (isTrue(newAddress.value.is_default)) { - _cE("text", _uM("key" to 0, "class" to "checkbox-check"), "✓") - } else { - _cC("v-if", true) - } - ), 2), - _cE("text", _uM("class" to "checkbox-label"), "设为默认地址") - ), 8, _uA( - "onClick" - )) - )) - )), - _cE("view", _uM("class" to "form-buttons"), _uA( - _cE("button", _uM("class" to "form-cancel-btn", "onClick" to cancelNewAddress), "取消"), - _cE("button", _uM("class" to "form-submit-btn", "onClick" to saveNewAddress), "保存") - )) - ), 8, _uA( - "onClick" - )) - )) - } else { - _cC("v-if", true) - } - , - if (isTrue(showSaveConfirm.value)) { - _cE("view", _uM("key" to 2, "class" to "confirm-popup-mask"), _uA( - _cE("view", _uM("class" to "confirm-popup"), _uA( - _cE("view", _uM("class" to "confirm-header"), _uA( - _cE("text", _uM("class" to "confirm-title"), "保存地址") - )), - _cE("view", _uM("class" to "confirm-content"), _uA( - _cE("text", _uM("class" to "confirm-message"), "是否保存该地址用于下次使用?") - )), - _cE("view", _uM("class" to "confirm-buttons"), _uA( - _cE("button", _uM("class" to "confirm-btn cancel", "onClick" to fun(){ - handleSaveConfirm(false) - }), "仅本次", 8, _uA( - "onClick" - )), - _cE("button", _uM("class" to "confirm-btn confirm", "onClick" to fun(){ - handleSaveConfirm(true) - }), "保存", 8, _uA( - "onClick" - )) - )) - )) - )) - } else { - _cC("v-if", true) - } - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0, - styles1 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("checkout-page" to _pS(_uM("display" to "flex", "flexDirection" to "column", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "backgroundColor" to "#f5f5f5")), "checkout-header" to _pS(_uM("backgroundColor" to "#ffffff", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#e5e5e5")), "header-title" to _pS(_uM("fontSize" to 18, "fontWeight" to "bold", "color" to "#333333", "textAlign" to "center")), "checkout-content" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "address-section" to _pS(_uM("backgroundColor" to "#ffffff", "marginBottom" to 10, "paddingTop" to 20, "paddingRight" to 15, "paddingBottom" to 20, "paddingLeft" to 15, "display" to "flex", "alignItems" to "center")), "address-info" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "address-header" to _pS(_uM("display" to "flex", "alignItems" to "center", "marginBottom" to 10)), "recipient" to _pS(_uM("fontSize" to 16, "fontWeight" to "bold", "color" to "#333333", "marginRight" to 15)), "phone" to _pS(_uM("fontSize" to 14, "color" to "#666666", "marginRight" to 10)), "default-tag" to _pS(_uM("backgroundColor" to "#ff4757", "paddingTop" to 2, "paddingRight" to 8, "paddingBottom" to 2, "paddingLeft" to 8, "borderTopLeftRadius" to 10, "borderTopRightRadius" to 10, "borderBottomRightRadius" to 10, "borderBottomLeftRadius" to 10)), "tag-text" to _pS(_uM("color" to "#ffffff", "fontSize" to 12)), "address-detail" to _pS(_uM("fontSize" to 14, "color" to "#333333", "lineHeight" to 1.4)), "no-address" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "display" to "flex", "justifyContent" to "space-between", "alignItems" to "center")), "no-address-text" to _pS(_uM("fontSize" to 16, "color" to "#999999")), "no-address-arrow" to _pS(_uM("color" to "#999999", "fontSize" to 18)), "products-section" to _pS(_uM("backgroundColor" to "#ffffff", "marginBottom" to 10, "paddingTop" to 0, "paddingRight" to 15, "paddingBottom" to 0, "paddingLeft" to 15)), "debug-info" to _pS(_uM("backgroundColor" to "#f8f9fa", "paddingTop" to 10, "paddingRight" to 15, "paddingBottom" to 10, "paddingLeft" to 15, "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#e5e5e5", "marginBottom" to 10)), "debug-text" to _pS(_uM("fontSize" to 12, "color" to "#666666", "textAlign" to "center")), "shop-group" to _pS(_uM("backgroundColor" to "#ffffff", "marginTop" to 10, "marginRight" to 0, "marginBottom" to 10, "marginLeft" to 0, "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "paddingTop" to 10, "paddingRight" to 10, "paddingBottom" to 10, "paddingLeft" to 10)), "shop-header" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center", "paddingBottom" to 10, "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#f0f0f0")), "shop-icon" to _pS(_uM("fontSize" to 18, "marginRight" to 8)), "shop-name" to _pS(_uM("fontSize" to 16, "fontWeight" to "bold", "color" to "#333333")), "shop-subtotal" to _pS(_uM("display" to "flex", "justifyContent" to "flex-end", "alignItems" to "center", "paddingTop" to 10, "marginTop" to 5, "borderTopWidth" to 1, "borderTopStyle" to "dashed", "borderTopColor" to "#f0f0f0", "fontSize" to 14)), "subtotal-label" to _pS(_uM("color" to "#666666", "marginRight" to 10)), "subtotal-value" to _pS(_uM("color" to "#333333")), "subtotal-text" to _pS(_uM("color" to "#333333", "marginRight" to 5)), "subtotal-price" to _pS(_uM("color" to "#ff4757", "fontWeight" to "bold", "fontSize" to 16)), "product-item" to _pS(_uM("display" to "flex", "paddingTop" to 15, "paddingRight" to 0, "paddingBottom" to 15, "paddingLeft" to 0, "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#f5f5f5", "borderBottomWidth:last-child" to "medium", "borderBottomStyle:last-child" to "none", "borderBottomColor:last-child" to "#000000")), "product-image" to _pS(_uM("width" to 80, "height" to 80, "borderTopLeftRadius" to 5, "borderTopRightRadius" to 5, "borderBottomRightRadius" to 5, "borderBottomLeftRadius" to 5, "marginRight" to 15)), "product-info" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "display" to "flex", "flexDirection" to "column", "justifyContent" to "space-between")), "product-name" to _pS(_uM("fontSize" to 14, "color" to "#333333", "lineHeight" to 1.4, "marginBottom" to 5, "lines" to 2, "textOverflow" to "ellipsis", "overflow" to "hidden")), "product-spec" to _pS(_uM("fontSize" to 12, "color" to "#999999", "marginBottom" to 10)), "product-bottom" to _pS(_uM("display" to "flex", "justifyContent" to "space-between", "alignItems" to "center")), "product-price" to _pS(_uM("fontSize" to 16, "color" to "#ff4757", "fontWeight" to "bold")), "product-quantity" to _pS(_uM("fontSize" to 14, "color" to "#666666")), "delivery-section" to _pS(_uM("backgroundColor" to "#ffffff", "marginBottom" to 10, "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15)), "coupon-section" to _pS(_uM("backgroundColor" to "#ffffff", "marginBottom" to 10, "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15)), "remark-section" to _pS(_uM("backgroundColor" to "#ffffff", "marginBottom" to 10, "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15)), "price-section" to _pS(_uM("backgroundColor" to "#ffffff", "marginBottom" to 10, "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15)), "section-title" to _pS(_uM("fontSize" to 16, "fontWeight" to "bold", "color" to "#333333", "marginBottom" to 15)), "delivery-options" to _pS(_uM("display" to "flex", "flexDirection" to "column")), "delivery-option" to _uM("" to _uM("display" to "flex", "alignItems" to "center", "justifyContent" to "space-between", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#e5e5e5", "borderRightColor" to "#e5e5e5", "borderBottomColor" to "#e5e5e5", "borderLeftColor" to "#e5e5e5", "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "marginBottom" to 10, "marginBottom:last-child" to 0), ".selected" to _uM("borderTopColor" to "#007aff", "borderRightColor" to "#007aff", "borderBottomColor" to "#007aff", "borderLeftColor" to "#007aff", "backgroundColor" to "#f0f8ff")), "option-name" to _pS(_uM("fontSize" to 14, "color" to "#333333")), "option-price" to _pS(_uM("fontSize" to 14, "color" to "#ff4757", "fontWeight" to "bold")), "option-selected" to _pS(_uM("color" to "#007aff", "fontSize" to 16)), "coupon-info" to _pS(_uM("display" to "flex", "alignItems" to "center", "justifyContent" to "space-between", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#e5e5e5", "borderRightColor" to "#e5e5e5", "borderBottomColor" to "#e5e5e5", "borderLeftColor" to "#e5e5e5", "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8)), "coupon-selected" to _pS(_uM("fontSize" to 14, "color" to "#007aff")), "coupon-placeholder" to _pS(_uM("fontSize" to 14, "color" to "#999999")), "coupon-arrow" to _pS(_uM("color" to "#999999", "fontSize" to 16)), "remark-input" to _pS(_uM("width" to "100%", "minHeight" to 40, "paddingTop" to 10, "paddingRight" to 10, "paddingBottom" to 10, "paddingLeft" to 10, "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#e5e5e5", "borderRightColor" to "#e5e5e5", "borderBottomColor" to "#e5e5e5", "borderLeftColor" to "#e5e5e5", "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "fontSize" to 14, "color" to "#333333")), "price-detail" to _pS(_uM("paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "backgroundColor" to "#f8f9fa", "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8)), "price-row" to _uM("" to _uM("display" to "flex", "justifyContent" to "space-between", "alignItems" to "center", "paddingTop" to 8, "paddingRight" to 0, "paddingBottom" to 8, "paddingLeft" to 0), ".total" to _uM("borderTopWidth" to 1, "borderTopStyle" to "solid", "borderTopColor" to "#e5e5e5", "marginTop" to 8, "paddingTop" to 15)), "price-label" to _pS(_uM("fontSize" to 14, "color" to "#666666")), "price-value" to _uM("" to _uM("fontSize" to 14, "color" to "#333333"), ".discount" to _uM("color" to "#4caf50"), ".total-price" to _uM("fontSize" to 18, "color" to "#ff4757", "fontWeight" to "bold")), "bottom-bar" to _pS(_uM("backgroundColor" to "#ffffff", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "borderTopWidth" to 1, "borderTopStyle" to "solid", "borderTopColor" to "#e5e5e5", "display" to "flex", "alignItems" to "center", "justifyContent" to "space-between")), "price-summary" to _pS(_uM("display" to "flex", "alignItems" to "flex-end")), "summary-label" to _pS(_uM("fontSize" to 14, "color" to "#333333", "marginRight" to 5)), "summary-price" to _pS(_uM("fontSize" to 20, "color" to "#ff4757", "fontWeight" to "bold")), "submit-btn" to _pS(_uM("backgroundColor" to "#007aff", "color" to "#ffffff", "paddingTop" to 0, "paddingRight" to 40, "paddingBottom" to 0, "paddingLeft" to 40, "height" to 45, "borderTopLeftRadius" to 22.5, "borderTopRightRadius" to 22.5, "borderBottomRightRadius" to 22.5, "borderBottomLeftRadius" to 22.5, "fontSize" to 16, "fontWeight" to "bold", "borderTopWidth" to "medium", "borderRightWidth" to "medium", "borderBottomWidth" to "medium", "borderLeftWidth" to "medium", "borderTopStyle" to "none", "borderRightStyle" to "none", "borderBottomStyle" to "none", "borderLeftStyle" to "none", "borderTopColor" to "#000000", "borderRightColor" to "#000000", "borderBottomColor" to "#000000", "borderLeftColor" to "#000000")), "address-popup-mask" to _pS(_uM("position" to "fixed", "top" to 0, "left" to 0, "right" to 0, "bottom" to 0, "backgroundColor" to "rgba(0,0,0,0.5)", "zIndex" to 9998, "display" to "flex", "alignItems" to "flex-end", "justifyContent" to "center")), "address-form-mask" to _pS(_uM("position" to "fixed", "top" to 0, "left" to 0, "right" to 0, "bottom" to 0, "backgroundColor" to "rgba(0,0,0,0.5)", "zIndex" to 9998, "display" to "flex", "alignItems" to "center", "justifyContent" to "center")), "confirm-popup-mask" to _pS(_uM("position" to "fixed", "top" to 0, "left" to 0, "right" to 0, "bottom" to 0, "backgroundColor" to "rgba(0,0,0,0.5)", "zIndex" to 9998, "display" to "flex", "alignItems" to "center", "justifyContent" to "center")), "address-popup" to _pS(_uM("backgroundColor" to "#ffffff", "width" to "100%", "height" to 500, "borderTopLeftRadius" to 20, "borderTopRightRadius" to 20, "borderBottomRightRadius" to 0, "borderBottomLeftRadius" to 0, "display" to "flex", "flexDirection" to "column")), "address-form-popup" to _pS(_uM("backgroundColor" to "#ffffff", "width" to "90%", "maxWidth" to 500, "height" to 600, "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "display" to "flex", "flexDirection" to "column")), "confirm-popup" to _pS(_uM("backgroundColor" to "#ffffff", "width" to "80%", "maxWidth" to 320, "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "overflow" to "hidden")), "popup-header" to _pS(_uM("paddingTop" to 20, "paddingRight" to 15, "paddingBottom" to 20, "paddingLeft" to 15, "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#e5e5e5", "display" to "flex", "alignItems" to "center", "justifyContent" to "space-between")), "form-header" to _pS(_uM("paddingTop" to 20, "paddingRight" to 15, "paddingBottom" to 20, "paddingLeft" to 15, "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#e5e5e5", "display" to "flex", "alignItems" to "center", "justifyContent" to "space-between")), "popup-title" to _pS(_uM("fontSize" to 18, "fontWeight" to "bold", "color" to "#333333")), "form-title" to _pS(_uM("fontSize" to 18, "fontWeight" to "bold", "color" to "#333333")), "popup-close" to _pS(_uM("fontSize" to 24, "color" to "#999999", "paddingTop" to 5, "paddingRight" to 5, "paddingBottom" to 5, "paddingLeft" to 5)), "form-close" to _pS(_uM("fontSize" to 24, "color" to "#999999", "paddingTop" to 5, "paddingRight" to 5, "paddingBottom" to 5, "paddingLeft" to 5)), "address-list-container" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15)), "form-content" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15)), "popup-address-item" to _pS(_uM("paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "marginBottom" to 10, "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#e5e5e5", "borderRightColor" to "#e5e5e5", "borderBottomColor" to "#e5e5e5", "borderLeftColor" to "#e5e5e5", "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "position" to "relative")), "popup-address-header" to _pS(_uM("display" to "flex", "alignItems" to "center", "marginBottom" to 10)), "popup-address-name" to _pS(_uM("fontSize" to 16, "fontWeight" to "bold", "color" to "#333333", "marginRight" to 15)), "popup-address-phone" to _pS(_uM("fontSize" to 14, "color" to "#666666", "marginRight" to 10)), "popup-default-tag" to _pS(_uM("backgroundColor" to "#ff4757", "paddingTop" to 2, "paddingRight" to 8, "paddingBottom" to 2, "paddingLeft" to 8, "borderTopLeftRadius" to 10, "borderTopRightRadius" to 10, "borderBottomRightRadius" to 10, "borderBottomLeftRadius" to 10)), "popup-tag-text" to _pS(_uM("color" to "#ffffff", "fontSize" to 12)), "popup-address-detail" to _pS(_uM("fontSize" to 14, "color" to "#333333", "lineHeight" to 1.4)), "popup-empty-address" to _pS(_uM("display" to "flex", "flexDirection" to "column", "alignItems" to "center", "justifyContent" to "center", "paddingTop" to 40, "paddingRight" to 20, "paddingBottom" to 40, "paddingLeft" to 20)), "popup-empty-icon" to _pS(_uM("fontSize" to 60, "marginBottom" to 15)), "popup-empty-text" to _pS(_uM("fontSize" to 16, "color" to "#999999")), "popup-add-address-btn" to _pS(_uM("backgroundColor" to "#007aff", "marginTop" to 15, "marginRight" to 15, "marginBottom" to 15, "marginLeft" to 15, "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "display" to "flex", "alignItems" to "center", "justifyContent" to "center")), "popup-btn-icon" to _pS(_uM("color" to "#ffffff", "fontSize" to 20, "marginRight" to 10)), "popup-btn-text" to _pS(_uM("color" to "#ffffff", "fontSize" to 16, "fontWeight" to "bold")), "form-item" to _pS(_uM("marginBottom" to 20)), "form-label" to _pS(_uM("fontSize" to 14, "color" to "#333333", "marginBottom" to 8)), "form-input" to _pS(_uM("width" to "100%", "paddingTop" to 12, "paddingRight" to 12, "paddingBottom" to 12, "paddingLeft" to 12, "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#e5e5e5", "borderRightColor" to "#e5e5e5", "borderBottomColor" to "#e5e5e5", "borderLeftColor" to "#e5e5e5", "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "fontSize" to 14, "color" to "#333333", "boxSizing" to "border-box")), "form-input-readonly" to _pS(_uM("backgroundColor" to "#f9f9f9", "color" to "#666666")), "region-inputs" to _pS(_uM("display" to "flex", "justifyContent" to "space-between")), "region-input" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "marginRight" to 10, "marginRight:last-child" to 0)), "form-textarea" to _pS(_uM("width" to "100%", "minHeight" to 80, "paddingTop" to 12, "paddingRight" to 12, "paddingBottom" to 12, "paddingLeft" to 12, "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#e5e5e5", "borderRightColor" to "#e5e5e5", "borderBottomColor" to "#e5e5e5", "borderLeftColor" to "#e5e5e5", "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "fontSize" to 14, "color" to "#333333", "boxSizing" to "border-box")), "smart-address-input" to _pS(_uM("minHeight" to 60)), "smart-tip" to _pS(_uM("fontSize" to 12, "color" to "#999999", "marginTop" to 5)), "checkbox-item" to _pS(_uM("marginTop" to 20)), "checkbox-wrapper" to _pS(_uM("display" to "flex", "alignItems" to "center")), "checkbox" to _uM("" to _uM("width" to 20, "height" to 20, "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#e5e5e5", "borderRightColor" to "#e5e5e5", "borderBottomColor" to "#e5e5e5", "borderLeftColor" to "#e5e5e5", "borderTopLeftRadius" to 4, "borderTopRightRadius" to 4, "borderBottomRightRadius" to 4, "borderBottomLeftRadius" to 4, "marginRight" to 10, "display" to "flex", "alignItems" to "center", "justifyContent" to "center"), ".checked" to _uM("backgroundColor" to "#007aff", "borderTopColor" to "#007aff", "borderRightColor" to "#007aff", "borderBottomColor" to "#007aff", "borderLeftColor" to "#007aff")), "checkbox-check" to _pS(_uM("color" to "#ffffff", "fontSize" to 14)), "checkbox-label" to _pS(_uM("fontSize" to 14, "color" to "#333333"))) - } - val styles1: Map>> - get() { - return _uM("form-buttons" to _pS(_uM("display" to "flex", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "borderTopWidth" to 1, "borderTopStyle" to "solid", "borderTopColor" to "#e5e5e5")), "form-cancel-btn" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "backgroundColor" to "#f5f5f5", "color" to "#333333", "paddingTop" to 12, "paddingRight" to 12, "paddingBottom" to 12, "paddingLeft" to 12, "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "fontSize" to 16, "borderTopWidth" to "medium", "borderRightWidth" to "medium", "borderBottomWidth" to "medium", "borderLeftWidth" to "medium", "borderTopStyle" to "none", "borderRightStyle" to "none", "borderBottomStyle" to "none", "borderLeftStyle" to "none", "borderTopColor" to "#000000", "borderRightColor" to "#000000", "borderBottomColor" to "#000000", "borderLeftColor" to "#000000", "marginRight" to 10)), "form-submit-btn" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "backgroundColor" to "#007aff", "color" to "#ffffff", "paddingTop" to 12, "paddingRight" to 12, "paddingBottom" to 12, "paddingLeft" to 12, "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "fontSize" to 16, "borderTopWidth" to "medium", "borderRightWidth" to "medium", "borderBottomWidth" to "medium", "borderLeftWidth" to "medium", "borderTopStyle" to "none", "borderRightStyle" to "none", "borderBottomStyle" to "none", "borderLeftStyle" to "none", "borderTopColor" to "#000000", "borderRightColor" to "#000000", "borderBottomColor" to "#000000", "borderLeftColor" to "#000000")), "confirm-header" to _pS(_uM("paddingTop" to 20, "paddingRight" to 0, "paddingBottom" to 10, "paddingLeft" to 0, "textAlign" to "center")), "confirm-title" to _pS(_uM("fontSize" to 18, "fontWeight" to "bold", "color" to "#333333")), "confirm-content" to _pS(_uM("paddingTop" to 0, "paddingRight" to 20, "paddingBottom" to 20, "paddingLeft" to 20, "textAlign" to "center")), "confirm-message" to _pS(_uM("fontSize" to 16, "color" to "#666666")), "confirm-buttons" to _pS(_uM("display" to "flex", "borderTopWidth" to 1, "borderTopStyle" to "solid", "borderTopColor" to "#e5e5e5")), "confirm-btn" to _uM("" to _uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "height" to 50, "lineHeight" to "50px", "textAlign" to "center", "fontSize" to 16, "backgroundColor" to "#ffffff", "borderTopWidth" to "medium", "borderRightWidth" to "medium", "borderBottomWidth" to "medium", "borderLeftWidth" to "medium", "borderTopStyle" to "none", "borderRightStyle" to "none", "borderBottomStyle" to "none", "borderLeftStyle" to "none", "borderTopColor" to "#000000", "borderRightColor" to "#000000", "borderBottomColor" to "#000000", "borderLeftColor" to "#000000", "borderTopLeftRadius" to 0, "borderTopRightRadius" to 0, "borderBottomRightRadius" to 0, "borderBottomLeftRadius" to 0), ".cancel" to _uM("color" to "#666666", "borderRightWidth" to 1, "borderRightStyle" to "solid", "borderRightColor" to "#e5e5e5"), ".confirm" to _uM("color" to "#007aff", "fontWeight" to "bold"))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/mall/consumer/coupons.kt b/unpackage/cache/.app-android/src/pages/mall/consumer/coupons.kt deleted file mode 100644 index f8c5ccf5..00000000 --- a/unpackage/cache/.app-android/src/pages/mall/consumer/coupons.kt +++ /dev/null @@ -1,115 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.hideLoading as uni_hideLoading -import io.dcloud.uniapp.extapi.showLoading as uni_showLoading -import io.dcloud.uniapp.extapi.switchTab as uni_switchTab -open class GenPagesMallConsumerCoupons : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesMallConsumerCoupons) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesMallConsumerCoupons - val _cache = __ins.renderCache - val coupons = ref(_uA()) - val loadCoupons = fun(): UTSPromise { - return wrapUTSPromise(suspend { - uni_showLoading(ShowLoadingOptions(title = "加载中...")) - try { - val userCoupons = await(supabaseService.getUserCoupons(1)) - coupons.value = userCoupons.map(fun(item: UserCoupon): Coupon { - val amountVal = item.amount ?: 0 - val expiryVal = if ((item.expire_at != null && item.expire_at !== "")) { - item.expire_at.substring(0, 10) - } else { - "长期有效" - } - return Coupon(id = item.id, title = if ((item.template_name != null && item.template_name !== "")) { - item.template_name!! - } else { - "优惠券" - } - , amount = "\u00A5" + amountVal, expiry = expiryVal) - } - ) - } - catch (e: Throwable) { - console.error("加载优惠券失败", e, " at pages/mall/consumer/coupons.uvue:55") - coupons.value = _uA() - } - finally { - uni_hideLoading() - } - }) - } - onMounted(fun(){ - loadCoupons() - } - ) - val useCoupon = fun(coupon: Coupon){ - uni_switchTab(SwitchTabOptions(url = "/pages/mall/consumer/index")) - } - return fun(): Any? { - return _cE("view", _uM("class" to "coupons-page"), _uA( - _cE("view", _uM("class" to "coupon-list"), _uA( - if (coupons.value.length === 0) { - _cE("view", _uM("key" to 0, "class" to "empty-state"), _uA( - _cE("text", _uM("class" to "empty-icon"), "🎫"), - _cE("text", _uM("class" to "empty-text"), "暂无优惠券") - )) - } else { - _cE(Fragment, _uM("key" to 1), RenderHelpers.renderList(coupons.value, fun(coupon, index, __index, _cached): Any { - return _cE("view", _uM("key" to index, "class" to "coupon-item"), _uA( - _cE("view", _uM("class" to "coupon-left"), _uA( - _cE("text", _uM("class" to "coupon-amount"), _tD(coupon.amount), 1), - _cE("text", _uM("class" to "coupon-type"), "优惠券") - )), - _cE("view", _uM("class" to "coupon-right"), _uA( - _cE("text", _uM("class" to "coupon-title"), _tD(coupon.title), 1), - _cE("text", _uM("class" to "coupon-expiry"), "有效期至: " + _tD(coupon.expiry), 1), - _cE("button", _uM("class" to "use-btn", "onClick" to fun(){ - useCoupon(coupon) - } - ), "去使用", 8, _uA( - "onClick" - )) - )) - )) - } - ), 128) - } - )) - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("coupons-page" to _pS(_uM("paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "backgroundColor" to "#f5f5f5", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "empty-state" to _pS(_uM("display" to "flex", "flexDirection" to "column", "alignItems" to "center", "justifyContent" to "center", "paddingTop" to 100)), "empty-icon" to _pS(_uM("fontSize" to 60, "marginBottom" to 20)), "empty-text" to _pS(_uM("fontSize" to 16, "color" to "#999999")), "coupon-item" to _pS(_uM("display" to "flex", "backgroundColor" to "#FFFFFF", "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "marginBottom" to 15, "overflow" to "hidden", "boxShadow" to "0 2px 8px rgba(0,0,0,0.05)")), "coupon-left" to _pS(_uM("width" to 100, "backgroundImage" to "linear-gradient(135deg, #FF9800, #FF5722)", "backgroundColor" to "rgba(0,0,0,0)", "display" to "flex", "flexDirection" to "column", "alignItems" to "center", "justifyContent" to "center", "color" to "#FFFFFF", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15)), "coupon-amount" to _pS(_uM("fontSize" to 24, "fontWeight" to "bold")), "coupon-type" to _pS(_uM("fontSize" to 12, "marginTop" to 5)), "coupon-right" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "display" to "flex", "flexDirection" to "column", "justifyContent" to "space-between")), "coupon-title" to _pS(_uM("fontSize" to 16, "fontWeight" to "bold", "color" to "#333333", "marginBottom" to 8)), "coupon-expiry" to _pS(_uM("fontSize" to 12, "color" to "#999999", "marginBottom" to 10)), "use-btn" to _pS(_uM("alignSelf" to "flex-end", "fontSize" to 12, "backgroundColor" to "#FF5722", "color" to "#FFFFFF", "paddingTop" to 4, "paddingRight" to 12, "paddingBottom" to 4, "paddingLeft" to 12, "borderTopLeftRadius" to 15, "borderTopRightRadius" to 15, "borderBottomRightRadius" to 15, "borderBottomLeftRadius" to 15, "lineHeight" to 1.5))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/mall/consumer/favorites.kt b/unpackage/cache/.app-android/src/pages/mall/consumer/favorites.kt deleted file mode 100644 index 889ac820..00000000 --- a/unpackage/cache/.app-android/src/pages/mall/consumer/favorites.kt +++ /dev/null @@ -1,200 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.hideLoading as uni_hideLoading -import io.dcloud.uniapp.extapi.navigateTo as uni_navigateTo -import io.dcloud.uniapp.extapi.showLoading as uni_showLoading -import io.dcloud.uniapp.extapi.showModal as uni_showModal -import io.dcloud.uniapp.extapi.showToast as uni_showToast -import io.dcloud.uniapp.extapi.switchTab as uni_switchTab -open class GenPagesMallConsumerFavorites : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesMallConsumerFavorites) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesMallConsumerFavorites - val _cache = __ins.renderCache - val favorites = ref(_uA()) - val addToCart = fun(product: Product__1): UTSPromise { - return wrapUTSPromise(suspend { - uni_showLoading(ShowLoadingOptions(title = "添加中")) - val success = await(supabaseService.addToCart(product.id, 1, "")) - uni_hideLoading() - if (success) { - uni_showToast(ShowToastOptions(title = "已添加到购物车", icon = "success")) - } else { - uni_showToast(ShowToastOptions(title = "添加失败", icon = "none")) - } - }) - } - val loadFavorites = fun(): UTSPromise { - return wrapUTSPromise(suspend { - val res = await(supabaseService.getFavorites()) - favorites.value = res.map(fun(item: Any): Product__1 { - var prod: Any? = null - var itemObj: UTSJSONObject? = null - if (item is UTSJSONObject) { - itemObj = item as UTSJSONObject - prod = itemObj.get("ml_products") - } else { - itemObj = UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(item)), " at pages/mall/consumer/favorites.uvue:70") as UTSJSONObject - prod = itemObj.get("ml_products") - } - var image = "/static/default-product.png" - var id = "" - var name = "未知商品" - var price: Number = 0 - var sales: Number = 0 - if (prod != null) { - var prodObj: UTSJSONObject - if (prod is UTSJSONObject) { - prodObj = prod as UTSJSONObject - } else { - prodObj = UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(prod)), " at pages/mall/consumer/favorites.uvue:85") as UTSJSONObject - } - id = prodObj.getString("id") ?: "" - name = prodObj.getString("name") ?: "未知商品" - price = prodObj.getNumber("base_price") ?: 0 - image = prodObj.getString("main_image_url") ?: image - sales = prodObj.getNumber("sale_count") ?: 0 - if (image === "/static/default-product.png") { - val imgUrls = prodObj.getString("image_urls") - if (imgUrls != null) { - try { - val arr = UTSAndroid.consoleDebugError(JSON.parse(imgUrls), " at pages/mall/consumer/favorites.uvue:98") - if (UTSArray.isArray(arr) && (arr as UTSArray).length > 0) { - image = (arr as UTSArray)[0] as String - } - } - catch (e: Throwable) {} - } - } - } else { - if (itemObj != null) { - id = itemObj.getString("target_id") ?: "" - } - } - return Product__1(id = id, name = name, price = price, image = image, sales = sales, shopId = "", shopName = "") - } - ) - }) - } - val goShopping = fun(){ - uni_switchTab(SwitchTabOptions(url = "/pages/mall/consumer/index")) - } - val goToDetail = fun(id: String){ - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/product-detail?productId=" + id)) - } - val removeFavorite = fun(id: String){ - uni_showModal(ShowModalOptions(title = "取消收藏", content = "确定要取消收藏该商品吗?", success = fun(res){ - if (res.confirm) { - supabaseService.toggleFavorite(id).then(fun(isStillFavorite){ - if (!isStillFavorite) { - val index = favorites.value.findIndex(fun(item): Boolean { - return item.id === id - }) - if (index !== -1) { - favorites.value.splice(index, 1) - } - uni_showToast(ShowToastOptions(title = "已取消收藏", icon = "none")) - } else { - uni_showToast(ShowToastOptions(title = "取消失败", icon = "none")) - } - } - ) - } - } - )) - } - onMounted(fun(){ - loadFavorites() - } - ) - return fun(): Any? { - return _cE("scroll-view", _uM("class" to "favorites-page", "direction" to "vertical"), _uA( - _cE("view", _uM("class" to "product-grid"), _uA( - if (favorites.value.length === 0) { - _cE("view", _uM("key" to 0, "class" to "empty-state"), _uA( - _cE("text", _uM("class" to "empty-icon"), "❤️"), - _cE("text", _uM("class" to "empty-text"), "暂无收藏商品"), - _cE("button", _uM("class" to "go-shopping-btn", "onClick" to goShopping), "去逛逛") - )) - } else { - _cE(Fragment, _uM("key" to 1), RenderHelpers.renderList(favorites.value, fun(product, index, __index, _cached): Any { - return _cE("view", _uM("key" to index, "class" to "product-item", "onClick" to fun(){ - goToDetail(product.id) - } - ), _uA( - _cE("image", _uM("src" to product.image, "class" to "product-image", "mode" to "aspectFill"), null, 8, _uA( - "src" - )), - _cE("view", _uM("class" to "product-info"), _uA( - _cE("text", _uM("class" to "product-name"), _tD(product.name), 1), - _cE("text", _uM("class" to "product-price"), "¥" + _tD(product.price), 1), - _cE("view", _uM("class" to "product-footer"), _uA( - _cE("text", _uM("class" to "product-sales"), "已售 " + _tD(product.sales), 1), - _cE("view", _uM("class" to "action-btns"), _uA( - _cE("view", _uM("class" to "cart-btn", "onClick" to withModifiers(fun(){ - addToCart(product) - } - , _uA( - "stop" - ))), _uA( - _cE("text", _uM("class" to "cart-icon"), "🛒") - ), 8, _uA( - "onClick" - )), - _cE("view", _uM("class" to "remove-btn", "onClick" to withModifiers(fun(){ - removeFavorite(product.id) - } - , _uA( - "stop" - ))), _uA( - _cE("text", _uM("class" to "remove-icon"), "🗑️") - ), 8, _uA( - "onClick" - )) - )) - )) - )) - ), 8, _uA( - "onClick" - )) - } - ), 128) - } - )) - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("favorites-page" to _pS(_uM("paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "backgroundColor" to "#f5f5f5", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "product-grid" to _pS(_uM("display" to "flex", "flexDirection" to "row", "flexWrap" to "wrap", "justifyContent" to "space-between", "width" to "100%")), "empty-state" to _pS(_uM("width" to "100%", "display" to "flex", "flexDirection" to "column", "alignItems" to "center", "justifyContent" to "center", "paddingTop" to 100)), "empty-icon" to _pS(_uM("fontSize" to 60, "marginBottom" to 20, "color" to "#dddddd")), "empty-text" to _pS(_uM("fontSize" to 16, "color" to "#999999", "marginBottom" to 20)), "go-shopping-btn" to _pS(_uM("backgroundColor" to "#ff5000", "color" to "#FFFFFF", "paddingTop" to 8, "paddingRight" to 24, "paddingBottom" to 8, "paddingLeft" to 24, "borderTopLeftRadius" to 20, "borderTopRightRadius" to 20, "borderBottomRightRadius" to 20, "borderBottomLeftRadius" to 20, "fontSize" to 14, "borderTopWidth" to "medium", "borderRightWidth" to "medium", "borderBottomWidth" to "medium", "borderLeftWidth" to "medium", "borderTopStyle" to "none", "borderRightStyle" to "none", "borderBottomStyle" to "none", "borderLeftStyle" to "none", "borderTopColor" to "#000000", "borderRightColor" to "#000000", "borderBottomColor" to "#000000", "borderLeftColor" to "#000000")), "product-item" to _pS(_uM("width" to "48%", "backgroundColor" to "#FFFFFF", "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "overflow" to "hidden", "display" to "flex", "flexDirection" to "column", "boxSizing" to "border-box")), "product-image" to _pS(_uM("width" to "100%", "height" to 170, "backgroundColor" to "#f5f5f5")), "product-info" to _pS(_uM("paddingTop" to 10, "paddingRight" to 10, "paddingBottom" to 10, "paddingLeft" to 10, "display" to "flex", "flexDirection" to "column", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "product-name" to _pS(_uM("fontSize" to 14, "color" to "#333333", "marginBottom" to 6, "textOverflow" to "ellipsis", "lines" to 2, "overflow" to "hidden", "height" to 40, "lineHeight" to "20px")), "product-price" to _pS(_uM("fontSize" to 16, "color" to "#ff5000", "fontWeight" to "bold", "marginBottom" to 6)), "product-footer" to _pS(_uM("display" to "flex", "justifyContent" to "space-between", "alignItems" to "center", "marginTop" to "auto")), "product-sales" to _pS(_uM("fontSize" to 12, "color" to "#999999")), "action-btns" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center")), "cart-btn" to _pS(_uM("width" to 28, "height" to 28, "borderTopLeftRadius" to 14, "borderTopRightRadius" to 14, "borderBottomRightRadius" to 14, "borderBottomLeftRadius" to 14, "display" to "flex", "alignItems" to "center", "justifyContent" to "center", "marginLeft" to 8, "backgroundColor" to "#ff5000")), "remove-btn" to _pS(_uM("width" to 28, "height" to 28, "borderTopLeftRadius" to 14, "borderTopRightRadius" to 14, "borderBottomRightRadius" to 14, "borderBottomLeftRadius" to 14, "display" to "flex", "alignItems" to "center", "justifyContent" to "center", "marginLeft" to 8, "backgroundColor" to "#f0f0f0")), "cart-icon" to _pS(_uM("fontSize" to 14, "color" to "#FFFFFF")), "remove-icon" to _pS(_uM("fontSize" to 14))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/mall/consumer/footprint.kt b/unpackage/cache/.app-android/src/pages/mall/consumer/footprint.kt deleted file mode 100644 index 57ae4d73..00000000 --- a/unpackage/cache/.app-android/src/pages/mall/consumer/footprint.kt +++ /dev/null @@ -1,450 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.getStorageSync as uni_getStorageSync -import io.dcloud.uniapp.extapi.hideLoading as uni_hideLoading -import io.dcloud.uniapp.extapi.navigateTo as uni_navigateTo -import io.dcloud.uniapp.extapi.removeStorageSync as uni_removeStorageSync -import io.dcloud.uniapp.extapi.setStorageSync as uni_setStorageSync -import io.dcloud.uniapp.extapi.showLoading as uni_showLoading -import io.dcloud.uniapp.extapi.showModal as uni_showModal -import io.dcloud.uniapp.extapi.showToast as uni_showToast -import io.dcloud.uniapp.extapi.switchTab as uni_switchTab -open class GenPagesMallConsumerFootprint : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesMallConsumerFootprint) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesMallConsumerFootprint - val _cache = __ins.renderCache - val footprints = ref(_uA()) - val isEditMode = ref(false) - val isLoading = ref(false) - val hasMore = ref(false) - val selectedCount = computed(fun(): Number { - return footprints.value.filter(fun(item): Boolean { - return item.selected === true - } - ).length - } - ) - val isAllSelected = computed(fun(): Boolean { - return footprints.value.length > 0 && footprints.value.every(fun(item): Boolean { - return item.selected === true - } - ) - } - ) - val formatGroupDate = fun(dateStr: String): String { - val date = Date(dateStr) - val today = Date() - val yesterday = Date(today) - yesterday.setDate(yesterday.getDate() - 1) - if (date.toDateString() === today.toDateString()) { - return "今天" - } else if (date.toDateString() === yesterday.toDateString()) { - return "昨天" - } else { - val month = date.getMonth() + 1 - val day = date.getDate() - return "" + month + "月" + day + "日" - } - } - val groupedFootprints = computed(fun(): UTSArray { - val result: UTSArray = _uA() - run { - var i: Number = 0 - while(i < footprints.value.length){ - val item = footprints.value[i] - val dateKey = Date(item.viewTime).toDateString() - var foundGroup: FootprintGroup? = null - run { - var j: Number = 0 - while(j < result.length){ - if (result[j].dateKey === dateKey) { - foundGroup = result[j] - break - } - j++ - } - } - if (foundGroup != null) { - foundGroup.items.push(item) - } else { - val newGroup: FootprintGroup = FootprintGroup(dateLabel = formatGroupDate(dateKey), dateKey = dateKey, items = _uA( - item - )) - result.push(newGroup) - } - i++ - } - } - return result - } - ) - val toggleEditMode = fun(){ - isEditMode.value = !isEditMode.value - run { - var i: Number = 0 - while(i < footprints.value.length){ - footprints.value[i].selected = false - i++ - } - } - } - val clearAll = fun(){ - if (footprints.value.length === 0) { - return - } - uni_showModal(ShowModalOptions(title = "清空足迹", content = "确定要清空所有浏览记录吗?", success = fun(res){ - if (res.confirm) { - footprints.value = _uA() - uni_removeStorageSync("footprints") - uni_showToast(ShowToastOptions(title = "已清空", icon = "success")) - } - } - )) - } - val toggleSelect = fun(item: FootprintType){ - item.selected = !(item.selected === true) - footprints.value = footprints.value.slice() - } - val toggleGroupSelect = fun(groupIndex: Number){ - val group = groupedFootprints.value[groupIndex] - if (group == null) { - return - } - val allSelected = group.items.every(fun(item): Boolean { - return item.selected === true - } - ) - val newSelectedState = !allSelected - run { - var i: Number = 0 - while(i < group.items.length){ - group.items[i].selected = newSelectedState - i++ - } - } - footprints.value = footprints.value.slice() - } - val isGroupSelected = fun(groupIndex: Number): Boolean { - val group = groupedFootprints.value[groupIndex] - if (group == null || group.items.length === 0) { - return false - } - return group.items.every(fun(item): Boolean { - return item.selected === true - } - ) - } - val toggleSelectAll = fun(){ - val newSelectedState = !isAllSelected.value - run { - var i: Number = 0 - while(i < footprints.value.length){ - footprints.value[i].selected = newSelectedState - i++ - } - } - footprints.value = footprints.value.slice() - } - val deleteSelected = fun(){ - val selectedItems = footprints.value.filter(fun(item): Boolean { - return item.selected === true - } - ) - if (selectedItems.length === 0) { - uni_showToast(ShowToastOptions(title = "请选择要删除的记录", icon = "none")) - return - } - uni_showModal(ShowModalOptions(title = "确认删除", content = "确定要删除选中的" + selectedItems.length + "条记录吗?", success = fun(res){ - if (res.confirm) { - uni_showLoading(ShowLoadingOptions(title = "删除中")) - uni_hideLoading() - footprints.value = footprints.value.filter(fun(item): Boolean { - return item.selected !== true - } - ) - val dataToSave: UTSArray = _uA() - run { - var i: Number = 0 - while(i < footprints.value.length){ - val item = footprints.value[i] - dataToSave.push(FootprintSaveType(id = item.id, name = item.name, price = item.price, original_price = item.original_price, image = item.image, sales = item.sales, shopId = item.shopId, shopName = item.shopName, viewTime = item.viewTime)) - i++ - } - } - uni_setStorageSync("footprints", JSON.stringify(dataToSave)) - uni_showToast(ShowToastOptions(title = "删除成功", icon = "success")) - if (footprints.value.length === 0) { - isEditMode.value = false - } - } - } - )) - } - val viewProduct = fun(item: FootprintType){ - if (isEditMode.value) { - return - } - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/product-detail?productId=" + item.id + "&price=" + item.price + "&originalPrice=" + item.original_price)) - } - val loadMore = fun(){} - val goShopping = fun(){ - uni_switchTab(SwitchTabOptions(url = "/pages/mall/consumer/index")) - } - val parseFootprintItem = fun(item: Any): FootprintType { - var itemObj: UTSJSONObject - if (item is UTSJSONObject) { - itemObj = item as UTSJSONObject - } else { - itemObj = UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(item)), " at pages/mall/consumer/footprint.uvue:299") as UTSJSONObject - } - return FootprintType(id = itemObj.getString("id") ?: "", name = itemObj.getString("name") ?: "", price = itemObj.getNumber("price") ?: 0, original_price = itemObj.getNumber("original_price") ?: 0, image = itemObj.getString("image") ?: "", sales = itemObj.getNumber("sales") ?: 0, shopId = itemObj.getString("shopId") ?: "", shopName = itemObj.getString("shopName") ?: "", viewTime = itemObj.getNumber("viewTime") ?: 0, selected = false) - } - val loadFootprints = fun(): UTSPromise { - return wrapUTSPromise(suspend { - isLoading.value = true - try { - val remoteData = await(supabaseService.getFootprints()) - if (remoteData.length > 0) { - console.log("获取到远程足迹数据:", remoteData.length, " at pages/mall/consumer/footprint.uvue:323") - val newFootprints: UTSArray = _uA() - run { - var i: Number = 0 - while(i < remoteData.length){ - newFootprints.push(parseFootprintItem(remoteData[i])) - i++ - } - } - footprints.value = newFootprints - val dataToSave: UTSArray = _uA() - run { - var i: Number = 0 - while(i < footprints.value.length){ - val item = footprints.value[i] - dataToSave.push(FootprintSaveType(id = item.id, name = item.name, price = item.price, original_price = item.original_price, image = item.image, sales = item.sales, shopId = item.shopId, shopName = item.shopName, viewTime = item.viewTime)) - i++ - } - } - uni_setStorageSync("footprints", JSON.stringify(dataToSave)) - } else { - val storedFootprints = uni_getStorageSync("footprints") - if (storedFootprints != null) { - try { - val data = UTSAndroid.consoleDebugError(JSON.parse(storedFootprints as String), " at pages/mall/consumer/footprint.uvue:350") as UTSArray - val newFootprints: UTSArray = _uA() - run { - var i: Number = 0 - while(i < data.length){ - newFootprints.push(parseFootprintItem(data[i])) - i++ - } - } - footprints.value = newFootprints - } catch (e: Throwable) { - console.error("Failed to parse footprints", e, " at pages/mall/consumer/footprint.uvue:357") - footprints.value = _uA() - } - } else { - footprints.value = _uA() - } - } - } - catch (e: Throwable) { - console.error("加载足迹失败", e, " at pages/mall/consumer/footprint.uvue:365") - val storedFootprints = uni_getStorageSync("footprints") - if (storedFootprints != null) { - try { - val data = UTSAndroid.consoleDebugError(JSON.parse(storedFootprints as String), " at pages/mall/consumer/footprint.uvue:369") as UTSArray - val newFootprints: UTSArray = _uA() - run { - var i: Number = 0 - while(i < data.length){ - newFootprints.push(parseFootprintItem(data[i])) - i++ - } - } - footprints.value = newFootprints - } - catch (err: Throwable) { - footprints.value = _uA() - } - } - } - isLoading.value = false - hasMore.value = false - }) - } - onMounted(fun(){ - loadFootprints() - } - ) - return fun(): Any? { - return _cE("view", _uM("class" to "footprint-page"), _uA( - _cE("view", _uM("class" to "footprint-header"), _uA( - if (footprints.value.length > 0) { - _cE("view", _uM("key" to 0, "class" to "header-actions"), _uA( - _cE("text", _uM("class" to "action-btn", "onClick" to toggleEditMode), _tD(if (isEditMode.value) { - "完成" - } else { - "编辑" - }), 1), - _cE("text", _uM("class" to "action-btn", "onClick" to clearAll), "清空") - )) - } else { - _cC("v-if", true) - } - )), - _cE("scroll-view", _uM("class" to "footprint-content", "scroll-y" to "", "onScrolltolower" to loadMore), _uA( - if (isTrue(footprints.value.length === 0 && !isLoading.value)) { - _cE("view", _uM("key" to 0, "class" to "empty-footprints"), _uA( - _cE("text", _uM("class" to "empty-icon"), "👣"), - _cE("text", _uM("class" to "empty-text"), "暂无浏览记录"), - _cE("text", _uM("class" to "empty-subtext"), "快去浏览喜欢的商品吧"), - _cE("button", _uM("class" to "go-shopping-btn", "onClick" to goShopping), "去逛逛") - )) - } else { - _cC("v-if", true) - } - , - _cE(Fragment, null, RenderHelpers.renderList(groupedFootprints.value, fun(group, index, __index, _cached): Any { - return _cE("view", _uM("key" to index, "class" to "date-group"), _uA( - _cE("view", _uM("class" to "group-header"), _uA( - _cE("text", _uM("class" to "group-date"), _tD(group.dateLabel), 1), - if (isTrue(isEditMode.value)) { - _cE("text", _uM("key" to 0, "class" to "group-select", "onClick" to fun(){ - toggleGroupSelect(index) - }), _tD(if (isGroupSelected(index)) { - "取消全选" - } else { - "全选" - }), 9, _uA( - "onClick" - )) - } else { - _cC("v-if", true) - } - )), - _cE("view", _uM("class" to "group-items"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(group.items, fun(item, __key, __index, _cached): Any { - return _cE("view", _uM("key" to item.id, "class" to "footprint-item"), _uA( - if (isTrue(isEditMode.value)) { - _cE("view", _uM("key" to 0, "class" to "item-selector", "onClick" to fun(){ - toggleSelect(item) - }), _uA( - _cE("view", _uM("class" to _nC(_uA( - "select-icon", - _uM("selected" to (item.selected === true)) - ))), _uA( - if (item.selected === true) { - _cE("text", _uM("key" to 0, "class" to "icon-text"), "✓") - } else { - _cC("v-if", true) - } - ), 2) - ), 8, _uA( - "onClick" - )) - } else { - _cC("v-if", true) - } - , - _cE("view", _uM("class" to "item-content", "onClick" to fun(){ - viewProduct(item) - } - ), _uA( - _cE("image", _uM("class" to "product-image", "src" to item.image, "mode" to "aspectFill"), null, 8, _uA( - "src" - )), - _cE("view", _uM("class" to "product-info"), _uA( - _cE("text", _uM("class" to "product-name"), _tD(item.name), 1), - _cE("view", _uM("class" to "product-bottom"), _uA( - _cE("view", _uM("class" to "product-price-row"), _uA( - _cE("text", _uM("class" to "current-price"), "¥" + _tD(item.price), 1) - )) - )) - )) - ), 8, _uA( - "onClick" - )) - )) - } - ), 128) - )) - )) - } - ), 128), - if (isTrue(isLoading.value)) { - _cE("view", _uM("key" to 1, "class" to "loading-more"), _uA( - _cE("text", _uM("class" to "loading-text"), "加载中...") - )) - } else { - _cC("v-if", true) - } - , - if (isTrue(!hasMore.value && footprints.value.length > 0)) { - _cE("view", _uM("key" to 2, "class" to "no-more"), _uA( - _cE("text", _uM("class" to "no-more-text"), "没有更多了") - )) - } else { - _cC("v-if", true) - } - ), 32), - if (isTrue(isEditMode.value && footprints.value.length > 0)) { - _cE("view", _uM("key" to 0, "class" to "edit-bar"), _uA( - _cE("view", _uM("class" to "select-all", "onClick" to toggleSelectAll), _uA( - _cE("view", _uM("class" to _nC(_uA( - "all-select-icon", - _uM("selected" to isAllSelected.value) - ))), _uA( - if (isTrue(isAllSelected.value)) { - _cE("text", _uM("key" to 0, "class" to "icon-text"), "✓") - } else { - _cC("v-if", true) - } - ), 2), - _cE("text", _uM("class" to "select-all-text"), "全选") - )), - _cE("view", _uM("class" to "delete-btn", "onClick" to deleteSelected), _uA( - _cE("text", _uM("class" to "delete-text"), "删除(" + _tD(selectedCount.value) + ")", 1) - )) - )) - } else { - _cC("v-if", true) - } - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("footprint-page" to _pS(_uM("display" to "flex", "flexDirection" to "column", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "footprint-header" to _pS(_uM("backgroundColor" to "#ffffff", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#e5e5e5", "display" to "flex", "alignItems" to "center", "justifyContent" to "space-between")), "header-actions" to _pS(_uM("display" to "flex", "flexDirection" to "row", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "justifyContent" to "flex-end", "alignItems" to "center", "paddingRight" to 0)), "action-btn" to _pS(_uM("color" to "#007aff", "fontSize" to 14, "paddingTop" to 5, "paddingRight" to 5, "paddingBottom" to 5, "paddingLeft" to 5, "marginLeft" to 20)), "footprint-content" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "empty-footprints" to _pS(_uM("display" to "flex", "flexDirection" to "column", "alignItems" to "center", "justifyContent" to "center", "paddingTop" to 80, "paddingRight" to 20, "paddingBottom" to 80, "paddingLeft" to 20, "backgroundColor" to "#ffffff")), "empty-icon" to _pS(_uM("fontSize" to 80, "marginBottom" to 20)), "empty-text" to _pS(_uM("fontSize" to 16, "color" to "#666666", "marginBottom" to 10)), "empty-subtext" to _pS(_uM("fontSize" to 14, "color" to "#999999", "marginBottom" to 30)), "go-shopping-btn" to _pS(_uM("backgroundColor" to "#007aff", "color" to "#ffffff", "paddingTop" to 10, "paddingRight" to 40, "paddingBottom" to 10, "paddingLeft" to 40, "borderTopLeftRadius" to 25, "borderTopRightRadius" to 25, "borderBottomRightRadius" to 25, "borderBottomLeftRadius" to 25, "fontSize" to 14, "borderTopWidth" to "medium", "borderRightWidth" to "medium", "borderBottomWidth" to "medium", "borderLeftWidth" to "medium", "borderTopStyle" to "none", "borderRightStyle" to "none", "borderBottomStyle" to "none", "borderLeftStyle" to "none", "borderTopColor" to "#000000", "borderRightColor" to "#000000", "borderBottomColor" to "#000000", "borderLeftColor" to "#000000")), "date-group" to _pS(_uM("backgroundColor" to "#ffffff", "marginBottom" to 10, "paddingTop" to 0, "paddingRight" to 10, "paddingBottom" to 0, "paddingLeft" to 10)), "group-header" to _pS(_uM("paddingTop" to 15, "paddingRight" to 5, "paddingBottom" to 15, "paddingLeft" to 5, "display" to "flex", "alignItems" to "center", "justifyContent" to "space-between")), "group-date" to _pS(_uM("fontSize" to 16, "fontWeight" to "bold", "color" to "#333333")), "group-select" to _pS(_uM("color" to "#007aff", "fontSize" to 14)), "group-items" to _pS(_uM("paddingTop" to 0, "paddingRight" to 0, "paddingBottom" to 0, "paddingLeft" to 0, "display" to "flex", "flexDirection" to "row", "flexWrap" to "wrap", "justifyContent" to "space-between")), "footprint-item" to _pS(_uM("display" to "flex", "flexDirection" to "column", "marginBottom" to 10, "borderBottomWidth" to "medium", "borderBottomStyle" to "none", "borderBottomColor" to "#000000", "width" to "48%", "backgroundColor" to "#ffffff", "position" to "relative")), "item-selector" to _pS(_uM("position" to "absolute", "top" to 5, "right" to 5, "zIndex" to 10, "width" to 30, "height" to 30, "borderTopLeftRadius" to 15, "borderTopRightRadius" to 15, "borderBottomRightRadius" to 15, "borderBottomLeftRadius" to 15, "display" to "flex", "alignItems" to "center", "justifyContent" to "center")), "select-icon" to _uM("" to _uM("width" to 20, "height" to 20, "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#cccccc", "borderRightColor" to "#cccccc", "borderBottomColor" to "#cccccc", "borderLeftColor" to "#cccccc", "borderTopLeftRadius" to 10, "borderTopRightRadius" to 10, "borderBottomRightRadius" to 10, "borderBottomLeftRadius" to 10, "backgroundColor" to "rgba(255,255,255,0.5)", "display" to "flex", "alignItems" to "center", "justifyContent" to "center"), ".selected" to _uM("backgroundColor" to "#007aff", "borderTopColor" to "#007aff", "borderRightColor" to "#007aff", "borderBottomColor" to "#007aff", "borderLeftColor" to "#007aff")), "icon-text" to _pS(_uM("color" to "#ffffff", "fontSize" to 12)), "item-content" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "display" to "flex", "flexDirection" to "column")), "product-image" to _pS(_uM("width" to "100%", "height" to 170, "borderTopLeftRadius" to 5, "borderTopRightRadius" to 5, "borderBottomRightRadius" to 5, "borderBottomLeftRadius" to 5, "marginRight" to 0, "marginBottom" to 8, "backgroundColor" to "#f5f5f5")), "product-info" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "display" to "flex", "flexDirection" to "column", "justifyContent" to "space-between", "paddingTop" to 0, "paddingRight" to 4, "paddingBottom" to 0, "paddingLeft" to 4)), "product-name" to _pS(_uM("fontSize" to 14, "color" to "#333333", "lineHeight" to 1.4, "marginBottom" to 6, "overflow" to "hidden", "textOverflow" to "ellipsis", "lines" to 2, "height" to 40)), "product-bottom" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "space-between")), "product-price-row" to _pS(_uM("display" to "flex", "alignItems" to "flex-end")), "current-price" to _pS(_uM("fontSize" to 16, "color" to "#ff4757", "fontWeight" to "bold", "marginRight" to 0)), "loading-more" to _pS(_uM("paddingTop" to 20, "paddingRight" to 20, "paddingBottom" to 20, "paddingLeft" to 20, "textAlign" to "center", "backgroundColor" to "#ffffff")), "no-more" to _pS(_uM("paddingTop" to 20, "paddingRight" to 20, "paddingBottom" to 20, "paddingLeft" to 20, "textAlign" to "center", "backgroundColor" to "#ffffff")), "loading-text" to _pS(_uM("color" to "#999999", "fontSize" to 14)), "no-more-text" to _pS(_uM("color" to "#999999", "fontSize" to 14)), "edit-bar" to _pS(_uM("backgroundColor" to "#ffffff", "borderTopWidth" to 1, "borderTopStyle" to "solid", "borderTopColor" to "#e5e5e5", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "display" to "flex", "alignItems" to "center", "justifyContent" to "space-between")), "select-all" to _pS(_uM("display" to "flex", "alignItems" to "center")), "all-select-icon" to _uM("" to _uM("width" to 20, "height" to 20, "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#cccccc", "borderRightColor" to "#cccccc", "borderBottomColor" to "#cccccc", "borderLeftColor" to "#cccccc", "borderTopLeftRadius" to 10, "borderTopRightRadius" to 10, "borderBottomRightRadius" to 10, "borderBottomLeftRadius" to 10, "marginRight" to 10, "display" to "flex", "alignItems" to "center", "justifyContent" to "center"), ".selected" to _uM("backgroundColor" to "#007aff", "borderTopColor" to "#007aff", "borderRightColor" to "#007aff", "borderBottomColor" to "#007aff", "borderLeftColor" to "#007aff")), "select-all-text" to _pS(_uM("fontSize" to 14, "color" to "#333333")), "delete-btn" to _pS(_uM("backgroundColor" to "#ff4757", "paddingTop" to 10, "paddingRight" to 20, "paddingBottom" to 10, "paddingLeft" to 20, "borderTopLeftRadius" to 15, "borderTopRightRadius" to 15, "borderBottomRightRadius" to 15, "borderBottomLeftRadius" to 15)), "delete-text" to _pS(_uM("color" to "#ffffff", "fontSize" to 14, "fontWeight" to "bold"))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/mall/consumer/index.kt b/unpackage/cache/.app-android/src/pages/mall/consumer/index.kt deleted file mode 100644 index 5dfe582f..00000000 --- a/unpackage/cache/.app-android/src/pages/mall/consumer/index.kt +++ /dev/null @@ -1,641 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.chooseImage as uni_chooseImage -import io.dcloud.uniapp.extapi.getSystemInfoSync as uni_getSystemInfoSync -import io.dcloud.uniapp.extapi.hideLoading as uni_hideLoading -import io.dcloud.uniapp.extapi.navigateTo as uni_navigateTo -import io.dcloud.uniapp.framework.onShow as onShow__1 -import io.dcloud.uniapp.framework.onLoad as onLoad__1 -import io.dcloud.uniapp.extapi.scanCode as uni_scanCode -import io.dcloud.uniapp.extapi.setStorageSync as uni_setStorageSync -import io.dcloud.uniapp.extapi.showLoading as uni_showLoading -import io.dcloud.uniapp.extapi.showToast as uni_showToast -import io.dcloud.uniapp.extapi.switchTab as uni_switchTab -open class GenPagesMallConsumerIndex : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesMallConsumerIndex) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesMallConsumerIndex - val _cache = __ins.renderCache - val statusBarHeight = ref(0) - val scrollHeight = ref(0) - val refreshing = ref(false) - val loading = ref(false) - val isFirstShow = ref(true) - val hasMore = ref(true) - val activeSort = ref("recommend") - val activeFilter = ref("recommend") - val currentPage = ref(1) - val hotProducts = ref(_uA()) - val recommendedProducts = ref(_uA()) - val isMobile = ref(false) - val showLoadMore = ref(false) - val showNavbar = ref(true) - val lastScrollTop = ref(0) - val scrollThreshold: Number = 30 - val scrollingUp = ref(false) - val categoryTab = ref("category") - val categories = ref(_uA()) - val brands = ref(_uA()) - val parentCategories = ref(_uA()) - val subCategories = ref(_uA()) - val selectedParentCategory = ref(null) - val showSubCategories = ref(false) - val sortTabs = _uA( - SortTab(id = "recommend", name = "智能推荐"), - SortTab(id = "sales", name = "销量"), - SortTab(id = "price", name = "价格"), - SortTab(id = "new", name = "新品"), - SortTab(id = "discount", name = "特价") - ) as UTSArray - val loadCategories = fun(): UTSPromise { - return wrapUTSPromise(suspend { - try { - val categoriesData = await(supabaseService.getParentCategories()) - parentCategories.value = categoriesData - categories.value = categoriesData - console.log("一级分类数据:", JSON.stringify(parentCategories.value), " at pages/mall/consumer/index.uvue:381") - } - catch (error: Throwable) { - console.error("加载分类数据失败:", error, " at pages/mall/consumer/index.uvue:383") - parentCategories.value = _uA() - categories.value = _uA() - } - }) - } - val loadSubCategories = fun(parentId: String): UTSPromise { - return wrapUTSPromise(suspend { - try { - val subData = await(supabaseService.getSubCategories(parentId)) - subCategories.value = subData - } - catch (error: Throwable) { - console.error("加载子分类数据失败:", error, " at pages/mall/consumer/index.uvue:395") - subCategories.value = _uA() - } - }) - } - val loadBrands = fun(): UTSPromise { - return wrapUTSPromise(suspend { - try { - val brandsData = await(supabaseService.getBrands()) - brands.value = brandsData - } - catch (e: Throwable) { - console.error("加载品牌失败:", e, " at pages/mall/consumer/index.uvue:406") - brands.value = _uA() - } - }) - } - val defaultLoadLimit: Number = 6 - val doLoadHotProducts = fun(targetLimit: Number, resolve: (value: Unit) -> Unit, reject: (reason: Any?) -> Unit): UTSPromise { - return wrapUTSPromise(suspend { - try { - var products: UTSArray = _uA() - val limit = targetLimit - console.log("加载热销商品,当前排序方式:", activeSort.value, "limit:", limit, " at pages/mall/consumer/index.uvue:420") - when (activeSort.value) { - "sales" -> - { - console.log("调用 getHotProducts", " at pages/mall/consumer/index.uvue:424") - products = await(supabaseService.getHotProducts(limit)) - } - "price" -> - { - console.log("调用 getProductsByPrice", " at pages/mall/consumer/index.uvue:428") - products = await(supabaseService.getProductsByPrice(limit, true)) - } - "new" -> - { - console.log("调用 getProductsByNewest", " at pages/mall/consumer/index.uvue:433") - products = await(supabaseService.getProductsByNewest(limit)) - } - "recommend" -> - { - console.log("调用 getRecommendedProducts", " at pages/mall/consumer/index.uvue:438") - products = await(supabaseService.getRecommendedProducts(limit)) - } - "discount" -> - { - console.log("调用 getDiscountProducts", " at pages/mall/consumer/index.uvue:443") - products = await(supabaseService.getDiscountProducts(limit)) - } - else -> - { - console.log("调用默认 getHotProducts", " at pages/mall/consumer/index.uvue:448") - products = await(supabaseService.getHotProducts(limit)) - } - } - console.log("加载到的商品数量:", products.length, " at pages/mall/consumer/index.uvue:452") - if (products.length > 0) { - console.log("Sample Product Merchant IDs:", " at pages/mall/consumer/index.uvue:454") - run { - var i: Number = 0 - while(i < Math.min(products.length, 3)){ - val p = products[i] - console.log(" - Product: " + p.name + ", MerchantID: " + p.merchant_id, " at pages/mall/consumer/index.uvue:457") - i++ - } - } - } - hotProducts.value = products - } - catch (error: Throwable) { - console.error("加载热销商品失败:", error, " at pages/mall/consumer/index.uvue:462") - hotProducts.value = _uA() - } - }) - } - fun gen_loadHotProducts_fn(targetLimit: Number): UTSPromise { - return UTSPromise(fun(resolve, reject){ - doLoadHotProducts(targetLimit, resolve, reject) - } - ) - } - val loadHotProducts = ::gen_loadHotProducts_fn - val doLoadRecommendedProducts = fun(limit: Number, resolve: (value: Unit) -> Unit, reject: (reason: Any?) -> Unit): UTSPromise { - return wrapUTSPromise(suspend { - recommendedProducts.value = await(supabaseService.getRecommendedProducts(limit)) - resolve(Unit) - }) - } - fun gen_loadRecommendedProducts_fn(limit: Number): UTSPromise { - return UTSPromise(fun(resolve, reject){ - doLoadRecommendedProducts(limit, resolve, reject) - } - ) - } - val loadRecommendedProducts = ::gen_loadRecommendedProducts_fn - val initData = fun(): UTSPromise { - return wrapUTSPromise(suspend { - try { - await(getCurrentUser()) - console.log("主页初始化:用户资料加载完成", " at pages/mall/consumer/index.uvue:492") - } - catch (error: Throwable) { - console.error("加载用户资料失败:", error, " at pages/mall/consumer/index.uvue:494") - } - await(loadCategories()) - await(loadBrands()) - await(loadHotProducts(defaultLoadLimit)) - await(loadRecommendedProducts(defaultLoadLimit)) - }) - } - val initPage = fun(){ - val systemInfo = uni_getSystemInfoSync() - statusBarHeight.value = systemInfo.statusBarHeight - val screenWidth = systemInfo.screenWidth - isMobile.value = screenWidth < 768 - } - onMounted(fun(){ - initPage() - initData() - } - ) - onShow__1(fun(){ - console.log("=== index页面onShow被调用 ===", " at pages/mall/consumer/index.uvue:576") - console.log("主页重新显示,重置页面状态", " at pages/mall/consumer/index.uvue:577") - showNavbar.value = true - lastScrollTop.value = 0 - if (!isFirstShow.value) { - getCurrentUser().then(fun(profile){ - if (profile != null) { - console.log("主页onShow:用户资料更新成功", " at pages/mall/consumer/index.uvue:595") - } else { - console.log("主页onShow:用户资料为空,可能未登录", " at pages/mall/consumer/index.uvue:597") - } - }).`catch`(fun(error){ - console.error("主页onShow:加载用户资料失败:", error, " at pages/mall/consumer/index.uvue:600") - }) - } else { - isFirstShow.value = false - console.log("主页首次显示,跳过onShow中的用户资料检查,交由initData处理", " at pages/mall/consumer/index.uvue:604") - } - console.log("=== index页面onShow执行完成 ===", " at pages/mall/consumer/index.uvue:607") - } - ) - val handleScroll = fun(event: Any){ - val eventObj = event as UTSJSONObject - val detail = eventObj.get("detail") as UTSJSONObject - val scrollTop = detail.getNumber("scrollTop") ?: 0 - val currentTime = Date.now() - if (scrollTop > lastScrollTop.value) { - scrollingUp.value = false - if (scrollTop > scrollThreshold && showNavbar.value) { - showNavbar.value = false - } - } else if (scrollTop < lastScrollTop.value) { - scrollingUp.value = true - if (!showNavbar.value) { - showNavbar.value = true - } - } - if (scrollTop <= 10) { - showNavbar.value = true - } - lastScrollTop.value = scrollTop - } - val onParentCategoryClick = fun(category: Category): UTSPromise { - return wrapUTSPromise(suspend w1@{ - if (selectedParentCategory.value != null && selectedParentCategory.value!!.id === category.id) { - showSubCategories.value = !showSubCategories.value - return@w1 - } - selectedParentCategory.value = category - showSubCategories.value = true - await(loadSubCategories(category.id)) - }) - } - val onSubCategoryClick = fun(category: Category): Unit { - uni_setStorageSync("selectedCategory", category.id) - val timestamp = Date.now() - val randomParam = Math.random().toString(36).substring(2, 8) - val url = "/pages/mall/consumer/category?categoryId=" + category.id + "&name=" + UTSAndroid.consoleDebugError(encodeURIComponent(category.name), " at pages/mall/consumer/index.uvue:673") + "×tamp=" + timestamp + "&random=" + randomParam - uni_switchTab(SwitchTabOptions(url = "/pages/mall/consumer/category")) - } - val switchBrand = fun(brand: Brand){ - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/search?keyword=" + UTSAndroid.consoleDebugError(encodeURIComponent(brand.name), " at pages/mall/consumer/index.uvue:713") + "&type=brand&brandId=" + brand.id)) - } - val switchSort = fun(sortId: String){ - activeSort.value = sortId - hasMore.value = true - loadHotProducts(defaultLoadLimit) - } - val onRefresh = fun(): UTSPromise { - return wrapUTSPromise(suspend { - refreshing.value = true - try { - await(initData()) - } - catch (e: Throwable) { - console.error("刷新数据失败:", e, " at pages/mall/consumer/index.uvue:747") - } - finally { - setTimeout(fun(){ - refreshing.value = false - setTimeout(fun(){ - uni_showToast(ShowToastOptions(title = "刷新成功", icon = "success")) - } - , 200) - } - , 800) - } - }) - } - val loadMore = fun(): UTSPromise { - return wrapUTSPromise(suspend w1@{ - console.log("=== 触发触底事件 ===", " at pages/mall/consumer/index.uvue:765") - if (loading.value) { - console.log("正在加载中,跳过", " at pages/mall/consumer/index.uvue:767") - return@w1 - } - showLoadMore.value = true - loading.value = true - try { - val currentCount = hotProducts.value.length - val nextLimit = currentCount + 6 - console.log("开始加载更多,当前数量:", currentCount, "目标数量:", nextLimit, " at pages/mall/consumer/index.uvue:778") - await(loadHotProducts(nextLimit)) - if (hotProducts.value.length === currentCount) { - hasMore.value = false - uni_showToast(ShowToastOptions(title = "没有更多了", icon = "none")) - } - } - catch (error: Throwable) { - console.error("加载更多失败:", error, " at pages/mall/consumer/index.uvue:798") - } - finally { - loading.value = false - setTimeout(fun(){ - showLoadMore.value = false - } - , 500) - } - }) - } - val addToCart = fun(product: Any): UTSPromise { - return wrapUTSPromise(suspend { - uni_showLoading(ShowLoadingOptions(title = "添加中...")) - try { - val prodObj = if ((product is UTSJSONObject)) { - (product as UTSJSONObject) - } else { - (UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(product)), " at pages/mall/consumer/index.uvue:813") as UTSJSONObject) - } - val productId = prodObj.getString("id") ?: "" - val success = await(supabaseService.addToCart(productId, 1, "")) - if (success) { - uni_showToast(ShowToastOptions(title = "已添加到购物车", icon = "success")) - } else { - uni_showToast(ShowToastOptions(title = "添加失败,请先登录", icon = "none")) - } - } - catch (e: Throwable) { - console.error("添加到购物车异常", e, " at pages/mall/consumer/index.uvue:831") - uni_showToast(ShowToastOptions(title = "操作异常", icon = "none")) - } - finally { - uni_hideLoading() - } - }) - } - val onScan = fun(): Unit { - uni_scanCode(ScanCodeOptions(success = fun(res){ - console.log("扫码成功:", res, " at pages/mall/consumer/index.uvue:845") - uni_showToast(ShowToastOptions(title = "扫码成功: " + res.result, icon = "none")) - } - , fail = fun(err){ - console.error("扫码失败:", err, " at pages/mall/consumer/index.uvue:852") - } - )) - } - val onCamera = fun(): Unit { - uni_chooseImage(ChooseImageOptions(count = 1, sourceType = _uA( - "camera" - ), success = fun(res){ - console.log("相机拍摄成功:", res.tempFilePaths[0], " at pages/mall/consumer/index.uvue:863") - uni_showToast(ShowToastOptions(title = "已拍摄,正在识别...", icon = "loading")) - setTimeout(fun(){ - uni_showToast(ShowToastOptions(title = "识别成功", icon = "success")) - } - , 1000) - } - , fail = fun(err){ - console.error("相机调用失败:", err, " at pages/mall/consumer/index.uvue:876") - } - )) - } - val navigateToSearch = fun(): Unit { - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/search")) - } - val navigateToProduct = fun(product: Any){ - val prodObj = if ((product is UTSJSONObject)) { - (product as UTSJSONObject) - } else { - (UTSAndroid.consoleDebugError(JSON.parse(JSON.stringify(product)), " at pages/mall/consumer/index.uvue:886") as UTSJSONObject) - } - val productId = prodObj.getString("productId") ?: prodObj.getString("id") ?: "" - val name = prodObj.getString("name") ?: "" - val image = prodObj.getString("main_image_url") ?: prodObj.getString("image") ?: "/static/product1.jpg" - val price = (prodObj.getNumber("base_price") ?: prodObj.getNumber("price") ?: 0).toString(10) - val marketPrice = prodObj.getNumber("market_price") ?: prodObj.getNumber("original_price") ?: (parseFloat(price) * 1.2) - val originalPrice = marketPrice.toString(10) - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/product-detail?id=" + productId + "&price=" + price + "&originalPrice=" + originalPrice + "&name=" + UTSAndroid.consoleDebugError(encodeURIComponent(name), " at pages/mall/consumer/index.uvue:899") + "&image=" + UTSAndroid.consoleDebugError(encodeURIComponent(image), " at pages/mall/consumer/index.uvue:899"))) - } - return fun(): Any? { - return _cE("view", _uM("class" to "medic-home"), _uA( - _cE("view", _uM("class" to "smart-navbar", "style" to _nS(_uM("paddingTop" to (statusBarHeight.value + "px"), "transform" to if (showNavbar.value) { - "translateY(0)" - } else { - "translateY(-100%)" - } - ))), _uA( - _cE("view", _uM("class" to "search-container"), _uA( - _cE("view", _uM("class" to "search-box", "onClick" to navigateToSearch, "style" to _nS(_uM("height" to "30px"))), _uA( - _cE("text", _uM("class" to "search-placeholder"), "请输入药品名称、症状或品牌"), - _cE("view", _uM("class" to "nav-icon-btn", "onClick" to withModifiers(onScan, _uA( - "stop" - ))), _uA( - _cE("text", _uM("class" to "nav-icon"), "🔳") - )), - _cE("view", _uM("class" to "nav-camera-btn", "onClick" to withModifiers(onCamera, _uA( - "stop" - ))), _uA( - _cE("text", _uM("class" to "nav-camera-icon"), "📷") - )), - _cE("view", _uM("class" to "nav-inner-search-btn", "style" to _nS(_uM("height" to "22px"))), _uA( - _cE("text", _uM("class" to "nav-inner-search-text"), "搜索") - ), 4) - ), 4) - )) - ), 4), - _cE("scroll-view", _uM("direction" to "vertical", "class" to "main-scroll", "refresher-enabled" to "", "refresher-triggered" to refreshing.value, "lower-threshold" to 50, "onRefresherrefresh" to onRefresh, "onScrolltolower" to loadMore, "onScroll" to handleScroll), _uA( - _cE("view", _uM("class" to "smart-categories", "style" to _nS(_uM("marginTop" to ((statusBarHeight.value + 44 + 10) + "px")))), _uA( - _cE("view", _uM("class" to "section-header"), _uA( - _cE("view", _uM("class" to "category-tabs-pills"), _uA( - _cE("view", _uM("class" to _nC(_uA( - "tab-pill", - _uM("active" to (categoryTab.value == "category")) - )), "onClick" to fun(){ - categoryTab.value = "category" - } - ), _uA( - _cE("text", _uM("class" to "tab-text"), "智能分类") - ), 10, _uA( - "onClick" - )), - _cE("view", _uM("class" to _nC(_uA( - "tab-pill", - _uM("active" to (categoryTab.value == "brand")) - )), "onClick" to fun(){ - categoryTab.value = "brand" - } - ), _uA( - _cE("text", _uM("class" to "tab-text"), "品牌甄选") - ), 10, _uA( - "onClick" - )) - )), - _cE("text", _uM("class" to "section-desc"), "快速定位") - )), - if (categoryTab.value === "category") { - _cE("view", _uM("key" to 0, "class" to "category-grid"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(parentCategories.value, fun(category, __key, __index, _cached): Any { - return _cE("view", _uM("key" to category.id, "class" to "category-card", "onClick" to fun(){ - onParentCategoryClick(category) - }, "style" to _nS(_uM("--card-color" to category.color))), _uA( - _cE("view", _uM("class" to "card-icon"), _uA( - _cE("text", _uM("class" to "card-icon-text"), _tD(category.icon), 1) - )), - _cE("text", _uM("class" to "card-name"), _tD(category.name), 1) - ), 12, _uA( - "onClick" - )) - }), 128) - )) - } else { - _cC("v-if", true) - } - , - if (isTrue(categoryTab.value === "category" && showSubCategories.value && subCategories.value.length > 0)) { - _cE("view", _uM("key" to 1, "class" to "sub-category-grid"), _uA( - _cE("view", _uM("class" to "sub-category-header"), _uA( - _cE("text", _uM("class" to "sub-category-title"), _tD(selectedParentCategory.value?.name) + "分类", 1), - _cE("text", _uM("class" to "sub-category-close", "onClick" to fun(){ - showSubCategories.value = false - }), "✕", 8, _uA( - "onClick" - )) - )), - _cE("view", _uM("class" to "sub-category-wrapper"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(subCategories.value, fun(subCat, __key, __index, _cached): Any { - return _cE("view", _uM("key" to subCat.id, "class" to "sub-category-card", "onClick" to fun(){ - onSubCategoryClick(subCat) - }), _uA( - _cE("view", _uM("class" to "card-icon"), _uA( - _cE("text", _uM("class" to "card-icon-text"), _tD(subCat.icon), 1) - )), - _cE("text", _uM("class" to "card-name"), _tD(subCat.name), 1) - ), 8, _uA( - "onClick" - )) - }), 128) - )) - )) - } else { - _cC("v-if", true) - } - , - if (categoryTab.value === "brand") { - _cE("view", _uM("key" to 2, "class" to "category-grid"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(brands.value, fun(brand, __key, __index, _cached): Any { - return _cE("view", _uM("key" to brand.id, "class" to "category-card", "onClick" to fun(){ - switchBrand(brand) - }, "style" to _nS(_uM("--card-color" to "#5785e5"))), _uA( - if (isTrue(brand.logo_url)) { - _cE("image", _uM("key" to 0, "src" to brand.logo_url, "mode" to "aspectFit", "class" to "brand-logo", "style" to _nS(_uM("width" to "40px", "height" to "40px", "border-radius" to "20px"))), null, 12, _uA( - "src" - )) - } else { - _cE("view", _uM("key" to 1, "class" to "card-icon"), _uA( - _cE("text", _uM("class" to "card-icon-text"), "🏢") - )) - }, - _cE("text", _uM("class" to "card-name"), _tD(brand.name), 1) - ), 12, _uA( - "onClick" - )) - }), 128) - )) - } else { - _cC("v-if", true) - } - ), 4), - _cE("view", _uM("class" to "hot-products"), _uA( - _cE("view", _uM("class" to "section-header"), _uA( - _cE("view", _uM("class" to "title-section"), _uA( - _cE("text", _uM("class" to "section-icon"), "🔥"), - _cE("text", _uM("class" to "section-title"), "热销商品") - )), - _cE("view", _uM("class" to "sort-tabs"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(sortTabs, fun(tab, __key, __index, _cached): Any { - return _cE("text", _uM("key" to tab.id, "class" to _nC(_uA( - "sort-tab", - _uM("active" to (activeSort.value === tab.id)) - )), "onClick" to fun(){ - switchSort(tab.id) - } - ), _tD(tab.name), 11, _uA( - "onClick" - )) - } - ), 64) - )) - )), - _cE("view", _uM("class" to "products-grid"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(hotProducts.value, fun(product, __key, __index, _cached): Any { - return _cE("view", _uM("key" to product.id, "class" to "product-card", "onClick" to fun(){ - navigateToProduct(product) - } - ), _uA( - if (isTrue(product.is_hot)) { - _cE("view", _uM("key" to 0, "class" to "product-badge"), "热销") - } else { - _cC("v-if", true) - } - , - _cE("image", _uM("class" to "product-image", "src" to product.main_image_url, "mode" to "aspectFill"), null, 8, _uA( - "src" - )), - _cE("view", _uM("class" to "product-info"), _uA( - _cE("view", _uM("class" to "product-name"), _tD(product.name), 1), - _cE("view", _uM("class" to "price-section"), _uA( - _cE("view", _uM("class" to "current-price"), _uA( - _cE("text", _uM("class" to "price-symbol"), "¥"), - _cE("text", _uM("class" to "price-value"), _tD(product.base_price ?: product.price ?: 0), 1) - )), - if (isTrue(product.market_price != null && product.base_price != null && product.market_price!! > product.base_price!!)) { - _cE("text", _uM("key" to 0, "class" to "original-price"), " ¥" + _tD(product.market_price), 1) - } else { - _cC("v-if", true) - } - )), - _cE("view", _uM("class" to "product-meta"), _uA( - _cE("text", _uM("class" to "manufacturer"), _tD(product.brand_name ?: product.shop_name ?: "自营"), 1), - _cE("view", _uM("class" to "sales-info"), _uA( - _cE("text", _uM("class" to "sales-count"), "已售" + _tD(product.sale_count), 1) - )) - )), - _cE("view", _uM("class" to "product-action"), _uA( - _cE("view", _uM("class" to "cart-btn", "onClick" to withModifiers(fun(){ - addToCart(product) - } - , _uA( - "stop" - ))), _uA( - _cE("text", _uM("class" to "cart-icon"), "+"), - _cE("text", _uM("class" to "cart-text"), "加入购物车") - ), 8, _uA( - "onClick" - )) - )) - )) - ), 8, _uA( - "onClick" - )) - } - ), 128) - )), - if (isTrue(loading.value || showLoadMore.value)) { - _cE("view", _uM("key" to 0, "class" to "load-more-status"), _uA( - _cE("text", _uM("class" to "loading-text"), "正在加载更多商品...") - )) - } else { - _cC("v-if", true) - } - )), - _cE("view", _uM("class" to "safe-area")) - ), 40, _uA( - "refresher-triggered" - )) - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0, - styles1 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("medic-home" to _pS(_uM("width" to "100%", "height" to "100%", "overflow" to "hidden", "backgroundImage" to "none", "backgroundColor" to "#f8fafc", "fontFamily" to "-apple-system, BlinkMacSystemFont, Segoe UI, PingFang SC, Hiragino Sans GB, sans-serif", "lineHeight" to 1.5, "display" to "flex", "flexDirection" to "column")), "main-scroll" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "height" to 1, "width" to "100%", "paddingTop" to 0, "paddingRight" to 16, "paddingBottom" to 16, "paddingLeft" to 16, "maxWidth" to 1400, "marginLeft" to "auto", "marginRight" to "auto")), "smart-navbar" to _pS(_uM("position" to "fixed", "top" to 0, "left" to 0, "right" to 0, "backgroundImage" to "linear-gradient(135deg, #4CAF50 0%, #2E7D32 100%)", "backgroundColor" to "rgba(0,0,0,0)", "zIndex" to 1000, "boxShadow" to "0 2px 12px rgba(76, 175, 80, 0.15)", "transitionProperty" to "all", "transitionDuration" to "0.3s", "transitionTimingFunction" to "cubic-bezier(0.4,0,0.2,1)")), "search-container" to _pS(_uM("height" to 44, "paddingTop" to 0, "paddingRight" to 16, "paddingBottom" to 0, "paddingLeft" to 16, "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "center", "maxWidth" to 1400, "marginTop" to 0, "marginRight" to "auto", "marginBottom" to 0, "marginLeft" to "auto", "width" to "100%")), "search-box" to _pS(_uM("boxShadow:hover" to "0 2px 8px rgba(0, 0, 0, 0.1)", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "maxWidth" to 600, "backgroundImage" to "none", "backgroundColor" to "#f0f0f0", "borderTopLeftRadius" to 20, "borderTopRightRadius" to 20, "borderBottomRightRadius" to 20, "borderBottomLeftRadius" to 20, "paddingTop" to 0, "paddingRight" to 4, "paddingBottom" to 0, "paddingLeft" to 12, "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "transitionProperty" to "all", "transitionDuration" to "0.3s", "transitionTimingFunction" to "ease", "width" to "100%", "height" to 32)), "search-placeholder" to _pS(_uM("fontSize" to 14, "color" to "#999999", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "whiteSpace" to "nowrap", "overflow" to "hidden", "textOverflow" to "ellipsis")), "nav-icon-btn" to _pS(_uM("paddingTop" to 4, "paddingRight" to 8, "paddingBottom" to 4, "paddingLeft" to 4, "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "center", "borderRightWidth" to 1, "borderRightStyle" to "solid", "borderRightColor" to "#dddddd", "marginRight" to 8)), "nav-icon" to _pS(_uM("fontSize" to 18)), "nav-inner-search-btn" to _pS(_uM("paddingTop" to 0, "paddingRight" to 12, "paddingBottom" to 0, "paddingLeft" to 12, "backgroundColor" to "#87CEEB", "borderTopLeftRadius" to 16, "borderTopRightRadius" to 16, "borderBottomRightRadius" to 16, "borderBottomLeftRadius" to 16, "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "center", "height" to 24)), "nav-inner-search-text" to _pS(_uM("fontSize" to 12, "color" to "#ffffff", "fontWeight" to "normal")), "navbar-placeholder" to _pS(_uM("width" to "100%", "flexShrink" to 0)), "nav-camera-btn" to _pS(_uM("paddingTop" to 4, "paddingRight" to 8, "paddingBottom" to 4, "paddingLeft" to 4, "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "center", "borderRightWidth" to 1, "borderRightStyle" to "solid", "borderRightColor" to "#dddddd", "marginRight" to 8)), "nav-camera-icon" to _pS(_uM("fontSize" to 20)), "smart-health-card" to _pS(_uM("backgroundImage" to "linear-gradient(135deg, #2196F3 0%, #1976D2 100%)", "backgroundColor" to "rgba(0,0,0,0)", "borderTopLeftRadius" to 16, "borderTopRightRadius" to 16, "borderBottomRightRadius" to 16, "borderBottomLeftRadius" to 16, "paddingTop" to 20, "paddingRight" to 20, "paddingBottom" to 20, "paddingLeft" to 20, "marginBottom" to 20, "color" to "#FFFFFF")), "health-content" to _pS(_uM("display" to "flex", "flexDirection" to "column")), "health-header" to _pS(_uM("display" to "flex", "flexDirection" to "column", "marginBottom" to 12)), "health-title" to _pS(_uM("fontSize" to 20, "fontWeight" to "bold", "marginBottom" to 4)), "health-subtitle" to _pS(_uM("fontSize" to 14, "opacity" to 0.9)), "health-tips" to _pS(_uM("display" to "flex", "flexWrap" to "wrap", "marginTop" to 8)), "tip-item" to _pS(_uM("fontSize" to 13, "paddingTop" to 6, "paddingRight" to 12, "paddingBottom" to 6, "paddingLeft" to 12, "backgroundImage" to "none", "backgroundColor" to "rgba(255,255,255,0.2)", "borderTopLeftRadius" to 20, "borderTopRightRadius" to 20, "borderBottomRightRadius" to 20, "borderBottomLeftRadius" to 20, "marginRight" to 12, "marginBottom" to 12)), "smart-categories" to _pS(_uM("backgroundImage" to "none", "backgroundColor" to "#FFFFFF", "borderTopLeftRadius" to 16, "borderTopRightRadius" to 16, "borderBottomRightRadius" to 16, "borderBottomLeftRadius" to 16, "paddingTop" to 20, "paddingRight" to 20, "paddingBottom" to 20, "paddingLeft" to 20, "marginBottom" to 20, "boxShadow" to "0 2px 12px rgba(0, 0, 0, 0.05)")), "section-header" to _pS(_uM("display" to "flex", "justifyContent" to "space-between", "alignItems" to "flex-start", "marginBottom" to 20, "flexDirection" to "column", "width" to "100%")), "category-tabs-pills" to _pS(_uM("display" to "flex", "flexDirection" to "row", "backgroundColor" to "#f0f2f5", "paddingTop" to 3, "paddingRight" to 3, "paddingBottom" to 3, "paddingLeft" to 3, "borderTopLeftRadius" to 20, "borderTopRightRadius" to 20, "borderBottomRightRadius" to 20, "borderBottomLeftRadius" to 20, "alignItems" to "center")), "tab-pill" to _uM("" to _uM("paddingTop" to 6, "paddingRight" to 18, "paddingBottom" to 6, "paddingLeft" to 18, "borderTopLeftRadius" to 17, "borderTopRightRadius" to 17, "borderBottomRightRadius" to 17, "borderBottomLeftRadius" to 17, "transitionProperty" to "all", "transitionDuration" to "0.3s", "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "center"), ".active" to _uM("backgroundColor" to "#ffffff", "boxShadow" to "0 2px 8px rgba(0,0,0,0.08)")), "tab-text" to _uM("" to _uM("fontSize" to 14, "color" to "#888888", "fontWeight" to "normal"), ".tab-pill.active " to _uM("color" to "#4CAF50", "fontWeight" to "bold")), "section-title" to _uM("" to _uM("fontSize" to 18, "fontWeight" to "bold", "color" to "#666666", "transitionProperty" to "color", "transitionDuration" to "0.3s"), ".active" to _uM("color" to "#4CAF50", "fontSize" to 20)), "section-desc" to _pS(_uM("fontSize" to 14, "color" to "#666666")), "category-grid" to _pS(_uM("display" to "flex", "flexDirection" to "row", "flexWrap" to "wrap", "marginTop" to 0, "marginRight" to "-1.5%", "marginBottom" to 0, "marginLeft" to "-1.5%")), "category-card" to _pS(_uM("width" to "47%", "marginTop" to 0, "marginRight" to "1.5%", "marginBottom" to 16, "marginLeft" to "1.5%", "display" to "flex", "flexDirection" to "column", "alignItems" to "center", "paddingTop" to 16, "paddingRight" to 16, "paddingBottom" to 16, "paddingLeft" to 16, "backgroundImage" to "none", "backgroundColor" to "#f8f9fa", "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "transitionProperty" to "all", "transitionDuration" to "0.3s", "transitionTimingFunction" to "ease", "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "rgba(0,0,0,0)", "borderRightColor" to "rgba(0,0,0,0)", "borderBottomColor" to "rgba(0,0,0,0)", "borderLeftColor" to "rgba(0,0,0,0)", "position" to "relative", "transform:hover" to "translateY(-2px)", "boxShadow:hover" to "0 4px 12px rgba(0, 0, 0, 0.1)", "borderTopColor:hover" to "var(--card-color,#4CAF50)", "borderRightColor:hover" to "var(--card-color,#4CAF50)", "borderBottomColor:hover" to "var(--card-color,#4CAF50)", "borderLeftColor:hover" to "var(--card-color,#4CAF50)")), "sub-category-grid" to _pS(_uM("backgroundImage" to "none", "backgroundColor" to "#f8f9fa", "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "paddingTop" to 16, "paddingRight" to 16, "paddingBottom" to 16, "paddingLeft" to 16, "marginTop" to 16)), "sub-category-header" to _pS(_uM("display" to "flex", "justifyContent" to "space-between", "alignItems" to "center", "marginBottom" to 12, "paddingBottom" to 8, "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#e0e0e0")), "sub-category-title" to _pS(_uM("fontSize" to 14, "fontWeight" to "bold", "color" to "#333333")), "sub-category-close" to _pS(_uM("fontSize" to 16, "color" to "#999999", "paddingTop" to 4, "paddingRight" to 8, "paddingBottom" to 4, "paddingLeft" to 8)), "sub-category-wrapper" to _pS(_uM("display" to "flex", "flexDirection" to "row", "flexWrap" to "wrap", "justifyContent" to "flex-start")), "sub-category-card" to _pS(_uM("width" to "23%", "backgroundImage" to "none", "backgroundColor" to "#FFFFFF", "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "paddingTop" to 10, "paddingRight" to 4, "paddingBottom" to 10, "paddingLeft" to 4, "display" to "flex", "flexDirection" to "column", "alignItems" to "center", "justifyContent" to "center", "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#eeeeee", "borderRightColor" to "#eeeeee", "borderBottomColor" to "#eeeeee", "borderLeftColor" to "#eeeeee", "marginRight" to "2%", "marginBottom" to 10)), "card-icon" to _uM(".sub-category-card " to _uM("width" to 36, "height" to 36, "borderTopLeftRadius" to 18, "borderTopRightRadius" to 18, "borderBottomRightRadius" to 18, "borderBottomLeftRadius" to 18, "marginBottom" to 6, "display" to "flex", "alignItems" to "center", "justifyContent" to "center"), "" to _uM("width" to 56, "height" to 56, "borderTopLeftRadius" to 28, "borderTopRightRadius" to 28, "borderBottomRightRadius" to 28, "borderBottomLeftRadius" to 28, "background" to "var(--card-color, #4CAF50)", "display" to "flex", "alignItems" to "center", "justifyContent" to "center", "marginBottom" to 12)), "card-icon-text" to _uM(".sub-category-card " to _uM("fontSize" to 18), "" to _uM("fontSize" to 24, "color" to "#FFFFFF")), "card-name" to _uM(".sub-category-card " to _uM("fontSize" to 11, "color" to "#333333", "textAlign" to "center", "lines" to 1, "textOverflow" to "ellipsis"), "" to _uM("fontSize" to 15, "fontWeight" to "bold", "color" to "#333333", "marginBottom" to 4, "textAlign" to "center")), "card-desc" to _pS(_uM("fontSize" to 12, "color" to "#666666", "textAlign" to "center")), "health-news" to _pS(_uM("backgroundImage" to "none", "backgroundColor" to "#FFFFFF", "borderTopLeftRadius" to 16, "borderTopRightRadius" to 16, "borderBottomRightRadius" to 16, "borderBottomLeftRadius" to 16, "paddingTop" to 20, "paddingRight" to 20, "paddingBottom" to 20, "paddingLeft" to 20, "marginBottom" to 20, "boxShadow" to "0 2px 12px rgba(0, 0, 0, 0.05)")), "news-header" to _pS(_uM("display" to "flex", "justifyContent" to "space-between", "alignItems" to "center", "marginBottom" to 16)), "news-title" to _pS(_uM("fontSize" to 18, "fontWeight" to "bold", "color" to "#333333")), "news-more" to _pS(_uM("fontSize" to 14, "color" to "#4CAF50")), "news-swiper" to _pS(_uM("height" to 200, "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "overflow" to "hidden")), "news-content" to _pS(_uM("position" to "relative", "height" to "100%", "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "overflow" to "hidden")), "news-image" to _pS(_uM("width" to "100%", "height" to "100%", "display" to "flex")), "news-caption" to _pS(_uM("fontSize" to 16, "fontWeight" to "bold", "lineHeight" to 1.4, "display" to "flex")), "smart-services" to _pS(_uM("backgroundImage" to "none", "backgroundColor" to "#FFFFFF", "borderTopLeftRadius" to 16, "borderTopRightRadius" to 16, "borderBottomRightRadius" to 16, "borderBottomLeftRadius" to 16, "paddingTop" to 20, "paddingRight" to 20, "paddingBottom" to 20, "paddingLeft" to 20, "marginBottom" to 20, "boxShadow" to "0 2px 12px rgba(0, 0, 0, 0.05)")), "services-grid" to _pS(_uM("display" to "flex", "flexDirection" to "row", "flexWrap" to "wrap", "marginTop" to 0, "marginRight" to "-1.5%", "marginBottom" to 0, "marginLeft" to "-1.5%")), "service-card" to _pS(_uM("width" to "47%", "marginTop" to 0, "marginRight" to "1.5%", "marginBottom" to 20, "marginLeft" to "1.5%", "display" to "flex", "flexDirection" to "column", "alignItems" to "center", "paddingTop" to 20, "paddingRight" to 20, "paddingBottom" to 20, "paddingLeft" to 20, "backgroundImage" to "none", "backgroundColor" to "#f8f9fa", "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "transitionProperty" to "all", "transitionDuration" to "0.3s", "transitionTimingFunction" to "ease", "transform:hover" to "translateY(-4px)", "boxShadow:hover" to "0 4px 12px rgba(0, 0, 0, 0.1)")), "service-icon" to _pS(_uM("width" to 60, "height" to 60, "borderTopLeftRadius" to 30, "borderTopRightRadius" to 30, "borderBottomRightRadius" to 30, "borderBottomLeftRadius" to 30, "display" to "flex", "alignItems" to "center", "justifyContent" to "center", "marginBottom" to 12)), "service-icon-text" to _pS(_uM("fontSize" to 28, "color" to "#FFFFFF")), "service-name" to _pS(_uM("fontSize" to 15, "fontWeight" to "bold", "color" to "#333333", "marginBottom" to 4)), "service-desc" to _pS(_uM("fontSize" to 12, "color" to "#666666")), "hot-products" to _pS(_uM("backgroundImage" to "none", "backgroundColor" to "#FFFFFF", "borderTopLeftRadius" to 16, "borderTopRightRadius" to 16, "borderBottomRightRadius" to 16, "borderBottomLeftRadius" to 16, "paddingTop" to 20, "paddingRight" to 20, "paddingBottom" to 20, "paddingLeft" to 20, "marginBottom" to 20, "boxShadow" to "0 2px 12px rgba(0, 0, 0, 0.05)")), "title-section" to _pS(_uM("display" to "flex", "alignItems" to "center", "width" to "100%")), "section-icon" to _pS(_uM("fontSize" to 20, "color" to "#4CAF50", "marginRight" to 8)), "sort-tabs" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center", "flexWrap" to "wrap", "justifyContent" to "flex-start", "width" to "100%", "marginTop" to 12)), "sort-tab" to _uM("" to _uM("fontSize" to 13, "color" to "#666666", "paddingTop" to 8, "paddingRight" to 12, "paddingBottom" to 8, "paddingLeft" to 12, "borderTopLeftRadius" to 20, "borderTopRightRadius" to 20, "borderBottomRightRadius" to 20, "borderBottomLeftRadius" to 20, "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#e0e0e0", "borderRightColor" to "#e0e0e0", "borderBottomColor" to "#e0e0e0", "borderLeftColor" to "#e0e0e0", "transitionProperty" to "all", "transitionDuration" to "0.2s", "transitionTimingFunction" to "ease", "whiteSpace" to "nowrap", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "minWidth" to 70, "textAlign" to "center", "display" to "flex", "justifyContent" to "center", "alignItems" to "center", "marginRight" to 8, "backgroundImage:hover" to "none", "backgroundColor:hover" to "#f5f5f5"), ".active" to _uM("backgroundImage" to "none", "backgroundColor" to "#4CAF50", "color" to "#FFFFFF", "borderTopColor" to "#4CAF50", "borderRightColor" to "#4CAF50", "borderBottomColor" to "#4CAF50", "borderLeftColor" to "#4CAF50"), ".active:hover" to _uM("backgroundImage" to "none", "backgroundColor" to "#388E3C")), "products-grid" to _pS(_uM("display" to "flex", "flexDirection" to "row", "flexWrap" to "wrap", "justifyContent" to "space-between", "marginTop" to 20, "minHeight" to 500, "paddingBottom" to 20)), "product-card" to _pS(_uM("width" to "48%", "marginBottom" to 20, "backgroundImage" to "none", "backgroundColor" to "#ffffff", "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "overflow" to "hidden", "transitionProperty" to "all", "transitionDuration" to "0.3s", "transitionTimingFunction" to "ease", "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#eeeeee", "borderRightColor" to "#eeeeee", "borderBottomColor" to "#eeeeee", "borderLeftColor" to "#eeeeee", "position" to "relative", "display" to "flex", "flexDirection" to "column", "transform:hover" to "translateY(-4px)", "boxShadow:hover" to "0 12px 32px rgba(0, 0, 0, 0.1)")), "product-badge" to _pS(_uM("position" to "absolute", "top" to 12, "left" to 12, "backgroundImage" to "none", "backgroundColor" to "#FF5722", "color" to "#FFFFFF", "fontSize" to 11, "paddingTop" to 4, "paddingRight" to 12, "paddingBottom" to 4, "paddingLeft" to 12, "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "fontWeight" to "bold", "zIndex" to 2)), "product-image" to _uM("" to _uM("width" to "100%", "height" to 180, "backgroundImage" to "none", "backgroundColor" to "#f8f9fa"), ".product-image-container " to _uM("width" to "100%", "height" to "100%", "backgroundImage" to "none", "backgroundColor" to "#FFFFFF")), "product-info" to _pS(_uM("paddingTop" to 16, "paddingRight" to 16, "paddingBottom" to 16, "paddingLeft" to 16, "display" to "flex", "flexDirection" to "column", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "product-name" to _pS(_uM("fontSize" to 15, "fontWeight" to "bold", "color" to "#333333", "marginBottom" to 4, "lineHeight" to 1.4, "display" to "flex", "whiteSpace" to "normal")), "product-spec" to _pS(_uM("fontSize" to 13, "color" to "#666666", "marginBottom" to 12, "display" to "flex")), "price-section" to _pS(_uM("display" to "flex", "alignItems" to "center", "marginBottom" to 12)), "current-price" to _pS(_uM("display" to "flex", "alignItems" to "center", "marginRight" to 8)), "price-symbol" to _pS(_uM("fontSize" to 14, "color" to "#FF5722")), "price-value" to _pS(_uM("fontSize" to 20, "fontWeight" to "bold", "color" to "#FF5722", "marginLeft" to 2)), "original-price" to _pS(_uM("fontSize" to 13, "color" to "#999999")), "product-meta" to _pS(_uM("display" to "flex", "justifyContent" to "space-between", "alignItems" to "center", "fontSize" to 12, "marginBottom" to 12)), "manufacturer" to _pS(_uM("color" to "#666666")), "sales-count" to _pS(_uM("color" to "#999999")), "product-action" to _pS(_uM("marginTop" to 12)), "cart-btn" to _pS(_uM("display" to "flex", "alignItems" to "center", "justifyContent" to "center", "backgroundImage" to "none", "backgroundColor" to "#4CAF50", "color" to "#FFFFFF", "paddingTop" to 8, "paddingRight" to 12, "paddingBottom" to 8, "paddingLeft" to 12, "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "fontSize" to 13, "fontWeight" to "bold", "transitionProperty" to "all", "transitionDuration" to "0.2s", "transitionTimingFunction" to "ease", "backgroundImage:hover" to "none", "backgroundColor:hover" to "#388E3C")), "cart-icon" to _pS(_uM("fontSize" to 16, "marginRight" to 6, "color" to "#FFFFFF")), "cart-text" to _pS(_uM("fontSize" to 13)), "family-medicine" to _pS(_uM("backgroundImage" to "none", "backgroundColor" to "#FFFFFF", "borderTopLeftRadius" to 16, "borderTopRightRadius" to 16, "borderBottomRightRadius" to 16, "borderBottomLeftRadius" to 16, "paddingTop" to 20, "paddingRight" to 20, "paddingBottom" to 20, "paddingLeft" to 20, "marginBottom" to 20, "boxShadow" to "0 2px 12px rgba(0, 0, 0, 0.05)")), "section-subtitle" to _pS(_uM("fontSize" to 14, "color" to "#666666", "marginLeft" to 12)), "family-grid" to _pS(_uM("display" to "flex", "flexDirection" to "row", "flexWrap" to "wrap", "marginTop" to 20, "marginRight" to "-1.5%", "marginBottom" to 0, "marginLeft" to "-1.5%")), "family-item" to _pS(_uM("width" to "47%", "marginTop" to 0, "marginRight" to "1.5%", "marginBottom" to 16, "marginLeft" to "1.5%", "display" to "flex", "flexDirection" to "column", "alignItems" to "center", "paddingTop" to 16, "paddingRight" to 16, "paddingBottom" to 16, "paddingLeft" to 16, "backgroundImage" to "none", "backgroundColor" to "#f8f9fa", "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "transitionProperty" to "all", "transitionDuration" to "0.3s", "transitionTimingFunction" to "ease", "transform:hover" to "translateY(-2px)", "boxShadow:hover" to "0 4px 12px rgba(0, 0, 0, 0.1)")), "family-icon" to _pS(_uM("width" to 48, "height" to 48, "borderTopLeftRadius" to 24, "borderTopRightRadius" to 24, "borderBottomRightRadius" to 24, "borderBottomLeftRadius" to 24, "display" to "flex", "alignItems" to "center", "justifyContent" to "center", "marginBottom" to 12)), "family-icon-text" to _pS(_uM("fontSize" to 20, "color" to "#FFFFFF")), "family-name" to _pS(_uM("fontSize" to 14, "fontWeight" to "bold", "color" to "#333333", "marginBottom" to 4)), "family-desc" to _pS(_uM("fontSize" to 12, "color" to "#666666")), "smart-recommend" to _pS(_uM("backgroundImage" to "none", "backgroundColor" to "#FFFFFF", "borderTopLeftRadius" to 16, "borderTopRightRadius" to 16, "borderBottomRightRadius" to 16, "borderBottomLeftRadius" to 16, "paddingTop" to 20, "paddingRight" to 20, "paddingBottom" to 20, "paddingLeft" to 20, "marginBottom" to 20, "boxShadow" to "0 2px 12px rgba(0, 0, 0, 0.05)")), "recommend-filters" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center", "flexWrap" to "wrap", "justifyContent" to "flex-start", "width" to "100%", "marginTop" to 12)), "filter-item" to _uM("" to _uM("fontSize" to 13, "color" to "#666666", "paddingTop" to 8, "paddingRight" to 12, "paddingBottom" to 8, "paddingLeft" to 12, "borderTopLeftRadius" to 20, "borderTopRightRadius" to 20, "borderBottomRightRadius" to 20, "borderBottomLeftRadius" to 20, "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#e0e0e0", "borderRightColor" to "#e0e0e0", "borderBottomColor" to "#e0e0e0", "borderLeftColor" to "#e0e0e0", "transitionProperty" to "all", "transitionDuration" to "0.2s", "transitionTimingFunction" to "ease", "whiteSpace" to "nowrap", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "minWidth" to 80, "textAlign" to "center", "display" to "flex", "justifyContent" to "center", "alignItems" to "center", "marginRight" to 8, "marginBottom" to 8, "backgroundImage:hover" to "none", "backgroundColor:hover" to "#f5f5f5"), ".active" to _uM("backgroundImage" to "none", "backgroundColor" to "#4CAF50", "color" to "#FFFFFF", "borderTopColor" to "#4CAF50", "borderRightColor" to "#4CAF50", "borderBottomColor" to "#4CAF50", "borderLeftColor" to "#4CAF50"), ".active:hover" to _uM("backgroundImage" to "none", "backgroundColor" to "#388E3C")), "recommend-grid" to _pS(_uM("display" to "flex", "flexDirection" to "row", "flexWrap" to "wrap", "marginTop" to 20, "marginRight" to "-1.5%", "marginBottom" to 0, "marginLeft" to "-1.5%")), "recommend-product" to _pS(_uM("width" to "97%", "marginTop" to 0, "marginRight" to "1.5%", "marginBottom" to 20, "marginLeft" to "1.5%", "backgroundImage" to "none", "backgroundColor" to "#f8f9fa", "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "overflow" to "hidden", "transitionProperty" to "all", "transitionDuration" to "0.3s", "transitionTimingFunction" to "ease", "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#e0e0e0", "borderRightColor" to "#e0e0e0", "borderBottomColor" to "#e0e0e0", "borderLeftColor" to "#e0e0e0", "transform:hover" to "translateY(-4px)", "boxShadow:hover" to "0 8px 24px rgba(0, 0, 0, 0.12)")), "product-image-container" to _pS(_uM("position" to "relative", "height" to 180)), "product-tags" to _pS(_uM("position" to "absolute", "top" to 12, "left" to 12, "display" to "flex", "flexDirection" to "row")), "product-tag" to _pS(_uM("paddingTop" to 4, "paddingRight" to 10, "paddingBottom" to 4, "paddingLeft" to 10, "borderTopLeftRadius" to 10, "borderTopRightRadius" to 10, "borderBottomRightRadius" to 10, "borderBottomLeftRadius" to 10, "fontSize" to 11, "fontWeight" to "bold", "color" to "#FFFFFF", "marginRight" to 8, "backgroundImage" to "none", "backgroundColor" to "rgba(76,175,80,0.9)")), "featured-tag" to _pS(_uM("paddingTop" to 4, "paddingRight" to 10, "paddingBottom" to 4, "paddingLeft" to 10, "borderTopLeftRadius" to 10, "borderTopRightRadius" to 10, "borderBottomRightRadius" to 10, "borderBottomLeftRadius" to 10, "fontSize" to 11, "fontWeight" to "bold", "color" to "#FFFFFF", "marginRight" to 8, "backgroundImage" to "none", "backgroundColor" to "rgba(255,87,34,0.9)")), "product-details" to _pS(_uM("paddingTop" to 16, "paddingRight" to 16, "paddingBottom" to 16, "paddingLeft" to 16)), "product-title" to _pS(_uM("fontSize" to 16, "fontWeight" to "bold", "color" to "#333333", "marginBottom" to 4, "lineHeight" to 1.4, "display" to "flex")), "product-specification" to _pS(_uM("fontSize" to 13, "color" to "#666666", "marginBottom" to 12, "display" to "flex")), "product-rating" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center", "marginBottom" to 12, "fontSize" to 13)), "rating-stars" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center", "marginRight" to 8))) - } - val styles1: Map>> - get() { - return _uM("star-icon" to _pS(_uM("fontSize" to 14, "color" to "#FFC107", "marginRight" to 2)), "rating-value" to _pS(_uM("fontWeight" to "bold", "color" to "#333333")), "reviews-count" to _pS(_uM("color" to "#666666")), "product-actions" to _pS(_uM("display" to "flex", "justifyContent" to "flex-end", "marginTop" to 12)), "add-to-cart" to _pS(_uM("width" to 36, "height" to 36, "borderTopLeftRadius" to 18, "borderTopRightRadius" to 18, "borderBottomRightRadius" to 18, "borderBottomLeftRadius" to 18, "backgroundImage" to "none", "backgroundColor" to "#4CAF50", "display" to "flex", "alignItems" to "center", "justifyContent" to "center", "transitionProperty" to "all", "transitionDuration" to "0.2s", "transitionTimingFunction" to "ease", "backgroundImage:hover" to "none", "backgroundColor:hover" to "#388E3C", "transform:hover" to "scale(1.1)")), "health-reminder" to _pS(_uM("backgroundImage" to "linear-gradient(135deg, #FF9800 0%, #F57C00 100%)", "backgroundColor" to "rgba(0,0,0,0)", "borderTopLeftRadius" to 16, "borderTopRightRadius" to 16, "borderBottomRightRadius" to 16, "borderBottomLeftRadius" to 16, "paddingTop" to 16, "paddingRight" to 20, "paddingBottom" to 16, "paddingLeft" to 20, "marginBottom" to 20, "color" to "#FFFFFF")), "reminder-content" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center")), "reminder-icon" to _pS(_uM("fontSize" to 24, "marginRight" to 12)), "reminder-text" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "display" to "flex", "flexDirection" to "column")), "reminder-title" to _pS(_uM("fontSize" to 15, "fontWeight" to "bold", "marginBottom" to 4)), "reminder-desc" to _pS(_uM("fontSize" to 13, "opacity" to 0.9)), "reminder-action" to _pS(_uM("paddingTop" to 6, "paddingRight" to 16, "paddingBottom" to 6, "paddingLeft" to 16, "backgroundImage" to "none", "backgroundColor" to "rgba(255,255,255,0.2)", "borderTopLeftRadius" to 20, "borderTopRightRadius" to 20, "borderBottomRightRadius" to 20, "borderBottomLeftRadius" to 20, "transitionProperty" to "all", "transitionDuration" to "0.2s", "transitionTimingFunction" to "ease", "backgroundImage:hover" to "none", "backgroundColor:hover" to "rgba(255,255,255,0.3)")), "action-text" to _pS(_uM("fontSize" to 13, "fontWeight" to "bold")), "loading-state" to _pS(_uM("paddingTop" to 40, "paddingRight" to 0, "paddingBottom" to 40, "paddingLeft" to 0, "display" to "flex", "flexDirection" to "column", "alignItems" to "center", "justifyContent" to "center")), "loading-spinner" to _pS(_uM("width" to 32, "height" to 32, "borderTopWidth" to 3, "borderRightWidth" to 3, "borderBottomWidth" to 3, "borderLeftWidth" to 3, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#4CAF50", "borderRightColor" to "#f0f0f0", "borderBottomColor" to "#f0f0f0", "borderLeftColor" to "#f0f0f0", "borderTopLeftRadius" to 16, "borderTopRightRadius" to 16, "borderBottomRightRadius" to 16, "borderBottomLeftRadius" to 16, "marginBottom" to 12)), "loading-text" to _pS(_uM("fontSize" to 14, "color" to "#666666")), "no-more" to _pS(_uM("paddingTop" to 30, "paddingRight" to 0, "paddingBottom" to 30, "paddingLeft" to 0, "textAlign" to "center", "borderTopWidth" to 1, "borderTopStyle" to "solid", "borderTopColor" to "#f0f0f0", "marginTop" to 10)), "no-more-text" to _pS(_uM("fontSize" to 13, "color" to "#999999")), "safe-area" to _pS(_uM("height" to 20, "width" to "100%")), "@TRANSITION" to _uM("smart-navbar" to _uM("property" to "all", "duration" to "0.3s", "timingFunction" to "cubic-bezier(0.4,0,0.2,1)"), "search-box" to _uM("property" to "all", "duration" to "0.3s", "timingFunction" to "ease"), "tab-pill" to _uM("property" to "all", "duration" to "0.3s"), "section-title" to _uM("property" to "color", "duration" to "0.3s"), "category-card" to _uM("property" to "all", "duration" to "0.3s", "timingFunction" to "ease"), "service-card" to _uM("property" to "all", "duration" to "0.3s", "timingFunction" to "ease"), "sort-tab" to _uM("property" to "all", "duration" to "0.2s", "timingFunction" to "ease"), "product-card" to _uM("property" to "all", "duration" to "0.3s", "timingFunction" to "ease"), "cart-btn" to _uM("property" to "all", "duration" to "0.2s", "timingFunction" to "ease"), "family-item" to _uM("property" to "all", "duration" to "0.3s", "timingFunction" to "ease"), "filter-item" to _uM("property" to "all", "duration" to "0.2s", "timingFunction" to "ease"), "recommend-product" to _uM("property" to "all", "duration" to "0.3s", "timingFunction" to "ease"), "add-to-cart" to _uM("property" to "all", "duration" to "0.2s", "timingFunction" to "ease"), "reminder-action" to _uM("property" to "all", "duration" to "0.2s", "timingFunction" to "ease"))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/mall/consumer/logistics.kt b/unpackage/cache/.app-android/src/pages/mall/consumer/logistics.kt deleted file mode 100644 index 511da56c..00000000 --- a/unpackage/cache/.app-android/src/pages/mall/consumer/logistics.kt +++ /dev/null @@ -1,102 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -open class GenPagesMallConsumerLogistics : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesMallConsumerLogistics) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesMallConsumerLogistics - val _cache = __ins.renderCache - val orderId = ref("") - val productImage = ref("/static/product1.jpg") - val logisticsStatus = ref("运输中") - val courierName = ref("顺丰速运") - val courierPhone = ref("95338") - val trackingNo = ref("SF1234567890") - val trackList = ref(_uA(TrackItem(desc = "【深圳市】快件已到达 深圳南山集散中心", time = "2024-01-26 14:30:00"), TrackItem(desc = "【广州市】快件已从 广州转运中心 发出,准备发往 深圳南山集散中心", time = "2024-01-26 09:20:00"), TrackItem(desc = "【广州市】快件已到达 广州转运中心", time = "2024-01-25 22:15:00"), TrackItem(desc = "【杭州市】商家已发货", time = "2024-01-25 18:00:00"))) - onMounted(fun(){ - val pages = getCurrentPages() - val currentPage = pages[pages.length - 1] - val options = currentPage.options - if (options != null) { - val optionsObj = options as UTSJSONObject - val orderIdValue = optionsObj.getString("orderId") - if (orderIdValue != null) { - orderId.value = orderIdValue - } - } - } - ) - return fun(): Any? { - return _cE("view", _uM("class" to "logistics-page"), _uA( - _cE("view", _uM("class" to "logistics-header"), _uA( - _cE("view", _uM("class" to "product-info"), _uA( - _cE("image", _uM("class" to "product-image", "src" to productImage.value, "mode" to "aspectFill"), null, 8, _uA( - "src" - )), - _cE("view", _uM("class" to "info-right"), _uA( - _cE("text", _uM("class" to "status-text"), _tD(logisticsStatus.value), 1), - _cE("text", _uM("class" to "courier-name"), _tD(courierName.value) + ": " + _tD(trackingNo.value), 1), - _cE("text", _uM("class" to "phone-text"), "官方电话: " + _tD(courierPhone.value), 1) - )) - )) - )), - _cE("view", _uM("class" to "logistics-body"), _uA( - _cE("view", _uM("class" to "track-list"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(trackList.value, fun(item, index, __index, _cached): Any { - return _cE("view", _uM("key" to index, "class" to _nC(_uA( - "track-item", - _uM("first" to (index === 0)) - ))), _uA( - _cE("view", _uM("class" to "node-icon"), _uA( - _cE("view", _uM("class" to "dot")), - if (index !== trackList.value.length - 1) { - _cE("view", _uM("key" to 0, "class" to "line")) - } else { - _cC("v-if", true) - } - )), - _cE("view", _uM("class" to "node-content"), _uA( - _cE("text", _uM("class" to "track-desc"), _tD(item.desc), 1), - _cE("text", _uM("class" to "track-time"), _tD(item.time), 1) - )) - ), 2) - } - ), 128) - )) - )) - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("logistics-page" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "backgroundColor" to "#f5f5f5", "paddingBottom" to 20)), "logistics-header" to _pS(_uM("backgroundColor" to "#ffffff", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "marginBottom" to 10)), "product-info" to _pS(_uM("display" to "flex", "alignItems" to "center")), "product-image" to _pS(_uM("width" to 60, "height" to 60, "borderTopLeftRadius" to 4, "borderTopRightRadius" to 4, "borderBottomRightRadius" to 4, "borderBottomLeftRadius" to 4, "marginRight" to 15, "backgroundColor" to "#eeeeee")), "info-right" to _pS(_uM("display" to "flex", "flexDirection" to "column")), "status-text" to _pS(_uM("fontSize" to 16, "color" to "#ff5000", "fontWeight" to "bold", "marginBottom" to 5)), "courier-name" to _pS(_uM("fontSize" to 14, "color" to "#333333", "marginBottom" to 2)), "phone-text" to _pS(_uM("fontSize" to 12, "color" to "#999999")), "logistics-body" to _pS(_uM("backgroundColor" to "#ffffff", "paddingTop" to 20, "paddingRight" to 15, "paddingBottom" to 20, "paddingLeft" to 15)), "track-list" to _pS(_uM("display" to "flex", "flexDirection" to "column")), "track-item" to _pS(_uM("display" to "flex", "position" to "relative", "paddingBottom" to 25, "paddingBottom:last-child" to 0)), "node-icon" to _pS(_uM("width" to 20, "display" to "flex", "flexDirection" to "column", "alignItems" to "center", "marginRight" to 15)), "dot" to _uM("" to _uM("width" to 8, "height" to 8, "borderTopLeftRadius" to 4, "borderTopRightRadius" to 4, "borderBottomRightRadius" to 4, "borderBottomLeftRadius" to 4), ".first " to _uM("backgroundColor" to "#ff5000", "width" to 12, "height" to 12, "marginTop" to 4, "boxShadow" to "0 0 0 4px rgba(255, 80, 0, 0.2)")), "line" to _pS(_uM("width" to 1, "backgroundColor" to "#eeeeee", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "marginTop" to 2)), "node-content" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "display" to "flex", "flexDirection" to "column")), "track-desc" to _uM("" to _uM("fontSize" to 14, "color" to "#333333", "lineHeight" to 1.5, "marginBottom" to 5), ".first " to _uM("color" to "#ff5000", "fontWeight" to "bold")), "track-time" to _pS(_uM("fontSize" to 12, "color" to "#999999"))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/mall/consumer/messages.kt b/unpackage/cache/.app-android/src/pages/mall/consumer/messages.kt deleted file mode 100644 index 490399fd..00000000 --- a/unpackage/cache/.app-android/src/pages/mall/consumer/messages.kt +++ /dev/null @@ -1,547 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.getStorageSync as uni_getStorageSync -import io.dcloud.uniapp.extapi.getSystemInfoSync as uni_getSystemInfoSync -import io.dcloud.uniapp.extapi.navigateTo as uni_navigateTo -import io.dcloud.uniapp.framework.onShow as onShow__1 -import io.dcloud.uniapp.framework.onLoad as onLoad__1 -import io.dcloud.uniapp.extapi.setStorageSync as uni_setStorageSync -import io.dcloud.uniapp.extapi.showModal as uni_showModal -import io.dcloud.uniapp.extapi.showToast as uni_showToast -open class GenPagesMallConsumerMessages : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesMallConsumerMessages) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesMallConsumerMessages - val _cache = __ins.renderCache - val activeTab = ref("service") - val refreshing = ref(false) - val loading = ref(false) - val unreadCount = ref(12) - val statusBarHeight = ref(0) - val scrollTop = ref(0) - val scrollHeight = ref(0) - val messageTabs = reactive(_uA(MessageTab(id = "service", name = "客服消息", unread = 5), MessageTab(id = "system", name = "系统通知", unread = 3), MessageTab(id = "order", name = "订单消息", unread = 2), MessageTab(id = "promo", name = "优惠活动", unread = 2))) - val serviceMessages = reactive(_uA()) - val systemMessages = reactive(_uA()) - val orderMessages = reactive(_uA()) - val promoMessages = reactive(_uA()) - val currentMessages = computed>(fun(): UTSArray { - when (activeTab.value) { - "system" -> - return systemMessages - "order" -> - return orderMessages - "service" -> - return serviceMessages - "promo" -> - return promoMessages - else -> - return _uA() - } - } - ) - val formatTime = fun(isoString: String): String { - if (isoString == "") { - return "" - } - try { - return isoString.split("T")[0] - } - catch (e: Throwable) { - return isoString - } - } - val updateUnreadCount = fun(){ - var totalUnread: Number = 0 - var serviceUnread: Number = 0 - serviceMessages.forEach(fun(msg: MessageItem){ - if (!msg.read) { - serviceUnread++ - } - } - ) - messageTabs[0].unread = serviceUnread - totalUnread += serviceUnread - var systemUnread: Number = 0 - systemMessages.forEach(fun(msg: MessageItem){ - if (!msg.read) { - systemUnread++ - } - } - ) - messageTabs[1].unread = systemUnread - totalUnread += systemUnread - var orderUnread: Number = 0 - orderMessages.forEach(fun(msg: MessageItem){ - if (!msg.read) { - orderUnread++ - } - } - ) - messageTabs[2].unread = orderUnread - totalUnread += orderUnread - var promoUnread: Number = 0 - promoMessages.forEach(fun(msg: MessageItem){ - if (!msg.read) { - promoUnread++ - } - } - ) - messageTabs[3].unread = promoUnread - totalUnread += promoUnread - unreadCount.value = totalUnread - } - val initPage = fun(){ - val systemInfo = uni_getSystemInfoSync() - statusBarHeight.value = systemInfo.statusBarHeight - val windowHeight = systemInfo.windowHeight - scrollHeight.value = windowHeight - statusBarHeight.value - 44 - 42 - } - val loadMessages = fun(): UTSPromise { - return wrapUTSPromise(suspend { - loading.value = true - try { - serviceMessages.length = 0 - systemMessages.length = 0 - orderMessages.length = 0 - promoMessages.length = 0 - val notes = await(supabaseService.getUserNotifications()) - notes.forEach(fun(note: Notification){ - val item = MessageItem(id = note.id, title = note.title, content = note.content, time = formatTime(note.created_at ?: ""), read = note.is_read, type = note.type, avatar = note.icon_url, important = note.type === "system", coupon = "点击查看", expiry = "", claimed = false, order_no = "", status = "", statusText = "", role = "", lastMessage = "", online = false, unreadCount = 0, tags = _uA(), icon = "", color = "", active = false) - if (note.type === "system") { - systemMessages.push(item) - } else if (note.type === "order") { - orderMessages.push(item) - } else if (note.type === "promotion") { - item.type = "promo" - promoMessages.push(item) - } - } - ) - val rooms = await(supabaseService.getChatRooms()) - rooms.forEach(fun(room: ChatRoom){ - val msgItem = MessageItem(id = room.merchant_id, title = room.shop_name, role = "商家客服", content = room.last_message ?: "暂无消息", lastMessage = room.last_message ?: "暂无消息", time = formatTime(room.last_message_at ?: ""), read = room.unread_count === 0, type = "service", avatar = room.shop_logo ?: "/static/icons/shop-default.png", online = true, unreadCount = room.unread_count, tags = _uA(), icon = "🏪", color = "#FF9800", important = false, coupon = "", expiry = "", claimed = false, order_no = "", status = "", statusText = "", active = false) - serviceMessages.push(msgItem) - } - ) - if (serviceMessages.length === 0) { - val defaultService = MessageItem(id = "default_service", title = "平台客服", role = "智能助手", content = "有问题请随时联系我们", lastMessage = "欢迎咨询", time = "刚刚", read = true, type = "service", avatar = "/static/icons/service-avatar.png", online = true, unreadCount = 0, tags = _uA( - "自动回复" - ), icon = "🤖", color = "#2196F3", important = false, coupon = "", expiry = "", claimed = false, order_no = "", status = "", statusText = "", active = false) - serviceMessages.push(defaultService) - } - } - catch (e: Throwable) { - console.error("加载消息失败", e, " at pages/mall/consumer/messages.uvue:451") - } - finally { - updateUnreadCount() - loading.value = false - } - }) - } - onMounted(fun(){ - console.log("Messages Page Mounted", " at pages/mall/consumer/messages.uvue:460") - initPage() - } - ) - onShow__1(fun(){ - console.log("Messages Page Show", " at pages/mall/consumer/messages.uvue:465") - loadMessages() - } - ) - val switchTab = fun(tabId: String){ - activeTab.value = tabId - scrollTop.value = if (scrollTop.value === 0) { - 0.01 - } else { - 0 - } - } - val startChatWithService = fun(message: MessageItem){ - message.read = true - message.unreadCount = 0 - updateUnreadCount() - val merchantId = if (message.id === "default_service") { - "" - } else { - message.id - } - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/chat?merchantId=" + merchantId + "&merchantName=" + UTSAndroid.consoleDebugError(encodeURIComponent(message.title), " at pages/mall/consumer/messages.uvue:487"))) - } - val viewSystemMessage = fun(message: MessageItem){ - message.read = true - updateUnreadCount() - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/message-detail?id=" + message.id + "&type=system")) - } - val viewOrderMessage = fun(message: MessageItem){ - message.read = true - updateUnreadCount() - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/order-detail?id=" + message.order_no)) - } - val viewPromoMessage = fun(message: MessageItem){ - message.read = true - updateUnreadCount() - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/coupons")) - } - val claimCoupon = fun(message: MessageItem){ - if (message.claimed) { - uni_showToast(ShowToastOptions(title = "您已领取该优惠券", icon = "none")) - return - } - message.claimed = true - val claimedCouponsCount = uni_getStorageSync("claimedCoupons") - val count = if ((claimedCouponsCount != null)) { - (claimedCouponsCount as Number) - } else { - 0 - } - uni_setStorageSync("claimedCoupons", count + 1) - val myCoupons = uni_getStorageSync("myCoupons") - var couponsList: UTSArray = _uA() - if (myCoupons != null) { - try { - couponsList = UTSAndroid.consoleDebugError(JSON.parse(myCoupons as String), " at pages/mall/consumer/messages.uvue:558") as UTSArray - } - catch (e: Throwable) { - console.error("Failed to parse myCoupons", e, " at pages/mall/consumer/messages.uvue:560") - } - } - couponsList.push(object : UTSJSONObject() { - var title = message.title - var amount = message.coupon - var expiry = message.expiry - var id = message.id - }) - uni_setStorageSync("myCoupons", JSON.stringify(couponsList)) - uni_showToast(ShowToastOptions(title = "领取成功", icon = "success")) - } - val clearAllUnread = fun(){ - uni_showModal(ShowModalOptions(title = "确认操作", content = "确定要标记所有消息为已读吗?", success = fun(res){ - if (res.confirm) { - serviceMessages.forEach(fun(msg: MessageItem){ - msg.read = true - msg.unreadCount = 0 - } - ) - systemMessages.forEach(fun(msg: MessageItem){ - msg.read = true - } - ) - orderMessages.forEach(fun(msg: MessageItem){ - msg.read = true - } - ) - promoMessages.forEach(fun(msg: MessageItem){ - msg.read = true - } - ) - messageTabs.forEach(fun(tab: MessageTab){ - tab.unread = 0 - } - ) - unreadCount.value = 0 - uni_showToast(ShowToastOptions(title = "已标记所有消息为已读", icon = "success")) - } - } - )) - } - val onRefresh = fun(){ - refreshing.value = true - setTimeout(fun(){ - loadMessages() - refreshing.value = false - uni_showToast(ShowToastOptions(title = "刷新成功", icon = "success")) - } - , 1000) - } - return fun(): Any? { - return _cE("view", _uM("class" to "messages-page"), _uA( - _cE("view", _uM("class" to "smart-navbar", "style" to _nS(_uM("paddingTop" to (statusBarHeight.value + "px")))), _uA( - _cE("view", _uM("class" to "nav-container"), _uA( - _cE("text", _uM("class" to "nav-title"), "消息中心"), - _cE("view", _uM("class" to "nav-actions"), _uA( - _cE("view", _uM("class" to "action-btn", "onClick" to clearAllUnread), _uA( - _cE("text", _uM("class" to "action-icon"), "🧹"), - _cE("text", _uM("class" to "action-text"), "一键已读") - )) - )) - )) - ), 4), - _cE("view", _uM("class" to "navbar-placeholder", "style" to _nS(_uM("height" to ((statusBarHeight.value + 10) + "px")))), null, 4), - _cE("view", _uM("class" to "tabs-container"), _uA( - _cE("view", _uM("class" to "message-tabs"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(messageTabs, fun(tab, __key, __index, _cached): Any { - return _cE("view", _uM("key" to tab.id, "class" to _nC(_uA( - "tab-item", - _uM("active" to (activeTab.value === tab.id)) - )), "onClick" to fun(){ - switchTab(tab.id) - } - ), _uA( - _cE("text", _uM("class" to "tab-name"), _tD(tab.name), 1), - if (tab.unread > 0) { - _cE("text", _uM("key" to 0, "class" to "tab-badge"), _tD(if (tab.unread > 99) { - "99+" - } else { - tab.unread - }), 1) - } else { - _cC("v-if", true) - } - ), 10, _uA( - "onClick" - )) - } - ), 128) - )) - )), - _cE("scroll-view", _uM("scroll-y" to "", "class" to "messages-content", "refresher-enabled" to "", "refresher-triggered" to refreshing.value, "onRefresherrefresh" to onRefresh, "scroll-top" to scrollTop.value), _uA( - if (activeTab.value === "service") { - _cE("view", _uM("key" to 0, "class" to "message-section"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(serviceMessages, fun(message, __key, __index, _cached): Any { - return _cE("view", _uM("key" to message.id, "class" to _nC(_uA( - "message-item", - _uM("unread" to !message.read, "active" to message.active) - )), "onClick" to fun(){ - startChatWithService(message) - }), _uA( - _cE("view", _uM("class" to "message-icon-wrapper"), _uA( - if (isTrue(message.avatar)) { - _cE("image", _uM("key" to 0, "class" to "message-avatar", "src" to message.avatar, "mode" to "aspectFill"), null, 8, _uA( - "src" - )) - } else { - _cE("view", _uM("key" to 1, "class" to "message-icon-default", "style" to _nS(_uM("backgroundColor" to message.color))), _uA( - _cE("text", _uM("class" to "message-icon-text"), _tD(message.icon), 1) - ), 4) - }, - if (isTrue(message.online)) { - _cE("view", _uM("key" to 2, "class" to "online-dot")) - } else { - _cC("v-if", true) - } - )), - _cE("view", _uM("class" to "message-content"), _uA( - _cE("view", _uM("class" to "message-header"), _uA( - _cE("view", _uM("class" to "message-title-wrapper"), _uA( - _cE("text", _uM("class" to "message-title"), _tD(message.title), 1), - if (isTrue(message.role)) { - _cE("text", _uM("key" to 0, "class" to "message-role"), _tD(message.role), 1) - } else { - _cC("v-if", true) - } - )), - _cE("view", _uM("class" to "message-header-right"), _uA( - _cE("text", _uM("class" to "message-time"), _tD(message.time), 1), - if (message.unreadCount > 0) { - _cE("text", _uM("key" to 0, "class" to "message-unread-count"), _tD(message.unreadCount), 1) - } else { - _cC("v-if", true) - } - )) - )), - _cE("view", _uM("class" to "message-preview-wrapper"), _uA( - _cE("text", _uM("class" to "message-preview"), _tD(message.content), 1), - if (isTrue(message.lastMessage)) { - _cE("text", _uM("key" to 0, "class" to "last-message"), _tD(message.lastMessage), 1) - } else { - _cC("v-if", true) - } - )), - if (isTrue(message.tags)) { - _cE("view", _uM("key" to 0, "class" to "message-tags"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(message.tags, fun(tag, __key, __index, _cached): Any { - return _cE("text", _uM("key" to tag, "class" to "message-tag"), _tD(tag), 1) - }), 128) - )) - } else { - _cC("v-if", true) - } - )) - ), 10, _uA( - "onClick" - )) - }), 128), - _cE("view", _uM("class" to "service-tips"), _uA( - _cE("text", _uM("class" to "tip-icon"), "💡"), - _cE("text", _uM("class" to "tip-text"), "温馨提示:请勿相信任何要求转账、付款的信息,谨防诈骗") - )) - )) - } else { - _cC("v-if", true) - } - , - if (activeTab.value === "system") { - _cE("view", _uM("key" to 1, "class" to "message-section"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(systemMessages, fun(message, __key, __index, _cached): Any { - return _cE("view", _uM("key" to message.id, "class" to _nC(_uA( - "message-item", - _uM("unread" to !message.read) - )), "onClick" to fun(){ - viewSystemMessage(message) - }), _uA( - _cE("view", _uM("class" to "message-icon-wrapper"), _uA( - _cE("text", _uM("class" to "message-icon"), "📢") - )), - _cE("view", _uM("class" to "message-content"), _uA( - _cE("view", _uM("class" to "message-header"), _uA( - _cE("text", _uM("class" to "message-title"), _tD(message.title), 1), - _cE("text", _uM("class" to "message-time"), _tD(message.time), 1) - )), - _cE("text", _uM("class" to "message-preview"), _tD(message.content), 1), - if (isTrue(message.important)) { - _cE("view", _uM("key" to 0, "class" to "important-tag"), "重要") - } else { - _cC("v-if", true) - } - )) - ), 10, _uA( - "onClick" - )) - }), 128) - )) - } else { - _cC("v-if", true) - } - , - if (activeTab.value === "order") { - _cE("view", _uM("key" to 2, "class" to "message-section"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(orderMessages, fun(message, __key, __index, _cached): Any { - return _cE("view", _uM("key" to message.id, "class" to _nC(_uA( - "message-item", - _uM("unread" to !message.read) - )), "onClick" to fun(){ - viewOrderMessage(message) - }), _uA( - _cE("view", _uM("class" to "message-icon-wrapper"), _uA( - _cE("text", _uM("class" to "message-icon"), "📦") - )), - _cE("view", _uM("class" to "message-content"), _uA( - _cE("view", _uM("class" to "message-header"), _uA( - _cE("text", _uM("class" to "message-title"), _tD(message.title), 1), - _cE("text", _uM("class" to "message-time"), _tD(message.time), 1) - )), - _cE("text", _uM("class" to "message-preview"), _tD(message.content), 1), - if (isTrue(message.order_no)) { - _cE("text", _uM("key" to 0, "class" to "order-info"), "订单号: " + _tD(message.order_no), 1) - } else { - _cC("v-if", true) - }, - if (isTrue(message.status)) { - _cE("view", _uM("key" to 1, "class" to _nC(_uA( - "order-status", - message.status - ))), _tD(message.statusText), 3) - } else { - _cC("v-if", true) - } - )) - ), 10, _uA( - "onClick" - )) - }), 128) - )) - } else { - _cC("v-if", true) - } - , - if (activeTab.value === "promo") { - _cE("view", _uM("key" to 3, "class" to "message-section"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(promoMessages, fun(message, __key, __index, _cached): Any { - return _cE("view", _uM("key" to message.id, "class" to _nC(_uA( - "message-item", - _uM("unread" to !message.read) - )), "onClick" to fun(){ - viewPromoMessage(message) - }), _uA( - _cE("view", _uM("class" to "message-icon-wrapper"), _uA( - _cE("text", _uM("class" to "message-icon"), "🎁") - )), - _cE("view", _uM("class" to "message-content"), _uA( - _cE("view", _uM("class" to "message-header"), _uA( - _cE("text", _uM("class" to "message-title"), _tD(message.title), 1), - _cE("text", _uM("class" to "message-time"), _tD(message.time), 1) - )), - _cE("text", _uM("class" to "message-preview"), _tD(message.content), 1), - if (isTrue(message.coupon)) { - _cE("view", _uM("key" to 0, "class" to "coupon-info", "onClick" to withModifiers(fun(){ - claimCoupon(message) - }, _uA( - "stop" - ))), _uA( - _cE("text", _uM("class" to "coupon-text"), _tD(message.coupon) + "优惠券", 1), - _cE("text", _uM("class" to "coupon-expiry"), "有效期至 " + _tD(message.expiry), 1), - _cE("text", _uM("class" to "coupon-action"), _tD(if (message.claimed) { - "已领取" - } else { - "点击领取" - }), 1) - ), 8, _uA( - "onClick" - )) - } else { - _cC("v-if", true) - } - )) - ), 10, _uA( - "onClick" - )) - }), 128) - )) - } else { - _cC("v-if", true) - } - , - if (isTrue(!loading.value && currentMessages.value.length === 0 && activeTab.value !== "service")) { - _cE("view", _uM("key" to 4, "class" to "empty-messages"), _uA( - _cE("text", _uM("class" to "empty-icon"), "💬"), - _cE("text", _uM("class" to "empty-title"), "暂无消息"), - _cE("text", _uM("class" to "empty-desc"), "暂时没有新消息") - )) - } else { - _cC("v-if", true) - } - , - _cE("view", _uM("class" to "safe-area")) - ), 40, _uA( - "refresher-triggered", - "scroll-top" - )) - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("messages-page" to _pS(_uM("width" to "100%", "height" to "100%", "backgroundColor" to "#f8fafc", "display" to "flex", "flexDirection" to "column", "overflow" to "hidden")), "smart-navbar" to _pS(_uM("position" to "fixed", "top" to 0, "left" to 0, "right" to 0, "backgroundImage" to "linear-gradient(135deg, #4CAF50 0%, #2E7D32 100%)", "backgroundColor" to "rgba(0,0,0,0)", "zIndex" to 1000, "boxShadow" to "0 2px 12px rgba(76, 175, 80, 0.15)", "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "center", "flexShrink" to 0)), "nav-container" to _pS(_uM("paddingTop" to 0, "paddingRight" to 16, "paddingBottom" to 0, "paddingLeft" to 16, "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "space-between", "width" to "100%", "maxWidth" to 1400, "marginTop" to 0, "marginRight" to "auto", "marginBottom" to 0, "marginLeft" to "auto", "height" to 44)), "nav-title" to _pS(_uM("fontSize" to 18, "fontWeight" to "bold", "color" to "#FFFFFF", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "nav-actions" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center")), "action-btn" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center", "backgroundImage" to "none", "backgroundColor" to "rgba(255,255,255,0.2)", "paddingTop" to 4, "paddingRight" to 12, "paddingBottom" to 4, "paddingLeft" to 12, "borderTopLeftRadius" to 20, "borderTopRightRadius" to 20, "borderBottomRightRadius" to 20, "borderBottomLeftRadius" to 20, "transitionProperty" to "all", "transitionDuration" to "0.2s", "transitionTimingFunction" to "ease", "backgroundImage:hover" to "none", "backgroundColor:hover" to "rgba(255,255,255,0.3)")), "action-icon" to _pS(_uM("fontSize" to 14, "marginRight" to 4)), "action-text" to _pS(_uM("fontSize" to 12, "color" to "#FFFFFF", "fontWeight" to "bold")), "navbar-placeholder" to _pS(_uM("width" to "100%", "flexShrink" to 0)), "tabs-container" to _pS(_uM("backgroundImage" to "none", "backgroundColor" to "#FFFFFF", "paddingTop" to 0, "paddingRight" to 10, "paddingBottom" to 0, "paddingLeft" to 10, "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#e0e0e0", "boxShadow" to "0 2px 4px rgba(0, 0, 0, 0.05)", "zIndex" to 900, "height" to 42, "flexShrink" to 0)), "message-tabs" to _pS(_uM("display" to "flex", "flexDirection" to "row", "height" to "100%", "maxWidth" to 1400, "marginTop" to 0, "marginRight" to "auto", "marginBottom" to 0, "marginLeft" to "auto", "justifyContent" to "space-between", "display::-webkit-scrollbar" to "none")), "tab-item" to _uM("" to _uM("paddingTop" to 0, "paddingRight" to 4, "paddingBottom" to 0, "paddingLeft" to 4, "marginTop" to 0, "marginRight" to 2, "marginBottom" to 0, "marginLeft" to 2, "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "center", "position" to "relative", "height" to "100%", "borderBottomWidth" to 3, "borderBottomStyle" to "solid", "borderBottomColor" to "rgba(0,0,0,0)", "transitionProperty" to "all", "transitionDuration" to "0.3s", "transitionTimingFunction" to "ease", "whiteSpace" to "nowrap", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "minWidth" to 0), ".active" to _uM("color" to "#4CAF50", "borderBottomColor" to "#4CAF50", "fontWeight" to "bold")), "tab-name" to _pS(_uM("fontSize" to 14, "overflow" to "hidden", "textOverflow" to "ellipsis")), "tab-badge" to _pS(_uM("backgroundColor" to "#FF5722", "color" to "#FFFFFF", "fontSize" to 10, "paddingTop" to 1, "paddingRight" to 5, "paddingBottom" to 1, "paddingLeft" to 5, "borderTopLeftRadius" to 10, "borderTopRightRadius" to 10, "borderBottomRightRadius" to 10, "borderBottomLeftRadius" to 10, "minWidth" to 16, "textAlign" to "center", "fontWeight" to "bold", "marginLeft" to 4, "display" to "flex", "alignItems" to "center", "justifyContent" to "center", "height" to 16)), "messages-content" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "height" to 0, "width" to "100%", "maxWidth" to 1400, "marginTop" to 0, "marginRight" to "auto", "marginBottom" to 0, "marginLeft" to "auto", "paddingBottom" to 20)), "customer-service-info" to _pS(_uM("backgroundImage" to "none", "backgroundColor" to "#FFFFFF", "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "paddingTop" to 20, "paddingRight" to 20, "paddingBottom" to 20, "paddingLeft" to 20, "marginTop" to 15, "marginRight" to 15, "marginBottom" to 15, "marginLeft" to 15, "boxShadow" to "0 2px 8px rgba(0, 0, 0, 0.08)")), "service-header" to _pS(_uM("display" to "flex", "justifyContent" to "space-between", "alignItems" to "center", "marginBottom" to 10)), "service-title" to _pS(_uM("fontSize" to 18, "fontWeight" to "bold", "color" to "#333333")), "service-status" to _uM("" to _uM("fontSize" to 12, "paddingTop" to 4, "paddingRight" to 10, "paddingBottom" to 4, "paddingLeft" to 10, "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "fontWeight" to "bold"), ".online" to _uM("backgroundImage" to "none", "backgroundColor" to "#E8F5E9", "color" to "#4CAF50")), "service-desc" to _pS(_uM("fontSize" to 14, "color" to "#666666", "lineHeight" to 1.5, "marginBottom" to 20)), "service-categories" to _pS(_uM("display" to "flex", "flexDirection" to "row", "flexWrap" to "wrap", "paddingTop" to 6, "paddingRight" to 6, "paddingBottom" to 6, "paddingLeft" to 6)), "category-item" to _pS(_uM("backgroundImage" to "none", "backgroundColor" to "#f8f9fa", "borderTopLeftRadius" to 10, "borderTopRightRadius" to 10, "borderBottomRightRadius" to 10, "borderBottomLeftRadius" to 10, "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "display" to "flex", "flexDirection" to "column", "alignItems" to "center", "transitionProperty" to "all", "transitionDuration" to "0.3s", "transitionTimingFunction" to "ease", "marginTop" to "1%", "marginRight" to "1%", "marginBottom" to "1%", "marginLeft" to "1%", "width" to "48%", "backgroundImage:hover" to "none", "backgroundColor:hover" to "#e8f5e9", "transform:hover" to "translateY(-2px)", "boxShadow:hover" to "0 4px 8px rgba(76, 175, 80, 0.2)")), "category-icon" to _pS(_uM("fontSize" to 24, "marginBottom" to 8)), "category-name" to _pS(_uM("fontSize" to 13, "color" to "#333333", "fontWeight" to "bold")), "message-section" to _pS(_uM("paddingTop" to 10, "paddingRight" to 10, "paddingBottom" to 10, "paddingLeft" to 10)), "message-item" to _uM("" to _uM("backgroundColor" to "#FFFFFF", "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "marginBottom" to 10, "display" to "flex", "alignItems" to "flex-start", "boxShadow" to "0 2px 8px rgba(0, 0, 0, 0.08)", "transitionProperty" to "all", "transitionDuration" to "0.3s", "transitionTimingFunction" to "ease", "transform:hover" to "translateY(-2px)", "boxShadow:hover" to "0 4px 12px rgba(0, 0, 0, 0.12)"), ".unread" to _uM("backgroundColor" to "#f0f9f0", "borderLeftWidth" to 3, "borderLeftStyle" to "solid", "borderLeftColor" to "#4CAF50"), ".active" to _uM("borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#4CAF50", "borderRightColor" to "#4CAF50", "borderBottomColor" to "#4CAF50", "borderLeftColor" to "#4CAF50")), "message-icon-wrapper" to _pS(_uM("width" to 50, "height" to 50, "borderTopLeftRadius" to 25, "borderTopRightRadius" to 25, "borderBottomRightRadius" to 25, "borderBottomLeftRadius" to 25, "backgroundColor" to "#f5f5f5", "display" to "flex", "alignItems" to "center", "justifyContent" to "center", "marginRight" to 15, "flexShrink" to 0, "position" to "relative")), "message-icon-default" to _pS(_uM("width" to "100%", "height" to "100%", "borderTopLeftRadius" to 25, "borderTopRightRadius" to 25, "borderBottomRightRadius" to 25, "borderBottomLeftRadius" to 25, "display" to "flex", "alignItems" to "center", "justifyContent" to "center")), "message-icon-text" to _pS(_uM("fontSize" to 24, "color" to "#FFFFFF")), "message-avatar" to _pS(_uM("width" to "100%", "height" to "100%", "borderTopLeftRadius" to 25, "borderTopRightRadius" to 25, "borderBottomRightRadius" to 25, "borderBottomLeftRadius" to 25)), "online-dot" to _pS(_uM("position" to "absolute", "bottom" to 2, "right" to 2, "width" to 12, "height" to 12, "backgroundColor" to "#4CAF50", "borderTopLeftRadius" to 6, "borderTopRightRadius" to 6, "borderBottomRightRadius" to 6, "borderBottomLeftRadius" to 6, "borderTopWidth" to 2, "borderRightWidth" to 2, "borderBottomWidth" to 2, "borderLeftWidth" to 2, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#FFFFFF", "borderRightColor" to "#FFFFFF", "borderBottomColor" to "#FFFFFF", "borderLeftColor" to "#FFFFFF")), "message-content" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "minWidth" to 0)), "message-header" to _pS(_uM("display" to "flex", "justifyContent" to "space-between", "alignItems" to "flex-start", "marginBottom" to 8)), "message-title-wrapper" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "minWidth" to 0, "marginRight" to 10)), "message-title" to _pS(_uM("fontSize" to 16, "color" to "#333333", "fontWeight" to "bold", "marginBottom" to 4, "overflow" to "hidden", "textOverflow" to "ellipsis", "whiteSpace" to "nowrap")), "message-role" to _pS(_uM("fontSize" to 12, "color" to "#4CAF50", "backgroundImage" to "none", "backgroundColor" to "#E8F5E9", "paddingTop" to 2, "paddingRight" to 8, "paddingBottom" to 2, "paddingLeft" to 8, "borderTopLeftRadius" to 10, "borderTopRightRadius" to 10, "borderBottomRightRadius" to 10, "borderBottomLeftRadius" to 10)), "message-header-right" to _pS(_uM("display" to "flex", "flexDirection" to "column", "alignItems" to "flex-end")), "message-time" to _pS(_uM("fontSize" to 12, "color" to "#999999", "whiteSpace" to "nowrap", "marginBottom" to 4)), "message-unread-count" to _pS(_uM("fontSize" to 11, "color" to "#FFFFFF", "backgroundImage" to "none", "backgroundColor" to "#FF5722", "paddingTop" to 2, "paddingRight" to 6, "paddingBottom" to 2, "paddingLeft" to 6, "borderTopLeftRadius" to 10, "borderTopRightRadius" to 10, "borderBottomRightRadius" to 10, "borderBottomLeftRadius" to 10, "minWidth" to 18, "textAlign" to "center", "fontWeight" to "bold")), "message-preview-wrapper" to _pS(_uM("marginBottom" to 8)), "message-preview" to _pS(_uM("fontSize" to 14, "color" to "#666666", "lineHeight" to 1.4, "marginBottom" to 4, "lines" to 2, "overflow" to "hidden", "textOverflow" to "ellipsis")), "last-message" to _pS(_uM("fontSize" to 13, "color" to "#999999")), "message-tags" to _pS(_uM("display" to "flex", "flexWrap" to "wrap")), "message-tag" to _pS(_uM("fontSize" to 11, "color" to "#666666", "backgroundImage" to "none", "backgroundColor" to "#f0f0f0", "paddingTop" to 3, "paddingRight" to 8, "paddingBottom" to 3, "paddingLeft" to 8, "borderTopLeftRadius" to 10, "borderTopRightRadius" to 10, "borderBottomRightRadius" to 10, "borderBottomLeftRadius" to 10, "marginRight" to 6, "marginBottom" to 4)), "order-info" to _pS(_uM("fontSize" to 12, "color" to "#4CAF50", "backgroundColor" to "#E8F5E9", "paddingTop" to 4, "paddingRight" to 10, "paddingBottom" to 4, "paddingLeft" to 10, "borderTopLeftRadius" to 4, "borderTopRightRadius" to 4, "borderBottomRightRadius" to 4, "borderBottomLeftRadius" to 4, "marginTop" to 8, "alignSelf" to "flex-start")), "order-status" to _uM("" to _uM("fontSize" to 12, "paddingTop" to 4, "paddingRight" to 10, "paddingBottom" to 4, "paddingLeft" to 10, "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "marginTop" to 8, "marginLeft" to 8, "alignSelf" to "flex-start"), ".shipping" to _uM("backgroundImage" to "none", "backgroundColor" to "#E3F2FD", "color" to "#2196F3"), ".processing" to _uM("backgroundImage" to "none", "backgroundColor" to "#FFF3E0", "color" to "#FF9800"), ".completed" to _uM("backgroundImage" to "none", "backgroundColor" to "#E8F5E9", "color" to "#4CAF50")), "important-tag" to _pS(_uM("backgroundColor" to "#FF5722", "color" to "#FFFFFF", "fontSize" to 11, "paddingTop" to 3, "paddingRight" to 8, "paddingBottom" to 3, "paddingLeft" to 8, "borderTopLeftRadius" to 10, "borderTopRightRadius" to 10, "borderBottomRightRadius" to 10, "borderBottomLeftRadius" to 10, "marginTop" to 8, "alignSelf" to "flex-start")), "coupon-info" to _pS(_uM("backgroundImage" to "linear-gradient(135deg, #FF9800, #FF5722)", "backgroundColor" to "rgba(0,0,0,0)", "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "paddingTop" to 10, "paddingRight" to 10, "paddingBottom" to 10, "paddingLeft" to 10, "marginTop" to 8, "color" to "#FFFFFF")), "coupon-text" to _pS(_uM("fontSize" to 14, "fontWeight" to "bold", "marginBottom" to 4)), "coupon-expiry" to _pS(_uM("fontSize" to 12, "opacity" to 0.9)), "coupon-action" to _pS(_uM("fontSize" to 12, "color" to "#ffffff", "backgroundColor" to "rgba(255,255,255,0.2)", "paddingTop" to 2, "paddingRight" to 8, "paddingBottom" to 2, "paddingLeft" to 8, "borderTopLeftRadius" to 10, "borderTopRightRadius" to 10, "borderBottomRightRadius" to 10, "borderBottomLeftRadius" to 10, "marginTop" to 4, "alignSelf" to "flex-start")), "service-tips" to _pS(_uM("backgroundImage" to "none", "backgroundColor" to "#FFF3E0", "borderTopLeftRadius" to 10, "borderTopRightRadius" to 10, "borderBottomRightRadius" to 10, "borderBottomLeftRadius" to 10, "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "marginTop" to 15, "marginRight" to 15, "marginBottom" to 15, "marginLeft" to 15, "display" to "flex", "alignItems" to "flex-start")), "tip-icon" to _pS(_uM("fontSize" to 18, "color" to "#FF9800", "flexShrink" to 0, "marginTop" to 2, "marginRight" to 10)), "tip-text" to _pS(_uM("fontSize" to 13, "color" to "#666666", "lineHeight" to 1.5)), "empty-messages" to _pS(_uM("display" to "flex", "flexDirection" to "column", "alignItems" to "center", "justifyContent" to "center", "paddingTop" to 80, "paddingRight" to 20, "paddingBottom" to 80, "paddingLeft" to 20, "textAlign" to "center")), "empty-icon" to _pS(_uM("fontSize" to 80, "color" to "#dddddd", "marginBottom" to 20)), "empty-title" to _pS(_uM("fontSize" to 18, "color" to "#666666", "marginBottom" to 10)), "empty-desc" to _pS(_uM("fontSize" to 14, "color" to "#999999")), "floating-action" to _pS(_uM("position" to "fixed", "bottom" to 20, "right" to 20, "zIndex" to 100)), "action-button" to _pS(_uM("backgroundImage" to "linear-gradient(135deg, #4CAF50, #2E7D32)", "backgroundColor" to "rgba(0,0,0,0)", "color" to "#FFFFFF", "borderTopWidth" to "medium", "borderRightWidth" to "medium", "borderBottomWidth" to "medium", "borderLeftWidth" to "medium", "borderTopStyle" to "none", "borderRightStyle" to "none", "borderBottomStyle" to "none", "borderLeftStyle" to "none", "borderTopColor" to "#000000", "borderRightColor" to "#000000", "borderBottomColor" to "#000000", "borderLeftColor" to "#000000", "borderTopLeftRadius" to 25, "borderTopRightRadius" to 25, "borderBottomRightRadius" to 25, "borderBottomLeftRadius" to 25, "paddingTop" to 12, "paddingRight" to 20, "paddingBottom" to 12, "paddingLeft" to 20, "display" to "flex", "alignItems" to "center", "boxShadow" to "0 4px 12px rgba(76, 175, 80, 0.3)", "fontWeight" to "bold")), "button-icon" to _pS(_uM("fontSize" to 18, "marginRight" to 8)), "button-text" to _pS(_uM("fontSize" to 14, "fontWeight" to "bold")), "safe-area" to _pS(_uM("height" to 80)), "@TRANSITION" to _uM("action-btn" to _uM("property" to "all", "duration" to "0.2s", "timingFunction" to "ease"), "tab-item" to _uM("property" to "all", "duration" to "0.3s", "timingFunction" to "ease"), "category-item" to _uM("property" to "all", "duration" to "0.3s", "timingFunction" to "ease"), "message-item" to _uM("property" to "all", "duration" to "0.3s", "timingFunction" to "ease"))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/mall/consumer/order-detail.kt b/unpackage/cache/.app-android/src/pages/mall/consumer/order-detail.kt deleted file mode 100644 index 59add978..00000000 --- a/unpackage/cache/.app-android/src/pages/mall/consumer/order-detail.kt +++ /dev/null @@ -1,581 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.hideLoading as uni_hideLoading -import io.dcloud.uniapp.extapi.makePhoneCall as uni_makePhoneCall -import io.dcloud.uniapp.extapi.navigateTo as uni_navigateTo -import io.dcloud.uniapp.framework.onShow as onShow__1 -import io.dcloud.uniapp.framework.onLoad as onLoad__1 -import io.dcloud.uniapp.extapi.setClipboardData as uni_setClipboardData -import io.dcloud.uniapp.extapi.showActionSheet as uni_showActionSheet -import io.dcloud.uniapp.extapi.showLoading as uni_showLoading -import io.dcloud.uniapp.extapi.showModal as uni_showModal -import io.dcloud.uniapp.extapi.showToast as uni_showToast -import io.dcloud.uniapp.extapi.switchTab as uni_switchTab -open class GenPagesMallConsumerOrderDetail : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesMallConsumerOrderDetail) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesMallConsumerOrderDetail - val _cache = __ins.renderCache - val orderId = ref("") - val order = ref(null) - val orderItems = ref(_uA()) - val shopName = ref("店铺名称") - val deliveryAddress = ref(null) - val deliveryInfo = ref(null) - val getStatusText = fun(): String { - val status = order.value?.order_status ?: 0 - if (status == 1) { - return "待付款" - } - if (status == 2) { - return "待发货" - } - if (status == 3) { - return "待收货" - } - if (status == 4) { - return "已完成" - } - if (status == 5) { - return "已取消" - } - if (status == 6) { - return "退款中" - } - if (status == 7) { - return "已退款" - } - return "未知状态" - } - val getStatusDesc = fun(): String { - val status = order.value?.order_status ?: 0 - if (status == 1) { - return "请尽快完成支付" - } - if (status == 2) { - return "商家正在打包商品" - } - if (status == 3) { - return "商品正在赶往您的地址" - } - if (status == 4) { - return "订单已完成,感谢支持" - } - if (status == 5) { - return "订单已取消" - } - if (status == 6) { - return "售后处理中" - } - if (status == 7) { - return "钱款已退回" - } - return "" - } - val getStatusIcon = fun(): String { - val status = order.value?.order_status ?: 0 - if (status === 1) { - return "💳" - } - if (status === 2) { - return "📦" - } - if (status === 3) { - return "🚚" - } - if (status === 4) { - return "✅" - } - return "📝" - } - val getStatusClass = fun(): String { - val status = order.value?.order_status ?: 0 - return "status-" + status - } - val getFullAddress = fun(addr: Any): String { - if (addr == null) { - return "" - } - if (UTSAndroid.`typeof`(addr) === "string") { - return addr as String - } - val addrObj = addr as Record - if (addrObj["address"] != null) { - return addrObj["address"] as String - } - return ((addrObj["province"] as String) ?: "") + ((addrObj["city"] as String) ?: "") + ((addrObj["district"] as String) ?: "") + ((addrObj["detail"] as String) ?: (addrObj["address_detail"] as String) ?: "") - } - val getSpecText = fun(specs: Any): String { - if (specs == null) { - return "" - } - if (UTSAndroid.`typeof`(specs) === "string") { - return specs as String - } - return JSON.stringify(specs) - } - val formatTime = fun(iso: String): String { - if (iso == "") { - return "" - } - val d = Date(iso) - return "" + d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate() + " " + d.getHours() + ":" + d.getMinutes() - } - val getPaymentMethodText = fun(method: Any): String { - return "在线支付" - } - val copyText = fun(text: String){ - if (text == "") { - return - } - uni_setClipboardData(SetClipboardDataOptions(data = text, success = fun(_){ - return uni_showToast(ShowToastOptions(title = "已复制")) - } - )) - } - val loadShopInfo = fun(merchantId: String): UTSPromise { - return wrapUTSPromise(suspend { - val result = await(supaInstance.from("ml_shops").select("shop_name").eq("merchant_id", merchantId).single()) - val resultObj = result as Record - val resultData = resultObj["data"] - if (resultData != null) { - val dataObj = resultData as Record - shopName.value = dataObj["shop_name"] as String - } - }) - } - val loadOrderDetail = fun(): UTSPromise { - return wrapUTSPromise(suspend { - uni_showLoading(ShowLoadingOptions(title = "加载中")) - try { - val data = await(supabaseService.getOrderDetail(orderId.value)) - if (data != null) { - val dataObj = data as Record - order.value = data as OrderType__1 - val items = dataObj["ml_order_items"] - orderItems.value = if (items != null) { - (items as UTSArray) - } else { - _uA() - } - deliveryAddress.value = dataObj["shipping_address"] as AddressType - val merchantId = dataObj["merchant_id"] as String - if (merchantId != null && merchantId != "") { - loadShopInfo(merchantId) - } - } else { - uni_showToast(ShowToastOptions(title = "订单不存在", icon = "none")) - } - } - catch (e: Throwable) { - uni_showToast(ShowToastOptions(title = "加载失败", icon = "none")) - } - finally { - uni_hideLoading() - } - }) - } - val contactService = fun(){ - uni_showActionSheet(ShowActionSheetOptions(itemList = _uA( - "在线客服", - "拨打电话" - ), success = fun(res){ - if (res.tapIndex === 1) { - uni_makePhoneCall(MakePhoneCallOptions(phoneNumber = "400-123-4567")) - } else { - uni_showToast(ShowToastOptions(title = "连接到了商家客服")) - } - } - )) - } - val payOrder = fun(){ - val totalAmount = order.value?.total_amount ?: 0 - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/payment?orderId=" + orderId.value + "&amount=" + totalAmount)) - } - val doCancelOrder = fun(): UTSPromise { - return wrapUTSPromise(suspend { - val result = await(supaInstance.from("ml_orders").update(object : UTSJSONObject() { - var order_status: Number = 5 - }).eq("id", orderId.value)) - val resultObj = result as Record - val resultError = resultObj["error"] - if (resultError == null) { - if (order.value != null) { - order.value!!.order_status = 5 - } - uni_showToast(ShowToastOptions(title = "订单已取消")) - } - }) - } - val cancelOrder = fun(){ - uni_showModal(ShowModalOptions(title = "提示", content = "确定要取消订单吗?", success = fun(res){ - if (res.confirm) { - doCancelOrder() - } - } - )) - } - val remindDelivery = fun(){ - uni_showToast(ShowToastOptions(title = "已提醒商家尽快发货")) - } - val viewLogistics = fun(){ - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/logistics?orderId=" + orderId.value)) - } - val goToReview = fun(){ - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/review?orderId=" + orderId.value)) - } - val doConfirmReceive = fun(): UTSPromise { - return wrapUTSPromise(suspend { - val result = await(supabaseService.confirmReceipt(orderId.value)) - if (result.success) { - if (order.value != null) { - order.value!!.order_status = 4 - } - uni_showToast(ShowToastOptions(title = "收货成功")) - setTimeout(fun(){ - return goToReview() - }, 1500) - } else { - uni_showToast(ShowToastOptions(title = result.error ?: "失败", icon = "none")) - } - }) - } - val confirmReceive = fun(){ - uni_showModal(ShowModalOptions(title = "确认收货", content = "确保您已收到货物", success = fun(res){ - if (res.confirm) { - doConfirmReceive() - } - } - )) - } - val rePurchase = fun(): UTSPromise { - return wrapUTSPromise(suspend { - uni_showLoading(ShowLoadingOptions(title = "处理中")) - val orderData = order.value as Any - val success = await(supabaseService.rePurchase(orderData)) - uni_hideLoading() - if (success) { - uni_showToast(ShowToastOptions(title = "已加入购物车")) - setTimeout(fun(){ - uni_switchTab(SwitchTabOptions(url = "/pages/mall/consumer/cart")) - }, 1000) - } else { - uni_showToast(ShowToastOptions(title = "操作失败", icon = "none")) - } - }) - } - val doApplyRefund = fun(reason: String): UTSPromise { - return wrapUTSPromise(suspend { - val success = await(supabaseService.applyRefund(orderId.value, reason)) - if (success) { - if (order.value != null) { - order.value!!.order_status = 6 - } - uni_showToast(ShowToastOptions(title = "申请已提交")) - } else { - uni_showToast(ShowToastOptions(title = "提交失败", icon = "none")) - } - }) - } - val applyRefund = fun(){ - uni_showModal(ShowModalOptions(title = "申请退款", editable = true, placeholderText = "请输入退款原因", success = fun(res){ - if (res.confirm) { - val reason = res.content ?: "用户主动申请" - doApplyRefund(reason) - } - } - )) - } - val applyAfterSales = fun(){ - applyRefund() - } - val goToShop = fun(){ - uni_showToast(ShowToastOptions(title = "进入店铺: " + shopName.value)) - } - val goToProduct = fun(pid: String){ - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/product-detail?id=" + pid)) - } - onLoad__1(fun(options){ - val id = options["id"] - val orderIdParam = options["orderId"] - if (id != null && id != "") { - orderId.value = id as String - loadOrderDetail() - } else if (orderIdParam != null && orderIdParam != "") { - orderId.value = orderIdParam as String - loadOrderDetail() - } - } - ) - return fun(): Any? { - return _cE("view", _uM("class" to "order-detail-page"), _uA( - _cE("scroll-view", _uM("scroll-y" to "true", "class" to "scroll-content"), _uA( - _cE("view", _uM("class" to _nC(_uA( - "order-status", - getStatusClass() - ))), _uA( - _cE("view", _uM("class" to "status-icon"), _uA( - _cE("text", _uM("class" to "status-emoji"), _tD(getStatusIcon()), 1) - )), - _cE("view", _uM("class" to "status-info"), _uA( - _cE("text", _uM("class" to "status-text"), _tD(getStatusText()), 1), - _cE("text", _uM("class" to "status-desc"), _tD(getStatusDesc()), 1) - )) - ), 2), - if (isTrue(order.value != null && (order.value?.order_status ?: 0) >= 2)) { - _cE("view", _uM("key" to 0, "class" to "delivery-info card"), _uA( - _cE("view", _uM("class" to "delivery-header"), _uA( - _cE("text", _uM("class" to "section-title"), "配送信息") - )), - _cE("view", _uM("class" to "delivery-address"), _uA( - _cE("view", _uM("class" to "address-icon"), "📍"), - _cE("view", _uM("class" to "address-content"), _uA( - _cE("view", _uM("class" to "address-user"), _uA( - _cE("text", _uM("class" to "recipient"), _tD(deliveryAddress.value?.name ?: ""), 1), - _cE("text", _uM("class" to "phone"), _tD(deliveryAddress.value?.phone ?: ""), 1) - )), - _cE("text", _uM("class" to "address-detail"), _tD(getFullAddress(deliveryAddress.value as Any)), 1) - )) - )), - if (isTrue(deliveryInfo.value != null && deliveryInfo.value?.tracking_no != "")) { - _cE("view", _uM("key" to 0, "class" to "courier-info"), _uA( - _cE("text", _uM("class" to "courier-label"), "物流单号:"), - _cE("text", _uM("class" to "courier-value"), _tD(deliveryInfo.value?.tracking_no ?: ""), 1), - _cE("text", _uM("class" to "copy-btn", "onClick" to fun(){ - copyText(deliveryInfo.value?.tracking_no ?: "") - }), "复制", 8, _uA( - "onClick" - )) - )) - } else { - _cC("v-if", true) - } - )) - } else { - _cC("v-if", true) - } - , - _cE("view", _uM("class" to "order-products card"), _uA( - _cE("view", _uM("class" to "shop-header", "onClick" to goToShop), _uA( - _cE("text", _uM("class" to "shop-icon"), "🏪"), - _cE("text", _uM("class" to "shop-name"), _tD(shopName.value), 1), - _cE("text", _uM("class" to "arrow-right"), ">") - )), - _cE(Fragment, null, RenderHelpers.renderList(orderItems.value, fun(item, __key, __index, _cached): Any { - return _cE("view", _uM("key" to item.id, "class" to "product-item", "onClick" to fun(){ - goToProduct(item.product_id) - } - ), _uA( - _cE("image", _uM("src" to if (item.image_url != null && item.image_url != "") { - item.image_url - } else { - "/static/default-product.png" - } - , "class" to "product-image", "mode" to "aspectFill"), null, 8, _uA( - "src" - )), - _cE("view", _uM("class" to "product-info"), _uA( - _cE("text", _uM("class" to "product-name"), _tD(item.product_name), 1), - if (isTrue(item.specifications)) { - _cE("text", _uM("key" to 0, "class" to "product-spec"), _tD(getSpecText(item.specifications)), 1) - } else { - _cC("v-if", true) - } - , - _cE("view", _uM("class" to "price-quantity"), _uA( - _cE("text", _uM("class" to "product-price"), "¥" + _tD(item.price), 1), - _cE("text", _uM("class" to "product-quantity"), "×" + _tD(item.quantity), 1) - )) - )) - ), 8, _uA( - "onClick" - )) - } - ), 128) - )), - if (order.value != null) { - _cE("view", _uM("key" to 1, "class" to "order-info card"), _uA( - _cE("view", _uM("class" to "info-row"), _uA( - _cE("text", _uM("class" to "info-label"), "订单编号"), - _cE("text", _uM("class" to "info-value copyable", "onClick" to fun(){ - copyText(order.value?.order_no ?: "") - }), _uA( - _tD(order.value?.order_no ?: "") + " ", - _cE("text", _uM("class" to "copy-icon"), "📄") - ), 8, _uA( - "onClick" - )) - )), - _cE("view", _uM("class" to "info-row"), _uA( - _cE("text", _uM("class" to "info-label"), "下单时间"), - _cE("text", _uM("class" to "info-value"), _tD(formatTime(order.value?.created_at ?: "")), 1) - )), - if (isTrue(order.value?.payment_method != null && order.value?.payment_method != "")) { - _cE("view", _uM("key" to 0, "class" to "info-row"), _uA( - _cE("text", _uM("class" to "info-label"), "支付方式"), - _cE("text", _uM("class" to "info-value"), _tD(getPaymentMethodText(order.value?.payment_method as Any)), 1) - )) - } else { - _cC("v-if", true) - }, - if (isTrue(order.value?.paid_at != null && order.value?.paid_at != "")) { - _cE("view", _uM("key" to 1, "class" to "info-row"), _uA( - _cE("text", _uM("class" to "info-label"), "支付时间"), - _cE("text", _uM("class" to "info-value"), _tD(formatTime(order.value?.paid_at ?: "")), 1) - )) - } else { - _cC("v-if", true) - }, - if (isTrue(order.value?.shipped_at != null && order.value?.shipped_at != "")) { - _cE("view", _uM("key" to 2, "class" to "info-row"), _uA( - _cE("text", _uM("class" to "info-label"), "发货时间"), - _cE("text", _uM("class" to "info-value"), _tD(formatTime(order.value?.shipped_at ?: "")), 1) - )) - } else { - _cC("v-if", true) - }, - if (isTrue(order.value?.completed_at != null && order.value?.completed_at != "")) { - _cE("view", _uM("key" to 3, "class" to "info-row"), _uA( - _cE("text", _uM("class" to "info-label"), "完成时间"), - _cE("text", _uM("class" to "info-value"), _tD(formatTime(order.value?.completed_at ?: "")), 1) - )) - } else { - _cC("v-if", true) - } - )) - } else { - _cC("v-if", true) - } - , - if (order.value != null) { - _cE("view", _uM("key" to 2, "class" to "cost-detail card"), _uA( - _cE("view", _uM("class" to "cost-row"), _uA( - _cE("text", _uM("class" to "cost-label"), "商品总额"), - _cE("text", _uM("class" to "cost-value"), "¥" + _tD(order.value?.product_amount ?: 0), 1) - )), - _cE("view", _uM("class" to "cost-row"), _uA( - _cE("text", _uM("class" to "cost-label"), "运费"), - _cE("text", _uM("class" to "cost-value"), "+¥" + _tD(if (order.value?.shipping_fee != null) { - order.value?.shipping_fee - } else { - 0 - }), 1) - )), - if ((order.value?.discount_amount ?: 0) > 0) { - _cE("view", _uM("key" to 0, "class" to "cost-row"), _uA( - _cE("text", _uM("class" to "cost-label"), "优惠金额"), - _cE("text", _uM("class" to "cost-value"), "-¥" + _tD(order.value?.discount_amount ?: 0), 1) - )) - } else { - _cC("v-if", true) - }, - _cE("view", _uM("class" to "cost-row total"), _uA( - _cE("text", _uM("class" to "cost-label"), "实付金额"), - _cE("text", _uM("class" to "cost-value price"), "¥" + _tD(order.value?.total_amount ?: 0), 1) - )) - )) - } else { - _cC("v-if", true) - } - )), - if (order.value != null) { - _cE("view", _uM("key" to 0, "class" to "bottom-actions"), _uA( - _cE("view", _uM("class" to "action-left"), _uA( - _cE("view", _uM("class" to "service-btn", "onClick" to contactService), _uA( - _cE("text", _uM("class" to "service-icon"), "🎧"), - _cE("text", null, "客服") - )) - )), - _cE("view", _uM("class" to "action-right"), _uA( - if (order.value?.order_status === 1) { - _cE("button", _uM("key" to 0, "class" to "btn primary", "onClick" to payOrder), "立即支付") - } else { - _cC("v-if", true) - }, - if (order.value?.order_status === 1) { - _cE("button", _uM("key" to 1, "class" to "btn", "onClick" to cancelOrder), "取消订单") - } else { - _cC("v-if", true) - }, - if (order.value?.order_status === 2) { - _cE("button", _uM("key" to 2, "class" to "btn", "onClick" to remindDelivery), "提醒发货") - } else { - _cC("v-if", true) - }, - if (order.value?.order_status === 2) { - _cE("button", _uM("key" to 3, "class" to "btn", "onClick" to applyRefund), "申请退款") - } else { - _cC("v-if", true) - }, - if (order.value?.order_status === 3) { - _cE("button", _uM("key" to 4, "class" to "btn primary", "onClick" to confirmReceive), "确认收货") - } else { - _cC("v-if", true) - }, - if (order.value?.order_status === 3) { - _cE("button", _uM("key" to 5, "class" to "btn", "onClick" to viewLogistics), "查看物流") - } else { - _cC("v-if", true) - }, - if (order.value?.order_status === 4) { - _cE("button", _uM("key" to 6, "class" to "btn primary", "onClick" to goToReview), "评价") - } else { - _cC("v-if", true) - }, - if (order.value?.order_status === 4) { - _cE("button", _uM("key" to 7, "class" to "btn", "onClick" to rePurchase), "再次购买") - } else { - _cC("v-if", true) - }, - if (order.value?.order_status === 4) { - _cE("button", _uM("key" to 8, "class" to "btn", "onClick" to applyAfterSales), "申请售后") - } else { - _cC("v-if", true) - }, - if (order.value?.order_status === 5) { - _cE("button", _uM("key" to 9, "class" to "btn", "onClick" to rePurchase), "重新购买") - } else { - _cC("v-if", true) - } - )) - )) - } else { - _cC("v-if", true) - } - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("order-detail-page" to _pS(_uM("display" to "flex", "flexDirection" to "column", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "backgroundColor" to "#f5f5f5")), "scroll-content" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "paddingBottom" to 20)), "card" to _pS(_uM("backgroundColor" to "#ffffff", "marginTop" to 10, "marginRight" to 10, "marginBottom" to 10, "marginLeft" to 10, "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "borderTopLeftRadius" to 10, "borderTopRightRadius" to 10, "borderBottomRightRadius" to 10, "borderBottomLeftRadius" to 10)), "order-status" to _pS(_uM("backgroundImage" to "linear-gradient(to right, #ff9000, #ff5000)", "backgroundColor" to "rgba(0,0,0,0)", "paddingTop" to 20, "paddingRight" to 25, "paddingBottom" to 20, "paddingLeft" to 25, "color" to "#FFFFFF", "display" to "flex", "alignItems" to "center")), "status-emoji" to _pS(_uM("fontSize" to 32, "marginRight" to 15)), "status-text" to _pS(_uM("fontSize" to 18, "fontWeight" to "bold")), "status-desc" to _pS(_uM("fontSize" to 12, "opacity" to 0.9, "marginTop" to 5)), "section-title" to _pS(_uM("fontWeight" to "bold", "fontSize" to 16, "marginBottom" to 10)), "delivery-address" to _pS(_uM("display" to "flex", "alignItems" to "flex-start")), "address-icon" to _pS(_uM("fontSize" to 20, "marginRight" to 10, "color" to "#666666")), "address-user" to _pS(_uM("marginBottom" to 5, "fontWeight" to "bold", "fontSize" to 14)), "phone" to _pS(_uM("marginLeft" to 10, "color" to "#666666", "fontWeight" to "normal")), "address-detail" to _pS(_uM("fontSize" to 13, "color" to "#333333", "lineHeight" to 1.4)), "courier-info" to _pS(_uM("marginTop" to 10, "paddingTop" to 10, "borderTopWidth" to 1, "borderTopStyle" to "solid", "borderTopColor" to "#eeeeee", "fontSize" to 13, "display" to "flex", "alignItems" to "center")), "copy-btn" to _pS(_uM("marginLeft" to 10, "color" to "#ff5000", "fontSize" to 12, "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#ff5000", "borderRightColor" to "#ff5000", "borderBottomColor" to "#ff5000", "borderLeftColor" to "#ff5000", "paddingTop" to 1, "paddingRight" to 6, "paddingBottom" to 1, "paddingLeft" to 6, "borderTopLeftRadius" to 10, "borderTopRightRadius" to 10, "borderBottomRightRadius" to 10, "borderBottomLeftRadius" to 10)), "shop-header" to _pS(_uM("display" to "flex", "alignItems" to "center", "marginBottom" to 15, "paddingBottom" to 10, "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#f5f5f5")), "shop-icon" to _pS(_uM("marginRight" to 5)), "shop-name" to _pS(_uM("fontSize" to 14, "fontWeight" to "bold", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "arrow-right" to _pS(_uM("color" to "#999999")), "product-item" to _pS(_uM("display" to "flex", "marginBottom" to 15, "marginBottom:last-child" to 0)), "product-image" to _pS(_uM("width" to 80, "height" to 80, "borderTopLeftRadius" to 6, "borderTopRightRadius" to 6, "borderBottomRightRadius" to 6, "borderBottomLeftRadius" to 6, "marginRight" to 10, "backgroundColor" to "#f9f9f9")), "product-info" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "display" to "flex", "flexDirection" to "column", "justifyContent" to "space-between")), "product-name" to _pS(_uM("fontSize" to 14, "lineHeight" to 1.4, "color" to "#333333", "overflow" to "hidden", "textOverflow" to "ellipsis", "lines" to 2)), "product-spec" to _pS(_uM("fontSize" to 12, "color" to "#999999", "backgroundColor" to "#f5f5f5", "paddingTop" to 2, "paddingRight" to 5, "paddingBottom" to 2, "paddingLeft" to 5, "borderTopLeftRadius" to 4, "borderTopRightRadius" to 4, "borderBottomRightRadius" to 4, "borderBottomLeftRadius" to 4, "alignSelf" to "flex-start", "marginTop" to 5)), "price-quantity" to _pS(_uM("display" to "flex", "justifyContent" to "space-between", "alignItems" to "center", "marginTop" to 5)), "product-price" to _pS(_uM("fontSize" to 16, "fontWeight" to "bold", "color" to "#333333")), "product-quantity" to _pS(_uM("color" to "#999999", "fontSize" to 12)), "info-row" to _pS(_uM("display" to "flex", "justifyContent" to "space-between", "marginBottom" to 10, "fontSize" to 13)), "info-label" to _pS(_uM("color" to "#999999")), "info-value" to _pS(_uM("color" to "#333333")), "copy-icon" to _pS(_uM("fontSize" to 12)), "cost-row" to _uM("" to _uM("display" to "flex", "justifyContent" to "space-between", "marginBottom" to 8, "fontSize" to 13), ".total" to _uM("marginTop" to 15, "paddingTop" to 15, "borderTopWidth" to 1, "borderTopStyle" to "solid", "borderTopColor" to "#f5f5f5", "alignItems" to "center")), "cost-value" to _uM(".price" to _uM("color" to "#ff5000", "fontSize" to 18, "fontWeight" to "bold")), "bottom-actions" to _pS(_uM("backgroundColor" to "#ffffff", "paddingTop" to 10, "paddingRight" to 15, "paddingBottom" to 30, "paddingLeft" to 15, "display" to "flex", "justifyContent" to "space-between", "alignItems" to "center", "boxShadow" to "0 -2px 10px rgba(0,0,0,0.05)")), "action-left" to _pS(_uM("display" to "flex")), "service-btn" to _pS(_uM("display" to "flex", "flexDirection" to "column", "alignItems" to "center", "fontSize" to 10, "color" to "#666666", "backgroundColor" to "rgba(0,0,0,0)", "lineHeight" to 1.2)), "service-icon" to _pS(_uM("fontSize" to 18, "marginBottom" to 2)), "action-right" to _pS(_uM("display" to "flex")), "btn" to _uM(".action-right " to _uM("marginLeft" to 10), "" to _uM("marginTop" to 0, "marginRight" to 0, "marginBottom" to 0, "marginLeft" to 0, "paddingTop" to 0, "paddingRight" to 15, "paddingBottom" to 0, "paddingLeft" to 15, "height" to 32, "lineHeight" to "30px", "fontSize" to 13, "borderTopLeftRadius" to 16, "borderTopRightRadius" to 16, "borderBottomRightRadius" to 16, "borderBottomLeftRadius" to 16, "backgroundImage" to "none", "backgroundColor" to "#ffffff", "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#cccccc", "borderRightColor" to "#cccccc", "borderBottomColor" to "#cccccc", "borderLeftColor" to "#cccccc", "color" to "#666666"), ".primary" to _uM("borderTopColor" to "#ff5000", "borderRightColor" to "#ff5000", "borderBottomColor" to "#ff5000", "borderLeftColor" to "#ff5000", "color" to "#ff5000", "backgroundColor" to "#fff0ec"))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/mall/consumer/orders.kt b/unpackage/cache/.app-android/src/pages/mall/consumer/orders.kt deleted file mode 100644 index acd2df70..00000000 --- a/unpackage/cache/.app-android/src/pages/mall/consumer/orders.kt +++ /dev/null @@ -1,711 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.hideLoading as uni_hideLoading -import io.dcloud.uniapp.extapi.navigateTo as uni_navigateTo -import io.dcloud.uniapp.framework.onBackPress -import io.dcloud.uniapp.framework.onShow as onShow__1 -import io.dcloud.uniapp.framework.onLoad as onLoad__1 -import io.dcloud.uniapp.extapi.redirectTo as uni_redirectTo -import io.dcloud.uniapp.extapi.showLoading as uni_showLoading -import io.dcloud.uniapp.extapi.showModal as uni_showModal -import io.dcloud.uniapp.extapi.showToast as uni_showToast -import io.dcloud.uniapp.extapi.switchTab as uni_switchTab -open class GenPagesMallConsumerOrders : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesMallConsumerOrders) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesMallConsumerOrders - val _cache = __ins.renderCache - onBackPress(fun(options): Boolean { - if (options.from === "navigateBack") { - val pages = getCurrentPages() - if (pages.length > 1) { - val prevPage = pages[pages.length - 2] - if (prevPage.route.includes("login")) { - uni_redirectTo(RedirectToOptions(url = "/pages/mall/consumer/profile")) - return true - } - } - } - return false - } - ) - val orders = ref(_uA()) - val allOrdersList = ref(_uA()) - val loading = ref(false) - val loadingMore = ref(false) - val hasMore = ref(true) - val refreshing = ref(false) - val page = ref(1) - val activeTab = ref("all") - val searchKeyword = ref("") - val orderTabs = ref(_uA(OrderTabItem(id = "all", name = "全部", count = 0), OrderTabItem(id = "pending", name = "待付款", count = 0), OrderTabItem(id = "shipping", name = "待发货", count = 0), OrderTabItem(id = "delivering", name = "待收货", count = 0), OrderTabItem(id = "completed", name = "已完成", count = 0), OrderTabItem(id = "cancelled", name = "已取消", count = 0))) - val getStatusByTab = fun(tabId: String): Number { - if (tabId == "pending") { - return 1 - } - if (tabId == "shipping") { - return 2 - } - if (tabId == "delivering") { - return 3 - } - if (tabId == "completed") { - return 4 - } - if (tabId == "cancelled") { - return 5 - } - return 0 - } - val parseSpecText = fun(specs: Any): String { - if (specs == null) { - return "" - } - if (UTSAndroid.`typeof`(specs) === "string") { - return specs as String - } - try { - return JSON.stringify(specs) - } - catch (e: Throwable) { - return "" - } - } - val updateTabsCounts = fun(allOrders: UTSArray){ - val tabsData = orderTabs.value - val countAll = allOrders.length - val countPending = allOrders.filter(fun(o: Any): Boolean { - val obj = o as Record - return obj["status"] === 1 - } - ).length - val countShipping = allOrders.filter(fun(o: Any): Boolean { - val obj = o as Record - return obj["status"] === 2 - } - ).length - val countDelivering = allOrders.filter(fun(o: Any): Boolean { - val obj = o as Record - return obj["status"] === 3 - } - ).length - val countCompleted = allOrders.filter(fun(o: Any): Boolean { - val obj = o as Record - return obj["status"] === 4 - } - ).length - val countCancelled = allOrders.filter(fun(o: Any): Boolean { - val obj = o as Record - return obj["status"] === 5 - } - ).length - val tabsArr = tabsData as UTSArray - val tab0 = tabsArr[0] as Record - tab0["count"] = countAll - val tab1 = tabsArr[1] as Record - tab1["count"] = countPending - val tab2 = tabsArr[2] as Record - tab2["count"] = countShipping - val tab3 = tabsArr[3] as Record - tab3["count"] = countDelivering - val tab4 = tabsArr[4] as Record - tab4["count"] = countCompleted - val tab5 = tabsArr[5] as Record - tab5["count"] = countCancelled - } - val filterOrdersByTab = fun(){ - if (activeTab.value === "all") { - orders.value = allOrdersList.value - } else { - val targetStatus = getStatusByTab(activeTab.value) - orders.value = allOrdersList.value.filter(fun(o: OrderItem): Boolean { - return o.status === targetStatus - } - ) - } - } - val loadOrders = fun(): UTSPromise { - return wrapUTSPromise(suspend { - loading.value = true - try { - val fetchedOrders = await(supabaseService.getOrders(0)) - val mappedOrders: UTSArray = _uA() - run { - var i: Number = 0 - while(i < fetchedOrders.length){ - val order = fetchedOrders[i] - val orderObj = order as Record - val items = orderObj["ml_order_items"] as UTSArray - val productsList: UTSArray = _uA() - if (items != null) { - run { - var j: Number = 0 - while(j < items.length){ - val item = items[j] - val itemObj = item as Record - val specRaw = itemObj["specifications"] - val specText = if (specRaw != null) { - parseSpecText(specRaw) - } else { - "" - } - productsList.push(object : UTSJSONObject() { - var id = itemObj["product_id"] - var name = itemObj["product_name"] - var price = itemObj["price"] - var image = itemObj["image_url"] ?: "/static/default-product.png" - var spec = specText - var quantity = itemObj["quantity"] - }) - j++ - } - } - } - mappedOrders.push(object : UTSJSONObject() { - var id = orderObj["id"] - var order_no = orderObj["order_no"] - var status = orderObj["order_status"] - var create_time = orderObj["created_at"] - var product_amount = orderObj["product_amount"] ?: 0 - var shipping_fee = orderObj["shipping_fee"] ?: 0 - var total_amount = orderObj["total_amount"] ?: orderObj["paid_amount"] ?: 0 - var products = productsList - }) - i++ - } - } - mappedOrders.sort(fun(a: Any, b: Any): Number { - val aObj = a as Record - val bObj = b as Record - val timeA = Date(aObj["create_time"] as String).getTime() - val timeB = Date(bObj["create_time"] as String).getTime() - return timeB - timeA - } - ) - val typedOrders: UTSArray = _uA() - run { - var i: Number = 0 - while(i < mappedOrders.length){ - val mo = mappedOrders[i] as Record - typedOrders.push(OrderItem(id = mo["id"] as String, order_no = mo["order_no"] as String, status = mo["status"] as Number, create_time = mo["create_time"] as String, product_amount = mo["product_amount"] as Number, shipping_fee = mo["shipping_fee"] as Number, total_amount = mo["total_amount"] as Number, products = mo["products"] as UTSArray)) - i++ - } - } - allOrdersList.value = typedOrders - updateTabsCounts(mappedOrders) - filterOrdersByTab() - } - catch (err: Throwable) { - console.error("加载订单异常:", err, " at pages/mall/consumer/orders.uvue:391") - uni_showToast(ShowToastOptions(title = "加载订单失败", icon = "none")) - } - finally { - loading.value = false - } - }) - } - onLoad__1(fun(options){ - if (options["status"] != null) { - val status = options["status"] as String - if (_uA( - "all", - "pending", - "shipping", - "delivering", - "completed", - "cancelled" - ).includes(status)) { - activeTab.value = status - } - } - if (options["type"] != null) { - val type = options["type"] as String - if (type === "pending") { - activeTab.value = "pending" - } else if (type === "shipped") { - activeTab.value = "delivering" - } else if (type === "review") { - activeTab.value = "completed" - } else if (type === "refund") { - activeTab.value = "all" - } - } - } - ) - onShow__1(fun(){ - loadOrders() - } - ) - fun gen_getCurrentOrderData_fn(): UTSArray { - return allOrdersList.value - } - val getCurrentOrderData = ::gen_getCurrentOrderData_fn - val performSearch = fun(){ - val keyword = searchKeyword.value.trim().toLowerCase() - if (keyword == "") { - loadOrders() - return - } - val allOrders = getCurrentOrderData() - val filtered = allOrders.filter(fun(order: Any): Boolean { - val orderObj = order as Record - val orderNo = orderObj["order_no"] as String - if (orderNo != null && orderNo.toLowerCase().includes(keyword)) { - return true - } - val products = orderObj["products"] - if (products != null && UTSArray.isArray(products)) { - return (products as UTSArray).some(fun(product: Any): Boolean { - val productObj = product as Record - val name = productObj["name"] as String - return name != null && name.toLowerCase().includes(keyword) - } - ) - } - return false - } - ) - orders.value = filtered - } - val onSearchInput = fun(e: Any){ - val eObj = e as Record - val detail = eObj["detail"] as Record - searchKeyword.value = detail["value"] as String - performSearch() - } - val onSearchConfirm = fun(){ - performSearch() - } - val clearSearch = fun(){ - searchKeyword.value = "" - performSearch() - } - val switchTab = fun(tabId: String){ - activeTab.value = tabId - filterOrdersByTab() - } - val getStatusText = fun(status: Number): String { - if (status == 1) { - return "待付款" - } - if (status == 2) { - return "待发货" - } - if (status == 3) { - return "待收货" - } - if (status == 4) { - return "已完成" - } - if (status == 5) { - return "已取消" - } - return "未知状态" - } - val getStatusClass = fun(status: Number): String { - if (status == 1) { - return "status-pending" - } - if (status == 2) { - return "status-shipping" - } - if (status == 3) { - return "status-delivering" - } - if (status == 4) { - return "status-completed" - } - if (status == 5) { - return "status-cancelled" - } - return "status-unknown" - } - val onRefresh = fun(){ - refreshing.value = true - setTimeout(fun(){ - loadOrders() - refreshing.value = false - uni_showToast(ShowToastOptions(title = "刷新成功", icon = "success")) - } - , 1000) - } - val loadMore = fun(){ - if (loadingMore.value || !hasMore.value) { - return - } - hasMore.value = false - } - val cancelOrder = fun(orderId: String){ - uni_showModal(ShowModalOptions(title = "确认取消", content = "确定要取消此订单吗?", success = fun(res){ - if (res.confirm) { - uni_showToast(ShowToastOptions(title = "订单已取消", icon = "success")) - val index = orders.value.findIndex(fun(o: Any): Boolean { - val obj = o as Record - return obj["id"] === orderId - } - ) - if (index !== -1) { - val orderObj = orders.value[index] as Record - orderObj["status"] = 5 - orders.value = orders.value.slice() - } - } - } - )) - } - val payOrder = fun(orderId: String){ - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/payment?orderId=" + orderId)) - } - val remindShipping = fun(orderId: String){ - uni_showToast(ShowToastOptions(title = "已提醒卖家发货", icon = "success")) - } - val viewLogistics = fun(orderId: String){ - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/logistics?orderId=" + orderId)) - } - val goReview = fun(order: Any){ - val orderObj = order as Record - val products = orderObj["products"] as UTSArray - val productIds = products.map(fun(p: Any): String { - val pObj = p as Record - val pid = pObj["id"] - return if (pid != null) { - pid as String - } else { - "" - } - } - ).join(",") - val orderId = orderObj["id"] as String - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/review?orderId=" + orderId + "&productIds=" + productIds)) - } - val doConfirmReceipt = fun(orderId: String): UTSPromise { - return wrapUTSPromise(suspend { - uni_showLoading(ShowLoadingOptions(title = "处理中...")) - try { - val result = await(supabaseService.confirmReceipt(orderId)) - uni_hideLoading() - if (result.success) { - uni_showToast(ShowToastOptions(title = "收货成功", icon = "success")) - val index = orders.value.findIndex(fun(o: Any): Boolean { - val obj = o as Record - return obj["id"] === orderId - }) - if (index !== -1) { - val orderObj = orders.value[index] as Record - orderObj["status"] = 4 - orders.value = orders.value.slice() - } - setTimeout(fun(){ - val order = orders.value.find(fun(o: Any): Boolean { - val obj = o as Record - return obj["id"] === orderId - }) - if (order != null) { - goReview(order) - } - }, 1000) - } else { - uni_showToast(ShowToastOptions(title = result.error ?: "确认收货失败", icon = "none")) - } - } - catch (e: Throwable) { - uni_hideLoading() - uni_showToast(ShowToastOptions(title = "系统异常", icon = "none")) - } - }) - } - val confirmReceipt = fun(orderId: String){ - uni_showModal(ShowModalOptions(title = "确认收货", content = "请确认您已收到商品,且商品无误", success = fun(res){ - if (res.confirm) { - doConfirmReceipt(orderId) - } - } - )) - } - val repurchase = fun(order: Any){ - uni_showModal(ShowModalOptions(title = "再次购买", content = "确定要将这些商品加入购物车吗?", success = fun(res){ - if (res.confirm) { - uni_showToast(ShowToastOptions(title = "已加入购物车", icon = "success")) - } - } - )) - } - val viewOrderDetail = fun(orderId: String){ - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/order-detail?id=" + orderId)) - } - val onApplyRefund = fun(order: Any){ - val orderObj = order as Record - val orderId = orderObj["id"] - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/apply-refund?orderId=" + orderId)) - } - val navigateToProduct = fun(product: Any){ - val productObj = product as Record - val productId = productObj["id"] - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/product-detail?id=" + productId)) - } - val goShopping = fun(){ - uni_switchTab(SwitchTabOptions(url = "/pages/mall/consumer/index")) - } - return fun(): Any? { - return _cE("view", _uM("class" to "orders-page"), _uA( - _cE("view", _uM("class" to "orders-header"), _uA( - _cE("view", _uM("class" to "header-search full-width"), _uA( - _cE("input", _uM("class" to "search-input", "type" to "text", "placeholder" to "搜索订单号或商品名称", "value" to searchKeyword.value, "onInput" to onSearchInput, "onConfirm" to onSearchConfirm), null, 40, _uA( - "value" - )), - if (isTrue(searchKeyword.value)) { - _cE("text", _uM("key" to 0, "class" to "search-clear", "onClick" to clearSearch), "×") - } else { - _cE("text", _uM("key" to 1, "class" to "search-icon"), "🔍") - } - )) - )), - _cE("view", _uM("class" to "order-tabs"), _uA( - _cE("scroll-view", _uM("scroll-x" to "", "class" to "tab-scroll", "show-scrollbar" to false), _uA( - _cE("view", _uM("class" to "tab-container"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(orderTabs.value, fun(tab, __key, __index, _cached): Any { - return _cE("view", _uM("key" to tab.id, "class" to _nC(_uA( - "tab-item", - _uM("active" to (activeTab.value === tab.id)) - )), "onClick" to fun(){ - switchTab(tab.id) - } - ), _uA( - _cE("text", _uM("class" to "tab-name"), _tD(tab.name), 1), - if (tab.count > 0) { - _cE("text", _uM("key" to 0, "class" to "tab-count"), _tD(tab.count), 1) - } else { - _cC("v-if", true) - } - , - if (activeTab.value === tab.id) { - _cE("view", _uM("key" to 1, "class" to "active-indicator")) - } else { - _cC("v-if", true) - } - ), 10, _uA( - "onClick" - )) - } - ), 128) - )) - )) - )), - _cE("scroll-view", _uM("scroll-y" to "", "class" to "orders-content", "refresher-enabled" to "", "refresher-triggered" to refreshing.value, "onRefresherrefresh" to onRefresh, "onScrolltolower" to loadMore), _uA( - if (isTrue(!loading.value && orders.value.length === 0)) { - _cE("view", _uM("key" to 0, "class" to "empty-orders"), _uA( - _cE("text", _uM("class" to "empty-icon"), "📦"), - _cE("text", _uM("class" to "empty-title"), "暂无订单"), - _cE("text", _uM("class" to "empty-desc"), "去逛逛,发现心仪的商品"), - _cE("button", _uM("class" to "go-shopping-btn", "onClick" to goShopping), "去逛逛") - )) - } else { - _cE("view", _uM("key" to 1, "class" to "order-list"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(orders.value, fun(order, __key, __index, _cached): Any { - return _cE("view", _uM("key" to order.id, "class" to "order-card"), _uA( - _cE("view", _uM("class" to "order-header"), _uA( - _cE("text", _uM("class" to "order-no"), "订单号:" + _tD(order.order_no), 1), - _cE("text", _uM("class" to _nC(_uA( - "order-status", - getStatusClass(order.status) - ))), _tD(getStatusText(order.status)), 3) - )), - _cE("view", _uM("class" to "order-products"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(order.products, fun(product, __key, __index, _cached): Any { - return _cE("view", _uM("key" to product.id, "class" to "order-product", "onClick" to fun(){ - navigateToProduct(product) - } - ), _uA( - _cE("image", _uM("class" to "product-image", "src" to product.image, "mode" to "aspectFill"), null, 8, _uA( - "src" - )), - _cE("view", _uM("class" to "product-info"), _uA( - _cE("text", _uM("class" to "product-name"), _tD(product.name), 1), - _cE("text", _uM("class" to "product-spec"), _tD(product.spec), 1), - _cE("view", _uM("class" to "product-footer"), _uA( - _cE("text", _uM("class" to "product-price"), "¥" + _tD(product.price), 1), - _cE("text", _uM("class" to "product-quantity"), "×" + _tD(product.quantity), 1) - )) - )) - ), 8, _uA( - "onClick" - )) - } - ), 128) - )), - _cE("view", _uM("class" to "order-info"), _uA( - _cE("view", _uM("class" to "info-row"), _uA( - _cE("text", _uM("class" to "info-label"), "商品合计"), - _cE("text", _uM("class" to "info-value"), "¥" + _tD(order.product_amount), 1) - )), - _cE("view", _uM("class" to "info-row"), _uA( - _cE("text", _uM("class" to "info-label"), "运费"), - _cE("text", _uM("class" to "info-value"), "¥" + _tD(order.shipping_fee), 1) - )), - _cE("view", _uM("class" to "info-row total"), _uA( - _cE("text", _uM("class" to "info-label"), "实付款"), - _cE("text", _uM("class" to "info-value total-price"), "¥" + _tD(order.total_amount), 1) - )) - )), - _cE("view", _uM("class" to "order-actions"), _uA( - if (order.status === 1) { - _cE("view", _uM("key" to 0, "class" to "action-buttons"), _uA( - _cE("button", _uM("class" to "action-btn cancel", "onClick" to fun(){ - cancelOrder(order.id) - }), "取消订单", 8, _uA( - "onClick" - )), - _cE("button", _uM("class" to "action-btn pay", "onClick" to fun(){ - payOrder(order.id) - }), "立即支付", 8, _uA( - "onClick" - )) - )) - } else { - _cC("v-if", true) - } - , - if (order.status === 2) { - _cE("view", _uM("key" to 1, "class" to "action-buttons"), _uA( - _cE("button", _uM("class" to "action-btn remind", "onClick" to fun(){ - remindShipping(order.id) - }), "提醒发货", 8, _uA( - "onClick" - )), - _cE("button", _uM("class" to "action-btn refund", "onClick" to withModifiers(fun(){ - onApplyRefund(order) - }, _uA( - "stop" - ))), "申请售后", 8, _uA( - "onClick" - )) - )) - } else { - _cC("v-if", true) - } - , - if (order.status === 3) { - _cE("view", _uM("key" to 2, "class" to "action-buttons"), _uA( - _cE("button", _uM("class" to "action-btn view", "onClick" to fun(){ - viewLogistics(order.id) - }), "查看物流", 8, _uA( - "onClick" - )), - _cE("button", _uM("class" to "action-btn confirm", "onClick" to fun(){ - confirmReceipt(order.id) - }), "确认收货", 8, _uA( - "onClick" - )), - _cE("button", _uM("class" to "action-btn refund", "onClick" to withModifiers(fun(){ - onApplyRefund(order) - }, _uA( - "stop" - ))), "申请售后", 8, _uA( - "onClick" - )) - )) - } else { - _cC("v-if", true) - } - , - if (order.status === 4) { - _cE("view", _uM("key" to 3, "class" to "action-buttons"), _uA( - _cE("button", _uM("class" to "action-btn review", "onClick" to fun(){ - goReview(order) - }), "评价", 8, _uA( - "onClick" - )), - _cE("button", _uM("class" to "action-btn refund", "onClick" to withModifiers(fun(){ - onApplyRefund(order) - }, _uA( - "stop" - ))), "申请售后", 8, _uA( - "onClick" - )), - _cE("button", _uM("class" to "action-btn repurchase", "onClick" to fun(){ - repurchase(order) - }), "再次购买", 8, _uA( - "onClick" - )) - )) - } else { - _cC("v-if", true) - } - , - if (order.status === 5) { - _cE("view", _uM("key" to 4, "class" to "action-buttons"), _uA( - _cE("button", _uM("class" to "action-btn view", "onClick" to fun(){ - viewOrderDetail(order.id) - }), "查看详情", 8, _uA( - "onClick" - )) - )) - } else { - _cC("v-if", true) - } - )) - )) - } - ), 128) - )) - } - , - if (isTrue(loadingMore.value)) { - _cE("view", _uM("key" to 2, "class" to "loading-more"), _uA( - _cE("view", _uM("class" to "loading-spinner")), - _cE("text", null, "加载中...") - )) - } else { - _cC("v-if", true) - } - , - if (isTrue(!hasMore.value && orders.value.length > 0)) { - _cE("view", _uM("key" to 3, "class" to "no-more"), _uA( - _cE("text", null, "没有更多订单了") - )) - } else { - _cC("v-if", true) - } - , - _cE("view", _uM("class" to "safe-area")) - ), 40, _uA( - "refresher-triggered" - )), - _cE("view", _uM("class" to "tabbar-placeholder")) - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("orders-page" to _pS(_uM("width" to "100%", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "display" to "flex", "flexDirection" to "column", "backgroundColor" to "#f5f5f5")), "orders-header" to _pS(_uM("backgroundColor" to "#FFFFFF", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "display" to "flex", "alignItems" to "center", "justifyContent" to "center", "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#eeeeee", "zIndex" to 10)), "header-search" to _uM(".full-width" to _uM("display" to "flex", "alignItems" to "center", "position" to "relative", "width" to "100%")), "search-input" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "height" to 36, "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#dddddd", "borderRightColor" to "#dddddd", "borderBottomColor" to "#dddddd", "borderLeftColor" to "#dddddd", "borderTopLeftRadius" to 18, "borderTopRightRadius" to 18, "borderBottomRightRadius" to 18, "borderBottomLeftRadius" to 18, "paddingTop" to 0, "paddingRight" to 40, "paddingBottom" to 0, "paddingLeft" to 16, "fontSize" to 14, "backgroundColor" to "#f5f5f5", "color" to "#333333", "width" to "100%", "color::placeholder" to "#999999", "fontSize::placeholder" to 12, "borderTopColor:focus" to "#ff5000", "borderRightColor:focus" to "#ff5000", "borderBottomColor:focus" to "#ff5000", "borderLeftColor:focus" to "#ff5000", "backgroundColor:focus" to "#FFFFFF")), "search-icon" to _pS(_uM("position" to "absolute", "right" to 12, "fontSize" to 18, "color" to "#999999")), "search-clear" to _pS(_uM("position" to "absolute", "right" to 12, "fontSize" to 20, "color" to "#999999", "width" to 20, "height" to 20, "lineHeight" to "18px", "textAlign" to "center", "borderTopLeftRadius" to 10, "borderTopRightRadius" to 10, "borderBottomRightRadius" to 10, "borderBottomLeftRadius" to 10, "backgroundColor" to "#dddddd")), "order-tabs" to _pS(_uM("backgroundColor" to "#ffffff", "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#e5e5e5", "zIndex" to 10)), "tab-scroll" to _pS(_uM("width" to "100%", "whiteSpace" to "nowrap")), "tab-container" to _pS(_uM("display" to "flex", "flexDirection" to "row", "paddingTop" to 0, "paddingRight" to 10, "paddingBottom" to 0, "paddingLeft" to 10)), "tab-item" to _uM("" to _uM("paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "textAlign" to "center", "position" to "relative", "display" to "flex", "justifyContent" to "center", "alignItems" to "center", "whiteSpace" to "nowrap", "flexShrink" to 0), ".active" to _uM("color" to "#ff5000", "fontWeight" to "bold")), "active-indicator" to _pS(_uM("position" to "absolute", "bottom" to 0, "left" to 0, "right" to 0, "height" to 2, "backgroundColor" to "#ff5000")), "tab-name" to _pS(_uM("fontSize" to 14)), "tab-count" to _pS(_uM("marginLeft" to 4, "backgroundColor" to "#ff5000", "color" to "#FFFFFF", "fontSize" to 10, "paddingTop" to 1, "paddingRight" to 4, "paddingBottom" to 1, "paddingLeft" to 4, "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "minWidth" to 12, "textAlign" to "center")), "orders-content" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "empty-orders" to _pS(_uM("display" to "flex", "flexDirection" to "column", "alignItems" to "center", "justifyContent" to "center", "paddingTop" to 80, "paddingRight" to 20, "paddingBottom" to 80, "paddingLeft" to 20, "textAlign" to "center")), "empty-icon" to _pS(_uM("fontSize" to 80, "color" to "#dddddd", "marginBottom" to 20)), "empty-title" to _pS(_uM("fontSize" to 18, "color" to "#666666", "marginBottom" to 10)), "empty-desc" to _pS(_uM("fontSize" to 14, "color" to "#999999", "marginBottom" to 30)), "go-shopping-btn" to _pS(_uM("backgroundColor" to "#ff5000", "color" to "#FFFFFF", "borderTopWidth" to "medium", "borderRightWidth" to "medium", "borderBottomWidth" to "medium", "borderLeftWidth" to "medium", "borderTopStyle" to "none", "borderRightStyle" to "none", "borderBottomStyle" to "none", "borderLeftStyle" to "none", "borderTopColor" to "#000000", "borderRightColor" to "#000000", "borderBottomColor" to "#000000", "borderLeftColor" to "#000000", "borderTopLeftRadius" to 25, "borderTopRightRadius" to 25, "borderBottomRightRadius" to 25, "borderBottomLeftRadius" to 25, "paddingTop" to 10, "paddingRight" to 40, "paddingBottom" to 10, "paddingLeft" to 40, "fontSize" to 16)), "order-list" to _pS(_uM("paddingTop" to 10, "paddingRight" to 10, "paddingBottom" to 10, "paddingLeft" to 10)), "order-card" to _pS(_uM("backgroundColor" to "#FFFFFF", "borderTopLeftRadius" to 10, "borderTopRightRadius" to 10, "borderBottomRightRadius" to 10, "borderBottomLeftRadius" to 10, "marginBottom" to 10, "overflow" to "hidden", "boxShadow" to "0 2px 8px rgba(0, 0, 0, 0.08)")), "order-header" to _pS(_uM("display" to "flex", "justifyContent" to "space-between", "alignItems" to "center", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#f5f5f5")), "order-no" to _pS(_uM("fontSize" to 14, "color" to "#666666")), "order-status" to _pS(_uM("fontSize" to 14, "fontWeight" to "bold")), "status-pending" to _pS(_uM("color" to "#ff5000")), "status-shipping" to _pS(_uM("color" to "#ff9500")), "status-delivering" to _pS(_uM("color" to "#007aff")), "status-completed" to _pS(_uM("color" to "#34c759")), "status-cancelled" to _pS(_uM("color" to "#999999")), "order-products" to _pS(_uM("paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15)), "order-product" to _pS(_uM("display" to "flex", "marginBottom" to 15, "marginBottom:last-child" to 0)), "product-image" to _pS(_uM("width" to 80, "height" to 80, "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "marginRight" to 15)), "product-info" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "product-name" to _pS(_uM("fontSize" to 15, "color" to "#333333", "marginBottom" to 5, "lineHeight" to 1.4)), "product-spec" to _pS(_uM("fontSize" to 13, "color" to "#999999", "marginBottom" to 10)), "product-footer" to _pS(_uM("display" to "flex", "justifyContent" to "space-between", "alignItems" to "center")), "product-price" to _pS(_uM("fontSize" to 16, "color" to "#ff5000", "fontWeight" to "bold")), "product-quantity" to _pS(_uM("fontSize" to 14, "color" to "#666666")), "order-info" to _pS(_uM("paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "borderTopWidth" to 1, "borderTopStyle" to "solid", "borderTopColor" to "#f5f5f5", "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#f5f5f5")), "info-row" to _uM("" to _uM("display" to "flex", "justifyContent" to "space-between", "alignItems" to "center", "marginBottom" to 8, "marginBottom:last-child" to 0), ".total" to _uM("marginTop" to 8, "paddingTop" to 8, "borderTopWidth" to 1, "borderTopStyle" to "solid", "borderTopColor" to "#f5f5f5")), "info-label" to _pS(_uM("fontSize" to 14, "color" to "#666666")), "info-value" to _pS(_uM("fontSize" to 14, "color" to "#333333")), "total-price" to _pS(_uM("fontSize" to 18, "color" to "#ff5000", "fontWeight" to "bold")), "order-actions" to _pS(_uM("paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15)), "action-buttons" to _pS(_uM("display" to "flex", "justifyContent" to "flex-end")), "action-btn" to _uM("" to _uM("paddingTop" to 6, "paddingRight" to 15, "paddingBottom" to 6, "paddingLeft" to 15, "borderTopLeftRadius" to 15, "borderTopRightRadius" to 15, "borderBottomRightRadius" to 15, "borderBottomLeftRadius" to 15, "fontSize" to 13, "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#000000", "borderRightColor" to "#000000", "borderBottomColor" to "#000000", "borderLeftColor" to "#000000", "backgroundColor" to "rgba(0,0,0,0)", "marginLeft" to 10), ".cancel" to _uM("color" to "#666666", "borderTopColor" to "#cccccc", "borderRightColor" to "#cccccc", "borderBottomColor" to "#cccccc", "borderLeftColor" to "#cccccc"), ".pay" to _uM("color" to "#ff5000", "borderTopColor" to "#ff5000", "borderRightColor" to "#ff5000", "borderBottomColor" to "#ff5000", "borderLeftColor" to "#ff5000"), ".remind" to _uM("color" to "#666666", "borderTopColor" to "#cccccc", "borderRightColor" to "#cccccc", "borderBottomColor" to "#cccccc", "borderLeftColor" to "#cccccc"), ".view" to _uM("color" to "#666666", "borderTopColor" to "#cccccc", "borderRightColor" to "#cccccc", "borderBottomColor" to "#cccccc", "borderLeftColor" to "#cccccc"), ".confirm" to _uM("color" to "#34c759", "borderTopColor" to "#34c759", "borderRightColor" to "#34c759", "borderBottomColor" to "#34c759", "borderLeftColor" to "#34c759"), ".review" to _uM("color" to "#ff9500", "borderTopColor" to "#ff9500", "borderRightColor" to "#ff9500", "borderBottomColor" to "#ff9500", "borderLeftColor" to "#ff9500"), ".repurchase" to _uM("color" to "#ff5000", "borderTopColor" to "#ff5000", "borderRightColor" to "#ff5000", "borderBottomColor" to "#ff5000", "borderLeftColor" to "#ff5000")), "loading-more" to _pS(_uM("paddingTop" to 20, "paddingRight" to 20, "paddingBottom" to 20, "paddingLeft" to 20, "display" to "flex", "flexDirection" to "column", "alignItems" to "center", "justifyContent" to "center")), "loading-spinner" to _pS(_uM("width" to 24, "height" to 24, "borderTopWidth" to 2, "borderRightWidth" to 2, "borderBottomWidth" to 2, "borderLeftWidth" to 2, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#ff5000", "borderRightColor" to "#f0f5ff", "borderBottomColor" to "#f0f5ff", "borderLeftColor" to "#f0f5ff", "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "marginBottom" to 10)), "no-more" to _pS(_uM("textAlign" to "center", "color" to "#999999", "fontSize" to 13, "paddingTop" to 20, "paddingRight" to 0, "paddingBottom" to 20, "paddingLeft" to 0)), "safe-area" to _pS(_uM("height" to 20)), "tabbar-placeholder" to _pS(_uM("height" to 50, "backgroundColor" to "#f5f5f5"))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/mall/consumer/payment-success.kt b/unpackage/cache/.app-android/src/pages/mall/consumer/payment-success.kt deleted file mode 100644 index 999e7883..00000000 --- a/unpackage/cache/.app-android/src/pages/mall/consumer/payment-success.kt +++ /dev/null @@ -1,129 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.navigateTo as uni_navigateTo -import io.dcloud.uniapp.extapi.switchTab as uni_switchTab -open class GenPagesMallConsumerPaymentSuccess : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesMallConsumerPaymentSuccess) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesMallConsumerPaymentSuccess - val _cache = __ins.renderCache - val orderId = ref("") - val orderNo = ref("") - val amount = ref(0) - val loadOrderInfo = fun(): UTSPromise { - return wrapUTSPromise(suspend { - try { - val response = await(supabaseService.getOrderById(orderId.value)) - console.log("[payment-success] getOrderById response:", JSON.stringify(response), " at pages/mall/consumer/payment-success.uvue:35") - if (response != null) { - val orderData = response as UTSJSONObject - val totalAmount = orderData.getNumber("total_amount") - val paidAmount = orderData.getNumber("paid_amount") - console.log("[payment-success] total_amount:", totalAmount, "paid_amount:", paidAmount, " at pages/mall/consumer/payment-success.uvue:41") - if (paidAmount != null && paidAmount > 0) { - amount.value = paidAmount - } else if (totalAmount != null && totalAmount > 0) { - amount.value = totalAmount - } - val orderNoVal = orderData.getString("order_no") - if (orderNoVal != null && orderNoVal != "") { - orderNo.value = orderNoVal - } - } - } - catch (err: Throwable) { - console.error("[payment-success] 加载订单信息失败:", err, " at pages/mall/consumer/payment-success.uvue:55") - } - }) - } - onMounted(fun(){ - val pages = getCurrentPages() - val currentPage = pages[pages.length - 1] - val options = currentPage.options as Record - console.log("[payment-success] options:", JSON.stringify(options), " at pages/mall/consumer/payment-success.uvue:64") - val orderIdValue = options["orderId"] - if (orderIdValue != null) { - orderId.value = orderIdValue as String - orderNo.value = orderIdValue as String - val amountValue = options["amount"] - if (amountValue != null) { - val amountStr = amountValue.toString() - console.log("[payment-success] amountStr:", amountStr, " at pages/mall/consumer/payment-success.uvue:74") - val parsed = parseFloat(amountStr) - console.log("[payment-success] parsed:", parsed, " at pages/mall/consumer/payment-success.uvue:76") - if (isNaN(parsed) == false) { - amount.value = parsed - } - } - if (amount.value == 0) { - console.log("[payment-success] amount为0,尝试从数据库查询", " at pages/mall/consumer/payment-success.uvue:83") - } - loadOrderInfo() - } - } - ) - val viewOrder = fun(){ - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/orders")) - } - val goHome = fun(){ - uni_switchTab(SwitchTabOptions(url = "/pages/mall/consumer/index")) - } - return fun(): Any? { - return _cE("view", _uM("class" to "payment-success-page"), _uA( - _cE("view", _uM("class" to "success-content"), _uA( - _cE("view", _uM("class" to "icon-wrapper"), _uA( - _cE("text", _uM("class" to "success-icon"), "✓") - )), - _cE("text", _uM("class" to "success-title"), "支付成功"), - _cE("text", _uM("class" to "success-desc"), "您的订单已支付成功,我们将尽快为您发货"), - if (isTrue(orderId.value)) { - _cE("view", _uM("key" to 0, "class" to "order-info"), _uA( - _cE("text", _uM("class" to "info-text"), "订单编号:" + _tD(orderNo.value), 1), - _cE("text", _uM("class" to "info-text"), "支付金额:¥" + _tD(amount.value.toFixed(2)), 1) - )) - } else { - _cC("v-if", true) - } - , - _cE("view", _uM("class" to "action-buttons"), _uA( - _cE("button", _uM("class" to "btn primary-btn", "onClick" to viewOrder), "查看订单"), - _cE("button", _uM("class" to "btn secondary-btn", "onClick" to goHome), "返回首页") - )) - )) - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("payment-success-page" to _pS(_uM("display" to "flex", "flexDirection" to "column", "alignItems" to "center", "justifyContent" to "center", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "backgroundColor" to "#ffffff", "paddingTop" to 0, "paddingRight" to 30, "paddingBottom" to 0, "paddingLeft" to 30)), "success-content" to _pS(_uM("display" to "flex", "flexDirection" to "column", "alignItems" to "center", "width" to "100%")), "icon-wrapper" to _pS(_uM("width" to 80, "height" to 80, "borderTopLeftRadius" to 40, "borderTopRightRadius" to 40, "borderBottomRightRadius" to 40, "borderBottomLeftRadius" to 40, "backgroundColor" to "#4cd964", "display" to "flex", "alignItems" to "center", "justifyContent" to "center", "marginBottom" to 20, "boxShadow" to "0 4px 10px rgba(76, 217, 100, 0.3)")), "success-icon" to _pS(_uM("fontSize" to 40, "color" to "#ffffff", "fontWeight" to "bold")), "success-title" to _pS(_uM("fontSize" to 24, "fontWeight" to "bold", "color" to "#333333", "marginBottom" to 10)), "success-desc" to _pS(_uM("fontSize" to 14, "color" to "#999999", "textAlign" to "center", "marginBottom" to 30, "lineHeight" to 1.5)), "order-info" to _pS(_uM("backgroundColor" to "#f9f9f9", "paddingTop" to 15, "paddingRight" to 20, "paddingBottom" to 15, "paddingLeft" to 20, "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "width" to "100%", "marginBottom" to 30, "display" to "flex", "flexDirection" to "column", "alignItems" to "center")), "info-text" to _pS(_uM("fontSize" to 14, "color" to "#666666", "marginBottom" to 5)), "action-buttons" to _pS(_uM("width" to "100%", "display" to "flex", "flexDirection" to "column")), "btn" to _pS(_uM("width" to "100%", "height" to 45, "borderTopLeftRadius" to 22.5, "borderTopRightRadius" to 22.5, "borderBottomRightRadius" to 22.5, "borderBottomLeftRadius" to 22.5, "fontSize" to 16, "fontWeight" to "bold", "display" to "flex", "alignItems" to "center", "justifyContent" to "center", "marginBottom" to 15)), "primary-btn" to _pS(_uM("backgroundColor" to "#007aff", "color" to "#ffffff", "borderTopWidth" to "medium", "borderRightWidth" to "medium", "borderBottomWidth" to "medium", "borderLeftWidth" to "medium", "borderTopStyle" to "none", "borderRightStyle" to "none", "borderBottomStyle" to "none", "borderLeftStyle" to "none", "borderTopColor" to "#000000", "borderRightColor" to "#000000", "borderBottomColor" to "#000000", "borderLeftColor" to "#000000")), "secondary-btn" to _pS(_uM("backgroundColor" to "#ffffff", "color" to "#666666", "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#cccccc", "borderRightColor" to "#cccccc", "borderBottomColor" to "#cccccc", "borderLeftColor" to "#cccccc"))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/mall/consumer/payment.kt b/unpackage/cache/.app-android/src/pages/mall/consumer/payment.kt deleted file mode 100644 index 2e72def9..00000000 --- a/unpackage/cache/.app-android/src/pages/mall/consumer/payment.kt +++ /dev/null @@ -1,532 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.`$emit` as uni__emit -import io.dcloud.uniapp.extapi.getStorageSync as uni_getStorageSync -import io.dcloud.uniapp.extapi.hideLoading as uni_hideLoading -import io.dcloud.uniapp.extapi.navigateBack as uni_navigateBack -import io.dcloud.uniapp.extapi.navigateTo as uni_navigateTo -import io.dcloud.uniapp.framework.onBackPress -import io.dcloud.uniapp.extapi.redirectTo as uni_redirectTo -import io.dcloud.uniapp.extapi.setStorageSync as uni_setStorageSync -import io.dcloud.uniapp.extapi.showLoading as uni_showLoading -import io.dcloud.uniapp.extapi.showModal as uni_showModal -import io.dcloud.uniapp.extapi.showToast as uni_showToast -open class GenPagesMallConsumerPayment : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesMallConsumerPayment) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesMallConsumerPayment - val _cache = __ins.renderCache - val orderId = ref("") - val orderNo = ref("") - val amount = ref(0) - val paymentMethods = ref(_uA()) - val selectedMethod = ref("wechat") - val userBalance = ref(0) - val isPaying = ref(false) - val showPassword = ref(false) - val password = ref("") - val productAmount = ref(0) - val deliveryFee = ref(0) - val discountAmount = ref(0) - val loadPaymentMethods = fun(){ - val methods = _uA( - PaymentMethodType(id = "wechat", name = "微信支付", description = "推荐安装微信5.0及以上版本使用", icon = "💳", enabled = true), - PaymentMethodType(id = "alipay", name = "支付宝", description = "推荐安装支付宝10.0及以上版本使用", icon = "💳", enabled = true), - PaymentMethodType(id = "balance", name = "余额支付", description = "使用账户余额支付", icon = "💰", enabled = true), - PaymentMethodType(id = "bankcard", name = "银行卡支付", description = "支持储蓄卡、信用卡", icon = "💳", enabled = true) - ) as UTSArray - paymentMethods.value = methods - } - val loadUserBalance = fun(): UTSPromise { - return wrapUTSPromise(suspend { - try { - val balance = await(supabaseService.getUserBalance()) - userBalance.value = balance - } - catch (err: Throwable) { - console.error("加载用户余额异常:", err, " at pages/mall/consumer/payment.uvue:180") - userBalance.value = 0 - } - }) - } - val calculatePriceDetails = fun(totalAmount: Number){ - productAmount.value = totalAmount * 0.8 - deliveryFee.value = totalAmount * 0.1 - discountAmount.value = totalAmount * 0.1 - val calculatedTotal = productAmount.value + deliveryFee.value - discountAmount.value - if (Math.abs(calculatedTotal - totalAmount) > 0.01) { - productAmount.value = totalAmount + discountAmount.value - deliveryFee.value - } - } - val updateOrderInStorage = fun(targetOrderId: String, status: Number){ - try { - val ordersStr = uni_getStorageSync("orders") - var orders: UTSArray> = _uA() - if (ordersStr != null) { - val parsed = UTSAndroid.consoleDebugError(JSON.parse(ordersStr as String), " at pages/mall/consumer/payment.uvue:208") - if (UTSArray.isArray(parsed)) { - run { - var i: Number = 0 - while(i < (parsed as UTSArray).length){ - orders.push((parsed as UTSArray)[i] as Record) - i++ - } - } - } - } - var foundIndex: Number = -1 - run { - var i: Number = 0 - while(i < orders.length){ - val o = orders[i] - if (o["id"] === targetOrderId) { - foundIndex = i - break - } - i++ - } - } - if (foundIndex !== -1) { - orders[foundIndex]["status"] = status - orders[foundIndex]["payment_status"] = if (status === 2) { - 1 - } else { - 0 - } - orders[foundIndex]["updated_at"] = Date().toISOString() - uni_setStorageSync("orders", JSON.stringify(orders)) - console.log("订单状态已更新到Storage (orders):", targetOrderId, status, " at pages/mall/consumer/payment.uvue:231") - } else { - console.warn("在Storage (orders)中未找到订单:", targetOrderId, " at pages/mall/consumer/payment.uvue:233") - } - } - catch (e: Throwable) { - console.error("更新订单状态失败", e, " at pages/mall/consumer/payment.uvue:236") - } - } - val cancelPayment = fun(): UTSPromise { - return wrapUTSPromise(suspend { - try { - updateOrderInStorage(orderId.value, 1) - uni__emit("orderUpdated", object : UTSJSONObject() { - var orderId = orderId.value - var status: Number = 1 - }) - uni_showToast(ShowToastOptions(title = "已保存到待支付订单", icon = "success")) - setTimeout(fun(){ - uni_navigateBack(null) - } - , 1500) - } - catch (err: Throwable) { - console.error("取消支付异常:", err, " at pages/mall/consumer/payment.uvue:263") - uni_showToast(ShowToastOptions(title = "操作失败", icon = "none")) - } - }) - } - val goBack = fun(){ - uni_showModal(ShowModalOptions(title = "取消支付", content = "确定要取消支付吗?取消后订单将保存到待支付订单中", confirmText = "取消支付", cancelText = "继续支付", success = fun(res){ - if (res.confirm) { - cancelPayment() - } - } - )) - } - val loadOrderInfo = fun(): UTSPromise { - return wrapUTSPromise(suspend w1@{ - try { - if (orderId.value == "") { - return@w1 - } - val order = await(supabaseService.getOrderDetail(orderId.value)) - if (order != null) { - val orderObj = order as Record - orderNo.value = orderObj["order_no"] as String - val totalAmount = orderObj["total_amount"] - val dbAmount = if (totalAmount != null) { - parseFloat(totalAmount.toString()) - } else { - 0 - } - if (dbAmount > 0) { - amount.value = dbAmount - } - val items = orderObj["items"] - if (items != null && UTSArray.isArray(items) && (items as UTSArray).length > 0) {} - } else { - console.warn("Order not found in DB", orderId.value, " at pages/mall/consumer/payment.uvue:309") - if (orderNo.value == "") { - orderNo.value = "ORD_PENDING_" + Date.now() - } - } - } - catch (err: Throwable) { - console.error("加载订单信息异常:", err, " at pages/mall/consumer/payment.uvue:313") - } - }) - } - onMounted(fun(){ - val pages = getCurrentPages() - val currentPage = pages[pages.length - 1] - val options = currentPage.options as Record - val orderIdValue = options["orderId"] - if (orderIdValue != null) { - orderId.value = orderIdValue as String - loadOrderInfo() - } - val amountValue = options["amount"] - if (amountValue != null) { - amount.value = parseFloat(amountValue.toString()) - } - val productAmountValue = options["productAmount"] - if (productAmountValue != null) { - productAmount.value = parseFloat(productAmountValue.toString()) - } - val deliveryFeeValue = options["deliveryFee"] - if (deliveryFeeValue != null) { - deliveryFee.value = parseFloat(deliveryFeeValue.toString()) - } - val discountAmountValue = options["discountAmount"] - if (discountAmountValue != null) { - discountAmount.value = parseFloat(discountAmountValue.toString()) - } - if (productAmountValue == null && amount.value > 0) { - calculatePriceDetails(amount.value) - } - loadPaymentMethods() - loadUserBalance() - } - ) - onBackPress(fun(options): Boolean { - if (options.from === "navigateBack") { - return false - } - goBack() - return true - } - ) - val getCurrentUserId = fun(): String { - val userStore = uni_getStorageSync("userInfo") - if (userStore != null) { - val userObj = userStore as Record - val id = userObj["id"] - if (id != null) { - return id as String - } - } - return "" - } - val getMethodIcon = fun(methodId: String): String { - if (methodId === "wechat") { - return "💳" - } else if (methodId === "alipay") { - return "💳" - } else if (methodId === "balance") { - return "💰" - } else if (methodId === "bankcard") { - return "💳" - } - return "💳" - } - val selectMethod = fun(method: PaymentMethodType){ - if (!method.enabled) { - uni_showToast(ShowToastOptions(title = "该支付方式暂不可用", icon = "none")) - return - } - selectedMethod.value = method.id - showPassword.value = method.id === "balance" || method.id === "bankcard" - password.value = "" - } - val getPayButtonText = fun(): String { - if (selectedMethod.value === "balance" && userBalance.value < amount.value) { - return "余额不足" - } - if (selectedMethod.value === "wechat") { - return "微信支付" - } else if (selectedMethod.value === "alipay") { - return "支付宝支付" - } else if (selectedMethod.value === "balance") { - return "余额支付" - } else if (selectedMethod.value === "bankcard") { - return "银行卡支付" - } - return "确认支付" - } - val confirmPayment = fun(): UTSPromise { - return wrapUTSPromise(suspend w1@{ - if (isPaying.value) { - return@w1 - } - if (selectedMethod.value === "balance") { - if (userBalance.value < amount.value) { - uni_showToast(ShowToastOptions(title = "余额不足", icon = "none")) - return@w1 - } - if (!showPassword.value) { - showPassword.value = true - return@w1 - } - if (password.value.length !== 6) { - uni_showToast(ShowToastOptions(title = "请输入6位支付密码", icon = "none")) - return@w1 - } - } - isPaying.value = true - uni_showLoading(ShowLoadingOptions(title = "支付中...")) - try { - console.log("[confirmPayment] 开始支付, orderId:", orderId.value, "method:", selectedMethod.value, " at pages/mall/consumer/payment.uvue:466") - val success = await(supabaseService.payOrder(orderId.value, selectedMethod.value, amount.value)) - console.log("[confirmPayment] 支付结果:", success, " at pages/mall/consumer/payment.uvue:469") - if (!success) { - console.error("[confirmPayment] payOrder 返回 false", " at pages/mall/consumer/payment.uvue:472") - uni_hideLoading() - uni_showToast(ShowToastOptions(title = "支付处理失败", icon = "none")) - isPaying.value = false - return@w1 - } - uni_hideLoading() - updateOrderInStorage(orderId.value, 2) - uni_showToast(ShowToastOptions(title = "支付成功", icon = "success", duration = 2000)) - uni__emit("orderUpdated", object : UTSJSONObject() { - var orderId = orderId.value - var status: Number = 2 - }) - setTimeout(fun(){ - uni_redirectTo(RedirectToOptions(url = "/pages/mall/consumer/payment-success?orderId=" + orderId.value)) - } - , 1500) - } - catch (err: Throwable) { - console.error("[confirmPayment] 支付异常:", err, " at pages/mall/consumer/payment.uvue:501") - uni_hideLoading() - uni_showToast(ShowToastOptions(title = "支付失败", icon = "none")) - isPaying.value = false - } - }) - } - val verifyPassword = fun(): UTSPromise { - return wrapUTSPromise(suspend { - val userId = getCurrentUserId() - try { - await(UTSPromise(fun(resolve: (value: Unit) -> Unit, _reject){ - setTimeout(fun(){ - resolve(Unit) - } - , 500) - } - )) - val isCorrect = true - if (isCorrect) { - confirmPayment() - } else { - password.value = "" - uni_showToast(ShowToastOptions(title = "密码错误", icon = "none")) - } - } - catch (err: Throwable) { - console.error("验证密码异常:", err, " at pages/mall/consumer/payment.uvue:553") - } - }) - } - val inputPassword = fun(num: String){ - if (password.value.length >= 6) { - return - } - password.value += num - } - val deletePassword = fun(){ - if (password.value.length > 0) { - password.value = password.value.slice(0, -1) - } - } - watch(password, fun(newPassword: String){ - if (newPassword.length === 6) { - verifyPassword() - } - } - ) - val forgotPassword = fun(){ - uni_navigateTo(NavigateToOptions(url = "/pages/user/forgot-password")) - } - onUnmounted(fun(){}) - return fun(): Any? { - return _cE("view", _uM("class" to "payment-page"), _uA( - _cE("view", _uM("class" to "payment-content"), _uA( - _cE("view", _uM("class" to "price-detail-section"), _uA( - _cE("text", _uM("class" to "section-title"), "价格明细"), - _cE("view", _uM("class" to "price-detail"), _uA( - _cE("view", _uM("class" to "price-row"), _uA( - _cE("text", _uM("class" to "price-label"), "商品总价"), - _cE("text", _uM("class" to "price-value"), "¥" + _tD(productAmount.value.toFixed(2)), 1) - )), - _cE("view", _uM("class" to "price-row"), _uA( - _cE("text", _uM("class" to "price-label"), "运费"), - _cE("text", _uM("class" to "price-value"), "+¥" + _tD(deliveryFee.value.toFixed(2)), 1) - )), - if (discountAmount.value > 0) { - _cE("view", _uM("key" to 0, "class" to "price-row"), _uA( - _cE("text", _uM("class" to "price-label"), "优惠减免"), - _cE("text", _uM("class" to "price-value discount"), "-¥" + _tD(discountAmount.value.toFixed(2)), 1) - )) - } else { - _cC("v-if", true) - } - , - _cE("view", _uM("class" to "price-row total"), _uA( - _cE("text", _uM("class" to "price-label"), "应付金额"), - _cE("text", _uM("class" to "price-value total-price"), "¥" + _tD(amount.value.toFixed(2)), 1) - )) - )), - _cE("text", _uM("class" to "order-no"), "订单号: " + _tD(orderNo.value), 1) - )), - _cE("view", _uM("class" to "methods-section"), _uA( - _cE("text", _uM("class" to "section-title"), "选择支付方式"), - _cE("view", _uM("class" to "method-list"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(paymentMethods.value, fun(method, __key, __index, _cached): Any { - return _cE("view", _uM("key" to method.id, "class" to _nC(_uA( - "method-item", - _uM("selected" to (selectedMethod.value === method.id)) - )), "onClick" to fun(){ - selectMethod(method) - } - ), _uA( - _cE("view", _uM("class" to "method-left"), _uA( - _cE("text", _uM("class" to "method-icon"), _tD(getMethodIcon(method.id)), 1), - _cE("view", _uM("class" to "method-info"), _uA( - _cE("text", _uM("class" to "method-name"), _tD(method.name), 1), - _cE("text", _uM("class" to "method-desc"), _tD(method.description), 1) - )) - )), - if (selectedMethod.value === method.id) { - _cE("view", _uM("key" to 0, "class" to "method-selected"), _uA( - _cE("text", _uM("class" to "selected-icon"), "✓") - )) - } else { - _cC("v-if", true) - } - ), 10, _uA( - "onClick" - )) - } - ), 128) - )) - )), - if (isTrue(selectedMethod.value === "balance" && userBalance.value > 0)) { - _cE("view", _uM("key" to 0, "class" to "balance-section"), _uA( - _cE("view", _uM("class" to "balance-info"), _uA( - _cE("text", _uM("class" to "balance-label"), "账户余额"), - _cE("text", _uM("class" to "balance-value"), "¥" + _tD(userBalance.value.toFixed(2)), 1) - )), - if (userBalance.value < amount.value) { - _cE("view", _uM("key" to 0, "class" to "balance-tip"), _uA( - _cE("text", _uM("class" to "tip-text"), "余额不足,请选择其他支付方式") - )) - } else { - _cC("v-if", true) - } - )) - } else { - _cC("v-if", true) - } - , - if (isTrue(showPassword.value)) { - _cE("view", _uM("key" to 1, "class" to "password-section"), _uA( - _cE("text", _uM("class" to "password-title"), "请输入支付密码"), - _cE("view", _uM("class" to "password-input"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(6, fun(_, index, __index, _cached): Any { - return _cE("view", _uM("key" to index, "class" to "password-dot"), _uA( - if (password.value.length > index) { - _cE("text", _uM("key" to 0, "class" to "password-dot-text"), "●") - } else { - _cC("v-if", true) - } - )) - }), 64) - )), - _cE("text", _uM("class" to "forgot-password", "onClick" to forgotPassword), "忘记密码?") - )) - } else { - _cC("v-if", true) - } - )), - _cE("view", _uM("class" to "payment-bottom"), _uA( - _cE("view", _uM("class" to "price-summary"), _uA( - _cE("text", _uM("class" to "summary-label"), "需支付:"), - _cE("text", _uM("class" to "summary-price"), "¥" + _tD(amount.value.toFixed(2)), 1) - )), - _cE("button", _uM("class" to _nC(_uA( - "pay-btn", - _uM("disabled" to (isPaying.value || (selectedMethod.value === "balance" && userBalance.value < amount.value))) - )), "onClick" to confirmPayment), _uA( - if (isTrue(!isPaying.value)) { - _cE("text", _uM("key" to 0, "class" to "pay-text"), _tD(getPayButtonText()), 1) - } else { - _cE("text", _uM("key" to 1, "class" to "pay-text"), "支付中...") - } - ), 2) - )), - if (isTrue(showPassword.value)) { - _cE("view", _uM("key" to 0, "class" to "password-keyboard"), _uA( - _cE("view", _uM("class" to "keyboard-grid"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(9, fun(num, __key, __index, _cached): Any { - return _cE("view", _uM("key" to num, "class" to "keyboard-key", "onClick" to fun(){ - inputPassword(num.toString(10)) - }), _uA( - _cE("text", _uM("class" to "key-text"), _tD(num), 1) - ), 8, _uA( - "onClick" - )) - }), 64), - _cE("view", _uM("class" to "keyboard-key")), - _cE("view", _uM("class" to "keyboard-key", "onClick" to fun(){ - inputPassword("0") - }), _uA( - _cE("text", _uM("class" to "key-text"), "0") - ), 8, _uA( - "onClick" - )), - _cE("view", _uM("class" to "keyboard-key", "onClick" to deletePassword), _uA( - _cE("text", _uM("class" to "key-text"), "⌫") - )) - )) - )) - } else { - _cC("v-if", true) - } - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("payment-page" to _pS(_uM("display" to "flex", "flexDirection" to "column", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "backgroundColor" to "#f5f5f5")), "payment-header" to _pS(_uM("backgroundColor" to "#ffffff", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "display" to "flex", "alignItems" to "center", "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#e5e5e5")), "back-btn" to _pS(_uM("fontSize" to 24, "color" to "#333333", "paddingTop" to 5, "paddingRight" to 5, "paddingBottom" to 5, "paddingLeft" to 5, "marginRight" to 15)), "header-title" to _pS(_uM("fontSize" to 18, "fontWeight" to "bold", "color" to "#333333")), "payment-content" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "price-detail-section" to _pS(_uM("backgroundColor" to "#ffffff", "paddingTop" to 20, "paddingRight" to 15, "paddingBottom" to 20, "paddingLeft" to 15, "marginBottom" to 10)), "price-detail" to _pS(_uM("paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "backgroundColor" to "#f8f9fa", "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "marginBottom" to 15)), "price-row" to _uM("" to _uM("display" to "flex", "justifyContent" to "space-between", "alignItems" to "center", "paddingTop" to 8, "paddingRight" to 0, "paddingBottom" to 8, "paddingLeft" to 0), ".total" to _uM("borderTopWidth" to 1, "borderTopStyle" to "solid", "borderTopColor" to "#e5e5e5", "marginTop" to 8, "paddingTop" to 15)), "price-label" to _pS(_uM("fontSize" to 14, "color" to "#666666")), "price-value" to _uM("" to _uM("fontSize" to 14, "color" to "#333333"), ".discount" to _uM("color" to "#4caf50"), ".total-price" to _uM("fontSize" to 18, "color" to "#ff4757", "fontWeight" to "bold")), "order-no" to _pS(_uM("fontSize" to 12, "color" to "#999999", "textAlign" to "center")), "methods-section" to _pS(_uM("backgroundColor" to "#ffffff", "paddingTop" to 20, "paddingRight" to 15, "paddingBottom" to 20, "paddingLeft" to 15, "marginBottom" to 10)), "section-title" to _pS(_uM("fontSize" to 16, "fontWeight" to "bold", "color" to "#333333", "marginBottom" to 15)), "method-list" to _pS(_uM("display" to "flex", "flexDirection" to "column")), "method-item" to _uM("" to _uM("display" to "flex", "alignItems" to "center", "justifyContent" to "space-between", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#e5e5e5", "borderRightColor" to "#e5e5e5", "borderBottomColor" to "#e5e5e5", "borderLeftColor" to "#e5e5e5", "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "marginBottom" to 10), ".selected" to _uM("borderTopColor" to "#007aff", "borderRightColor" to "#007aff", "borderBottomColor" to "#007aff", "borderLeftColor" to "#007aff", "backgroundColor" to "#f0f8ff")), "method-left" to _pS(_uM("display" to "flex", "alignItems" to "center")), "method-icon" to _pS(_uM("fontSize" to 24, "marginRight" to 15)), "method-info" to _pS(_uM("display" to "flex", "flexDirection" to "column")), "method-name" to _pS(_uM("fontSize" to 16, "fontWeight" to "bold", "color" to "#333333", "marginBottom" to 5)), "method-desc" to _pS(_uM("fontSize" to 12, "color" to "#999999")), "method-selected" to _pS(_uM("width" to 24, "height" to 24, "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "backgroundColor" to "#007aff", "display" to "flex", "alignItems" to "center", "justifyContent" to "center")), "selected-icon" to _pS(_uM("color" to "#ffffff", "fontSize" to 14)), "balance-section" to _pS(_uM("backgroundColor" to "#ffffff", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "marginBottom" to 10)), "balance-info" to _pS(_uM("display" to "flex", "justifyContent" to "space-between", "alignItems" to "center", "marginBottom" to 10)), "balance-label" to _pS(_uM("fontSize" to 14, "color" to "#333333")), "balance-value" to _pS(_uM("fontSize" to 18, "color" to "#ff4757", "fontWeight" to "bold")), "balance-tip" to _pS(_uM("paddingTop" to 10, "paddingRight" to 10, "paddingBottom" to 10, "paddingLeft" to 10, "backgroundColor" to "#fff0f0", "borderTopLeftRadius" to 5, "borderTopRightRadius" to 5, "borderBottomRightRadius" to 5, "borderBottomLeftRadius" to 5)), "tip-text" to _pS(_uM("fontSize" to 12, "color" to "#ff4757")), "password-section" to _pS(_uM("backgroundColor" to "#ffffff", "paddingTop" to 30, "paddingRight" to 15, "paddingBottom" to 30, "paddingLeft" to 15, "textAlign" to "center", "marginBottom" to 10)), "password-title" to _pS(_uM("fontSize" to 16, "color" to "#333333", "marginBottom" to 30)), "password-input" to _pS(_uM("display" to "flex", "justifyContent" to "center", "marginBottom" to 20)), "password-dot" to _pS(_uM("width" to 12, "height" to 12, "borderTopLeftRadius" to 6, "borderTopRightRadius" to 6, "borderBottomRightRadius" to 6, "borderBottomLeftRadius" to 6, "backgroundColor" to "#333333", "display" to "flex", "alignItems" to "center", "justifyContent" to "center", "marginTop" to 0, "marginRight" to 7.5, "marginBottom" to 0, "marginLeft" to 7.5)), "password-dot-text" to _pS(_uM("color" to "#ffffff", "fontSize" to 8)), "forgot-password" to _pS(_uM("color" to "#007aff", "fontSize" to 14)), "payment-bottom" to _pS(_uM("backgroundColor" to "#ffffff", "borderTopWidth" to 1, "borderTopStyle" to "solid", "borderTopColor" to "#e5e5e5", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "display" to "flex", "alignItems" to "center", "justifyContent" to "space-between")), "price-summary" to _pS(_uM("display" to "flex", "alignItems" to "flex-end")), "summary-label" to _pS(_uM("fontSize" to 14, "color" to "#333333", "marginRight" to 5)), "summary-price" to _pS(_uM("fontSize" to 20, "color" to "#ff4757", "fontWeight" to "bold")), "pay-btn" to _uM("" to _uM("backgroundColor" to "#007aff", "color" to "#ffffff", "paddingTop" to 0, "paddingRight" to 40, "paddingBottom" to 0, "paddingLeft" to 40, "height" to 45, "borderTopLeftRadius" to 22.5, "borderTopRightRadius" to 22.5, "borderBottomRightRadius" to 22.5, "borderBottomLeftRadius" to 22.5, "fontSize" to 16, "fontWeight" to "bold", "borderTopWidth" to "medium", "borderRightWidth" to "medium", "borderBottomWidth" to "medium", "borderLeftWidth" to "medium", "borderTopStyle" to "none", "borderRightStyle" to "none", "borderBottomStyle" to "none", "borderLeftStyle" to "none", "borderTopColor" to "#000000", "borderRightColor" to "#000000", "borderBottomColor" to "#000000", "borderLeftColor" to "#000000"), ".disabled" to _uM("backgroundColor" to "#cccccc", "opacity" to 0.6)), "password-keyboard" to _pS(_uM("backgroundColor" to "#ffffff", "borderTopWidth" to 1, "borderTopStyle" to "solid", "borderTopColor" to "#e5e5e5", "paddingTop" to 10, "paddingRight" to 10, "paddingBottom" to 10, "paddingLeft" to 10)), "keyboard-grid" to _pS(_uM("display" to "flex", "flexWrap" to "wrap", "backgroundColor" to "#e5e5e5")), "keyboard-key" to _pS(_uM("width" to "33.33%", "backgroundColor" to "#ffffff", "height" to 60, "display" to "flex", "alignItems" to "center", "justifyContent" to "center", "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#f5f5f5", "borderRightColor" to "#f5f5f5", "borderBottomColor" to "#f5f5f5", "borderLeftColor" to "#f5f5f5", "boxSizing" to "border-box")), "key-text" to _pS(_uM("fontSize" to 24, "color" to "#333333"))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/mall/consumer/points/index.kt b/unpackage/cache/.app-android/src/pages/mall/consumer/points/index.kt deleted file mode 100644 index cbf54869..00000000 --- a/unpackage/cache/.app-android/src/pages/mall/consumer/points/index.kt +++ /dev/null @@ -1,174 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.showToast as uni_showToast -open class GenPagesMallConsumerPointsIndex : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesMallConsumerPointsIndex) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesMallConsumerPointsIndex - val _cache = __ins.renderCache - val totalPoints = ref(0) - val records = ref(_uA()) - val loading = ref(true) - val loadPoints = fun(): UTSPromise { - return wrapUTSPromise(suspend { - try { - val points = await(supabaseService.getUserPoints()) - totalPoints.value = points - } - catch (e: Throwable) { - console.error("获取积分失败", e, " at pages/mall/consumer/points/index.uvue:67") - } - }) - } - val loadRecords = fun(): UTSPromise { - return wrapUTSPromise(suspend { - try { - val list = await(supabaseService.getPointRecords()) - val typedList: UTSArray = _uA() - run { - var i: Number = 0 - while(i < list.length){ - val item = list[i] as PointRecord - typedList.push(item) - i++ - } - } - records.value = typedList - } - catch (e: Throwable) { - console.error("获取积分记录失败", e, " at pages/mall/consumer/points/index.uvue:81") - } - }) - } - val loadData = fun(): UTSPromise { - return wrapUTSPromise(suspend { - loading.value = true - await(UTSPromise.all(_uA( - loadPoints(), - loadRecords() - ))) - loading.value = false - }) - } - onMounted(fun(){ - loadData() - } - ) - val handleExchange = fun(){ - uni_showToast(ShowToastOptions(title = "积分商城开发中", icon = "none")) - } - val getTypeText = fun(type: String): String { - if (type === "signin") { - return "每日签到" - } - if (type === "shopping") { - return "购物奖励" - } - if (type === "redeem") { - return "积分兑换" - } - if (type === "admin") { - return "系统调整" - } - if (type === "register") { - return "注册赠送" - } - return "积分变动" - } - val formatTime = fun(timeStr: String): String { - if (timeStr == "") { - return "" - } - val date = Date(timeStr) - val y = date.getFullYear() - val m = (date.getMonth() + 1).toString(10).padStart(2, "0") - val d = date.getDate().toString(10).padStart(2, "0") - val hh = date.getHours().toString(10).padStart(2, "0") - val mm = date.getMinutes().toString(10).padStart(2, "0") - return "" + y + "-" + m + "-" + d + " " + hh + ":" + mm - } - return fun(): Any? { - return _cE("view", _uM("class" to "points-page"), _uA( - _cE("view", _uM("class" to "points-header"), _uA( - _cE("view", _uM("class" to "points-info"), _uA( - _cE("text", _uM("class" to "points-label"), "当前积分"), - _cE("text", _uM("class" to "points-value"), _tD(totalPoints.value), 1) - )), - _cE("view", _uM("class" to "points-actions"), _uA( - _cE("button", _uM("class" to "exchange-btn", "onClick" to handleExchange), "积分兑换") - )) - )), - _cE("view", _uM("class" to "records-section"), _uA( - _cE("text", _uM("class" to "section-title"), "积分明细"), - if (isTrue(loading.value)) { - _cE("view", _uM("key" to 0, "class" to "loading-state"), _uA( - _cE("text", null, "加载中...") - )) - } else { - if (records.value.length === 0) { - _cE("view", _uM("key" to 1, "class" to "empty-state"), _uA( - _cE("text", _uM("class" to "empty-text"), "暂无积分记录") - )) - } else { - _cE("view", _uM("key" to 2, "class" to "record-list"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(records.value, fun(item, __key, __index, _cached): Any { - return _cE("view", _uM("key" to item.id, "class" to "record-item"), _uA( - _cE("view", _uM("class" to "record-left"), _uA( - _cE("text", _uM("class" to "record-title"), _tD(item.description ?: getTypeText(item.type)), 1), - _cE("text", _uM("class" to "record-time"), _tD(formatTime(item.created_at)), 1) - )), - _cE("view", _uM("class" to "record-right"), _uA( - _cE("text", _uM("class" to _nC(_uA( - "record-amount", - _uM("positive" to (item.points > 0), "negative" to (item.points < 0)) - ))), _tD(if (item.points > 0) { - "+" - } else { - "" - } - ) + _tD(item.points), 3) - )) - )) - } - ), 128) - )) - } - } - )) - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("points-page" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "points-header" to _pS(_uM("backgroundColor" to "#ff5000", "paddingTop" to 30, "paddingRight" to 20, "paddingBottom" to 30, "paddingLeft" to 20, "color" to "#FFFFFF", "display" to "flex", "justifyContent" to "space-between", "alignItems" to "center")), "points-info" to _pS(_uM("display" to "flex", "flexDirection" to "column")), "points-label" to _pS(_uM("fontSize" to 14, "opacity" to 0.9, "marginBottom" to 8)), "points-value" to _pS(_uM("fontSize" to 36, "fontWeight" to "bold")), "exchange-btn" to _pS(_uM("backgroundColor" to "rgba(255,255,255,0.2)", "color" to "#FFFFFF", "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "rgba(255,255,255,0.4)", "borderRightColor" to "rgba(255,255,255,0.4)", "borderBottomColor" to "rgba(255,255,255,0.4)", "borderLeftColor" to "rgba(255,255,255,0.4)", "fontSize" to 14, "borderTopLeftRadius" to 20, "borderTopRightRadius" to 20, "borderBottomRightRadius" to 20, "borderBottomLeftRadius" to 20, "paddingTop" to 0, "paddingRight" to 15, "paddingBottom" to 0, "paddingLeft" to 15, "height" to 32, "lineHeight" to "32px")), "records-section" to _pS(_uM("backgroundColor" to "#FFFFFF", "marginTop" to 10, "paddingTop" to 0, "paddingRight" to 16, "paddingBottom" to 0, "paddingLeft" to 16, "minHeight" to 500)), "section-title" to _pS(_uM("fontSize" to 16, "fontWeight" to "bold", "paddingTop" to 16, "paddingRight" to 0, "paddingBottom" to 16, "paddingLeft" to 0, "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#f0f0f0", "display" to "flex")), "record-item" to _pS(_uM("display" to "flex", "justifyContent" to "space-between", "alignItems" to "center", "paddingTop" to 16, "paddingRight" to 0, "paddingBottom" to 16, "paddingLeft" to 0, "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#f9f9f9")), "record-left" to _pS(_uM("display" to "flex", "flexDirection" to "column", "marginBottom" to 4, "fontSize" to 15, "color" to "#333333")), "record-time" to _pS(_uM("fontSize" to 12, "color" to "#999999")), "record-amount" to _uM("" to _uM("fontSize" to 16, "fontWeight" to "bold", "color" to "#333333"), ".positive" to _uM("color" to "#ff5000"), ".negative" to _uM("color" to "#333333")), "empty-state" to _pS(_uM("paddingTop" to 40, "paddingRight" to 0, "paddingBottom" to 40, "paddingLeft" to 0, "display" to "flex", "justifyContent" to "center")), "empty-text" to _pS(_uM("color" to "#999999", "fontSize" to 14))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/mall/consumer/product-detail.kt b/unpackage/cache/.app-android/src/pages/mall/consumer/product-detail.kt deleted file mode 100644 index f701515c..00000000 --- a/unpackage/cache/.app-android/src/pages/mall/consumer/product-detail.kt +++ /dev/null @@ -1,1015 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.getStorageSync as uni_getStorageSync -import io.dcloud.uniapp.extapi.hideLoading as uni_hideLoading -import io.dcloud.uniapp.extapi.navigateTo as uni_navigateTo -import io.dcloud.uniapp.extapi.previewImage as uni_previewImage -import io.dcloud.uniapp.extapi.setNavigationBarTitle as uni_setNavigationBarTitle -import io.dcloud.uniapp.extapi.setStorageSync as uni_setStorageSync -import io.dcloud.uniapp.extapi.showLoading as uni_showLoading -import io.dcloud.uniapp.extapi.showToast as uni_showToast -import io.dcloud.uniapp.extapi.switchTab as uni_switchTab -open class GenPagesMallConsumerProductDetail : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) { - onLoad(fun(options: Any) { - val opts = options as UTSJSONObject - val productId = (opts.getString("productId") ?: opts.getString("id")) as String - val priceStr = opts.getString("price") - val productPrice = if (priceStr != null) { - parseFloat(priceStr) - } else { - null - } - val originalPriceStr = opts.getString("originalPrice") - val productOriginalPrice = if (originalPriceStr != null) { - parseFloat(originalPriceStr) - } else { - null - } - var productName = opts.getString("name") as String? - if (productName != null) { - try { - val decodedName = UTSAndroid.consoleDebugError(decodeURIComponent(productName), " at pages/mall/consumer/product-detail.uvue:287") - productName = decodedName - } - catch (e: Throwable) { - console.warn("ProductName decode failed, using original:", productName, " at pages/mall/consumer/product-detail.uvue:290") - } - } - var productImage = opts.getString("image") as String? - if (productImage != null) { - try { - val decodedImage = UTSAndroid.consoleDebugError(decodeURIComponent(productImage), " at pages/mall/consumer/product-detail.uvue:297") - productImage = decodedImage - } - catch (e: Throwable) { - console.warn("ProductImage decode failed, using original:", productImage, " at pages/mall/consumer/product-detail.uvue:300") - } - } - if (productId != null) { - this.loadProductDetail(productId, object : UTSJSONObject() { - var price = productPrice - var originalPrice = productOriginalPrice - var name = productName - var image = productImage - }) - this.checkFavoriteStatus(productId) - this.saveFootprint(productId) - if (productName != null) { - uni_setNavigationBarTitle(SetNavigationBarTitleOptions(title = productName)) - } - } - } - , __ins) - } - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - override fun `$render`(): Any? { - val _ctx = this - val _cache = this.`$`.renderCache - return _cE("view", _uM("class" to "product-detail-page"), _uA( - _cE("scroll-view", _uM("class" to "page-scroll", "scroll-y" to "true"), _uA( - _cE("view", _uM("class" to "product-images"), _uA( - _cE("swiper", _uM("class" to "image-swiper", "indicator-dots" to true, "autoplay" to false, "onChange" to _ctx.onSwiperChange), _uA( - _cE(Fragment, null, RenderHelpers.renderList(_ctx.product.images, fun(image, index, __index, _cached): Any { - return _cE("swiper-item", _uM("key" to index), _uA( - _cE("image", _uM("src" to image, "class" to "product-image", "mode" to "aspectFit"), null, 8, _uA( - "src" - )) - )) - } - ), 128) - ), 40, _uA( - "onChange" - )), - _cE("view", _uM("class" to "image-indicator"), _tD(_ctx.currentImageIndex + 1) + " / " + _tD(_ctx.product.images.length), 1) - )), - _cE("view", _uM("class" to "product-info"), _uA( - _cE("view", _uM("class" to "price-section"), _uA( - _cE("text", _uM("class" to "current-price"), "¥" + _tD(_ctx.product.price), 1), - if (isTrue(_ctx.product.original_price)) { - _cE("text", _uM("key" to 0, "class" to "original-price"), "¥" + _tD(_ctx.product.original_price), 1) - } else { - _cC("v-if", true) - } - )), - _cE("text", _uM("class" to "product-name"), _tD(_ctx.product.name), 1), - _cE("text", _uM("class" to "sales-info"), "已售" + _tD(_ctx.product.sales) + "件 · 库存" + _tD(_ctx.product.stock) + "件", 1) - )), - _cE("view", _uM("class" to "shop-info", "onClick" to _ctx.goToShop), _uA( - _cE("image", _uM("src" to (_ctx.merchant.shop_logo ?: "/static/default-shop.png"), "class" to "shop-logo"), null, 8, _uA( - "src" - )), - _cE("view", _uM("class" to "shop-details"), _uA( - _cE("text", _uM("class" to "shop-name", "onClick" to withModifiers(_ctx.goToShop, _uA( - "stop" - ))), _tD(_ctx.merchant.shop_name), 9, _uA( - "onClick" - )), - _cE("view", _uM("class" to "shop-stats-row"), _uA( - _cE("text", _uM("class" to "rating-text"), "评分: " + _tD(_ctx.merchant.rating.toFixed(1)), 1), - _cE("text", _uM("class" to "sales-text"), "销量: " + _tD(_ctx.merchant.total_sales), 1) - )) - )), - _cE("text", _uM("class" to "enter-shop", "onClick" to withModifiers(_ctx.goToShop, _uA( - "stop" - ))), "进店 >", 8, _uA( - "onClick" - )) - ), 8, _uA( - "onClick" - )), - if (isTrue(_ctx.product.usage)) { - _cE("view", _uM("key" to 0, "class" to "function-section"), _uA( - _cE("text", _uM("class" to "function-title"), "功能主治"), - _cE("text", _uM("class" to "function-content"), _tD(_ctx.product.usage), 1) - )) - } else { - _cC("v-if", true) - } - , - if (_ctx.coupons.length > 0) { - _cE("view", _uM("key" to 1, "class" to "coupon-entry", "onClick" to _ctx.showCouponModal), _uA( - _cE("view", _uM("class" to "coupon-entry-left"), _uA( - _cE("text", _uM("class" to "coupon-entry-label"), "优惠"), - _cE("view", _uM("class" to "coupon-tags-row"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(_ctx.coupons.slice(0, 2), fun(coupon, index, __index, _cached): Any { - return _cE("text", _uM("class" to "coupon-tag", "key" to index), _tD(coupon.name), 1) - }), 128) - )) - )), - _cE("text", _uM("class" to "coupon-arrow"), "领券 >") - ), 8, _uA( - "onClick" - )) - } else { - _cC("v-if", true) - } - , - _cE("view", _uM("class" to "params-section", "onClick" to _ctx.showParamsModal), _uA( - _cE("text", _uM("class" to "params-title"), "商品参数"), - _cE("view", _uM("class" to "params-summary"), _uA( - if (isTrue(_ctx.product.specification)) { - _cE("text", _uM("key" to 0, "class" to "params-item"), "规格: " + _tD(_ctx.product.specification), 1) - } else { - _cC("v-if", true) - } - , - if (isTrue(_ctx.product.expiry_date)) { - _cE("text", _uM("key" to 1, "class" to "params-item"), "有效期: " + _tD(_ctx.product.expiry_date), 1) - } else { - _cC("v-if", true) - } - , - if (isTrue(_ctx.product.approval_number)) { - _cE("text", _uM("key" to 2, "class" to "params-item"), "批准文号: " + _tD(_ctx.product.approval_number), 1) - } else { - _cC("v-if", true) - } - )), - _cE("text", _uM("class" to "params-arrow"), ">") - ), 8, _uA( - "onClick" - )), - if (_ctx.productSkus.length > 0) { - _cE("view", _uM("key" to 2, "class" to "spec-section", "onClick" to _ctx.showSpecModal), _uA( - _cE("text", _uM("class" to "spec-title"), "规格"), - _cE("text", _uM("class" to "spec-selected"), _tD(_ctx.selectedSpec ?: "请选择规格"), 1), - _cE("text", _uM("class" to "spec-arrow"), ">") - ), 8, _uA( - "onClick" - )) - } else { - _cC("v-if", true) - } - , - _cE("view", _uM("class" to "quantity-section"), _uA( - _cE("text", _uM("class" to "quantity-title"), "数量"), - _cE("view", _uM("class" to "quantity-selector"), _uA( - _cE("view", _uM("class" to "quantity-btn minus", "onClick" to _ctx.decreaseQuantity), _uA( - _cE("text", _uM("class" to "quantity-btn-text"), "-") - ), 8, _uA( - "onClick" - )), - _cE("input", _uM("class" to "quantity-input", "type" to "number", "value" to _ctx.quantity.toString(10), "min" to 1, "max" to _ctx.getMaxQuantity(), "onInput" to _ctx.validateQuantity), null, 40, _uA( - "value", - "max", - "onInput" - )), - _cE("view", _uM("class" to "quantity-btn plus", "onClick" to _ctx.increaseQuantity), _uA( - _cE("text", _uM("class" to "quantity-btn-text"), "+") - ), 8, _uA( - "onClick" - )) - )), - _cE("text", _uM("class" to "quantity-stock"), "库存" + _tD(_ctx.getAvailableStock()) + "件", 1) - )), - _cE("view", _uM("class" to "product-description"), _uA( - _cE("view", _uM("class" to "section-title"), "商品详情"), - _cE("text", _uM("class" to "description-text"), _tD(_ctx.product.description ?: "暂无详细描述"), 1), - if (_ctx.product.images.length > 0) { - _cE("view", _uM("key" to 0, "class" to "detail-images"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(_ctx.product.images, fun(img, index, __index, _cached): Any { - return _cE("image", _uM("key" to index, "src" to img, "class" to "detail-image", "mode" to "widthFix", "onClick" to fun(){ - _ctx.previewImage(index) - }), null, 8, _uA( - "src", - "onClick" - )) - }), 128) - )) - } else { - _cC("v-if", true) - } - )) - )), - _cE("view", _uM("class" to "bottom-actions"), _uA( - _cE("view", _uM("class" to "action-buttons"), _uA( - _cE("view", _uM("class" to "action-btn", "onClick" to _ctx.contactMerchant), _uA( - _cE("text", _uM("class" to "action-icon"), "💬"), - _cE("text", _uM("class" to "action-text"), "客服") - ), 8, _uA( - "onClick" - )), - _cE("view", _uM("class" to "action-btn", "onClick" to _ctx.goToCart), _uA( - _cE("text", _uM("class" to "action-icon"), "🛒"), - _cE("text", _uM("class" to "action-text"), "购物车") - ), 8, _uA( - "onClick" - )), - _cE("view", _uM("class" to "action-btn", "onClick" to _ctx.toggleFavorite), _uA( - _cE("text", _uM("class" to "action-icon"), _tD(if (_ctx.isFavorite) { - "❤️" - } else { - "🤍" - } - ), 1), - _cE("text", _uM("class" to "action-text"), _tD(if (_ctx.isFavorite) { - "已收藏" - } else { - "收藏" - } - ), 1) - ), 8, _uA( - "onClick" - )) - )), - _cE("view", _uM("class" to "btn-group"), _uA( - _cE("button", _uM("class" to "cart-btn", "onClick" to _ctx.addToCart), "加入购物车", 8, _uA( - "onClick" - )), - _cE("button", _uM("class" to "buy-btn", "onClick" to _ctx.buyNow), "立即购买", 8, _uA( - "onClick" - )) - )) - )), - if (isTrue(_ctx.showSpec)) { - _cE("view", _uM("key" to 0, "class" to "spec-modal", "onClick" to _ctx.hideSpecModal), _uA( - _cE("view", _uM("class" to "spec-content", "onClick" to withModifiers(fun(){}, _uA( - "stop" - ))), _uA( - _cE("view", _uM("class" to "spec-header"), _uA( - _cE("text", _uM("class" to "spec-title"), "选择规格"), - _cE("text", _uM("class" to "close-btn", "onClick" to _ctx.hideSpecModal), "×", 8, _uA( - "onClick" - )) - )), - _cE("scroll-view", _uM("class" to "spec-list", "direction" to "vertical"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(_ctx.productSkus, fun(sku, __key, __index, _cached): Any { - return _cE("view", _uM("key" to sku.id, "class" to _nC(_uA( - "spec-item", - _uM("active" to (_ctx.selectedSkuId === sku.id)) - )), "onClick" to fun(){ - _ctx.selectSku(sku) - }), _uA( - _cE("text", _uM("class" to "spec-name"), _tD(_ctx.getSkuSpecText(sku)), 1), - _cE("text", _uM("class" to "spec-price"), "¥" + _tD(sku.price), 1), - _cE("text", _uM("class" to "spec-stock"), "库存" + _tD(sku.stock), 1) - ), 10, _uA( - "onClick" - )) - }), 128) - )) - ), 8, _uA( - "onClick" - )) - ), 8, _uA( - "onClick" - )) - } else { - _cC("v-if", true) - } - , - if (isTrue(_ctx.showParams)) { - _cE("view", _uM("key" to 1, "class" to "params-modal", "onClick" to _ctx.hideParamsModal), _uA( - _cE("view", _uM("class" to "params-content", "onClick" to withModifiers(fun(){}, _uA( - "stop" - ))), _uA( - _cE("view", _uM("class" to "params-header"), _uA( - _cE("text", _uM("class" to "params-title"), "商品参数"), - _cE("text", _uM("class" to "close-btn", "onClick" to _ctx.hideParamsModal), "×", 8, _uA( - "onClick" - )) - )), - _cE("scroll-view", _uM("class" to "params-list", "direction" to "vertical"), _uA( - if (isTrue(_ctx.product.specification)) { - _cE("view", _uM("key" to 0, "class" to "params-item"), _uA( - _cE("text", _uM("class" to "params-label"), "规格"), - _cE("text", _uM("class" to "params-value"), _tD(_ctx.product.specification), 1) - )) - } else { - _cC("v-if", true) - }, - if (isTrue(_ctx.product.usage)) { - _cE("view", _uM("key" to 1, "class" to "params-item"), _uA( - _cE("text", _uM("class" to "params-label"), "功能主治"), - _cE("text", _uM("class" to "params-value"), _tD(_ctx.product.usage), 1) - )) - } else { - _cC("v-if", true) - }, - if (isTrue(_ctx.product.side_effects)) { - _cE("view", _uM("key" to 2, "class" to "params-item"), _uA( - _cE("text", _uM("class" to "params-label"), "副作用"), - _cE("text", _uM("class" to "params-value"), _tD(_ctx.product.side_effects), 1) - )) - } else { - _cC("v-if", true) - }, - if (isTrue(_ctx.product.precautions)) { - _cE("view", _uM("key" to 3, "class" to "params-item"), _uA( - _cE("text", _uM("class" to "params-label"), "注意事项"), - _cE("text", _uM("class" to "params-value"), _tD(_ctx.product.precautions), 1) - )) - } else { - _cC("v-if", true) - }, - if (isTrue(_ctx.product.expiry_date)) { - _cE("view", _uM("key" to 4, "class" to "params-item"), _uA( - _cE("text", _uM("class" to "params-label"), "有效期"), - _cE("text", _uM("class" to "params-value"), _tD(_ctx.product.expiry_date), 1) - )) - } else { - _cC("v-if", true) - }, - if (isTrue(_ctx.product.storage_conditions)) { - _cE("view", _uM("key" to 5, "class" to "params-item"), _uA( - _cE("text", _uM("class" to "params-label"), "储存条件"), - _cE("text", _uM("class" to "params-value"), _tD(_ctx.product.storage_conditions), 1) - )) - } else { - _cC("v-if", true) - }, - if (isTrue(_ctx.product.approval_number)) { - _cE("view", _uM("key" to 6, "class" to "params-item"), _uA( - _cE("text", _uM("class" to "params-label"), "批准文号"), - _cE("text", _uM("class" to "params-value"), _tD(_ctx.product.approval_number), 1) - )) - } else { - _cC("v-if", true) - }, - if (isTrue(_ctx.product.tags != null && _ctx.product.tags!!.length > 0)) { - _cE("view", _uM("key" to 7, "class" to "params-item"), _uA( - _cE("text", _uM("class" to "params-label"), "标签"), - _cE("text", _uM("class" to "params-value"), _tD(_ctx.product.tags!!.join(", ")), 1) - )) - } else { - _cC("v-if", true) - } - )) - ), 8, _uA( - "onClick" - )) - ), 8, _uA( - "onClick" - )) - } else { - _cC("v-if", true) - } - , - if (isTrue(_ctx.showCoupons)) { - _cE("view", _uM("key" to 2, "class" to "popup-mask", "onClick" to _ctx.hideCouponModal), _uA( - _cE("view", _uM("class" to "popup-content", "onClick" to withModifiers(fun(){}, _uA( - "stop" - ))), _uA( - _cE("view", _uM("class" to "popup-header"), _uA( - _cE("text", _uM("class" to "popup-title"), "优惠券"), - _cE("text", _uM("class" to "close-btn", "onClick" to _ctx.hideCouponModal), "×", 8, _uA( - "onClick" - )) - )), - _cE("scroll-view", _uM("scroll-y" to "true", "class" to "coupon-list-scroll"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(_ctx.coupons, fun(coupon, __key, __index, _cached): Any { - return _cE("view", _uM("key" to coupon.id, "class" to "coupon-item"), _uA( - _cE("view", _uM("class" to "coupon-left"), _uA( - _cE("text", _uM("class" to "coupon-amount"), _uA( - _cE("text", _uM("class" to "symbol"), "¥"), - _tD(coupon.discount_value) - )), - _cE("text", _uM("class" to "coupon-cond"), "满" + _tD(coupon.min_order_amount) + "可用", 1) - )), - _cE("view", _uM("class" to "coupon-right"), _uA( - _cE("view", _uM("class" to "coupon-info-text"), _uA( - _cE("text", _uM("class" to "coupon-name"), _tD(coupon.name), 1), - _cE("text", _uM("class" to "coupon-time"), _tD(_ctx.formatDate(coupon.start_time)) + "-" + _tD(_ctx.formatDate(coupon.end_time)), 1) - )), - _cE("button", _uM("class" to "coupon-btn", "onClick" to fun(){ - _ctx.claimCoupon(coupon) - }), "领取", 8, _uA( - "onClick" - )) - )) - )) - }), 128) - )) - ), 8, _uA( - "onClick" - )) - ), 8, _uA( - "onClick" - )) - } else { - _cC("v-if", true) - } - )) - } - open var product: ProductType by `$data` - open var merchant: MerchantType by `$data` - open var productSkus: UTSArray by `$data` - open var currentImageIndex: Number by `$data` - open var showSpec: Boolean by `$data` - open var selectedSkuId: String by `$data` - open var selectedSpec: String by `$data` - open var quantity: Number by `$data` - open var isFavorite: Boolean by `$data` - open var showParams: Boolean by `$data` - open var coupons: UTSArray by `$data` - open var showCoupons: Boolean by `$data` - open var displayPrice: Number by `$data` - @Suppress("USELESS_CAST") - override fun data(): Map { - return _uM("product" to ProductType(id = "", merchant_id = "", category_id = "", name = "", description = "", images = _uA(), price = 0, original_price = 0, stock = 0, sales = 0, status = 0, created_at = ""), "merchant" to MerchantType(id = "", user_id = "", shop_name = "", shop_logo = "", shop_banner = "", shop_description = "", contact_name = "", contact_phone = "", shop_status = 0, rating = 0, total_sales = 0, created_at = ""), "productSkus" to _uA(), "currentImageIndex" to 0, "showSpec" to false, "selectedSkuId" to "", "selectedSpec" to "", "quantity" to 1, "isFavorite" to false, "showParams" to false, "coupons" to _uA(), "showCoupons" to false, "displayPrice" to computed(fun(): Number { - if (this.selectedSkuId != null && this.selectedSkuId !== "") { - val sku = this.productSkus.find(fun(s): Boolean { - return s.id === this.selectedSkuId - } - ) - if (sku != null) { - return sku!!.price - } - } - return this.product.price - } - )) - } - open var saveFootprint = ::gen_saveFootprint_fn - open fun gen_saveFootprint_fn(productId: String) { - supabaseService.addFootprint(productId).then(fun(success){ - if (success === true) { - console.log("足迹已同步到服务器", " at pages/mall/consumer/product-detail.uvue:335") - } - } - ) - val footprintData = uni_getStorageSync("footprints") as String? - var footprints: UTSArray = _uA() - if (footprintData != null && footprintData !== "") { - try { - footprints = UTSAndroid.consoleDebugError(JSON.parse(footprintData), " at pages/mall/consumer/product-detail.uvue:344") as UTSArray - } - catch (e: Throwable) { - console.error("Failed to parse footprints", e, " at pages/mall/consumer/product-detail.uvue:346") - } - } - footprints = footprints.filter(fun(item): Boolean { - return item.id !== productId - } - ) - footprints.unshift(FootprintItemType(id = this.product.id, name = this.product.name, price = this.product.price, original_price = this.product.original_price, image = this.product.images[0], sales = this.product.sales, shopId = this.merchant.id, shopName = this.merchant.shop_name, viewTime = Date.now())) - if (footprints.length > 50) { - footprints = footprints.slice(0, 50) - } - uni_setStorageSync("footprints", JSON.stringify(footprints)) - } - open fun loadProductDetail(productId: String, options: Any = UTSJSONObject()): UTSPromise { - return wrapUTSPromise(suspend { - uni_showLoading(ShowLoadingOptions(title = "加载中...")) - try { - val dbProductResponse = await(supabaseService.getProductById(productId)) - var dbProduct: UTSJSONObject? = null - if (UTSArray.isArray(dbProductResponse)) { - val arr = dbProductResponse as UTSArray - if (arr.length > 0) { - dbProduct = arr[0] as UTSJSONObject - } - } else if (dbProductResponse != null) { - dbProduct = dbProductResponse as UTSJSONObject - } - if (dbProduct != null) { - this.product = ProductType(id = dbProduct["id"] as String, merchant_id = (dbProduct["merchant_id"] ?: dbProduct["shop_id"] ?: "") as String, category_id = (dbProduct["category_id"] ?: "") as String, name = dbProduct["name"] as String, description = (dbProduct["description"] ?: "") as String, images = _uA(), price = (dbProduct["base_price"] ?: dbProduct["price"] ?: 0) as Number, original_price = (dbProduct["market_price"] ?: dbProduct["original_price"] ?: 0) as Number, stock = (dbProduct["available_stock"] ?: dbProduct["total_stock"] ?: dbProduct["stock"] ?: 0) as Number, sales = (dbProduct["sale_count"] ?: dbProduct["sales"] ?: 0) as Number, status = if (dbProduct["status"] != null) { - dbProduct["status"] as Number - } else { - 1 - }, created_at = (dbProduct["created_at"] ?: Date().toISOString()) as String, specification = dbProduct["specification"] as String?, usage = dbProduct["usage"] as String?, side_effects = dbProduct["side_effects"] as String?, precautions = dbProduct["precautions"] as String?, expiry_date = dbProduct["expiry_date"] as String?, storage_conditions = dbProduct["storage_conditions"] as String?, approval_number = dbProduct["approval_number"] as String?, tags = _uA()) - if (dbProduct["image_urls"] != null) { - try { - val imageUrls = dbProduct["image_urls"] - val parsed = if (UTSAndroid.`typeof`(imageUrls) === "string") { - UTSAndroid.consoleDebugError(JSON.parse(imageUrls as String), " at pages/mall/consumer/product-detail.uvue:417") - } else { - imageUrls - } - if (UTSArray.isArray(parsed)) { - this.product.images = (parsed as UTSArray).map(fun(i: Any): String { - return i as String - } - ) - } - } - catch (e: Throwable) { - console.error("Error parsing image_urls", e, " at pages/mall/consumer/product-detail.uvue:421") - } - } - if (this.product.images.length === 0 && dbProduct["main_image_url"] != null) { - this.product.images.push(dbProduct["main_image_url"] as String) - } - if (this.product.images.length === 0 && dbProduct["image"] != null) { - this.product.images.push(dbProduct["image"] as String) - } - if (this.product.images.length === 0) { - this.product.images.push("/static/default-product.png") - } - if (dbProduct["tags"] != null) { - try { - val tagsData = dbProduct["tags"] - val parsedTags = if (UTSAndroid.`typeof`(tagsData) === "string") { - UTSAndroid.consoleDebugError(JSON.parse(tagsData as String), " at pages/mall/consumer/product-detail.uvue:440") - } else { - tagsData - } - if (UTSArray.isArray(parsedTags)) { - this.product.tags = (parsedTags as UTSArray).map(fun(t: Any): String { - return t as String - } - ) - } - } - catch (e: Throwable) {} - } - val attributes = dbProduct["attributes"] - if (attributes != null && UTSAndroid.`typeof`(attributes) === "string") { - try { - val attrs = UTSAndroid.consoleDebugError(JSON.parse(attributes as String), " at pages/mall/consumer/product-detail.uvue:451") as UTSJSONObject? - if (attrs != null) { - if (attrs["specification"] != null) { - this.product.specification = attrs["specification"] as String - } - if (attrs["usage"] != null) { - this.product.usage = attrs["usage"] as String - } - } - } - catch (e: Throwable) {} - } - } else { - throw UTSError("No product found") - } - } - catch (e: Throwable) { - console.error("Failed to load product detail:", e, " at pages/mall/consumer/product-detail.uvue:464") - this.product.id = productId - val opts = options as UTSJSONObject - val nameOpt = opts["name"] as String? - this.product.name = if ((nameOpt != null && nameOpt !== "")) { - UTSAndroid.consoleDebugError(decodeURIComponent(nameOpt), " at pages/mall/consumer/product-detail.uvue:469") ?: "未知商品" - } else { - "未知商品" - } - val priceOpt = opts["price"] as String? - this.product.price = if ((priceOpt != null && priceOpt !== "")) { - parseFloat(priceOpt) - } else { - 0 - } - val imageOpt = opts["image"] as String? - val decodedImage = if ((imageOpt != null && imageOpt !== "")) { - UTSAndroid.consoleDebugError(decodeURIComponent(imageOpt), " at pages/mall/consumer/product-detail.uvue:473") - } else { - null - } - this.product.images = if (decodedImage != null) { - _uA( - decodedImage - ) - } else { - _uA( - "/static/default-product.png" - ) - } - } - if (this.product.merchant_id != null && this.product.merchant_id !== "") { - await(this.loadMerchantInfo(this.product.merchant_id)) - this.loadCoupons() - } - if (this.product.id != null && this.product.id !== "") { - this.loadProductSkus(this.product.id) - } - uni_hideLoading() - }) - } - open var loadMerchantInfo = ::gen_loadMerchantInfo_fn - open fun gen_loadMerchantInfo_fn(merchantId: String): UTSPromise { - return wrapUTSPromise(suspend { - var realMerchantLoaded = false - if (merchantId.includes("-") || !merchantId.startsWith("merchant_")) { - try { - val shopResponse = await(supabaseService.getShopByMerchantId(merchantId)) - if (shopResponse != null) { - val shop = shopResponse as UTSJSONObject - this.merchant = MerchantType(id = shop["id"] as String, user_id = shop["merchant_id"] as String, shop_name = shop["shop_name"] as String, shop_logo = (shop["shop_logo"] ?: "/static/default-shop.png") as String, shop_banner = (shop["shop_banner"] ?: "/static/default-banner.png") as String, shop_description = (shop["description"] ?: "") as String, contact_name = (shop["contact_name"] ?: "店主") as String, contact_phone = (shop["contact_phone"] ?: "") as String, shop_status = 1, rating = (shop["rating_avg"] ?: 5.0) as Number, total_sales = (shop["total_sales"] ?: 0) as Number, created_at = (shop["created_at"] ?: Date().toISOString()) as String) - realMerchantLoaded = true - } - } - catch (e: Throwable) { - console.error("Load shop failed", e, " at pages/mall/consumer/product-detail.uvue:514") - } - } - if (!realMerchantLoaded) { - var charSum: Number = 0 - run { - var i: Number = 0 - while(i < merchantId.length){ - val charCode = merchantId.charCodeAt(i) - if (charCode != null) { - charSum += charCode - } - i++ - } - } - val merchantIndex = Math.abs(charSum) % 5 - val shopNames = _uA( - "优质好店", - "品牌直营店", - "官方旗舰店", - "专卖店", - "精品小店" - ) - this.merchant = MerchantType(id = merchantId, user_id = "user_mock_" + merchantIndex, shop_name = shopNames[merchantIndex], shop_logo = "/static/shop-logo.png", shop_banner = "/static/shop-banner.png", shop_description = "优质服务,正品保障", contact_name = "店主", contact_phone = "", shop_status = 1, rating = 4.8, total_sales = 999, created_at = "2023-01-01") - } - }) - } - open var loadProductSkus = ::gen_loadProductSkus_fn - open fun gen_loadProductSkus_fn(productId: String): UTSPromise { - return wrapUTSPromise(suspend w@{ - try { - val skus = await(supabaseService.getProductSkus(productId)) - if (skus.length > 0) { - console.log("加载到商品SKU:", skus.length, " at pages/mall/consumer/product-detail.uvue:551") - this.productSkus = skus.map(fun(skuData): ProductSkuType { - val sku = skuData as UTSJSONObject - var specs: UTSJSONObject = object : UTSJSONObject(UTSSourceMapPosition("specs", "pages/mall/consumer/product-detail.uvue", 554, 20)) { - } - val specsData = sku["specifications"] - if (specsData != null) { - try { - if (UTSAndroid.`typeof`(specsData) === "string") { - specs = UTSAndroid.consoleDebugError(JSON.parse(specsData as String), " at pages/mall/consumer/product-detail.uvue:559") as UTSJSONObject - } else { - specs = specsData as UTSJSONObject - } - } - catch (e: Throwable) { - console.error("解析SKU规格失败", e, " at pages/mall/consumer/product-detail.uvue:565") - } - } - return ProductSkuType(id = sku["id"] as String, product_id = sku["product_id"] as String, sku_code = sku["sku_code"] as String, specifications = specs, price = sku["price"] as Number, stock = if (sku["stock"] != null) { - sku["stock"] as Number - } else { - 0 - } - , image_url = if (sku["image_url"] != null) { - sku["image_url"] as String - } else { - "" - } - , status = if (sku["status"] != null) { - sku["status"] as Number - } else { - 1 - } - ) - } - ) - return@w - } - } - catch (e: Throwable) { - console.error("Fetch SKUs error", e, " at pages/mall/consumer/product-detail.uvue:582") - } - }) - } - open var loadCoupons = ::gen_loadCoupons_fn - open fun gen_loadCoupons_fn(): UTSPromise { - return wrapUTSPromise(suspend w@{ - if (this.product.merchant_id == "") { - return@w - } - try { - val couponData = await(supabaseService.fetchShopCoupons(this.product.merchant_id)) - this.coupons = couponData as UTSArray - } - catch (e: Throwable) { - try { - val couponData2 = await(supabaseService.getAvailableCoupons(this.product.merchant_id)) - this.coupons = couponData2 as UTSArray - } - catch (e2: Throwable) { - console.warn("SupabaseService coupon methods not available:", e2, " at pages/mall/consumer/product-detail.uvue:600") - } - } - }) - } - open var contactMerchant = ::gen_contactMerchant_fn - open fun gen_contactMerchant_fn() { - if (supabaseService.getCurrentUserId() == "") { - uni_navigateTo(NavigateToOptions(url = "/pages/auth/login")) - return - } - val merchId = this.merchant.user_id ?: this.merchant.id ?: this.product.merchant_id - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/chat?merchantId=" + merchId + "&merchantName=" + this.merchant.shop_name)) - } - open var showCouponModal = ::gen_showCouponModal_fn - open fun gen_showCouponModal_fn() { - this.showCoupons = true - } - open var hideCouponModal = ::gen_hideCouponModal_fn - open fun gen_hideCouponModal_fn() { - this.showCoupons = false - } - open var claimCoupon = ::gen_claimCoupon_fn - open fun gen_claimCoupon_fn(coupon: CouponTemplateType): UTSPromise { - return wrapUTSPromise(suspend w@{ - val userId = supabaseService.getCurrentUserId() - if (userId == "") { - uni_navigateTo(NavigateToOptions(url = "/pages/auth/login")) - return@w - } - uni_showLoading(ShowLoadingOptions(title = "领取中")) - var success = false - val couponId = coupon.id - try { - success = await(supabaseService.claimShopCoupon(couponId, userId!!)) - } - catch (e: Throwable) { - try { - success = await(supabaseService.claimCoupon(couponId, userId!!)) - } - catch (e2: Throwable) { - console.warn("claimCoupon method missing:", e2, " at pages/mall/consumer/product-detail.uvue:645") - } - } - uni_hideLoading() - if (success === true) { - uni_showToast(ShowToastOptions(title = "领取成功", icon = "success")) - } else { - uni_showToast(ShowToastOptions(title = "领取失败或已领取", icon = "none")) - } - }) - } - open var formatDate = ::gen_formatDate_fn - open fun gen_formatDate_fn(dateStr: String): String { - if (dateStr == "") { - return "" - } - val date = Date(dateStr) - return "" + date.getFullYear() + "." + (date.getMonth() + 1) + "." + date.getDate() - } - open var onSwiperChange = ::gen_onSwiperChange_fn - open fun gen_onSwiperChange_fn(e: Any) { - val eventObj = e as UTSJSONObject - val detail = eventObj["detail"] as UTSJSONObject - this.currentImageIndex = detail["current"] as Number - } - open var showSpecModal = ::gen_showSpecModal_fn - open fun gen_showSpecModal_fn() { - this.showSpec = true - } - open var hideSpecModal = ::gen_hideSpecModal_fn - open fun gen_hideSpecModal_fn() { - this.showSpec = false - } - open var selectSku = ::gen_selectSku_fn - open fun gen_selectSku_fn(sku: ProductSkuType) { - this.selectedSkuId = sku.id - this.selectedSpec = this.getSkuSpecText(sku) - this.hideSpecModal() - } - open var getSkuSpecText = ::gen_getSkuSpecText_fn - open fun gen_getSkuSpecText_fn(sku: ProductSkuType): String { - if (sku.specifications != null) { - val specs = sku.specifications as UTSJSONObject - return JSON.stringify(specs) - } - return sku.sku_code - } - open var addToCart = ::gen_addToCart_fn - open fun gen_addToCart_fn(): UTSPromise { - return wrapUTSPromise(suspend w@{ - if (this.productSkus.length > 0 && (this.selectedSkuId == null || this.selectedSkuId === "")) { - uni_showToast(ShowToastOptions(title = "请选择规格", icon = "none")) - return@w - } - uni_showLoading(ShowLoadingOptions(title = "添加中...")) - try { - val success = await(supabaseService.addToCart(this.product.id, this.quantity, this.selectedSkuId)) - uni_hideLoading() - if (success === true) { - uni_showToast(ShowToastOptions(title = "已添加到购物车", icon = "success")) - } else { - console.error("添加购物车返回失败", " at pages/mall/consumer/product-detail.uvue:714") - uni_showToast(ShowToastOptions(title = "添加失败,请登录重试", icon = "none")) - } - } - catch (e: Throwable) { - uni_hideLoading() - console.error("添加购物车异常", e, " at pages/mall/consumer/product-detail.uvue:719") - uni_showToast(ShowToastOptions(title = "添加异常", icon = "none")) - } - }) - } - open var buyNow = ::gen_buyNow_fn - open fun gen_buyNow_fn() { - if (this.productSkus.length > 0 && (this.selectedSkuId == null || this.selectedSkuId === "")) { - uni_showToast(ShowToastOptions(title = "请选择规格", icon = "none")) - return - } - val sku = if ((this.selectedSkuId != null && this.selectedSkuId !== "")) { - this.productSkus.find(fun(s): Boolean { - return s.id === this.selectedSkuId - }) - } else { - null - } - val selectedItem: UTSJSONObject = _uO("__\$originalPosition" to UTSSourceMapPosition("selectedItem", "pages/mall/consumer/product-detail.uvue", 735, 12), "id" to this.selectedSkuId, "product_id" to this.product.id, "sku_id" to this.selectedSkuId, "product_name" to this.product.name, "product_image" to if ((sku != null && sku.image_url != null)) { - sku!!.image_url - } else { - this.product.images[0] - } - , "sku_specifications" to if (sku != null) { - sku!!.specifications - } else { - UTSJSONObject() - } - , "price" to parseFloat((if (sku != null) { - sku!!.price - } else { - this.product.price - } - ).toString(10)).toFixed(2) as String, "quantity" to this.quantity as Number) - uni_setStorageSync("checkout_type", "buy_now") - uni_setStorageSync("checkout_items", JSON.stringify(_uA( - selectedItem - ))) - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/checkout")) - } - open var checkFavoriteStatus = ::gen_checkFavoriteStatus_fn - open fun gen_checkFavoriteStatus_fn(id: String) { - this.checkFavorite(id) - } - open var checkFavorite = ::gen_checkFavorite_fn - open fun gen_checkFavorite_fn(id: String): UTSPromise { - return wrapUTSPromise(suspend { - val isFav = await(supabaseService.checkFavorite(id)) - this.isFavorite = isFav - }) - } - open var toggleFavorite = ::gen_toggleFavorite_fn - open fun gen_toggleFavorite_fn(): UTSPromise { - return wrapUTSPromise(suspend w@{ - if (this.product.id == "") { - return@w - } - uni_showLoading(ShowLoadingOptions(title = "处理中")) - try { - val wasFavorite = this.isFavorite - val isNowFavorite = await(supabaseService.toggleFavorite(this.product.id)) - uni_hideLoading() - if (isNowFavorite !== wasFavorite) { - this.isFavorite = isNowFavorite - uni_showToast(ShowToastOptions(title = if (isNowFavorite) { - "收藏成功" - } else { - "已取消收藏" - }, icon = "success")) - } else { - uni_showToast(ShowToastOptions(title = "操作失败", icon = "none")) - this.checkFavoriteStatus(this.product.id) - } - } - catch (e: Throwable) { - uni_hideLoading() - console.error("Toggle favorite failed", e, " at pages/mall/consumer/product-detail.uvue:784") - uni_showToast(ShowToastOptions(title = "操作异常", icon = "none")) - } - }) - } - open var goToHome = ::gen_goToHome_fn - open fun gen_goToHome_fn() { - uni_switchTab(SwitchTabOptions(url = "/pages/mall/consumer/home")) - } - open var goToShop = ::gen_goToShop_fn - open fun gen_goToShop_fn() { - if (this.merchant.user_id != null && this.merchant.user_id !== "") { - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/shop-detail?merchantId=" + this.merchant.id)) - } - } - open var goToCart = ::gen_goToCart_fn - open fun gen_goToCart_fn() { - uni_switchTab(SwitchTabOptions(url = "/pages/mall/consumer/cart")) - } - open var decreaseQuantity = ::gen_decreaseQuantity_fn - open fun gen_decreaseQuantity_fn() { - if (this.quantity > 1) { - this.quantity-- - } - } - open var increaseQuantity = ::gen_increaseQuantity_fn - open fun gen_increaseQuantity_fn() { - val maxQuantity = this.getMaxQuantity() - if (this.quantity < maxQuantity) { - this.quantity++ - } else { - uni_showToast(ShowToastOptions(title = "最多只能购买" + maxQuantity + "件", icon = "none")) - } - } - open var validateQuantity = ::gen_validateQuantity_fn - open fun gen_validateQuantity_fn() { - var num = this.quantity - val maxQuantity = this.getMaxQuantity() - if (num < 1) { - num = 1 - } else if (num > maxQuantity) { - num = maxQuantity - uni_showToast(ShowToastOptions(title = "最多只能购买" + maxQuantity + "件", icon = "none")) - } - this.quantity = num - } - open var getMaxQuantity = ::gen_getMaxQuantity_fn - open fun gen_getMaxQuantity_fn(): Number { - if (this.selectedSkuId != null && this.selectedSkuId !== "") { - val sku = this.productSkus.find(fun(s): Boolean { - return s.id === this.selectedSkuId - } - ) - if (sku != null) { - return sku!!.stock - } - } - return this.product.stock - } - open var getAvailableStock = ::gen_getAvailableStock_fn - open fun gen_getAvailableStock_fn(): Number { - return this.getMaxQuantity() - } - open var previewImage = ::gen_previewImage_fn - open fun gen_previewImage_fn(index: Number) { - uni_previewImage(PreviewImageOptions(current = index, urls = this.product.images)) - } - open var showParamsModal = ::gen_showParamsModal_fn - open fun gen_showParamsModal_fn() { - this.showParams = true - } - open var hideParamsModal = ::gen_hideParamsModal_fn - open fun gen_hideParamsModal_fn() { - this.showParams = false - } - companion object { - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("product-detail-page" to _pS(_uM("backgroundColor" to "#f5f5f5", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "display" to "flex", "flexDirection" to "column")), "page-scroll" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "height" to 0, "width" to "100%")), "product-images" to _pS(_uM("position" to "relative", "height" to "750rpx", "backgroundColor" to "#ffffff")), "image-swiper" to _pS(_uM("width" to "100%", "height" to "100%")), "product-image" to _pS(_uM("width" to "100%", "height" to "100%")), "image-indicator" to _pS(_uM("position" to "absolute", "bottom" to "20rpx", "right" to "20rpx", "backgroundColor" to "rgba(0,0,0,0.5)", "color" to "#ffffff", "paddingTop" to "10rpx", "paddingRight" to "20rpx", "paddingBottom" to "10rpx", "paddingLeft" to "20rpx", "borderTopLeftRadius" to "20rpx", "borderTopRightRadius" to "20rpx", "borderBottomRightRadius" to "20rpx", "borderBottomLeftRadius" to "20rpx", "fontSize" to "24rpx")), "product-info" to _pS(_uM("backgroundColor" to "#ffffff", "paddingTop" to "30rpx", "paddingRight" to "30rpx", "paddingBottom" to "30rpx", "paddingLeft" to "30rpx", "marginBottom" to "20rpx")), "price-section" to _pS(_uM("marginBottom" to "20rpx")), "current-price" to _pS(_uM("fontSize" to "48rpx", "fontWeight" to "bold", "color" to "#ff4444", "marginRight" to "20rpx")), "original-price" to _pS(_uM("fontSize" to "28rpx", "color" to "#999999", "textDecorationLine" to "line-through")), "product-name" to _pS(_uM("fontSize" to "32rpx", "fontWeight" to "bold", "color" to "#333333", "lineHeight" to 1.4, "marginBottom" to "15rpx")), "sales-info" to _pS(_uM("fontSize" to "26rpx", "color" to "#666666")), "shop-info" to _pS(_uM("backgroundColor" to "#ffffff", "paddingTop" to "30rpx", "paddingRight" to "30rpx", "paddingBottom" to "30rpx", "paddingLeft" to "30rpx", "marginBottom" to "20rpx", "display" to "flex", "flexDirection" to "row", "alignItems" to "center")), "shop-logo" to _pS(_uM("width" to "80rpx", "height" to "80rpx", "borderTopLeftRadius" to "10rpx", "borderTopRightRadius" to "10rpx", "borderBottomRightRadius" to "10rpx", "borderBottomLeftRadius" to "10rpx", "marginRight" to "20rpx")), "shop-details" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "display" to "flex", "flexDirection" to "column", "justifyContent" to "center")), "shop-name" to _pS(_uM("fontSize" to "30rpx", "fontWeight" to "bold", "color" to "#333333", "marginBottom" to "10rpx")), "shop-stats-row" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center")), "rating-text" to _pS(_uM("fontSize" to "24rpx", "color" to "#666666", "marginRight" to "30rpx")), "sales-text" to _pS(_uM("fontSize" to "24rpx", "color" to "#666666", "marginRight" to "30rpx")), "enter-shop" to _pS(_uM("fontSize" to "26rpx", "color" to "#666666")), "coupon-entry" to _pS(_uM("backgroundColor" to "#ffffff", "paddingTop" to "30rpx", "paddingRight" to "30rpx", "paddingBottom" to "30rpx", "paddingLeft" to "30rpx", "marginBottom" to "20rpx", "display" to "flex", "alignItems" to "center", "justifyContent" to "space-between")), "coupon-entry-left" to _pS(_uM("display" to "flex", "alignItems" to "center", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "coupon-entry-label" to _pS(_uM("fontSize" to "30rpx", "color" to "#333333", "width" to "120rpx", "fontWeight" to "bold")), "coupon-tags-row" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "display" to "flex", "flexDirection" to "row")), "coupon-tag" to _pS(_uM("fontSize" to "20rpx", "color" to "#ff4444", "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#ff4444", "borderRightColor" to "#ff4444", "borderBottomColor" to "#ff4444", "borderLeftColor" to "#ff4444", "paddingTop" to "2rpx", "paddingRight" to "10rpx", "paddingBottom" to "2rpx", "paddingLeft" to "10rpx", "borderTopLeftRadius" to "4rpx", "borderTopRightRadius" to "4rpx", "borderBottomRightRadius" to "4rpx", "borderBottomLeftRadius" to "4rpx", "marginRight" to "15rpx")), "coupon-arrow" to _pS(_uM("fontSize" to "26rpx", "color" to "#999999")), "popup-mask" to _pS(_uM("position" to "fixed", "top" to 0, "left" to 0, "right" to 0, "bottom" to 0, "backgroundColor" to "rgba(0,0,0,0.5)", "display" to "flex", "justifyContent" to "flex-end", "flexDirection" to "column", "zIndex" to 1000)), "popup-content" to _pS(_uM("backgroundColor" to "#ffffff", "width" to "100%", "borderTopLeftRadius" to "20rpx", "borderTopRightRadius" to "20rpx", "borderBottomRightRadius" to 0, "borderBottomLeftRadius" to 0, "paddingTop" to "30rpx", "paddingRight" to "30rpx", "paddingBottom" to "30rpx", "paddingLeft" to "30rpx", "display" to "flex", "flexDirection" to "column", "maxHeight" to "1000rpx")), "popup-header" to _pS(_uM("display" to "flex", "justifyContent" to "space-between", "alignItems" to "center", "marginBottom" to "30rpx", "paddingBottom" to "20rpx", "borderBottomWidth" to "1rpx", "borderBottomStyle" to "solid", "borderBottomColor" to "#eeeeee")), "popup-title" to _pS(_uM("fontSize" to "32rpx", "fontWeight" to "bold", "color" to "#333333")), "close-btn" to _pS(_uM("fontSize" to "48rpx", "color" to "#999999")), "coupon-list-scroll" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "coupon-item" to _pS(_uM("display" to "flex", "backgroundColor" to "#fff5f5", "borderTopLeftRadius" to "10rpx", "borderTopRightRadius" to "10rpx", "borderBottomRightRadius" to "10rpx", "borderBottomLeftRadius" to "10rpx", "paddingTop" to "20rpx", "paddingRight" to "20rpx", "paddingBottom" to "20rpx", "paddingLeft" to "20rpx", "marginBottom" to "20rpx")), "coupon-left" to _pS(_uM("width" to "180rpx", "display" to "flex", "flexDirection" to "column", "justifyContent" to "center", "alignItems" to "center", "borderRightWidth" to 1, "borderRightStyle" to "dashed", "borderRightColor" to "#ffccc7", "color" to "#ff4444")), "coupon-amount" to _pS(_uM("fontSize" to "40rpx", "fontWeight" to "bold")), "symbol" to _pS(_uM("fontSize" to "24rpx")), "coupon-cond" to _pS(_uM("fontSize" to "22rpx", "marginTop" to "5rpx")), "coupon-right" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "paddingLeft" to "20rpx", "display" to "flex", "justifyContent" to "space-between", "alignItems" to "center")), "coupon-info-text" to _pS(_uM("display" to "flex", "flexDirection" to "column")), "coupon-name" to _pS(_uM("fontSize" to "28rpx", "fontWeight" to "bold", "color" to "#333333", "marginBottom" to "10rpx")), "coupon-time" to _pS(_uM("fontSize" to "22rpx", "color" to "#999999")), "coupon-btn" to _pS(_uM("backgroundColor" to "#ff4444", "color" to "#ffffff", "fontSize" to "24rpx", "paddingTop" to 0, "paddingRight" to "24rpx", "paddingBottom" to 0, "paddingLeft" to "24rpx", "height" to "50rpx", "lineHeight" to "50rpx", "borderTopLeftRadius" to "25rpx", "borderTopRightRadius" to "25rpx", "borderBottomRightRadius" to "25rpx", "borderBottomLeftRadius" to "25rpx", "marginTop" to 0, "marginRight" to 0, "marginBottom" to 0, "marginLeft" to 0)), "spec-section" to _pS(_uM("backgroundColor" to "#ffffff", "paddingTop" to "30rpx", "paddingRight" to "30rpx", "paddingBottom" to "30rpx", "paddingLeft" to "30rpx", "marginBottom" to "20rpx", "display" to "flex", "alignItems" to "center")), "spec-title" to _pS(_uM("fontSize" to "32rpx", "color" to "#333333", "width" to "120rpx", "fontWeight" to "bold")), "spec-selected" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "fontSize" to "28rpx", "color" to "#666666")), "spec-arrow" to _pS(_uM("fontSize" to "28rpx", "color" to "#999999")), "quantity-section" to _pS(_uM("backgroundColor" to "#ffffff", "paddingTop" to "30rpx", "paddingRight" to "30rpx", "paddingBottom" to "30rpx", "paddingLeft" to "30rpx", "marginBottom" to "20rpx", "display" to "flex", "alignItems" to "center", "justifyContent" to "space-between")), "quantity-title" to _pS(_uM("fontSize" to "30rpx", "color" to "#333333", "width" to "120rpx")), "quantity-selector" to _pS(_uM("display" to "flex", "alignItems" to "center", "borderTopWidth" to "1rpx", "borderRightWidth" to "1rpx", "borderBottomWidth" to "1rpx", "borderLeftWidth" to "1rpx", "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#e5e5e5", "borderRightColor" to "#e5e5e5", "borderBottomColor" to "#e5e5e5", "borderLeftColor" to "#e5e5e5", "borderTopLeftRadius" to "8rpx", "borderTopRightRadius" to "8rpx", "borderBottomRightRadius" to "8rpx", "borderBottomLeftRadius" to "8rpx", "overflow" to "hidden")), "quantity-btn" to _uM("" to _uM("width" to "60rpx", "height" to "60rpx", "display" to "flex", "alignItems" to "center", "justifyContent" to "center", "backgroundColor" to "#f5f5f5"), ".minus" to _uM("borderRightWidth" to "1rpx", "borderRightStyle" to "solid", "borderRightColor" to "#e5e5e5"), ".plus" to _uM("borderLeftWidth" to "1rpx", "borderLeftStyle" to "solid", "borderLeftColor" to "#e5e5e5")), "quantity-btn-text" to _pS(_uM("fontSize" to "28rpx", "color" to "#333333")), "quantity-input" to _pS(_uM("width" to "80rpx", "height" to "60rpx", "textAlign" to "center", "fontSize" to "28rpx", "color" to "#333333", "borderTopWidth" to "medium", "borderRightWidth" to "medium", "borderBottomWidth" to "medium", "borderLeftWidth" to "medium", "borderTopStyle" to "none", "borderRightStyle" to "none", "borderBottomStyle" to "none", "borderLeftStyle" to "none", "borderTopColor" to "#000000", "borderRightColor" to "#000000", "borderBottomColor" to "#000000", "borderLeftColor" to "#000000", "backgroundColor" to "#ffffff")), "quantity-stock" to _pS(_uM("fontSize" to "24rpx", "color" to "#666666")), "product-description" to _pS(_uM("backgroundColor" to "#ffffff", "paddingTop" to "30rpx", "paddingRight" to "30rpx", "paddingBottom" to "140rpx", "paddingLeft" to "30rpx", "marginBottom" to "20rpx")), "section-title" to _pS(_uM("fontSize" to "32rpx", "fontWeight" to "bold", "color" to "#333333", "marginBottom" to "20rpx")), "description-text" to _pS(_uM("fontSize" to "28rpx", "color" to "#666666", "lineHeight" to 1.6)), "bottom-actions" to _pS(_uM("position" to "fixed", "bottom" to 0, "left" to 0, "right" to 0, "backgroundColor" to "#ffffff", "paddingTop" to "10rpx", "paddingRight" to "20rpx", "paddingBottom" to "10rpx", "paddingLeft" to "20rpx", "boxShadow" to "0 -2rpx 10rpx rgba(0, 0, 0, 0.1)", "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "space-between")), "action-buttons" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center", "marginRight" to "20rpx")), "action-btn" to _pS(_uM("display" to "flex", "flexDirection" to "column", "alignItems" to "center", "justifyContent" to "center", "marginRight" to "20rpx", "minWidth" to "80rpx")), "action-icon" to _pS(_uM("fontSize" to "40rpx", "marginBottom" to "4rpx")), "action-text" to _pS(_uM("fontSize" to "20rpx", "color" to "#666666")), "btn-group" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "display" to "flex", "flexDirection" to "row", "alignItems" to "center")), "cart-btn" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "height" to "72rpx", "lineHeight" to "72rpx", "borderTopLeftRadius" to "36rpx", "borderTopRightRadius" to "36rpx", "borderBottomRightRadius" to "36rpx", "borderBottomLeftRadius" to "36rpx", "fontSize" to "26rpx", "borderTopWidth" to "medium", "borderRightWidth" to "medium", "borderBottomWidth" to "medium", "borderLeftWidth" to "medium", "borderTopStyle" to "none", "borderRightStyle" to "none", "borderBottomStyle" to "none", "borderLeftStyle" to "none", "borderTopColor" to "#000000", "borderRightColor" to "#000000", "borderBottomColor" to "#000000", "borderLeftColor" to "#000000", "marginTop" to 0, "marginRight" to "10rpx", "marginBottom" to 0, "marginLeft" to "10rpx", "backgroundColor" to "#ffa726", "color" to "#ffffff")), "buy-btn" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "height" to "72rpx", "lineHeight" to "72rpx", "borderTopLeftRadius" to "36rpx", "borderTopRightRadius" to "36rpx", "borderBottomRightRadius" to "36rpx", "borderBottomLeftRadius" to "36rpx", "fontSize" to "26rpx", "borderTopWidth" to "medium", "borderRightWidth" to "medium", "borderBottomWidth" to "medium", "borderLeftWidth" to "medium", "borderTopStyle" to "none", "borderRightStyle" to "none", "borderBottomStyle" to "none", "borderLeftStyle" to "none", "borderTopColor" to "#000000", "borderRightColor" to "#000000", "borderBottomColor" to "#000000", "borderLeftColor" to "#000000", "marginTop" to 0, "marginRight" to "10rpx", "marginBottom" to 0, "marginLeft" to "10rpx", "backgroundColor" to "#ff4444", "color" to "#ffffff")), "spec-modal" to _pS(_uM("position" to "fixed", "top" to 0, "left" to 0, "right" to 0, "bottom" to 0, "backgroundColor" to "rgba(0,0,0,0.5)", "display" to "flex", "justifyContent" to "flex-end", "flexDirection" to "column", "zIndex" to 999)), "spec-content" to _pS(_uM("backgroundColor" to "#ffffff", "width" to "100%", "borderTopLeftRadius" to "20rpx", "borderTopRightRadius" to "20rpx", "borderBottomRightRadius" to 0, "borderBottomLeftRadius" to 0, "paddingTop" to "30rpx", "paddingRight" to "30rpx", "paddingBottom" to "30rpx", "paddingLeft" to "30rpx", "display" to "flex", "flexDirection" to "column", "maxHeight" to "1000rpx")), "spec-header" to _pS(_uM("display" to "flex", "justifyContent" to "space-between", "alignItems" to "center", "marginBottom" to "30rpx", "paddingBottom" to "20rpx", "borderBottomWidth" to "1rpx", "borderBottomStyle" to "solid", "borderBottomColor" to "#eeeeee")), "spec-list" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "spec-item" to _uM("" to _uM("display" to "flex", "alignItems" to "center", "paddingTop" to "25rpx", "paddingRight" to 0, "paddingBottom" to "25rpx", "paddingLeft" to 0, "borderBottomWidth" to "1rpx", "borderBottomStyle" to "solid", "borderBottomColor" to "#f5f5f5"), ".active" to _uM("backgroundColor" to "#fff3e0")), "spec-name" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "fontSize" to "28rpx", "color" to "#333333")), "spec-price" to _pS(_uM("fontSize" to "26rpx", "color" to "#ff4444", "marginRight" to "20rpx")), "spec-stock" to _pS(_uM("fontSize" to "24rpx", "color" to "#666666", "width" to "100rpx", "textAlign" to "right")), "function-section" to _pS(_uM("backgroundColor" to "#ffffff", "paddingTop" to "30rpx", "paddingRight" to "30rpx", "paddingBottom" to "30rpx", "paddingLeft" to "30rpx", "marginBottom" to "20rpx")), "function-title" to _pS(_uM("fontSize" to "30rpx", "color" to "#333333", "fontWeight" to "bold", "marginBottom" to "15rpx")), "function-content" to _pS(_uM("fontSize" to "28rpx", "color" to "#666666", "lineHeight" to 1.5)), "params-section" to _pS(_uM("backgroundColor" to "#ffffff", "paddingTop" to "30rpx", "paddingRight" to "30rpx", "paddingBottom" to "30rpx", "paddingLeft" to "30rpx", "marginBottom" to "20rpx", "display" to "flex", "alignItems" to "center")), "params-title" to _pS(_uM("fontSize" to "32rpx", "color" to "#333333", "width" to "auto", "flexShrink" to 0, "fontWeight" to "bold")), "params-summary" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "display" to "flex", "flexDirection" to "row", "flexWrap" to "wrap", "alignItems" to "center")), "params-item" to _pS(_uM("fontSize" to "26rpx", "color" to "#666666", "lineHeight" to 1.5, "marginRight" to "20rpx", "marginBottom" to "5rpx", "whiteSpace" to "nowrap", "display" to "flex", "alignItems" to "flex-start", "paddingTop" to "20rpx", "paddingRight" to 0, "paddingBottom" to "20rpx", "paddingLeft" to 0, "borderBottomWidth" to "1rpx", "borderBottomStyle" to "solid", "borderBottomColor" to "#f5f5f5")), "params-arrow" to _pS(_uM("fontSize" to "28rpx", "color" to "#999999", "flexShrink" to 0, "marginLeft" to "10rpx")), "params-modal" to _pS(_uM("position" to "fixed", "top" to 0, "left" to 0, "right" to 0, "bottom" to 0, "backgroundColor" to "rgba(0,0,0,0.5)", "display" to "flex", "justifyContent" to "flex-end", "flexDirection" to "column", "zIndex" to 1000)), "params-content" to _pS(_uM("backgroundColor" to "#ffffff", "width" to "100%", "borderTopLeftRadius" to "20rpx", "borderTopRightRadius" to "20rpx", "borderBottomRightRadius" to 0, "borderBottomLeftRadius" to 0, "paddingTop" to "30rpx", "paddingRight" to "30rpx", "paddingBottom" to "30rpx", "paddingLeft" to "30rpx", "display" to "flex", "flexDirection" to "column", "maxHeight" to "1000rpx")), "params-header" to _pS(_uM("display" to "flex", "justifyContent" to "space-between", "alignItems" to "center", "marginBottom" to "30rpx", "paddingBottom" to "20rpx", "borderBottomWidth" to "1rpx", "borderBottomStyle" to "solid", "borderBottomColor" to "#eeeeee")), "params-list" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "params-label" to _pS(_uM("fontSize" to "28rpx", "color" to "#333333", "fontWeight" to "bold", "width" to "150rpx", "flexShrink" to 0)), "params-value" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "fontSize" to "28rpx", "color" to "#666666", "lineHeight" to 1.5)), "detail-images" to _pS(_uM("marginTop" to "30rpx")), "detail-image" to _pS(_uM("width" to "100%", "marginBottom" to "20rpx", "borderTopLeftRadius" to "10rpx", "borderTopRightRadius" to "10rpx", "borderBottomRightRadius" to "10rpx", "borderBottomLeftRadius" to "10rpx", "boxShadow" to "0 2rpx 10rpx rgba(0, 0, 0, 0.1)"))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/mall/consumer/profile.kt b/unpackage/cache/.app-android/src/pages/mall/consumer/profile.kt deleted file mode 100644 index 988d3aad..00000000 --- a/unpackage/cache/.app-android/src/pages/mall/consumer/profile.kt +++ /dev/null @@ -1,881 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.`$off` as uni__off -import io.dcloud.uniapp.extapi.`$on` as uni__on -import io.dcloud.uniapp.extapi.getSystemInfoSync as uni_getSystemInfoSync -import io.dcloud.uniapp.extapi.navigateTo as uni_navigateTo -import io.dcloud.uniapp.extapi.showModal as uni_showModal -import io.dcloud.uniapp.extapi.showToast as uni_showToast -import io.dcloud.uniapp.extapi.switchTab as uni_switchTab -open class GenPagesMallConsumerProfile : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) { - onLoad(fun(_: OnLoadOptions) { - this.initPage() - this.loadUserProfile() - this.loadOrders() - uni__on("orderUpdated", this.handleOrderUpdated) - } - , __ins) - onPageShow(fun() { - this.refreshData() - } - , __ins) - onUnload(fun() { - uni__off("orderUpdated", this.handleOrderUpdated) - } - , __ins) - } - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - override fun `$render`(): Any? { - val _ctx = this - val _cache = this.`$`.renderCache - return _cE("view", _uM("class" to "consumer-profile"), _uA( - _cE("view", _uM("class" to "smart-navbar", "style" to _nS(_uM("paddingTop" to (_ctx.statusBarHeight + "px")))), _uA( - _cE("view", _uM("class" to "nav-container"), _uA( - _cE("image", _uM("src" to if (_ctx.userInfo.avatar_url != "") { - _ctx.userInfo.avatar_url - } else { - "/static/default-avatar.png" - } - , "class" to "nav-avatar", "onClick" to _ctx.editProfile), null, 8, _uA( - "src", - "onClick" - )), - _cE("view", _uM("class" to "nav-user-stats"), _uA( - _cE("text", _uM("class" to "nav-user-name"), _tD(if (_ctx.userInfo.nickname != "") { - _ctx.userInfo.nickname - } else { - _ctx.userInfo.phone - } - ), 1), - _cE("view", _uM("class" to "nav-stat-item", "onClick" to _ctx.goToPoints), _uA( - _cE("text", _uM("class" to "nav-stat-label"), "积分"), - _cE("text", _uM("class" to "nav-stat-value"), _tD(_ctx.userStats.points), 1) - ), 8, _uA( - "onClick" - )), - _cE("view", _uM("class" to "nav-stat-item"), _uA( - _cE("text", _uM("class" to "nav-stat-label"), "余额"), - _cE("text", _uM("class" to "nav-stat-value", "onClick" to _ctx.goToWallet), "¥" + _tD(_ctx.userStats.balance), 9, _uA( - "onClick" - )) - )), - _cE("view", _uM("class" to "nav-stat-item", "onClick" to _ctx.goToCoupons), _uA( - _cE("text", _uM("class" to "nav-stat-label"), "券"), - _cE("text", _uM("class" to "nav-stat-value"), _tD(_ctx.serviceCounts.coupons), 1) - ), 8, _uA( - "onClick" - )) - )), - _cE("view", _uM("class" to "nav-actions"), _uA( - _cE("view", _uM("class" to "action-btn", "onClick" to _ctx.goToSettings), _uA( - _cE("text", _uM("class" to "action-icon"), "⚙️") - ), 8, _uA( - "onClick" - )) - )) - )) - ), 4), - _cE("scroll-view", _uM("class" to "profile-scroll-content", "direction" to "vertical", "style" to _nS(_uM("flex" to "1", "height" to "0", "width" to "100%"))), _uA( - _cE("view", _uM("style" to _nS(_uM("height" to ((_ctx.statusBarHeight + 10) + "px")))), null, 4), - _cE("view", _uM("class" to "my-services", "style" to _nS(_uM("margin-top" to "10px"))), _uA( - _cE("view", _uM("class" to "section-title"), "我的服务"), - _cE("view", _uM("class" to "service-grid"), _uA( - _cE("view", _uM("class" to "service-item", "onClick" to _ctx.goToCoupons), _uA( - _cE("text", _uM("class" to "service-icon"), "🎫"), - _cE("text", _uM("class" to "service-text"), "优惠券"), - if (_ctx.serviceCounts.coupons > 0) { - _cE("text", _uM("key" to 0, "class" to "service-badge"), _tD(_ctx.serviceCounts.coupons), 1) - } else { - _cC("v-if", true) - } - ), 8, _uA( - "onClick" - )), - _cE("view", _uM("class" to "service-item", "onClick" to _ctx.goToAddress), _uA( - _cE("text", _uM("class" to "service-icon"), "📍"), - _cE("text", _uM("class" to "service-text"), "收货地址") - ), 8, _uA( - "onClick" - )), - _cE("view", _uM("class" to "service-item", "onClick" to _ctx.goToFavorites), _uA( - _cE("text", _uM("class" to "service-icon"), "❤️"), - _cE("text", _uM("class" to "service-text"), "我的收藏"), - if (_ctx.serviceCounts.favorites > 0) { - _cE("text", _uM("key" to 0, "class" to "service-badge"), _tD(_ctx.serviceCounts.favorites), 1) - } else { - _cC("v-if", true) - } - ), 8, _uA( - "onClick" - )), - _cE("view", _uM("class" to "service-item", "onClick" to _ctx.goToFootprint), _uA( - _cE("text", _uM("class" to "service-icon"), "👣"), - _cE("text", _uM("class" to "service-text"), "浏览足迹") - ), 8, _uA( - "onClick" - )), - _cE("view", _uM("class" to "service-item", "onClick" to _ctx.goToRefund), _uA( - _cE("text", _uM("class" to "service-icon"), "🔄"), - _cE("text", _uM("class" to "service-text"), "退款/售后") - ), 8, _uA( - "onClick" - )), - _cE("view", _uM("class" to "service-item", "onClick" to _ctx.goToOrderReviews), _uA( - _cE("text", _uM("class" to "service-icon"), "📝"), - _cE("text", _uM("class" to "service-text"), "评价") - ), 8, _uA( - "onClick" - )), - _cE("view", _uM("class" to "service-item", "onClick" to _ctx.goToFollowedShops), _uA( - _cE("text", _uM("class" to "service-icon"), "⭐"), - _cE("text", _uM("class" to "service-text"), "关注店铺") - ), 8, _uA( - "onClick" - )), - _cE("view", _uM("class" to "service-item", "onClick" to _ctx.goToSubscriptions), _uA( - _cE("text", _uM("class" to "service-icon"), "📱"), - _cE("text", _uM("class" to "service-text"), "软件订阅") - ), 8, _uA( - "onClick" - )) - )) - ), 4), - _cE("view", _uM("class" to "order-shortcuts"), _uA( - _cE("view", _uM("class" to "section-title"), "我的订单"), - _cE("view", _uM("class" to "order-tabs"), _uA( - _cE("view", _uM("class" to _nC(_uA( - "order-tab", - _uM("active" to (_ctx.currentOrderTab === "all")) - )), "onClick" to fun(){ - _ctx.switchOrderTab("all") - } - ), _uA( - _cE("text", _uM("class" to "tab-icon"), "📋"), - _cE("text", _uM("class" to "tab-text"), "全部"), - if (_ctx.orderCounts.total > 0) { - _cE("text", _uM("key" to 0, "class" to "tab-badge"), _tD(_ctx.orderCounts.total), 1) - } else { - _cC("v-if", true) - } - ), 10, _uA( - "onClick" - )), - _cE("view", _uM("class" to _nC(_uA( - "order-tab", - _uM("active" to (_ctx.currentOrderTab === "pending")) - )), "onClick" to fun(){ - _ctx.switchOrderTab("pending") - } - ), _uA( - _cE("text", _uM("class" to "tab-icon"), "💰"), - _cE("text", _uM("class" to "tab-text"), "待支付"), - if (_ctx.orderCounts.pending > 0) { - _cE("text", _uM("key" to 0, "class" to "tab-badge"), _tD(_ctx.orderCounts.pending), 1) - } else { - _cC("v-if", true) - } - ), 10, _uA( - "onClick" - )), - _cE("view", _uM("class" to _nC(_uA( - "order-tab", - _uM("active" to (_ctx.currentOrderTab === "toship")) - )), "onClick" to fun(){ - _ctx.switchOrderTab("toship") - } - ), _uA( - _cE("text", _uM("class" to "tab-icon"), "🚚"), - _cE("text", _uM("class" to "tab-text"), "待发货"), - if (_ctx.orderCounts.toship > 0) { - _cE("text", _uM("key" to 0, "class" to "tab-badge"), _tD(_ctx.orderCounts.toship), 1) - } else { - _cC("v-if", true) - } - ), 10, _uA( - "onClick" - )), - _cE("view", _uM("class" to _nC(_uA( - "order-tab", - _uM("active" to (_ctx.currentOrderTab === "shipped")) - )), "onClick" to fun(){ - _ctx.switchOrderTab("shipped") - } - ), _uA( - _cE("text", _uM("class" to "tab-icon"), "📦"), - _cE("text", _uM("class" to "tab-text"), "待收货"), - if (_ctx.orderCounts.shipped > 0) { - _cE("text", _uM("key" to 0, "class" to "tab-badge"), _tD(_ctx.orderCounts.shipped), 1) - } else { - _cC("v-if", true) - } - ), 10, _uA( - "onClick" - )) - )) - )), - _cE("view", _uM("class" to "recent-orders"), _uA( - _cE("view", _uM("class" to "section-header"), _uA( - _cE("text", _uM("class" to "section-title"), _tD(_ctx.getOrderSectionTitle()), 1), - _cE("text", _uM("class" to "view-all", "onClick" to fun(){ - _ctx.goToOrders(_ctx.currentOrderTab) - } - ), "查看更多 >", 8, _uA( - "onClick" - )) - )), - if (_ctx.filteredOrders.length === 0) { - _cE("view", _uM("key" to 0, "class" to "empty-orders"), _uA( - _cE("text", _uM("class" to "empty-text"), "暂无相关订单记录"), - _cE("button", _uM("class" to "start-shopping", "onClick" to _ctx.goShopping), "去逛逛", 8, _uA( - "onClick" - )) - )) - } else { - _cC("v-if", true) - } - , - _cE(Fragment, null, RenderHelpers.renderList(_ctx.filteredOrders, fun(order, __key, __index, _cached): Any { - return _cE("view", _uM("key" to order.id, "class" to "order-item", "onClick" to fun(){ - _ctx.viewOrderDetail(order) - } - ), _uA( - _cE("view", _uM("class" to "order-header"), _uA( - _cE("text", _uM("class" to "order-no"), "订单号: " + _tD(order.order_no), 1), - _cE("text", _uM("class" to _nC(_uA( - "order-status", - _ctx.getOrderStatusClass(order.status) - ))), _tD(_ctx.getOrderStatusText(order.status)), 3) - )), - _cE("view", _uM("class" to "order-content"), _uA( - _cE("image", _uM("src" to _ctx.getOrderMainImage(order), "class" to "order-image", "mode" to "aspectFill"), null, 8, _uA( - "src" - )), - _cE("view", _uM("class" to "order-info"), _uA( - _cE("text", _uM("class" to "order-title"), _tD(_ctx.getOrderTitle(order)), 1), - _cE("text", _uM("class" to "order-amount"), "¥" + _tD(order.actual_amount), 1), - _cE("text", _uM("class" to "order-time"), _tD(_ctx.formatTime(order.created_at)), 1) - )) - )), - _cE("view", _uM("class" to "order-actions"), _uA( - if (order.status === 1) { - _cE("button", _uM("key" to 0, "class" to "action-btn pay", "onClick" to withModifiers(fun(){ - _ctx.payOrder(order) - }, _uA( - "stop" - ))), "立即支付", 8, _uA( - "onClick" - )) - } else { - _cC("v-if", true) - } - , - if (order.status === 3) { - _cE("button", _uM("key" to 1, "class" to "action-btn confirm", "onClick" to withModifiers(fun(){ - _ctx.confirmReceive(order) - }, _uA( - "stop" - ))), "确认收货", 8, _uA( - "onClick" - )) - } else { - _cC("v-if", true) - } - , - if (order.status === 4) { - _cE("button", _uM("key" to 2, "class" to "action-btn review", "onClick" to withModifiers(fun(){ - _ctx.reviewOrder(order) - }, _uA( - "stop" - ))), "评价", 8, _uA( - "onClick" - )) - } else { - _cC("v-if", true) - } - )) - ), 8, _uA( - "onClick" - )) - } - ), 128) - )), - _cE("view", _uM("class" to "consumption-stats"), _uA( - _cE("view", _uM("class" to "section-title"), "消费统计"), - _cE("view", _uM("class" to "stats-period"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(_ctx.statsPeriods, fun(period, __key, __index, _cached): Any { - return _cE("text", _uM("key" to period.key, "class" to _nC(_uA( - "period-tab", - _uM("active" to (_ctx.activeStatsPeriod === period.key)) - )), "onClick" to fun(){ - _ctx.switchStatsPeriod(period.key) - } - ), _tD(period.label), 11, _uA( - "onClick" - )) - } - ), 128) - )), - _cE("view", _uM("class" to "stats-content"), _uA( - _cE("view", _uM("class" to "stat-card"), _uA( - _cE("text", _uM("class" to "stat-value"), "¥" + _tD(_ctx.currentStats.total_amount), 1), - _cE("text", _uM("class" to "stat-label"), "总消费") - )), - _cE("view", _uM("class" to "stat-card"), _uA( - _cE("text", _uM("class" to "stat-value"), _tD(_ctx.currentStats.order_count), 1), - _cE("text", _uM("class" to "stat-label"), "订单数") - )), - _cE("view", _uM("class" to "stat-card"), _uA( - _cE("text", _uM("class" to "stat-value"), "¥" + _tD(_ctx.currentStats.avg_amount), 1), - _cE("text", _uM("class" to "stat-label"), "平均消费") - )), - _cE("view", _uM("class" to "stat-card"), _uA( - _cE("text", _uM("class" to "stat-value"), _tD(_ctx.currentStats.save_amount), 1), - _cE("text", _uM("class" to "stat-label"), "节省金额") - )) - )) - )) - ), 4) - )) - } - open var userInfo: UserType by `$data` - open var userStats: UserStatsType__1 by `$data` - open var orderCounts: OrderCountsType by `$data` - open var serviceCounts: ServiceCountsType by `$data` - open var recentOrders: UTSArray by `$data` - open var statsPeriods: UTSArray by `$data` - open var activeStatsPeriod: String by `$data` - open var currentStats: ConsumptionStatsType by `$data` - open var statusBarHeight: Number by `$data` - open var currentOrderTab: String by `$data` - open var allOrders: UTSArray by `$data` - open var filteredOrders: UTSArray by `$data` - @Suppress("USELESS_CAST") - override fun data(): Map { - return _uM("userInfo" to UserType(id = "", phone = "", email = "", nickname = "", avatar_url = "", gender = 0, user_type = 0, status = 0, created_at = ""), "userStats" to UserStatsType__1(points = 0, balance = 0, level = 1), "orderCounts" to OrderCountsType(total = 0, pending = 0, toship = 0, shipped = 0, review = 0), "serviceCounts" to ServiceCountsType(coupons = 0, favorites = 0), "recentOrders" to _uA(), "statsPeriods" to _uA(StatsPeriodType(key = "month", label = "本月"), StatsPeriodType(key = "quarter", label = "本季度"), StatsPeriodType(key = "year", label = "本年"), StatsPeriodType(key = "all", label = "全部")), "activeStatsPeriod" to "month", "currentStats" to ConsumptionStatsType(total_amount = 0, order_count = 0, avg_amount = 0, save_amount = 0), "statusBarHeight" to 0, "currentOrderTab" to "all" as String, "allOrders" to _uA(), "filteredOrders" to computed>(fun(): UTSArray { - val result: UTSArray = _uA() - if (this.currentOrderTab === "all") { - run { - var i: Number = 0 - while(i < this.allOrders.length){ - result.push(this.allOrders[i]) - i++ - } - } - return result - } - var targetStatus: Number = 0 - if (this.currentOrderTab === "pending") { - targetStatus = 1 - } else if (this.currentOrderTab === "toship") { - targetStatus = 2 - } else if (this.currentOrderTab === "shipped") { - targetStatus = 3 - } else if (this.currentOrderTab === "review") { - targetStatus = 4 - } else { - return result - } - run { - var i: Number = 0 - while(i < this.allOrders.length){ - if (this.allOrders[i].status === targetStatus) { - result.push(this.allOrders[i]) - } - i++ - } - } - return result - } - )) - } - open var loadOrders = ::gen_loadOrders_fn - open fun gen_loadOrders_fn(): UTSPromise { - return wrapUTSPromise(suspend { - try { - val orders = await(supabaseService.getOrders()) - val mappedOrders: UTSArray = _uA() - run { - var i: Number = 0 - while(i < orders.length){ - val o = orders[i] as UTSJSONObject - val orderObj = UTSJSONObject(UTSSourceMapPosition("orderObj", "pages/mall/consumer/profile.uvue", 388, 17)) - val keys = UTSJSONObject.keys(o) - run { - var j: Number = 0 - while(j < keys.length){ - val key = keys[j] - orderObj.set(key, o.get(key)) - j++ - } - } - if (o.getNumber("status") == null && o.getNumber("order_status") != null) { - orderObj.set("status", o.getNumber("order_status")) - } - if (o.getNumber("actual_amount") == null && o.getNumber("total_amount") != null) { - orderObj.set("actual_amount", o.getNumber("total_amount")) - } - mappedOrders.push(orderObj as OrderType) - i++ - } - } - run { - var i: Number = 0 - while(i < mappedOrders.length){ - run { - var j: Number = i + 1 - while(j < mappedOrders.length){ - val dateA = mappedOrders[i]["created_at"] as String - val dateB = mappedOrders[j]["created_at"] as String - val timeA = Date(if (dateA != null) { - dateA - } else { - "1970-01-01" - } - ).getTime() - val timeB = Date(if (dateB != null) { - dateB - } else { - "1970-01-01" - } - ).getTime() - if (timeA < timeB) { - val temp = mappedOrders[i] - mappedOrders[i] = mappedOrders[j] - mappedOrders[j] = temp - } - j++ - } - } - i++ - } - } - this.allOrders = mappedOrders - val recentList: UTSArray = _uA() - val limit = if (mappedOrders.length < 5) { - mappedOrders.length - } else { - 5 - } - run { - var i: Number = 0 - while(i < limit){ - recentList.push(mappedOrders[i]) - i++ - } - } - this.recentOrders = recentList - var total: Number = 0 - var pending: Number = 0 - var toship: Number = 0 - var shipped: Number = 0 - var review: Number = 0 - run { - var i: Number = 0 - while(i < mappedOrders.length){ - total++ - val status = mappedOrders[i].status - if (status === 1) { - pending++ - } else if (status === 2) { - toship++ - } else if (status === 3) { - shipped++ - } else if (status === 4) { - review++ - } - i++ - } - } - this.orderCounts = OrderCountsType(total = total, pending = pending, toship = toship, shipped = shipped, review = review) - } - catch (e: Throwable) { - console.error("加载订单异常", e, " at pages/mall/consumer/profile.uvue:451") - } - }) - } - open var switchOrderTab = ::gen_switchOrderTab_fn - open fun gen_switchOrderTab_fn(tab: String) { - this.currentOrderTab = tab - } - open var getOrderSectionTitle = ::gen_getOrderSectionTitle_fn - open fun gen_getOrderSectionTitle_fn(): String { - if (this.currentOrderTab === "all") { - return "全部订单" - } - if (this.currentOrderTab === "pending") { - return "待支付订单" - } - if (this.currentOrderTab === "shipped") { - return "待收货订单" - } - if (this.currentOrderTab === "review") { - return "待评价订单" - } - return "我的订单" - } - open var initPage = ::gen_initPage_fn - open fun gen_initPage_fn() { - val systemInfo = uni_getSystemInfoSync() - this.statusBarHeight = systemInfo.statusBarHeight ?: 0 - } - open var loadUserProfile = ::gen_loadUserProfile_fn - open fun gen_loadUserProfile_fn(): UTSPromise { - return wrapUTSPromise(suspend { - try { - val profile = await(supabaseService.getUserProfile()) - if (profile != null) { - var uId = "" - var uPhone = "" - var uEmail = "" - var uNickname = "" - var uAvatar = "" - var uGender: Number = 0 - if (profile is UTSJSONObject) { - uId = (profile as UTSJSONObject).getString("user_id") ?: "" - uPhone = (profile as UTSJSONObject).getString("phone") ?: "" - uEmail = (profile as UTSJSONObject).getString("email") ?: "" - uNickname = (profile as UTSJSONObject).getString("nickname") ?: "" - uAvatar = (profile as UTSJSONObject).getString("avatar_url") ?: "" - uGender = (profile as UTSJSONObject).getNumber("gender") ?: 0 - } else { - val profileObj = profile as UTSJSONObject - uId = (profileObj.getString("user_id") ?: "") as String - uPhone = (profileObj.getString("phone") ?: "") as String - uEmail = (profileObj.getString("email") ?: "") as String - uNickname = (profileObj.getString("nickname") ?: "") as String - uAvatar = (profileObj.getString("avatar_url") ?: "") as String - uGender = (profileObj.getNumber("gender") ?: 0) as Number - } - if (uNickname === "" && uPhone !== "") { - uNickname = uPhone.substring(0, 3) + "****" + uPhone.substring(7) - } - this.userInfo = UserType(id = uId, phone = uPhone, email = uEmail, nickname = if (uNickname != "") { - uNickname - } else { - "微信用户" - }, avatar_url = if (uAvatar != "") { - uAvatar - } else { - "/static/default-avatar.png" - }, gender = uGender, user_type = 1, status = 1, created_at = Date().toISOString()) - } else { - val userId = supabaseService.getCurrentUserId() - if (userId != null) { - this.userInfo.id = userId - this.userInfo.nickname = "用户" + userId.substring(0, 4) - } else { - this.userInfo.nickname = "未登录" - } - } - val _ref = await(UTSPromise.all(_uA( - supabaseService.getUserBalance(), - supabaseService.getUserPoints() - ))) - val balance = _ref[0] - val points = _ref[1] - this.userStats = UserStatsType__1(points = points, balance = balance, level = this.calculateLevel(points)) - } - catch (e: Throwable) { - console.error("加载用户信息失败", e, " at pages/mall/consumer/profile.uvue:542") - } - }) - } - open var calculateLevel = ::gen_calculateLevel_fn - open fun gen_calculateLevel_fn(points: Number): Number { - if (points < 1000) { - return 0 - } - if (points < 5000) { - return 1 - } - if (points < 20000) { - return 2 - } - if (points < 50000) { - return 3 - } - return 4 - } - open var loadConsumptionStats = ::gen_loadConsumptionStats_fn - open fun gen_loadConsumptionStats_fn() { - if (this.activeStatsPeriod === "month") { - this.currentStats = ConsumptionStatsType(total_amount = 1280.50, order_count = 8, avg_amount = 160.06, save_amount = 85.20) - } else if (this.activeStatsPeriod === "quarter") { - this.currentStats = ConsumptionStatsType(total_amount = 3680.80, order_count = 18, avg_amount = 204.49, save_amount = 256.30) - } else if (this.activeStatsPeriod === "year") { - this.currentStats = ConsumptionStatsType(total_amount = 15680.90, order_count = 56, avg_amount = 280.02, save_amount = 986.50) - } else { - this.currentStats = ConsumptionStatsType(total_amount = 25680.50, order_count = 89, avg_amount = 288.55, save_amount = 1580.20) - } - } - open var refreshData = ::gen_refreshData_fn - open fun gen_refreshData_fn() { - this.loadUserProfile() - this.loadOrders() - this.updateCouponCount() - } - open var updateCouponCount = ::gen_updateCouponCount_fn - open fun gen_updateCouponCount_fn(): UTSPromise { - return wrapUTSPromise(suspend { - try { - val count = await(supabaseService.getUserCouponCount()) - this.serviceCounts.coupons = count - } - catch (e: Throwable) { - console.error("获取优惠券数量失败", e, " at pages/mall/consumer/profile.uvue:600") - this.serviceCounts.coupons = 0 - } - }) - } - open var getUserLevel = ::gen_getUserLevel_fn - open fun gen_getUserLevel_fn(): String { - val levels = _uA( - "新手", - "铜牌会员", - "银牌会员", - "金牌会员", - "钻石会员" - ) - if (this.userStats.level >= 0 && this.userStats.level < levels.length) { - return levels[this.userStats.level] - } - return "新手" - } - open var getOrderStatusText = ::gen_getOrderStatusText_fn - open fun gen_getOrderStatusText_fn(status: Number): String { - val statusTexts = _uA( - "异常", - "待支付", - "待发货", - "待收货", - "已完成", - "已取消" - ) - if (status >= 0 && status < statusTexts.length) { - return statusTexts[status] - } - return "未知" - } - open var getOrderStatusClass = ::gen_getOrderStatusClass_fn - open fun gen_getOrderStatusClass_fn(status: Number): String { - val statusClasses = _uA( - "error", - "pending", - "processing", - "shipping", - "completed", - "cancelled" - ) - if (status >= 0 && status < statusClasses.length) { - return statusClasses[status] - } - return "error" - } - open var getOrderMainImage = ::gen_getOrderMainImage_fn - open fun gen_getOrderMainImage_fn(order: Any): String { - val orderObj = order as UTSJSONObject - val itemsRaw = orderObj.get("ml_order_items") - if (itemsRaw == null) { - return "/static/product1.jpg" - } - val items = itemsRaw as UTSArray - if (items.length > 0) { - val firstItem = items[0] as UTSJSONObject - val imgUrl = firstItem.getString("image_url") ?: "" - val prodImg = firstItem.getString("product_image") ?: "" - val img = if (imgUrl !== "") { - imgUrl - } else { - prodImg - } - if (img !== "") { - return img - } - } - return "/static/product1.jpg" - } - open var getOrderTitle = ::gen_getOrderTitle_fn - open fun gen_getOrderTitle_fn(order: Any): String { - val orderObj = order as UTSJSONObject - val itemsRaw = orderObj.get("ml_order_items") - if (itemsRaw == null) { - return "精选商品" - } - val items = itemsRaw as UTSArray - if (items.length > 0) { - val firstItem = items[0] as UTSJSONObject - val pName = firstItem.getString("product_name") ?: "" - val name = if (pName !== "") { - pName - } else { - "商品" - } - if (items.length > 1) { - return "" + name + " 等" + items.length + "件商品" - } - return name - } - return "精选商品" - } - open var formatTime = ::gen_formatTime_fn - open fun gen_formatTime_fn(timeStr: String): String { - val date = Date(timeStr) - val now = Date() - val diff = now.getTime() - date.getTime() - val days = Math.floor(diff / 86400000) - if (days === 0) { - return "今天" - } else if (days === 1) { - return "昨天" - } else { - return "" + days + "天前" - } - } - open var switchStatsPeriod = ::gen_switchStatsPeriod_fn - open fun gen_switchStatsPeriod_fn(period: String) { - this.activeStatsPeriod = period - this.loadConsumptionStats() - } - open var editProfile = ::gen_editProfile_fn - open fun gen_editProfile_fn() { - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/edit-profile")) - } - open var goToSettings = ::gen_goToSettings_fn - open fun gen_goToSettings_fn() { - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/settings")) - } - open var goToWallet = ::gen_goToWallet_fn - open fun gen_goToWallet_fn() { - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/wallet")) - } - open var goToOrders = ::gen_goToOrders_fn - open fun gen_goToOrders_fn(type: String) { - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/orders?type=" + type)) - } - open var goShopping = ::gen_goShopping_fn - open fun gen_goShopping_fn() { - uni_switchTab(SwitchTabOptions(url = "/pages/mall/consumer/index")) - } - open var viewOrderDetail = ::gen_viewOrderDetail_fn - open fun gen_viewOrderDetail_fn(order: OrderType) { - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/order-detail?orderId=" + order.id)) - } - open var payOrder = ::gen_payOrder_fn - open fun gen_payOrder_fn(order: OrderType) { - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/payment?orderId=" + order.id)) - } - open var confirmReceive = ::gen_confirmReceive_fn - open fun gen_confirmReceive_fn(order: OrderType) { - uni_showModal(ShowModalOptions(title = "确认收货", content = "确认已收到商品吗?", success = fun(res){ - if (res.confirm) { - uni_showToast(ShowToastOptions(title = "确认收货成功", icon = "success")) - this.refreshData() - } - } - )) - } - open var reviewOrder = ::gen_reviewOrder_fn - open fun gen_reviewOrder_fn(order: OrderType) { - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/review?orderId=" + order.id)) - } - open var goToCoupons = ::gen_goToCoupons_fn - open fun gen_goToCoupons_fn() { - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/coupons")) - } - open var goToPoints = ::gen_goToPoints_fn - open fun gen_goToPoints_fn() { - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/points/index")) - } - open var goToAddress = ::gen_goToAddress_fn - open fun gen_goToAddress_fn() { - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/address-list")) - } - open var goToFavorites = ::gen_goToFavorites_fn - open fun gen_goToFavorites_fn() { - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/favorites")) - } - open var goToFootprint = ::gen_goToFootprint_fn - open fun gen_goToFootprint_fn() { - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/footprint")) - } - open var goToRefund = ::gen_goToRefund_fn - open fun gen_goToRefund_fn() { - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/orders?type=refund")) - } - open var contactService = ::gen_contactService_fn - open fun gen_contactService_fn() { - uni_navigateTo(NavigateToOptions(url = "/pages/mall/service/chat")) - } - open var goToOrderReviews = ::gen_goToOrderReviews_fn - open fun gen_goToOrderReviews_fn() { - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/orders?type=review")) - } - open var goToMySubscriptions = ::gen_goToMySubscriptions_fn - open fun gen_goToMySubscriptions_fn() { - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/subscription/my-subscriptions")) - } - open var goToFollowedShops = ::gen_goToFollowedShops_fn - open fun gen_goToFollowedShops_fn() { - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/subscription/followed-shops")) - } - open var goToSubscriptions = ::gen_goToSubscriptions_fn - open fun gen_goToSubscriptions_fn() { - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/subscription/plan-list")) - } - open var changePassword = ::gen_changePassword_fn - open fun gen_changePassword_fn() { - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/change-password")) - } - open var bindPhone = ::gen_bindPhone_fn - open fun gen_bindPhone_fn() { - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/bind-phone")) - } - open var bindEmail = ::gen_bindEmail_fn - open fun gen_bindEmail_fn() { - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/bind-email")) - } - open var handleOrderUpdated = ::gen_handleOrderUpdated_fn - open fun gen_handleOrderUpdated_fn(data: Any) { - console.log("收到订单更新事件:", data, " at pages/mall/consumer/profile.uvue:830") - this.refreshData() - val dataObj = data as UTSJSONObject - val status = dataObj.getNumber("status") - if (status === 1) { - uni_showToast(ShowToastOptions(title = "订单已保存到待支付", icon = "success")) - } else if (status === 2) { - uni_showToast(ShowToastOptions(title = "支付成功,订单待发货", icon = "success")) - } - } - companion object { - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("consumer-profile" to _pS(_uM("backgroundColor" to "#f5f5f5", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "display" to "flex", "flexDirection" to "column")), "smart-navbar" to _pS(_uM("position" to "fixed", "top" to 0, "left" to 0, "right" to 0, "backgroundImage" to "linear-gradient(135deg, #4CAF50 0%, #2E7D32 100%)", "backgroundColor" to "rgba(0,0,0,0)", "zIndex" to 1000, "boxShadow" to "0 2px 12px rgba(76, 175, 80, 0.15)", "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "center")), "nav-container" to _pS(_uM("paddingTop" to 0, "paddingRight" to 16, "paddingBottom" to 0, "paddingLeft" to 16, "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "space-between", "width" to "100%", "maxWidth" to 1400, "marginTop" to 0, "marginRight" to "auto", "marginBottom" to 0, "marginLeft" to "auto", "height" to 44)), "nav-user-stats" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "flex-start", "marginRight" to 12, "overflow" to "hidden")), "nav-user-name" to _pS(_uM("fontSize" to 16, "fontWeight" to "bold", "color" to "#FFFFFF", "marginRight" to 12, "width" to 100, "overflow" to "hidden", "textOverflow" to "ellipsis", "whiteSpace" to "nowrap")), "nav-stat-item" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center", "backgroundImage" to "none", "backgroundColor" to "rgba(255,255,255,0.2)", "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "paddingTop" to 2, "paddingRight" to 8, "paddingBottom" to 2, "paddingLeft" to 8, "marginRight" to 8, "flexShrink" to 0)), "nav-stat-label" to _pS(_uM("fontSize" to 11, "color" to "rgba(255,255,255,0.9)", "marginRight" to 4)), "nav-stat-value" to _pS(_uM("fontSize" to 12, "fontWeight" to "bold", "color" to "#FFFFFF")), "nav-avatar" to _pS(_uM("width" to 36, "height" to 36, "borderTopLeftRadius" to 18, "borderTopRightRadius" to 18, "borderBottomRightRadius" to 18, "borderBottomLeftRadius" to 18, "borderTopWidth" to 2, "borderRightWidth" to 2, "borderBottomWidth" to 2, "borderLeftWidth" to 2, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "rgba(255,255,255,0.8)", "borderRightColor" to "rgba(255,255,255,0.8)", "borderBottomColor" to "rgba(255,255,255,0.8)", "borderLeftColor" to "rgba(255,255,255,0.8)", "marginRight" to 12, "flexShrink" to 0)), "nav-actions" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center", "flexShrink" to 0)), "action-btn" to _uM("" to _uM("display" to "flex", "alignItems" to "center", "justifyContent" to "center", "width" to 32, "height" to 32, "backgroundImage" to "none", "backgroundColor" to "rgba(255,255,255,0.2)", "borderTopLeftRadius" to "20rpx", "borderTopRightRadius" to "20rpx", "borderBottomRightRadius" to "20rpx", "borderBottomLeftRadius" to "20rpx", "paddingTop" to "12rpx", "paddingRight" to "25rpx", "paddingBottom" to "12rpx", "paddingLeft" to "25rpx", "fontSize" to "24rpx", "borderTopWidth" to "medium", "borderRightWidth" to "medium", "borderBottomWidth" to "medium", "borderLeftWidth" to "medium", "borderTopStyle" to "none", "borderRightStyle" to "none", "borderBottomStyle" to "none", "borderLeftStyle" to "none", "borderTopColor" to "#000000", "borderRightColor" to "#000000", "borderBottomColor" to "#000000", "borderLeftColor" to "#000000"), ".order-actions " to _uM("marginLeft" to 15), ".pay" to _uM("backgroundColor" to "#ff4444", "color" to "#ffffff"), ".confirm" to _uM("backgroundColor" to "#4caf50", "color" to "#ffffff"), ".review" to _uM("backgroundColor" to "#ffa726", "color" to "#ffffff")), "action-icon" to _pS(_uM("fontSize" to 18, "color" to "#FFFFFF")), "navbar-placeholder" to _pS(_uM("width" to "100%", "flexShrink" to 0)), "order-shortcuts" to _pS(_uM("backgroundColor" to "#ffffff", "marginTop" to 15, "marginRight" to 15, "marginBottom" to 15, "marginLeft" to 15, "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "paddingTop" to 20, "paddingRight" to 20, "paddingBottom" to 20, "paddingLeft" to 20, "boxShadow" to "0 2px 8px rgba(0,0,0,0.05)")), "recent-orders" to _pS(_uM("backgroundColor" to "#ffffff", "marginTop" to 15, "marginRight" to 15, "marginBottom" to 15, "marginLeft" to 15, "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "paddingTop" to 20, "paddingRight" to 20, "paddingBottom" to 20, "paddingLeft" to 20, "boxShadow" to "0 2px 8px rgba(0,0,0,0.05)")), "my-services" to _pS(_uM("backgroundColor" to "#ffffff", "marginTop" to 15, "marginRight" to 15, "marginBottom" to 15, "marginLeft" to 15, "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "paddingTop" to 20, "paddingRight" to 20, "paddingBottom" to 20, "paddingLeft" to 20, "boxShadow" to "0 2px 8px rgba(0,0,0,0.05)")), "consumption-stats" to _pS(_uM("backgroundColor" to "#ffffff", "marginTop" to 15, "marginRight" to 15, "marginBottom" to 15, "marginLeft" to 15, "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "paddingTop" to 20, "paddingRight" to 20, "paddingBottom" to 20, "paddingLeft" to 20, "boxShadow" to "0 2px 8px rgba(0,0,0,0.05)")), "account-security" to _pS(_uM("backgroundColor" to "#ffffff", "marginTop" to 15, "marginRight" to 15, "marginBottom" to 15, "marginLeft" to 15, "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "paddingTop" to 20, "paddingRight" to 20, "paddingBottom" to 20, "paddingLeft" to 20, "boxShadow" to "0 2px 8px rgba(0,0,0,0.05)")), "section-title" to _pS(_uM("fontSize" to 16, "fontWeight" to "bold", "color" to "#333333", "marginBottom" to 16)), "order-tabs" to _pS(_uM("display" to "flex", "flexDirection" to "row", "justifyContent" to "space-between", "width" to "100%")), "order-tab" to _uM("" to _uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "center", "position" to "relative", "paddingTop" to 8, "paddingRight" to 0, "paddingBottom" to 8, "paddingLeft" to 0), ".active" to _uM("backgroundColor" to "#f0f9f0", "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8)), "tab-icon" to _uM("" to _uM("fontSize" to 20, "marginRight" to 6, "marginBottom" to 0), ".order-tab.active " to _uM("color" to "#4CAF50", "fontWeight" to "bold")), "tab-text" to _uM("" to _uM("fontSize" to 14, "color" to "#333333"), ".order-tab.active " to _uM("color" to "#4CAF50", "fontWeight" to "bold")), "tab-badge" to _pS(_uM("position" to "absolute", "top" to 0, "right" to "10%", "backgroundColor" to "#ff4444", "color" to "#ffffff", "fontSize" to 10, "paddingTop" to 1, "paddingRight" to 5, "paddingBottom" to 1, "paddingLeft" to 5, "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "minWidth" to 14, "textAlign" to "center", "lineHeight" to 1.2)), "empty-orders" to _pS(_uM("textAlign" to "center", "paddingTop" to "80rpx", "paddingRight" to 0, "paddingBottom" to "80rpx", "paddingLeft" to 0)), "empty-text" to _pS(_uM("fontSize" to "28rpx", "color" to "#999999", "marginBottom" to "30rpx")), "start-shopping" to _pS(_uM("backgroundColor" to "#007aff", "color" to "#ffffff", "paddingTop" to "20rpx", "paddingRight" to "40rpx", "paddingBottom" to "20rpx", "paddingLeft" to "40rpx", "borderTopLeftRadius" to "25rpx", "borderTopRightRadius" to "25rpx", "borderBottomRightRadius" to "25rpx", "borderBottomLeftRadius" to "25rpx", "fontSize" to "26rpx", "borderTopWidth" to "medium", "borderRightWidth" to "medium", "borderBottomWidth" to "medium", "borderLeftWidth" to "medium", "borderTopStyle" to "none", "borderRightStyle" to "none", "borderBottomStyle" to "none", "borderLeftStyle" to "none", "borderTopColor" to "#000000", "borderRightColor" to "#000000", "borderBottomColor" to "#000000", "borderLeftColor" to "#000000")), "order-item" to _pS(_uM("paddingTop" to "25rpx", "paddingRight" to 0, "paddingBottom" to "25rpx", "paddingLeft" to 0, "borderBottomWidth" to "1rpx", "borderBottomStyle" to "solid", "borderBottomColor" to "#f5f5f5", "borderBottomWidth:last-child" to "medium", "borderBottomStyle:last-child" to "none", "borderBottomColor:last-child" to "#000000")), "order-header" to _pS(_uM("display" to "flex", "justifyContent" to "space-between", "alignItems" to "center", "marginBottom" to "15rpx")), "order-no" to _pS(_uM("fontSize" to "26rpx", "color" to "#333333")), "order-status" to _uM("" to _uM("fontSize" to "24rpx", "paddingTop" to "6rpx", "paddingRight" to "12rpx", "paddingBottom" to "6rpx", "paddingLeft" to "12rpx", "borderTopLeftRadius" to "10rpx", "borderTopRightRadius" to "10rpx", "borderBottomRightRadius" to "10rpx", "borderBottomLeftRadius" to "10rpx", "color" to "#ffffff"), ".pending" to _uM("backgroundColor" to "#ffa726"), ".processing" to _uM("backgroundColor" to "#2196f3"), ".shipping" to _uM("backgroundColor" to "#9c27b0"), ".completed" to _uM("backgroundColor" to "#4caf50")), "order-content" to _pS(_uM("display" to "flex", "alignItems" to "center", "marginBottom" to "15rpx")), "order-image" to _pS(_uM("width" to "100rpx", "height" to "100rpx", "borderTopLeftRadius" to "8rpx", "borderTopRightRadius" to "8rpx", "borderBottomRightRadius" to "8rpx", "borderBottomLeftRadius" to "8rpx", "marginRight" to "20rpx")), "order-info" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "order-title" to _pS(_uM("fontSize" to "26rpx", "color" to "#333333", "marginBottom" to "8rpx")), "order-amount" to _pS(_uM("fontSize" to "28rpx", "color" to "#ff4444", "fontWeight" to "bold", "marginBottom" to "5rpx")), "order-time" to _pS(_uM("fontSize" to "22rpx", "color" to "#999999")), "order-actions" to _pS(_uM("display" to "flex", "justifyContent" to "flex-end")), "service-grid" to _pS(_uM("display" to "flex", "flexDirection" to "row", "flexWrap" to "wrap", "justifyContent" to "flex-start")), "service-item" to _pS(_uM("width" to "25%", "display" to "flex", "flexDirection" to "column", "alignItems" to "center", "position" to "relative", "boxSizing" to "border-box", "marginBottom" to 16)), "service-icon" to _pS(_uM("fontSize" to "48rpx", "marginBottom" to "15rpx")), "service-text" to _pS(_uM("fontSize" to "24rpx", "color" to "#333333")), "service-badge" to _pS(_uM("position" to "absolute", "top" to "-5rpx", "right" to "10rpx", "backgroundColor" to "#ff4444", "color" to "#ffffff", "fontSize" to "18rpx", "paddingTop" to "4rpx", "paddingRight" to "6rpx", "paddingBottom" to "4rpx", "paddingLeft" to "6rpx", "borderTopLeftRadius" to "8rpx", "borderTopRightRadius" to "8rpx", "borderBottomRightRadius" to "8rpx", "borderBottomLeftRadius" to "8rpx", "minWidth" to "24rpx", "textAlign" to "center")), "stats-period" to _pS(_uM("display" to "flex", "marginBottom" to "30rpx")), "period-tab" to _uM("" to _uM("fontSize" to "26rpx", "color" to "#666666", "paddingTop" to "12rpx", "paddingRight" to "24rpx", "paddingBottom" to "12rpx", "paddingLeft" to "24rpx", "borderTopLeftRadius" to "20rpx", "borderTopRightRadius" to "20rpx", "borderBottomRightRadius" to "20rpx", "borderBottomLeftRadius" to "20rpx", "marginRight" to "30rpx", "backgroundColor" to "#f0f0f0"), ".active" to _uM("backgroundColor" to "#007aff", "color" to "#ffffff")), "stats-content" to _pS(_uM("display" to "flex")), "stat-card" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "textAlign" to "center", "paddingTop" to "30rpx", "paddingRight" to 0, "paddingBottom" to "30rpx", "paddingLeft" to 0, "backgroundColor" to "#f8f9fa", "borderTopLeftRadius" to "10rpx", "borderTopRightRadius" to "10rpx", "borderBottomRightRadius" to "10rpx", "borderBottomLeftRadius" to "10rpx", "marginRight" to "20rpx", "marginRight:last-child" to 0)), "stat-value" to _pS(_uM("fontSize" to "32rpx", "fontWeight" to "bold", "color" to "#333333", "marginBottom" to "8rpx")), "stat-label" to _pS(_uM("fontSize" to "22rpx", "color" to "#666666")), "security-items" to _pS(_uM("marginTop" to "25rpx")), "security-item" to _pS(_uM("display" to "flex", "alignItems" to "center", "paddingTop" to "25rpx", "paddingRight" to 0, "paddingBottom" to "25rpx", "paddingLeft" to 0, "borderBottomWidth" to "1rpx", "borderBottomStyle" to "solid", "borderBottomColor" to "#f5f5f5", "borderBottomWidth:last-child" to "medium", "borderBottomStyle:last-child" to "none", "borderBottomColor:last-child" to "#000000")), "security-icon" to _pS(_uM("fontSize" to "32rpx", "marginRight" to "20rpx")), "security-text" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "fontSize" to "28rpx", "color" to "#333333")), "security-status" to _pS(_uM("display" to "flex", "alignItems" to "center")), "status-text" to _uM("" to _uM("fontSize" to "24rpx", "color" to "#999999", "marginRight" to "10rpx"), ".bound" to _uM("color" to "#4caf50")), "security-arrow" to _pS(_uM("fontSize" to "24rpx", "color" to "#999999"))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/mall/consumer/red-packets/index.kt b/unpackage/cache/.app-android/src/pages/mall/consumer/red-packets/index.kt deleted file mode 100644 index 9003c1ad..00000000 --- a/unpackage/cache/.app-android/src/pages/mall/consumer/red-packets/index.kt +++ /dev/null @@ -1,190 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.switchTab as uni_switchTab -open class GenPagesMallConsumerRedPacketsIndex : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesMallConsumerRedPacketsIndex) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesMallConsumerRedPacketsIndex - val _cache = __ins.renderCache - val loading = ref(true) - val currentTab = ref(0) - val packets = ref(_uA()) - val filteredPackets = computed(fun(): UTSArray { - val result: UTSArray = _uA() - if (currentTab.value === 0) { - run { - var i: Number = 0 - while(i < packets.value.length){ - if (packets.value[i].status === 0) { - result.push(packets.value[i]) - } - i++ - } - } - } else { - run { - var i: Number = 0 - while(i < packets.value.length){ - if (packets.value[i].status !== 0) { - result.push(packets.value[i]) - } - i++ - } - } - } - return result - } - ) - val loadData = fun(): UTSPromise { - return wrapUTSPromise(suspend { - loading.value = true - try { - val rawList = await(supabaseService.getUserRedPackets()) - val mappedList: UTSArray = _uA() - run { - var i: Number = 0 - while(i < rawList.length){ - val item = rawList[i] as UTSJSONObject - val packet: RedPacket = RedPacket(id = item.getString("id") ?: "", user_id = "", amount = item.getNumber("amount") ?: 0, name = item.getString("name") ?: "", status = item.getNumber("status") ?: 0, expire_at = item.getString("expire_at") ?: "", created_at = item.getString("created_at") ?: "") - mappedList.push(packet) - i++ - } - } - packets.value = mappedList - } - catch (e: Throwable) { - console.error(e, " at pages/mall/consumer/red-packets/index.uvue:98") - } - finally { - loading.value = false - } - }) - } - onMounted(fun(){ - loadData() - } - ) - val usePacket = fun(item: RedPacket){ - uni_switchTab(SwitchTabOptions(url = "/pages/mall/consumer/index")) - } - val getStatusText = fun(status: Number): String { - if (status === 1) { - return "已使用" - } - if (status === 2) { - return "已过期" - } - return "" - } - val formatTime = fun(timeStr: String): String { - if (timeStr == "") { - return "永久有效" - } - val date = Date(timeStr) - return "" + date.getFullYear() + "-" + (date.getMonth() + 1).toString(10).padStart(2, "0") + "-" + date.getDate().toString(10).padStart(2, "0") - } - return fun(): Any? { - return _cE("view", _uM("class" to "red-packets-page"), _uA( - _cE("view", _uM("class" to "tab-header", "style" to _nS(_uM("position" to "fixed", "top" to "0", "left" to "0", "right" to "0", "z-index" to "10"))), _uA( - _cE("text", _uM("class" to _nC(_uA( - "tab-item", - _uM("active" to (currentTab.value === 0)) - )), "onClick" to fun(){ - currentTab.value = 0 - } - ), "未使用", 10, _uA( - "onClick" - )), - _cE("text", _uM("class" to _nC(_uA( - "tab-item", - _uM("active" to (currentTab.value === 1)) - )), "onClick" to fun(){ - currentTab.value = 1 - } - ), "已使用/过期", 10, _uA( - "onClick" - )) - ), 4), - if (isTrue(loading.value)) { - _cE("view", _uM("key" to 0, "class" to "loading-state"), _uA( - _cE("text", null, "加载中...") - )) - } else { - _cE("scroll-view", _uM("key" to 1, "class" to "packet-list", "direction" to "vertical"), _uA( - if (filteredPackets.value.length === 0) { - _cE("view", _uM("key" to 0, "class" to "empty-state"), _uA( - _cE("text", _uM("class" to "empty-text"), "暂无相关红包") - )) - } else { - _cE(Fragment, _uM("key" to 1), RenderHelpers.renderList(filteredPackets.value, fun(item, __key, __index, _cached): Any { - return _cE("view", _uM("key" to item.id, "class" to _nC(_uA( - "packet-item", - _uM("disabled" to (item.status !== 0)) - ))), _uA( - _cE("view", _uM("class" to "packet-left"), _uA( - _cE("text", _uM("class" to "packet-amount"), _uA( - "¥", - _cE("text", _uM("class" to "amount-num"), _tD(item.amount), 1) - )), - _cE("text", _uM("class" to "packet-condition"), "无门槛") - )), - _cE("view", _uM("class" to "packet-right"), _uA( - _cE("view", _uM("class" to "packet-info"), _uA( - _cE("text", _uM("class" to "packet-name"), _tD(item.name), 1), - _cE("text", _uM("class" to "packet-date"), "有效期至 " + _tD(formatTime(item.expire_at)), 1) - )), - _cE("view", _uM("class" to "packet-action"), _uA( - if (item.status === 0) { - _cE("button", _uM("key" to 0, "class" to "use-btn", "onClick" to fun(){ - usePacket(item) - }), "立即使用", 8, _uA( - "onClick" - )) - } else { - _cE("text", _uM("key" to 1, "class" to "status-text"), _tD(getStatusText(item.status)), 1) - } - )) - )) - ), 2) - } - ), 128) - } - )) - } - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("red-packets-page" to _pS(_uM("backgroundColor" to "#f5f5f5", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "tab-header" to _pS(_uM("display" to "flex", "backgroundColor" to "#ffffff", "paddingTop" to 10, "paddingRight" to 0, "paddingBottom" to 10, "paddingLeft" to 0)), "tab-item" to _uM("" to _uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "textAlign" to "center", "fontSize" to 14, "color" to "#666666", "paddingBottom" to 8, "borderBottomWidth" to 2, "borderBottomStyle" to "solid", "borderBottomColor" to "rgba(0,0,0,0)"), ".active" to _uM("color" to "#ff5000", "borderBottomColor" to "#ff5000", "fontWeight" to "bold")), "packet-list" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15)), "packet-item" to _pS(_uM("display" to "flex", "backgroundColor" to "#ffffff", "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "marginBottom" to 12, "overflow" to "hidden", "boxShadow" to "0 2px 4px rgba(0,0,0,0.05)")), "packet-left" to _uM(".packet-item.disabled " to _uM("color" to "#999999", "backgroundColor" to "#e0e0e0"), "" to _uM("width" to 100, "backgroundColor" to "#fff5f0", "color" to "#ff5000", "display" to "flex", "flexDirection" to "column", "alignItems" to "center", "justifyContent" to "center", "paddingTop" to 15, "paddingRight" to 0, "paddingBottom" to 15, "paddingLeft" to 0)), "packet-name" to _uM(".packet-item.disabled " to _uM("color" to "#999999", "backgroundColor" to "#f0f0f0"), "" to _uM("fontSize" to 16, "fontWeight" to "bold", "color" to "#333333", "marginBottom" to 8)), "amount-num" to _uM(".packet-item.disabled " to _uM("color" to "#999999", "backgroundColor" to "#f0f0f0"), "" to _uM("fontSize" to 28, "fontWeight" to "bold")), "packet-amount" to _pS(_uM("fontSize" to 14)), "packet-condition" to _pS(_uM("fontSize" to 12, "marginTop" to 4)), "packet-right" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "display" to "flex", "justifyContent" to "space-between", "alignItems" to "center")), "packet-info" to _pS(_uM("display" to "flex", "flexDirection" to "column")), "packet-date" to _pS(_uM("fontSize" to 12, "color" to "#999999")), "use-btn" to _pS(_uM("fontSize" to 12, "backgroundColor" to "#ff5000", "color" to "#ffffff", "borderTopLeftRadius" to 15, "borderTopRightRadius" to 15, "borderBottomRightRadius" to 15, "borderBottomLeftRadius" to 15, "paddingTop" to 4, "paddingRight" to 12, "paddingBottom" to 4, "paddingLeft" to 12, "lineHeight" to 1.5)), "status-text" to _pS(_uM("fontSize" to 14, "color" to "#999999")), "loading-state" to _pS(_uM("paddingTop" to 40, "paddingRight" to 40, "paddingBottom" to 40, "paddingLeft" to 40, "alignItems" to "center", "justifyContent" to "center", "display" to "flex")), "empty-state" to _pS(_uM("paddingTop" to 40, "paddingRight" to 40, "paddingBottom" to 40, "paddingLeft" to 40, "alignItems" to "center", "justifyContent" to "center", "display" to "flex"))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/mall/consumer/refund-review.kt b/unpackage/cache/.app-android/src/pages/mall/consumer/refund-review.kt deleted file mode 100644 index c1c680f4..00000000 --- a/unpackage/cache/.app-android/src/pages/mall/consumer/refund-review.kt +++ /dev/null @@ -1,115 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.navigateBack as uni_navigateBack -import io.dcloud.uniapp.extapi.showToast as uni_showToast -open class GenPagesMallConsumerRefundReview : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesMallConsumerRefundReview) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesMallConsumerRefundReview - val _cache = __ins.renderCache - val rating = ref(5) - val comment = ref("") - val submitting = ref(false) - val ratingText = computed(fun(): String { - val texts = _uA( - "非常不满意", - "不满意", - "一般", - "满意", - "非常满意" - ) - return texts[rating.value - 1] - } - ) - val setRating = fun(kVal: Number){ - rating.value = kVal - } - val submitReview = fun(){ - if (submitting.value) { - return - } - submitting.value = true - setTimeout(fun(){ - uni_showToast(ShowToastOptions(title = "评价成功", icon = "success")) - setTimeout(fun(){ - uni_navigateBack(null) - } - , 1500) - submitting.value = false - } - , 1000) - } - return fun(): Any? { - return _cE("view", _uM("class" to "review-page"), _uA( - _cE("view", _uM("class" to "header"), _uA( - _cE("text", _uM("class" to "title"), "服务评价"), - _cE("text", _uM("class" to "subtitle"), "请对本次售后服务进行评价") - )), - _cE("view", _uM("class" to "rating-section"), _uA( - _cE("text", _uM("class" to "label"), "服务评分"), - _cE("view", _uM("class" to "stars"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(5, fun(i, __key, __index, _cached): Any { - return _cE("text", _uM("key" to i, "class" to _nC(_uA( - "star", - _uM("active" to (i <= rating.value)) - )), "onClick" to fun(){ - setRating(i) - } - ), "★", 10, _uA( - "onClick" - )) - } - ), 64) - )), - _cE("text", _uM("class" to "rating-text"), _tD(ratingText.value), 1) - )), - _cE("view", _uM("class" to "comment-section"), _uA( - _cE("textarea", _uM("modelValue" to comment.value, "onInput" to fun(`$event`: UniInputEvent){ - comment.value = `$event`.detail.value - } - , "class" to "comment-input", "placeholder" to "请输入您的评价内容,您的建议是我们改进的动力", "maxlength" to "200"), null, 40, _uA( - "modelValue", - "onInput" - )), - _cE("text", _uM("class" to "word-count"), _tD(comment.value.length) + "/200", 1) - )), - _cE("button", _uM("class" to "submit-btn", "onClick" to submitReview, "loading" to submitting.value), "提交评价", 8, _uA( - "loading" - )) - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("review-page" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "backgroundColor" to "#ffffff", "paddingTop" to 20, "paddingRight" to 20, "paddingBottom" to 20, "paddingLeft" to 20)), "header" to _pS(_uM("marginBottom" to 30, "textAlign" to "center")), "title" to _pS(_uM("fontSize" to 20, "fontWeight" to "bold", "color" to "#333333", "marginBottom" to 10)), "subtitle" to _pS(_uM("fontSize" to 14, "color" to "#999999")), "rating-section" to _pS(_uM("display" to "flex", "flexDirection" to "column", "alignItems" to "center", "marginBottom" to 30)), "label" to _pS(_uM("fontSize" to 16, "color" to "#333333", "marginBottom" to 15)), "stars" to _pS(_uM("display" to "flex", "marginBottom" to 10)), "star" to _uM("" to _uM("marginRight" to 10, "fontSize" to 32, "color" to "#dddddd", "transitionProperty" to "color", "transitionDuration" to "0.2s"), ".active" to _uM("color" to "#ffca28")), "rating-text" to _pS(_uM("fontSize" to 14, "color" to "#666666")), "comment-section" to _pS(_uM("position" to "relative", "marginBottom" to 30)), "comment-input" to _pS(_uM("width" to "100%", "height" to 120, "backgroundColor" to "#f5f5f5", "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "fontSize" to 14, "boxSizing" to "border-box")), "word-count" to _pS(_uM("position" to "absolute", "bottom" to 10, "right" to 10, "fontSize" to 12, "color" to "#999999")), "submit-btn" to _pS(_uM("backgroundColor" to "#007aff", "color" to "#ffffff", "borderTopLeftRadius" to 25, "borderTopRightRadius" to 25, "borderBottomRightRadius" to 25, "borderBottomLeftRadius" to 25, "fontSize" to 16, "fontWeight" to "bold", "height" to 50, "lineHeight" to "50px")), "@TRANSITION" to _uM("star" to _uM("property" to "color", "duration" to "0.2s"))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/mall/consumer/refund.kt b/unpackage/cache/.app-android/src/pages/mall/consumer/refund.kt deleted file mode 100644 index 91753ce5..00000000 --- a/unpackage/cache/.app-android/src/pages/mall/consumer/refund.kt +++ /dev/null @@ -1,571 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.navigateBack as uni_navigateBack -import io.dcloud.uniapp.extapi.navigateTo as uni_navigateTo -import io.dcloud.uniapp.extapi.showModal as uni_showModal -import io.dcloud.uniapp.extapi.showToast as uni_showToast -import io.dcloud.uniapp.extapi.switchTab as uni_switchTab -open class GenPagesMallConsumerRefund : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesMallConsumerRefund) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesMallConsumerRefund - val _cache = __ins.renderCache - val activeTab = ref("all") - val refunds = ref(_uA()) - val tabCounts = ref(TabCountsType(processing = 0)) - val isLoading = ref(false) - val currentPage = ref(1) - val pageSize = ref(15) - val hasMore = ref(true) - val getCurrentUserId = fun(): String { - return supabaseService.getCurrentUserId() ?: "" - } - val resetData = fun(){ - refunds.value = _uA() - currentPage.value = 1 - hasMore.value = true - } - val loadRefunds = fun(loadMore: Boolean): UTSPromise { - return wrapUTSPromise(suspend w1@{ - if (isLoading.value || (!hasMore.value && loadMore)) { - return@w1 - } - isLoading.value = true - try { - val userId = getCurrentUserId() - if (userId == "") { - uni_navigateTo(NavigateToOptions(url = "/pages/user/login")) - return@w1 - } - val page = if (loadMore) { - currentPage.value + 1 - } else { - 1 - } - var statusList: UTSArray = _uA() - if (activeTab.value === "processing") { - statusList = _uA( - 1, - 2 - ) - } else if (activeTab.value === "completed") { - statusList = _uA( - 3, - 4, - 5 - ) - } - val rawData = await(supabaseService.getRefunds(statusList, page, pageSize.value)) - val newRefunds: UTSArray = _uA() - run { - var i: Number = 0 - while(i < rawData.length){ - val item = rawData[i] as UTSJSONObject - val orderObjRaw = item.get("order") - val orderObj = if ((orderObjRaw != null)) { - (orderObjRaw as UTSJSONObject) - } else { - UTSJSONObject() - } - val dbItemsRaw = orderObj.get("ml_order_items") - val dbItems = if ((dbItemsRaw != null)) { - (dbItemsRaw as UTSArray) - } else { - _uA() - } - val uiItems: UTSArray = _uA() - run { - var j: Number = 0 - while(j < dbItems.length){ - val di = dbItems[j] as UTSJSONObject - val imgRaw = di.get("image_url") - val imgUrl = if ((imgRaw != null)) { - (imgRaw as String) - } else { - "/static/default-product.png" - } - val productInfo: RefundProductInfo = RefundProductInfo(images = _uA( - imgUrl - )) - val specRaw = di.get("specifications") - val specifications = if ((specRaw != null)) { - (specRaw as Any) - } else { - null - } - val orderItem: RefundOrderItem = RefundOrderItem(id = di.getString("id") ?: "", product_name = di.getString("product_name") ?: "", sku_specifications = specifications, price = 0, quantity = di.getNumber("quantity") ?: 1, product = productInfo) - uiItems.push(orderItem) - j++ - } - } - val statusHistoryRaw = item.get("status_history") - val statusHistory = if ((statusHistoryRaw != null)) { - (statusHistoryRaw as UTSArray) - } else { - _uA() - } - val refundItem: RefundType = RefundType(id = item.getString("id") ?: "", user_id = item.getString("user_id") ?: "", order_id = item.getString("order_id") ?: "", refund_no = item.getString("refund_no") ?: "", refund_type = item.getNumber("refund_type") ?: 1, refund_reason = item.getString("refund_reason") ?: "", refund_amount = item.getNumber("refund_amount") ?: 0, status = item.getNumber("status") ?: 1, status_history = statusHistory, created_at = item.getString("created_at") ?: "", order = RefundOrderInfo(id = item.getString("order_id") ?: "", order_no = orderObj.getString("order_no") ?: "", created_at = orderObj.getString("created_at") ?: "", order_items = uiItems)) - newRefunds.push(refundItem) - i++ - } - } - if (loadMore) { - refunds.value.push(*newRefunds.toTypedArray()) - currentPage.value = page - } else { - refunds.value = newRefunds - currentPage.value = 1 - } - hasMore.value = newRefunds.length === pageSize.value - } - catch (err: Throwable) { - console.error("加载售后记录异常:", err, " at pages/mall/consumer/refund.uvue:261") - } - finally { - isLoading.value = false - } - }) - } - val loadTabCounts = fun(): UTSPromise { - return wrapUTSPromise(suspend w1@{ - val userId = getCurrentUserId() - if (userId == "") { - return@w1 - } - try { - val processingRefunds = await(supabaseService.getRefunds(_uA( - 1, - 2 - ), 1, 100)) - tabCounts.value.processing = processingRefunds.length - } - catch (err: Throwable) { - console.error("加载计数异常:", err, " at pages/mall/consumer/refund.uvue:275") - } - }) - } - watch(activeTab, fun(){ - resetData() - loadRefunds(false) - } - ) - onMounted(fun(){ - loadRefunds(false) - loadTabCounts() - } - ) - val getStatusText = fun(status: Number): String { - if (status === 1) { - return "待处理" - } - if (status === 2) { - return "处理中" - } - if (status === 3) { - return "已完成" - } - if (status === 4) { - return "已取消" - } - if (status === 5) { - return "已拒绝" - } - return "未知状态" - } - val getStatusClass = fun(status: Number): String { - if (status === 1) { - return "status-pending" - } - if (status === 2) { - return "status-processing" - } - if (status === 3) { - return "status-completed" - } - if (status === 4) { - return "status-cancelled" - } - if (status === 5) { - return "status-rejected" - } - return "status-unknown" - } - val getProductImage = fun(refund: RefundType): String { - val firstItem = refund.order?.order_items?.get(0) - if (firstItem?.product?.images == null || firstItem?.product?.images?.length == 0) { - return "/static/default-product.png" - } - return firstItem.product!!.images[0] - } - val getProductName = fun(refund: RefundType): String { - val items = refund.order?.order_items ?: _uA() - if (items.length === 0) { - return "未知商品" - } - if (items.length === 1) { - return items[0].product_name - } else { - return "" + items[0].product_name + "等" + items.length + "件商品" - } - } - val formatTime = fun(timeStr: String?): String { - if (timeStr == null || timeStr == "") { - return "" - } - val date = Date(timeStr) - val month = (date.getMonth() + 1).toString(10).padStart(2, "0") - val day = date.getDate().toString(10).padStart(2, "0") - return "" + month + "-" + day - } - val getCurrentStepIndex = fun(status: Number): Number { - if (status === 1) { - return 0 - } - if (status === 2) { - return 1 - } - if (status === 3) { - return 2 - } - if (status === 4) { - return 0 - } - if (status === 5) { - return 1 - } - return 0 - } - val getTimelineSteps = fun(refund: RefundType): UTSArray { - val steps = _uA( - TimelineStepType(status = 0, title = "提交申请", time = refund.created_at, active = false, completed = false, desc = ""), - TimelineStepType(status = 1, title = "商家处理", time = "", active = false, completed = false, desc = ""), - TimelineStepType(status = 3, title = "退款完成", time = "", active = false, completed = false, desc = "") - ) as UTSArray - if (refund.status_history != null) { - run { - var i: Number = 0 - while(i < refund.status_history!!.length){ - val history = refund.status_history!![i] - if (history.status === 1 || history.status === 2) { - steps[1].time = history.created_at ?: "" - steps[1].desc = history.remark ?: "" - } else if (history.status === 3) { - steps[2].time = history.created_at ?: "" - steps[2].desc = history.remark ?: "" - } - i++ - } - } - } - val currentStepIndex = getCurrentStepIndex(refund.status) - val result: UTSArray = _uA() - run { - var i: Number = 0 - while(i < steps.length){ - val step = steps[i] - result.push(TimelineStepType(status = step.status, title = step.title, time = step.time, desc = step.desc, active = i === currentStepIndex, completed = i < currentStepIndex)) - i++ - } - } - return result - } - val changeTab = fun(tab: String){ - activeTab.value = tab - } - val loadMore = fun(){ - if (hasMore.value && !isLoading.value) { - loadRefunds(true) - } - } - val viewOrder = fun(orderId: String){ - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/order-detail?id=" + orderId)) - } - val doCancelRefund = fun(refund: RefundType): UTSPromise { - return wrapUTSPromise(suspend { - try { - val result = await(supabaseService.createRefund(object : UTSJSONObject() { - var id = refund.id - var status: Number = 4 - } as Any)) - if (result.success) { - refund.status = 4 - loadTabCounts() - uni_showToast(ShowToastOptions(title = "已取消", icon = "success")) - } else { - uni_showToast(ShowToastOptions(title = "取消失败", icon = "none")) - } - } - catch (err: Throwable) { - console.error("取消退款失败:", err, " at pages/mall/consumer/refund.uvue:431") - uni_showToast(ShowToastOptions(title = "取消失败", icon = "none")) - } - }) - } - val cancelRefund = fun(refund: RefundType){ - uni_showModal(ShowModalOptions(title = "取消申请", content = "确定要取消这个退款申请吗?", success = fun(res){ - if (res.confirm) { - doCancelRefund(refund) - } - } - )) - } - val contactService = fun(refund: RefundType){ - uni_navigateTo(NavigateToOptions(url = "/pages/mall/service/chat?refundId=" + refund.id)) - } - val reviewRefund = fun(refund: RefundType){ - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/refund-review?id=" + refund.id)) - } - val doDeleteRefund = fun(refund: RefundType): UTSPromise { - return wrapUTSPromise(suspend { - try { - val result = await(supabaseService.deleteRefund(refund.id)) - if (result) { - val newRefunds: UTSArray = _uA() - run { - var i: Number = 0 - while(i < refunds.value.length){ - if (refunds.value[i].id !== refund.id) { - newRefunds.push(refunds.value[i]) - } - i++ - } - } - refunds.value = newRefunds - uni_showToast(ShowToastOptions(title = "删除成功", icon = "success")) - } else { - uni_showToast(ShowToastOptions(title = "删除失败", icon = "none")) - } - } - catch (err: Throwable) { - console.error("删除记录失败:", err, " at pages/mall/consumer/refund.uvue:489") - uni_showToast(ShowToastOptions(title = "删除失败", icon = "none")) - } - }) - } - val deleteRefund = fun(refund: RefundType){ - uni_showModal(ShowModalOptions(title = "删除记录", content = "确定要删除这个售后记录吗?", success = fun(res){ - if (res.confirm) { - doDeleteRefund(refund) - } - } - )) - } - val applyRefund = fun(){ - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/apply-refund")) - } - val goToOrders = fun(){ - uni_switchTab(SwitchTabOptions(url = "/pages/mall/consumer/orders")) - } - val goBack = fun(){ - uni_navigateBack(null) - } - return fun(): Any? { - return _cE("view", _uM("class" to "refund-page"), _uA( - _cE("view", _uM("class" to "refund-header"), _uA( - _cE("text", _uM("class" to "back-btn", "onClick" to goBack), "‹"), - _cE("text", _uM("class" to "header-title"), "退款/售后") - )), - _cE("view", _uM("class" to "refund-tabs"), _uA( - _cE("view", _uM("class" to _nC(_uA( - "refund-tab", - _uM("active" to (activeTab.value === "all")) - )), "onClick" to fun(){ - changeTab("all") - } - ), _uA( - _cE("text", _uM("class" to "tab-text"), "全部") - ), 10, _uA( - "onClick" - )), - _cE("view", _uM("class" to _nC(_uA( - "refund-tab", - _uM("active" to (activeTab.value === "processing")) - )), "onClick" to fun(){ - changeTab("processing") - } - ), _uA( - _cE("text", _uM("class" to "tab-text"), "处理中"), - if (tabCounts.value.processing > 0) { - _cE("text", _uM("key" to 0, "class" to "tab-badge"), _tD(tabCounts.value.processing), 1) - } else { - _cC("v-if", true) - } - ), 10, _uA( - "onClick" - )), - _cE("view", _uM("class" to _nC(_uA( - "refund-tab", - _uM("active" to (activeTab.value === "completed")) - )), "onClick" to fun(){ - changeTab("completed") - } - ), _uA( - _cE("text", _uM("class" to "tab-text"), "已完成") - ), 10, _uA( - "onClick" - )) - )), - _cE("scroll-view", _uM("class" to "refund-content", "direction" to "vertical", "onScrolltolower" to loadMore), _uA( - if (isTrue(refunds.value.length === 0 && !isLoading.value)) { - _cE("view", _uM("key" to 0, "class" to "empty-refunds"), _uA( - _cE("text", _uM("class" to "empty-icon"), "🔄"), - _cE("text", _uM("class" to "empty-text"), "暂无售后记录"), - _cE("text", _uM("class" to "empty-subtext"), "您可以在订单详情中申请售后"), - _cE("button", _uM("class" to "go-orders-btn", "onClick" to goToOrders), "查看订单") - )) - } else { - _cC("v-if", true) - } - , - _cE(Fragment, null, RenderHelpers.renderList(refunds.value, fun(refund, __key, __index, _cached): Any { - return _cE("view", _uM("key" to refund.id, "class" to "refund-item"), _uA( - _cE("view", _uM("class" to "refund-header"), _uA( - _cE("text", _uM("class" to "refund-no"), "售后单号: " + _tD(refund.refund_no), 1), - _cE("text", _uM("class" to _nC(_uA( - "refund-status", - getStatusClass(refund.status) - ))), _tD(getStatusText(refund.status)), 3) - )), - _cE("view", _uM("class" to "order-info"), _uA( - _cE("text", _uM("class" to "order-no"), "订单号: " + _tD(refund.order?.order_no), 1), - _cE("text", _uM("class" to "order-time"), _tD(formatTime(refund.order?.created_at)), 1) - )), - _cE("view", _uM("class" to "product-info", "onClick" to fun(){ - viewOrder(refund.order_id) - } - ), _uA( - _cE("image", _uM("class" to "product-image", "src" to getProductImage(refund)), null, 8, _uA( - "src" - )), - _cE("view", _uM("class" to "product-details"), _uA( - _cE("text", _uM("class" to "product-name"), _tD(getProductName(refund)), 1), - if (isTrue(refund.refund_reason)) { - _cE("text", _uM("key" to 0, "class" to "refund-reason"), "原因: " + _tD(refund.refund_reason), 1) - } else { - _cC("v-if", true) - } - , - _cE("view", _uM("class" to "refund-amount"), _uA( - _cE("text", _uM("class" to "amount-label"), "退款金额:"), - _cE("text", _uM("class" to "amount-value"), "¥" + _tD(refund.refund_amount), 1) - )) - )) - ), 8, _uA( - "onClick" - )), - if (isTrue(refund.status_history != null && refund.status_history!!.length > 0)) { - _cE("view", _uM("key" to 0, "class" to "timeline"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(getTimelineSteps(refund), fun(step, index, __index, _cached): Any { - return _cE("view", _uM("key" to index, "class" to "timeline-step"), _uA( - _cE("view", _uM("class" to _nC(_uA( - "step-dot", - _uM("active" to step.active, "completed" to step.completed) - ))), null, 2), - _cE("view", _uM("class" to "step-info"), _uA( - _cE("text", _uM("class" to "step-title"), _tD(step.title), 1), - _cE("text", _uM("class" to "step-time"), _tD(step.time), 1), - if (isTrue(step.desc)) { - _cE("text", _uM("key" to 0, "class" to "step-desc"), _tD(step.desc), 1) - } else { - _cC("v-if", true) - } - )) - )) - }), 128) - )) - } else { - _cC("v-if", true) - } - , - if (refund.status === 1) { - _cE("view", _uM("key" to 1, "class" to "refund-actions"), _uA( - _cE("button", _uM("class" to "action-btn cancel", "onClick" to fun(){ - cancelRefund(refund) - }), "取消申请", 8, _uA( - "onClick" - )), - _cE("button", _uM("class" to "action-btn contact", "onClick" to fun(){ - contactService(refund) - }), "联系客服", 8, _uA( - "onClick" - )) - )) - } else { - _cC("v-if", true) - } - , - if (refund.status === 3) { - _cE("view", _uM("key" to 2, "class" to "refund-actions"), _uA( - _cE("button", _uM("class" to "action-btn review", "onClick" to fun(){ - reviewRefund(refund) - }), "评价服务", 8, _uA( - "onClick" - )), - _cE("button", _uM("class" to "action-btn delete", "onClick" to fun(){ - deleteRefund(refund) - }), "删除记录", 8, _uA( - "onClick" - )) - )) - } else { - _cC("v-if", true) - } - )) - } - ), 128), - if (isTrue(isLoading.value)) { - _cE("view", _uM("key" to 1, "class" to "loading-more"), _uA( - _cE("text", _uM("class" to "loading-text"), "加载中...") - )) - } else { - _cC("v-if", true) - } - , - if (isTrue(!hasMore.value && refunds.value.length > 0)) { - _cE("view", _uM("key" to 2, "class" to "no-more"), _uA( - _cE("text", _uM("class" to "no-more-text"), "没有更多了") - )) - } else { - _cC("v-if", true) - } - ), 32), - _cE("view", _uM("class" to "apply-btn-container"), _uA( - _cE("button", _uM("class" to "apply-btn", "onClick" to applyRefund), "申请售后") - )) - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("refund-page" to _pS(_uM("display" to "flex", "flexDirection" to "column", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "backgroundColor" to "#f5f5f5")), "refund-header" to _pS(_uM("backgroundColor" to "#ffffff", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 10, "paddingLeft" to 15, "display" to "flex", "alignItems" to "center", "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#f5f5f5", "justifyContent" to "space-between", "marginBottom" to 10)), "back-btn" to _pS(_uM("fontSize" to 24, "color" to "#333333", "paddingTop" to 5, "paddingRight" to 5, "paddingBottom" to 5, "paddingLeft" to 5, "marginRight" to 15)), "header-title" to _pS(_uM("fontSize" to 18, "fontWeight" to "bold", "color" to "#333333")), "refund-tabs" to _pS(_uM("backgroundColor" to "#ffffff", "display" to "flex", "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#e5e5e5")), "refund-tab" to _uM("" to _uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "textAlign" to "center", "position" to "relative"), ".active" to _uM("color" to "#007aff", "borderBottomWidth" to 2, "borderBottomStyle" to "solid", "borderBottomColor" to "#007aff")), "tab-text" to _uM("" to _uM("fontSize" to 16, "color" to "#666666"), ".refund-tab.active " to _uM("color" to "#007aff", "fontWeight" to "bold")), "tab-badge" to _pS(_uM("position" to "absolute", "top" to 10, "right" to 20, "backgroundColor" to "#ff4757", "color" to "#ffffff", "fontSize" to 10, "paddingTop" to 2, "paddingRight" to 5, "paddingBottom" to 2, "paddingLeft" to 5, "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "minWidth" to 16, "textAlign" to "center")), "refund-content" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "empty-refunds" to _pS(_uM("display" to "flex", "flexDirection" to "column", "alignItems" to "center", "justifyContent" to "center", "paddingTop" to 80, "paddingRight" to 20, "paddingBottom" to 80, "paddingLeft" to 20, "backgroundColor" to "#ffffff")), "empty-icon" to _pS(_uM("fontSize" to 80, "marginBottom" to 20)), "empty-text" to _pS(_uM("fontSize" to 16, "color" to "#666666", "marginBottom" to 10)), "empty-subtext" to _pS(_uM("fontSize" to 14, "color" to "#999999", "marginBottom" to 30)), "go-orders-btn" to _pS(_uM("backgroundColor" to "#007aff", "color" to "#ffffff", "paddingTop" to 10, "paddingRight" to 40, "paddingBottom" to 10, "paddingLeft" to 40, "borderTopLeftRadius" to 25, "borderTopRightRadius" to 25, "borderBottomRightRadius" to 25, "borderBottomLeftRadius" to 25, "fontSize" to 14, "borderTopWidth" to "medium", "borderRightWidth" to "medium", "borderBottomWidth" to "medium", "borderLeftWidth" to "medium", "borderTopStyle" to "none", "borderRightStyle" to "none", "borderBottomStyle" to "none", "borderLeftStyle" to "none", "borderTopColor" to "#000000", "borderRightColor" to "#000000", "borderBottomColor" to "#000000", "borderLeftColor" to "#000000")), "refund-item" to _pS(_uM("backgroundColor" to "#ffffff", "marginBottom" to 10, "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15)), "refund-no" to _pS(_uM("fontSize" to 14, "color" to "#333333")), "refund-status" to _pS(_uM("fontSize" to 14, "paddingTop" to 4, "paddingRight" to 10, "paddingBottom" to 4, "paddingLeft" to 10, "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "color" to "#ffffff")), "status-pending" to _pS(_uM("backgroundColor" to "#ffa726")), "status-processing" to _pS(_uM("backgroundColor" to "#2196f3")), "status-completed" to _pS(_uM("backgroundColor" to "#4caf50")), "status-cancelled" to _pS(_uM("backgroundColor" to "#9e9e9e")), "status-rejected" to _pS(_uM("backgroundColor" to "#f44336")), "order-info" to _pS(_uM("display" to "flex", "justifyContent" to "space-between", "alignItems" to "center", "marginBottom" to 15, "paddingBottom" to 10, "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#f5f5f5")), "order-no" to _pS(_uM("fontSize" to 13, "color" to "#666666")), "order-time" to _pS(_uM("fontSize" to 12, "color" to "#999999")), "product-info" to _pS(_uM("display" to "flex", "marginBottom" to 15)), "product-image" to _pS(_uM("width" to 60, "height" to 60, "borderTopLeftRadius" to 5, "borderTopRightRadius" to 5, "borderBottomRightRadius" to 5, "borderBottomLeftRadius" to 5, "marginRight" to 15)), "product-details" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "display" to "flex", "flexDirection" to "column", "justifyContent" to "space-between")), "product-name" to _pS(_uM("fontSize" to 14, "color" to "#333333", "lineHeight" to 1.4, "marginBottom" to 5)), "refund-reason" to _pS(_uM("fontSize" to 12, "color" to "#666666", "marginBottom" to 8)), "refund-amount" to _pS(_uM("display" to "flex", "alignItems" to "flex-end")), "amount-label" to _pS(_uM("fontSize" to 13, "color" to "#666666", "marginRight" to 5)), "amount-value" to _pS(_uM("fontSize" to 16, "color" to "#ff4757", "fontWeight" to "bold")), "timeline" to _pS(_uM("paddingTop" to 15, "paddingRight" to 0, "paddingBottom" to 15, "paddingLeft" to 0, "borderTopWidth" to 1, "borderTopStyle" to "solid", "borderTopColor" to "#f5f5f5")), "timeline-step" to _pS(_uM("display" to "flex", "marginBottom" to 15, "marginBottom:last-child" to 0)), "step-dot" to _uM("" to _uM("width" to 12, "height" to 12, "borderTopLeftRadius" to 6, "borderTopRightRadius" to 6, "borderBottomRightRadius" to 6, "borderBottomLeftRadius" to 6, "borderTopWidth" to 2, "borderRightWidth" to 2, "borderBottomWidth" to 2, "borderLeftWidth" to 2, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#e5e5e5", "borderRightColor" to "#e5e5e5", "borderBottomColor" to "#e5e5e5", "borderLeftColor" to "#e5e5e5", "marginRight" to 15, "position" to "relative", "top" to 3), ".active" to _uM("borderTopColor" to "#007aff", "borderRightColor" to "#007aff", "borderBottomColor" to "#007aff", "borderLeftColor" to "#007aff", "backgroundColor" to "#007aff"), ".completed" to _uM("borderTopColor" to "#4caf50", "borderRightColor" to "#4caf50", "borderBottomColor" to "#4caf50", "borderLeftColor" to "#4caf50", "backgroundColor" to "#4caf50")), "step-info" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "step-title" to _pS(_uM("fontSize" to 14, "color" to "#333333", "fontWeight" to "bold", "marginBottom" to 3)), "step-time" to _pS(_uM("fontSize" to 12, "color" to "#999999", "marginBottom" to 3)), "step-desc" to _pS(_uM("fontSize" to 12, "color" to "#666666")), "refund-actions" to _pS(_uM("display" to "flex", "justifyContent" to "flex-end", "paddingTop" to 15, "borderTopWidth" to 1, "borderTopStyle" to "solid", "borderTopColor" to "#f5f5f5")), "action-btn" to _uM("" to _uM("marginLeft" to 10, "paddingTop" to 6, "paddingRight" to 15, "paddingBottom" to 6, "paddingLeft" to 15, "borderTopLeftRadius" to 15, "borderTopRightRadius" to 15, "borderBottomRightRadius" to 15, "borderBottomLeftRadius" to 15, "fontSize" to 12, "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#000000", "borderRightColor" to "#000000", "borderBottomColor" to "#000000", "borderLeftColor" to "#000000", "backgroundColor" to "#ffffff"), ".cancel" to _uM("borderTopColor" to "#666666", "borderRightColor" to "#666666", "borderBottomColor" to "#666666", "borderLeftColor" to "#666666", "color" to "#666666"), ".contact" to _uM("borderTopColor" to "#007aff", "borderRightColor" to "#007aff", "borderBottomColor" to "#007aff", "borderLeftColor" to "#007aff", "color" to "#007aff"), ".review" to _uM("borderTopColor" to "#ffa726", "borderRightColor" to "#ffa726", "borderBottomColor" to "#ffa726", "borderLeftColor" to "#ffa726", "color" to "#ffa726"), ".delete" to _uM("borderTopColor" to "#f44336", "borderRightColor" to "#f44336", "borderBottomColor" to "#f44336", "borderLeftColor" to "#f44336", "color" to "#f44336")), "loading-more" to _pS(_uM("paddingTop" to 20, "paddingRight" to 20, "paddingBottom" to 20, "paddingLeft" to 20, "textAlign" to "center", "backgroundColor" to "#ffffff")), "no-more" to _pS(_uM("paddingTop" to 20, "paddingRight" to 20, "paddingBottom" to 20, "paddingLeft" to 20, "textAlign" to "center", "backgroundColor" to "#ffffff")), "loading-text" to _pS(_uM("color" to "#999999", "fontSize" to 14)), "no-more-text" to _pS(_uM("color" to "#999999", "fontSize" to 14)), "apply-btn-container" to _pS(_uM("backgroundColor" to "#ffffff", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "borderTopWidth" to 1, "borderTopStyle" to "solid", "borderTopColor" to "#e5e5e5")), "apply-btn" to _pS(_uM("backgroundColor" to "#007aff", "color" to "#ffffff", "height" to 50, "borderTopLeftRadius" to 25, "borderTopRightRadius" to 25, "borderBottomRightRadius" to 25, "borderBottomLeftRadius" to 25, "fontSize" to 16, "fontWeight" to "bold", "borderTopWidth" to "medium", "borderRightWidth" to "medium", "borderBottomWidth" to "medium", "borderLeftWidth" to "medium", "borderTopStyle" to "none", "borderRightStyle" to "none", "borderBottomStyle" to "none", "borderLeftStyle" to "none", "borderTopColor" to "#000000", "borderRightColor" to "#000000", "borderBottomColor" to "#000000", "borderLeftColor" to "#000000"))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/mall/consumer/review.kt b/unpackage/cache/.app-android/src/pages/mall/consumer/review.kt deleted file mode 100644 index adf20c66..00000000 --- a/unpackage/cache/.app-android/src/pages/mall/consumer/review.kt +++ /dev/null @@ -1,584 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.chooseImage as uni_chooseImage -import io.dcloud.uniapp.extapi.getStorageSync as uni_getStorageSync -import io.dcloud.uniapp.extapi.hideLoading as uni_hideLoading -import io.dcloud.uniapp.extapi.navigateBack as uni_navigateBack -import io.dcloud.uniapp.framework.onShow as onShow__1 -import io.dcloud.uniapp.framework.onLoad as onLoad__1 -import io.dcloud.uniapp.extapi.showLoading as uni_showLoading -import io.dcloud.uniapp.extapi.showToast as uni_showToast -open class GenPagesMallConsumerReview : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesMallConsumerReview) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesMallConsumerReview - val _cache = __ins.renderCache - val orderId = ref("") - val order = ref(null) - val orderItems = ref(_uA()) - val merchant = ref(null) - val ratings = ref(_uA()) - val contents = ref(_uA()) - val images = ref(_uA>()) - val anonymous = ref(false) - val merchantRating = ref(MerchantRatingType(description = 5, logistics = 5, service = 5)) - val isSubmitting = ref(false) - val loadOrderData = fun(): UTSPromise { - return wrapUTSPromise(suspend w1@{ - try { - val orderRes = await(supaInstance.from("ml_orders").select("*").eq("id", orderId.value).single().execute()) - if (orderRes.error != null) { - console.error("加载订单失败:", orderRes.error, " at pages/mall/consumer/review.uvue:206") - return@w1 - } - if (orderRes.data != null) { - val orderData = orderRes.data as UTSJSONObject - order.value = OrderType__2(id = orderData.getString("id") ?: "", order_no = orderData.getString("order_no") ?: "", created_at = orderData.getString("created_at") ?: "", merchant_id = orderData.getString("merchant_id") ?: "") - } - val itemsRes = await(supaInstance.from("ml_order_items").select("\n\t\t\t\t*,\n\t\t\t\tproduct:product_id(images)\n\t\t\t").eq("order_id", orderId.value).execute()) - if (itemsRes.error != null) { - console.error("加载订单商品失败:", itemsRes.error, " at pages/mall/consumer/review.uvue:230") - return@w1 - } - val rawData = itemsRes.data - var itemsArray: UTSArray = _uA() - if (rawData != null) { - itemsArray = rawData as UTSArray - } - val processedItems: UTSArray = _uA() - run { - var i: Number = 0 - while(i < itemsArray.length){ - val item = itemsArray[i] as UTSJSONObject - val productObjRaw = item.get("product") - val productObj = if ((productObjRaw != null)) { - (productObjRaw as UTSJSONObject) - } else { - null - } - val imagesArrRaw = if ((productObj != null)) { - productObj.get("images") - } else { - null - } - val imagesArr = if ((imagesArrRaw != null)) { - (imagesArrRaw as UTSArray) - } else { - _uA() - } - val firstImage = if ((imagesArr.length > 0)) { - imagesArr[0] - } else { - "/static/default-product.png" - } - val skuSpecRaw = item.get("sku_specifications") - val skuSpec = if ((skuSpecRaw != null)) { - (skuSpecRaw as Any) - } else { - null - } - val processedItem = OrderItemType__1(id = (item.getNumber("id") ?: 0) as Number, order_id = (item.getNumber("order_id") ?: 0) as Number, product_id = (item.getNumber("product_id") ?: 0) as Number, product_name = item.getString("product_name") ?: "", price = (item.getNumber("price") ?: 0) as Number, quantity = (item.getNumber("quantity") ?: 1) as Number, sku_specifications = skuSpec, product_image = firstImage) - processedItems.push(processedItem) - i++ - } - } - orderItems.value = processedItems - val count = orderItems.value.length - val newRatings: UTSArray = _uA() - val newContents: UTSArray = _uA() - val newImages: UTSArray> = _uA() - run { - var i: Number = 0 - while(i < count){ - newRatings.push(5) - newContents.push("") - newImages.push(_uA()) - i++ - } - } - ratings.value = newRatings - contents.value = newContents - images.value = newImages - val orderObj = order.value as UTSJSONObject - val merchantId = orderObj.getString("merchant_id") - if (merchantId != null && merchantId !== "") { - val merchantRes = await(supaInstance.from("ml_shops").select("id, shop_name, rating").eq("id", merchantId).single().execute()) - if (merchantRes.error == null && merchantRes.data != null) { - merchant.value = merchantRes.data as MerchantType__1 - } - } - } - catch (err: Throwable) { - console.error("加载订单数据异常:", err, " at pages/mall/consumer/review.uvue:293") - } - }) - } - val canSubmit = computed(fun(): Boolean { - if (ratings.value.length === 0) { - return false - } - run { - var i: Number = 0 - while(i < ratings.value.length){ - if (ratings.value[i] <= 0) { - return false - } - i++ - } - } - return true - } - ) - onLoad__1(fun(options: Any){ - if (options != null) { - val optObj = options as UTSJSONObject - orderId.value = optObj.getString("orderId") ?: "" - if (orderId.value != "") { - loadOrderData() - } - } - } - ) - val formatTime = fun(timeStr: String?): String { - if (timeStr == null) { - return "" - } - val date = Date(timeStr) - val year = date.getFullYear() - val month = (date.getMonth() + 1).toString(10).padStart(2, "0") - val day = date.getDate().toString(10).padStart(2, "0") - return "" + year + "-" + month + "-" + day - } - val getSpecText = fun(specs: Any?): String { - if (specs == null) { - return "" - } - if (specs is UTSJSONObject) { - return "规格信息" - } - return specs as String - } - val getRatingText = fun(rating: Number): String { - if (rating === 1) { - return "非常差" - } - if (rating === 2) { - return "差" - } - if (rating === 3) { - return "一般" - } - if (rating === 4) { - return "好" - } - if (rating === 5) { - return "非常好" - } - return "未评价" - } - val setRating = fun(index: Number, rating: Number){ - ratings.value[index] = rating - val newRatings: UTSArray = _uA() - run { - var i: Number = 0 - while(i < ratings.value.length){ - newRatings.push(ratings.value[i]) - i++ - } - } - ratings.value = newRatings - } - val setMerchantRating = fun(type: String, rating: Number){ - if (type === "description") { - merchantRating.value.description = rating - } else if (type === "logistics") { - merchantRating.value.logistics = rating - } else if (type === "service") { - merchantRating.value.service = rating - } - } - val toggleAnonymous = fun(event: Any){ - val eventObj = event as UTSJSONObject - val detailRaw = eventObj.get("detail") - val detail = if (detailRaw != null) { - (detailRaw as UTSJSONObject) - } else { - UTSJSONObject() - } - val valueRaw = detail.get("value") - anonymous.value = if (valueRaw != null) { - (valueRaw as Boolean) - } else { - false - } - } - val uploadImage = fun(index: Number): UTSPromise { - return wrapUTSPromise(suspend w1@{ - if (images.value[index].length >= 9) { - uni_showToast(ShowToastOptions(title = "最多上传9张图片", icon = "none")) - return@w1 - } - uni_chooseImage(ChooseImageOptions(count = 9 - images.value[index].length, sizeType = _uA( - "compressed" - ), sourceType = _uA( - "album", - "camera" - ), success = fun(res){ - val resObj = res as UTSJSONObject - val tempFilesRaw = resObj.get("tempFilePaths") - val tempFiles = if (tempFilesRaw != null) { - (tempFilesRaw as UTSArray) - } else { - _uA() - } - uni_showLoading(ShowLoadingOptions(title = "上传中...")) - setTimeout(fun(){ - run { - var i: Number = 0 - while(i < tempFiles.length){ - images.value[index].push(tempFiles[i]) - i++ - } - } - val newImages: UTSArray> = _uA() - run { - var i: Number = 0 - while(i < images.value.length){ - val innerArray: UTSArray = _uA() - run { - var j: Number = 0 - while(j < images.value[i].length){ - innerArray.push(images.value[i][j]) - j++ - } - } - newImages.push(innerArray) - i++ - } - } - images.value = newImages - uni_hideLoading() - uni_showToast(ShowToastOptions(title = "上传成功", icon = "success")) - } - , 1000) - } - )) - }) - } - val deleteImage = fun(index: Number, imgIndex: Number){ - images.value[index].splice(imgIndex, 1) - val newImages: UTSArray> = _uA() - run { - var i: Number = 0 - while(i < images.value.length){ - val innerArray: UTSArray = _uA() - run { - var j: Number = 0 - while(j < images.value[i].length){ - innerArray.push(images.value[i][j]) - j++ - } - } - newImages.push(innerArray) - i++ - } - } - images.value = newImages - } - val getCurrentUserId = fun(): String { - val userStore = uni_getStorageSync("userInfo") - if (userStore == null) { - return "" - } - val userInfo = userStore as UTSJSONObject - return userInfo.getString("id") ?: "" - } - val submitReview = fun(): UTSPromise { - return wrapUTSPromise(suspend w1@{ - if (canSubmit.value === false || isSubmitting.value) { - return@w1 - } - isSubmitting.value = true - try { - val userId = getCurrentUserId() - if (userId == "") { - uni_showToast(ShowToastOptions(title = "用户信息错误", icon = "none")) - return@w1 - } - val productReviews: UTSArray = _uA() - run { - var index: Number = 0 - while(index < orderItems.value.length){ - val item = orderItems.value[index] - val reviewObj: UTSJSONObject = UTSJSONObject(UTSSourceMapPosition("reviewObj", "pages/mall/consumer/review.uvue", 470, 10)) - reviewObj.set("user_id", userId) - reviewObj.set("product_id", item.product_id) - reviewObj.set("order_id", orderId.value) - reviewObj.set("rating", ratings.value[index]) - reviewObj.set("content", if (contents.value[index] != "") { - contents.value[index] - } else { - "" - } - ) - reviewObj.set("images", images.value[index]) - reviewObj.set("is_anonymous", anonymous.value) - productReviews.push(reviewObj) - index++ - } - } - val reviewsSuccess = await(supabaseService.submitProductReviews(productReviews)) - if (reviewsSuccess == false) { - uni_showToast(ShowToastOptions(title = "提交失败", icon = "none")) - isSubmitting.value = false - return@w1 - } - if (merchant.value != null) { - val merchantReviewObj: UTSJSONObject = UTSJSONObject(UTSSourceMapPosition("merchantReviewObj", "pages/mall/consumer/review.uvue", 500, 10)) - merchantReviewObj.set("user_id", userId) - merchantReviewObj.set("shop_id", merchant.value!!.id) - merchantReviewObj.set("order_id", orderId.value) - merchantReviewObj.set("description_rating", merchantRating.value.description) - merchantReviewObj.set("logistics_rating", merchantRating.value.logistics) - merchantReviewObj.set("service_rating", merchantRating.value.service) - await(supabaseService.submitShopReview(merchantReviewObj)) - } - await(supabaseService.updateOrderStatus(orderId.value, 4)) - uni_showToast(ShowToastOptions(title = "评价成功", icon = "success", duration = 2000)) - setTimeout(fun(){ - uni_navigateBack(null) - } - , 1500) - } - catch (err: Throwable) { - console.error("提交评价失败:", err, " at pages/mall/consumer/review.uvue:525") - uni_showToast(ShowToastOptions(title = "提交失败", icon = "none")) - } - finally { - isSubmitting.value = false - } - }) - } - val goBack = fun(): Unit { - uni_navigateBack(null) - } - return fun(): Any? { - val _component_switch = resolveComponent("switch") - return _cE("view", _uM("class" to "review-page"), _uA( - _cE("view", _uM("class" to "review-header"), _uA( - _cE("text", _uM("class" to "back-btn", "onClick" to goBack), "‹"), - _cE("text", _uM("class" to "header-title"), "评价商品") - )), - _cE("scroll-view", _uM("class" to "review-content", "direction" to "vertical"), _uA( - _cE("view", _uM("class" to "order-section"), _uA( - _cE("text", _uM("class" to "order-no"), "订单号: " + _tD(if (order.value != null) { - order.value!!.order_no - } else { - "" - } - ), 1), - _cE("text", _uM("class" to "order-time"), "下单时间: " + _tD(formatTime(if (order.value != null) { - order.value!!.created_at - } else { - "" - } - )), 1) - )), - _cE("view", _uM("class" to "products-section"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(orderItems.value, fun(item, index, __index, _cached): Any { - return _cE("view", _uM("key" to item.id, "class" to "product-review"), _uA( - _cE("view", _uM("class" to "product-header"), _uA( - _cE("image", _uM("class" to "product-image", "src" to (item.product_image ?: "/static/default-product.png")), null, 8, _uA( - "src" - )), - _cE("view", _uM("class" to "product-info"), _uA( - _cE("text", _uM("class" to "product-name"), _tD(item.product_name), 1), - if (item.sku_specifications != null) { - _cE("text", _uM("key" to 0, "class" to "product-spec"), _tD(getSpecText(item.sku_specifications)), 1) - } else { - _cC("v-if", true) - } - )) - )), - _cE("view", _uM("class" to "rating-section"), _uA( - _cE("text", _uM("class" to "rating-label"), "评分"), - _cE("view", _uM("class" to "rating-stars"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(5, fun(star, __key, __index, _cached): Any { - return _cE("text", _uM("key" to star, "class" to _nC(_uA( - "star-icon", - _uM("active" to (star <= ratings.value[index])) - )), "onClick" to fun(){ - setRating(index, star) - } - ), " ⭐ ", 10, _uA( - "onClick" - )) - } - ), 64) - )), - _cE("text", _uM("class" to "rating-text"), _tD(getRatingText(ratings.value[index])), 1) - )), - _cE("view", _uM("class" to "content-section"), _uA( - _cE("textarea", _uM("class" to "review-textarea", "modelValue" to contents.value[index], "onInput" to fun(`$event`: UniInputEvent){ - contents.value[index] = `$event`.detail.value - } - , "placeholder" to "请写下您的使用感受,分享给其他小伙伴吧", "maxlength" to "500"), null, 40, _uA( - "modelValue", - "onInput" - )), - _cE("text", _uM("class" to "word-count"), _tD(contents.value[index]?.length ?: 0) + "/500", 1) - )), - _cE("view", _uM("class" to "images-section"), _uA( - _cE("text", _uM("class" to "images-label"), "上传图片(可选)"), - _cE("view", _uM("class" to "images-grid"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(images.value[index], fun(image, imgIndex, __index, _cached): Any { - return _cE("view", _uM("key" to imgIndex, "class" to "image-item"), _uA( - _cE("image", _uM("class" to "uploaded-image", "src" to image), null, 8, _uA( - "src" - )), - _cE("text", _uM("class" to "delete-image", "onClick" to fun(){ - deleteImage(index, imgIndex) - } - ), "×", 8, _uA( - "onClick" - )) - )) - } - ), 128), - if (images.value[index].length < 9) { - _cE("view", _uM("key" to 0, "class" to "upload-btn", "onClick" to fun(){ - uploadImage(index) - }), _uA( - _cE("text", _uM("class" to "upload-icon"), "+"), - _cE("text", _uM("class" to "upload-text"), "添加图片") - ), 8, _uA( - "onClick" - )) - } else { - _cC("v-if", true) - } - )) - )), - _cE("view", _uM("class" to "anonymous-section"), _uA( - _cE("view", _uM("class" to "anonymous-switch"), _uA( - _cE("text", _uM("class" to "switch-label"), "匿名评价"), - _cV(_component_switch, _uM("checked" to anonymous.value, "onChange" to toggleAnonymous), null, 8, _uA( - "checked" - )) - )), - _cE("text", _uM("class" to "anonymous-tip"), "评价内容对其他用户不可见") - )) - )) - } - ), 128) - )), - if (isTrue(merchant.value)) { - _cE("view", _uM("key" to 0, "class" to "merchant-section"), _uA( - _cE("text", _uM("class" to "section-title"), "店铺评价"), - _cE("view", _uM("class" to "merchant-rating"), _uA( - _cE("text", _uM("class" to "rating-item"), "商品描述相符"), - _cE("view", _uM("class" to "rating-stars small"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(5, fun(star, __key, __index, _cached): Any { - return _cE("text", _uM("key" to star, "class" to _nC(_uA( - "star-icon", - _uM("active" to (star <= merchantRating.value.description)) - )), "onClick" to fun(){ - setMerchantRating("description", star) - }), " ⭐ ", 10, _uA( - "onClick" - )) - }), 64) - )) - )), - _cE("view", _uM("class" to "merchant-rating"), _uA( - _cE("text", _uM("class" to "rating-item"), "物流服务"), - _cE("view", _uM("class" to "rating-stars small"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(5, fun(star, __key, __index, _cached): Any { - return _cE("text", _uM("key" to star, "class" to _nC(_uA( - "star-icon", - _uM("active" to (star <= merchantRating.value.logistics)) - )), "onClick" to fun(){ - setMerchantRating("logistics", star) - }), " ⭐ ", 10, _uA( - "onClick" - )) - }), 64) - )) - )), - _cE("view", _uM("class" to "merchant-rating"), _uA( - _cE("text", _uM("class" to "rating-item"), "服务态度"), - _cE("view", _uM("class" to "rating-stars small"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(5, fun(star, __key, __index, _cached): Any { - return _cE("text", _uM("key" to star, "class" to _nC(_uA( - "star-icon", - _uM("active" to (star <= merchantRating.value.service)) - )), "onClick" to fun(){ - setMerchantRating("service", star) - }), " ⭐ ", 10, _uA( - "onClick" - )) - }), 64) - )) - )) - )) - } else { - _cC("v-if", true) - } - , - _cE("view", _uM("class" to "tips-section"), _uA( - _cE("text", _uM("class" to "tip-title"), "评价须知"), - _cE("text", _uM("class" to "tip-item"), "1. 评价后不可修改,请谨慎评价"), - _cE("text", _uM("class" to "tip-item"), "2. 上传图片需为真实商品照片"), - _cE("text", _uM("class" to "tip-item"), "3. 恶意评价将被删除并限制评价功能"), - _cE("text", _uM("class" to "tip-item"), "4. 优质评价可获得积分奖励") - )) - )), - _cE("view", _uM("class" to "submit-section"), _uA( - _cE("button", _uM("class" to _nC(_uA( - "submit-btn", - _uM("disabled" to (canSubmit.value === false || isSubmitting.value)) - )), "onClick" to submitReview), _uA( - if (isSubmitting.value === false) { - _cE("text", _uM("key" to 0, "class" to "submit-text"), "提交评价") - } else { - _cE("text", _uM("key" to 1, "class" to "submit-text"), "提交中...") - } - ), 2) - )) - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("review-page" to _pS(_uM("display" to "flex", "flexDirection" to "column", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "backgroundColor" to "#f5f5f5")), "review-header" to _pS(_uM("backgroundColor" to "#ffffff", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "display" to "flex", "alignItems" to "center", "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#e5e5e5")), "back-btn" to _pS(_uM("fontSize" to 24, "color" to "#333333", "paddingTop" to 5, "paddingRight" to 5, "paddingBottom" to 5, "paddingLeft" to 5, "marginRight" to 15)), "header-title" to _pS(_uM("fontSize" to 18, "fontWeight" to "bold", "color" to "#333333")), "review-content" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "order-section" to _pS(_uM("backgroundColor" to "#ffffff", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "marginBottom" to 10, "display" to "flex", "justifyContent" to "space-between", "alignItems" to "center")), "order-no" to _pS(_uM("fontSize" to 14, "color" to "#333333")), "order-time" to _pS(_uM("fontSize" to 12, "color" to "#999999")), "products-section" to _pS(_uM("backgroundColor" to "#ffffff", "marginBottom" to 10)), "product-review" to _pS(_uM("paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#f5f5f5")), "product-header" to _pS(_uM("display" to "flex", "marginBottom" to 20)), "product-image" to _pS(_uM("width" to 60, "height" to 60, "borderTopLeftRadius" to 5, "borderTopRightRadius" to 5, "borderBottomRightRadius" to 5, "borderBottomLeftRadius" to 5, "marginRight" to 15)), "product-info" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "product-name" to _pS(_uM("fontSize" to 14, "color" to "#333333", "lineHeight" to 1.4, "marginBottom" to 5)), "product-spec" to _pS(_uM("fontSize" to 12, "color" to "#999999")), "rating-section" to _pS(_uM("display" to "flex", "alignItems" to "center", "marginBottom" to 15)), "rating-label" to _pS(_uM("fontSize" to 14, "color" to "#333333", "marginRight" to 15)), "rating-stars" to _pS(_uM("display" to "flex")), "star-icon" to _uM("" to _uM("fontSize" to 24, "color" to "#cccccc", "marginRight" to 10), ".active" to _uM("color" to "#ffa726")), "rating-text" to _pS(_uM("marginLeft" to 15, "fontSize" to 14, "color" to "#666666")), "content-section" to _pS(_uM("marginBottom" to 15)), "review-textarea" to _pS(_uM("width" to "100%", "minHeight" to 80, "paddingTop" to 10, "paddingRight" to 10, "paddingBottom" to 10, "paddingLeft" to 10, "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#e5e5e5", "borderRightColor" to "#e5e5e5", "borderBottomColor" to "#e5e5e5", "borderLeftColor" to "#e5e5e5", "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "fontSize" to 14, "color" to "#333333", "lineHeight" to 1.4)), "word-count" to _pS(_uM("textAlign" to "right", "fontSize" to 12, "color" to "#999999", "marginTop" to 5)), "images-section" to _pS(_uM("marginBottom" to 15)), "images-label" to _pS(_uM("fontSize" to 14, "color" to "#333333", "marginBottom" to 10)), "images-grid" to _pS(_uM("display" to "flex", "flexWrap" to "wrap")), "image-item" to _pS(_uM("marginRight" to 10, "marginBottom" to 10, "width" to 70, "height" to 70, "borderTopLeftRadius" to 5, "borderTopRightRadius" to 5, "borderBottomRightRadius" to 5, "borderBottomLeftRadius" to 5, "overflow" to "hidden", "position" to "relative")), "uploaded-image" to _pS(_uM("width" to "100%", "height" to "100%")), "delete-image" to _pS(_uM("position" to "absolute", "top" to 2, "right" to 2, "width" to 16, "height" to 16, "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "backgroundColor" to "rgba(0,0,0,0.5)", "color" to "#ffffff", "fontSize" to 12, "display" to "flex", "alignItems" to "center", "justifyContent" to "center")), "upload-btn" to _pS(_uM("width" to 70, "height" to 70, "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "dashed", "borderRightStyle" to "dashed", "borderBottomStyle" to "dashed", "borderLeftStyle" to "dashed", "borderTopColor" to "#cccccc", "borderRightColor" to "#cccccc", "borderBottomColor" to "#cccccc", "borderLeftColor" to "#cccccc", "borderTopLeftRadius" to 5, "borderTopRightRadius" to 5, "borderBottomRightRadius" to 5, "borderBottomLeftRadius" to 5, "display" to "flex", "flexDirection" to "column", "alignItems" to "center", "justifyContent" to "center")), "upload-icon" to _pS(_uM("fontSize" to 24, "color" to "#999999", "marginBottom" to 5)), "upload-text" to _pS(_uM("fontSize" to 10, "color" to "#999999")), "anonymous-section" to _pS(_uM("marginBottom" to 15)), "anonymous-switch" to _pS(_uM("display" to "flex", "justifyContent" to "space-between", "alignItems" to "center", "marginBottom" to 5)), "switch-label" to _pS(_uM("fontSize" to 14)), "anonymous-tip" to _pS(_uM("fontSize" to 12, "color" to "#999999")), "merchant-section" to _pS(_uM("backgroundColor" to "#ffffff", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "marginBottom" to 10)), "section-title" to _pS(_uM("fontSize" to 16, "fontWeight" to "bold", "color" to "#333333", "marginBottom" to 15)), "merchant-rating" to _pS(_uM("display" to "flex", "justifyContent" to "space-between", "alignItems" to "center", "marginBottom" to 15)), "rating-item" to _pS(_uM("fontSize" to 14, "color" to "#333333")), "tips-section" to _pS(_uM("backgroundColor" to "#ffffff", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "marginBottom" to 10)), "tip-title" to _pS(_uM("fontSize" to 16, "fontWeight" to "bold", "color" to "#333333", "marginBottom" to 10)), "tip-item" to _pS(_uM("fontSize" to 12, "color" to "#666666", "lineHeight" to 1.6, "marginBottom" to 5)), "submit-section" to _pS(_uM("backgroundColor" to "#ffffff", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "borderTopWidth" to 1, "borderTopStyle" to "solid", "borderTopColor" to "#e5e5e5")), "submit-btn" to _uM("" to _uM("backgroundColor" to "#007aff", "color" to "#ffffff", "height" to 50, "borderTopLeftRadius" to 25, "borderTopRightRadius" to 25, "borderBottomRightRadius" to 25, "borderBottomLeftRadius" to 25, "fontSize" to 16, "fontWeight" to "bold", "borderTopWidth" to "medium", "borderRightWidth" to "medium", "borderBottomWidth" to "medium", "borderLeftWidth" to "medium", "borderTopStyle" to "none", "borderRightStyle" to "none", "borderBottomStyle" to "none", "borderLeftStyle" to "none", "borderTopColor" to "#000000", "borderRightColor" to "#000000", "borderBottomColor" to "#000000", "borderLeftColor" to "#000000"), ".disabled" to _uM("backgroundColor" to "#cccccc", "opacity" to 0.6))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/mall/consumer/search.kt b/unpackage/cache/.app-android/src/pages/mall/consumer/search.kt deleted file mode 100644 index b65496c2..00000000 --- a/unpackage/cache/.app-android/src/pages/mall/consumer/search.kt +++ /dev/null @@ -1,875 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.chooseImage as uni_chooseImage -import io.dcloud.uniapp.extapi.getStorageSync as uni_getStorageSync -import io.dcloud.uniapp.extapi.getSystemInfoSync as uni_getSystemInfoSync -import io.dcloud.uniapp.extapi.hideLoading as uni_hideLoading -import io.dcloud.uniapp.extapi.navigateBack as uni_navigateBack -import io.dcloud.uniapp.extapi.navigateTo as uni_navigateTo -import io.dcloud.uniapp.extapi.removeStorageSync as uni_removeStorageSync -import io.dcloud.uniapp.extapi.setStorageSync as uni_setStorageSync -import io.dcloud.uniapp.extapi.showLoading as uni_showLoading -import io.dcloud.uniapp.extapi.showModal as uni_showModal -import io.dcloud.uniapp.extapi.showToast as uni_showToast -import io.dcloud.uniapp.extapi.switchTab as uni_switchTab -open class GenPagesMallConsumerSearch : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesMallConsumerSearch) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesMallConsumerSearch - val _cache = __ins.renderCache - val statusBarHeight = ref(0) - val scrollHeight = ref(0) - val searchKeyword = ref("") - val showResults = ref(false) - val loading = ref(false) - val hasMore = ref(true) - val isError = ref(false) - val autoFocus = ref(true) - val activeSort = ref("default") - val priceSortAsc = ref(false) - val searchHistory = ref(_uA()) - val hotSearchList = ref(_uA()) - val guessList = ref(_uA()) - val allGuessItems = ref(_uA()) - val searchResults = ref(_uA()) - val searchShopResults = ref(_uA()) - val loadSearchHistory = fun(){ - val history = uni_getStorageSync("searchHistory") - if (history != null) { - try { - val parsed = UTSAndroid.consoleDebugError(JSON.parse(history as String), " at pages/mall/consumer/search.uvue:311") - if (UTSArray.isArray(parsed)) { - searchHistory.value = parsed as UTSArray - } - } - catch (e: Throwable) { - searchHistory.value = _uA() - } - } - } - val saveSearchHistory = fun(){ - uni_setStorageSync("searchHistory", JSON.stringify(searchHistory.value)) - } - val addToHistory = fun(keyword: String){ - if (keyword == "") { - return - } - val index = searchHistory.value.indexOf(keyword) - if (index > -1) { - searchHistory.value.splice(index, 1) - } - searchHistory.value.unshift(keyword) - if (searchHistory.value.length > 10) { - searchHistory.value.pop() - } - saveSearchHistory() - } - val clearHistory = fun(){ - uni_showModal(ShowModalOptions(title = "提示", content = "确定清空搜索历史吗?", success = fun(res){ - if (res.confirm) { - searchHistory.value = _uA() - uni_removeStorageSync("searchHistory") - } - } - )) - } - val deleteHistoryItem = fun(index: Number){ - searchHistory.value.splice(index, 1) - saveSearchHistory() - } - val refreshGuessListItems = fun(){ - if (allGuessItems.value.length > 0) { - val arr: UTSArray = _uA() - run { - var i: Number = 0 - while(i < allGuessItems.value.length){ - arr.push(allGuessItems.value[i]) - i++ - } - } - run { - var i: Number = arr.length - 1 - while(i > 0){ - val j = Math.floor(Math.random() * (i + 1)) - val temp = arr[i] - arr[i] = arr[j] - arr[j] = temp - i-- - } - } - val result: UTSArray = _uA() - val limit = if (arr.length < 6) { - arr.length - } else { - 6 - } - run { - var i: Number = 0 - while(i < limit){ - result.push(arr[i]) - i++ - } - } - guessList.value = result - } - } - val loadData = fun(): UTSPromise { - return wrapUTSPromise(suspend { - isError.value = false - try { - loadSearchHistory() - val hotProducts = await(supabaseService.getHotProducts(30)) - val hotList: UTSArray = _uA() - val limit1 = if (hotProducts.length < 10) { - hotProducts.length - } else { - 10 - } - run { - var i: Number = 0 - while(i < limit1){ - val p = hotProducts[i] as UTSJSONObject - val item = HotSearchItemType(keyword = p.getString("name") ?: "", hot = true) - hotList.push(item) - i++ - } - } - hotSearchList.value = hotList - val allItems: UTSArray = _uA() - run { - var i: Number = 0 - while(i < hotProducts.length){ - val p = hotProducts[i] as UTSJSONObject - val saleCount = p.getNumber("sale_count") - val item = GuessItemType(id = p.getString("id") ?: "", name = p.getString("name") ?: "", price = p.getNumber("base_price") ?: 0, image = p.getString("main_image_url") ?: "/static/default.jpg", sales = if (saleCount != null) { - saleCount - } else { - 0 - } - ) - allItems.push(item) - i++ - } - } - allGuessItems.value = allItems - refreshGuessListItems() - } - catch (e: Throwable) { - console.error("Load data failed", e, " at pages/mall/consumer/search.uvue:412") - isError.value = true - } - }) - } - val retryLoad = fun(){ - uni_showLoading(ShowLoadingOptions(title = "重新加载中")) - setTimeout(fun(){ - uni_hideLoading() - loadData() - } - , 1000) - } - val searchSuggestions = ref(_uA()) - var suggestTimer: Number = 0 - val fetchSuggestions = fun(kw: String): UTSPromise { - return wrapUTSPromise(suspend w1@{ - if (kw == "" || showResults.value) { - return@w1 - } - try { - val res = await(supabaseService.searchProducts(kw.trim(), 1, 5)) - if (res.data != null && res.data.length > 0) { - val names: UTSArray = _uA() - run { - var i: Number = 0 - while(i < res.data.length){ - val p = res.data[i] - var name = "" - if (p is UTSJSONObject) { - name = p.getString("name") ?: "" - } else { - val pObj = p as UTSJSONObject - name = pObj.getString("name") ?: "" - } - var found = false - run { - var j: Number = 0 - while(j < names.length){ - if (names[j] === name) { - found = true - break - } - j++ - } - } - if (found === false && name !== "") { - names.push(name) - } - i++ - } - } - searchSuggestions.value = names - } else { - searchSuggestions.value = _uA() - } - } - catch (e: Throwable) { - searchSuggestions.value = _uA() - } - }) - } - val currentPage = ref(1) - val performSearch = fun(): UTSPromise { - return wrapUTSPromise(suspend w1@{ - showResults.value = true - loading.value = true - currentPage.value = 1 - val keyword = searchKeyword.value.trim() - if (keyword == "") { - loading.value = false - return@w1 - } - var sortBy = "sales" - var ascending = false - if (activeSort.value === "price") { - sortBy = "price" - ascending = priceSortAsc.value - } else if (activeSort.value === "default") { - sortBy = "default" - } - try { - val prodResp = await(supabaseService.searchProducts(keyword, currentPage.value, 20, sortBy, ascending)) - var shopRespData: UTSArray = _uA() - if (currentPage.value === 1 && activeSort.value === "default") { - val shopResp = await(supabaseService.searchShops(keyword)) - if (shopResp.data != null) { - val rawData = shopResp.data - run { - var i: Number = 0 - while(i < rawData.length){ - shopRespData.push(rawData[i]) - i++ - } - } - } - } - if (shopRespData.length > 0) { - val shopList: UTSArray = _uA() - run { - var i: Number = 0 - while(i < shopRespData.length){ - val s = shopRespData[i] as UTSJSONObject - val shopItem = ShopResultType(id = s.getString("id") ?: "", name = s.getString("shop_name") ?: "", logo = s.getString("shop_logo") ?: "/static/shop_logo_default.png", productCount = s.getNumber("product_count") ?: 0) - shopList.push(shopItem) - i++ - } - } - searchShopResults.value = shopList - } else { - searchShopResults.value = _uA() - } - val prodData = if (prodResp.data != null) { - prodResp.data - } else { - _uA() - } - val resultList: UTSArray = _uA() - run { - var i: Number = 0 - while(i < prodData.length){ - val p = prodData[i] as UTSJSONObject - var tag = "" - val tagsRaw = p.get("tags") - if (tagsRaw != null) { - try { - val tagsStr = p.getString("tags") - if (tagsStr != null) { - val tags = UTSAndroid.consoleDebugError(JSON.parse(tagsStr), " at pages/mall/consumer/search.uvue:527") - if (UTSArray.isArray(tags) && (tags as UTSArray).length > 0) { - val firstTag = (tags as UTSArray)[0] - tag = if (firstTag != null) { - (firstTag as String) - } else { - "" - } - } - } - } - catch (e: Throwable) {} - } - val searchItem = SearchResultType(id = p.getString("id") ?: "", name = p.getString("name") ?: "", image = p.getString("main_image_url") ?: "/static/default.jpg", price = p.getNumber("base_price") ?: 0, specification = p.getString("specification") ?: "标准规格", tag = tag, sales = p.getNumber("sale_count") ?: 0) - resultList.push(searchItem) - i++ - } - } - searchResults.value = resultList - hasMore.value = prodResp.hasmore - } - catch (e: Throwable) { - console.error("Search failed", e, " at pages/mall/consumer/search.uvue:551") - } - finally { - loading.value = false - } - }) - } - val initPage = fun(){ - try { - val systemInfo = uni_getSystemInfoSync() - statusBarHeight.value = systemInfo.statusBarHeight ?: 0 - val windowHeight = systemInfo.windowHeight - scrollHeight.value = windowHeight - (60 + statusBarHeight.value) - loadData() - val pages = getCurrentPages() - if (pages.length > 0) { - val currentPageObj = pages[pages.length - 1] - val options = currentPageObj.options - if (options != null) { - val optObj = options as UTSJSONObject - val kwRaw = optObj.getString("keyword") - if (kwRaw != null && kwRaw !== "") { - val decoded = UTSAndroid.consoleDebugError(decodeURIComponent(kwRaw), " at pages/mall/consumer/search.uvue:575") - val keyword = if (decoded != null) { - decoded - } else { - kwRaw - } - searchKeyword.value = keyword - val typeVal = optObj.getString("type") - if (typeVal === "family" || typeVal === "brand") { - if (typeVal === "family") { - addToHistory(keyword) - } - showResults.value = true - loading.value = true - performSearch() - } - } - } - } - } - catch (e: Throwable) { - console.error("初始化失败", e, " at pages/mall/consumer/search.uvue:592") - isError.value = true - } - } - onMounted(fun(){ - initPage() - } - ) - val onInput = fun(e: Any){ - val eObj = e as UTSJSONObject - val detailRaw = eObj.get("detail") - val detail = if (detailRaw != null) { - (detailRaw as UTSJSONObject) - } else { - UTSJSONObject() - } - val kVal = detail.getString("value") ?: "" - searchKeyword.value = kVal - if (kVal == "") { - showResults.value = false - searchSuggestions.value = _uA() - return - } - if (suggestTimer > 0) { - clearTimeout(suggestTimer) - } - suggestTimer = setTimeout(fun(){ - fetchSuggestions(kVal) - } - , 300) - } - val clearSearch = fun(){ - searchKeyword.value = "" - showResults.value = false - } - val onSearch = fun(){ - if (searchKeyword.value.trim() == "") { - return - } - addToHistory(searchKeyword.value.trim()) - performSearch() - } - val searchFromHistory = fun(keyword: String){ - searchKeyword.value = keyword - performSearch() - } - val searchFromHot = fun(keyword: String){ - searchKeyword.value = keyword - addToHistory(keyword) - performSearch() - } - val selectSuggestion = fun(suggestion: String){ - searchKeyword.value = suggestion - addToHistory(suggestion) - performSearch() - } - val switchSort = fun(type: String){ - if (type === "price") { - if (activeSort.value === "price") { - priceSortAsc.value = !priceSortAsc.value - } else { - activeSort.value = "price" - priceSortAsc.value = true - } - } else { - activeSort.value = type - } - performSearch() - } - val loadMore = fun(): UTSPromise { - return wrapUTSPromise(suspend w1@{ - if (loading.value || hasMore.value == false || searchKeyword.value.trim() == "") { - return@w1 - } - loading.value = true - currentPage.value++ - val keyword = searchKeyword.value.trim() - var sortBy = "sales" - var ascending = false - if (activeSort.value === "price") { - sortBy = "price" - ascending = priceSortAsc.value - } else if (activeSort.value === "default") { - sortBy = "default" - } - try { - val response = await(supabaseService.searchProducts(keyword, currentPage.value, 20, sortBy, ascending)) - val respData = if (response.data != null) { - response.data - } else { - _uA() - } - run { - var i: Number = 0 - while(i < respData.length){ - val p = respData[i] as UTSJSONObject - var tag = "" - val tagsRaw = p.get("tags") - if (tagsRaw != null) { - try { - val tagsStr = p.getString("tags") - if (tagsStr != null) { - val tags = UTSAndroid.consoleDebugError(JSON.parse(tagsStr), " at pages/mall/consumer/search.uvue:689") - if (UTSArray.isArray(tags) && (tags as UTSArray).length > 0) { - val firstTag = (tags as UTSArray)[0] - tag = if (firstTag != null) { - (firstTag as String) - } else { - "" - } - } - } - } - catch (e: Throwable) {} - } - val searchItem = SearchResultType(id = p.getString("id") ?: "", name = p.getString("name") ?: "", image = p.getString("main_image_url") ?: "/static/default.jpg", price = p.getNumber("base_price") ?: 0, specification = p.getString("specification") ?: "标准规格", tag = tag, sales = p.getNumber("sale_count") ?: 0) - searchResults.value.push(searchItem) - i++ - } - } - hasMore.value = response.hasmore - } - catch (e: Throwable) { - console.error("Load more failed", e, " at pages/mall/consumer/search.uvue:711") - hasMore.value = false - } - finally { - loading.value = false - } - }) - } - val refreshGuessList = fun(){ - uni_showLoading(ShowLoadingOptions(title = "刷新中")) - setTimeout(fun(){ - refreshGuessListItems() - uni_hideLoading() - } - , 500) - } - val viewProductDetail = fun(item: UTSUnionTypeObject){ - val id = (item as GuessItemType).id - val price = (item as GuessItemType).price - val name = (item as GuessItemType).name - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/product-detail?productId=" + id + "&price=" + price + "&name=" + UTSAndroid.consoleDebugError(encodeURIComponent(name), " at pages/mall/consumer/search.uvue:731"))) - } - val viewShopDetail = fun(shop: ShopResultType){ - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/shop-detail?id=" + shop.id)) - } - val addToCart = fun(product: UTSUnionTypeObject){ - uni_showToast(ShowToastOptions(title = "请选择规格", icon = "none")) - setTimeout(fun(){ - viewProductDetail(product) - } - , 800) - } - val openCamera = fun(){ - uni_chooseImage(ChooseImageOptions(count = 1, sourceType = _uA( - "camera" - ), success = fun(res){ - console.log("拍摄图片路径:", res.tempFilePaths[0], " at pages/mall/consumer/search.uvue:753") - uni_showToast(ShowToastOptions(title = "已启用相机", icon = "none")) - } - , fail = fun(err){ - console.error("启用相机失败", err, " at pages/mall/consumer/search.uvue:757") - } - )) - } - val goBack = fun(){ - if (showResults.value) { - showResults.value = false - searchKeyword.value = "" - } else { - val pages = getCurrentPages() - if (pages.length > 1) { - uni_navigateBack(null) - } else { - uni_switchTab(SwitchTabOptions(url = "/pages/mall/consumer/index")) - } - } - } - return fun(): Any? { - return _cE("view", _uM("class" to "search-page"), _uA( - _cE("view", _uM("class" to "search-header", "style" to _nS(_uM("paddingTop" to (statusBarHeight.value + "px")))), _uA( - _cE("view", _uM("class" to "search-bar-container"), _uA( - _cE("view", _uM("class" to "back-btn", "onClick" to goBack), _uA( - _cE("text", _uM("class" to "back-icon"), "<") - )), - _cE("view", _uM("class" to "search-input-container"), _uA( - _cE("input", _uM("class" to "search-input", "type" to "text", "value" to searchKeyword.value, "onInput" to onInput, "onConfirm" to onSearch, "placeholder" to "请输入商品名称、店铺", "placeholder-class" to "placeholder", "focus" to autoFocus.value), null, 40, _uA( - "value", - "focus" - )), - if (isTrue(searchKeyword.value)) { - _cE("view", _uM("key" to 0, "class" to "clear-btn", "onClick" to clearSearch), _uA( - _cE("text", _uM("class" to "clear-icon"), "×") - )) - } else { - _cC("v-if", true) - } - , - _cE("view", _uM("class" to "camera-btn", "onClick" to openCamera), _uA( - _cE("text", _uM("class" to "camera-icon"), "📷") - )), - _cE("view", _uM("class" to "inner-search-btn", "onClick" to onSearch), _uA( - _cE("text", _uM("class" to "inner-search-text"), "搜索") - )) - )) - )) - ), 4), - if (isTrue(isError.value)) { - _cE("view", _uM("key" to 0, "class" to "error-state", "onClick" to retryLoad), _uA( - _cE("view", _uM("class" to "error-content"), _uA( - _cE("text", _uM("class" to "error-icon"), "⚠️"), - _cE("text", _uM("class" to "error-title"), "加载服务器超时"), - _cE("text", _uM("class" to "error-desc"), "请点击屏幕重试") - )) - )) - } else { - _cE("scroll-view", _uM("key" to 1, "direction" to "vertical", "class" to "main-content", "style" to _nS(_uM("height" to (scrollHeight.value + "px"))), "onScrolltolower" to loadMore), _uA( - if (isTrue(searchKeyword.value == "" && showResults.value == false)) { - _cE("view", _uM("key" to 0), _uA( - if (searchHistory.value.length > 0) { - _cE("view", _uM("key" to 0, "class" to "search-history"), _uA( - _cE("view", _uM("class" to "section-header"), _uA( - _cE("text", _uM("class" to "section-title"), "搜索历史"), - _cE("view", _uM("class" to "header-right", "onClick" to clearHistory), _uA( - _cE("text", _uM("class" to "clear-text"), "清空"), - _cE("text", _uM("class" to "clear-icon-trash"), "🗑️") - )) - )), - _cE("view", _uM("class" to "history-tags"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(searchHistory.value, fun(item, index, __index, _cached): Any { - return _cE("view", _uM("key" to index, "class" to "history-tag", "onClick" to fun(){ - searchFromHistory(item) - }), _uA( - _cE("text", _uM("class" to "history-text"), _tD(item), 1), - _cE("view", _uM("class" to "delete-tag-btn", "onClick" to withModifiers(fun(){ - deleteHistoryItem(index) - }, _uA( - "stop" - ))), _uA( - _cE("text", _uM("class" to "delete-icon"), "×") - ), 8, _uA( - "onClick" - )) - ), 8, _uA( - "onClick" - )) - }), 128) - )) - )) - } else { - _cC("v-if", true) - }, - _cE("view", _uM("class" to "hot-search"), _uA( - _cE("view", _uM("class" to "section-header"), _uA( - _cE("text", _uM("class" to "section-title"), "热门搜索") - )), - _cE("view", _uM("class" to "hot-tags"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(hotSearchList.value, fun(item, index, __index, _cached): Any { - return _cE("view", _uM("key" to index, "class" to _nC(_uA( - "hot-tag", - if (item.hot == true) { - "hot" - } else { - "" - } - )), "onClick" to fun(){ - searchFromHot(item.keyword) - }), _uA( - _cE("text", _uM("class" to _nC(_uA( - "hot-rank", - if (index < 3) { - "top-three" - } else { - "" - } - ))), _tD(index + 1), 3), - _cE("text", _uM("class" to "hot-text"), _tD(item.keyword), 1), - if (item.hot == true) { - _cE("text", _uM("key" to 0, "class" to "hot-icon"), "🔥") - } else { - _cC("v-if", true) - } - ), 10, _uA( - "onClick" - )) - }), 128) - )) - )), - _cE("view", _uM("class" to "guess-you-like"), _uA( - _cE("view", _uM("class" to "section-header"), _uA( - _cE("view", _uM("class" to "title-with-icon"), _uA( - _cE("text", _uM("class" to "section-icon"), "✨"), - _cE("text", _uM("class" to "section-title"), "猜你需要") - )), - _cE("text", _uM("class" to "refresh-btn", "onClick" to refreshGuessList), "换一批") - )), - _cE("view", _uM("class" to "guess-grid"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(guessList.value, fun(item, __key, __index, _cached): Any { - return _cE("view", _uM("key" to item.id, "class" to "guess-item", "onClick" to fun(){ - viewProductDetail(item) - }), _uA( - _cE("view", _uM("class" to "guess-img-box"), _uA( - _cE("image", _uM("class" to "guess-img", "src" to item.image, "mode" to "aspectFill"), null, 8, _uA( - "src" - )) - )), - _cE("view", _uM("class" to "guess-info"), _uA( - _cE("text", _uM("class" to "guess-name"), _tD(item.name), 1), - _cE("view", _uM("class" to "guess-price-row"), _uA( - _cE("text", _uM("class" to "price-symbol"), "¥"), - _cE("text", _uM("class" to "price-num"), _tD(item.price), 1), - _cE("text", _uM("class" to "sales-text"), "已售" + _tD(item.sales), 1) - )) - )) - ), 8, _uA( - "onClick" - )) - }), 128) - )) - )) - )) - } else { - _cC("v-if", true) - } - , - if (isTrue(searchKeyword.value != "" && showResults.value == false)) { - _cE("view", _uM("key" to 1, "class" to "search-suggestions"), _uA( - _cE("view", _uM("class" to "suggestions-list"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(searchSuggestions.value, fun(suggestion, index, __index, _cached): Any { - return _cE("view", _uM("key" to index, "class" to "suggestion-item", "onClick" to fun(){ - selectSuggestion(suggestion) - }), _uA( - _cE("view", _uM("class" to "suggestion-icon"), "🔍"), - _cE("text", _uM("class" to "suggestion-text"), _tD(suggestion), 1) - ), 8, _uA( - "onClick" - )) - }), 128) - )) - )) - } else { - _cC("v-if", true) - } - , - if (isTrue(showResults.value)) { - _cE("view", _uM("key" to 2, "class" to "search-results"), _uA( - if (searchShopResults.value.length > 0) { - _cE("view", _uM("key" to 0, "class" to "shop-results-section"), _uA( - _cE("view", _uM("class" to "section-top"), _uA( - _cE("text", _uM("class" to "result-title-sm"), "相关店铺") - )), - _cE("scroll-view", _uM("direction" to "horizontal", "class" to "shop-list-scroll"), _uA( - _cE("view", _uM("class" to "shop-list-row"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(searchShopResults.value, fun(shop, __key, __index, _cached): Any { - return _cE("view", _uM("key" to shop.id, "class" to "shop-card", "onClick" to fun(){ - viewShopDetail(shop) - }), _uA( - _cE("image", _uM("class" to "shop-logo", "src" to shop.logo, "mode" to "aspectFill"), null, 8, _uA( - "src" - )), - _cE("view", _uM("class" to "shop-info"), _uA( - _cE("text", _uM("class" to "shop-name-txt"), _tD(shop.name), 1), - _cE("text", _uM("class" to "shop-products-txt"), "共" + _tD(shop.productCount) + "件商品", 1) - )) - ), 8, _uA( - "onClick" - )) - }), 128) - )) - )) - )) - } else { - _cC("v-if", true) - }, - _cE("view", _uM("class" to "results-header"), _uA( - _cE("text", _uM("class" to "results-title"), "商品结果"), - _cE("view", _uM("class" to "filter-tabs"), _uA( - _cE("text", _uM("class" to _nC(_uA( - "filter-tab", - _uM("active" to (activeSort.value === "default")) - )), "onClick" to fun(){ - switchSort("default") - }), "综合", 10, _uA( - "onClick" - )), - _cE("text", _uM("class" to _nC(_uA( - "filter-tab", - _uM("active" to (activeSort.value === "sales")) - )), "onClick" to fun(){ - switchSort("sales") - }), "销量", 10, _uA( - "onClick" - )), - _cE("text", _uM("class" to _nC(_uA( - "filter-tab", - _uM("active" to (activeSort.value === "price")) - )), "onClick" to fun(){ - switchSort("price") - }), " 价格 " + _tD(if (activeSort.value === "price") { - if (priceSortAsc.value) { - "↑" - } else { - "↓" - } - } else { - "" - }), 11, _uA( - "onClick" - )) - )) - )), - if (searchResults.value.length > 0) { - _cE("view", _uM("key" to 1, "class" to "results-list"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(searchResults.value, fun(product, __key, __index, _cached): Any { - return _cE("view", _uM("key" to product.id, "class" to "result-item", "onClick" to fun(){ - viewProductDetail(product) - }), _uA( - _cE("image", _uM("class" to "product-image", "src" to product.image, "mode" to "aspectFill"), null, 8, _uA( - "src" - )), - _cE("view", _uM("class" to "product-info"), _uA( - _cE("text", _uM("class" to "product-name"), _tD(product.name), 1), - if (isTrue(product.tag)) { - _cE("view", _uM("key" to 0, "class" to "product-tags-row"), _uA( - _cE("text", _uM("class" to "product-tag"), _tD(product.tag), 1) - )) - } else { - _cC("v-if", true) - }, - _cE("text", _uM("class" to "product-spec"), _tD(product.specification), 1), - _cE("view", _uM("class" to "product-bottom"), _uA( - _cE("view", _uM("class" to "price-box"), _uA( - _cE("text", _uM("class" to "price-symbol"), "¥"), - _cE("text", _uM("class" to "price-value"), _tD(product.price), 1) - )), - _cE("view", _uM("class" to "add-cart-btn", "onClick" to withModifiers(fun(){ - addToCart(product) - }, _uA( - "stop" - ))), _uA( - _cE("text", _uM("class" to "cart-icon"), "+") - ), 8, _uA( - "onClick" - )) - )) - )) - ), 8, _uA( - "onClick" - )) - }), 128) - )) - } else { - _cC("v-if", true) - }, - if (isTrue(!loading.value && searchResults.value.length === 0)) { - _cE("view", _uM("key" to 2, "class" to "empty-result"), _uA( - _cE("text", _uM("class" to "empty-icon"), "🤔"), - _cE("text", _uM("class" to "empty-text"), "未找到相关商品"), - _cE("text", _uM("class" to "empty-sub"), "换个关键词试试吧") - )) - } else { - _cC("v-if", true) - }, - if (isTrue(loading.value)) { - _cE("view", _uM("key" to 3, "class" to "loading-more"), _uA( - _cE("view", _uM("class" to "loading-spinner")), - _cE("text", _uM("class" to "loading-text"), "加载中...") - )) - } else { - _cC("v-if", true) - }, - if (isTrue(!hasMore.value && searchResults.value.length > 0)) { - _cE("view", _uM("key" to 4, "class" to "no-more"), _uA( - _cE("text", _uM("class" to "no-more-text"), "--- 到底了 ---") - )) - } else { - _cC("v-if", true) - } - )) - } else { - _cC("v-if", true) - } - , - _cE("view", _uM("class" to "safe-area")) - ), 36) - } - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("search-page" to _pS(_uM("width" to "100%", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "backgroundColor" to "#f5f5f5", "display" to "flex", "flexDirection" to "column")), "shop-results-section" to _pS(_uM("backgroundColor" to "#ffffff", "marginBottom" to 10, "paddingTop" to 10, "paddingRight" to 0, "paddingBottom" to 10, "paddingLeft" to 0)), "section-top" to _pS(_uM("paddingTop" to 0, "paddingRight" to 12, "paddingBottom" to 10, "paddingLeft" to 12)), "result-title-sm" to _pS(_uM("fontSize" to 14, "fontWeight" to "bold", "color" to "#333333")), "shop-list-scroll" to _pS(_uM("width" to "100%", "whiteSpace" to "nowrap")), "shop-list-row" to _pS(_uM("display" to "flex", "flexDirection" to "row", "paddingTop" to 0, "paddingRight" to 12, "paddingBottom" to 0, "paddingLeft" to 12)), "shop-card" to _pS(_uM("display" to "flex", "flexDirection" to "column", "alignItems" to "center", "width" to 80, "marginRight" to 15, "backgroundColor" to "#f9f9f9", "paddingTop" to 10, "paddingRight" to 5, "paddingBottom" to 10, "paddingLeft" to 5, "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8)), "shop-logo" to _pS(_uM("width" to 48, "height" to 48, "borderTopLeftRadius" to 24, "borderTopRightRadius" to 24, "borderBottomRightRadius" to 24, "borderBottomLeftRadius" to 24, "marginBottom" to 5, "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#f0f0f0", "borderRightColor" to "#f0f0f0", "borderBottomColor" to "#f0f0f0", "borderLeftColor" to "#f0f0f0", "backgroundColor" to "#FFFFFF")), "shop-info" to _pS(_uM("width" to "100%", "textAlign" to "center")), "shop-name-txt" to _pS(_uM("fontSize" to 12, "color" to "#333333", "width" to "100%", "overflow" to "hidden", "whiteSpace" to "nowrap", "textOverflow" to "ellipsis", "marginBottom" to 2)), "shop-products-txt" to _pS(_uM("fontSize" to 10, "color" to "#999999")), "search-header" to _pS(_uM("backgroundColor" to "#ffffff", "paddingBottom" to 10)), "search-bar-container" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center", "paddingTop" to 10, "paddingRight" to 16, "paddingBottom" to 10, "paddingLeft" to 16, "width" to "100%")), "back-btn" to _pS(_uM("paddingTop" to 4, "paddingRight" to 4, "paddingBottom" to 4, "paddingLeft" to 4, "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "center", "width" to 32, "height" to 32, "marginRight" to 12)), "back-icon" to _pS(_uM("fontSize" to 24, "color" to "#333333", "fontWeight" to "bold", "fontFamily" to "monospace")), "search-input-container" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "height" to 40, "backgroundColor" to "#f0f0f0", "borderTopLeftRadius" to 20, "borderTopRightRadius" to 20, "borderBottomRightRadius" to 20, "borderBottomLeftRadius" to 20, "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "paddingTop" to 0, "paddingRight" to 4, "paddingBottom" to 0, "paddingLeft" to 12)), "search-input" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "fontSize" to 14, "color" to "#333333", "height" to "100%", "backgroundColor" to "rgba(0,0,0,0)")), "placeholder" to _pS(_uM("color" to "#999999")), "clear-btn" to _pS(_uM("paddingTop" to 4, "paddingRight" to 4, "paddingBottom" to 4, "paddingLeft" to 4, "marginRight" to 2, "display" to "flex", "alignItems" to "center", "justifyContent" to "center")), "clear-icon" to _pS(_uM("fontSize" to 16, "color" to "#999999")), "camera-btn" to _pS(_uM("paddingTop" to 4, "paddingRight" to 8, "paddingBottom" to 4, "paddingLeft" to 4, "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "center", "borderRightWidth" to 1, "borderRightStyle" to "solid", "borderRightColor" to "#dddddd", "marginRight" to 8)), "camera-icon" to _pS(_uM("fontSize" to 20)), "inner-search-btn" to _pS(_uM("paddingTop" to 0, "paddingRight" to 16, "paddingBottom" to 0, "paddingLeft" to 16, "backgroundColor" to "#87CEEB", "borderTopLeftRadius" to 16, "borderTopRightRadius" to 16, "borderBottomRightRadius" to 16, "borderBottomLeftRadius" to 16, "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "center", "height" to 32)), "inner-search-text" to _pS(_uM("fontSize" to 13, "color" to "#ffffff", "fontWeight" to "bold")), "main-content" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "paddingTop" to 12, "paddingRight" to 12, "paddingBottom" to 12, "paddingLeft" to 12, "boxSizing" to "border-box")), "section-header" to _pS(_uM("display" to "flex", "flexDirection" to "row", "justifyContent" to "space-between", "alignItems" to "center", "marginBottom" to 12, "marginTop" to 8, "width" to "100%")), "section-title" to _pS(_uM("fontSize" to 15, "fontWeight" to "bold", "color" to "#333333", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "header-right" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center", "flexShrink" to 0)), "clear-text" to _pS(_uM("marginRight" to 4, "fontSize" to 12, "color" to "#999999")), "clear-icon-trash" to _pS(_uM("fontSize" to 14)), "search-history" to _pS(_uM("marginBottom" to 24, "paddingTop" to 0, "paddingRight" to 4, "paddingBottom" to 0, "paddingLeft" to 4)), "history-tags" to _pS(_uM("display" to "flex", "flexDirection" to "row", "flexWrap" to "wrap", "paddingTop" to 0, "paddingRight" to 4, "paddingBottom" to 0, "paddingLeft" to 4, "alignItems" to "center")), "history-tag" to _pS(_uM("backgroundColor" to "#ffffff", "paddingTop" to 6, "paddingRight" to 12, "paddingBottom" to 6, "paddingLeft" to 12, "borderTopLeftRadius" to 16, "borderTopRightRadius" to 16, "borderBottomRightRadius" to 16, "borderBottomLeftRadius" to 16, "display" to "flex", "alignItems" to "center", "flexShrink" to 0, "marginRight" to 10, "marginBottom" to 10)), "history-text" to _pS(_uM("fontSize" to 13, "color" to "#666666", "overflow" to "hidden", "textOverflow" to "ellipsis", "whiteSpace" to "nowrap", "marginRight" to 6)), "delete-tag-btn" to _pS(_uM("display" to "flex", "alignItems" to "center", "justifyContent" to "center", "width" to 16, "height" to 16, "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "backgroundColor" to "#f0f0f0")), "delete-icon" to _pS(_uM("fontSize" to 12, "color" to "#999999", "lineHeight" to 1)), "hot-search" to _pS(_uM("marginBottom" to 24)), "hot-tags" to _pS(_uM("display" to "flex", "flexDirection" to "row", "flexWrap" to "wrap", "paddingTop" to 0, "paddingRight" to 4, "paddingBottom" to 0, "paddingLeft" to 4)), "hot-tag" to _uM("" to _uM("marginRight" to 10, "marginBottom" to 10, "backgroundColor" to "#ffffff", "paddingTop" to 6, "paddingRight" to 12, "paddingBottom" to 6, "paddingLeft" to 12, "borderTopLeftRadius" to 16, "borderTopRightRadius" to 16, "borderBottomRightRadius" to 16, "borderBottomLeftRadius" to 16, "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "flexShrink" to 0), ".hot" to _uM("backgroundColor" to "#fff0f0")), "hot-rank" to _uM("" to _uM("fontSize" to 12, "color" to "#999999", "fontWeight" to "bold", "marginRight" to 6), ".top-three" to _uM("color" to "#ff5000")), "hot-text" to _pS(_uM("fontSize" to 13, "color" to "#333333")), "hot-icon" to _pS(_uM("fontSize" to 12, "marginLeft" to 4)), "guess-you-like" to _pS(_uM("marginBottom" to 20)), "title-with-icon" to _pS(_uM("display" to "flex", "alignItems" to "center")), "section-icon" to _pS(_uM("fontSize" to 16, "marginRight" to 6)), "refresh-btn" to _pS(_uM("fontSize" to 12, "color" to "#4CAF50")), "guess-grid" to _pS(_uM("display" to "flex", "flexDirection" to "row", "flexWrap" to "wrap", "justifyContent" to "space-between", "paddingTop" to 0, "paddingRight" to 4, "paddingBottom" to 0, "paddingLeft" to 4)), "guess-item" to _pS(_uM("backgroundColor" to "#ffffff", "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "overflow" to "hidden", "paddingBottom" to 8, "width" to "48%", "marginBottom" to 10)), "guess-img-box" to _pS(_uM("width" to "100%", "height" to 0, "paddingBottom" to "100%", "position" to "relative", "backgroundColor" to "#f0f0f0")), "guess-img" to _pS(_uM("position" to "absolute", "top" to 0, "left" to 0, "width" to "100%", "height" to "100%")), "guess-info" to _pS(_uM("paddingTop" to 8, "paddingRight" to 8, "paddingBottom" to 8, "paddingLeft" to 8)), "guess-name" to _pS(_uM("fontSize" to 13, "color" to "#333333", "marginBottom" to 6, "overflow" to "hidden", "textOverflow" to "ellipsis", "lineHeight" to 1.3, "height" to 34)), "guess-price-row" to _pS(_uM("display" to "flex", "alignItems" to "flex-end")), "price-symbol" to _pS(_uM("fontSize" to 10, "color" to "#ff5000")), "price-num" to _pS(_uM("fontSize" to 16, "color" to "#ff5000", "fontWeight" to "bold", "marginRight" to 6)), "sales-text" to _pS(_uM("fontSize" to 10, "color" to "#999999")), "search-suggestions" to _pS(_uM("backgroundColor" to "#ffffff", "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "paddingTop" to 0, "paddingRight" to 12, "paddingBottom" to 0, "paddingLeft" to 12)), "suggestion-item" to _pS(_uM("display" to "flex", "alignItems" to "center", "height" to 44, "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#f5f5f5")), "suggestion-icon" to _pS(_uM("marginRight" to 10, "fontSize" to 14, "color" to "#999999")), "suggestion-text" to _pS(_uM("fontSize" to 14, "color" to "#333333")), "search-results" to _pS(_uM("paddingBottom" to 20)), "results-header" to _pS(_uM("display" to "flex", "flexDirection" to "row", "justifyContent" to "space-between", "alignItems" to "center", "marginBottom" to 12, "flexWrap" to "wrap")), "results-title" to _pS(_uM("fontSize" to 15, "fontWeight" to "bold", "color" to "#333333", "marginRight" to 8)), "filter-tabs" to _pS(_uM("display" to "flex", "flexDirection" to "row", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "justifyContent" to "flex-end")), "filter-tab" to _uM("" to _uM("fontSize" to 13, "color" to "#666666", "paddingTop" to 4, "paddingRight" to 8, "paddingBottom" to 4, "paddingLeft" to 8, "marginLeft" to 16), ".active" to _uM("color" to "#4CAF50", "fontWeight" to "bold")), "results-list" to _pS(_uM("display" to "flex", "flexDirection" to "row", "flexWrap" to "wrap", "justifyContent" to "space-between", "paddingTop" to 0, "paddingRight" to 4, "paddingBottom" to 0, "paddingLeft" to 4)), "result-item" to _pS(_uM("backgroundColor" to "#ffffff", "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "paddingTop" to 8, "paddingRight" to 8, "paddingBottom" to 8, "paddingLeft" to 8, "display" to "flex", "flexDirection" to "column", "width" to "48%", "marginBottom" to 10)), "product-image" to _pS(_uM("width" to "100%", "height" to 120, "borderTopLeftRadius" to 4, "borderTopRightRadius" to 4, "borderBottomRightRadius" to 4, "borderBottomLeftRadius" to 4, "backgroundColor" to "#f0f0f0")), "product-info" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "display" to "flex", "flexDirection" to "column", "justifyContent" to "space-between", "marginTop" to 8)), "product-name" to _pS(_uM("fontSize" to 13, "color" to "#333333", "fontWeight" to "bold", "lineHeight" to 1.3, "height" to 34, "overflow" to "hidden", "textOverflow" to "ellipsis")), "product-tags-row" to _pS(_uM("marginTop" to 2, "display" to "none")), "product-spec" to _pS(_uM("display" to "none")), "product-bottom" to _pS(_uM("display" to "flex", "justifyContent" to "space-between", "alignItems" to "center", "marginTop" to 4)), "price-box" to _pS(_uM("color" to "#ff5000", "display" to "flex", "alignItems" to "flex-end")), "price-value" to _pS(_uM("fontSize" to 16, "fontWeight" to "700")), "add-cart-btn" to _pS(_uM("width" to 24, "height" to 24, "backgroundColor" to "#4CAF50", "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "display" to "flex", "alignItems" to "center", "justifyContent" to "center")), "cart-icon" to _pS(_uM("color" to "#ffffff", "fontSize" to 14, "fontWeight" to "bold")), "error-state" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "display" to "flex", "alignItems" to "center", "justifyContent" to "center", "backgroundColor" to "#ffffff")), "error-content" to _pS(_uM("display" to "flex", "flexDirection" to "column", "alignItems" to "center")), "error-icon" to _pS(_uM("fontSize" to 48, "marginBottom" to 12)), "error-title" to _pS(_uM("fontSize" to 16, "fontWeight" to "bold", "color" to "#333333", "marginBottom" to 12)), "error-desc" to _pS(_uM("fontSize" to 14, "color" to "#999999")), "loading-more" to _pS(_uM("paddingTop" to 20, "paddingRight" to 0, "paddingBottom" to 20, "paddingLeft" to 0, "display" to "flex", "flexDirection" to "column", "alignItems" to "center")), "loading-spinner" to _pS(_uM("width" to 24, "height" to 24, "borderTopWidth" to 2, "borderRightWidth" to 2, "borderBottomWidth" to 2, "borderLeftWidth" to 2, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#4CAF50", "borderRightColor" to "#f0f0f0", "borderBottomColor" to "#f0f0f0", "borderLeftColor" to "#f0f0f0", "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "marginBottom" to 8)), "loading-text" to _pS(_uM("fontSize" to 12, "color" to "#999999")), "no-more" to _pS(_uM("paddingTop" to 20, "paddingRight" to 0, "paddingBottom" to 20, "paddingLeft" to 0, "textAlign" to "center")), "no-more-text" to _pS(_uM("fontSize" to 12, "color" to "#cccccc")), "empty-result" to _pS(_uM("display" to "flex", "flexDirection" to "column", "alignItems" to "center", "paddingTop" to 40, "paddingRight" to 0, "paddingBottom" to 40, "paddingLeft" to 0)), "empty-icon" to _pS(_uM("fontSize" to 40, "marginBottom" to 12)), "empty-text" to _pS(_uM("fontSize" to 14, "color" to "#666666", "marginBottom" to 4)), "empty-sub" to _pS(_uM("fontSize" to 12, "color" to "#999999")), "safe-area" to _pS(_uM("height" to 20))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/mall/consumer/settings.kt b/unpackage/cache/.app-android/src/pages/mall/consumer/settings.kt deleted file mode 100644 index 90738cbe..00000000 --- a/unpackage/cache/.app-android/src/pages/mall/consumer/settings.kt +++ /dev/null @@ -1,503 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.getAppBaseInfo as uni_getAppBaseInfo -import io.dcloud.uniapp.extapi.getStorageSync as uni_getStorageSync -import io.dcloud.uniapp.extapi.getSystemInfoSync as uni_getSystemInfoSync -import io.dcloud.uniapp.extapi.hideLoading as uni_hideLoading -import io.dcloud.uniapp.extapi.navigateTo as uni_navigateTo -import io.dcloud.uniapp.framework.onBackPress -import io.dcloud.uniapp.extapi.reLaunch as uni_reLaunch -import io.dcloud.uniapp.extapi.removeStorageSync as uni_removeStorageSync -import io.dcloud.uniapp.extapi.setStorageSync as uni_setStorageSync -import io.dcloud.uniapp.extapi.showActionSheet as uni_showActionSheet -import io.dcloud.uniapp.extapi.showLoading as uni_showLoading -import io.dcloud.uniapp.extapi.showModal as uni_showModal -import io.dcloud.uniapp.extapi.showToast as uni_showToast -import io.dcloud.uniapp.extapi.switchTab as uni_switchTab -open class GenPagesMallConsumerSettings : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesMallConsumerSettings) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesMallConsumerSettings - val _cache = __ins.renderCache - onBackPress(fun(options): Boolean { - uni_switchTab(SwitchTabOptions(url = "/pages/mall/consumer/profile")) - return true - } - ) - val userInfo = ref(UserType__1(id = "", phone = null, email = null, nickname = null, avatar_url = null)) - val notifications = ref(NotificationType(order = true, promotion = true, review = true)) - val privacy = ref(PrivacyType(hidePurchase = false, allowSearchByPhone = true, receiveMerchantMsg = true)) - val cacheSize = ref("0.0 MB") - val currentLanguage = ref("简体中文") - val currentTheme = ref("自动") - val appVersion = ref("1.0.0") - val statusBarHeight = ref(0) - val loadUserInfo = fun(){ - val userStore = uni_getStorageSync("userInfo") - if (userStore != null) { - val storeObj = userStore as UTSJSONObject - val user: UserType__1 = UserType__1(id = storeObj.getString("id") ?: "", phone = storeObj.getString("phone"), email = storeObj.getString("email"), nickname = storeObj.getString("nickname"), avatar_url = storeObj.getString("avatar_url")) - userInfo.value = user - } - } - val loadSettings = fun(){ - val savedNotifications = uni_getStorageSync("userNotifications") - if (savedNotifications != null) { - val notifObj = savedNotifications as UTSJSONObject - val notif: NotificationType = NotificationType(order = notifObj.getBoolean("order") ?: true, promotion = notifObj.getBoolean("promotion") ?: true, review = notifObj.getBoolean("review") ?: true) - notifications.value = notif - } - val savedPrivacy = uni_getStorageSync("userPrivacy") - if (savedPrivacy != null) { - val privacyObj = savedPrivacy as UTSJSONObject - val priv: PrivacyType = PrivacyType(hidePurchase = privacyObj.getBoolean("hidePurchase") ?: false, allowSearchByPhone = privacyObj.getBoolean("allowSearchByPhone") ?: true, receiveMerchantMsg = privacyObj.getBoolean("receiveMerchantMsg") ?: true) - privacy.value = priv - } - cacheSize.value = "12.5 MB" - val appInfo = uni_getAppBaseInfo(null) - if (appInfo != null) { - val infoObj = appInfo as UTSJSONObject - val version = infoObj.getString("appVersion") - if (version != null) { - appVersion.value = version - } - } - } - onMounted(fun(){ - val systemInfo = uni_getSystemInfoSync() - statusBarHeight.value = systemInfo.statusBarHeight ?: 0 - loadUserInfo() - loadSettings() - } - ) - val goToProfile = fun(){ - uni_navigateTo(NavigateToOptions(url = "/pages/user/profile")) - } - val goToAddressList = fun(){ - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/address-list")) - } - val changePassword = fun(){ - uni_navigateTo(NavigateToOptions(url = "/pages/user/change-password")) - } - val bindPhone = fun(){ - uni_navigateTo(NavigateToOptions(url = "/pages/user/bind-phone")) - } - val bindEmail = fun(){ - uni_navigateTo(NavigateToOptions(url = "/pages/user/bind-email")) - } - val toggleNotification = fun(type: String){ - if (type === "order") { - notifications.value.order = notifications.value.order === false - } else if (type === "promotion") { - notifications.value.promotion = notifications.value.promotion === false - } else if (type === "review") { - notifications.value.review = notifications.value.review === false - } - uni_setStorageSync("userNotifications", notifications.value) - } - val togglePrivacy = fun(type: String){ - if (type === "hidePurchase") { - privacy.value.hidePurchase = privacy.value.hidePurchase === false - } else if (type === "allowSearchByPhone") { - privacy.value.allowSearchByPhone = privacy.value.allowSearchByPhone === false - } else if (type === "receiveMerchantMsg") { - privacy.value.receiveMerchantMsg = privacy.value.receiveMerchantMsg === false - } - uni_setStorageSync("userPrivacy", privacy.value) - } - val clearCache = fun(){ - uni_showModal(ShowModalOptions(title = "清除缓存", content = "确定要清除 " + cacheSize.value + " 缓存吗?", success = fun(res){ - if (res.confirm) { - uni_showLoading(ShowLoadingOptions(title = "清除中...")) - setTimeout(fun(){ - cacheSize.value = "0.0 MB" - uni_hideLoading() - uni_showToast(ShowToastOptions(title = "缓存已清除", icon = "success")) - } - , 1000) - } - } - )) - } - val changeLanguage = fun(){ - uni_showActionSheet(ShowActionSheetOptions(itemList = _uA( - "简体中文", - "English", - "日本語" - ), success = fun(res){ - val languages = _uA( - "简体中文", - "English", - "日本語" - ) - currentLanguage.value = languages[res.tapIndex] - uni_setStorageSync("appLanguage", currentLanguage.value) - uni_showToast(ShowToastOptions(title = "语言已切换", icon = "success")) - } - )) - } - val changeTheme = fun(){ - uni_showActionSheet(ShowActionSheetOptions(itemList = _uA( - "自动", - "浅色模式", - "深色模式" - ), success = fun(res){ - val themes = _uA( - "自动", - "浅色模式", - "深色模式" - ) - currentTheme.value = themes[res.tapIndex] - uni_setStorageSync("appTheme", currentTheme.value) - uni_showToast(ShowToastOptions(title = "主题已切换", icon = "success")) - } - )) - } - val goToMyReviews = fun(){ - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/orders?status=completed")) - } - val aboutUs = fun(){ - uni_navigateTo(NavigateToOptions(url = "/pages/user/terms?type=about")) - } - val userAgreement = fun(){ - uni_navigateTo(NavigateToOptions(url = "/pages/user/terms?type=agreement")) - } - val privacyPolicy = fun(){ - uni_navigateTo(NavigateToOptions(url = "/pages/user/terms?type=privacy")) - } - val checkUpdate = fun(){ - uni_showLoading(ShowLoadingOptions(title = "检查更新中...")) - setTimeout(fun(){ - uni_hideLoading() - uni_showModal(ShowModalOptions(title = "检查更新", content = "当前已是最新版本", showCancel = false)) - } - , 1000) - } - val contactService = fun(){ - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/chat")) - } - val feedback = fun(){ - uni_navigateTo(NavigateToOptions(url = "/pages/info/feedback")) - } - val rateApp = fun(){ - uni_showModal(ShowModalOptions(title = "给个好评", content = "如果喜欢我们的应用,请给个好评吧!感谢您的支持!", confirmText = "好的", showCancel = false)) - } - val logout = fun(){ - uni_showModal(ShowModalOptions(title = "退出登录", content = "确定要退出登录吗?", success = fun(res){ - if (res.confirm) { - uni_showLoading(ShowLoadingOptions(title = "正在退出...")) - uni_removeStorageSync("userInfo") - uni_removeStorageSync("user_id") - uni_removeStorageSync("access_token") - uni_hideLoading() - uni_showToast(ShowToastOptions(title = "已退出登录", icon = "success")) - setTimeout(fun(){ - uni_reLaunch(ReLaunchOptions(url = "/pages/user/login")) - } - , 1000) - } - } - )) - } - val deleteAccount = fun(){ - uni_showModal(ShowModalOptions(title = "注销账号", content = "确定要注销账号吗?此操作不可恢复,所有数据将被删除!", confirmText = "注销", confirmColor = "#ff4757", success = fun(res){ - if (res.confirm) { - uni_showLoading(ShowLoadingOptions(title = "注销中...")) - var userId: String? = userInfo.value.id - if (userId == null || userId === "") { - val storageId = uni_getStorageSync("user_id") - userId = if ((storageId != null)) { - storageId as String - } else { - null - } - } - if (userId != null) { - val updateObj: UTSJSONObject = UTSJSONObject(UTSSourceMapPosition("updateObj", "pages/mall/consumer/settings.uvue", 558, 27)) - updateObj.set("status", 3) - supaInstance.from("ml_user_profiles").update(updateObj).eq("user_id", userId).execute() - } - uni_removeStorageSync("userInfo") - uni_removeStorageSync("user_id") - uni_removeStorageSync("access_token") - uni_hideLoading() - uni_showToast(ShowToastOptions(title = "账号已注销", icon = "success", duration = 2000)) - setTimeout(fun(){ - uni_reLaunch(ReLaunchOptions(url = "/pages/user/login")) - } - , 1500) - } - } - )) - } - return fun(): Any? { - val _component_switch = resolveComponent("switch") - return _cE("view", _uM("class" to "settings-page"), _uA( - _cE("scroll-view", _uM("class" to "settings-content", "scroll-y" to ""), _uA( - _cE("view", _uM("class" to "settings-section"), _uA( - _cE("text", _uM("class" to "section-title"), "账户设置"), - _cE("view", _uM("class" to "section-list"), _uA( - _cE("view", _uM("class" to "list-item", "onClick" to goToProfile), _uA( - _cE("text", _uM("class" to "item-icon"), "👤"), - _cE("text", _uM("class" to "item-text"), "个人资料"), - _cE("text", _uM("class" to "item-arrow"), "›") - )), - _cE("view", _uM("class" to "list-item", "onClick" to goToAddressList), _uA( - _cE("text", _uM("class" to "item-icon"), "📍"), - _cE("text", _uM("class" to "item-text"), "收货地址"), - _cE("text", _uM("class" to "item-arrow"), "›") - )), - _cE("view", _uM("class" to "list-item", "onClick" to changePassword), _uA( - _cE("text", _uM("class" to "item-icon"), "🔒"), - _cE("text", _uM("class" to "item-text"), "修改密码"), - _cE("text", _uM("class" to "item-arrow"), "›") - )), - _cE("view", _uM("class" to "list-item", "onClick" to bindPhone), _uA( - _cE("text", _uM("class" to "item-icon"), "📱"), - _cE("text", _uM("class" to "item-text"), "手机绑定"), - _cE("view", _uM("class" to "item-right"), _uA( - _cE("text", _uM("class" to _nC(_uA( - "item-status", - if (userInfo.value.phone != null && userInfo.value.phone != "") { - "bound" - } else { - "" - } - ))), _tD(if (userInfo.value.phone != null && userInfo.value.phone != "") { - "已绑定" - } else { - "未绑定" - } - ), 3), - _cE("text", _uM("class" to "item-arrow"), "›") - )) - )), - _cE("view", _uM("class" to "list-item", "onClick" to bindEmail), _uA( - _cE("text", _uM("class" to "item-icon"), "📧"), - _cE("text", _uM("class" to "item-text"), "邮箱绑定"), - _cE("view", _uM("class" to "item-right"), _uA( - _cE("text", _uM("class" to _nC(_uA( - "item-status", - if (userInfo.value.email != null && userInfo.value.email != "") { - "bound" - } else { - "" - } - ))), _tD(if (userInfo.value.email != null && userInfo.value.email != "") { - "已绑定" - } else { - "未绑定" - } - ), 3), - _cE("text", _uM("class" to "item-arrow"), "›") - )) - )) - )) - )), - _cE("view", _uM("class" to "settings-section"), _uA( - _cE("text", _uM("class" to "section-title"), "消息通知"), - _cE("view", _uM("class" to "section-list"), _uA( - _cE("view", _uM("class" to "list-item"), _uA( - _cE("text", _uM("class" to "item-icon"), "🔔"), - _cE("text", _uM("class" to "item-text"), "订单消息"), - _cV(_component_switch, _uM("class" to "settings-switch", "checked" to notifications.value.order, "onChange" to fun(){ - toggleNotification("order") - } - ), null, 8, _uA( - "checked", - "onChange" - )) - )), - _cE("view", _uM("class" to "list-item"), _uA( - _cE("text", _uM("class" to "item-icon"), "🎁"), - _cE("text", _uM("class" to "item-text"), "促销活动"), - _cV(_component_switch, _uM("class" to "settings-switch", "checked" to notifications.value.promotion, "onChange" to fun(){ - toggleNotification("promotion") - } - ), null, 8, _uA( - "checked", - "onChange" - )) - )), - _cE("view", _uM("class" to "list-item"), _uA( - _cE("text", _uM("class" to "item-icon"), "⭐"), - _cE("text", _uM("class" to "item-text"), "评价提醒"), - _cV(_component_switch, _uM("class" to "settings-switch", "checked" to notifications.value.review, "onChange" to fun(){ - toggleNotification("review") - } - ), null, 8, _uA( - "checked", - "onChange" - )) - )) - )) - )), - _cE("view", _uM("class" to "settings-section"), _uA( - _cE("text", _uM("class" to "section-title"), "隐私设置"), - _cE("view", _uM("class" to "section-list"), _uA( - _cE("view", _uM("class" to "list-item"), _uA( - _cE("text", _uM("class" to "item-icon"), "👁️"), - _cE("text", _uM("class" to "item-text"), "隐藏购物记录"), - _cV(_component_switch, _uM("class" to "settings-switch", "checked" to privacy.value.hidePurchase, "onChange" to fun(){ - togglePrivacy("hidePurchase") - } - ), null, 8, _uA( - "checked", - "onChange" - )) - )), - _cE("view", _uM("class" to "list-item"), _uA( - _cE("text", _uM("class" to "item-icon"), "🔍"), - _cE("text", _uM("class" to "item-text"), "允许通过手机号找到我"), - _cV(_component_switch, _uM("class" to "settings-switch", "checked" to privacy.value.allowSearchByPhone, "onChange" to fun(){ - togglePrivacy("allowSearchByPhone") - } - ), null, 8, _uA( - "checked", - "onChange" - )) - )), - _cE("view", _uM("class" to "list-item"), _uA( - _cE("text", _uM("class" to "item-icon"), "💬"), - _cE("text", _uM("class" to "item-text"), "接收商家消息"), - _cV(_component_switch, _uM("class" to "settings-switch", "checked" to privacy.value.receiveMerchantMsg, "onChange" to fun(){ - togglePrivacy("receiveMerchantMsg") - } - ), null, 8, _uA( - "checked", - "onChange" - )) - )) - )) - )), - _cE("view", _uM("class" to "settings-section"), _uA( - _cE("text", _uM("class" to "section-title"), "通用设置"), - _cE("view", _uM("class" to "section-list"), _uA( - _cE("view", _uM("class" to "list-item", "onClick" to clearCache), _uA( - _cE("text", _uM("class" to "item-icon"), "🗑️"), - _cE("text", _uM("class" to "item-text"), "清除缓存"), - _cE("view", _uM("class" to "item-right"), _uA( - _cE("text", _uM("class" to "item-cache"), _tD(cacheSize.value), 1), - _cE("text", _uM("class" to "item-arrow"), "›") - )) - )), - _cE("view", _uM("class" to "list-item", "onClick" to changeLanguage), _uA( - _cE("text", _uM("class" to "item-icon"), "🌐"), - _cE("text", _uM("class" to "item-text"), "语言设置"), - _cE("view", _uM("class" to "item-right"), _uA( - _cE("text", _uM("class" to "item-status"), _tD(currentLanguage.value), 1), - _cE("text", _uM("class" to "item-arrow"), "›") - )) - )), - _cE("view", _uM("class" to "list-item", "onClick" to changeTheme), _uA( - _cE("text", _uM("class" to "item-icon"), "🎨"), - _cE("text", _uM("class" to "item-text"), "主题设置"), - _cE("view", _uM("class" to "item-right"), _uA( - _cE("text", _uM("class" to "item-status"), _tD(currentTheme.value), 1), - _cE("text", _uM("class" to "item-arrow"), "›") - )) - )) - )) - )), - _cE("view", _uM("class" to "settings-section"), _uA( - _cE("text", _uM("class" to "section-title"), "我的服务"), - _cE("view", _uM("class" to "section-list"), _uA( - _cE("view", _uM("class" to "list-item", "onClick" to goToMyReviews), _uA( - _cE("text", _uM("class" to "item-icon"), "📝"), - _cE("text", _uM("class" to "item-text"), "我的评价"), - _cE("text", _uM("class" to "item-arrow"), "›") - )) - )) - )), - _cE("view", _uM("class" to "settings-section"), _uA( - _cE("text", _uM("class" to "section-title"), "关于我们"), - _cE("view", _uM("class" to "section-list"), _uA( - _cE("view", _uM("class" to "list-item", "onClick" to aboutUs), _uA( - _cE("text", _uM("class" to "item-icon"), "ℹ️"), - _cE("text", _uM("class" to "item-text"), "关于商城"), - _cE("text", _uM("class" to "item-arrow"), "›") - )), - _cE("view", _uM("class" to "list-item", "onClick" to userAgreement), _uA( - _cE("text", _uM("class" to "item-icon"), "📜"), - _cE("text", _uM("class" to "item-text"), "用户协议"), - _cE("text", _uM("class" to "item-arrow"), "›") - )), - _cE("view", _uM("class" to "list-item", "onClick" to privacyPolicy), _uA( - _cE("text", _uM("class" to "item-icon"), "🛡️"), - _cE("text", _uM("class" to "item-text"), "隐私政策"), - _cE("text", _uM("class" to "item-arrow"), "›") - )), - _cE("view", _uM("class" to "list-item", "onClick" to checkUpdate), _uA( - _cE("text", _uM("class" to "item-icon"), "🔄"), - _cE("text", _uM("class" to "item-text"), "检查更新"), - _cE("view", _uM("class" to "item-right"), _uA( - _cE("text", _uM("class" to "item-status"), _tD(appVersion.value), 1), - _cE("text", _uM("class" to "item-arrow"), "›") - )) - )) - )) - )), - _cE("view", _uM("class" to "settings-section"), _uA( - _cE("text", _uM("class" to "section-title"), "客服与反馈"), - _cE("view", _uM("class" to "section-list"), _uA( - _cE("view", _uM("class" to "list-item", "onClick" to contactService), _uA( - _cE("text", _uM("class" to "item-icon"), "💬"), - _cE("text", _uM("class" to "item-text"), "联系客服"), - _cE("text", _uM("class" to "item-arrow"), "›") - )), - _cE("view", _uM("class" to "list-item", "onClick" to feedback), _uA( - _cE("text", _uM("class" to "item-icon"), "📝"), - _cE("text", _uM("class" to "item-text"), "意见反馈"), - _cE("text", _uM("class" to "item-arrow"), "›") - )), - _cE("view", _uM("class" to "list-item", "onClick" to rateApp), _uA( - _cE("text", _uM("class" to "item-icon"), "⭐"), - _cE("text", _uM("class" to "item-text"), "给个好评"), - _cE("text", _uM("class" to "item-arrow"), "›") - )) - )) - )), - _cE("view", _uM("class" to "logout-section"), _uA( - _cE("button", _uM("class" to "logout-btn", "onClick" to logout), "退出登录") - )), - _cE("view", _uM("class" to "delete-account-section"), _uA( - _cE("text", _uM("class" to "delete-account", "onClick" to deleteAccount), "注销账号") - )) - )) - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("section-list" to _pS(_uM("display" to "flex", "flexDirection" to "row", "flexWrap" to "wrap", "justifyContent" to "flex-start")), "list-item" to _pS(_uM("display" to "flex", "alignItems" to "center", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#f5f5f5", "backgroundColor" to "#ffffff", "width" to "25%", "flexDirection" to "column", "justifyContent" to "center", "textAlign" to "center", "boxSizing" to "border-box", "borderRightWidth" to 1, "borderRightStyle" to "solid", "borderRightColor" to "#f5f5f5")), "item-icon" to _pS(_uM("fontSize" to 20, "marginRight" to 15, "marginBottom" to 5)), "item-text" to _pS(_uM("fontSize" to 14, "color" to "#333333", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "item-arrow" to _pS(_uM("display" to "none", "color" to "#999999", "fontSize" to 16, "marginLeft" to 10)), "item-right" to _pS(_uM("display" to "flex", "alignItems" to "center")), "settings-switch" to _pS(_uM("transform" to "scale(0.7)", "marginTop" to 5)), "settings-page" to _pS(_uM("display" to "flex", "flexDirection" to "column", "height" to "100%", "backgroundColor" to "#f5f5f5")), "settings-header" to _pS(_uM("backgroundColor" to "#ffffff", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "display" to "flex", "alignItems" to "center", "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#e5e5e5")), "back-btn" to _pS(_uM("fontSize" to 24, "color" to "#333333", "paddingTop" to 5, "paddingRight" to 5, "paddingBottom" to 5, "paddingLeft" to 5, "marginRight" to 15)), "header-title" to _pS(_uM("fontSize" to 18, "fontWeight" to "bold", "color" to "#333333")), "settings-content" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "settings-section" to _pS(_uM("backgroundColor" to "#ffffff", "marginBottom" to 10, "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15)), "section-title" to _pS(_uM("fontSize" to 16, "fontWeight" to "bold", "color" to "#333333", "marginBottom" to 15)), "item-status" to _uM("" to _uM("fontSize" to 12, "color" to "#999999", "marginRight" to 10), ".bound" to _uM("color" to "#4caf50")), "item-cache" to _pS(_uM("fontSize" to 12, "color" to "#999999", "marginRight" to 10)), "logout-section" to _pS(_uM("backgroundColor" to "#ffffff", "marginTop" to 10, "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15)), "logout-btn" to _pS(_uM("backgroundColor" to "#ffffff", "color" to "#ff4757", "height" to 45, "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#ff4757", "borderRightColor" to "#ff4757", "borderBottomColor" to "#ff4757", "borderLeftColor" to "#ff4757", "borderTopLeftRadius" to 22.5, "borderTopRightRadius" to 22.5, "borderBottomRightRadius" to 22.5, "borderBottomLeftRadius" to 22.5, "fontSize" to 16, "fontWeight" to "bold")), "delete-account-section" to _pS(_uM("backgroundColor" to "#ffffff", "paddingTop" to 20, "paddingRight" to 15, "paddingBottom" to 20, "paddingLeft" to 15, "textAlign" to "center")), "delete-account" to _pS(_uM("color" to "#999999", "fontSize" to 14))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/mall/consumer/shop-detail.kt b/unpackage/cache/.app-android/src/pages/mall/consumer/shop-detail.kt deleted file mode 100644 index 038818d1..00000000 --- a/unpackage/cache/.app-android/src/pages/mall/consumer/shop-detail.kt +++ /dev/null @@ -1,540 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.hideLoading as uni_hideLoading -import io.dcloud.uniapp.extapi.navigateTo as uni_navigateTo -import io.dcloud.uniapp.extapi.showLoading as uni_showLoading -import io.dcloud.uniapp.extapi.showToast as uni_showToast -import io.dcloud.uniapp.extapi.stopPullDownRefresh as uni_stopPullDownRefresh -open class GenPagesMallConsumerShopDetail : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesMallConsumerShopDetail) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesMallConsumerShopDetail - val _cache = __ins.renderCache - val currentPage = ref(1) - val pageSize = ref(6) - val hasMore = ref(true) - val isLoading = ref(false) - val currentMerchantId = ref("") - val merchant = ref(MerchantType(id = "", user_id = "", shop_name = "", shop_logo = "", shop_banner = "", shop_description = "", contact_name = "", contact_phone = "", shop_status = 0, rating = 0, total_sales = 0, created_at = "")) - val products = ref(_uA()) - val isFollowed = ref(false) - val coupons = ref(_uA()) - val isRefresherTriggered = ref(false) - val checkFollowStatus = fun(shopId: String): UTSPromise { - return wrapUTSPromise(suspend { - val userId = supabaseService.getCurrentUserId() - if (userId != null && userId !== "") { - try { - isFollowed.value = await(supabaseService.isShopFollowed(shopId, userId)) - } - catch (e: Throwable) { - console.warn("isShopFollowed method not available", " at pages/mall/consumer/shop-detail.uvue:109") - } - } - }) - } - val loadShopData = fun(id: String): UTSPromise { - return wrapUTSPromise(suspend { - console.log("Loading shop data for:", id, " at pages/mall/consumer/shop-detail.uvue:115") - val shop = await(supabaseService.getShopByMerchantId(id)) - if (shop != null) { - console.log("Shop loaded successfully:", shop.shop_name, " at pages/mall/consumer/shop-detail.uvue:119") - val shopObj = shop as UTSJSONObject - val merchantData: MerchantType = MerchantType(id = shopObj.getString("id") ?: "", user_id = shopObj.getString("merchant_id") ?: "", shop_name = shopObj.getString("shop_name") ?: "", shop_logo = shopObj.getString("shop_logo") ?: "/static/default-shop.png", shop_banner = shopObj.getString("shop_banner") ?: "/static/default-banner.png", shop_description = shopObj.getString("description") ?: "", contact_name = shopObj.getString("contact_name") ?: "", contact_phone = shopObj.getString("contact_phone") ?: "", shop_status = 1, rating = shopObj.getNumber("rating_avg") ?: 5.0, total_sales = shopObj.getNumber("total_sales") ?: 0, created_at = shopObj.getString("created_at") ?: "") - merchant.value = merchantData - val shopId = shopObj.getString("id") ?: "" - if (shopId !== "") { - checkFollowStatus(shopId) - } - } else { - console.warn("Shop data is null for ID:", id, " at pages/mall/consumer/shop-detail.uvue:142") - uni_showToast(ShowToastOptions(title = "未找到店铺信息", icon = "none", duration = 3000)) - } - }) - } - val loadCoupons = fun(id: String): UTSPromise { - return wrapUTSPromise(suspend { - try { - val rawCoupons = await(supabaseService.fetchShopCoupons(id)) - if (rawCoupons != null && UTSArray.isArray(rawCoupons)) { - val couponList: UTSArray = _uA() - run { - var i: Number = 0 - while(i < rawCoupons.length){ - val c = rawCoupons[i] as UTSJSONObject - val coupon: CouponTemplateType = CouponTemplateType(id = c.getString("id") ?: "", name = c.getString("name") ?: "", description = c.getString("description"), coupon_type = c.getNumber("coupon_type") ?: 0, discount_type = c.getNumber("discount_type") ?: 0, discount_value = c.getNumber("discount_value") ?: 0, min_order_amount = c.getNumber("min_order_amount") ?: 0, max_discount_amount = c.getNumber("max_discount_amount"), total_quantity = c.getNumber("total_quantity"), per_user_limit = c.getNumber("per_user_limit") ?: 1, usage_limit = c.getNumber("usage_limit") ?: 0, merchant_id = c.getString("merchant_id"), category_ids = _uA(), product_ids = _uA(), user_type_limit = c.getNumber("user_type_limit"), start_time = c.getString("start_time") ?: "", end_time = c.getString("end_time") ?: "", status = c.getNumber("status") ?: 1, created_at = c.getString("created_at") ?: "") - couponList.push(coupon) - i++ - } - } - coupons.value = couponList - } - } - catch (e: Throwable) { - console.warn("SupabaseService.fetchShopCoupons method missing.", " at pages/mall/consumer/shop-detail.uvue:184") - } - }) - } - val loadShopProducts = fun(id: String): UTSPromise { - return wrapUTSPromise(suspend w1@{ - if (isLoading.value) { - return@w1 - } - isLoading.value = true - if (currentPage.value === 1) { - currentMerchantId.value = id - } - console.log("shop-detail loadShopProducts for: " + id + " page: " + currentPage.value, " at pages/mall/consumer/shop-detail.uvue:196") - var res: Any = UTSJSONObject() - try { - res = await(supabaseService.getProductsByMerchantId(id, currentPage.value, pageSize.value)) - } - catch (e: Throwable) { - console.error("getProductsByMerchantId missing or error:", e, " at pages/mall/consumer/shop-detail.uvue:202") - isLoading.value = false - uni_stopPullDownRefresh() - return@w1 - } - val rawList = res?.data - if (rawList != null && UTSArray.isArray(rawList) && (rawList as UTSArray).length > 0) { - val list: UTSArray = _uA() - run { - var idx: Number = 0 - while(idx < (rawList as UTSArray).length){ - val item = (rawList as UTSArray)[idx] as UTSJSONObject - val images: UTSArray = _uA() - val mainImageUrl = item.getString("main_image_url") - if (mainImageUrl != null && mainImageUrl !== "") { - images.push(mainImageUrl) - } - val imageUrlsRaw = item.get("image_urls") - if (imageUrlsRaw != null) { - try { - if (UTSArray.isArray(imageUrlsRaw)) { - val arr = imageUrlsRaw as UTSArray - if (arr.length > 0) { - if (images.length == 0) { - run { - var i: Number = 0 - while(i < arr.length){ - images.push(arr[i]) - i++ - } - } - } - } - } else { - val rawUrlStr = imageUrlsRaw as String - if (rawUrlStr.startsWith("[")) { - val parsed = UTSAndroid.consoleDebugError(JSON.parse(rawUrlStr), " at pages/mall/consumer/shop-detail.uvue:236") - if (UTSArray.isArray(parsed) && images.length == 0) { - run { - var i: Number = 0 - while(i < (parsed as UTSArray).length){ - images.push((parsed as UTSArray)[i] as String) - i++ - } - } - } - } else { - if (images.indexOf(rawUrlStr) === -1) { - images.push(rawUrlStr) - } - } - } - } - catch (e: Throwable) { - console.error("解析图片数组失败:", e, " at pages/mall/consumer/shop-detail.uvue:247") - } - } - if (images.length === 0) { - images.push("/static/default-product.png") - } - var safePrice = item.getNumber("base_price") - if (safePrice == null) { - val p = item.getNumber("price") - safePrice = if (p != null) { - p - } else { - 0 - } - } - var safeMarketPrice = item.getNumber("market_price") - if (safeMarketPrice == null) { - val mp = item.getNumber("original_price") - safeMarketPrice = if (mp != null) { - mp - } else { - safePrice - } - } - var safeStock = item.getNumber("total_stock") - if (safeStock == null) { - var as_ = item.getNumber("available_stock") - if (as_ == null) { - val s = item.getNumber("stock") - safeStock = if (s != null) { - s - } else { - 0 - } - } else { - safeStock = as_ - } - } - var safeSales = item.getNumber("sale_count") - if (safeSales == null) { - val s = item.getNumber("sales") - safeSales = if (s != null) { - s - } else { - 0 - } - } - val product: ProductType = ProductType(id = item.getString("id") ?: "", merchant_id = item.getString("merchant_id") ?: "", category_id = item.getString("category_id") ?: "", name = item.getString("name") ?: "", description = item.getString("description") ?: "", images = images, price = safePrice, original_price = safeMarketPrice, stock = safeStock, sales = safeSales, status = 1, created_at = item.getString("created_at") ?: "") - list.push(product) - idx++ - } - } - if (currentPage.value === 1) { - products.value = list - } else { - run { - var i: Number = 0 - while(i < list.length){ - products.value.push(list[i]) - i++ - } - } - } - if (list.length < pageSize.value) { - hasMore.value = false - } else { - hasMore.value = true - currentPage.value++ - } - } else { - console.log("未加载到店铺商品 (本页为空)", " at pages/mall/consumer/shop-detail.uvue:317") - if (currentPage.value === 1) { - products.value = _uA() - } - hasMore.value = false - } - isLoading.value = false - uni_stopPullDownRefresh() - }) - } - val toggleFollow = fun(): UTSPromise { - return wrapUTSPromise(suspend w1@{ - val userId = supabaseService.getCurrentUserId() - if (userId == null) { - uni_navigateTo(NavigateToOptions(url = "/pages/auth/login")) - return@w1 - } - val shopId = merchant.value.id - if (shopId == null || shopId == "") { - return@w1 - } - uni_showLoading(ShowLoadingOptions(title = "处理中")) - if (isFollowed.value) { - try { - val success = await(supabaseService.unfollowShop(shopId, userId)) - if (success) { - isFollowed.value = false - uni_showToast(ShowToastOptions(title = "已取消关注", icon = "none")) - } else { - uni_showToast(ShowToastOptions(title = "操作失败", icon = "none")) - } - } catch (e: Throwable) { - uni_showToast(ShowToastOptions(title = "操作失败", icon = "none")) - } - } else { - try { - val success = await(supabaseService.followShop(shopId, userId)) - if (success) { - isFollowed.value = true - uni_showToast(ShowToastOptions(title = "关注成功", icon = "success")) - } else { - uni_showToast(ShowToastOptions(title = "关注失败", icon = "none")) - } - } - catch (e: Throwable) { - uni_showToast(ShowToastOptions(title = "关注失败", icon = "none")) - } - } - uni_hideLoading() - }) - } - val contactService = fun(){ - val currentUser = supabaseService.getCurrentUserId() - if (currentUser == null) { - uni_navigateTo(NavigateToOptions(url = "/pages/user/login")) - return - } - if (merchant.value.user_id != null && merchant.value.user_id != "") { - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/chat?merchantId=" + merchant.value.user_id + "&merchantName=" + UTSAndroid.consoleDebugError(encodeURIComponent(merchant.value.shop_name), " at pages/mall/consumer/shop-detail.uvue:382"))) - } else { - uni_showToast(ShowToastOptions(title = "无法联系商家", icon = "none")) - } - } - val addToCart = fun(product: ProductType): UTSPromise { - return wrapUTSPromise(suspend { - uni_showLoading(ShowLoadingOptions(title = "添加中...")) - val success = await(supabaseService.addToCart(product.id, 1, "")) - uni_hideLoading() - if (success) { - uni_showToast(ShowToastOptions(title = "已添加到购物车", icon = "success")) - } else { - uni_showToast(ShowToastOptions(title = "添加失败,请重试", icon = "none")) - } - }) - } - val goToProduct = fun(id: String){ - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/product-detail?productId=" + id)) - } - val claimCoupon = fun(coupon: CouponTemplateType): UTSPromise { - return wrapUTSPromise(suspend w1@{ - val userId = supabaseService.getCurrentUserId() - if (userId == null) { - uni_navigateTo(NavigateToOptions(url = "/pages/auth/login")) - return@w1 - } - uni_showLoading(ShowLoadingOptions(title = "领取中")) - var success = false - val couponId = coupon.id - try { - success = await(supabaseService.claimShopCoupon(couponId, userId)) - } - catch (e: Throwable) { - try { - success = await(supabaseService.claimCoupon(couponId, userId)) - } - catch (e2: Throwable) { - console.warn("claimCoupon not found", " at pages/mall/consumer/shop-detail.uvue:432") - } - } - uni_hideLoading() - if (success) { - uni_showToast(ShowToastOptions(title = "领取成功", icon = "success")) - } else { - uni_showToast(ShowToastOptions(title = "领取失败", icon = "none")) - } - }) - } - val onRefresherRefresh = fun(): Unit { - isRefresherTriggered.value = true - currentPage.value = 1 - hasMore.value = true - isLoading.value = false - if (currentMerchantId.value != "") { - val id = currentMerchantId.value - loadShopData(id) - loadCoupons(id) - loadShopProducts(id) - setTimeout(fun(){ - isRefresherTriggered.value = false - }, 500) - } else { - setTimeout(fun(){ - isRefresherTriggered.value = false - } - , 500) - } - } - val onScrollToLower = fun(): Unit { - if (hasMore.value && isLoading.value == false && currentMerchantId.value != "") { - console.log("Scroll to lower, loading more...", " at pages/mall/consumer/shop-detail.uvue:467") - loadShopProducts(currentMerchantId.value) - } - } - onMounted(fun(){ - val pages = getCurrentPages() - val options = pages[pages.length - 1].options as UTSJSONObject - val mId = options.getString("merchantId") - val pId = options.getString("id") - val paramId = if (mId != null) { - mId - } else { - pId - } - as String - if (paramId != null && paramId !== "") { - console.log("Page mounted with params:", paramId, " at pages/mall/consumer/shop-detail.uvue:480") - loadShopData(paramId) - loadShopProducts(paramId) - loadCoupons(paramId) - } else { - console.error("No ID passed to shop-detail", " at pages/mall/consumer/shop-detail.uvue:485") - uni_showToast(ShowToastOptions(title = "参数错误", icon = "error")) - } - } - ) - onPullDownRefresh(fun(){ - onRefresherRefresh() - } - ) - onReachBottom(fun(){ - onScrollToLower() - } - ) - return fun(): Any? { - return _cE("view", _uM("class" to "shop-detail-page"), _uA( - _cE("scroll-view", _uM("class" to "page-scroll", "scroll-y" to "true", "onScrolltolower" to onScrollToLower, "refresher-enabled" to "true", "onRefresherrefresh" to onRefresherRefresh, "refresher-triggered" to isRefresherTriggered.value), _uA( - _cE("view", _uM("class" to "shop-header"), _uA( - _cE("image", _uM("src" to if (merchant.value.shop_banner != "") { - merchant.value.shop_banner - } else { - "/static/default-banner.png" - } - , "class" to "shop-banner", "mode" to "aspectFill"), null, 8, _uA( - "src" - )), - _cE("view", _uM("class" to "shop-info-card"), _uA( - _cE("image", _uM("src" to if (merchant.value.shop_logo != "") { - merchant.value.shop_logo - } else { - "/static/default-shop.png" - } - , "class" to "shop-logo"), null, 8, _uA( - "src" - )), - _cE("view", _uM("class" to "shop-basic-info"), _uA( - _cE("text", _uM("class" to "shop-name"), _tD(merchant.value.shop_name), 1), - _cE("view", _uM("class" to "shop-stats"), _uA( - _cE("text", _uM("class" to "stat-item"), "⭐ " + _tD(merchant.value.rating.toFixed(1)), 1), - _cE("text", _uM("class" to "stat-item"), "销量 " + _tD(merchant.value.total_sales), 1) - )) - )), - _cE("view", _uM("class" to "shop-actions"), _uA( - _cE("view", _uM("class" to "action-btn chat-btn", "onClick" to contactService), _uA( - _cE("text", _uM("class" to "action-text"), "客服") - )), - _cE("view", _uM("class" to "action-btn follow-btn", "onClick" to toggleFollow), _uA( - _cE("text", _uM("class" to _nC(_uA( - "action-text", - _uM("followed" to isFollowed.value) - ))), _tD(if (isFollowed.value) { - "已关注" - } else { - "+ 关注" - } - ), 3) - )) - )) - )), - _cE("text", _uM("class" to "shop-desc"), _tD(if (merchant.value.shop_description != "") { - merchant.value.shop_description - } else { - "这家店很懒,什么都没写~" - } - ), 1), - if (coupons.value.length > 0) { - _cE("view", _uM("key" to 0, "class" to "shop-coupons"), _uA( - _cE("scroll-view", _uM("scroll-x" to "true", "class" to "coupon-scroll", "show-scrollbar" to "false"), _uA( - _cE("view", _uM("class" to "coupon-wrapper"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(coupons.value, fun(coupon, __key, __index, _cached): Any { - return _cE("view", _uM("class" to "coupon-card", "key" to coupon.id, "onClick" to fun(){ - claimCoupon(coupon) - }), _uA( - _cE("view", _uM("class" to "coupon-left"), _uA( - _cE("text", _uM("class" to "coupon-amount"), _uA( - _cE("text", _uM("style" to _nS(_uM("font-size" to "10px"))), "¥", 4), - _tD(coupon.discount_value) - )), - if (coupon.min_order_amount > 0) { - _cE("text", _uM("key" to 0, "class" to "coupon-cond"), "满" + _tD(coupon.min_order_amount), 1) - } else { - _cE("text", _uM("key" to 1, "class" to "coupon-cond"), "无门槛") - } - )), - _cE("view", _uM("class" to "coupon-right"), _uA( - _cE("text", _uM("class" to "coupon-btn-label"), "领取") - )) - ), 8, _uA( - "onClick" - )) - }), 128) - )) - )) - )) - } else { - _cC("v-if", true) - } - )), - _cE("view", _uM("class" to "product-section"), _uA( - _cE("view", _uM("class" to "section-title"), "全部商品"), - _cE("view", _uM("class" to "product-grid"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(products.value, fun(product, __key, __index, _cached): Any { - return _cE("view", _uM("key" to product.id, "class" to "product-item", "onClick" to fun(){ - goToProduct(product.id) - } - ), _uA( - _cE("image", _uM("src" to product.images[0], "class" to "product-image", "mode" to "aspectFill"), null, 8, _uA( - "src" - )), - _cE("view", _uM("class" to "product-info"), _uA( - _cE("text", _uM("class" to "product-name"), _tD(product.name), 1), - _cE("view", _uM("class" to "price-row"), _uA( - _cE("view", _uM("class" to "price-left"), _uA( - _cE("text", _uM("class" to "product-price"), "¥" + _tD(product.price), 1), - _cE("text", _uM("class" to "product-sales"), "已售 " + _tD(product.sales), 1) - )), - _cE("view", _uM("class" to "cart-btn", "onClick" to withModifiers(fun(){ - addToCart(product) - } - , _uA( - "stop" - ))), _uA( - _cE("text", _uM("class" to "cart-icon"), "🛒") - ), 8, _uA( - "onClick" - )) - )) - )) - ), 8, _uA( - "onClick" - )) - } - ), 128) - )) - )) - ), 40, _uA( - "refresher-triggered" - )) - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("shop-detail-page" to _pS(_uM("backgroundColor" to "#f5f5f5", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "display" to "flex", "flexDirection" to "column")), "page-scroll" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "height" to 0, "width" to "100%")), "shop-header" to _pS(_uM("backgroundColor" to "#ffffff", "paddingBottom" to 20, "marginBottom" to 10)), "shop-banner" to _pS(_uM("width" to "100%", "height" to 150, "backgroundColor" to "#eeeeee")), "shop-info-card" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center", "paddingTop" to 0, "paddingRight" to 15, "paddingBottom" to 0, "paddingLeft" to 15, "marginTop" to -30, "position" to "relative", "zIndex" to 1)), "shop-logo" to _pS(_uM("width" to 60, "height" to 60, "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "borderTopWidth" to 2, "borderRightWidth" to 2, "borderBottomWidth" to 2, "borderLeftWidth" to 2, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#ffffff", "borderRightColor" to "#ffffff", "borderBottomColor" to "#ffffff", "borderLeftColor" to "#ffffff", "backgroundColor" to "#ffffff", "marginRight" to 12)), "shop-basic-info" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "display" to "flex", "flexDirection" to "column", "paddingTop" to 30)), "shop-name" to _pS(_uM("fontSize" to 18, "fontWeight" to "bold", "color" to "#333333", "marginBottom" to 4)), "shop-stats" to _pS(_uM("display" to "flex", "flexDirection" to "row")), "stat-item" to _pS(_uM("fontSize" to 12, "color" to "#666666", "marginRight" to 12, "backgroundColor" to "#f0f0f0", "paddingTop" to 2, "paddingRight" to 6, "paddingBottom" to 2, "paddingLeft" to 6, "borderTopLeftRadius" to 4, "borderTopRightRadius" to 4, "borderBottomRightRadius" to 4, "borderBottomLeftRadius" to 4)), "shop-actions" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center", "paddingTop" to 30)), "action-btn" to _pS(_uM("borderTopLeftRadius" to 20, "borderTopRightRadius" to 20, "borderBottomRightRadius" to 20, "borderBottomLeftRadius" to 20, "marginLeft" to 10, "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "center", "paddingTop" to 6, "paddingRight" to 16, "paddingBottom" to 6, "paddingLeft" to 16)), "action-text" to _uM("" to _uM("fontSize" to 14), ".chat-btn " to _uM("color" to "#333333"), ".follow-btn " to _uM("color" to "#ffffff")), "chat-btn" to _pS(_uM("backgroundColor" to "#ffffff", "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#dddddd", "borderRightColor" to "#dddddd", "borderBottomColor" to "#dddddd", "borderLeftColor" to "#dddddd")), "follow-btn" to _pS(_uM("backgroundColor" to "#ff4444", "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#ff4444", "borderRightColor" to "#ff4444", "borderBottomColor" to "#ff4444", "borderLeftColor" to "#ff4444")), "followed" to _uM(".follow-btn " to _uM("opacity" to 0.9)), "shop-desc" to _pS(_uM("color" to "#666666", "paddingTop" to 10, "paddingRight" to 15, "paddingBottom" to 0, "paddingLeft" to 15, "lineHeight" to 1.4)), "shop-coupons" to _pS(_uM("marginTop" to 15, "paddingTop" to 0, "paddingRight" to 15, "paddingBottom" to 0, "paddingLeft" to 15)), "coupon-scroll" to _pS(_uM("width" to "100%", "whiteSpace" to "nowrap", "flexDirection" to "row")), "coupon-wrapper" to _pS(_uM("display" to "flex", "flexDirection" to "row", "flexWrap" to "nowrap", "alignItems" to "center")), "coupon-card" to _pS(_uM("display" to "flex", "flexDirection" to "row", "backgroundColor" to "#fff5f5", "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#ffccc7", "borderRightColor" to "#ffccc7", "borderBottomColor" to "#ffccc7", "borderLeftColor" to "#ffccc7", "borderTopLeftRadius" to 4, "borderTopRightRadius" to 4, "borderBottomRightRadius" to 4, "borderBottomLeftRadius" to 4, "marginRight" to 10, "width" to 150, "height" to 64, "overflow" to "hidden", "flexShrink" to 0)), "coupon-left" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "display" to "flex", "flexDirection" to "column", "justifyContent" to "center", "alignItems" to "center", "borderRightWidth" to 1, "borderRightStyle" to "dashed", "borderRightColor" to "#ffccc7", "paddingTop" to 0, "paddingRight" to 5, "paddingBottom" to 0, "paddingLeft" to 5)), "coupon-amount" to _pS(_uM("color" to "#ff4444", "fontWeight" to "bold", "fontSize" to 18)), "coupon-cond" to _pS(_uM("color" to "#999999", "fontSize" to 10)), "coupon-right" to _pS(_uM("width" to 40, "display" to "flex", "justifyContent" to "center", "alignItems" to "center", "backgroundColor" to "#ff4444", "flexDirection" to "column")), "coupon-btn-label" to _pS(_uM("color" to "#ffffff", "fontSize" to 12, "width" to 14, "textAlign" to "center", "lineHeight" to 1.2)), "product-section" to _pS(_uM("paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15)), "section-title" to _pS(_uM("fontSize" to 16, "fontWeight" to "bold", "color" to "#333333", "marginBottom" to 15, "paddingLeft" to 8, "borderLeftWidth" to 4, "borderLeftStyle" to "solid", "borderLeftColor" to "#ff4444")), "product-grid" to _pS(_uM("display" to "flex", "flexDirection" to "row", "flexWrap" to "wrap", "width" to "100%", "justifyContent" to "space-between")), "product-item" to _pS(_uM("width" to "48%", "backgroundColor" to "#FFFFFF", "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "overflow" to "hidden", "display" to "flex", "flexDirection" to "column", "marginBottom" to 10, "boxSizing" to "border-box")), "product-image" to _pS(_uM("width" to "100%", "height" to 170, "backgroundColor" to "#f5f5f5")), "product-info" to _pS(_uM("paddingTop" to 10, "paddingRight" to 10, "paddingBottom" to 10, "paddingLeft" to 10, "display" to "flex", "flexDirection" to "column")), "product-name" to _pS(_uM("fontSize" to 14, "color" to "#333333", "marginBottom" to 8, "textOverflow" to "ellipsis", "lines" to 2, "overflow" to "hidden", "height" to 40, "lineHeight" to "20px")), "price-row" to _pS(_uM("display" to "flex", "flexDirection" to "row", "justifyContent" to "space-between", "alignItems" to "center")), "price-left" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "flex-end")), "cart-btn" to _pS(_uM("width" to 24, "height" to 24, "backgroundColor" to "#ff4444", "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12)), "cart-icon" to _pS(_uM("fontSize" to 14, "color" to "#FFFFFF")), "product-price" to _pS(_uM("fontSize" to 16, "color" to "#ff4444", "fontWeight" to "bold")), "product-sales" to _pS(_uM("fontSize" to 12, "color" to "#999999"))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/mall/consumer/subscription/followed-shops.kt b/unpackage/cache/.app-android/src/pages/mall/consumer/subscription/followed-shops.kt deleted file mode 100644 index 51248291..00000000 --- a/unpackage/cache/.app-android/src/pages/mall/consumer/subscription/followed-shops.kt +++ /dev/null @@ -1,179 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.navigateTo as uni_navigateTo -import io.dcloud.uniapp.extapi.showModal as uni_showModal -import io.dcloud.uniapp.extapi.showToast as uni_showToast -import io.dcloud.uniapp.extapi.switchTab as uni_switchTab -open class GenPagesMallConsumerSubscriptionFollowedShops : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesMallConsumerSubscriptionFollowedShops) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesMallConsumerSubscriptionFollowedShops - val _cache = __ins.renderCache - val shops = ref(_uA()) - val loading = ref(true) - val loadFollowedShops = fun(): UTSPromise { - return wrapUTSPromise(suspend w1@{ - loading.value = true - val userId = supabaseService.getCurrentUserId() - if (userId == null || userId == "") { - uni_navigateTo(NavigateToOptions(url = "/pages/auth/login")) - return@w1 - } - val res = await(supabaseService.getFollowedShops(userId)) - val list: UTSArray = _uA() - if (res != null && UTSArray.isArray(res)) { - run { - var i: Number = 0 - while(i < res.length){ - val item = res[i] as UTSJSONObject - val shopDataRaw = item.get("ml_shops") - if (shopDataRaw != null) { - val shopData = shopDataRaw as UTSJSONObject - val shop: FollowedShop = FollowedShop(id = shopData.getString("id") ?: "", merchant_id = shopData.getString("merchant_id") ?: "", shop_name = shopData.getString("shop_name") ?: "", shop_logo = shopData.getString("shop_logo"), description = shopData.getString("description"), rating_avg = shopData.getNumber("rating_avg") ?: 5.0, total_sales = shopData.getNumber("total_sales") ?: 0) - list.push(shop) - } - i++ - } - } - } - shops.value = list - loading.value = false - }) - } - val doUnfollow = fun(shopId: String, userId: String): UTSPromise { - return wrapUTSPromise(suspend { - val success = await(supabaseService.unfollowShop(shopId, userId)) - if (success) { - uni_showToast(ShowToastOptions(title = "已取消", icon = "none")) - loadFollowedShops() - } else { - uni_showToast(ShowToastOptions(title = "操作失败", icon = "none")) - } - }) - } - val unfollow = fun(shop: FollowedShop): UTSPromise { - return wrapUTSPromise(suspend w1@{ - val userId = supabaseService.getCurrentUserId() - if (userId == null || userId == "") { - return@w1 - } - uni_showModal(ShowModalOptions(title = "提示", content = "确定取消关注该店铺吗?", success = fun(res){ - if (res.confirm) { - doUnfollow(shop.id, userId) - } - } - )) - }) - } - val goToShop = fun(shop: FollowedShop): Unit { - val targetId = if (shop.merchant_id != "") { - shop.merchant_id - } else { - shop.id - } - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/shop-detail?merchantId=" + targetId)) - } - val goHome = fun(): Unit { - uni_switchTab(SwitchTabOptions(url = "/pages/mall/consumer/index")) - } - onMounted(fun(){ - loadFollowedShops() - } - ) - return fun(): Any? { - return _cE("view", _uM("class" to "followed-shops-page"), _uA( - _cE("view", _uM("class" to "header"), _uA( - _cE("text", _uM("class" to "header-title"), "我关注的店铺") - )), - if (shops.value.length > 0) { - _cE("view", _uM("key" to 0, "class" to "shop-list"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(shops.value, fun(shop, __key, __index, _cached): Any { - return _cE("view", _uM("class" to "shop-item", "key" to shop.id, "onClick" to fun(){ - goToShop(shop) - }), _uA( - _cE("image", _uM("src" to if (shop.shop_logo != null) { - shop.shop_logo - } else { - "/static/default-shop.png" - }, "class" to "shop-logo", "mode" to "aspectFill"), null, 8, _uA( - "src" - )), - _cE("view", _uM("class" to "shop-info"), _uA( - _cE("text", _uM("class" to "shop-name"), _tD(shop.shop_name), 1), - _cE("text", _uM("class" to "shop-desc"), _tD(if (shop.description != null) { - shop.description - } else { - "暂无介绍" - }), 1), - _cE("view", _uM("class" to "shop-meta"), _uA( - _cE("text", _uM("class" to "rating shop-meta-text"), "⭐ " + _tD(shop.rating_avg), 1), - _cE("text", _uM("class" to "sales shop-meta-text"), "销量: " + _tD(shop.total_sales), 1) - )) - )), - _cE("button", _uM("class" to "unfollow-btn", "onClick" to withModifiers(fun(){ - unfollow(shop) - }, _uA( - "stop" - ))), "已关注", 8, _uA( - "onClick" - )) - ), 8, _uA( - "onClick" - )) - }), 128) - )) - } else { - if (loading.value == false) { - _cE("view", _uM("key" to 1, "class" to "empty-state"), _uA( - _cE("text", _uM("class" to "empty-text"), "暂无关注的店铺"), - _cE("button", _uM("class" to "go-shop-btn", "onClick" to goHome), "去逛逛") - )) - } else { - _cC("v-if", true) - } - } - , - if (isTrue(loading.value)) { - _cE("view", _uM("key" to 2, "class" to "loading-state"), _uA( - _cE("text", null, "加载中...") - )) - } else { - _cC("v-if", true) - } - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("followed-shops-page" to _pS(_uM("paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "backgroundColor" to "#f5f5f5", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "header" to _pS(_uM("marginBottom" to 15)), "header-title" to _pS(_uM("fontSize" to 18, "fontWeight" to "bold")), "shop-list" to _pS(_uM("display" to "flex", "flexDirection" to "column")), "shop-item" to _pS(_uM("backgroundColor" to "#ffffff", "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "paddingTop" to 12, "paddingRight" to 12, "paddingBottom" to 12, "paddingLeft" to 12, "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "marginBottom" to 10, "marginBottom:last-child" to 0)), "shop-logo" to _pS(_uM("width" to 50, "height" to 50, "borderTopLeftRadius" to 4, "borderTopRightRadius" to 4, "borderBottomRightRadius" to 4, "borderBottomLeftRadius" to 4, "backgroundColor" to "#eeeeee", "marginRight" to 12)), "shop-info" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "display" to "flex", "flexDirection" to "column")), "shop-name" to _pS(_uM("fontSize" to 16, "fontWeight" to "bold", "color" to "#333333")), "shop-desc" to _pS(_uM("fontSize" to 12, "color" to "#999999", "marginTop" to 4, "maxWidth" to 200, "overflow" to "hidden", "textOverflow" to "ellipsis", "whiteSpace" to "nowrap")), "shop-meta" to _pS(_uM("fontSize" to 10, "color" to "#999999", "marginTop" to 4, "display" to "flex")), "shop-meta-text" to _pS(_uM("marginRight" to 8)), "unfollow-btn" to _pS(_uM("fontSize" to 12, "paddingTop" to 4, "paddingRight" to 12, "paddingBottom" to 4, "paddingLeft" to 12, "backgroundColor" to "#eeeeee", "color" to "#666666", "borderTopLeftRadius" to 20, "borderTopRightRadius" to 20, "borderBottomRightRadius" to 20, "borderBottomLeftRadius" to 20, "marginLeft" to 10)), "empty-state" to _pS(_uM("display" to "flex", "flexDirection" to "column", "alignItems" to "center", "justifyContent" to "center", "paddingTop" to 100)), "empty-text" to _pS(_uM("color" to "#999999", "marginBottom" to 20)), "go-shop-btn" to _pS(_uM("backgroundColor" to "#ff4444", "color" to "#FFFFFF", "paddingTop" to 8, "paddingRight" to 24, "paddingBottom" to 8, "paddingLeft" to 24, "borderTopLeftRadius" to 20, "borderTopRightRadius" to 20, "borderBottomRightRadius" to 20, "borderBottomLeftRadius" to 20, "fontSize" to 14)), "loading-state" to _pS(_uM("textAlign" to "center", "paddingTop" to 50, "color" to "#999999"))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/mall/consumer/wallet.kt b/unpackage/cache/.app-android/src/pages/mall/consumer/wallet.kt deleted file mode 100644 index cad1874d..00000000 --- a/unpackage/cache/.app-android/src/pages/mall/consumer/wallet.kt +++ /dev/null @@ -1,502 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.getStorageSync as uni_getStorageSync -import io.dcloud.uniapp.extapi.hideLoading as uni_hideLoading -import io.dcloud.uniapp.extapi.navigateTo as uni_navigateTo -import io.dcloud.uniapp.framework.onShow as onShow__1 -import io.dcloud.uniapp.framework.onLoad as onLoad__1 -import io.dcloud.uniapp.extapi.showLoading as uni_showLoading -import io.dcloud.uniapp.extapi.showToast as uni_showToast -open class GenPagesMallConsumerWallet : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesMallConsumerWallet) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesMallConsumerWallet - val _cache = __ins.renderCache - val balance = ref(0) - val stats = ref(StatsType(totalRecharge = 0, totalConsume = 0, totalWithdraw = 0)) - val transactions = ref(_uA()) - val activeFilter = ref("all") - val isLoading = ref(false) - val currentPage = ref(1) - val pageSize = ref(20) - val hasMore = ref(true) - val showRechargePopup = ref(false) - val rechargeAmount = ref("") - val quickAmounts: UTSArray = _uA( - 50, - 100, - 200, - 500, - 1000 - ) - val getCurrentUserId = fun(): String { - val userStore = uni_getStorageSync("userInfo") - if (userStore == null) { - return "" - } - val userInfo = userStore as UTSJSONObject - return userInfo.getString("id") ?: "" - } - val resetTransactions = fun(): Unit { - transactions.value = _uA() - currentPage.value = 1 - hasMore.value = true - } - val loadBalance = fun(): UTSPromise { - return wrapUTSPromise(suspend { - try { - val realBalance = await(supabaseService.getUserBalance()) - balance.value = realBalance - val statsData: StatsType = StatsType(totalRecharge = 0, totalConsume = 0, totalWithdraw = 0) - stats.value = statsData - } - catch (err: Throwable) { - console.error("加载钱包异常:", err, " at pages/mall/consumer/wallet.uvue:247") - } - }) - } - val loadTransactions = fun(loadMore: Boolean): UTSPromise { - return wrapUTSPromise(suspend w1@{ - if (isLoading.value || (hasMore.value === false && loadMore)) { - return@w1 - } - isLoading.value = true - try { - val userId = getCurrentUserId() - if (userId == "") { - isLoading.value = false - return@w1 - } - val page = if (loadMore) { - currentPage.value + 1 - } else { - 1 - } - val limit: Number = 20 - val data = await(supabaseService.getTransactions(page, limit)) - val mappedData: UTSArray = _uA() - run { - var i: Number = 0 - while(i < data.length){ - val item = data[i] - var id = "" - var amount: Number = 0 - var balanceAfter: Number = 0 - var type = "" - var remark = "" - var createdAt = "" - if (item is UTSJSONObject) { - id = (item as UTSJSONObject).getString("id") ?: "" - amount = (item as UTSJSONObject).getNumber("amount") ?: 0 - balanceAfter = (item as UTSJSONObject).getNumber("balance_after") ?: 0 - type = (item as UTSJSONObject).getString("type") ?: "consume" - remark = (item as UTSJSONObject).getString("description") ?: "" - createdAt = (item as UTSJSONObject).getString("created_at") ?: "" - } else { - val itemObj = item as UTSJSONObject - id = itemObj.getString("id") ?: "" - amount = itemObj.getNumber("amount") ?: 0 - balanceAfter = itemObj.getNumber("balance_after") ?: 0 - type = itemObj.getString("type") ?: "consume" - remark = itemObj.getString("description") ?: "" - createdAt = itemObj.getString("created_at") ?: "" - } - val transaction: TransactionType = TransactionType(id = id, user_id = userId, change_amount = amount, amount = amount, current_balance = balanceAfter, change_type = type, type = type, related_id = null, remark = remark, created_at = createdAt) - mappedData.push(transaction) - i++ - } - } - if (loadMore) { - run { - var i: Number = 0 - while(i < mappedData.length){ - transactions.value.push(mappedData[i]) - i++ - } - } - currentPage.value = page - } else { - transactions.value = mappedData - currentPage.value = 1 - } - hasMore.value = mappedData.length >= limit - } - catch (err: Throwable) { - console.error("加载交易记录失败:", err, " at pages/mall/consumer/wallet.uvue:325") - } - finally { - isLoading.value = false - } - }) - } - val loadWalletData = fun(): UTSPromise { - return wrapUTSPromise(suspend w1@{ - val userId = getCurrentUserId() - if (userId == "") { - return@w1 - } - loadBalance() - loadTransactions(false) - }) - } - val canRecharge = computed(fun(): Boolean { - val amount = parseFloat(rechargeAmount.value) - if (amount == null || amount < 10 || amount > 5000) { - return false - } - return true - } - ) - watch(activeFilter, fun(){ - resetTransactions() - loadTransactions(false) - } - ) - onShow__1(fun(){ - loadWalletData() - } - ) - val getTransactionIcon = fun(type: String): String { - if (type === "recharge") { - return "💳" - } - if (type === "consume") { - return "🛒" - } - if (type === "withdraw") { - return "🏦" - } - if (type === "refund") { - return "🔄" - } - if (type === "reward") { - return "🎁" - } - if (type === "income") { - return "💰" - } - if (type === "expense") { - return "📤" - } - return "💰" - } - val getTransactionTitle = fun(type: String): String { - if (type === "recharge") { - return "账户充值" - } - if (type === "consume") { - return "商品消费" - } - if (type === "withdraw") { - return "余额提现" - } - if (type === "refund") { - return "订单退款" - } - if (type === "reward") { - return "活动奖励" - } - if (type === "income") { - return "收入" - } - if (type === "expense") { - return "支出" - } - return "交易" - } - val formatTime = fun(timeStr: String): String { - val date = Date(timeStr) - val month = (date.getMonth() + 1).toString(10).padStart(2, "0") - val day = date.getDate().toString(10).padStart(2, "0") - val hours = date.getHours().toString(10).padStart(2, "0") - val minutes = date.getMinutes().toString(10).padStart(2, "0") - return "" + month + "-" + day + " " + hours + ":" + minutes - } - val recharge = fun(){ - showRechargePopup.value = true - rechargeAmount.value = "" - } - val withdraw = fun(){ - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/withdraw")) - } - val goToCoupons = fun(){ - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/coupons")) - } - val goToRedPackets = fun(){ - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/red-packets/index")) - } - val goToPoints = fun(){ - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/points/index")) - } - val goToBankCards = fun(){ - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/bank-cards/index")) - } - val changeFilter = fun(filter: String){ - activeFilter.value = filter - } - val selectQuickAmount = fun(amount: Number): Unit { - rechargeAmount.value = amount.toString(10) - } - val closeRechargePopup = fun(): Unit { - showRechargePopup.value = false - rechargeAmount.value = "" - } - val confirmRecharge = fun(): UTSPromise { - return wrapUTSPromise(suspend w1@{ - if (canRecharge.value === false) { - return@w1 - } - val amount = parseFloat(rechargeAmount.value) - if (amount == null || amount < 10 || amount > 5000) { - return@w1 - } - uni_showLoading(ShowLoadingOptions(title = "处理中...")) - try { - val success = await(supabaseService.rechargeBalance(amount)) - if (success) { - uni_showToast(ShowToastOptions(title = "充值成功", icon = "success")) - closeRechargePopup() - loadWalletData() - } else { - uni_showToast(ShowToastOptions(title = "充值失败", icon = "none")) - } - } - catch (e: Throwable) { - console.error("充值异常:", e, " at pages/mall/consumer/wallet.uvue:509") - uni_showToast(ShowToastOptions(title = "系统异常,请稍后重试", icon = "none")) - } - finally { - uni_hideLoading() - } - }) - } - return fun(): Any? { - return _cE("view", _uM("class" to "wallet-page"), _uA( - _cE("scroll-view", _uM("class" to "wallet-content", "scroll-y" to ""), _uA( - _cE("view", _uM("class" to "dashboard-container"), _uA( - _cE("view", _uM("class" to "dashboard-main"), _uA( - _cE("view", _uM("class" to "balance-overview"), _uA( - _cE("text", _uM("class" to "balance-label"), "账户余额"), - _cE("text", _uM("class" to "balance-value"), "¥" + _tD(balance.value.toFixed(2)), 1), - _cE("view", _uM("class" to "balance-actions"), _uA( - _cE("button", _uM("class" to "action-btn recharge", "onClick" to recharge), "充值"), - _cE("button", _uM("class" to "action-btn withdraw", "onClick" to withdraw), "提现") - )) - )), - _cE("view", _uM("class" to "assets-stats"), _uA( - _cE("view", _uM("class" to "stat-item"), _uA( - _cE("text", _uM("class" to "stat-label"), "累计充值"), - _cE("text", _uM("class" to "stat-value"), "¥" + _tD(stats.value.totalRecharge.toFixed(2)), 1) - )), - _cE("view", _uM("class" to "stat-item"), _uA( - _cE("text", _uM("class" to "stat-label"), "累计消费"), - _cE("text", _uM("class" to "stat-value"), "¥" + _tD(stats.value.totalConsume.toFixed(2)), 1) - )), - _cE("view", _uM("class" to "stat-item"), _uA( - _cE("text", _uM("class" to "stat-label"), "累计提现"), - _cE("text", _uM("class" to "stat-value"), "¥" + _tD(stats.value.totalWithdraw.toFixed(2)), 1) - )) - )), - _cE("view", _uM("class" to "quick-actions"), _uA( - _cE("view", _uM("class" to "action-grid"), _uA( - _cE("view", _uM("class" to "action-item", "onClick" to goToCoupons), _uA( - _cE("text", _uM("class" to "action-icon"), "🎫"), - _cE("text", _uM("class" to "action-text"), "优惠券") - )), - _cE("view", _uM("class" to "action-item", "onClick" to goToRedPackets), _uA( - _cE("text", _uM("class" to "action-icon"), "🧧"), - _cE("text", _uM("class" to "action-text"), "红包") - )), - _cE("view", _uM("class" to "action-item", "onClick" to goToPoints), _uA( - _cE("text", _uM("class" to "action-icon"), "⭐"), - _cE("text", _uM("class" to "action-text"), "积分") - )), - _cE("view", _uM("class" to "action-item", "onClick" to goToBankCards), _uA( - _cE("text", _uM("class" to "action-icon"), "💳"), - _cE("text", _uM("class" to "action-text"), "银行卡") - )) - )) - )), - _cE("view", _uM("class" to "security-tips"), _uA( - _cE("text", _uM("class" to "tip-title"), "安全提示"), - _cE("text", _uM("class" to "tip-item"), "1. 请妥善保管您的支付密码"), - _cE("text", _uM("class" to "tip-item"), "2. 不要向他人透露您的账户信息"), - _cE("text", _uM("class" to "tip-item"), "3. 定期修改密码以确保账户安全") - )) - )), - _cE("view", _uM("class" to "dashboard-side"), _uA( - _cE("view", _uM("class" to "transactions-section"), _uA( - _cE("view", _uM("class" to "section-header"), _uA( - _cE("text", _uM("class" to "section-title"), "交易记录"), - _cE("view", _uM("class" to "filter-tabs"), _uA( - _cE("text", _uM("class" to _nC(_uA( - "filter-tab", - _uM("active" to (activeFilter.value === "all")) - )), "onClick" to fun(){ - changeFilter("all") - } - ), "全部", 10, _uA( - "onClick" - )), - _cE("text", _uM("class" to _nC(_uA( - "filter-tab", - _uM("active" to (activeFilter.value === "income")) - )), "onClick" to fun(){ - changeFilter("income") - } - ), "收入", 10, _uA( - "onClick" - )), - _cE("text", _uM("class" to _nC(_uA( - "filter-tab", - _uM("active" to (activeFilter.value === "expense")) - )), "onClick" to fun(){ - changeFilter("expense") - } - ), "支出", 10, _uA( - "onClick" - )) - )) - )), - if (isTrue(transactions.value.length === 0 && isLoading.value === false)) { - _cE("view", _uM("key" to 0, "class" to "empty-transactions"), _uA( - _cE("text", _uM("class" to "empty-icon"), "💰"), - _cE("text", _uM("class" to "empty-text"), "暂无交易记录"), - _cE("text", _uM("class" to "empty-subtext"), "快去使用钱包功能吧") - )) - } else { - _cC("v-if", true) - } - , - _cE("view", _uM("class" to "transactions-list"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(transactions.value, fun(transaction, __key, __index, _cached): Any { - return _cE("view", _uM("key" to transaction.id, "class" to "transaction-item"), _uA( - _cE("view", _uM("class" to "transaction-left"), _uA( - _cE("text", _uM("class" to "transaction-icon"), _tD(getTransactionIcon(transaction.type)), 1), - _cE("view", _uM("class" to "transaction-info"), _uA( - _cE("text", _uM("class" to "transaction-title"), _tD(getTransactionTitle(transaction.type)), 1), - _cE("text", _uM("class" to "transaction-time"), _tD(formatTime(transaction.created_at)), 1), - if (isTrue(transaction.remark)) { - _cE("text", _uM("key" to 0, "class" to "transaction-remark"), _tD(transaction.remark), 1) - } else { - _cC("v-if", true) - } - )) - )), - _cE("view", _uM("class" to "transaction-right"), _uA( - _cE("text", _uM("class" to _nC(_uA( - "transaction-amount", - _uM("income" to (transaction.amount > 0), "expense" to (transaction.amount < 0)) - ))), _tD(if (transaction.amount > 0) { - "+" - } else { - "" - } - ) + "¥" + _tD(Math.abs(transaction.amount).toFixed(2)), 3), - _cE("text", _uM("class" to "transaction-balance"), "余额: ¥" + _tD(transaction.current_balance.toFixed(2)), 1) - )) - )) - } - ), 128) - )), - if (isTrue(isLoading.value)) { - _cE("view", _uM("key" to 1, "class" to "loading-more"), _uA( - _cE("text", _uM("class" to "loading-text"), "加载中...") - )) - } else { - _cC("v-if", true) - } - , - if (isTrue(hasMore.value === false && transactions.value.length > 0)) { - _cE("view", _uM("key" to 2, "class" to "no-more"), _uA( - _cE("text", _uM("class" to "no-more-text"), "没有更多记录了") - )) - } else { - _cC("v-if", true) - } - )) - )) - )) - )), - if (isTrue(showRechargePopup.value)) { - _cE("view", _uM("key" to 0, "class" to "recharge-popup"), _uA( - _cE("view", _uM("class" to "popup-mask", "onClick" to closeRechargePopup)), - _cE("view", _uM("class" to "popup-content"), _uA( - _cE("view", _uM("class" to "popup-header"), _uA( - _cE("text", _uM("class" to "popup-title"), "充值"), - _cE("text", _uM("class" to "popup-close", "onClick" to closeRechargePopup), "×") - )), - _cE("view", _uM("class" to "popup-body"), _uA( - _cE("text", _uM("class" to "amount-label"), "充值金额"), - _cE("view", _uM("class" to "amount-input"), _uA( - _cE("text", _uM("class" to "currency-symbol"), "¥"), - _cE("input", _uM("class" to "amount-field", "modelValue" to rechargeAmount.value, "onInput" to fun(`$event`: UniInputEvent){ - rechargeAmount.value = `$event`.detail.value - }, "type" to "number", "placeholder" to "请输入充值金额", "focus" to ""), null, 40, _uA( - "modelValue", - "onInput" - )) - )), - _cE("view", _uM("class" to "quick-amounts"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(quickAmounts, fun(amount, __key, __index, _cached): Any { - return _cE("text", _uM("key" to amount, "class" to _nC(_uA( - "quick-amount", - _uM("active" to (rechargeAmount.value === amount.toString(10))) - )), "onClick" to fun(){ - selectQuickAmount(amount) - }), " ¥" + _tD(amount), 11, _uA( - "onClick" - )) - }), 64) - )), - _cE("text", _uM("class" to "recharge-tip"), "单笔充值最低10元,最高5000元") - )), - _cE("view", _uM("class" to "popup-footer"), _uA( - _cE("button", _uM("class" to "cancel-btn", "onClick" to closeRechargePopup), "取消"), - _cE("button", _uM("class" to _nC(_uA( - "confirm-btn", - _uM("disabled" to (canRecharge.value === false)) - )), "onClick" to confirmRecharge), " 确认充值 ", 2) - )) - )) - )) - } else { - _cC("v-if", true) - } - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("wallet-page" to _pS(_uM("display" to "flex", "flexDirection" to "column", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "backgroundColor" to "#f5f5f5")), "wallet-content" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "dashboard-container" to _pS(_uM("display" to "flex", "flexDirection" to "column", "paddingBottom" to 20)), "dashboard-main" to _pS(_uM("display" to "flex", "flexDirection" to "column")), "dashboard-side" to _pS(_uM("display" to "flex", "flexDirection" to "column")), "balance-overview" to _pS(_uM("backgroundImage" to "linear-gradient(135deg, #667eea 0%, #764ba2 100%)", "backgroundColor" to "rgba(0,0,0,0)", "paddingTop" to 30, "paddingRight" to 20, "paddingBottom" to 30, "paddingLeft" to 20, "color" to "#ffffff")), "balance-label" to _pS(_uM("fontSize" to 14, "opacity" to 0.9, "marginBottom" to 10, "textAlign" to "center")), "balance-value" to _pS(_uM("fontSize" to 36, "fontWeight" to "bold", "marginBottom" to 20, "textAlign" to "center")), "balance-actions" to _pS(_uM("display" to "flex", "flexDirection" to "row")), "action-btn" to _uM("" to _uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "height" to 40, "borderTopLeftRadius" to 20, "borderTopRightRadius" to 20, "borderBottomRightRadius" to 20, "borderBottomLeftRadius" to 20, "fontSize" to 14, "fontWeight" to "bold", "borderTopWidth" to "medium", "borderRightWidth" to "medium", "borderBottomWidth" to "medium", "borderLeftWidth" to "medium", "borderTopStyle" to "none", "borderRightStyle" to "none", "borderBottomStyle" to "none", "borderLeftStyle" to "none", "borderTopColor" to "#000000", "borderRightColor" to "#000000", "borderBottomColor" to "#000000", "borderLeftColor" to "#000000"), ".recharge" to _uM("backgroundColor" to "#ffffff", "color" to "#667eea", "marginRight" to 20), ".withdraw" to _uM("backgroundColor" to "rgba(255,255,255,0.2)", "color" to "#ffffff", "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "rgba(255,255,255,0.5)", "borderRightColor" to "rgba(255,255,255,0.5)", "borderBottomColor" to "rgba(255,255,255,0.5)", "borderLeftColor" to "rgba(255,255,255,0.5)")), "assets-stats" to _pS(_uM("backgroundColor" to "#ffffff", "paddingTop" to 20, "paddingRight" to 20, "paddingBottom" to 20, "paddingLeft" to 20, "display" to "flex", "flexDirection" to "row", "justifyContent" to "space-between", "boxShadow" to "0 2px 8px rgba(0, 0, 0, 0.1)")), "stat-item" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "textAlign" to "center")), "stat-label" to _pS(_uM("fontSize" to 12, "color" to "#666666", "marginBottom" to 8)), "stat-value" to _pS(_uM("fontSize" to 16, "fontWeight" to "bold", "color" to "#333333")), "quick-actions" to _pS(_uM("backgroundColor" to "#ffffff", "marginTop" to 10, "paddingTop" to 20, "paddingRight" to 20, "paddingBottom" to 20, "paddingLeft" to 20)), "action-grid" to _pS(_uM("display" to "flex", "flexDirection" to "row", "justifyContent" to "space-between", "alignItems" to "center")), "action-item" to _pS(_uM("display" to "flex", "flexDirection" to "column", "alignItems" to "center", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "action-icon" to _pS(_uM("fontSize" to 28, "marginBottom" to 8)), "action-text" to _pS(_uM("fontSize" to 12, "color" to "#666666")), "transactions-section" to _pS(_uM("backgroundColor" to "#ffffff", "marginTop" to 10, "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15)), "section-header" to _pS(_uM("display" to "flex", "flexDirection" to "row", "justifyContent" to "space-between", "alignItems" to "center", "marginBottom" to 15)), "section-title" to _pS(_uM("fontSize" to 16, "fontWeight" to "bold", "color" to "#333333")), "filter-tab" to _uM("" to _uM("fontSize" to 14, "color" to "#666666", "paddingTop" to 5, "paddingRight" to 0, "paddingBottom" to 5, "paddingLeft" to 0, "position" to "relative", "marginRight" to 15, "borderBottomWidth" to 2, "borderBottomStyle" to "solid", "borderBottomColor" to "rgba(0,0,0,0)"), ".active" to _uM("color" to "#007aff", "fontWeight" to "bold", "borderBottomWidth" to 2, "borderBottomStyle" to "solid", "borderBottomColor" to "#007aff")), "empty-transactions" to _pS(_uM("display" to "flex", "flexDirection" to "column", "alignItems" to "center", "justifyContent" to "center", "paddingTop" to 40, "paddingRight" to 20, "paddingBottom" to 40, "paddingLeft" to 20)), "empty-icon" to _pS(_uM("fontSize" to 60, "marginBottom" to 20)), "empty-text" to _pS(_uM("fontSize" to 16, "color" to "#666666", "marginBottom" to 10)), "empty-subtext" to _pS(_uM("fontSize" to 14, "color" to "#999999")), "transactions-list" to _pS(_uM("display" to "flex", "flexDirection" to "column")), "transaction-item" to _pS(_uM("display" to "flex", "flexDirection" to "row", "justifyContent" to "space-between", "alignItems" to "flex-start", "paddingTop" to 15, "paddingRight" to 0, "paddingBottom" to 15, "paddingLeft" to 0, "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#f5f5f5", "borderBottomWidth:last-child" to "medium", "borderBottomStyle:last-child" to "none", "borderBottomColor:last-child" to "#000000")), "transaction-left" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "flex-start")), "transaction-icon" to _pS(_uM("fontSize" to 24, "marginRight" to 15)), "transaction-info" to _pS(_uM("display" to "flex", "flexDirection" to "column")), "transaction-title" to _pS(_uM("fontSize" to 14, "color" to "#333333", "fontWeight" to "bold", "marginBottom" to 5)), "transaction-time" to _pS(_uM("fontSize" to 12, "color" to "#999999", "marginBottom" to 3)), "transaction-remark" to _pS(_uM("fontSize" to 12, "color" to "#666666")), "transaction-right" to _pS(_uM("display" to "flex", "flexDirection" to "column", "alignItems" to "flex-end")), "transaction-amount" to _uM("" to _uM("fontSize" to 16, "fontWeight" to "bold", "marginBottom" to 5), ".income" to _uM("color" to "#4caf50"), ".expense" to _uM("color" to "#333333")), "transaction-balance" to _pS(_uM("fontSize" to 12, "color" to "#999999")), "loading-more" to _pS(_uM("paddingTop" to 20, "paddingRight" to 20, "paddingBottom" to 20, "paddingLeft" to 20, "textAlign" to "center")), "no-more" to _pS(_uM("paddingTop" to 20, "paddingRight" to 20, "paddingBottom" to 20, "paddingLeft" to 20, "textAlign" to "center")), "loading-text" to _pS(_uM("color" to "#999999", "fontSize" to 14)), "no-more-text" to _pS(_uM("color" to "#999999", "fontSize" to 14)), "security-tips" to _pS(_uM("backgroundColor" to "#ffffff", "marginTop" to 10, "paddingTop" to 20, "paddingRight" to 20, "paddingBottom" to 20, "paddingLeft" to 20)), "tip-title" to _pS(_uM("fontSize" to 16, "fontWeight" to "bold", "color" to "#333333", "marginBottom" to 15)), "tip-item" to _pS(_uM("marginBottom" to 8, "fontSize" to 12, "color" to "#666666", "lineHeight" to 1.6, "marginBottom:last-child" to 0)), "recharge-popup" to _pS(_uM("position" to "fixed", "top" to 0, "left" to 0, "right" to 0, "bottom" to 0, "zIndex" to 999)), "popup-mask" to _pS(_uM("position" to "absolute", "top" to 0, "left" to 0, "right" to 0, "bottom" to 0, "backgroundColor" to "rgba(0,0,0,0.5)")), "popup-content" to _pS(_uM("position" to "absolute", "bottom" to 0, "left" to 0, "right" to 0, "backgroundColor" to "#ffffff", "borderTopLeftRadius" to 15, "borderTopRightRadius" to 15, "paddingTop" to 20, "paddingRight" to 20, "paddingBottom" to 20, "paddingLeft" to 20)), "popup-header" to _pS(_uM("display" to "flex", "flexDirection" to "row", "justifyContent" to "space-between", "alignItems" to "center", "marginBottom" to 20, "paddingBottom" to 15, "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#e5e5e5")), "popup-title" to _pS(_uM("fontSize" to 18, "fontWeight" to "bold", "color" to "#333333")), "popup-close" to _pS(_uM("fontSize" to 24, "color" to "#999999", "paddingTop" to 5, "paddingRight" to 5, "paddingBottom" to 5, "paddingLeft" to 5)), "popup-body" to _pS(_uM("marginBottom" to 20)), "amount-label" to _pS(_uM("fontSize" to 14, "color" to "#333333", "marginBottom" to 10)), "amount-input" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center", "marginBottom" to 20, "paddingTop" to 10, "paddingRight" to 10, "paddingBottom" to 10, "paddingLeft" to 10, "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#e5e5e5", "borderRightColor" to "#e5e5e5", "borderBottomColor" to "#e5e5e5", "borderLeftColor" to "#e5e5e5", "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8)), "currency-symbol" to _pS(_uM("fontSize" to 20, "color" to "#333333", "marginRight" to 10)), "amount-field" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "fontSize" to 24, "fontWeight" to "bold", "color" to "#333333")), "quick-amounts" to _pS(_uM("display" to "flex", "flexDirection" to "row", "flexWrap" to "wrap", "marginBottom" to 15)), "quick-amount" to _uM("" to _uM("paddingTop" to 8, "paddingRight" to 15, "paddingBottom" to 8, "paddingLeft" to 15, "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#e5e5e5", "borderRightColor" to "#e5e5e5", "borderBottomColor" to "#e5e5e5", "borderLeftColor" to "#e5e5e5", "borderTopLeftRadius" to 15, "borderTopRightRadius" to 15, "borderBottomRightRadius" to 15, "borderBottomLeftRadius" to 15, "fontSize" to 14, "color" to "#333333", "marginRight" to 10, "marginBottom" to 10), ".active" to _uM("backgroundColor" to "#007aff", "color" to "#ffffff", "borderTopColor" to "#007aff", "borderRightColor" to "#007aff", "borderBottomColor" to "#007aff", "borderLeftColor" to "#007aff")), "recharge-tip" to _pS(_uM("fontSize" to 12, "color" to "#999999")), "popup-footer" to _pS(_uM("display" to "flex", "flexDirection" to "row")), "cancel-btn" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "height" to 45, "borderTopLeftRadius" to 22.5, "borderTopRightRadius" to 22.5, "borderBottomRightRadius" to 22.5, "borderBottomLeftRadius" to 22.5, "fontSize" to 16, "fontWeight" to "bold", "borderTopWidth" to "medium", "borderRightWidth" to "medium", "borderBottomWidth" to "medium", "borderLeftWidth" to "medium", "borderTopStyle" to "none", "borderRightStyle" to "none", "borderBottomStyle" to "none", "borderLeftStyle" to "none", "borderTopColor" to "#000000", "borderRightColor" to "#000000", "borderBottomColor" to "#000000", "borderLeftColor" to "#000000", "backgroundColor" to "#f5f5f5", "color" to "#666666", "marginRight" to 15)), "confirm-btn" to _uM("" to _uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "height" to 45, "borderTopLeftRadius" to 22.5, "borderTopRightRadius" to 22.5, "borderBottomRightRadius" to 22.5, "borderBottomLeftRadius" to 22.5, "fontSize" to 16, "fontWeight" to "bold", "borderTopWidth" to "medium", "borderRightWidth" to "medium", "borderBottomWidth" to "medium", "borderLeftWidth" to "medium", "borderTopStyle" to "none", "borderRightStyle" to "none", "borderBottomStyle" to "none", "borderLeftStyle" to "none", "borderTopColor" to "#000000", "borderRightColor" to "#000000", "borderBottomColor" to "#000000", "borderLeftColor" to "#000000", "backgroundColor" to "#007aff", "color" to "#ffffff"), ".disabled" to _uM("backgroundColor" to "#cccccc", "opacity" to 0.6))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/mall/consumer/withdraw.kt b/unpackage/cache/.app-android/src/pages/mall/consumer/withdraw.kt deleted file mode 100644 index 4f5e5d61..00000000 --- a/unpackage/cache/.app-android/src/pages/mall/consumer/withdraw.kt +++ /dev/null @@ -1,258 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.navigateBack as uni_navigateBack -import io.dcloud.uniapp.extapi.navigateTo as uni_navigateTo -import io.dcloud.uniapp.extapi.showToast as uni_showToast -open class GenPagesMallConsumerWithdraw : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesMallConsumerWithdraw) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesMallConsumerWithdraw - val _cache = __ins.renderCache - val amount = ref("") - val balance = ref(0.00) - val loading = ref(false) - val bankCards = ref(_uA()) - val selectedBank = ref(null) - val showBankPopup = ref(false) - val isValid = computed(fun(): Boolean { - val kVal = parseFloat(amount.value) - if (kVal == null || kVal <= 0) { - return false - } - if (kVal > balance.value) { - return false - } - if (selectedBank.value == null) { - return false - } - return true - } - ) - val loadData = fun(): UTSPromise { - return wrapUTSPromise(suspend { - try { - val bal = await(supabaseService.getUserBalance()) - balance.value = bal - val res = await(supabaseService.getUserBankCards()) - val list: UTSArray = _uA() - run { - var i: Number = 0 - while(i < res.length){ - val item = res[i] - var id = "" - var bankName = "" - var cardNum = "" - if (item is UTSJSONObject) { - id = (item as UTSJSONObject).getString("id") ?: "" - bankName = (item as UTSJSONObject).getString("bank_name") ?: "" - cardNum = (item as UTSJSONObject).getString("card_number") ?: "" - } else { - val itemObj = item as UTSJSONObject - id = itemObj.getString("id") ?: "" - bankName = itemObj.getString("bank_name") ?: "" - cardNum = itemObj.getString("card_number") ?: "" - } - if (id != "") { - val card: BankCard = BankCard(id = id, bank_name = bankName, card_number = cardNum) - list.push(card) - } - i++ - } - } - bankCards.value = list - if (bankCards.value.length > 0) { - selectedBank.value = bankCards.value[0] - } - } - catch (e: Throwable) { - console.error(e, " at pages/mall/consumer/withdraw.uvue:140") - } - }) - } - onMounted(fun(){ - loadData() - } - ) - val getTailNumber = fun(cardNo: String?): String { - if (cardNo == null) { - return "" - } - if (cardNo.length <= 4) { - return cardNo - } - return cardNo.substring(cardNo.length - 4) - } - val setAll = fun(){ - amount.value = balance.value.toString(10) - } - val openBankSelector = fun(){ - showBankPopup.value = true - } - val selectBank = fun(bank: BankCard){ - selectedBank.value = bank - showBankPopup.value = false - } - val navigateToAddCard = fun(){ - uni_navigateTo(NavigateToOptions(url = "/pages/mall/consumer/bank-cards/add")) - showBankPopup.value = false - } - val submitWithdraw = fun(): UTSPromise { - return wrapUTSPromise(suspend w1@{ - if (isValid.value === false) { - return@w1 - } - loading.value = true - try { - val kVal = parseFloat(amount.value) - val success = await(supabaseService.withdrawBalance(kVal)) - if (success) { - uni_showToast(ShowToastOptions(title = "提现申请已提交", icon = "success")) - setTimeout(fun(){ - uni_navigateBack(null) - }, 1500) - } else { - uni_showToast(ShowToastOptions(title = "提现失败, " + (if (kVal > balance.value) { - "余额不足" - } else { - "请重试" - } - ), icon = "none")) - } - } - catch (e: Throwable) { - uni_showToast(ShowToastOptions(title = "系统异常", icon = "none")) - } - finally { - loading.value = false - } - }) - } - return fun(): Any? { - return _cE("view", _uM("class" to "page-container"), _uA( - _cE("view", _uM("class" to "card"), _uA( - _cE("view", _uM("class" to "section-title"), "提现至"), - _cE("view", _uM("class" to "bank-selector", "onClick" to openBankSelector), _uA( - if (selectedBank.value != null) { - _cE("view", _uM("key" to 0, "class" to "bank-info"), _uA( - _cE("text", _uM("class" to "bank-name"), _tD(selectedBank.value!!.bank_name), 1), - _cE("text", _uM("class" to "card-type"), "储蓄卡"), - _cE("text", _uM("class" to "card-no"), "尾号 " + _tD(getTailNumber(selectedBank.value!!.card_number)), 1) - )) - } else { - _cE("view", _uM("key" to 1, "class" to "bank-info placeholder"), _uA( - _cE("text", null, "请选择到账银行卡") - )) - } - , - _cE("text", _uM("class" to "arrow"), ">") - )), - _cE("view", _uM("class" to "amount-section"), _uA( - _cE("text", _uM("class" to "label"), "提现金额"), - _cE("view", _uM("class" to "input-wrapper"), _uA( - _cE("text", _uM("class" to "currency"), "¥"), - _cE("input", _uM("class" to "amount-input", "type" to "digit", "modelValue" to amount.value, "onInput" to fun(`$event`: UniInputEvent){ - amount.value = `$event`.detail.value - } - , "placeholder" to "请输入提现金额"), null, 40, _uA( - "modelValue", - "onInput" - )) - )), - _cE("view", _uM("class" to "balance-line"), _uA( - _cE("text", _uM("class" to "balance-text"), "当前可提现余额 ¥" + _tD(balance.value), 1), - _cE("text", _uM("class" to "all-btn", "onClick" to setAll), "全部提现") - )) - )), - _cE("button", _uM("class" to "submit-btn", "disabled" to (isValid.value === false), "loading" to loading.value, "onClick" to submitWithdraw), _tD(if (loading.value) { - "处理中..." - } else { - "确认提现" - } - ), 9, _uA( - "disabled", - "loading" - )) - )), - if (isTrue(showBankPopup.value)) { - _cE("view", _uM("key" to 0, "class" to "popup-mask", "onClick" to fun(){ - showBankPopup.value = false - }), _uA( - _cE("view", _uM("class" to "popup-content", "onClick" to withModifiers(fun(){}, _uA( - "stop" - ))), _uA( - _cE("view", _uM("class" to "popup-header"), _uA( - _cE("text", _uM("class" to "popup-title"), "选择到账银行卡"), - _cE("text", _uM("class" to "close-btn", "onClick" to fun(){ - showBankPopup.value = false - }), "×", 8, _uA( - "onClick" - )) - )), - _cE("scroll-view", _uM("scroll-y" to "true", "class" to "bank-list"), _uA( - _cE(Fragment, null, RenderHelpers.renderList(bankCards.value, fun(item, index, __index, _cached): Any { - return _cE("view", _uM("key" to index, "class" to "bank-item", "onClick" to fun(){ - selectBank(item) - }), _uA( - _cE("view", _uM("class" to "bank-row"), _uA( - _cE("text", _uM("class" to "bank-name-popup"), _tD(item.bank_name), 1), - _cE("text", _uM("class" to "card-no-popup"), "(" + _tD(getTailNumber(item.card_number)) + ")", 1) - )), - if (isTrue(selectedBank.value != null && selectedBank.value!!.id == item.id)) { - _cE("text", _uM("key" to 0, "class" to "check"), "✓") - } else { - _cC("v-if", true) - } - ), 8, _uA( - "onClick" - )) - }), 128), - _cE("view", _uM("class" to "add-card-btn", "onClick" to navigateToAddCard), _uA( - _cE("text", null, "+ 添加银行卡") - )) - )) - ), 8, _uA( - "onClick" - )) - ), 8, _uA( - "onClick" - )) - } else { - _cC("v-if", true) - } - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("page-container" to _pS(_uM("backgroundColor" to "#f5f5f5", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "paddingTop" to 20, "paddingRight" to 20, "paddingBottom" to 20, "paddingLeft" to 20)), "card" to _pS(_uM("backgroundColor" to "#ffffff", "borderTopLeftRadius" to 12, "borderTopRightRadius" to 12, "borderBottomRightRadius" to 12, "borderBottomLeftRadius" to 12, "paddingTop" to 20, "paddingRight" to 20, "paddingBottom" to 20, "paddingLeft" to 20)), "section-title" to _pS(_uM("fontSize" to 16, "color" to "#333333", "marginBottom" to 15)), "bank-selector" to _pS(_uM("display" to "flex", "justifyContent" to "space-between", "alignItems" to "center", "paddingTop" to 15, "paddingRight" to 0, "paddingBottom" to 15, "paddingLeft" to 0, "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#eeeeee")), "bank-info" to _pS(_uM("display" to "flex", "alignItems" to "center")), "bank-name" to _pS(_uM("marginRight" to 10, "fontWeight" to "bold")), "card-type" to _pS(_uM("marginRight" to 10)), "placeholder" to _pS(_uM("color" to "#999999")), "amount-section" to _pS(_uM("marginTop" to 20)), "label" to _pS(_uM("fontSize" to 14, "color" to "#666666", "marginBottom" to 10)), "input-wrapper" to _pS(_uM("display" to "flex", "alignItems" to "center", "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#eeeeee", "paddingBottom" to 10, "marginBottom" to 10)), "currency" to _pS(_uM("fontSize" to 30, "fontWeight" to "bold", "marginRight" to 10)), "amount-input" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "fontSize" to 30, "fontWeight" to "bold", "height" to 40)), "balance-line" to _pS(_uM("display" to "flex", "justifyContent" to "space-between", "fontSize" to 12)), "balance-text" to _pS(_uM("color" to "#999999")), "all-btn" to _pS(_uM("color" to "#5785e5")), "submit-btn" to _pS(_uM("marginTop" to 40, "backgroundColor" to "#5785e5", "color" to "#ffffff", "borderTopLeftRadius" to 25, "borderTopRightRadius" to 25, "borderBottomRightRadius" to 25, "borderBottomLeftRadius" to 25, "backgroundColor:disabled" to "#cccccc")), "popup-mask" to _pS(_uM("position" to "fixed", "top" to 0, "left" to 0, "right" to 0, "bottom" to 0, "backgroundColor" to "rgba(0,0,0,0.5)", "zIndex" to 999, "display" to "flex", "justifyContent" to "center", "alignItems" to "flex-end")), "popup-content" to _pS(_uM("backgroundColor" to "#ffffff", "width" to "100%", "borderTopLeftRadius" to 16, "borderTopRightRadius" to 16, "paddingTop" to 20, "paddingRight" to 20, "paddingBottom" to 20, "paddingLeft" to 20, "minHeight" to 300)), "popup-header" to _pS(_uM("display" to "flex", "justifyContent" to "space-between", "alignItems" to "center", "marginBottom" to 20)), "popup-title" to _pS(_uM("fontSize" to 16, "fontWeight" to "bold")), "close-btn" to _pS(_uM("fontSize" to 20, "color" to "#999999", "paddingTop" to 5, "paddingRight" to 5, "paddingBottom" to 5, "paddingLeft" to 5)), "bank-item" to _pS(_uM("display" to "flex", "justifyContent" to "space-between", "alignItems" to "center", "paddingTop" to 15, "paddingRight" to 0, "paddingBottom" to 15, "paddingLeft" to 0, "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#f5f5f5")), "add-card-btn" to _pS(_uM("paddingTop" to 15, "paddingRight" to 0, "paddingBottom" to 15, "paddingLeft" to 0, "textAlign" to "center", "color" to "#5785e5", "fontWeight" to "bold"))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/user/bind-email.kt b/unpackage/cache/.app-android/src/pages/user/bind-email.kt deleted file mode 100644 index 374d1b30..00000000 --- a/unpackage/cache/.app-android/src/pages/user/bind-email.kt +++ /dev/null @@ -1,123 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.hideLoading as uni_hideLoading -import io.dcloud.uniapp.extapi.navigateBack as uni_navigateBack -import io.dcloud.uniapp.extapi.showLoading as uni_showLoading -import io.dcloud.uniapp.extapi.showToast as uni_showToast -open class GenPagesUserBindEmail : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesUserBindEmail) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesUserBindEmail - val _cache = __ins.renderCache - val email = ref("") - val code = ref("") - val counting = ref(false) - val count = ref(60) - var timer: Number = 0 - val sendCode = fun(): UTSPromise { - return wrapUTSPromise(suspend w1@{ - if (counting.value) { - return@w1 - } - if (email.value == "" || email.value.includes("@") == false) { - uni_showToast(ShowToastOptions(title = "请输入正确的邮箱", icon = "none")) - return@w1 - } - uni_showLoading(ShowLoadingOptions(title = "发送中...")) - uni_hideLoading() - counting.value = true - count.value = 60 - timer = setInterval(fun(){ - count.value-- - if (count.value <= 0) { - clearInterval(timer) - counting.value = false - } - } - , 1000) - uni_showToast(ShowToastOptions(title = "验证码已发送", icon = "none")) - }) - } - val handleSubmit = fun(): UTSPromise { - return wrapUTSPromise(suspend w1@{ - if (email.value == "" || code.value == "") { - uni_showToast(ShowToastOptions(title = "请填写完整信息", icon = "none")) - return@w1 - } - uni_showLoading(ShowLoadingOptions(title = "绑定中...")) - uni_hideLoading() - uni_showToast(ShowToastOptions(title = "绑定成功", icon = "success")) - setTimeout(fun(){ - uni_navigateBack(null) - } - , 1500) - }) - } - return fun(): Any? { - return _cE("view", _uM("class" to "page-container"), _uA( - _cE("view", _uM("class" to "form-group"), _uA( - _cE("view", _uM("class" to "input-item"), _uA( - _cE("text", _uM("class" to "label"), "邮箱"), - _cE("input", _uM("class" to "input", "type" to "text", "placeholder" to "请输入邮箱地址", "modelValue" to email.value, "onInput" to fun(`$event`: UniInputEvent){ - email.value = `$event`.detail.value - } - ), null, 40, _uA( - "modelValue", - "onInput" - )) - )), - _cE("view", _uM("class" to "input-item"), _uA( - _cE("text", _uM("class" to "label"), "验证码"), - _cE("input", _uM("class" to "input", "type" to "number", "placeholder" to "请输入验证码", "modelValue" to code.value, "onInput" to fun(`$event`: UniInputEvent){ - code.value = `$event`.detail.value - } - , "maxlength" to "6"), null, 40, _uA( - "modelValue", - "onInput" - )), - _cE("text", _uM("class" to "code-btn", "onClick" to sendCode), _tD(if (counting.value) { - "" + count.value + "s" - } else { - "获取验证码" - } - ), 1) - )) - )), - _cE("button", _uM("class" to "submit-btn", "onClick" to handleSubmit), "确认绑定") - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("page-container" to _pS(_uM("paddingTop" to 20, "paddingRight" to 20, "paddingBottom" to 20, "paddingLeft" to 20, "backgroundColor" to "#f5f5f5", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "form-group" to _pS(_uM("backgroundColor" to "#ffffff", "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "marginBottom" to 20)), "input-item" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center", "paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15, "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#eeeeee", "borderBottomWidth:last-child" to "medium", "borderBottomStyle:last-child" to "none", "borderBottomColor:last-child" to "#000000")), "label" to _pS(_uM("width" to 70, "fontSize" to 14, "color" to "#333333")), "input" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "fontSize" to 14, "color" to "#333333")), "code-btn" to _pS(_uM("fontSize" to 12, "color" to "#ff4444", "paddingTop" to 5, "paddingRight" to 10, "paddingBottom" to 5, "paddingLeft" to 10, "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#ff4444", "borderRightColor" to "#ff4444", "borderBottomColor" to "#ff4444", "borderLeftColor" to "#ff4444", "borderTopLeftRadius" to 4, "borderTopRightRadius" to 4, "borderBottomRightRadius" to 4, "borderBottomLeftRadius" to 4)), "submit-btn" to _pS(_uM("backgroundColor" to "#ff4444", "color" to "#FFFFFF", "fontSize" to 16, "paddingTop" to 12, "paddingRight" to 12, "paddingBottom" to 12, "paddingLeft" to 12, "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "textAlign" to "center"))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/user/bind-phone.kt b/unpackage/cache/.app-android/src/pages/user/bind-phone.kt deleted file mode 100644 index 6a616fa6..00000000 --- a/unpackage/cache/.app-android/src/pages/user/bind-phone.kt +++ /dev/null @@ -1,131 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.getStorageSync as uni_getStorageSync -import io.dcloud.uniapp.extapi.hideLoading as uni_hideLoading -import io.dcloud.uniapp.extapi.navigateBack as uni_navigateBack -import io.dcloud.uniapp.extapi.setStorageSync as uni_setStorageSync -import io.dcloud.uniapp.extapi.showLoading as uni_showLoading -import io.dcloud.uniapp.extapi.showToast as uni_showToast -open class GenPagesUserBindPhone : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesUserBindPhone) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesUserBindPhone - val _cache = __ins.renderCache - val phone = ref("") - val code = ref("") - val counting = ref(false) - val count = ref(60) - var timer: Number = 0 - val sendCode = fun(): UTSPromise { - return wrapUTSPromise(suspend w1@{ - if (counting.value) { - return@w1 - } - if (phone.value == "" || phone.value.length != 11) { - uni_showToast(ShowToastOptions(title = "请输入正确的手机号", icon = "none")) - return@w1 - } - uni_showLoading(ShowLoadingOptions(title = "发送中...")) - uni_hideLoading() - counting.value = true - count.value = 60 - timer = setInterval(fun(){ - count.value-- - if (count.value <= 0) { - clearInterval(timer) - counting.value = false - } - } - , 1000) - uni_showToast(ShowToastOptions(title = "验证码已发送", icon = "none")) - }) - } - val handleSubmit = fun(): UTSPromise { - return wrapUTSPromise(suspend w1@{ - if (phone.value == "" || code.value == "") { - uni_showToast(ShowToastOptions(title = "请填写完整信息", icon = "none")) - return@w1 - } - uni_showLoading(ShowLoadingOptions(title = "绑定中...")) - uni_hideLoading() - uni_showToast(ShowToastOptions(title = "绑定成功", icon = "success")) - val userInfoRaw = uni_getStorageSync("userInfo") - if (userInfoRaw != null) { - val userInfo = userInfoRaw as UTSJSONObject - userInfo.set("phone", phone.value) - uni_setStorageSync("userInfo", userInfo) - } - setTimeout(fun(){ - uni_navigateBack(null) - } - , 1500) - }) - } - return fun(): Any? { - return _cE("view", _uM("class" to "page-container"), _uA( - _cE("view", _uM("class" to "form-group"), _uA( - _cE("view", _uM("class" to "input-item"), _uA( - _cE("text", _uM("class" to "label"), "手机号"), - _cE("input", _uM("class" to "input", "type" to "number", "placeholder" to "请输入新手机号", "modelValue" to phone.value, "onInput" to fun(`$event`: UniInputEvent){ - phone.value = `$event`.detail.value - } - , "maxlength" to "11"), null, 40, _uA( - "modelValue", - "onInput" - )) - )), - _cE("view", _uM("class" to "input-item"), _uA( - _cE("text", _uM("class" to "label"), "验证码"), - _cE("input", _uM("class" to "input", "type" to "number", "placeholder" to "请输入验证码", "modelValue" to code.value, "onInput" to fun(`$event`: UniInputEvent){ - code.value = `$event`.detail.value - } - , "maxlength" to "6"), null, 40, _uA( - "modelValue", - "onInput" - )), - _cE("text", _uM("class" to "code-btn", "onClick" to sendCode), _tD(if (counting.value) { - "" + count.value + "s" - } else { - "获取验证码" - } - ), 1) - )) - )), - _cE("button", _uM("class" to "submit-btn", "onClick" to handleSubmit), "确认绑定") - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("page-container" to _pS(_uM("paddingTop" to 0, "paddingRight" to 15, "paddingBottom" to 0, "paddingLeft" to 15, "backgroundColor" to "#ffffff", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "marginBottom" to 30)), "input-item" to _pS(_uM("display" to "flex", "alignItems" to "center", "height" to 50, "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#eeeeee", "borderBottomWidth:last-child" to "medium", "borderBottomStyle:last-child" to "none", "borderBottomColor:last-child" to "#000000")), "label" to _pS(_uM("width" to 70, "fontSize" to 14, "color" to "#333333")), "input" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "fontSize" to 14)), "code-btn" to _pS(_uM("color" to "#007aff", "fontSize" to 14, "paddingTop" to 5, "paddingRight" to 10, "paddingBottom" to 5, "paddingLeft" to 10)), "submit-btn" to _pS(_uM("backgroundColor" to "#007aff", "color" to "#ffffff", "borderTopLeftRadius" to 25, "borderTopRightRadius" to 25, "borderBottomRightRadius" to 25, "borderBottomLeftRadius" to 25, "fontSize" to 16))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/user/boot.kt b/unpackage/cache/.app-android/src/pages/user/boot.kt deleted file mode 100644 index 069643b2..00000000 --- a/unpackage/cache/.app-android/src/pages/user/boot.kt +++ /dev/null @@ -1,96 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.reLaunch as uni_reLaunch -open class GenPagesUserBoot : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) { - onLoad(fun(_: OnLoadOptions) { - this.checkAndRedirect() - } - , __ins) - onPageShow(fun() {}, __ins) - } - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - override fun `$render`(): Any? { - val _cache = this.`$`.renderCache - val _component_navigator = resolveComponent("navigator") - return _cE("view", _uM("class" to "page"), _uA( - _cE("view", _uM("class" to "splash"), _uA( - _cE("view", _uM("class" to "brand"), _uA( - _cE("view", _uM("class" to "brand-mark")), - _cE("view", _uM("class" to "brand-text"), _uA( - _cE("text", _uM("class" to "brand-name"), "Mall"), - _cE("text", _uM("class" to "brand-slogan"), "正品保障 · 省心售后") - )) - )), - _cE("view", _uM("class" to "status"), _uA( - _cE("view", _uM("class" to "spinner")), - _cE("text", _uM("class" to "status-text"), "正在检查登录状态…"), - _cE("text", _uM("class" to "status-sub"), "通常数秒内自动进入首页或登录页") - )), - _cE("view", _uM("class" to "actions"), _uA( - _cV(_component_navigator, _uM("url" to "/pages/user/login", "open-type" to "reLaunch", "class" to "action primary"), _uM("default" to withSlotCtx(fun(): UTSArray { - return _uA( - "前往登录" - ) - } - ), "_" to 1)), - _cV(_component_navigator, _uM("url" to "/pages/user/register", "open-type" to "navigate", "class" to "action ghost"), _uM("default" to withSlotCtx(fun(): UTSArray { - return _uA( - "我要注册" - ) - } - ), "_" to 1)) - )) - )) - )) - } - open var checkAndRedirect = ::gen_checkAndRedirect_fn - open fun gen_checkAndRedirect_fn() { - console.log("boot: start redirect check", " at pages/user/boot.uvue:40") - if (IS_TEST_MODE) { - return - } - try { - val sessionInfo = supaInstance.getSession() - if (sessionInfo != null && sessionInfo.user != null) { - uni_reLaunch(ReLaunchOptions(url = "/pages/mall/consumer/index")) - return - } - } - catch (e: Throwable) { - console.error("boot: error checking session", e, " at pages/user/boot.uvue:54") - } - uni_reLaunch(ReLaunchOptions(url = "/pages/user/login")) - } - companion object { - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("page" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "backgroundColor" to "#f5f7fa", "display" to "flex", "alignItems" to "center", "justifyContent" to "center", "paddingTop" to "48rpx", "paddingRight" to "32rpx", "paddingBottom" to "48rpx", "paddingLeft" to "32rpx")), "splash" to _pS(_uM("width" to "100%", "maxWidth" to "640rpx", "backgroundColor" to "#ffffff", "borderTopLeftRadius" to "24rpx", "borderTopRightRadius" to "24rpx", "borderBottomRightRadius" to "24rpx", "borderBottomLeftRadius" to "24rpx", "boxShadow" to "0 12rpx 48rpx rgba(0, 0, 0, 0.08)", "paddingTop" to "48rpx", "paddingRight" to "40rpx", "paddingBottom" to "48rpx", "paddingLeft" to "40rpx", "display" to "flex", "flexDirection" to "column", "justifyContent" to "space-between")), "brand" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center")), "brand-mark" to _pS(_uM("width" to "80rpx", "height" to "80rpx", "borderTopLeftRadius" to "24rpx", "borderTopRightRadius" to "24rpx", "borderBottomRightRadius" to "24rpx", "borderBottomLeftRadius" to "24rpx", "backgroundColor" to "#ff6b6b", "marginRight" to "20rpx")), "brand-text" to _pS(_uM("display" to "flex", "flexDirection" to "column")), "brand-name" to _pS(_uM("marginBottom" to "8rpx", "fontSize" to "36rpx", "fontWeight" to "700", "color" to "#111827")), "brand-slogan" to _pS(_uM("fontSize" to "26rpx", "color" to "#6b7280")), "status" to _pS(_uM("display" to "flex", "flexDirection" to "column", "alignItems" to "center", "textAlign" to "center", "marginTop" to "32rpx", "marginBottom" to "32rpx")), "status-text" to _pS(_uM("marginTop" to "12rpx", "fontSize" to "30rpx", "color" to "#111827", "fontWeight" to "700")), "spinner" to _pS(_uM("width" to "88rpx", "height" to "88rpx", "borderTopLeftRadius" to "44rpx", "borderTopRightRadius" to "44rpx", "borderBottomRightRadius" to "44rpx", "borderBottomLeftRadius" to "44rpx", "borderTopWidth" to "8rpx", "borderRightWidth" to "8rpx", "borderBottomWidth" to "8rpx", "borderLeftWidth" to "8rpx", "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#ff6b6b", "borderRightColor" to "#f3f4f6", "borderBottomColor" to "#f3f4f6", "borderLeftColor" to "#f3f4f6")), "status-sub" to _pS(_uM("fontSize" to "24rpx", "color" to "#6b7280")), "actions" to _pS(_uM("display" to "flex", "flexDirection" to "column")), "action" to _uM("" to _uM("marginBottom" to "16rpx", "width" to "100%", "textAlign" to "center", "paddingTop" to "24rpx", "paddingRight" to "24rpx", "paddingBottom" to "24rpx", "paddingLeft" to "24rpx", "borderTopLeftRadius" to "16rpx", "borderTopRightRadius" to "16rpx", "borderBottomRightRadius" to "16rpx", "borderBottomLeftRadius" to "16rpx", "fontSize" to "28rpx", "fontWeight" to "700"), ".primary" to _uM("backgroundImage" to "linear-gradient(135deg, #ff6b6b, #ff9f43)", "backgroundColor" to "rgba(0,0,0,0)", "color" to "#ffffff"), ".ghost" to _uM("borderTopWidth" to "2rpx", "borderRightWidth" to "2rpx", "borderBottomWidth" to "2rpx", "borderLeftWidth" to "2rpx", "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#e5e7eb", "borderRightColor" to "#e5e7eb", "borderBottomColor" to "#e5e7eb", "borderLeftColor" to "#e5e7eb", "color" to "#374151", "backgroundImage" to "none", "backgroundColor" to "#ffffff"))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/user/center.kt b/unpackage/cache/.app-android/src/pages/user/center.kt deleted file mode 100644 index 2b84c70e..00000000 --- a/unpackage/cache/.app-android/src/pages/user/center.kt +++ /dev/null @@ -1,220 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.navigateTo as uni_navigateTo -import io.dcloud.uniapp.extapi.reLaunch as uni_reLaunch -import io.dcloud.uniapp.extapi.removeStorageSync as uni_removeStorageSync -import io.dcloud.uniapp.extapi.showModal as uni_showModal -import io.dcloud.uniapp.extapi.showToast as uni_showToast -open class GenPagesUserCenter : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesUserCenter) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesUserCenter - val _cache = __ins.renderCache - val profile = ref(null) - val userStats = ref(UserStatsType(trainings = 0, points = 0, streak = 0)) - val currentLocale = ref("zh-CN") - val userAvatar = ref("/static/default-avatar.png") - val toggleLanguage = fun(): Unit { - if (currentLocale.value === "zh-CN") { - currentLocale.value = "en-US" - } else { - currentLocale.value = "zh-CN" - } - uni_showToast(ShowToastOptions(title = "语言已切换", icon = "success")) - } - val loadProfile = fun(): UTSPromise { - return wrapUTSPromise(suspend { - try { - val res = await(supabaseService.getUserProfile()) - if (res != null) { - val profileData = res as UTSJSONObject - val p: ProfileType = ProfileType(id = profileData.getString("id") ?: "", username = profileData.getString("username"), email = profileData.getString("email"), avatar_url = profileData.getString("avatar_url")) - profile.value = p - if (p.avatar_url != null && p.avatar_url != "") { - userAvatar.value = p.avatar_url!! - } - } - } - catch (e: Throwable) { - console.error("加载用户资料失败:", e, " at pages/user/center.uvue:133") - } - }) - } - val loadUserStats = fun(): Unit { - userStats.value = UserStatsType(trainings = 12, points = 480, streak = 5) - } - val navigateToProfile = fun(): Unit { - uni_navigateTo(NavigateToOptions(url = "/pages/user/profile")) - } - val navigateTo = fun(url: String): Unit { - val implementedPages = _uA( - "/pages/user/profile" - ) as UTSArray - var found = false - run { - var i: Number = 0 - while(i < implementedPages.length){ - if (implementedPages[i] == url) { - found = true - break - } - i++ - } - } - if (found) { - uni_navigateTo(NavigateToOptions(url = url)) - } else { - uni_showToast(ShowToastOptions(title = "功能开发中", icon = "none")) - } - } - val handleLogout = fun(): Unit { - uni_removeStorageSync("userInfo") - uni_removeStorageSync("user_id") - uni_removeStorageSync("access_token") - uni_showToast(ShowToastOptions(title = "已退出登录", icon = "success")) - setTimeout(fun(){ - uni_reLaunch(ReLaunchOptions(url = "/pages/user/login")) - } - , 1000) - } - val showLogoutConfirm = fun(): Unit { - uni_showModal(ShowModalOptions(title = "提示", content = "确定要退出登录吗?", success = fun(res){ - if (res.confirm) { - handleLogout() - } - } - )) - } - onShow(fun(){ - loadProfile() - loadUserStats() - } - ) - return fun(): Any? { - return _cE("view", _uM("class" to "page-wrapper"), _uA( - _cE("view", _uM("class" to "top-section"), _uA( - _cE("view", _uM("class" to "language-switch"), _uA( - _cE("button", _uM("class" to "language-btn", "onClick" to toggleLanguage), _tD(if (currentLocale.value === "zh-CN") { - "EN" - } else { - "中文" - } - ), 1) - )) - )), - _cE("view", _uM("class" to "main-section"), _uA( - _cE("scroll-view", _uM("direction" to "vertical", "class" to "user-center-container"), _uA( - _cE("view", _uM("class" to "user-header"), _uA( - _cE("view", _uM("class" to "user-info"), _uA( - _cE("image", _uM("class" to "user-avatar", "src" to userAvatar.value, "mode" to "aspectFill"), null, 8, _uA( - "src" - )), - _cE("view", _uM("class" to "user-details"), _uA( - _cE("text", _uM("class" to "user-name"), _tD(if (profile.value != null && profile.value!!.username != null) { - profile.value!!.username - } else { - "未命名用户" - } - ), 1), - _cE("view", _uM("class" to "edit-profile-link", "onClick" to navigateToProfile), _uA( - _cE("text", _uM("class" to "edit-text"), "编辑资料"), - _cE("text", _uM("class" to "edit-icon"), "✏️") - )) - )) - )), - _cE("view", _uM("class" to "stats-container"), _uA( - _cE("view", _uM("class" to "stat-item"), _uA( - _cE("text", _uM("class" to "stat-value"), _tD(userStats.value.trainings), 1), - _cE("text", _uM("class" to "stat-label"), "训练") - )), - _cE("view", _uM("class" to "stat-divider")), - _cE("view", _uM("class" to "stat-item"), _uA( - _cE("text", _uM("class" to "stat-value"), _tD(userStats.value.points), 1), - _cE("text", _uM("class" to "stat-label"), "积分") - )), - _cE("view", _uM("class" to "stat-divider")), - _cE("view", _uM("class" to "stat-item"), _uA( - _cE("text", _uM("class" to "stat-value"), _tD(userStats.value.streak), 1), - _cE("text", _uM("class" to "stat-label"), "连续") - )) - )) - )), - _cE("view", _uM("class" to "menu-sections"), _uA( - _cE("view", _uM("class" to "menu-section"), _uA( - _cE("view", _uM("class" to "section-header"), _uA( - _cE("text", _uM("class" to "section-title"), "设置") - )), - _cE("view", _uM("class" to "section-items"), _uA( - _cE("view", _uM("class" to "menu-item", "onClick" to fun(){ - navigateTo("/pages/settings/app") - } - ), _uA( - _cE("view", _uM("class" to "menu-icon app-settings"), "⚙️"), - _cE("text", _uM("class" to "menu-text"), "应用设置"), - _cE("text", _uM("class" to "menu-arrow"), ">") - ), 8, _uA( - "onClick" - )), - _cE("view", _uM("class" to "menu-item", "onClick" to fun(){ - navigateTo("/pages/settings/about") - } - ), _uA( - _cE("view", _uM("class" to "menu-icon about"), "ℹ️"), - _cE("text", _uM("class" to "menu-text"), "关于"), - _cE("text", _uM("class" to "menu-arrow"), ">") - ), 8, _uA( - "onClick" - )), - _cE("view", _uM("class" to "menu-item", "onClick" to fun(){ - navigateTo("/pages/user/notifications") - } - ), _uA( - _cE("view", _uM("class" to "menu-icon notifications"), "🔔"), - _cE("text", _uM("class" to "menu-text"), "通知"), - _cE("text", _uM("class" to "menu-arrow"), ">") - ), 8, _uA( - "onClick" - )) - )) - )) - )), - _cE("button", _uM("class" to "logout-button", "onClick" to showLogoutConfirm), "退出登录") - )) - )) - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("page-wrapper" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "backgroundColor" to "#f5f5f5")), "top-section" to _pS(_uM("paddingTop" to 10, "paddingRight" to 15, "paddingBottom" to 10, "paddingLeft" to 15, "backgroundColor" to "#ffffff")), "language-switch" to _pS(_uM("display" to "flex", "justifyContent" to "flex-end")), "language-btn" to _pS(_uM("fontSize" to 12, "paddingTop" to 5, "paddingRight" to 15, "paddingBottom" to 5, "paddingLeft" to 15, "backgroundColor" to "#f0f0f0", "borderTopLeftRadius" to 15, "borderTopRightRadius" to 15, "borderBottomRightRadius" to 15, "borderBottomLeftRadius" to 15)), "main-section" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "user-center-container" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "user-header" to _pS(_uM("backgroundColor" to "#ffffff", "paddingTop" to 20, "paddingRight" to 15, "paddingBottom" to 20, "paddingLeft" to 15, "marginBottom" to 10)), "user-info" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center")), "user-avatar" to _pS(_uM("width" to 60, "height" to 60, "borderTopLeftRadius" to 30, "borderTopRightRadius" to 30, "borderBottomRightRadius" to 30, "borderBottomLeftRadius" to 30, "backgroundColor" to "#eeeeee")), "user-details" to _pS(_uM("marginLeft" to 15, "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "user-name" to _pS(_uM("fontSize" to 18, "fontWeight" to "bold", "color" to "#333333")), "edit-profile-link" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center", "marginTop" to 5)), "edit-text" to _pS(_uM("fontSize" to 12, "color" to "#007aff")), "edit-icon" to _pS(_uM("fontSize" to 12, "marginLeft" to 5)), "stats-container" to _pS(_uM("display" to "flex", "flexDirection" to "row", "justifyContent" to "space-around", "marginTop" to 20, "paddingTop" to 15, "borderTopWidth" to 1, "borderTopStyle" to "solid", "borderTopColor" to "#eeeeee")), "stat-item" to _pS(_uM("display" to "flex", "flexDirection" to "column", "alignItems" to "center")), "stat-value" to _pS(_uM("fontSize" to 20, "fontWeight" to "bold", "color" to "#333333")), "stat-label" to _pS(_uM("fontSize" to 12, "color" to "#999999", "marginTop" to 5)), "stat-divider" to _pS(_uM("width" to 1, "height" to 30, "backgroundColor" to "#eeeeee")), "menu-sections" to _pS(_uM("backgroundColor" to "#ffffff", "marginBottom" to 10)), "menu-section" to _pS(_uM("paddingTop" to 15, "paddingRight" to 15, "paddingBottom" to 15, "paddingLeft" to 15)), "section-header" to _pS(_uM("marginBottom" to 10)), "section-title" to _pS(_uM("fontSize" to 14, "color" to "#999999")), "section-items" to _pS(_uM("backgroundColor" to "#ffffff")), "menu-item" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center", "paddingTop" to 12, "paddingRight" to 0, "paddingBottom" to 12, "paddingLeft" to 0, "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#f5f5f5", "borderBottomWidth:last-child" to "medium", "borderBottomStyle:last-child" to "none", "borderBottomColor:last-child" to "#000000")), "menu-icon" to _pS(_uM("width" to 30, "fontSize" to 18)), "menu-text" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "fontSize" to 14, "color" to "#333333")), "menu-arrow" to _pS(_uM("fontSize" to 14, "color" to "#cccccc")), "logout-button" to _pS(_uM("marginTop" to 20, "marginRight" to 15, "marginBottom" to 20, "marginLeft" to 15, "backgroundColor" to "#ff4444", "color" to "#ffffff", "fontSize" to 16, "paddingTop" to 12, "paddingRight" to 12, "paddingBottom" to 12, "paddingLeft" to 12, "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "textAlign" to "center"))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/user/change-password.kt b/unpackage/cache/.app-android/src/pages/user/change-password.kt deleted file mode 100644 index 2076868d..00000000 --- a/unpackage/cache/.app-android/src/pages/user/change-password.kt +++ /dev/null @@ -1,105 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.hideLoading as uni_hideLoading -import io.dcloud.uniapp.extapi.navigateBack as uni_navigateBack -import io.dcloud.uniapp.extapi.showLoading as uni_showLoading -import io.dcloud.uniapp.extapi.showToast as uni_showToast -open class GenPagesUserChangePassword : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesUserChangePassword) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesUserChangePassword - val _cache = __ins.renderCache - val oldPassword = ref("") - val newPassword = ref("") - val confirmPassword = ref("") - val handleSubmit = fun(): UTSPromise { - return wrapUTSPromise(suspend w1@{ - if (oldPassword.value == "" || newPassword.value == "" || confirmPassword.value == "") { - uni_showToast(ShowToastOptions(title = "请填写完整信息", icon = "none")) - return@w1 - } - if (newPassword.value != confirmPassword.value) { - uni_showToast(ShowToastOptions(title = "两次输入的密码不一致", icon = "none")) - return@w1 - } - uni_showLoading(ShowLoadingOptions(title = "提交中...")) - uni_hideLoading() - uni_showToast(ShowToastOptions(title = "修改成功", icon = "success")) - setTimeout(fun(){ - uni_navigateBack(null) - } - , 1500) - }) - } - return fun(): Any? { - return _cE("view", _uM("class" to "page-container"), _uA( - _cE("view", _uM("class" to "form-group"), _uA( - _cE("view", _uM("class" to "input-item"), _uA( - _cE("text", _uM("class" to "label"), "旧密码"), - _cE("input", _uM("class" to "input", "type" to "password", "placeholder" to "请输入旧密码", "modelValue" to oldPassword.value, "onInput" to fun(`$event`: UniInputEvent){ - oldPassword.value = `$event`.detail.value - } - ), null, 40, _uA( - "modelValue", - "onInput" - )) - )), - _cE("view", _uM("class" to "input-item"), _uA( - _cE("text", _uM("class" to "label"), "新密码"), - _cE("input", _uM("class" to "input", "type" to "password", "placeholder" to "请输入新密码", "modelValue" to newPassword.value, "onInput" to fun(`$event`: UniInputEvent){ - newPassword.value = `$event`.detail.value - } - ), null, 40, _uA( - "modelValue", - "onInput" - )) - )), - _cE("view", _uM("class" to "input-item"), _uA( - _cE("text", _uM("class" to "label"), "确认密码"), - _cE("input", _uM("class" to "input", "type" to "password", "placeholder" to "请再次输入新密码", "modelValue" to confirmPassword.value, "onInput" to fun(`$event`: UniInputEvent){ - confirmPassword.value = `$event`.detail.value - } - ), null, 40, _uA( - "modelValue", - "onInput" - )) - )) - )), - _cE("button", _uM("class" to "submit-btn", "onClick" to handleSubmit), "确认修改") - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("page-container" to _pS(_uM("paddingTop" to 20, "paddingRight" to 20, "paddingBottom" to 20, "paddingLeft" to 20, "backgroundColor" to "#f5f5f5", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "form-group" to _pS(_uM("backgroundColor" to "#ffffff", "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "paddingTop" to 0, "paddingRight" to 15, "paddingBottom" to 0, "paddingLeft" to 15, "marginBottom" to 30)), "input-item" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center", "height" to 50, "borderBottomWidth" to 1, "borderBottomStyle" to "solid", "borderBottomColor" to "#eeeeee", "borderBottomWidth:last-child" to "medium", "borderBottomStyle:last-child" to "none", "borderBottomColor:last-child" to "#000000")), "label" to _pS(_uM("width" to 80, "fontSize" to 14, "color" to "#333333")), "input" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "fontSize" to 14)), "submit-btn" to _pS(_uM("backgroundColor" to "#007aff", "color" to "#ffffff", "borderTopLeftRadius" to 25, "borderTopRightRadius" to 25, "borderBottomRightRadius" to 25, "borderBottomLeftRadius" to 25, "fontSize" to 16, "paddingTop" to 12, "paddingRight" to 12, "paddingBottom" to 12, "paddingLeft" to 12, "textAlign" to "center"))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/user/forgot-password.kt b/unpackage/cache/.app-android/src/pages/user/forgot-password.kt deleted file mode 100644 index f3051c7d..00000000 --- a/unpackage/cache/.app-android/src/pages/user/forgot-password.kt +++ /dev/null @@ -1,168 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.navigateTo as uni_navigateTo -import io.dcloud.uniapp.extapi.showToast as uni_showToast -open class GenPagesUserForgotPassword : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesUserForgotPassword) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesUserForgotPassword - val _cache = __ins.renderCache - val email = ref("") - val emailError = ref("") - val generalError = ref("") - val isLoading = ref(false) - val resetEmailSent = ref(false) - val currentLocale = ref("zh-CN") - val toggleLanguage = fun(): Unit { - if (currentLocale.value === "zh-CN") { - currentLocale.value = "en-US" - } else { - currentLocale.value = "zh-CN" - } - uni_showToast(ShowToastOptions(title = "语言已切换", icon = "success")) - } - val validateEmail = fun(): Boolean { - if (email.value == null || email.value == "") { - emailError.value = "请输入邮箱地址" - return false - } - val atIndex = email.value.indexOf("@") - val dotIndex = email.value.lastIndexOf(".") - if (atIndex == -1 || dotIndex == -1 || atIndex > dotIndex) { - emailError.value = "请输入有效的邮箱地址" - return false - } - emailError.value = "" - return true - } - val handleResetRequest = fun(): UTSPromise { - return wrapUTSPromise(suspend w1@{ - generalError.value = "" - if (validateEmail() == false) { - return@w1 - } - isLoading.value = true - try { - resetEmailSent.value = true - } - catch (err: Throwable) { - console.error("Password reset error:", err, " at pages/user/forgot-password.uvue:107") - generalError.value = "发送失败,请稍后重试" - } - finally { - isLoading.value = false - } - }) - } - val onSubmit = fun(e: UniFormSubmitEvent): Unit { - handleResetRequest() - } - val navigateToLogin = fun(): Unit { - uni_navigateTo(NavigateToOptions(url = "/pages/user/login")) - } - return fun(): Any? { - val _component_form = resolveComponent("form") - return _cE("scroll-view", _uM("class" to "forgot-password-container", "scroll-y" to "true", "show-scrollbar" to "false"), _uA( - _cE("view", _uM("class" to "language-switch"), _uA( - _cE("button", _uM("class" to "language-btn", "onClick" to toggleLanguage), _tD(if (currentLocale.value === "zh-CN") { - "EN" - } else { - "中" - } - ), 1) - )), - _cE("view", _uM("class" to "content-wrapper"), _uA( - _cE("view", _uM("class" to "logo-section"), _uA( - _cE("text", _uM("class" to "app-title"), "Akmon"), - _cE("text", _uM("class" to "page-title"), "忘记密码"), - _cE("text", _uM("class" to "page-subtitle"), "输入您的邮箱地址,我们将发送重置链接") - )), - _cE("view", _uM("class" to "form-container"), _uA( - if (resetEmailSent.value == false) { - _cE("view", _uM("key" to 0), _uA( - _cV(_component_form, _uM("onSubmit" to onSubmit), _uM("default" to withSlotCtx(fun(): UTSArray { - return _uA( - _cE("view", _uM("class" to _nC(_uA( - "input-group", - if (emailError.value != "") { - "input-error" - } else { - "" - } - ))), _uA( - _cE("text", _uM("class" to "input-label"), "邮箱"), - _cE("input", _uM("class" to "input-field", "name" to "email", "type" to "text", "modelValue" to email.value, "onInput" to fun(`$event`: UniInputEvent){ - email.value = `$event`.detail.value - }, "placeholder" to "请输入邮箱地址", "onBlur" to validateEmail), null, 40, _uA( - "modelValue", - "onInput" - )), - if (emailError.value != "") { - _cE("text", _uM("key" to 0, "class" to "error-text"), _tD(emailError.value), 1) - } else { - _cC("v-if", true) - } - ), 2), - _cE("button", _uM("form-type" to "submit", "class" to "submit-button", "disabled" to isLoading.value, "loading" to isLoading.value), " 发送重置链接 ", 8, _uA( - "disabled", - "loading" - )), - if (generalError.value != "") { - _cE("text", _uM("key" to 0, "class" to "general-error"), _tD(generalError.value), 1) - } else { - _cC("v-if", true) - } - ) - }), "_" to 1)), - _cE("view", _uM("class" to "login-option"), _uA( - _cE("text", _uM("class" to "login-text"), "想起密码了?"), - _cE("text", _uM("class" to "login-link", "onClick" to navigateToLogin), "返回登录") - )) - )) - } else { - _cE("view", _uM("key" to 1, "class" to "success-container"), _uA( - _cE("view", _uM("class" to "success-icon"), "✓"), - _cE("text", _uM("class" to "success-title"), "邮件已发送"), - _cE("text", _uM("class" to "success-message"), "请检查您的邮箱,按照邮件中的说明重置密码"), - _cE("button", _uM("class" to "back-button", "onClick" to navigateToLogin), " 返回登录 ") - )) - } - )) - )) - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("forgot-password-container" to _pS(_uM("height" to "100%", "paddingTop" to "40rpx", "paddingRight" to "40rpx", "paddingBottom" to "40rpx", "paddingLeft" to "40rpx", "backgroundColor" to "#f8f9fa", "boxSizing" to "border-box")), "content-wrapper" to _pS(_uM("width" to "100%", "display" to "flex", "flexDirection" to "column", "alignItems" to "center", "justifyContent" to "flex-start", "paddingBottom" to "40rpx", "minHeight" to "800rpx")), "language-switch" to _pS(_uM("position" to "absolute", "top" to "40rpx", "right" to "40rpx", "zIndex" to 10)), "language-btn" to _pS(_uM("width" to "80rpx", "height" to "80rpx", "borderTopLeftRadius" to "40rpx", "borderTopRightRadius" to "40rpx", "borderBottomRightRadius" to "40rpx", "borderBottomLeftRadius" to "40rpx", "fontSize" to "28rpx", "backgroundColor" to "rgba(33,150,243,0.8)", "color" to "#ffffff", "fontWeight" to "normal", "borderTopWidth" to "2rpx", "borderRightWidth" to "2rpx", "borderBottomWidth" to "2rpx", "borderLeftWidth" to "2rpx", "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "rgba(255,255,255,0.3)", "borderRightColor" to "rgba(255,255,255,0.3)", "borderBottomColor" to "rgba(255,255,255,0.3)", "borderLeftColor" to "rgba(255,255,255,0.3)", "textAlign" to "center", "boxShadow" to "0 4rpx 12rpx rgba(33, 150, 243, 0.3)")), "logo-section" to _pS(_uM("display" to "flex", "flexDirection" to "column", "alignItems" to "center", "marginTop" to "80rpx", "marginBottom" to "40rpx")), "app-title" to _pS(_uM("fontSize" to "36rpx", "fontWeight" to "bold", "color" to "#2196f3")), "page-title" to _pS(_uM("fontSize" to "48rpx", "marginTop" to "20rpx", "fontWeight" to "bold", "color" to "#333333")), "page-subtitle" to _pS(_uM("fontSize" to "28rpx", "marginTop" to "10rpx", "color" to "#666666")), "form-container" to _pS(_uM("width" to "100%", "maxWidth" to "680rpx", "paddingTop" to "40rpx", "paddingRight" to "40rpx", "paddingBottom" to "40rpx", "paddingLeft" to "40rpx", "backgroundColor" to "#ffffff", "borderTopLeftRadius" to "20rpx", "borderTopRightRadius" to "20rpx", "borderBottomRightRadius" to "20rpx", "borderBottomLeftRadius" to "20rpx", "boxShadow" to "0 10rpx 30rpx rgba(0, 0, 0, 0.1)", "boxSizing" to "border-box")), "input-group" to _pS(_uM("marginBottom" to "30rpx")), "input-label" to _pS(_uM("fontSize" to "28rpx", "marginBottom" to "10rpx", "fontWeight" to "normal", "color" to "#333333", "display" to "flex")), "input-field" to _uM("" to _uM("width" to "100%", "height" to "90rpx", "paddingTop" to 0, "paddingRight" to "30rpx", "paddingBottom" to 0, "paddingLeft" to "30rpx", "fontSize" to "28rpx", "borderTopLeftRadius" to "10rpx", "borderTopRightRadius" to "10rpx", "borderBottomRightRadius" to "10rpx", "borderBottomLeftRadius" to "10rpx", "borderTopWidth" to "2rpx", "borderRightWidth" to "2rpx", "borderBottomWidth" to "2rpx", "borderLeftWidth" to "2rpx", "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#dddddd", "borderRightColor" to "#dddddd", "borderBottomColor" to "#dddddd", "borderLeftColor" to "#dddddd", "backgroundColor" to "#f9f9f9", "boxSizing" to "border-box"), ".input-error " to _uM("borderTopColor" to "#f44336", "borderRightColor" to "#f44336", "borderBottomColor" to "#f44336", "borderLeftColor" to "#f44336")), "error-text" to _pS(_uM("fontSize" to "24rpx", "marginTop" to "6rpx", "color" to "#f44336")), "submit-button" to _pS(_uM("width" to "100%", "height" to "90rpx", "fontSize" to "32rpx", "marginTop" to "20rpx", "marginRight" to 0, "marginBottom" to "20rpx", "marginLeft" to 0, "borderTopLeftRadius" to "45rpx", "borderTopRightRadius" to "45rpx", "borderBottomRightRadius" to "45rpx", "borderBottomLeftRadius" to "45rpx", "backgroundImage" to "linear-gradient(to right, #2196f3, #03a9f4)", "color" to "#ffffff", "fontWeight" to "normal", "textAlign" to "center", "boxShadow" to "0 10rpx 20rpx rgba(3, 169, 244, 0.2)", "backgroundImage:disabled" to "none", "backgroundColor:disabled" to "#cccccc", "boxShadow:disabled" to "none")), "general-error" to _pS(_uM("width" to "100%", "textAlign" to "center", "color" to "#f44336", "fontSize" to "28rpx", "marginTop" to "20rpx")), "login-option" to _pS(_uM("display" to "flex", "justifyContent" to "center", "marginTop" to "40rpx")), "login-text" to _pS(_uM("fontSize" to "28rpx", "marginRight" to "8rpx", "color" to "#666666")), "login-link" to _pS(_uM("fontSize" to "28rpx", "color" to "#2196f3", "fontWeight" to "normal")), "success-container" to _pS(_uM("display" to "flex", "flexDirection" to "column", "alignItems" to "center", "paddingTop" to "20rpx", "paddingRight" to 0, "paddingBottom" to "20rpx", "paddingLeft" to 0)), "success-icon" to _pS(_uM("width" to "120rpx", "height" to "120rpx", "fontSize" to "60rpx", "marginBottom" to "30rpx", "backgroundColor" to "#4caf50", "color" to "#FFFFFF", "borderTopLeftRadius" to "120rpx", "borderTopRightRadius" to "120rpx", "borderBottomRightRadius" to "120rpx", "borderBottomLeftRadius" to "120rpx", "display" to "flex", "alignItems" to "center", "justifyContent" to "center")), "success-title" to _pS(_uM("fontSize" to "36rpx", "marginBottom" to "20rpx", "fontWeight" to "bold", "color" to "#333333")), "success-message" to _pS(_uM("fontSize" to "28rpx", "marginBottom" to "40rpx", "color" to "#666666", "textAlign" to "center")), "back-button" to _pS(_uM("width" to "100%", "height" to "90rpx", "fontSize" to "32rpx", "borderTopLeftRadius" to "45rpx", "borderTopRightRadius" to "45rpx", "borderBottomRightRadius" to "45rpx", "borderBottomLeftRadius" to "45rpx", "backgroundColor" to "#f0f0f0", "color" to "#333333", "fontWeight" to "normal", "textAlign" to "center"))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/user/login.kt b/unpackage/cache/.app-android/src/pages/user/login.kt deleted file mode 100644 index 2cd4f820..00000000 --- a/unpackage/cache/.app-android/src/pages/user/login.kt +++ /dev/null @@ -1,418 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.navigateTo as uni_navigateTo -import io.dcloud.uniapp.extapi.reLaunch as uni_reLaunch -import io.dcloud.uniapp.extapi.setStorageSync as uni_setStorageSync -import io.dcloud.uniapp.extapi.showToast as uni_showToast -open class GenPagesUserLogin : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesUserLogin) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesUserLogin - val _cache = __ins.renderCache - val cssVars: UTSJSONObject = object : UTSJSONObject(UTSSourceMapPosition("cssVars", "pages/user/login.uvue", 144, 7)) { - var `--bg` = "#f5f6f8" - var `--card` = "#ffffff" - var `--brand` = "#e1251b" - var `--text` = "#333333" - var `--muted` = "#666666" - var `--muted2` = "#999999" - var `--border` = "#eeeeee" - var `--inputbg` = "#f6f7f9" - var `--shadow` = "0 2px 12px rgba(0,0,0,0.06)" - } - val logoUrl = ref("/static/logo.png") - val loginType = ref(0) - val account = ref("") - val password = ref("") - val captcha = ref("") - val isLoading = ref(false) - val codeDisabled = ref(false) - val codeText = ref("获取验证码") - val codeTimer = ref(0) - val codeCountdown = ref(0) - val checkLoginStatus = fun(): Unit { - try { - if (IS_TEST_MODE) { - return - } - val sessionInfo = supaInstance.getSession() - if (sessionInfo != null && sessionInfo.user != null) { - val pages = getCurrentPages() - if (pages.length > 0) { - val currentPage = pages[pages.length - 1] - val opts = currentPage.options as UTSJSONObject - val redirect = opts.getString("redirect") - if (redirect != null && redirect != "") { - uni_reLaunch(ReLaunchOptions(url = "/pages/mall/consumer/index")) - } else { - uni_reLaunch(ReLaunchOptions(url = "/pages/mall/consumer/index")) - } - } else { - uni_reLaunch(ReLaunchOptions(url = "/pages/mall/consumer/index")) - } - } - } - catch (e: Throwable) { - console.error("检查登录状态失败:", e, " at pages/user/login.uvue:190") - } - } - onMounted(fun(){ - checkLoginStatus() - } - ) - val validateAccount = fun(): Boolean { - if (account.value.trim() === "") { - uni_showToast(ShowToastOptions(title = "请填写账号", icon = "none")) - return false - } - if (loginType.value === 1) { - if (!UTSRegExp("^1[3-9]\\d{9}\$", "").test(account.value)) { - uni_showToast(ShowToastOptions(title = "请输入正确的手机号码", icon = "none")) - return false - } - } - return true - } - val validatePassword = fun(): Boolean { - if (password.value.trim() === "") { - uni_showToast(ShowToastOptions(title = "请填写密码", icon = "none")) - return false - } - if (password.value.length < 6) { - uni_showToast(ShowToastOptions(title = "密码长度不能少于6位", icon = "none")) - return false - } - return true - } - val validateCaptcha = fun(): Boolean { - if (captcha.value.trim() === "") { - uni_showToast(ShowToastOptions(title = "请填写验证码", icon = "none")) - return false - } - if (!UTSRegExp("^\\d{6}\$", "").test(captcha.value)) { - uni_showToast(ShowToastOptions(title = "请输入正确的验证码", icon = "none")) - return false - } - return true - } - val getCode = fun(): UTSPromise { - return wrapUTSPromise(suspend w1@{ - if (codeDisabled.value) { - return@w1 - } - if (!validateAccount()) { - return@w1 - } - uni_showToast(ShowToastOptions(title = "验证码已发送", icon = "success")) - codeDisabled.value = true - codeCountdown.value = 60 - codeText.value = "" + codeCountdown.value + "秒后重试" - codeTimer.value = setInterval(fun(){ - codeCountdown.value-- - if (codeCountdown.value > 0) { - codeText.value = "" + codeCountdown.value + "秒后重试" - } else { - codeDisabled.value = false - codeText.value = "获取验证码" - if (codeTimer.value != 0) { - clearInterval(codeTimer.value) - codeTimer.value = 0 - } - } - } - , 1000) as Number - }) - } - val handleLogin = fun(): UTSPromise { - return wrapUTSPromise(suspend w1@{ - if (!validateAccount()) { - return@w1 - } - if (account.value === "admin" && password.value === "admin") { - setIsLoggedIn(true) - val adminProfile = UserProfile(id = "admin", username = "Admin", email = "admin@mall.com", gender = "unknown", birthday = "", height_cm = 0, weight_kg = 0, bio = "Administrator", avatar_url = "/static/logo.png", preferred_language = "zh-CN", role = "admin", school_id = "", grade_id = "", class_id = "") - setUserProfile(adminProfile) - uni_showToast(ShowToastOptions(title = "管理员登录成功", icon = "success")) - setTimeout(fun(){ - uni_reLaunch(ReLaunchOptions(url = "/pages/mall/consumer/index")) - } - , 500) - return@w1 - } - if (loginType.value === 0) { - if (!validatePassword()) { - return@w1 - } - } else { - if (!validateCaptcha()) { - return@w1 - } - } - isLoading.value = true - try { - logout() - if (loginType.value === 0) { - val isEmail = account.value.includes("@") - if (isEmail) { - val result = await(supaInstance.signIn(account.value.trim(), password.value)) - console.log("signIn result:", result, " at pages/user/login.uvue:307") - if (result.user == null) { - val rawData = result.raw as UTSJSONObject - val errorMsg = rawData?.getString("msg") ?: "" - val errorCode = rawData?.getString("error_code") ?: "" - if (errorMsg.includes("email") && errorMsg.includes("confirm") || errorCode === "email_not_confirmed" || errorMsg.includes("邮箱") && errorMsg.includes("确认")) { - throw UTSError("邮箱未确认,请先检查邮箱并点击确认链接") - } else if (errorMsg.includes("Invalid login credentials") || errorCode === "invalid_credentials") { - throw UTSError("邮箱或密码错误") - } else { - throw UTSError(if (errorMsg != "") { - errorMsg - } else { - "登录失败,请重试" - } - ) - } - } - } else { - uni_showToast(ShowToastOptions(title = "手机号密码登录功能开发中", icon = "none")) - return@w1 - } - } else { - uni_showToast(ShowToastOptions(title = "手机验证码登录功能开发中", icon = "none")) - return@w1 - } - try { - val profile = await(getCurrentUser()) - console.log("current user profile:", profile, " at pages/user/login.uvue:339") - } - catch (e: Throwable) { - console.error("获取用户信息失败(忽略,不阻塞登录):", e, " at pages/user/login.uvue:341") - } - val currentSession = supaInstance.getSession() - if (currentSession.user != null) { - val uid = currentSession.user?.getString("id") - if (uid != null) { - uni_setStorageSync("user_id", uid) - console.log("用户ID已保存到本地存储:", uid, " at pages/user/login.uvue:350") - } - } - uni_showToast(ShowToastOptions(title = "登录成功", icon = "success")) - setTimeout(fun(){ - uni_reLaunch(ReLaunchOptions(url = "/pages/mall/consumer/index")) - } - , 500) - } - catch (err: Throwable) { - console.error("登录错误:", err, " at pages/user/login.uvue:359") - var msg = "登录失败,请重试" - try { - val e = err as UTSError - if (e.message != null && e.message.trim() !== "") { - msg = e.message - } - } - catch (e2: Throwable) {} - uni_showToast(ShowToastOptions(title = msg, icon = "none")) - } - finally { - isLoading.value = false - } - }) - } - val navigateToRegister = fun(): Unit { - uni_navigateTo(NavigateToOptions(url = "/pages/user/register")) - } - val handleTutorial = fun(){ - return uni_showToast(ShowToastOptions(title = "扫码教程开发中", icon = "none")) - } - val handleForgotPassword = fun(){ - return uni_showToast(ShowToastOptions(title = "忘记密码开发中", icon = "none")) - } - val handleWechatLogin = fun(){ - return uni_showToast(ShowToastOptions(title = "微信登录开发中", icon = "none")) - } - val handleQQLogin = fun(){ - return uni_showToast(ShowToastOptions(title = "QQ登录开发中", icon = "none")) - } - return fun(): Any? { - return _cE("view", _uM("class" to "page", "style" to cssVars), _uA( - _cE("view", _uM("class" to "header"), _uA( - _cE("view", _uM("class" to "header-left"), _uA( - _cE("image", _uM("src" to logoUrl.value, "mode" to "aspectFit", "class" to "logo"), null, 8, _uA( - "src" - )) - )) - )), - _cE("view", _uM("class" to "main"), _uA( - _cE("view", _uM("class" to "card"), _uA( - _cE("view", _uM("class" to "left"), _uA( - _cE("text", _uM("class" to "left-title"), "APP 扫码登录"), - _cE("view", _uM("class" to "left-hint"), _uA( - _cE("text", _uM("class" to "hint-text"), "打开 APP 扫一扫"), - _cE("text", _uM("class" to "hint-link", "onClick" to handleTutorial), "查看教程") - )), - _cE("view", _uM("class" to "qr-wrap"), _uA( - _cE("view", _uM("class" to "qr"), _uA( - _cE("view", _uM("class" to "qr-placeholder"), _uA( - _cE("text", _uM("class" to "qr-text"), "二维码占位"), - _cE("text", _uM("class" to "qr-sub"), "220×220") - )) - )) - )) - )), - _cE("view", _uM("class" to "divider")), - _cE("view", _uM("class" to "right"), _uA( - _cE("view", _uM("class" to "right-inner"), _uA( - _cE("view", _uM("class" to "tabs"), _uA( - _cE("view", _uM("class" to _nC(_uA( - "tab", - _uM("active" to (loginType.value === 0)) - )), "onClick" to fun(){ - loginType.value = 0 - } - ), _uA( - _cE("text", _uM("class" to "tab-text"), "密码登录"), - if (loginType.value === 0) { - _cE("view", _uM("key" to 0, "class" to "tab-line")) - } else { - _cC("v-if", true) - } - ), 10, _uA( - "onClick" - )), - _cE("view", _uM("class" to _nC(_uA( - "tab", - _uM("active" to (loginType.value === 1)) - )), "onClick" to fun(){ - loginType.value = 1 - } - ), _uA( - _cE("text", _uM("class" to "tab-text"), "短信登录"), - if (loginType.value === 1) { - _cE("view", _uM("key" to 0, "class" to "tab-line")) - } else { - _cC("v-if", true) - } - ), 10, _uA( - "onClick" - )) - )), - _cE("view", _uM("class" to "form"), _uA( - if (loginType.value === 0) { - _cE(Fragment, _uM("key" to 0), _uA( - _cE("view", _uM("class" to "field"), _uA( - _cE("input", _uM("class" to "input", "type" to "text", "placeholder" to "账号名/手机号/邮箱", "modelValue" to account.value, "onInput" to fun(`$event`: UniInputEvent){ - account.value = `$event`.detail.value - }), null, 40, _uA( - "modelValue", - "onInput" - )) - )), - _cE("view", _uM("class" to "field"), _uA( - _cE("input", _uM("class" to "input", "type" to "password", "placeholder" to "密码", "modelValue" to password.value, "onInput" to fun(`$event`: UniInputEvent){ - password.value = `$event`.detail.value - }), null, 40, _uA( - "modelValue", - "onInput" - )) - )) - ), 64) - } else { - _cE(Fragment, _uM("key" to 1), _uA( - _cE("view", _uM("class" to "field"), _uA( - _cE("input", _uM("class" to "input", "type" to "text", "placeholder" to "输入手机号码", "maxlength" to "11", "modelValue" to account.value, "onInput" to fun(`$event`: UniInputEvent){ - account.value = `$event`.detail.value - } - ), null, 40, _uA( - "modelValue", - "onInput" - )) - )), - _cE("view", _uM("class" to "field code-row"), _uA( - _cE("input", _uM("class" to "input code-input", "type" to "text", "placeholder" to "填写验证码", "maxlength" to "6", "modelValue" to captcha.value, "onInput" to fun(`$event`: UniInputEvent){ - captcha.value = `$event`.detail.value - } - ), null, 40, _uA( - "modelValue", - "onInput" - )), - _cE("view", _uM("class" to _nC(_uA( - "code-btn", - if (codeDisabled.value) { - "disabled" - } else { - "" - } - )), "onClick" to getCode), _uA( - _cE("text", _uM("class" to "code-text"), _tD(codeText.value), 1) - ), 2) - )) - ), 64) - } - , - _cE("view", _uM("class" to _nC(_uA( - "btn", - _uM("disabled" to isLoading.value) - )), "onClick" to handleLogin), _uA( - _cE("text", _uM("class" to "btn-text"), "登录") - ), 2), - _cE("view", _uM("class" to "actions"), _uA( - _cE("view", _uM("class" to "action-item", "onClick" to handleWechatLogin), _uA( - _cE("view", _uM("class" to "dot wechat")), - _cE("text", _uM("class" to "action-text"), "微信登录") - )), - _cE("text", _uM("class" to "sep"), "|"), - _cE("view", _uM("class" to "action-item", "onClick" to handleQQLogin), _uA( - _cE("view", _uM("class" to "dot qq")), - _cE("text", _uM("class" to "action-text"), "QQ登录") - )), - _cE("text", _uM("class" to "sep"), "|"), - _cE("text", _uM("class" to "action-link", "onClick" to handleForgotPassword), "忘记密码"), - _cE("text", _uM("class" to "sep"), "|"), - _cE("text", _uM("class" to "action-link", "onClick" to navigateToRegister), "立即注册") - )) - )) - )) - )) - )) - )), - _cE("view", _uM("class" to "footer"), _uA( - _cE("text", _uM("class" to "footer-text"), "Copyright ©2024 Mall. All Rights Reserved") - )) - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("page" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "display" to "flex", "flexDirection" to "column", "backgroundColor" to "#f5f6f8")), "header" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "flex-start", "paddingTop" to 30, "paddingRight" to 40, "paddingBottom" to 30, "paddingLeft" to 40)), "logo" to _pS(_uM("width" to 240, "height" to 64)), "main" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "center", "paddingTop" to 20, "paddingRight" to 10, "paddingBottom" to 20, "paddingLeft" to 10)), "card" to _pS(_uM("width" to "90%", "backgroundColor" to "#ffffff", "borderTopLeftRadius" to 16, "borderTopRightRadius" to 16, "borderBottomRightRadius" to 16, "borderBottomLeftRadius" to 16, "paddingTop" to 30, "paddingRight" to 30, "paddingBottom" to 30, "paddingLeft" to 30, "display" to "flex", "flexDirection" to "column")), "left" to _pS(_uM("flexDirection" to "column", "alignItems" to "flex-start", "justifyContent" to "center", "display" to "none")), "left-title" to _pS(_uM("fontSize" to 18, "fontWeight" to "700", "color" to "#333333", "marginBottom" to 10)), "left-hint" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center", "marginBottom" to 18)), "hint-text" to _pS(_uM("fontSize" to 13, "color" to "#666666", "marginRight" to 14)), "hint-link" to _pS(_uM("fontSize" to 13, "color" to "#e1251b")), "qr-wrap" to _pS(_uM("width" to "100%", "display" to "flex", "flexDirection" to "row", "justifyContent" to "flex-start")), "qr" to _pS(_uM("width" to 240, "height" to 240, "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "center")), "qr-placeholder" to _pS(_uM("width" to 220, "height" to 220, "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#e6e6e6", "borderRightColor" to "#e6e6e6", "borderBottomColor" to "#e6e6e6", "borderLeftColor" to "#e6e6e6", "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "backgroundColor" to "#ffffff", "display" to "flex", "flexDirection" to "column", "alignItems" to "center", "justifyContent" to "center")), "qr-text" to _pS(_uM("fontSize" to 14, "color" to "#666666", "marginBottom" to 8)), "qr-sub" to _pS(_uM("fontSize" to 12, "color" to "#999999")), "divider" to _pS(_uM("display" to "none")), "right" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "display" to "flex", "flexDirection" to "column", "justifyContent" to "center")), "right-inner" to _pS(_uM("width" to "100%", "marginLeft" to "auto")), "tabs" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "center", "marginBottom" to 18)), "tab" to _pS(_uM("position" to "relative", "paddingTop" to 8, "paddingRight" to 12, "paddingBottom" to 8, "paddingLeft" to 12, "marginTop" to 0, "marginRight" to 12, "marginBottom" to 0, "marginLeft" to 12)), "tab-text" to _uM("" to _uM("fontSize" to 16, "color" to "#666666"), ".tab.active " to _uM("color" to "#e1251b", "fontWeight" to "700")), "tab-line" to _pS(_uM("position" to "absolute", "left" to 0, "right" to 0, "bottom" to -6, "height" to 2, "backgroundColor" to "#e1251b", "borderTopLeftRadius" to 2, "borderTopRightRadius" to 2, "borderBottomRightRadius" to 2, "borderBottomLeftRadius" to 2)), "form" to _pS(_uM("marginTop" to 10)), "field" to _pS(_uM("marginBottom" to 14)), "input" to _pS(_uM("width" to "100%", "height" to 44, "borderTopLeftRadius" to 10, "borderTopRightRadius" to 10, "borderBottomRightRadius" to 10, "borderBottomLeftRadius" to 10, "backgroundColor" to "#f6f7f9", "paddingTop" to 0, "paddingRight" to 14, "paddingBottom" to 0, "paddingLeft" to 14, "fontSize" to 14, "color" to "#333333")), "code-row" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center")), "code-input" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "marginRight" to 10)), "code-btn" to _uM("" to _uM("height" to 44, "paddingTop" to 0, "paddingRight" to 12, "paddingBottom" to 0, "paddingLeft" to 12, "borderTopLeftRadius" to 10, "borderTopRightRadius" to 10, "borderBottomRightRadius" to 10, "borderBottomLeftRadius" to 10, "backgroundColor" to "#ffffff", "borderTopWidth" to 1, "borderRightWidth" to 1, "borderBottomWidth" to 1, "borderLeftWidth" to 1, "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#eeeeee", "borderRightColor" to "#eeeeee", "borderBottomColor" to "#eeeeee", "borderLeftColor" to "#eeeeee", "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "center"), ".disabled" to _uM("opacity" to 0.5)), "code-text" to _pS(_uM("fontSize" to 13, "color" to "#e1251b")), "btn" to _uM("" to _uM("marginTop" to 16, "height" to 46, "borderTopLeftRadius" to 10, "borderTopRightRadius" to 10, "borderBottomRightRadius" to 10, "borderBottomLeftRadius" to 10, "backgroundColor" to "rgba(225,37,27,0.45)", "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "center"), ".disabled" to _uM("backgroundColor" to "#d9d9d9")), "btn-text" to _pS(_uM("color" to "#ffffff", "fontSize" to 16, "fontWeight" to "700")), "actions" to _pS(_uM("marginTop" to 16, "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "center", "flexWrap" to "wrap")), "action-item" to _pS(_uM("display" to "flex", "flexDirection" to "row", "alignItems" to "center", "marginTop" to 0, "marginRight" to 6, "marginBottom" to 0, "marginLeft" to 6)), "dot" to _uM("" to _uM("width" to 16, "height" to 16, "borderTopLeftRadius" to 8, "borderTopRightRadius" to 8, "borderBottomRightRadius" to 8, "borderBottomLeftRadius" to 8, "marginRight" to 8), ".wechat" to _uM("backgroundColor" to "#19be6b"), ".qq" to _uM("backgroundColor" to "#2d8cf0")), "action-text" to _pS(_uM("fontSize" to 13, "color" to "#666666")), "action-link" to _pS(_uM("fontSize" to 13, "color" to "#666666", "marginTop" to 0, "marginRight" to 6, "marginBottom" to 0, "marginLeft" to 6)), "sep" to _pS(_uM("fontSize" to 13, "color" to "#e0e0e0", "marginTop" to 0, "marginRight" to 6, "marginBottom" to 0, "marginLeft" to 6)), "footer" to _pS(_uM("paddingTop" to 18, "paddingRight" to 0, "paddingBottom" to 28, "paddingLeft" to 0, "display" to "flex", "flexDirection" to "row", "justifyContent" to "center")), "footer-text" to _pS(_uM("fontSize" to 12, "color" to "#999999"))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/user/profile.kt b/unpackage/cache/.app-android/src/pages/user/profile.kt deleted file mode 100644 index 0c1b8d3b..00000000 --- a/unpackage/cache/.app-android/src/pages/user/profile.kt +++ /dev/null @@ -1,477 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.chooseImage as uni_chooseImage -import io.dcloud.uniapp.extapi.showToast as uni_showToast -open class GenPagesUserProfile : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesUserProfile) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesUserProfile - val _cache = __ins.renderCache - val isLoading = ref(false) - val saveSuccess = ref("") - val saveError = ref("") - val isSaving = ref(false) - val userAvatar = ref("/static/logo.png") - val currentLocale = ref("zh-CN") - val genderOptions = _uA( - "male", - "female", - "other" - ) as UTSArray - val tempGenderIndex = ref(_uA(0)) - val showGenderPicker = ref(false) - val showBirthdayPicker = ref(false) - val tempBirthday = ref(_uA(2000, 1, 1)) - val profile = ref(UserProfile(id = "", username = "", email = "", gender = "other", birthday = "", height_cm = 0, weight_kg = 0, bio = "", avatar_url = "/static/logo.png", preferred_language = "zh-CN")) - val toggleLanguage = fun(): Unit { - if (currentLocale.value === "zh-CN") { - currentLocale.value = "en-US" - } else { - currentLocale.value = "zh-CN" - } - uni_showToast(ShowToastOptions(title = "语言已切换", icon = "success")) - } - val getGenderText = fun(genderCode: String): String { - if (genderCode == "male") { - return "男" - } else if (genderCode == "female") { - return "女" - } else { - return "其他" - } - } - val loadProfile = fun(): UTSPromise { - return wrapUTSPromise(suspend w1@{ - isLoading.value = true - val user = supaInstance.user - if (user == null) { - profile.value.email = "" - isLoading.value = false - return@w1 - } - val userEmail = user.getString("email") - if (userEmail == null || userEmail == "") { - profile.value.email = "" - isLoading.value = false - return@w1 - } - val filter = "id=eq." + user["id"] as String - val options = AkSupaSelectOptions(single = true) - val result = await(supaInstance.select("ak_users", filter, options)) - val data = result.data - val error = result.error - if (UTSArray.isArray(data) && (data as UTSArray).length > 0) { - val prodata = (data as UTSArray)[0] as UTSJSONObject - val p: UserProfile = UserProfile(id = user["id"] as String, username = prodata.getString("username") ?: "", email = prodata.getString("email") ?: "", gender = prodata.getString("gender") ?: "other", birthday = prodata.getString("birthday") ?: "", height_cm = prodata.getNumber("height_cm") ?: 0, weight_kg = prodata.getNumber("weight_kg") ?: 0, bio = prodata.getString("bio") ?: "", avatar_url = prodata.getString("avatar_url") ?: "/static/logo.png", preferred_language = prodata.getString("preferred_language") ?: "zh-CN") - profile.value = p - if (p.avatar_url != null && p.avatar_url != "") { - userAvatar.value = p.avatar_url!! - } - setUserProfile(p) - } else { - profile.value.id = user.getString("id") ?: "" - profile.value.username = user.getString("username") ?: "" - profile.value.email = user.getString("email") ?: "" - if (profile.value.username == "") { - val emailStr = profile.value.email - if (emailStr != null && emailStr != "") { - val parts = emailStr.split("@") - if (parts.length > 0) { - profile.value.username = parts[0] - } - } - } - val newProfile = UTSJSONObject(object : UTSJSONObject() { - var id = profile.value.id!! - var username = profile.value.username - var email = profile.value.email - var gender = profile.value.gender - var preferred_language = profile.value.preferred_language - }, UTSSourceMapPosition("newProfile", "pages/user/profile.uvue", 220, 11)) - val insertResult = await(supaInstance.from("ak_users").insert(newProfile).execute()) - if (insertResult.error == null) { - val newProfileData: UserProfile = UserProfile(id = profile.value.id, username = profile.value.username, email = profile.value.email, gender = profile.value.gender, preferred_language = profile.value.preferred_language) - setUserProfile(newProfileData) - } - } - isLoading.value = false - }) - } - val saveProfile = fun(): UTSPromise { - return wrapUTSPromise(suspend { - isSaving.value = true - saveSuccess.value = "" - saveError.value = "" - try { - val userid: String = profile.value.id ?: "" - val updateData: UTSJSONObject = object : UTSJSONObject(UTSSourceMapPosition("updateData", "pages/user/profile.uvue", 251, 11)) { - var username = profile.value.username - var gender = profile.value.gender - var birthday = profile.value.birthday - var height_cm = profile.value.height_cm - var weight_kg = profile.value.weight_kg - var bio = profile.value.bio - var avatar_url = profile.value.avatar_url - var preferred_language = profile.value.preferred_language - } - val result = await(supaInstance.from("ak_users").update(updateData).eq("id", userid).execute()) - if (result.error == null) { - saveSuccess.value = "保存成功" - } else { - saveError.value = "保存失败" - } - } - catch (e: Throwable) { - saveError.value = "保存失败" - } - isSaving.value = false - }) - } - val onSubmit = fun(): Unit { - saveProfile() - } - val getUuid = fun(): String { - return "" + Date.now() + "_" + Math.floor(Math.random() * 1e8) - } - val chooseAvatar = fun(): Unit { - uni_chooseImage(ChooseImageOptions(count = 1, sizeType = _uA( - "compressed" - ), sourceType = _uA( - "album", - "camera" - ), success = fun(res: ChooseImageSuccess){ - val upfilepath = res.tempFilePaths[0] - val userId = profile.value.id ?: "" - var ext = "png" - val tempFiles = res.tempFiles - if (UTSArray.isArray(tempFiles) && tempFiles.length > 0) { - val fileObj: ChooseImageTempFile = tempFiles[0] - val fileName = fileObj.name - if (fileName != null && fileName != "") { - val idx = fileName.lastIndexOf(".") - if (idx >= 0) { - ext = fileName.substring(idx + 1) - } - } - } - val uuid = getUuid() - val remotePath = "profiles/" + userId + "_" + uuid + "." + ext - supaInstance.storage.from("zhipao").upload(remotePath, upfilepath, UTSJSONObject()).then(fun(uploadResult){ - if (uploadResult.status == 200 || uploadResult.status == 201) { - val data = uploadResult.data - if (data != null) { - val dataObj = data as UTSJSONObject - var avatarUrl = dataObj.getString("Key") - if (avatarUrl != null && avatarUrl != "") { - avatarUrl = "https://ak3.oulog.com/storage/v1/object/public/" + avatarUrl - userAvatar.value = avatarUrl - profile.value.avatar_url = avatarUrl - saveProfile() - uni_showToast(ShowToastOptions(title = "头像已更新", icon = "success")) - } - } - } else { - uni_showToast(ShowToastOptions(title = "上传失败", icon = "none")) - } - } - ) - } - )) - } - val onHeightInput = fun(e: UniInputEvent): Unit { - val kVal = e.detail.value - if (kVal == "") { - profile.value.height_cm = 0 - } else { - profile.value.height_cm = parseInt(kVal) - } - } - val onWeightInput = fun(e: UniInputEvent): Unit { - val kVal = e.detail.value - if (kVal == "") { - profile.value.weight_kg = 0 - } else { - profile.value.weight_kg = parseInt(kVal) - } - } - val showGenderPickerNow = fun(): Unit { - val idx = genderOptions.indexOf(profile.value.gender) - tempGenderIndex.value = _uA( - if (idx >= 0) { - idx - } else { - 0 - } - ) - showGenderPicker.value = true - } - val onGenderPickerViewChange = fun(e: UniPickerViewChangeEvent): Unit { - val idx = e.detail.value[0] - tempGenderIndex.value = _uA( - if ((idx >= 0 && idx < genderOptions.length)) { - idx - } else { - 0 - } - ) - } - val confirmGenderPicker = fun(): Unit { - profile.value.gender = genderOptions[tempGenderIndex.value[0]] - showGenderPicker.value = false - } - val onBirthdayDateChange = fun(vals: UTSArray): Unit { - tempBirthday.value = vals - } - val showBirthdayPickernow = fun(): Unit { - val birthday = profile.value.birthday - if (birthday != null && birthday != "") { - val parts = birthday.split("-") - if (parts.length == 3) { - tempBirthday.value = _uA( - parseInt(parts[0]), - parseInt(parts[1]), - parseInt(parts[2]) - ) - } - } - showBirthdayPicker.value = true - } - val confirmBirthdayPicker = fun(): Unit { - showBirthdayPicker.value = false - val y = tempBirthday.value[0] - val m = tempBirthday.value[1] - val d = tempBirthday.value[2] - val mm = if (m < 10) { - "0" + m - } else { - "" + m - } - val dd = if (d < 10) { - "0" + d - } else { - "" + d - } - profile.value.birthday = "" + y + "-" + mm + "-" + dd - } - onMounted(fun(){ - loadProfile() - } - ) - return fun(): Any? { - val _component_picker_view_column = resolveComponent("picker-view-column") - val _component_picker_view = resolveComponent("picker-view") - val _component_picker_date = resolveComponent("picker-date") - val _component_form = resolveComponent("form") - return _cE("view", _uM("class" to "page-wrapper"), _uA( - _cE("view", _uM("class" to "top-section"), _uA( - _cE("view", _uM("class" to "language-switch"), _uA( - _cE("button", _uM("class" to "language-btn", "onClick" to toggleLanguage), _tD(if (currentLocale.value === "zh-CN") { - "EN" - } else { - "中" - } - ), 1) - )) - )), - _cE("view", _uM("class" to "main-section"), _uA( - _cE("scroll-view", _uM("direction" to "vertical", "class" to "profile-container"), _uA( - if (isTrue(isLoading.value)) { - _cE("view", _uM("key" to 0, "class" to "loading-container"), _uA( - _cE("text", _uM("class" to "loading-text"), "加载中...") - )) - } else { - if (profile.value.email == "") { - _cE("view", _uM("key" to 1, "class" to "error-container"), _uA( - _cE("text", _uM("class" to "error-text"), "加载失败"), - _cE("button", _uM("class" to "retry-button", "onClick" to loadProfile), "重试") - )) - } else { - _cE("view", _uM("key" to 2, "class" to "profile-content"), _uA( - _cE("view", _uM("class" to "avatar-section"), _uA( - _cE("image", _uM("class" to "avatar", "src" to userAvatar.value, "mode" to "aspectFill", "onClick" to chooseAvatar), null, 8, _uA( - "src" - )) - )), - _cV(_component_form, _uM("onSubmit" to onSubmit), _uM("default" to withSlotCtx(fun(): UTSArray { - return _uA( - _cE("view", _uM("class" to "input-group"), _uA( - _cE("text", _uM("class" to "input-label"), "用户名"), - _cE("input", _uM("class" to "input-field", "name" to "username", "type" to "text", "modelValue" to profile.value.username, "onInput" to fun(`$event`: UniInputEvent){ - profile.value.username = `$event`.detail.value - } - , "placeholder" to "请输入用户名"), null, 40, _uA( - "modelValue", - "onInput" - )) - )), - _cE("view", _uM("class" to "input-group"), _uA( - _cE("text", _uM("class" to "input-label"), "邮箱"), - _cE("input", _uM("class" to "input-field readonly", "name" to "email", "type" to "text", "modelValue" to profile.value.email, "onInput" to fun(`$event`: UniInputEvent){ - profile.value.email = `$event`.detail.value - } - , "disabled" to ""), null, 40, _uA( - "modelValue", - "onInput" - )), - _cE("text", _uM("class" to "hint-text"), "邮箱不可修改") - )), - _cE("view", _uM("class" to "input-group"), _uA( - _cE("text", _uM("class" to "input-label"), "性别"), - _cE("view", _uM("class" to "picker-field", "onClick" to showGenderPickerNow), _uA( - _cE("text", null, _tD(getGenderText(profile.value.gender ?: "other")), 1), - _cE("text", _uM("class" to "picker-arrow"), ">") - )), - if (isTrue(showGenderPicker.value)) { - _cE("view", _uM("key" to 0, "class" to "picker-modal"), _uA( - _cV(_component_picker_view, _uM("class" to "picker-view", "value" to tempGenderIndex.value, "indicator-style" to "height: 50px;", "onChange" to onGenderPickerViewChange), _uM("default" to withSlotCtx(fun(): UTSArray { - return _uA( - _cV(_component_picker_view_column, _uM("style" to _nS(_uM("width" to "750rpx"))), _uM("default" to withSlotCtx(fun(): UTSArray { - return _uA( - _cE(Fragment, null, RenderHelpers.renderList(genderOptions, fun(g, idx, __index, _cached): Any { - return _cE("view", _uM("key" to g, "class" to "picker-item"), _tD(getGenderText(g)), 1) - }), 64) - ) - }), "_" to 1), 8, _uA( - "style" - )) - ) - }), "_" to 1), 8, _uA( - "value" - )), - _cE("view", _uM("class" to "picker-actions"), _uA( - _cE("button", _uM("onClick" to fun(){ - showGenderPicker.value = false - }), "取消", 8, _uA( - "onClick" - )), - _cE("button", _uM("onClick" to confirmGenderPicker, "class" to "picker-actions-button"), "确定") - )) - )) - } else { - _cC("v-if", true) - } - )), - _cE("view", _uM("class" to "input-group"), _uA( - _cE("text", _uM("class" to "input-label"), "生日"), - _cE("view", _uM("class" to "picker-field", "onClick" to showBirthdayPickernow), _uA( - _cE("text", null, _tD(if (profile.value.birthday != null && profile.value.birthday != "") { - profile.value.birthday - } else { - "请选择生日" - } - ), 1), - _cE("text", _uM("class" to "picker-arrow"), ">") - )), - if (isTrue(showBirthdayPicker.value)) { - _cE("view", _uM("key" to 0, "class" to "picker-modal"), _uA( - _cV(_component_picker_date, _uM("startYear" to 1970, "endYear" to Date().getFullYear(), "value" to tempBirthday.value, "onChange" to onBirthdayDateChange), null, 8, _uA( - "endYear", - "value" - )), - _cE("view", _uM("class" to "picker-actions"), _uA( - _cE("button", _uM("onClick" to fun(){ - showBirthdayPicker.value = false - }), "取消", 8, _uA( - "onClick" - )), - _cE("button", _uM("onClick" to confirmBirthdayPicker, "class" to "picker-actions-button"), "确定") - )) - )) - } else { - _cC("v-if", true) - } - )), - _cE("view", _uM("class" to "input-group"), _uA( - _cE("text", _uM("class" to "input-label"), "身高 (cm)"), - _cE("input", _uM("class" to "input-field", "name" to "height", "type" to "number", "value" to if (profile.value.height_cm != null && profile.value.height_cm!! > 0) { - profile.value.height_cm - } else { - "" - } - , "placeholder" to "请输入身高", "onInput" to onHeightInput), null, 40, _uA( - "value" - )) - )), - _cE("view", _uM("class" to "input-group"), _uA( - _cE("text", _uM("class" to "input-label"), "体重 (kg)"), - _cE("input", _uM("class" to "input-field", "name" to "weight", "type" to "number", "value" to if (profile.value.weight_kg != null && profile.value.weight_kg!! > 0) { - profile.value.weight_kg - } else { - "" - } - , "placeholder" to "请输入体重", "onInput" to onWeightInput), null, 40, _uA( - "value" - )) - )), - _cE("view", _uM("class" to "input-group"), _uA( - _cE("text", _uM("class" to "input-label"), "个人简介"), - _cE("textarea", _uM("class" to "textarea-field", "name" to "bio", "modelValue" to profile.value.bio, "onInput" to fun(`$event`: UniInputEvent){ - profile.value.bio = `$event`.detail.value - } - , "placeholder" to "请输入个人简介"), null, 40, _uA( - "modelValue", - "onInput" - )) - )), - _cE("button", _uM("form-type" to "submit", "class" to "save-button", "disabled" to isSaving.value, "loading" to isSaving.value), " 保存 ", 8, _uA( - "disabled", - "loading" - )) - ) - } - ), "_" to 1)), - if (saveSuccess.value != "") { - _cE("view", _uM("key" to 0, "class" to "success-message"), _uA( - _cE("text", _uM("class" to "success-text"), _tD(saveSuccess.value), 1) - )) - } else { - if (saveError.value != "") { - _cE("view", _uM("key" to 1, "class" to "error-message"), _uA( - _cE("text", _uM("class" to "error-text"), _tD(saveError.value), 1) - )) - } else { - _cC("v-if", true) - } - } - )) - } - } - )) - )) - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("page-wrapper" to _pS(_uM("display" to "flex", "flexDirection" to "column", "backgroundColor" to "#f8f9fa", "flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%")), "top-section" to _pS(_uM("height" to "100rpx", "position" to "relative", "backgroundColor" to "#f8f9fa")), "main-section" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "overflow" to "hidden")), "profile-container" to _pS(_uM("paddingTop" to "20rpx", "paddingRight" to "20rpx", "paddingBottom" to "20rpx", "paddingLeft" to "20rpx", "backgroundColor" to "#f8f9fa", "display" to "flex", "flexDirection" to "column", "boxSizing" to "border-box")), "language-switch" to _pS(_uM("position" to "absolute", "top" to "20rpx", "right" to "30rpx", "zIndex" to 10)), "language-btn" to _pS(_uM("width" to "60rpx", "height" to "60rpx", "borderTopLeftRadius" to "30rpx", "borderTopRightRadius" to "30rpx", "borderBottomRightRadius" to "30rpx", "borderBottomLeftRadius" to "30rpx", "fontSize" to "22rpx", "backgroundColor" to "rgba(33,150,243,0.8)", "color" to "#ffffff", "fontWeight" to "normal", "borderTopWidth" to "2rpx", "borderRightWidth" to "2rpx", "borderBottomWidth" to "2rpx", "borderLeftWidth" to "2rpx", "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "rgba(255,255,255,0.3)", "borderRightColor" to "rgba(255,255,255,0.3)", "borderBottomColor" to "rgba(255,255,255,0.3)", "borderLeftColor" to "rgba(255,255,255,0.3)", "textAlign" to "center")), "loading-container" to _pS(_uM("display" to "flex", "flexDirection" to "column", "alignItems" to "center", "justifyContent" to "center", "height" to "80%")), "loading-text" to _pS(_uM("fontSize" to "28rpx", "color" to "#666666")), "error-container" to _pS(_uM("display" to "flex", "flexDirection" to "column", "alignItems" to "center", "justifyContent" to "center", "height" to "80%")), "error-text" to _pS(_uM("fontSize" to "28rpx", "color" to "#f44336", "marginBottom" to "20rpx")), "retry-button" to _pS(_uM("paddingTop" to "20rpx", "paddingRight" to "40rpx", "paddingBottom" to "20rpx", "paddingLeft" to "40rpx", "fontSize" to "28rpx", "backgroundColor" to "#2196f3", "color" to "#FFFFFF", "borderTopLeftRadius" to "10rpx", "borderTopRightRadius" to "10rpx", "borderBottomRightRadius" to "10rpx", "borderBottomLeftRadius" to "10rpx")), "profile-content" to _pS(_uM("paddingTop" to "20rpx", "paddingRight" to "20rpx", "paddingBottom" to "20rpx", "paddingLeft" to "20rpx", "backgroundColor" to "#FFFFFF", "borderTopLeftRadius" to "20rpx", "borderTopRightRadius" to "20rpx", "borderBottomRightRadius" to "20rpx", "borderBottomLeftRadius" to "20rpx")), "avatar-section" to _pS(_uM("display" to "flex", "justifyContent" to "center", "marginBottom" to "40rpx")), "avatar" to _pS(_uM("width" to "140rpx", "height" to "140rpx", "borderTopLeftRadius" to "70rpx", "borderTopRightRadius" to "70rpx", "borderBottomRightRadius" to "70rpx", "borderBottomLeftRadius" to "70rpx", "backgroundColor" to "#eeeeee")), "input-group" to _pS(_uM("marginBottom" to "30rpx")), "input-label" to _pS(_uM("fontSize" to "28rpx", "marginBottom" to "10rpx", "fontWeight" to "normal", "color" to "#333333", "display" to "flex")), "input-field" to _uM("" to _uM("width" to "100%", "height" to "80rpx", "paddingTop" to 0, "paddingRight" to "20rpx", "paddingBottom" to 0, "paddingLeft" to "20rpx", "fontSize" to "28rpx", "borderTopLeftRadius" to "10rpx", "borderTopRightRadius" to "10rpx", "borderBottomRightRadius" to "10rpx", "borderBottomLeftRadius" to "10rpx", "borderTopWidth" to "2rpx", "borderRightWidth" to "2rpx", "borderBottomWidth" to "2rpx", "borderLeftWidth" to "2rpx", "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#dddddd", "borderRightColor" to "#dddddd", "borderBottomColor" to "#dddddd", "borderLeftColor" to "#dddddd", "backgroundColor" to "#ffffff", "boxSizing" to "border-box"), ".readonly" to _uM("backgroundColor" to "#f5f5f5", "color" to "#999999")), "hint-text" to _pS(_uM("fontSize" to "24rpx", "marginTop" to "6rpx", "color" to "#999999")), "picker-field" to _pS(_uM("width" to "100%", "height" to "80rpx", "paddingTop" to 0, "paddingRight" to "20rpx", "paddingBottom" to 0, "paddingLeft" to "20rpx", "fontSize" to "28rpx", "borderTopLeftRadius" to "10rpx", "borderTopRightRadius" to "10rpx", "borderBottomRightRadius" to "10rpx", "borderBottomLeftRadius" to "10rpx", "borderTopWidth" to "2rpx", "borderRightWidth" to "2rpx", "borderBottomWidth" to "2rpx", "borderLeftWidth" to "2rpx", "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#dddddd", "borderRightColor" to "#dddddd", "borderBottomColor" to "#dddddd", "borderLeftColor" to "#dddddd", "backgroundColor" to "#ffffff", "display" to "flex", "flexDirection" to "row", "alignItems" to "center", "justifyContent" to "space-between", "boxSizing" to "border-box")), "picker-arrow" to _pS(_uM("color" to "#999999", "fontSize" to "24rpx")), "textarea-field" to _pS(_uM("width" to "100%", "height" to "200rpx", "paddingTop" to "20rpx", "paddingRight" to "20rpx", "paddingBottom" to "20rpx", "paddingLeft" to "20rpx", "fontSize" to "28rpx", "borderTopLeftRadius" to "10rpx", "borderTopRightRadius" to "10rpx", "borderBottomRightRadius" to "10rpx", "borderBottomLeftRadius" to "10rpx", "borderTopWidth" to "2rpx", "borderRightWidth" to "2rpx", "borderBottomWidth" to "2rpx", "borderLeftWidth" to "2rpx", "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#dddddd", "borderRightColor" to "#dddddd", "borderBottomColor" to "#dddddd", "borderLeftColor" to "#dddddd", "backgroundColor" to "#ffffff", "boxSizing" to "border-box")), "save-button" to _pS(_uM("width" to "100%", "height" to "90rpx", "fontSize" to "32rpx", "marginTop" to "20rpx", "marginRight" to 0, "marginBottom" to "20rpx", "marginLeft" to 0, "borderTopLeftRadius" to "45rpx", "borderTopRightRadius" to "45rpx", "borderBottomRightRadius" to "45rpx", "borderBottomLeftRadius" to "45rpx", "backgroundImage" to "linear-gradient(to right, #2196f3, #03a9f4)", "color" to "#ffffff", "fontWeight" to "normal", "textAlign" to "center", "backgroundImage:disabled" to "none", "backgroundColor:disabled" to "#cccccc")), "success-message" to _pS(_uM("paddingTop" to "20rpx", "paddingRight" to "20rpx", "paddingBottom" to "20rpx", "paddingLeft" to "20rpx", "marginBottom" to "20rpx", "backgroundColor" to "#e8f5e9", "borderTopLeftRadius" to "10rpx", "borderTopRightRadius" to "10rpx", "borderBottomRightRadius" to "10rpx", "borderBottomLeftRadius" to "10rpx")), "success-text" to _pS(_uM("color" to "#43a047", "fontSize" to "28rpx", "textAlign" to "center")), "error-message" to _pS(_uM("paddingTop" to "20rpx", "paddingRight" to "20rpx", "paddingBottom" to "20rpx", "paddingLeft" to "20rpx", "marginBottom" to "20rpx", "backgroundColor" to "#ffebee", "borderTopLeftRadius" to "10rpx", "borderTopRightRadius" to "10rpx", "borderBottomRightRadius" to "10rpx", "borderBottomLeftRadius" to "10rpx")), "picker-modal" to _pS(_uM("position" to "fixed", "left" to 0, "right" to 0, "bottom" to 0, "backgroundImage" to "none", "backgroundColor" to "#ffffff", "zIndex" to 1000, "paddingBottom" to "30rpx", "borderTopLeftRadius" to "20rpx", "borderTopRightRadius" to "20rpx", "display" to "flex", "flexDirection" to "column", "alignItems" to "center")), "picker-view" to _pS(_uM("width" to "750rpx", "height" to 320, "backgroundImage" to "none", "backgroundColor" to "#ffffff")), "picker-item" to _pS(_uM("height" to 50, "display" to "flex", "alignItems" to "center", "justifyContent" to "center", "width" to "750rpx")), "picker-actions" to _pS(_uM("display" to "flex", "justifyContent" to "space-between", "width" to "750rpx", "paddingTop" to "20rpx", "paddingRight" to "40rpx", "paddingBottom" to 0, "paddingLeft" to "40rpx", "boxSizing" to "border-box")), "picker-actions-button" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "marginTop" to 0, "marginRight" to "10rpx", "marginBottom" to 0, "marginLeft" to "10rpx", "backgroundImage" to "none", "backgroundColor" to "#2196f3", "color" to "#ffffff", "borderTopLeftRadius" to "10rpx", "borderTopRightRadius" to "10rpx", "borderBottomRightRadius" to "10rpx", "borderBottomLeftRadius" to "10rpx", "fontSize" to "28rpx", "height" to "80rpx"))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/user/register.kt b/unpackage/cache/.app-android/src/pages/user/register.kt deleted file mode 100644 index 420a380d..00000000 --- a/unpackage/cache/.app-android/src/pages/user/register.kt +++ /dev/null @@ -1,302 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.navigateTo as uni_navigateTo -import io.dcloud.uniapp.extapi.redirectTo as uni_redirectTo -import io.dcloud.uniapp.extapi.showToast as uni_showToast -open class GenPagesUserRegister : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - companion object { - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - var setup: (__props: GenPagesUserRegister) -> Any? = fun(__props): Any? { - val __ins = getCurrentInstance()!! - val _ctx = __ins.proxy as GenPagesUserRegister - val _cache = __ins.renderCache - val email = ref("") - val password = ref("") - val confirmPassword = ref("") - val protocol = ref(false) - val inAnimation = ref(false) - val isLoading = ref(false) - val logoUrl = ref("/static/logo.png") - val handleProtocolChange = fun(e: UniCheckboxGroupChangeEvent): Unit { - protocol.value = protocol.value == false - } - val validateEmail = fun(): Boolean { - if (email.value.trim() == "") { - uni_showToast(ShowToastOptions(title = "请填写邮箱", icon = "none")) - return false - } - val atIndex = email.value.indexOf("@") - val dotIndex = email.value.lastIndexOf(".") - if (atIndex == -1 || dotIndex == -1 || atIndex > dotIndex) { - uni_showToast(ShowToastOptions(title = "请输入正确的邮箱", icon = "none")) - return false - } - return true - } - val validatePassword = fun(): Boolean { - if (password.value.trim() == "") { - uni_showToast(ShowToastOptions(title = "请填写密码", icon = "none")) - return false - } - if (password.value.length < 6) { - uni_showToast(ShowToastOptions(title = "密码长度不能少于6位", icon = "none")) - return false - } - return true - } - val validateConfirmPassword = fun(): Boolean { - if (confirmPassword.value.trim() == "") { - uni_showToast(ShowToastOptions(title = "请确认密码", icon = "none")) - return false - } - if (confirmPassword.value != password.value) { - uni_showToast(ShowToastOptions(title = "两次输入的密码不一致", icon = "none")) - return false - } - return true - } - val handleRegister = fun(): UTSPromise { - return wrapUTSPromise(suspend w1@{ - if (protocol.value == false) { - inAnimation.value = true - uni_showToast(ShowToastOptions(title = "请先阅读并同意协议", icon = "none")) - return@w1 - } - if (validateEmail() == false) { - return@w1 - } - if (validatePassword() == false) { - return@w1 - } - if (validateConfirmPassword() == false) { - return@w1 - } - isLoading.value = true - try { - val result = await(supaInstance.signUp(email.value.trim(), password.value)) - console.log("注册返回结果:", result, " at pages/user/register.uvue:188") - val errorCode = result?.getString("error_code") ?: "" - val errorMsg = result?.getString("msg") ?: "" - val code = result?.getNumber("code") ?: 0 - console.log("错误代码:", errorCode, "错误信息:", errorMsg, "状态码:", code, " at pages/user/register.uvue:194") - if (code == 500 && (errorCode == "unexpected_failure" || errorMsg.includes("confirmation email"))) { - console.warn("邮件发送失败,但用户可能已创建", " at pages/user/register.uvue:197") - } - var user: UTSJSONObject? = null - var hasSession = false - if (result != null) { - val userField = result.getJSON("user") - if (userField != null) { - user = userField - console.log("找到 user 字段:", user.getString("id"), user.getString("email"), " at pages/user/register.uvue:207") - } else { - val id = result.getString("id") - if (id != null && id != "") { - user = result - console.log("result 本身就是 user 对象:", id, " at pages/user/register.uvue:212") - } else { - console.warn("未找到 user 信息", " at pages/user/register.uvue:214") - } - } - val sessionField = result.getJSON("session") - if (sessionField != null) { - hasSession = true - console.log("找到 session,已自动登录", " at pages/user/register.uvue:221") - } else { - console.log("未找到 session,可能需要邮箱验证", " at pages/user/register.uvue:223") - } - } - if (user == null && code != 0 && code != 200) { - if (code == 500 && errorMsg.includes("confirmation email")) { - throw UTSError("注册失败:邮件服务配置错误") - } else { - throw UTSError(if (errorMsg != "") { - errorMsg - } else { - "注册失败,请重试" - } - ) - } - } - if (user != null) { - try { - val profileResult = await(ensureUserProfile(user)) - if (profileResult != null) { - console.log("用户资料创建成功:", profileResult.id, " at pages/user/register.uvue:239") - } else { - console.warn("用户资料创建失败,但注册已成功", " at pages/user/register.uvue:241") - } - } catch (profileError: Throwable) { - console.error("创建用户资料异常:", profileError, " at pages/user/register.uvue:244") - } - } else { - console.warn("注册成功但未获取到用户信息", " at pages/user/register.uvue:247") - } - if (hasSession == false && user != null) { - console.log("需要邮箱验证", " at pages/user/register.uvue:251") - } - uni_showToast(ShowToastOptions(title = "注册成功", icon = "success")) - setTimeout(fun(){ - uni_redirectTo(RedirectToOptions(url = "/pages/user/login")) - } - , 1500) - } - catch (err: Throwable) { - console.error("注册错误:", err, " at pages/user/register.uvue:265") - var errorMessage = "注册失败,请重试" - if (err != null) { - val error = err as UTSError - if (error.message != null && error.message.trim() != "") { - errorMessage = error.message - if (error.message.includes("confirmation email") || error.message.includes("邮件")) { - errorMessage = "注册可能成功,但邮件发送失败,请稍后尝试登录" - } - } - } - uni_showToast(ShowToastOptions(title = errorMessage, icon = "none", duration = 3000)) - } - finally { - isLoading.value = false - } - }) - } - val navigateToLogin = fun(): Unit { - uni_navigateTo(NavigateToOptions(url = "/pages/user/login")) - } - val navigateToTerms = fun(type: Number): Unit { - uni_navigateTo(NavigateToOptions(url = "/pages/user/terms?type=" + type)) - } - return fun(): Any? { - val _component_checkbox = resolveComponent("checkbox") - val _component_checkbox_group = resolveComponent("checkbox-group") - return _cE("view", _uM("class" to "register-wrapper"), _uA( - _cE("view", _uM("class" to "header"), _uA( - _cE("image", _uM("src" to logoUrl.value, "mode" to "aspectFit", "class" to "logo"), null, 8, _uA( - "src" - )) - )), - _cE("view", _uM("class" to "register-box"), _uA( - _cE("view", _uM("class" to "title"), "注册账号"), - _cE("view", _uM("class" to "form-content"), _uA( - _cE("view", _uM("class" to "input-group"), _uA( - _cE("view", _uM("class" to "input-wrapper"), _uA( - _cE("image", _uM("src" to "/static/user/phone_1.png", "class" to "input-icon")), - _cE("input", _uM("type" to "text", "placeholder" to "输入邮箱", "modelValue" to email.value, "onInput" to fun(`$event`: UniInputEvent){ - email.value = `$event`.detail.value - } - , "class" to "input-field"), null, 40, _uA( - "modelValue", - "onInput" - )) - )) - )), - _cE("view", _uM("class" to "input-group"), _uA( - _cE("view", _uM("class" to "input-wrapper"), _uA( - _cE("image", _uM("src" to "/static/user/code_1.png", "class" to "input-icon")), - _cE("input", _uM("type" to "password", "placeholder" to "填写密码", "modelValue" to password.value, "onInput" to fun(`$event`: UniInputEvent){ - password.value = `$event`.detail.value - } - , "class" to "input-field"), null, 40, _uA( - "modelValue", - "onInput" - )) - )) - )), - _cE("view", _uM("class" to "input-group"), _uA( - _cE("view", _uM("class" to "input-wrapper"), _uA( - _cE("image", _uM("src" to "/static/user/code_1.png", "class" to "input-icon")), - _cE("input", _uM("type" to "password", "placeholder" to "确认密码", "modelValue" to confirmPassword.value, "onInput" to fun(`$event`: UniInputEvent){ - confirmPassword.value = `$event`.detail.value - } - , "class" to "input-field"), null, 40, _uA( - "modelValue", - "onInput" - )) - )) - )) - )), - _cE("view", _uM("class" to _nC(_uA( - "register-btn", - if (isLoading.value) { - "disabled" - } else { - "" - } - )), "onClick" to handleRegister), " 注册 ", 2), - _cE("view", _uM("class" to "tips"), _uA( - _cE("text", _uM("class" to "tips-text"), "已有账号?"), - _cE("text", _uM("class" to "tips-link", "onClick" to navigateToLogin), "立即登录") - )), - _cE("view", _uM("class" to "protocol"), _uA( - _cV(_component_checkbox_group, _uM("onChange" to handleProtocolChange), _uM("default" to withSlotCtx(fun(): UTSArray { - return _uA( - _cV(_component_checkbox, _uM("class" to _nC(_uA( - "protocol-checkbox", - if (inAnimation.value) { - "trembling" - } else { - "" - } - )), "checked" to protocol.value), null, 8, _uA( - "checked", - "class" - )), - _cE("text", _uM("class" to "protocol-text"), _uA( - " 已阅读并同意 ", - _cE("text", _uM("class" to "main-color", "onClick" to fun(){ - navigateToTerms(3) - } - ), "《用户协议》", 8, _uA( - "onClick" - )), - " 与 ", - _cE("text", _uM("class" to "main-color", "onClick" to fun(){ - navigateToTerms(4) - } - ), "《隐私协议》", 8, _uA( - "onClick" - )) - )) - ) - } - ), "_" to 1)) - )) - )), - _cE("view", _uM("class" to "footer"), _uA( - _cE("text", _uM("class" to "footer-text"), "Copyright ©2024 Mall. All Rights Reserved") - )) - )) - } - } - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("register-wrapper" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "display" to "flex", "flexDirection" to "column", "backgroundImage" to "none", "backgroundColor" to "#F5F5F5")), "header" to _pS(_uM("paddingTop" to "40rpx", "paddingRight" to 0, "paddingBottom" to 0, "paddingLeft" to "60rpx", "backgroundImage" to "none", "backgroundColor" to "#F5F5F5")), "logo" to _pS(_uM("width" to "200rpx", "height" to "80rpx")), "register-box" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "backgroundImage" to "none", "backgroundColor" to "#FFFFFF", "marginTop" to "60rpx", "marginRight" to "40rpx", "marginBottom" to 0, "marginLeft" to "40rpx", "borderTopLeftRadius" to "8rpx", "borderTopRightRadius" to "8rpx", "borderBottomRightRadius" to "8rpx", "borderBottomLeftRadius" to "8rpx", "paddingTop" to "60rpx", "paddingRight" to "50rpx", "paddingBottom" to "40rpx", "paddingLeft" to "50rpx", "boxShadow" to "0 2rpx 8rpx rgba(0, 0, 0, 0.08)")), "title" to _pS(_uM("fontSize" to "40rpx", "fontWeight" to "700", "color" to "#333333", "textAlign" to "center", "marginBottom" to "50rpx")), "form-content" to _pS(_uM("marginBottom" to "40rpx")), "input-group" to _pS(_uM("marginBottom" to "30rpx")), "input-wrapper" to _pS(_uM("position" to "relative", "display" to "flex", "alignItems" to "center", "paddingTop" to 0, "paddingRight" to "20rpx", "paddingBottom" to 0, "paddingLeft" to "20rpx", "height" to "88rpx", "borderTopWidth" to "1rpx", "borderRightWidth" to "1rpx", "borderBottomWidth" to "1rpx", "borderLeftWidth" to "1rpx", "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "#E0E0E0", "borderRightColor" to "#E0E0E0", "borderBottomColor" to "#E0E0E0", "borderLeftColor" to "#E0E0E0", "borderTopLeftRadius" to "4rpx", "borderTopRightRadius" to "4rpx", "borderBottomRightRadius" to "4rpx", "borderBottomLeftRadius" to "4rpx", "backgroundImage" to "none", "backgroundColor" to "#FFFFFF")), "input-icon" to _pS(_uM("width" to "32rpx", "height" to "32rpx", "flexShrink" to 0, "marginRight" to "20rpx")), "input-field" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "fontSize" to "28rpx", "height" to "100%", "color" to "#333333")), "register-btn" to _uM("" to _uM("display" to "flex", "alignItems" to "center", "justifyContent" to "center", "width" to "100%", "height" to "88rpx", "marginTop" to "50rpx", "backgroundImage" to "linear-gradient(135deg, #FF4D4F 0%, #FF7A45 100%)", "backgroundColor" to "rgba(0,0,0,0)", "borderTopLeftRadius" to "4rpx", "borderTopRightRadius" to "4rpx", "borderBottomRightRadius" to "4rpx", "borderBottomLeftRadius" to "4rpx", "color" to "#FFFFFF", "fontSize" to "32rpx", "fontWeight" to "700", "boxShadow" to "0 4rpx 12rpx rgba(255, 77, 79, 0.3)"), ".disabled" to _uM("backgroundImage" to "none", "backgroundColor" to "#D9D9D9", "boxShadow" to "none", "opacity" to 0.6)), "tips" to _pS(_uM("marginTop" to "30rpx", "textAlign" to "center")), "tips-text" to _pS(_uM("fontSize" to "28rpx", "color" to "#666666")), "tips-link" to _pS(_uM("fontSize" to "28rpx", "color" to "#FF4D4F", "marginLeft" to "8rpx")), "protocol" to _pS(_uM("marginTop" to "40rpx", "display" to "flex", "alignItems" to "center", "justifyContent" to "center")), "protocol-checkbox" to _pS(_uM("marginRight" to "10rpx")), "protocol-text" to _pS(_uM("fontSize" to "24rpx", "color" to "#999999")), "main-color" to _pS(_uM("color" to "#FF4D4F")), "footer" to _pS(_uM("paddingTop" to "40rpx", "paddingRight" to 0, "paddingBottom" to "40rpx", "paddingLeft" to 0, "textAlign" to "center", "backgroundImage" to "none", "backgroundColor" to "#F5F5F5")), "footer-text" to _pS(_uM("fontSize" to "22rpx", "color" to "#999999"))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/src/pages/user/terms.kt b/unpackage/cache/.app-android/src/pages/user/terms.kt deleted file mode 100644 index 2468f323..00000000 --- a/unpackage/cache/.app-android/src/pages/user/terms.kt +++ /dev/null @@ -1,73 +0,0 @@ -@file:Suppress("UNCHECKED_CAST", "USELESS_CAST", "INAPPLICABLE_JVM_NAME", "UNUSED_ANONYMOUS_PARAMETER", "NAME_SHADOWING", "UNNECESSARY_NOT_NULL_ASSERTION") -package uni.UNIEC68BC3 -import io.dcloud.uniapp.* -import io.dcloud.uniapp.extapi.* -import io.dcloud.uniapp.framework.* -import io.dcloud.uniapp.runtime.* -import io.dcloud.uniapp.vue.* -import io.dcloud.uniapp.vue.shared.* -import io.dcloud.unicloud.* -import io.dcloud.uts.* -import io.dcloud.uts.Map -import io.dcloud.uts.Set -import io.dcloud.uts.UTSAndroid -import kotlin.properties.Delegates -import io.dcloud.uniapp.extapi.navigateBack as uni_navigateBack -open class GenPagesUserTerms : BasePage { - constructor(__ins: ComponentInternalInstance, __renderer: String?) : super(__ins, __renderer) {} - @Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE") - override fun `$render`(): Any? { - val _ctx = this - val _cache = this.`$`.renderCache - return _cE("view", _uM("class" to "page"), _uA( - _cE("view", _uM("class" to "topbar"), _uA( - _cE("text", _uM("class" to "back", "onClick" to _ctx.goBack), "返回", 8, _uA( - "onClick" - )), - _cE("text", _uM("class" to "title"), "用户协议与隐私政策"), - _cE("text", _uM("class" to "ghost")) - )), - _cE("scroll-view", _uM("class" to "content", "scroll-y" to "true", "show-scrollbar" to "false"), _uA( - _cE("view", _uM("class" to "card"), _uA( - _cE("text", _uM("class" to "h1"), "用户协议"), - _cE("text", _uM("class" to "p"), "1. 本应用为商城系统示例/项目使用。 "), - _cE("text", _uM("class" to "p"), "2. 你在使用本应用服务时,应遵守法律法规与平台规则。 "), - _cE("text", _uM("class" to "p"), "3. 账号与密码由你自行保管,因泄露造成的损失由你自行承担。 "), - _cE("view", _uM("class" to "divider")), - _cE("text", _uM("class" to "h1"), "隐私政策"), - _cE("text", _uM("class" to "p"), "1. 我们可能会收集你提供的邮箱等信息,用于账号注册与登录。 "), - _cE("text", _uM("class" to "p"), "2. 我们会采取合理的安全措施保护你的信息安全。 "), - _cE("text", _uM("class" to "p"), "3. 你可以在账号相关页面申请修改或删除个人信息(以实际功能为准)。 ") - )), - _cE("view", _uM("class" to "footer"), _uA( - _cE("button", _uM("class" to "primary", "onClick" to _ctx.goBack), "我已阅读并同意", 8, _uA( - "onClick" - )) - )) - )) - )) - } - open var goBack = ::gen_goBack_fn - open fun gen_goBack_fn() { - uni_navigateBack(null) - } - companion object { - val styles: Map>> by lazy { - _nCS(_uA( - styles0 - ), _uA( - GenApp.styles - )) - } - val styles0: Map>> - get() { - return _uM("page" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "backgroundImage" to "none", "backgroundColor" to "#f7f8fa", "display" to "flex", "flexDirection" to "column")), "topbar" to _pS(_uM("height" to "96rpx", "paddingTop" to 0, "paddingRight" to "24rpx", "paddingBottom" to 0, "paddingLeft" to "24rpx", "backgroundImage" to "none", "backgroundColor" to "rgba(255,255,255,0.96)", "borderBottomWidth" to "1rpx", "borderBottomStyle" to "solid", "borderBottomColor" to "rgba(0,0,0,0.06)", "display" to "flex", "alignItems" to "center", "justifyContent" to "space-between")), "back" to _pS(_uM("fontSize" to "26rpx", "color" to "#ff4d4f", "width" to "120rpx")), "title" to _pS(_uM("fontSize" to "30rpx", "fontWeight" to "700", "color" to "#111111")), "ghost" to _pS(_uM("width" to "120rpx")), "content" to _pS(_uM("flexGrow" to 1, "flexShrink" to 1, "flexBasis" to "0%", "paddingTop" to "18rpx", "paddingRight" to "24rpx", "paddingBottom" to "24rpx", "paddingLeft" to "24rpx", "boxSizing" to "border-box")), "card" to _pS(_uM("backgroundImage" to "none", "backgroundColor" to "rgba(255,255,255,0.96)", "borderTopWidth" to "1rpx", "borderRightWidth" to "1rpx", "borderBottomWidth" to "1rpx", "borderLeftWidth" to "1rpx", "borderTopStyle" to "solid", "borderRightStyle" to "solid", "borderBottomStyle" to "solid", "borderLeftStyle" to "solid", "borderTopColor" to "rgba(0,0,0,0.06)", "borderRightColor" to "rgba(0,0,0,0.06)", "borderBottomColor" to "rgba(0,0,0,0.06)", "borderLeftColor" to "rgba(0,0,0,0.06)", "borderTopLeftRadius" to "20rpx", "borderTopRightRadius" to "20rpx", "borderBottomRightRadius" to "20rpx", "borderBottomLeftRadius" to "20rpx", "paddingTop" to "24rpx", "paddingRight" to "22rpx", "paddingBottom" to "24rpx", "paddingLeft" to "22rpx", "boxShadow" to "0 16rpx 36rpx rgba(0, 0, 0, 0.06)")), "h1" to _pS(_uM("fontSize" to "32rpx", "fontWeight" to "700", "color" to "#111111", "marginBottom" to "12rpx")), "p" to _pS(_uM("fontSize" to "26rpx", "color" to "rgba(0,0,0,0.65)", "lineHeight" to "44rpx", "marginBottom" to "12rpx")), "divider" to _pS(_uM("height" to "1rpx", "backgroundImage" to "none", "backgroundColor" to "rgba(0,0,0,0.08)", "marginTop" to "18rpx", "marginRight" to 0, "marginBottom" to "18rpx", "marginLeft" to 0)), "footer" to _pS(_uM("marginTop" to "18rpx")), "primary" to _pS(_uM("width" to "100%", "height" to "92rpx", "borderTopLeftRadius" to "18rpx", "borderTopRightRadius" to "18rpx", "borderBottomRightRadius" to "18rpx", "borderBottomLeftRadius" to "18rpx", "backgroundImage" to "linear-gradient(135deg, #ff4d4f 0%, #ff7a45 100%)", "backgroundColor" to "rgba(0,0,0,0)", "color" to "#ffffff", "fontSize" to "30rpx", "fontWeight" to "700", "boxShadow" to "0 16rpx 32rpx rgba(255, 77, 79, 0.24)"))) - } - var inheritAttrs = true - var inject: Map> = _uM() - var emits: Map = _uM() - var props = _nP(_uM()) - var propsNeedCastKeys: UTSArray = _uA() - var components: Map = _uM() - } -} diff --git a/unpackage/cache/.app-android/tsc/app-android/.tsbuildInfo b/unpackage/cache/.app-android/tsc/app-android/.tsbuildInfo deleted file mode 100644 index 068c528d..00000000 --- a/unpackage/cache/.app-android/tsc/app-android/.tsbuildInfo +++ /dev/null @@ -1 +0,0 @@ -{"program":{"fileNames":["../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uts-types/common/array.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uts-types/common/boolean.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uts-types/common/console.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uts-types/common/date.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uts-types/common/error.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uts-types/common/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uts-types/common/json.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uts-types/common/map.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uts-types/common/math.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uts-types/common/number.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uts-types/common/regexp.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uts-types/common/set.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uts-types/common/string.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uts-types/common/timers.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uts-types/common/utsjsonobject.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uts-types/common/arraybuffer.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uts-types/common/float32array.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uts-types/common/float64array.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uts-types/common/int8array.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uts-types/common/int16array.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uts-types/common/int32array.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uts-types/common/uint8array.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uts-types/common/uint8clampedarray.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uts-types/common/uint16array.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uts-types/common/uint32array.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uts-types/common/dataview.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uts-types/common/iterable.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uts-types/common/common.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uniapp-uts-v1/node_modules/@dcloudio/uni-uts-v1/lib/uts/types/uts/shims/shims.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uniapp-uts-v1/node_modules/@dcloudio/uni-uts-v1/lib/uts/types/uts/shims/lib.es5.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uniapp-uts-v1/node_modules/@dcloudio/uni-uts-v1/lib/uts/types/uts/shims/lib.es2015.collection.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uniapp-uts-v1/node_modules/@dcloudio/uni-uts-v1/lib/uts/types/uts/shims/lib.es2015.promise.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uniapp-uts-v1/node_modules/@dcloudio/uni-uts-v1/lib/uts/types/uts/shims/lib.es2015.symbol.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uniapp-uts-v1/node_modules/@dcloudio/uni-uts-v1/lib/uts/types/uts/shims/lib.es2015.symbol.wellknown.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uniapp-uts-v1/node_modules/@dcloudio/uni-uts-v1/lib/uts/types/uts/shims/lib.es2015.iterable.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uniapp-uts-v1/node_modules/@dcloudio/uni-uts-v1/lib/uts/types/uts/shims/lib.es2018.asynciterable.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uniapp-uts-v1/node_modules/@dcloudio/uni-uts-v1/lib/uts/types/uts/shims/lib.es2018.asyncgenerator.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uniapp-uts-v1/node_modules/@dcloudio/uni-uts-v1/lib/uts/types/uts/shims/lib.es2018.promise.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uniapp-uts-v1/node_modules/@dcloudio/uni-uts-v1/lib/uts/types/uts/shims/lib.es2020.symbol.wellknown.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uniapp-uts-v1/node_modules/@dcloudio/uni-uts-v1/lib/uts/types/uts/shims/index.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uniapp-uts-v1/node_modules/@dcloudio/uni-uts-v1/lib/uts/types/uts/index.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uniapp-uts-v1/node_modules/@dcloudio/uni-uts-v1/lib/uts/types/uni-x/hbuilder-x/hbuilderx.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uniapp-uts-v1/node_modules/@dcloudio/uni-uts-v1/lib/uts/types/uni-x/hbuilder-x/index.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uniapp-uts-v1/node_modules/@dcloudio/uni-uts-v1/lib/uts/types/uni-x/@vue/shared/dist/shared.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uniapp-uts-v1/node_modules/@dcloudio/uni-uts-v1/lib/uts/types/uni-x/@vue/reactivity/dist/reactivity.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uniapp-uts-v1/node_modules/@dcloudio/uni-uts-v1/lib/uts/types/uni-x/@vue/runtime-core/dist/runtime-core.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uniapp-uts-v1/node_modules/@dcloudio/uni-uts-v1/lib/uts/types/uni-x/@vue/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uniapp-uts-v1/node_modules/@dcloudio/uni-uts-v1/lib/uts/types/uni-x/vue.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uniapp-uts-v1/node_modules/@dcloudio/uni-uts-v1/lib/uts/types/uni-x/shims/common.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uniapp-uts-v1/node_modules/@dcloudio/uni-uts-v1/lib/uts/types/uni-x/shims/app-android.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/io/filedescriptor.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/os/ibinder.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/os/iinterface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/util/sparsearray.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/util/sparsebooleanarray.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/util/arraymap.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/util/size.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/io/closeable.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/io/flushable.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/io/outputstream.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/io/inputstream.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/os/basebundle.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/os/persistablebundle.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/util/sizef.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/io/serializable.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/os/bundle.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/os/parcel.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/os/parcelable.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/clipdescription.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/icu/util/ulocale.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/os/localelist.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/blendmode.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/media/audioattributes.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/os/vibrationattributes.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/os/vibrationeffect.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/os/vibrator.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/os/combinedvibration.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/os/vibratormanager.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/keyevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/util/androidruntimeexception.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/keycharactermap.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/hardware/lights/lightstate.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/hardware/lights/light.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/hardware/lights/lightsrequest.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/hardware/lights/lightsmanager.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/hardware/batterystate.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/hardware/hardwarebuffer.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/os/memoryfile.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/hardware/sensor.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/hardware/triggerevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/hardware/triggereventlistener.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/hardware/sensorlistener.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/channels/channel.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/hardware/sensordirectchannel.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/hardware/sensorevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/hardware/sensoreventlistener.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/util/printer.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/os/messenger.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/os/message.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/os/messagequeue.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/os/looper.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/os/handler.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/hardware/sensormanager.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/inputdevice.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/inputevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/insets.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/rect.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/rectf.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/io/writer.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/net/socketaddress.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/net/proxy.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/net/url.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/net/uri.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/file/watchable.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/file/watchkey.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/file/watchservice.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/file/linkoption.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/security/privilegedexceptionaction.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/security/privilegedaction.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/security/provider.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/security/key.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/security/publickey.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/security/cert/certificate.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/security/cert/certpath.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/security/timestamp.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/security/codesigner.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/security/codesource.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/security/guard.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/security/permission.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/security/permissioncollection.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/security/protectiondomain.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/security/domaincombiner.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/security/accesscontrolcontext.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/javax/security/auth/subject.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/security/principal.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/file/attribute/userprincipal.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/file/attribute/groupprincipal.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/file/attribute/userprincipallookupservice.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/file/pathmatcher.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/buffer.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/byteorder.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/doublebuffer.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/shortbuffer.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/charbuffer.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/intbuffer.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/floatbuffer.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/longbuffer.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/bytebuffer.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/mappedbytebuffer.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/channels/writablebytechannel.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/channels/gatheringbytechannel.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/file/openoption.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/channels/readablebytechannel.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/channels/scatteringbytechannel.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/channels/bytechannel.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/channels/seekablebytechannel.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/file/attribute/fileattribute.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/channels/interruptiblechannel.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/channels/spi/abstractinterruptiblechannel.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/channels/completionhandler.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/channels/asynchronouschannel.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/channels/asynchronousfilechannel.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/channels/filelock.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/channels/filechannel.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/file/filestore.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/file/accessmode.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/file/copyoption.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/file/directorystream.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/file/spi/filesystemprovider.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/file/filesystem.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/file/path.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/io/file.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/io/printwriter.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/matrix.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/motionevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/temporal/temporal.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/temporal/temporalunit.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/temporal/temporalamount.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/duration.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/path.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/region.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/accessibility/accessibilitywindowinfo.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/accessibility/accessibilitynodeinfo.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/autofill/autofillid.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/componentname.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/credentials/credentialoption.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/credentials/getcredentialrequest.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/os/outcomereceiver.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/autofill/autofillvalue.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/viewstructure.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/locusid.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/contentcapture/contentcapturecontext.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/contentcapture/contentcapturesession.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/util/longsparsearray.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/util/property.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/util/attributeset.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/animation/transformation.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/animation/timeinterpolator.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/animation/interpolator.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/animation/animation.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/animation/animator.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/animation/statelistanimator.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/io/fileinputstream.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/io/fileoutputstream.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/io/ioexception.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/net/networkinterface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/net/inetaddress.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/net/datagrampacket.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/net/socketoption.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/channels/pipe.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/channels/networkchannel.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/net/socket.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/channels/socketchannel.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/net/socketoptions.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/net/socketimpl.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/net/socketimplfactory.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/net/serversocket.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/channels/serversocketchannel.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/net/protocolfamily.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/channels/selector.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/channels/selectionkey.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/channels/spi/abstractselectionkey.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/channels/spi/abstractselector.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/channels/spi/selectorprovider.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/channels/selectablechannel.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/channels/spi/abstractselectablechannel.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/channels/membershipkey.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/channels/multicastchannel.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/nio/channels/datagramchannel.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/net/datagramsocket.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/os/parcelfiledescriptor.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/res/assetfiledescriptor.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/res/xmlresourceparser.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/res/assetmanager.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/xfermode.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/shader.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/patheffect.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/maskfilter.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/colorfilter.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/paint.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/fonts/font.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/fonts/fontfamily.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/fonts/fontvariationaxis.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/fonts/fontstyle.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/typeface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/util/displaymetrics.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/util/typedvalue.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/res/colorstatelist.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/res/typedarray.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/pm/changedpackages.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/pm/moduleinfo.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/res/configuration.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/os/userhandle.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/util/androidexception.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/intentsender.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/pm/permissioninfo.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/pm/componentinfo.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/pm/serviceinfo.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/pm/attribution.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/pm/featureinfo.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/pm/featuregroupinfo.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/pm/signature.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/pm/signinginfo.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/pm/instrumentationinfo.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/pm/activityinfo.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/os/patternmatcher.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/pm/pathpermission.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/pm/providerinfo.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/pm/configurationinfo.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/pm/packageinfo.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/pm/permissiongroupinfo.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/pm/versionedpackage.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/attributionsource.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/net/uri.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/database/contentobserver.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/database/chararraybuffer.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/database/datasetobserver.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/database/cursor.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/contentvalues.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/os/cancellationsignal.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/componentcallbacks.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/componentcallbacks2.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/contentprovider.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/colorspace.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/drawfilter.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/ninepatch.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/color.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/mesh.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/gainmap.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/bitmapshader.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/runtimeshader.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/rendereffect.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/text/linebreakconfig.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/text/measuredtext.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/recordingcanvas.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/outline.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/rendernode.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/matrix44.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/canvas.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/picture.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/bitmap.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/drawable/icon.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/syncadaptertype.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/contentproviderresult.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/contentproviderclient.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/accounts/account.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/syncrequest.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/syncstatusobserver.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/syncinfo.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/contentresolver.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/urirelativefilter.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/urirelativefiltergroup.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/intentfilter.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/pm/resolveinfo.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/pm/archivedpackageinfo.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/app/pendingintent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/pm/packageinstaller.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/pm/installsourceinfo.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/pm/packagemanager.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/pm/packageiteminfo.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/pm/applicationinfo.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/res/loader/assetsprovider.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/om/overlayidentifier.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/om/overlayinfo.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/res/loader/resourcesprovider.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/res/loader/resourcesloader.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/movie.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/res/resources.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/drawable/drawable.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/translation/translationresponsevalue.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/translation/viewtranslationresponse.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/translation/viewtranslationcallback.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/accessibility/accessibilitynodeprovider.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/contentinfo.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/onreceivecontentlistener.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/inputmethod/surroundingtext.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/text/inputtype.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/inputmethod/editorinfo.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/window/onbackinvokedcallback.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/window/onbackinvokeddispatcher.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/actionprovider.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/menuitem.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/submenu.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/menu.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/menuinflater.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/actionmode.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/windowinsetsanimationcontroller.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/windowinsetsanimationcontrollistener.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/windowinsetscontroller.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/window/inputtransfertoken.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/hardware/syncfence.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/surfacecontrol.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/attachedsurfacecontrol.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/abssavedstate.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/inputmethod/extractedtext.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/inputmethod/textsnapshot.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/inputmethod/inputcontentinfo.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/inputmethod/handwritinggesture.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/inputmethod/completioninfo.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/inputmethod/correctioninfo.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/inputmethod/textattribute.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/inputmethod/previewablehandwritinggesture.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/inputmethod/extractedtextrequest.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/inputmethod/inputconnection.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/accessibility/accessibilityrecord.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/accessibility/accessibilityevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/accessibility/accessibilityeventsource.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/pointericon.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/contextmenu.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/windowid.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/point.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/roundedcorner.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/hardware/overlayproperties.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/hardware/display/deviceproductinfo.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/display.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/displayhash/displayhash.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/displayhash/displayhashresultcallback.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/displaycutout.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/displayshape.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/windowinsets.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/windowinsetsanimation.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/graphics/surfacetexture.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/surface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/scrollcapturesession.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/scrollcapturecallback.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/touchdelegate.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/dragevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/translation/translationspec.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/translation/translationcapability.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/view.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/text/textpaint.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/text/style/characterstyle.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/text/style/updateappearance.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/text/style/clickablespan.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/text/spanned.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/text/spannable.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/format/textstyle.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/temporal/temporaladjuster.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/format/decimalstyle.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/format/resolverstyle.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/temporal/temporalfield.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/temporal/valuerange.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/temporal/temporalquery.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/temporal/temporalaccessor.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/text/parseposition.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/format/formatstyle.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/offsettime.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/month.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/chrono/chronoperiod.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/chrono/era.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/chrono/chronolocaldate.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/temporal/chronofield.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/chrono/isoera.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/chrono/abstractchronology.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/dayofweek.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/localdatetime.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/chrono/isochronology.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/period.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/localdate.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/localtime.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/chrono/chronolocaldatetime.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/chrono/chronozoneddatetime.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/chrono/chronology.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/text/characteriterator.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/text/attributedcharacteriterator.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/text/fieldposition.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/text/format.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/format/datetimeformatter.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/offsetdatetime.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/instant.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/zone/zoneoffsettransition.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/zone/zonerules.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/zoneoffset.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/zoneid.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/instantsource.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/clock.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/java/time/zoneddatetime.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/textclassifier/textlinks.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/clipdata.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/intent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/serviceconnection.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/database/sqlite/sqliteclosable.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/database/sqlite/sqliteprogram.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/database/sqlite/sqlitestatement.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/database/sqlite/sqlitequery.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/database/sqlite/sqlitecursordriver.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/database/sqlite/sqliterawstatement.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/database/databaseerrorhandler.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/database/sqlite/sqlitetransactionlistener.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/database/sqlite/sqlitedatabase.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/broadcastreceiver.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/sharedpreferences.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/context.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/loader.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/app/loadermanager.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/app/assist/assistcontent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/viewparent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/viewmanager.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/viewoverlay.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/animation/layouttransition.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/animation/layoutanimationcontroller.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/viewgroup.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/transition/scene.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/app/componentcaller.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/transition/pathmotion.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/transition/transition.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/app/sharedelementcallback.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/layoutinflater.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/app/fragment.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/draganddroppermissions.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/widget/adapter.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/widget/spinneradapter.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/app/fragmenttransaction.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/app/actionbar.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/dialoginterface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/searchevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/media/session/playbackstate.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/media/rating.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/media/mediadescription.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/media/mediametadata.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/os/resultreceiver.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/media/session/mediacontroller.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/framemetrics.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/transition/transitionmanager.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/window.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/app/dialog.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/app/voiceinteractor.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/app/taskstackbuilder.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/window/trustedpresentationthresholds.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/choreographer.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/surfacecontrolinputreceiver.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/windowmetrics.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/windowmanager.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/app/pictureinpictureuistate.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/contextparams.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/content/contextwrapper.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/view/contextthemewrapper.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/window/splashscreen.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/widget/toolbar.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/util/rational.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/app/remoteaction.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/app/pictureinpictureparams.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/app/application.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/app/fragmentmanager.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uts-development-android/uts-types/app-android/android/app/activity.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uts-types/app-android/utsactivitycallback.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uts-types/app-android/utsandroid.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uts-types/app-android/utsandroidhookproxy.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uts-types/app-js/utsjs.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uts-types/app-android/index.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/worker.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/webviewstyles.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/viewtotempfilepathoptions.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/drawablecontext.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/snapshotoptions.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/cssstyledeclaration.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/domrect.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/unicallbackwrapper.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/path2d.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/canvasrenderingcontext2d.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/unianimationplaybackevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/unianimation.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/unisafeareainsets.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/unipage.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/unitextlayout.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/iunielement.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/unievent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/unipageevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/uniwebviewservicemessageevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/unicustomevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/uniwebviewmessageevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/uniwebviewloadingevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/uniwebviewloadevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/uniwebviewerrorevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/nodedata.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/pagenode.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/unielement.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/uniwebviewelement.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/uniwebviewdownloadevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/uniwebviewcontentheightchangeevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/univideoelement.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/unitouchevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/unitextarealinechangeevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/unitextareafocusevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/unitextareablurevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/unitextelement.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/unitabselement.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/unitabtapevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/uniswipertransitionevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/uniswiperchangeevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/uniswiperanimationfinishevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/unistopnestedscrollevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/unistartnestedscrollevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/uniscrolltoupperevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/uniscrolltolowerevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/uniscrollevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/unirichtextitemclickevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/uniresizeobserver.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/uniresizeevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/unirefresherevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/uniprovider.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/unipointerevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/unipagescrollevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/unidocument.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/asyncapiresult.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/iunierror.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/unierror.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/nativeloadfontfaceoptions.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/unipagebody.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/uninativepage.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/unipagemanager.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/uninestedprescrollevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/uninativeapp.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/uniinputkeyboardheightchangeevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/uniinputfocusevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/uniinputevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/uniinputconfirmevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/uniinputchangeevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/uniinputblurevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/uniimageloadevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/uniimageerrorevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/uniformcontrol.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/uniformcontrolelement.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/unicustomelement.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/unicanvaselement.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/sourceerror.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/uniaggregateerror.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/utsandroidhookproxy.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/iuninativeviewelement.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/iuniform.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/inavigationbar.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/index.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/native/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/vue/checkboxgroupchangeevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/vue/pickerviewchangeevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/vue/progressactiveendevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/vue/radiogroupchangeevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/vue/sliderchangeevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/vue/switchchangeevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/vue/pickerchangeevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/vue/pickercolumnchangeevent.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/vue/uninavigatorelement.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/vue/uniclouddbelement.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/vue/uniformelement.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/vue/lifecycle.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/vue/index.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/vue/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/base/index.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/env/index.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-actionsheet/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-actionsheet/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-addphonecontact/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-addphonecontact/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-arraybuffertobase64/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-arraybuffertobase64/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-authentication/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-authentication/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-barcode-scanning/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-barcode-scanning/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-base64toarraybuffer/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-base64toarraybuffer/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-chooselocation/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-chooselocation/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-choosemedia/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-choosemedia/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-clipboard/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-clipboard/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-createinneraudiocontext/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-createinneraudiocontext/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-createintersectionobserver/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-createintersectionobserver/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-createrequestpermissionlistener/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-createrequestpermissionlistener/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-createselectorquery/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-createselectorquery/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-createwebviewcontext/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-createwebviewcontext/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-createworker/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-createworker/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-dialogpage/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-dialogpage/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-event/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-event/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-exit/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-exit/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-file/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-file/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-filesystemmanager/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-filesystemmanager/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-getaccessibilityinfo/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-getaccessibilityinfo/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-getappauthorizesetting/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-getappauthorizesetting/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-getappbaseinfo/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-getappbaseinfo/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-getbackgroundaudiomanager/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-getbackgroundaudiomanager/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-getdeviceinfo/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-getdeviceinfo/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-getelementbyid/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-getelementbyid/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-getenteroptionssync/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-getenteroptionssync/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-getlaunchoptionssync/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-getlaunchoptionssync/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-getlocation-tencent-uni1/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-getlocation-tencent-uni1/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-getnetworktype/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-getnetworktype/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-getperformance/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-getperformance/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-getprovider/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-getprovider/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-getsysteminfo/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-getsysteminfo/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-getsystemsetting/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-getsystemsetting/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-installapk/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-installapk/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-interceptor/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-interceptor/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-keyboard/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-keyboard/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-loadfontface/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-loadfontface/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-location-system/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-location-system/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-location-tencent/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-location-tencent/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-location/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-location/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-makephonecall/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-makephonecall/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-media/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-media/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-modal/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-modal/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-navigationbar/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-navigationbar/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-network/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-network/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-oauth-huawei/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-oauth-huawei/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-oauth-weixin/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-oauth-weixin/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-oauth/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-oauth/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-openappauthorizesetting/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-openappauthorizesetting/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-opendocument/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-opendocument/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-pagescrollto/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-pagescrollto/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-payment-alipay/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-payment-alipay/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-payment-huawei/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-payment-huawei/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-payment-wxpay/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-payment-wxpay/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-payment/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-payment/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-previewimage/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-previewimage/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-privacy/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-privacy/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-prompt/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-prompt/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-pulldownrefresh/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-pulldownrefresh/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-recorder/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-recorder/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-requestmerchanttransfer/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-requestmerchanttransfer/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-route/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-route/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-rpx2px/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-rpx2px/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-scancode/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-scancode/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-screenbrightness/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-screenbrightness/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-share-weixin/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-share-weixin/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-share/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-share/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-sharewithsystem/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-sharewithsystem/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-sse/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-sse/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-storage/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-storage/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-tabbar/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-tabbar/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-theme/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-theme/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-virtualpayment/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-virtualpayment/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-websocket/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/lib/uni-websocket/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-api/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-ad/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-ad/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-crash/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-crash/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-facialverify/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-facialverify/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-live-player/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-live-player/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-live-pusher/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-live-pusher/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-map-tencent/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-map-tencent/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-push-fcm/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-push-fcm/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-push-gp/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-push-gp/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-push-hms/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-push-hms/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-push-honor/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-push-honor/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-push-mainland/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-push-mainland/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-push-meizu/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-push-meizu/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-push-oppo/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-push-oppo/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-push-vivo/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-push-vivo/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-push-xiaomi/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-push-xiaomi/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-push/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-push/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-secure-network/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-secure-network/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-verify/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/lib/uni-verify/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-biz/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-component/lib/uni-camera/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-component/lib/uni-camera/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-component/lib/uni-canvas/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-component/lib/uni-canvas/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-component/lib/uni-video/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-component/lib/uni-video/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-component/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-extend/lib/uni-openlocation/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-extend/lib/uni-openlocation/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-extend/lib/uni-compass/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-extend/lib/uni-compass/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-extend/lib/uni-canvas/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-extend/lib/uni-canvas/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-extend/lib/uni-locale/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-extend/lib/uni-locale/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-extend/lib/uni-accelerometer/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-extend/lib/uni-accelerometer/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-extend/lib/uni-memory/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-extend/lib/uni-memory/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-extend/lib/uni-preloadpage/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-extend/lib/uni-preloadpage/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-extend/lib/uni-createmediaqueryobserver/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-extend/lib/uni-createmediaqueryobserver/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-extend/lib/uni-__f__/utssdk/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-extend/lib/uni-__f__/utssdk/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uts-plugin-extend/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uni-map-tencent-map.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uni-map-tencent-global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uni-camera.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/uni-camera-global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni/global.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni-cloud/unicloud-db/index.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni-cloud/interface.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/uni-cloud/index.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/common.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/app.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/page.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/process.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/vite.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/hbuilderx-language-services/builtin-dts/uniappx/node_modules/@dcloudio/uni-app-x/types/index.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uniapp-uts-v1/node_modules/@dcloudio/uni-uts-v1/lib/uts/types/uni-x/app-android.d.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-console/src/runtime/app/socket.ts","../../../../../../../hbuilderx/hbuilderx/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-console/src/runtime/app/index.ts","../../../../dist/dev/.tsc/app-android/app.uvue.ts","../../../../dist/dev/.tsc/app-android/uni_modules/i18n/index.uts.ts","../../../../dist/dev/.tsc/app-android/uni_modules/ak-req/interface.uts.ts","../../../../dist/dev/.tsc/app-android/ak/config.uts.ts","../../../../dist/dev/.tsc/app-android/uni_modules/ak-req/ak-req.uts.ts","../../../../dist/dev/.tsc/app-android/uni_modules/ak-req/index.uts.ts","../../../../dist/dev/.tsc/app-android/utils/utils.uts.ts","../../../../dist/dev/.tsc/app-android/components/supadb/aksupa.uts.ts","../../../../dist/dev/.tsc/app-android/components/supadb/aksupainstance.uts.ts","../../../../dist/dev/.tsc/app-android/types/mall-types.uts.ts","../../../../dist/dev/.tsc/app-android/pages/sense/types.uts.ts","../../../../dist/dev/.tsc/app-android/pages/sense/sensedataservice.uts.ts","../../../../dist/dev/.tsc/app-android/utils/sapi.uts.ts","../../../../dist/dev/.tsc/app-android/utils/store.uts.ts","../../../../dist/dev/.tsc/app-android/pages/user/login.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/user/boot.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/user/register.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/user/forgot-password.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/user/terms.uvue.ts","../../../../dist/dev/.tsc/app-android/utils/supabaseservice.uts.ts","../../../../dist/dev/.tsc/app-android/pages/user/center.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/user/profile.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/user/change-password.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/user/bind-phone.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/user/bind-email.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/mall/consumer/index.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/mall/consumer/category.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/mall/consumer/messages.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/mall/consumer/cart.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/mall/consumer/profile.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/mall/consumer/settings.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/mall/consumer/wallet.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/mall/consumer/withdraw.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/mall/consumer/search.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/mall/consumer/product-detail.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/mall/consumer/shop-detail.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/mall/consumer/coupons.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/mall/consumer/favorites.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/mall/consumer/footprint.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/mall/consumer/address-list.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/mall/consumer/address-edit.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/mall/consumer/checkout.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/mall/consumer/payment.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/mall/consumer/payment-success.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/mall/consumer/orders.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/mall/consumer/order-detail.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/mall/consumer/logistics.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/mall/consumer/review.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/mall/consumer/refund.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/mall/consumer/apply-refund.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/mall/consumer/refund-review.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/mall/consumer/chat.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/mall/consumer/subscription/followed-shops.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/mall/consumer/points/index.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/mall/consumer/red-packets/index.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/mall/consumer/bank-cards/index.uvue.ts","../../../../dist/dev/.tsc/app-android/pages/mall/consumer/bank-cards/add.uvue.ts","../../../../dist/dev/.tsc/app-android/main.uts.ts"],"fileInfos":[{"version":"6e80ad2ee01e6eea8837f649d0b91002724ec74cef9b3d2b5fda718b14fc6ec9","affectsGlobalScope":true},{"version":"87e0a7f9366dc80be7b72c6d0a6e23c4f68cd2b96c90edd3da8082bfdd237af9","affectsGlobalScope":true},{"version":"2c44751aff2b2161d0450df9812bb5114ba050a522e1d5fa67f66649d678fcb4","affectsGlobalScope":true},{"version":"68566331a40bef8710069a7f5ac951543c5653c1c3fa8cc3a54c95753abbcf7a","affectsGlobalScope":true},{"version":"173b34be3df2099c2da11fb3ceecf87e883bd64f5219c0ee7bc6add9bc812cde","affectsGlobalScope":true},{"version":"9c867cbb4270f3c93a0ffaa8840b3034033a95025cd4f6bf9989ecb7b7c54a4e","affectsGlobalScope":true},{"version":"6d41c5eb02906006bad04d0ba26eafc1b10c433760b9209f4dbb7af1b8231071","affectsGlobalScope":true},{"version":"7b435c510e94d33c438626dff7d8df57d20d69f6599ba461c46fc87b8c572bce","affectsGlobalScope":true},{"version":"25f08344cf6121c92864c9f22b22ab6574001771eb1d75843006938c11f7d4ab","affectsGlobalScope":true},{"version":"f955119e78143380da1b952b56ab8ca46e10776d17e0a748678729086b0fae49","affectsGlobalScope":true},{"version":"b15b894ea3a5bcdfd96e2160e10f71ea6db8563804bbaa4cdf3b86a21c7e7da0","affectsGlobalScope":true},{"version":"db491a26fb6bb04dd6c9aecbe3803dd94c1e5d3dd839ffed552ffaf4e419871a","affectsGlobalScope":true},{"version":"463cb70eebbf68046eba623ed570e54c425ea29d46d7476da84134722a6d155b","affectsGlobalScope":true},{"version":"a7cca769cf6ecd24d991ae00ac9715b012cae512f27d569513eb2e47fc8ef952","affectsGlobalScope":true},{"version":"d27811b28326ce496b3a0810a4b38d9391e929b150d9d8b881a562c9c9d666c0","affectsGlobalScope":true},{"version":"0aca09a3a690438ac20a824d8236bfdb84e4035724e77073c7f144b18339ec65","affectsGlobalScope":true},{"version":"0f844aa90d79ff631b051f5ee8540a8936d48c39914c910e89e7b7949bbac865","affectsGlobalScope":true},{"version":"0fbf8b372e8d8349a3b5a1f470bb7897272bb43aa88066e50dce25fde261cd93","affectsGlobalScope":true},{"version":"0ef38eeb51b042d85f64103ec93a37ba8683a31c22fdfd76c69852e982aa08c6","affectsGlobalScope":true},{"version":"9652d98559378167cb1f4eb57e51119e4fef5861d18c5928c6bae207b80adfe3","affectsGlobalScope":true},{"version":"7c1cfb70557e907294946a14c5eba189f77d5e9dfe7f02832ee5c6f3f34dc4d5","affectsGlobalScope":true},{"version":"baa7e3434cefa49e8965ea72a0c26fe056b2e9d978ac2bb3abd204fcd6c4fc0d","affectsGlobalScope":true},{"version":"aca5b50919b30253d6db79ecb92848d8dae72c7998df1454a19e21dd633a75b1","affectsGlobalScope":true},{"version":"016e96968aee1fb6804200c75a11e876371536a98e772cb55ffbf482ddbd8822","affectsGlobalScope":true},{"version":"4567cbd464d15226a40a5b3d671e20665aa070a2c4fa3f4682700f563f9ab730","affectsGlobalScope":true},{"version":"bfea9c54c2142652e7f2f09b7b395c57f3e7650fb2981d9f183de9eeae8a1487","affectsGlobalScope":true},{"version":"5b4344f074c83584664e93d170e99db772577f7ced22b73deaf3cfb798a76958","affectsGlobalScope":true},"db8eb85d3f5c85cc8b2b051fde29f227ec8fbe50fd53c0dc5fc7a35b0209de4a",{"version":"8b46e06cc0690b9a6bf177133da7a917969cacbd6a58c8b9b1a261abd33cb04d","affectsGlobalScope":true},{"version":"c2e5d9c9ebf7c1dc6e3f4de35ae66c635240fe1f90cccc58c88200a5aa4a227c","affectsGlobalScope":true},{"version":"c5277ad101105fbcb9e32c74cea42b2a3fbebc5b63d26ca5b0c900be136a7584","affectsGlobalScope":true},{"version":"46a47bc3acc0af133029fb44c0c25f102828995c1c633d141ac84240b68cdfad","affectsGlobalScope":true},{"version":"bf7e3cadb46cd342e77f1409a000ea51a26a336be4093ee1791288e990f3dadf","affectsGlobalScope":true},{"version":"3fb65674722f36d0cc143a1eb3f44b3ab9ecd8d5e09febcfbc0393bec72c16b5","affectsGlobalScope":true},{"version":"daf924aae59d404ac5e4b21d9a8b817b2118452e7eb2ec0c2c8494fb25cb4ab3","affectsGlobalScope":true},{"version":"120ddb03b09c36f2e2624563a384123d08f6243018e131e8c97a1bb1f0e73df5","affectsGlobalScope":true},{"version":"0daef79ef17e2d10a96f021096f6c02d51a0648514f39def46c9a8a3018196be","affectsGlobalScope":true},{"version":"571605fec3d26fc2b8fbffb6aa32d2ef810b06aa51c1b0c3c65bbc47bd5b4a5e","affectsGlobalScope":true},{"version":"51536e45c08d8b901d596d8d48db9ab14f2a2fd465ed5e2a18dda1d1bae6fe5a","affectsGlobalScope":true},"897a4b80718f9228e992483fefa164d61e78548e57fbf23c76557f9e9805285e","ab2680cfdaea321773953b64ec757510297477ad349307e93b883f0813e2a744",{"version":"8a931e7299563cecc9c06d5b0b656dca721af7339b37c7b4168e41b63b7cfd04","affectsGlobalScope":true},"7da94064e1304209e28b08779b3e1a9d2e939cf9b736c9c450bc2596521c417f","7cce3fa83b9b8cad28998e2ffa7bb802841bb843f83164ba12342b51bf3ae453","dc44a5ac4c9a05feede6d8acf7e6e768ca266b1ce56030af1a3ab4138234bf45",{"version":"451f4c4dd94dd827770739cc52e3c65ac6c3154ad35ae34ad066de2a664b727a","affectsGlobalScope":true},{"version":"2f2af0034204cd7e4e6fc0c8d7a732152c055e030f1590abea84af9127e0ed46","affectsGlobalScope":true},{"version":"0c26e42734c9bf81c50813761fc91dc16a0682e4faa8944c218f4aaf73d74acf","affectsGlobalScope":true},{"version":"af11b7631baab8e9159d290632eb6d5aa2f44e08c34b5ea5dc3ac45493fffed5","affectsGlobalScope":true},{"version":"9ae2c80b25e85af48286ea185227d52786555ac3b556b304afd2226866a43e2a","affectsGlobalScope":true},"a9f049ea570ee986ad735ceba97a15d423659025fd070da3da67eeb8abf79fb2","5e94ed5f6b634fb2efe8715d7a14898244e87d97de8f30c5f1ce659325f35b63","b7cce00afe96bd61edceeda75e87001c606d6afae1269d408b762909ca550025","753ec8d1da4a289e4c8ab87eaf69ff564ccf882b9b205d748b8fee35e5c13c84","dcb4f549a765d67fd8112c49cb86835f903bbc7b3c744a0e0e6586bfcf6b797a","69bea942e5e363f5afe74ade98131ef7e6424ceb6eafa912c4fd558e95cfd13a","fe9bf6de0f7eb5bcdecbc97a9f9d143fc47ed6b2d4f4c7d626a163fb3683df38","113a30c935a90737c27e5b166753e8cd2c52cb7eb970a6bf8c7aaeb41a50f1ee","345270970a9c2a3acbb36b6e8d6929bd67a51089c1bd5ee69a6e3a7fde03a31b","c9ad66dfbb3053a5c29fccf8365eb0591f842a0238bd6acf7315c69249bd63d7","be45ce8cab2a0fbf2650402c462e99c1d7a881d4722435646ae8ba6f487ff3db","d16e1c53c406a38a3bcf4d00c3d4b563de4b314a20217289fb0e540fa693f30b","1215db238a845972b6d722503f428d9c8af6162341a437202039a397f0a3b4c1","35d891aaa6d58b6b5222cec630cb7cae1c0db8d022bd12aba90010e7fd1e0d5c","155136082237896cfaa4af7370dc01a631ac790fa0dcc2969be674f0a02de5a2","7624ff1625a5d1ebcdb3161f7f5424b21fb3af0204d3f4d35d6e27d1947ad1bc","7bb9019b6498ed08c1ebcf61148f8b793abb3cc3923b0ac3478937211830d85f","ae03093b0feedf80a44033b3103c5e3338014efa3f3e24845bf26274b56502a7","6d7cb1c3550c1cf70353db405d8cdeeeb086ee133481d491a7f18a121296da97","95a912851175159e7e4f743314fb8822cd420106bde2aedd824d46177ba99096","4818294229770bda38c78a67eacc25a54fe3a7139cef63c16dceef161eee3a1e","75c2abd02e246ceac6959a2fff8b140ed7558a53c27e1aff74a799ecfd93e78a","af4a013ff8eadb3da77fad719c7cd817990353cef3e92a71119c4bde4315ace9","6e7baf1a770b2b2511fca9d7eb9262c426571c96a19d4e906dcbd829618d8a07","3281685ed81a5f4cd84de92382261796473bbc121dfacf41fd13db4c256f83a7","75c18be6fbada64942047f2e29116c1598eea0fb259b66553cfe485a36bf98fb","2faab834c91aa96433e7a8754a557b48dfcc62f52d4c9c89c207388ad32ec70b","ffaaa31124382edc748ca1ff1aeb9e9300901546526e1356b10f166ac4f3f3ab","7e7b2aa55273a7f11e445b8f1f23c9e3d15d9aee5ace616534e8b16faf04c7b6","f4555f41566ae26a07b20098b9ab36476f7b185ca1e31204e593c34b51e3d5d2","be7cb8f67c758b1257fd0b90b9d546db908279170299f2df910c5fb05812b453","ef09a4caf8a73b19a1a5d861896499d1bc1d2b7d317af56b613fc379cdcf7f3d","a9826fdd6dfd19e91873c0c69195ebf925c652fd7096ea6a6dcb5d081037f8da","417de4e994c7f3f7c5c7710eaf664ed94347b40fdb7ef3f6a2cb5079a08da145","7f7a841a4438b02913186a76fc16143be3c3d0b9d5e596fc3b1e8b2c86b6a892","dd85cdccad106178a91b0e274bc61c704c0c2758843d29d699c028689e67552d","e2b50c5db2178aa09da186d8b60e2f589bc6998deeefba9be9df4c0686c0dca2","560f73409bc73749185b2d598923d2886dcf259b8864aa28786526164c6ae494","734a97c19cfa217eb74f1da4b933bc0318e53befff66c25043078404a0a5a3fb","f8f34d360348460782fc26f7e70cdeeb8150eaebff535b4075fb64d749142e9b","9c8b8cfe32f699471ca567ec171102bfd8a4abba5693d1837b45de1d93626910","aca17a9829f3267c504ebc02d05115616e4f0398b53e82599fd7a70662c4dd50","236f39f3abf84c47d0663a94647ca67bb92b8ab8eb1d7c0f9b15a77c20400ba3","6b41d23aa626a42b433e913b51024e310aed256d745cda2685c663ebf7a277ba","692673cea6d597777fa0b866c6d93e4cd1fbe7749a49bec3504f3d6852da382d","cd903ae80936070b05eebc6e0c461d9479ce64cf1ba537cfdc8d78b3d9a81e1d","360e08b9f7239540ba530e0f38576059fe0efaae8fcbf67f0fe5ebc169f475d3","6e66fa453a3da37ae7ae2fee12937b38d1210a0bc22a25fa70f999f8a98b8c3f","6898a15ba9329b18503a934d772f8e7d9d8d2172ed3424ea43dcee250e225cee","bc8c6cd4ce4e561453acdc3a22b6f9bfe5ba2bd4557fdef998369081c9134275","3df8d611a65ce138aebef52e24c51687ab9430e4cc9cff0c92bf52834a6c8023","5dcd61aeda70e3af3934446d645000bf91b7b6d71cf75141f9f4bd32ffbf4a1f","5948cfa7a16bb3b6694049a3d7c59566125a575beea799ebf86355888fa15f05","141027c7195a6e49d68ec954a6c850a67183117b1a48ca9e55d586abbcc286a2","ff64b99cc27e43aefdefe313778db4b98e1ec8e66bd8c9e8dd1da7a848852110","0e985df7af2d15cf2ded941415a3132f92fa1f39182c36e2541f0897578a90e0","7b1c9d68ac624e2ce9fbcef42f03df9eb5d7922b697c4eb0625bc5932c7e5626","c9cd9b2f01b474b6d1f824261274d4e2944543cba989e13ec8fb45eaf428fb99","0621f832a6db1c7e15d4b8e27efb3b6a2dfbf0061d548d20a0fa3acd6e7e9ad0","1362b7513042c64d05ef2e4073ca3ef25825e6c953c4d5455580ee50a232e083","f7a55f60dda8daa1e82458d64f4f1dd5f3113320ecdfd98a14ca95d423574207","6e62d79025167711952e5abc46fe773b83dd7fbc3432f3d60e34263ef07b8a88","a07425e97c460bd3c764ce3d857fe37fa7d1808b3ddac022d348e7bacaa58336","6ddf6dc4e11f0041c3d513c6ecbca1a62c71edf8a75606396a9937e97b0976a8","8c907668fe1c4c163e322f2c563c5f1de02ce8bedfe90335a4cf2fbf01e7ec42","2888b08f7df74672945e8913b3f8b482a519d8ead96db6413328531b98fce6a0","b0765d93e1ae41c0b9231e50ee9850a9ab30043bb9f40cc4b720c31e55dcefb2","e1a94bff81e13adc6eb802257e67f4ccc54d4268e76236dac5fdce5aef22a445","636cd0739ee78e7d5d7d7aec83243de13f3e92c6bdcdc4325756fedd4363fba3","b14f0680cf344c2ff3c2c03c9fbd5413ed76902100a8c476a04dac98113ae6ce","b00fc5ea3c8d7676d825c82783c73dc1a9b662bcea886cde8861a93ce0637902","ebb3d0ff97c54e1995f229e6dfee89d255e8b37ce50360642e3e4f4041e00850","1e995807d59118d7808da9ab62300b2b535686c1356df51ff64365ef6f255909","f63b65154c9e12d730832f8f0b0f77f1ce912bf6d6bd8296759b2a57aea933a4","37fa9c72aeca0c40378a13917e15c08f70618fc1af50db2390c54a2da5891156","f89deb8cdd5de1cc0b735108eeea49bf81af828bb893b1740afa59af0b726e1b","91d50f7a3484627280e6b3873386d1a44dcf956156d2b31ea9741c1327be23e9","a9da237d591fdcbd3db71e2c52fccfe18a203bb810aa891bfdec7f7334289174","6fc646802b257c559c61bb190cf1c39377f97c8edcfb9b4f7215f4000b16be52","52bd2529c7f409e5c239d43ea7444c394e6be64b509437c3c25fca52f3aa5144","f52a07b2ca2e4dab99459d521867b3f4c5a2032677a0c803d90c400a34c55a40","dbb522d1482ff56669c9f281491dee1ae8a75e015c5becdb348c2dcc02afddc9","2b63c811c1648b74cf6e4337c99d9e84abe4d105bc9e38d38810c358e431a023","ecf25c2f08b3a89cb878eb832a7f0ad19a7070905ae687d36bd5abfe2d6b7e7e","e11fcfb3cb83517aefe0f4713f395a0dc18f7c6aee361a0bce258c3d22a1bc00","4a83c0012226f26b3d13aec38482c66f3a605c0b20827ef19bbd8d49cee622f2","cdfff4439385638f00f16b0c50b1c0ec6452281af8e9be558432cffbce7aad22","034b7b464137cdc0c1ec97078a3d12c6a3f283d60cfa09756cef051042b79463","ecdaa87c9dcec6f7c802e5a2d3926691cf1fea4d8f8e916a93a0b410d8daf91d","4c6a9787e1b611dad138b011c9abb88395aaa9bd473cd713f2064aacdeaee396","52f648342dbae30c9a51cfb4859e0ac8cc64197351e53eb1e2a04e0315c17ff7","2922eb5995ced0c1d56d05304a32b8805b6d582d736c3168526c9011dad0233b","5f3833db4ede7a6c5955a483a01d50359c874b5a0b4ab5afe26e0232666da187","a3037d173041b7bd28ffaad2a9c10837b5d315652d1ec4da9fa3c7aa7fe59f87","23b539194ab717460588dc29b98d18318c217f4e74258b37bba04c9e07d71d1e","076bc471e07b6780a988f0d244e614e4fd5b93deeb7eb58ffb30efc270423de8","b3bca5abd1ec281a32ec6bcfd1c2975aeb9683ea3eec68bf323d8cee61afca90","edd3eb041e9fcea3765ae94f145524eeacff60b721e34ec1b9a7061276352719","c5450ecca5a8946d0ca8d2bcd8506c22c33a4af38cbffba6d03b4304a823e50d","4c6ef9fc8bf8d9038bcd22fba5b4edd22ea05a3d536ebdd5b07f720d02607a93","04f7b9e58a831b4f7f5d6bb170e87820c68ceccd86ece944c5cbb376fee8416f","db12cd264aabe686c6a027c8af3afa72486b0cf4291d5f5c8ee148325264de1c","c19c6bb7f81272ea573f2174600665cc999e8a7596fc2f9fae2daa689575f08d","95663e373c6b4ce80da0f9e21c564f4f201fed54773f9e27319ef441b547470e","e8af6903e8e7f3f405654c808534319d1105e5d05c5d5b7ab00dc05ff8c123ca","95a831ca188856a59bc544031053fda680056f0c0e2ee2722ebf614f50b7e54b","ad3683201a9dac34ae25a2c57af2dba04805cc998fe78df34facc13dc970ffb0","3052cfcfd8ccb093f64924792c7d3090490a803331969e44cab52cab4cb74698","98366b7911900d3a31c6e85c326f7ba664a28fbd24fba191faedadec01fb2c4a","4f3924ede1fa4f31f726c577e5056c407e995cf6f140d5a37b25637d512c6d2a","739779e95e30515697347572fdd439ad55442bf175aaa6763444336b258964dc","6369eadb1ef17bc4faff5eeadf6bf759986e6dcba8e412aacbc7681c5a1ffe00","9352428676f84478a26cc7b750e4a9d2abc7189b6369452067e4da2afe1d3be1","a2f25e1d6a2a69b6c88f86c6d39914c9e9a1634c9165db2cf05f9f7273b2737d","bb356f5b92a22eb4bcca50ed190e2bd94fb2fd6ccd5f0bd184ab94b10aaf8e22","fabdd71c50eaac10936f748c32779ba276c3b778fb697d5b36c18b416958bc06","55137dec811a92edfa329067ddcfb042673ffdcbad49dae12c61cf9ff2410822","96f21e74ddcc1a72f611bb90f4146bff4bfa61a0ce5d32dc10592f9bca6d9dd4","b7ef1d83bdc824781f07b5347176f154c98190874c5f5ba2c0797225ad370b2c","0e7a4c6bc6f826aa0032971691aeef1d4d6c8bd17529652f4f764749e33b2167","c702feb8c88742697dd03848be3381f849776cea383497cfe9c72075ba6996fc","890729ef6b2e352d1750186bb3cb740f4d450d4f5d58e80c988ef79c596b4db8","caf48a1f9ca7807e639635d357c615d61be9260f3b3c15fd3b32c9a136b95330","7def810f306678f7f8c1305a372c6e8d4ecf984f0cb067dc8fd422dfab2bd6ee","7accc5c71c146538a30125e240e7be8cfc29a9e263f4540b14c55db4af3fc4c0","04e345066cc36c58551825d6e84cd23db6e78607ab1ccda754c6bae66e0b0fc4","172c9efb0cff276f9cb01dfa2ac5b7b6d5fe3a547e264fa2a15187d7dd9d6c93","8d9202dcdfb70d6335082e1af748cc1e8b3ab4ea42fa9d34403233b8a2693cf8","f4600cc019ff4c47e17213c7d2ec5c831db0a9379d7376fa2fae3af29c9c82b7","b7dd7c73cc8c564f0bdd5217f56cf42fde85c7524b06739e76f08265a3e8a1ec","2fc96755c9ce9f4f3d6a4f7406b8abdd0651c7548296e060908c4b75b7bc42da","c94c469279059c008ff138b5b091085b1f4326824abe8265140fb26021e294ac","f2f23a8040a3b977f2adc72622b49145f1605300d5b279c4debbff8d535c469a","41d81600effb129c209f86ae32231ddc357d7acedb9fa9ebfe60c308475d1b36","67368e74c92373e743f2942eaffd292cdd6f91d3a4d4210649de88e886f727f5","2e3ca531dc7f889d2525b5548bf18b0ecb5b2b1ace8c89e5644b5a84ed80df0f","13cde4d1ad843f50fa82156e498420f3d6231eeddbd9c856f2fbc947cee14f69","7ee62691b05718e30a74db92d9295084ab8d9dd0764754995545b672017694a9","7c89dee0144087f836d6b9452ba29aa4967317ffca1be148988eb81b5a357992","616e4dc1950431f1786d66b11b6e6f18565814d3098faa8785bf2fb71d7d97f4","fa065dd51bd483dc403955d383e587f65cd99070cad7b1e638d24fb084df9879","defa4a8e6bee828a1c2dcb37f58597411f5299557e37efef2136fd6a042a0ecd","7e5a27c15c04faa14436677396f5075f2acb6b0aa33670543ba5d75251ec3be0","0b5823a49cbcd5576d7fa7f439441ced3386eb630279cb7a3bb30246cb2519aa","7d964df58d57fb44484522e32f2e99d0fc6bdd929bec44ad5a051cce31703737","dd0b587ad7c873cce8d7e51b947a8c1b722e00881b0b485af46f9f4e9dfc9fb2","f72781d005c256a6d64fe522eadb2c2a2b920c91e395dd2837b4193ec6a32b6d","827c3bc97611a0334d90bb429cd61547e1479349cf904428fede5ba28bd02ca0","9c865c53cf594f71256e90f1e7777688088e05f7040702c0af1b31b2a17979c8","ad149f89d84abf476903e0a70593bf8a9a9870f3363f03e48bce03a60b9032cb","42c0632af4a7291567b196d0653c7e47ed807968bcd9330e14cca8fd5137411f","cf92f44b3a567bd9842fb31ea8f3fa8d71389a703e83b0104ca057a9c7c401b5","ec9f73c33592a97de39ce97779da9c1d9a3a81416f60024cf3a094d8bc6a51f0","59899090f0e604d38520297678161172eb0da2e276d50b734782ac74bf710b64","a4261d849c4c4834f22b6c33fb05fca37078eee9a4dc6fa00c90f2cc0ddadafe","33f8235ee036526ba4f6281be5a9675977efec915fa370ea9823be3b743493b4","92106a20ad252996f5de30ac709a31f7e968eb0e3faf02d439bfc19736358abd","d3418282d5ac5cf21a0c186d4ce7958c5a8b8e35d69d79225eee9561bd5e941b","deadf795497e8a65e573447e50e36a3b30f7e6cf70c02b4235c7aad21624f9cf","bcfe531c8d0cd3b6c3b24e398f78f7b51a3c4d44c75225fa8f8bf4fe30fb6ec2","b451a4d6f6ecc0523e2bd43e2297c68d63647a330a7c893a3a356dc90c0b7e35","5ac5bd94c6929192ff715f8c15543a2b7331f0db6f8b9a5680956339c4ac5841","0ee0e380e1d17c3e6183b70c012b18166bf6ef593923f2b4083d99697fd61d5e","11f2b58acfd6affaa3ff00799fe3744768c073ccf63320634067988309b86b27","055c94ddb36bb93d5bd06af77e403511ebe8952802934ea2c9af6effa2859a11","795418f74f7d511631329ef4a917d7e065c7f7b8f261eb6576e5e1b364fcaf93","f07aa0f14b07105c64bebcb9e792216b85e21dba5ad5fc7d69dafc990998c9ab","3590279ae9cb56082358ac736c650e2500d3e354aacc4ad0d46da2bb9c074b70","d14cb41bef07c4b766260e33f77affc25c326bab71a29b38de49c736bef814c1","9784caa1704ad93d707a343016dce9afc51e3d4bc473c44afaa5ef73bf02ec67","f9da916dde53443d9ff83edfa1b404fd468280839379215c45b98748ad36413f","89e00a80153e04f55fc2abf67a5fa26e843e94e4d896eb906ac131113e623dcb","695d60af09f1ea0abfbaac6029a847d5acd974031ffa92bb30a5046412141366","e5fb35e195ee33c761e1dfe073436e30c7f38d72cd4739dd2deca834cb2040bf","00a0288ce31d3e3129fc177a60c130cd792f2ecfd6e634c4cf9ef38b075d7e5b","db2d09f8715a7f099f32904cc44ca3259bc0d6c9f8afb539f0e94082c3421b32","d005bd50e8eb8fb8b93c2f9c1c6ccb1445d21fb55e02ecf2782fbc921f4e3066","99b4c7f34a053d3bea56a63a20077ec8ae250cafe28730428dd18f8bb01e8ae7","2a3b6a931d2bcd2998c06cebc2d86ac66300a65fac01f9fd1a5ca39746921148","18e2f9802d6f93be156bdc2c771ade01af119f6735ddc52611dd47c00da6de74","60c6f70be8a7438ebf45665d8edbd06b2d6f12e57374d5d3dc2f5117f3e56359","9fdd23e11fd5b1dca494cc919f706f502804acef50cee593723ed4087e486f7e","784d7599403cb4e6595c528758daefd24ec8d6867ba668dfc524deb04ffbc1a7","e254021ff17cd2dffd5ba54458cfa43a07520db1b679dd74a54bfec16c198eed","31d3d8d7c90229e478767cf35dfaa0d63fa453f03d11a3c9ea0bcf49a000852e","a811babe4e7849025cb2c111317d96da26b0c2c0bcd9a5a6baa5c0244ecc2c4b","5dcb774809733fd4c12d74e54e4604d6462668f0ff9f89e610d3c8ed7daade4b","6dfb57cbb5123326dd2591fdd29cf2a6edfbd50473f84ba56b41dc1a9a5c9335","2c4c16ae9d3ee7cbfd81aa78318dd44aab3e89f104ea5b83db823c62e8035958","452faa95475c0a3d13b75d2a16e3400f7689c66210f41160bdd7cea51f58269e","2a58ae82f98a35406aa0aaf823ceab9788bfb5f8f634df0f81e33f052cc9a070","c4bbb6c48e58b754e445b06107d128d1827917dd3ff142ee91842b9a9c112384","219683614118701da9fd97320073c9ba09a038636e85a9020572e5604028dbae","e02e548bcf8cdbfaad3014721c0afc4d9155864326e3ea996526e20e6a2afd4d","870fdd3a3eba1f8ce6d5a9f0a26ee479aefa7021f907bd7113c2742d4270a4dc","04f86e5474108337feddc60f974803afbfc9ec42d62ba329edc96c90c730020b","4fe88323f71b0c362f2a0bd9134ab39f3631259df044ed828110508864832c33","0598cf1cb02c868f6c3f00f66f5eed0c5f3224fde091e5caf586a32f2d54a256","a7ebf86af52748a4e9be5ae5659227d9c9f32e66938bf8f01e98c3fb3315d3d1","ee844259ed172b447221233f5f5858f3f9c14740d5b62cddf1462ef2a6e1272d","142e686aafed13c5d48f79c62cfc000896a2a57bd6eb900c2d7c33428df54c1d","744ecf788f2bcbc504d2854a287256f45df04c3c7e8ebe6997310f5d61b50711","f0e88b50b239c95a138b1e484eb51f502dd62f8573556e8a2389b5fd30133ada","651c9cd467ee2d3a75fbcbfdc9ce0663d8a7918b00051f9e8caf2c29c97f1dce","1755b7e2ac5ff0c983ed2af446b6e2be02aab92cec69b529d5bacad737c92ba5","75372fc69641935f9001968fd8a738f17427a92236783d830d9a1658c317c9bc","79857c3eddd652e3bf563ee8a8ac42f77602b493241f5d4ecf321deb07d3265c","493374b8fed9e916f65268ae34b2eb50d54dac6c6155c8c3aec2b110b96eb846","3f67bfe77198b02a087dd8696dd7cfb815e14d53beb18dec7775aee1d58702c7","ccc5205e0d157e66fda814ca588dee8c132fe54018d0d82661cef3cb6a61dea7","700797233325d51580854ed460164d5fef06c5c6479154336ed7fb4573c22faf","63b6ea7963794e1a1cbf29a4b9e6e5a18a16bc0acf12c4c497b13b8189291577","c940f837169ec3a8fab6fbfb8982c102be8568226547083fcaa7120cfaaa8cfa","e7c3a4ba9d905fd2c0e8c9fa1a7cc8d60e34de72c4fba3f485f1ae6f28d30e49","1c2e47b8eb25bf91b26b6d41e7dffb80d763866bac7cce5521a7a776a5219d7b","7b6c20a8df3cd20f3c7897bd4e7d14a3470bcf698aeece02039fa55977c6cd6c","3f13e83bc86dd062b425976807aed2f63743f517d1507e74c14ac1bb4e6af2f5","e7a3f8116acb64d02bb91ec7c607e4f605b80db625a6b81b2d86347be7872caf","51633fe4f49dbc57954c0c606e445e4f091b7af3420d80884accebc2116e3382","d6f2f3c749d1adf9b6d572d27c27eb0de6c97b07032c48e3f70837139e9180a3","170b85f7259689ce23bc809d7cea2a7fc79b7f4e524fd73930e66783b656c330","479da7ed69ee5914191bd855aa74fc34406c4c3864149a528b0cc76037250e59","8766424888a810870e4be559a7276449184edcae82db64731448db12049800ab","3019a26416cfecfa581ed6835e94ca21b0702114056dce8836e3a1226d732640","f0eadd8d5b164b19483b7c62e85a2249611b9dee897c7f1b46e109cce13b22cb","5f476be61ef4a259f7067891c04795ddadf1fe8450671cda83e27636ef2ad0c4","5be2d74a8b503f4ba88f905316a3704f28074cf30b884ff423ecf60a7d9fd4e2","d6f8636d479116a1cef3c6e6415d5326e5bacc5d0bbc361bbd507cdd451b1594","692ddfb913a98bcaf42cb94473d0d4a45683addbf48f3a1d5c5869073e09ed41","3d51204c5e6a69cb45ea152c968eb5a26db0ca7d06d73889dfb012edbcafda48","bdb19d108c2a788c48040cebb03d4bad79731996ca9765e7b292492d59e8f31f","734cfc086d6f945e9a84aadb7a2cb73214a9a86df7d0853409e36ad0ada006e7","c2d9d2be0c62d9eb038421e2a51be0f098f8da42472080649945506d9f8b2d64","38d5dea40c2e2423eff59924eca48e669ed88441815187bac4262ef0ad2689f0","688db86acd5f0d3a167a0bb4778bdecba769f2d94c8f2291277f0b51e7cbfcd1","1c2d49d8d8d90cdf734a7eaeac76e05829437eb657caa9e9403b56701a00b747","9c37c1dafbbfa00089e3ba095269dfcce8196e7cf2e7866124a577bed39b1341","25b2e683398aab0e633bfd679093be0e781f8259f3a7212c74090eabef71829a","870a3b40f227aca3021236bf178d76508583497a04ccde082db4735cfbdc413e","4206886663e1df92db9fd3286566a7b40d08c754109815aa1c5348469156b454","546275842f9a117e664c71aa151099b612126abf5002b7ea9a7d29db3f7ea06e","5d3e9c802093fd0f3621ad32231fdb40951d750679921c24be00207580515fdd","b638e2349147b410c99c7abb3b916484c84f931c0e54a51610eac23674f5462c","991acf2b656113675182be59c7bedb01f42132c7777d49ab56a20f7fd0eb0c53","c06c2a0bdf10e96019121c1ad43550e1309cbdcfb618fdfd5f5007c464b35869","dc67651920a1617964151323c9c0fc22962948131fccb442e3858deb974f0c0a","4dded26d1610b1fcd97be8bc2adbe9bf49cd6c574bb54f544a706ead913ce579","81b3af7d7e8df93862b5c308efb013845eb80b34c5bddb6bcf97269ac881b454","dfb5b0e704f05aa091ad57629da2964d4b4ebb92de88830e59641df028742982","ccabbc8d7cb2972fa82cfab2f68118ff53236e3f73a98dc20f77c0ceaa1c2323","b92d5c9cccabb04f74d0329058e29e4edf43ec80a427a9553e3dc006887260b3","310519588275401653a9e2524530076c0615619f4ed02a90f4c295256145ffdb","c654364580b1b5192b100687f5337a6cd364c49fa4d435a1de2088ba5aedc687","3a66a49f53f67807ef110033829b67d0ffe29032ba9b9c2d05a78cde639c7fe9","4a36f2312ade82cfc32f31fbf131cfcd29038f5f88dfb663d5faebf0c39bbb8c","c05e29c903823a814853aa0803301724bcee784eb332e63a673efc556283bbe6","71933894b1cb6b21be3e94316e86a3fac2492c2bc08944ae9611b85387f2b0fd","e5a70a8f848f1e7665865e76872cae69906a3976b61efa1580f8a9229d012e03","5fb73749ab8047b48d360937332fe28dc50e085a431f7327a6b5d530071bd06a","218ab8481329fd2accca1e5debb45dac5eeba96b39bba5f659009539f138cbd0","0930323b4efbec69877906806bd2a069c96896d35b5fe879eccf64059bdd0702","c0f9aa7e3e64a5097534bdb379b91e9c6838033cc1406805b06eb4f2bcb8adb1","e33f32c896ea534b5587a1166b769f1259a0d3bcf021fea449c03775e4ce5bb7","10c91f6a781c0068e7e3ac9435a38342e34965dd3cc7111a824e5c7d6a0106c0","5ae29d8bd0fbab2cea691b9541833b76c9a542013ad33710a109ff7f0751ae71","7b4ddfc74242c161aa469a8c1ba0d01915779a87a85e1476febe79111b52c5ff","d712fb0b184c4dd377292dc9767530e9249d73a04690dfca42c350cd4a02338b","72028dca7892e4d0175a4ed026701d73b5a5e8ad5c3771dfbe1138f1488a03be","ed145ad7bd6050dacd85f1c7e50fcd5aafa0433339dc2630a37bfc930d8589df","c063c430d8f55f4d7e4bb7ebf91fd7bd50e8d37f3406d356ecfa6c909350db29","9cba5e78db08657ac090c65d42534dba1592010544541b7810b35855570eaea5","abbfbef2b303ba2de958b6b872319bf3d4fc2d931da921efa09b092a91e3aa6b","e3bfc18a8b10bf2d1495eb4b3d4dbce361348fd743a785956d5aa868e62532de","b2656290b994b55e6cafe2640efdac100c004adec35498d4f470489a45a01862","6eab49aeb5385eedddd1c559a0fb5c09c8a18ee4c675ea1c9ccc061f7bc42851","e2acf71e1a4fc7f7a90e01d9c9c2c8e68dc42fb64a6e7276287bdc7ddea84214","d7eee876214292d6d5b868bdc75382459d63ee4ce8ddafdfe881efab51b5ef68","ab032d928152e2db5be177587327d54c90eb7c117f511db93430329ca0f377b8","f098324307a2ff30be1a9f32e72e3aaba90da04fd1e9f049c0769b079b6103fe","6049f94460f61904ef21883ba8e33ccb44b375beb0ab34061727f00a81aa4d8c","50de79e82b5c05faca1a582c3d607327af5ada600c6c04fd7e316d2f45e3d8a8","f01a152654a9a507506c715e69ee756fb7655868e592b39876129747346b37ee","9bffe80260c554aa2cbf095500c995460101af6eaf73c73a0e9a5fd010cb13ea","053dbae8c05eacde27db36ec5579374b5ae43908a0785232dd64a119f67e8312","f3b1803e1d654a91dc2f717a6303deda942fccaee3b214da79036ddedbc00aba","9841b6295555dd6eabc901bb6d3c1cd5c5bc54b98cb42fc51843495b5c30d0dc","bc0d319e41b6e74bad9b40e300ef0f5ace1c35b0e05735734e00a9a1b4529386","bebeb2d6b9908b8436e7287b8ac1181c64413f67ba95f75ded3394ac32e773f4","c8ea876fd7003a81023eed439b17a43102e6ed1098784770cf75c97141122aef","0f8e5ea2ae53ebd5cc361b68dd769c7ebab313df09ab3f3bada1057e8912718a","31776bf779655f6c80dbe834cb41c3fc3a5679813d009d54edbaa566aadc4449","37dd9cda7e4c1c3efad74cdc1305fe1b70a54fb25c1e960fcff5c1f95b857b2f","b027177cf9d90394842e000df982b32d996992a3270c48236b254ffa8862dc00","81800937cbae367db7745647bcbd75c38ae4e4114aed57ba00e14143a2771592","df3147e3f4c3f381fdc44804eeea2557af08f2ff5f05dd2f7e251b35d5974083","5c30fc9007e35a95a06d1b692099f6efc9bc1bb96a1d5a5d6bca96536c5b0d00","64c5f1364683f030776a3163d566cb2efd2069aae22c6e9d2b7e26ea1099d4ab","14fa28f24d61bda6cbdf507f9e8e1943995c4e5636f81e13125f3cbc7ac8d92f","c26f1d3fdb8f7fdf406eacd8b9dcb10db9fe3cc7e1e6a9eb34c5fd3d337efbda","4801ce5e0e889617c01743d837dea896b4665cfbae623a87a2397fab26f659fb","b833095a6a099770438573a7d76b9f914594012e547be2c556d1e1d3250b75a8","4e8e990f4db7856337b3d1653c79bc0516d3c8f354e7a6e8402d9dbbd7144e65","1fa883af678154c29e9bd700aca19b34652535836d9bf7a0b460b13eeb735b87","cc575e3fd7b401d7174141a186554fbb02dc4b8d331fedfa7b3100daa3b80ede","0e4a0b82e38b8363eed4d6a077911b99ca2e3cf1783b13429759286a390912e0","723b00629de441eafab07568c93668685b149345c2b05ad708a8a6454ec631da","b4323a664b69955890c49f0cc6085ed5e72694cdbfc41324ad2cffea4f638fb8","4b379fededb05ff467e513c3cf72bbf020eec7af35e6469e3254d5bc64d3a1a4","f04e225f4d8e584b1c831c637c4fe7bd87a883d6a497e69714a7a28e847ce3cd","2ded5138347ab78bdf2c26620590d02ebd17c27e1e066f288a36d945fcabed42","c0d39cde2ba477c45a0e9e2a9ec06105efa556a334e9a602fd1785416060d6be","78ec7867d878c548b5c7ed2666c6d53f47dfc69d0096808b9d7f51802566aaca","e6aa21fd5acdb192f250cdd88234ee6a7cf5cc9305da17154e61557444c61446","c08f744bbd44f2680fd88eb1639958049ba6474310e9bfcbf00b2b2d42189bdf","0d6054a6bc3a72dd52b8a7794a3fd190eb2158f87d2aa6b6988ad6f8068b89ed","8e352c0efe439c8168c631188927adfc249c92b71f016cd6e7ade1cc6f63e6c8","2e2de1897f5a1f98a8307938953ad1987b1457b140c0263b19de30763479c55a","f7f6f8cb688ee877fb46ac3f42b60eda69130cef419017e6ed88d6a2bf381647","ec46a2c7b6e2ac832c937a649b13ded708d1cc7a067ad64cb938dd1f441c993b","b2fd56f80464f3d91a0e73f5b644196e28b6dc1d1c9836a1ccf1db5d80f6a0ad","d352e51bbc82a60de52ac06a88644b2e73f2cb04ef4a7d93b7dbe365068dd4af","e3f2b9e7514ca65ac5ce5373be59f3322292182e02e36a6685f9cfd58b28de6c","13eb27b0a813189a3d0abf455f248b7357e378501a961979027bab62ce5ecfce","8839cd37fe3f2042169adecaf9e66f71ea4c1903423ef49b75db6e11c9bca531","1c4f801fa938dfff8ba0283c2bdedab2045f215369450d3fe6cefd10cf5a0755","798423eb5bfb9145647edc8ed7a0767d02bb4c85c6b00adf4db9cc3ac51d0d62","44ced48a3e22e8949f6bfbc99b780b6ec3f0f3235c0f57fd4c257171eab4dd84","878f780ef3f0f209808122ea1c7ff44748275b4cfba75ea40804e530c2f1abb2","e9b071d1470820ce48e6bc84e3ab4564a33ffa118451f693ddbd48932af9356b","a507de4adadb7e8cfde49db789c062c168907843b49d081fea1b79bcbd59dcf4","4a9c2514a2e2861e25ec956f4da6058e15dfad6a9238f91bf0c3abb8bf7bb57f","d4430a6173c7dca84d93735e97419ba6c5dc52ef09c880e860fe8084cd52986e","b4a8d42bc830833c7480258c34529d74f38940ae87675365f8233136a66d812d","61b1e746198b9347a1ad402da267fd4564d54322c7186a3945692cb32c59aaab","13b3e17dbdea4c62fa4b927b1d06ae4fdc2b35beb05ac20af9e6e706309f80e8","09897651e677150ac1d89f9978c6b51af312ef76de686148adaf8ea3de68ff2e","dd0c1145cb0c0810c14087524546684c8ba0cc57db8e8c9e2408c649d76c7b23","2f58b3aee27f7398c1a383fa7e7727654f03e03e172bff82639f0bb3e10ec6ae","de584fb280277e63c00cd5fa2c3f0bcfb73e1e21bc649c0530acba7f63f78de5","ce3f7939c0317c703adcc465382181b0ca8f81dfaeceaf23d546ca600f8ce5b5","f7d66ad8b8c2dc1afd84528f04feb85d18f4f98f1d18ec9d4eace61a546f102e","05501b15cfea24b2771b49cd0b22f2798bbcf234485d74981a786f7e5a1748fc","34424207792bae5c0a7a0ab55a3ce23c02ce8821ac776cee8d428c0a7bfd594e","0cabe23306fa31422636ba594ed34bb4a88e7ab11d301df5284faa0544c3a1c5","27ded2aca35542a4a09f8d3a693b067b5065fa947ab2160e60e38995f85155dc","87451be2caf8e2ff68bb1a0e717833eade17e51722f794ddaa9a12d1712d2e7f","1e103dc7088b204e29d4cbd6f06fdb04457a20222cb38edb9679398683d962d4","ce4372e2cd71e7b0046866206c79f017289aef907f25aca105e0bb2a47e4af58","ba7c5abb7a4aafde4cb9f6c6d0d8f40104bb95eea930c67d2e8b9b706c7621d5","553a8a343dc91dc8eac6972338c04f1a25f74c0cf8625460a78807a5f0a4ab44","f751a293408dad0e5db2dce0e145933c247809120686202390d08c4fd34190f6","02bf8212d26ce921fff01ba650cf10e7e8798a09e458e5ff978d87e035b31b14","ca48c69113aea0263d4c53655691a3ac013a94d7eaf1b40addcf0a2deaae37b5","a5d9a1a3e10a466aa66db4c27e52ed9f6356ca04ac5dc1150144519e4ed10d44","4b8e1cecf784a46d18c18c1f2a3635de2c694082946a3b25d9f70063d5d6e0b5","d295ea463f494f86669136ff6c28591c8db2616e5b1ad79f03d9f42212758cb6","09dae15420c131bc6a3ddd8ecdd5be7896fa62ff759e942731ac2ea32e762b34","4db477d4d7ed492862b36c76963ed59b34faffbdb81487b1596c60695d473341","842fdad56070483dfe030511b9be1743a4e1025c544f02c8524b9b2eae7b9576","3db908a469aef5106e9d2568a3a25cc4f3b0f20343525154f424fb7923495abd","a04aeba6a1323e8613f33cb75ad532dacfb47703ef16a2b19132866a38bacfe7","4f14982a91c67b93709de2d2b0acbcc9d96be3e35bb9c3e7254d9d5b4102e748","f911d7e57a38a3d36650257d850b74d07ac66996cc2395aa10e3b9e7fd0436c6","c16bb5cbf34f654b82757e42bb4e26d059220e70de3cecd5efcae7991f57eab5","388f0bae73dfdf424ce68b7cefd94bcf240d5069e287f9aa44ecc4c6158d07d9","30db41256ca755e46170d77d15d3a816573b2172cc2428a0f3d69f2086d1c012","1bd268ad8d4a33a2ff0ec102582851f69ef4425eb5c6817f2b3ebe4e1121fd26","9be9fa2ad677df2fb29f846d1e8a48786a339c45dce3c37aeb99af2fce4a1915","8e817cae6465c48cc7a34bdff73f723df7fb3ab612c82e9e4f310fcd419e8646","63b0adfc785281458279e5856cd200f1ce8fadc19a8d67b7687cce0fdf4ad51f","736042a11a451d682b2ee38cc334f70cd9985b5352004fd59c37d34026249945","afc2aa98e9958a720c80006acbad97d2ff65c29367e1f36611c489a1ee118b22","876f964e4f16edabd41027e4abaa3f8a6aeda0ce19c7d4e67a194557b54b6fab","38eef06fe69bbb915f536282ff7c292c04639e3d576d58a49d1e90ef527196a2","11d332d87547781f488740c22a66e9b9e4082f959048a00f02d582ddc4f12860","5869a53a27e1f7fa879fb805a30f101671bff660f669ae17217667c846f0d149","0b7d45d2bb8b3447b31c358e3f3550e0314f75fc76f67d4e5f3c4c84c8749ef3","221fd528946354d830e771ed9d4f7c6bbc5b532a4e1fbe8051ae2666d0847c1f","7f045b82df5f431f837390c22a2c35658959713bd12599806257727cbcdcbf1c","a019dfd1c3dd9c05e92099f9e544a0e63a08df0039b061ea842995837080d080","9e52d6fc2217c394a41eec5ca3fa42190bd9be1a2cf863f7e065a13ad581015b","d84acd47fce20eb719b2375094e2bd222fb8eb50a876cc72753625e98777c859","d262815cc9e0bc51a685aa8ec6f56c9a7a7bf5ac024208a9728a0987ad8bfe0e","13261e6804d7e8070708d36ea504aaf37e1d46c89776d607e94541c110e7a3d6","debe6ab96531c19b627feae9b975a132a4cdeaad58188f34550f7821942cdb1c","a9dbc621de1b4661d1beeb586ea7c415d485d04022ad44bdfe00e41124d22c41","70c0c12691b22f5c7c4c09bb574887bfc77142fe9fcf6b1affc088bdb1fc480f","f7a4d387ad7fc9dca7a2197dbe5d7e5435a9c051589d4cf55930f271131e6817","06aa6da5d72e34291e11e03a994be8e4fd2d6da908cafc160c8f8b3111a3bfe4","84a7c5a51285da53bc0e548850adbe4c4a48e2c79d142f420e70c724cda08abb","02f942620720d49d6b84b7b58514fa87a905eeca44e57a281813726548c8e709","aec5846e3da757ec64a2f1cd2d00a9abb16016c4731be01d0f22f9a0095b3ce0","7a8c4ebdbc2a4b8fa750a434907f65c1ef172d0a8ce06796b987ed661015782d","a4b7d3fa206dd9ba8be67de430764a665947082b07f029672a440d2f0dfcdc35","fc62ec250788c4b03d7af3a3c1d0499eebfbe38867dfbb4b738d51f33578a2d7","5829a3088359b8d6af30e786c0d3e28ee9e15e23281bb4fb8d07513a2bbd98fd","bf338a71abf1293386086a8f6b3a57e3dcc76f7d63ecd808eba7ea00d5edd286","08bcc1f8fee417f45a074cf822d1d0848d37bd8f52dbbe336e2e5619aca50647","ccab2caf5c037e1d4522246c0a87675a7aeb1aa9fc23bee76b1dc135bba2104b","a607147d53272b43503684a14891610ff15197d85eb39feb386d0dc66e991acb","0f3d70da43d7579832b931a9675c86156be54dbd467f47bfeaa5e591d349c768","9268108f1f2def6b335388a4f34bd184cd8b4854e0a54ab85de565f55f81be12","19bc8e14e1ffae7a8147662b9b1eeac79c4037c8447651b182e6a6dfda63bf7f","921938780b87d72d17a00fc61f80516c723a4daa73015d2949ef420e085a918a","9874e153efdf24175131ff8e678db6956525f75a6d95168398ace5e25655225d","69df59c5d86d78e387eac890b5f8c7ab7b5b68962cd7ff5b77e1fe97b6342f04","a2fcb274aa68c2237edb520cd3a54bff2203f237fa2bd8326d8620c35a0e8bee","d83263a1abb74bfed4c2748a8e181e97e710d532104f5ba8a6458be5c9ded464","6ed8b3b00b53a43db74041c6d3637f8eea508a324419d5d745f9335dd218d568","bfd7174d5a4de03ce64db5ba26fee050efa0c43d906452c0e3c5f750dc8c6998","423268a14f8cd112c3746ec5528f2a425adec9f0abc45e525aae9d54b378762d","f88e5b1376d2eccf8399f8005d921ea1b13f049bcecdc31b3752311950f03c42","cb47de952fc15ce96880d0c30e10a72073022bec8307b1230c2f303cd6622239","c879b7a8573bfe6f75e7fd29445af276bca450ce56e7b48172f88efaa442cf40","4a99a48d6990223a6eeb811c17ef17204febc6d4fba394f286c5aea21caf43eb","82a86282f0a951afab5b509da77fba3006e986a075bd64d1d06db26fd635f220","4b3c32870abd10e454744a4bee8475ce654991ce4aa9287928a17491aa38a6a2","9bceb2c3a158f54b2398841d02f7a7a31df940cb90322b43bd211fb2020b145d","7d3287e8968cbd4fb1047dbfa61e8d5539c0cdbbc5f5802cf6ee1f11708930b2","636c9f06df5f7ecc1847a98d2963a09e9460f4552dc8c203f447af8ff7d060ec","b014d7af72076a3bfd5d9a710623ae6ecbb55b4c069bcc23c41cc219c57b14ca","a64ec866138d2dae51ef6b94bf2b352d2acb383aedcf5976dc36389e27b0aa3a","882cc90ef2a309b77a60dcce6cab81328499bb47587dce292b38d3519c6c8394","02e3010879d3018585a9ff2e963af8e3f5caca993c532c2220eeb1b45a11cfe9","d0c23cc4f54db1bb6bf7dde080c56c7a2abc3310518cdf8e884b4904ab1bf5b4","c159d276c7a7debf45d949ad448d6dc93445a926cd8eb76d48aceb7773d344ef","ffbebd238e0dbeb7da6a4478e7a0ce4bbda5f789e134fe49b4fd1e6d18d3ab7e","5289392088136105e55d7c489d2280c4583f8f7281b77eed3746b2609eddcd5a","33be7a3da4878aeb17da49c0bf374b8c0a8e7926a23cfea292316a7a2ccda4a6","5bd637837ef59a145b3c4912a23bbced04fc22a756e9d6f60cdb9d15be9d9c1d","cfd0d1e4d035baf9efb522a57dd49de10c257dca36353792bcbf055e29c8bc47","99597e0fdde015c3a4b83d9c4fd34b9709fb1b3f598cc3a7dbe34dbd8c7ca96d","02860d062cbee8d613ee767bc3dd07a71ef7e2017effc0a4dc305b1e41f9cbf2","bd73aaccea2ab75aa47e87a5f5e43abaebbf72ed00d9339f093298e3129c9b3f","a4534dbe0bd2abe2eb7527ae1fd990e8e404163f48fe675b794debbe7c63c461","9f33ad4e5d5a6bfb1a126a78462447c3a8993d6ba5b97695a5549662db39b733","2250c0bb781af780c38e7e7b0b5a96a7c9d06c8cf0221b4b1847cbf5ff7a463c","52beb91f2335f3e62766682cf73c0edd070d729ca17e7949f04d7ec8e7408f05","f09e1c1ab3686f4eb0dfdf036ddc6871b74df080fc69f24cecb2cc8d3973e147","b4c7966b8c8f647f1c2adfcb93cac25880260fca8ededd33d2e648a6f4a09fe0","e67709ede217673ecf53c24436c1675df7e738c2d43570973d7b18bb2ecfdece","8ef4432db0d8380322d4ea1cb49cfc0be1257dd1ef102f653a8ce5ab6ea1b4e2","4b7d8d8c756bdd8ffda46d2522a4b8e28660e90d8fd375b2e534d33fcefd18fe","c8b19b7a6357ddfce5f2e75a5c4e8abeb752f595b96a1034a4ae053965d6c4bb","fc702e18a35f9968c62a516510157e056e1fc6340483844e9dd79e1c8c5b373d","cfdae246948113b1114fc6803a33060fac4b5dd22f047ec5969d5685fa952bab","9dedb414c09e12a98163b346878d8c57b3df0ec44662cf47638e385b65a8b279","e3050b97a2b2370c6555e17d5c5c23720ff6d5cf8811c64064cca99ae1e88323","27d5bdd0dd73211f69b539a64d3e7564f4b8bc9df431e44477fdff71e4724979","af92248075f2070f44f9817120e7a1b7ca621d66bed2a69a69715d147cf125b2","bc5cdc8597ba4548b91cdd2ddddd996f5441acf76192fae49ad78dd91d162d9f","8b157465e164c37d7f50b032657029a9440027bacb63e0a0422c5903e9009555","90823973681cd3bf25e61792de6d4867a506d0b1c0cc1be63d3417e3e2c817ca","3a57cdf3165e34e394a9510116433248ce234cbac86115e4cc3f61205db4d1ed","5ba05a9e9155e96bc4b9aeaf3ed99bde4284adfcbaf666152eebd596a2d5cbad","25120cc5b77f87056bb13b0c01a05168d6485323d5972feca20cea124a4f618f",{"version":"397fe1ca4ecca584df1b191b80066313ba83e2120c8c6662511d1ae61c28a7eb","affectsGlobalScope":true},{"version":"fd45f5d7408b4ade5b812478e612b59801d371e4b8e467cf1b1aca46acd1564a","affectsGlobalScope":true},{"version":"b9241ecb5024beeaeb98fb558000dbc55e650576e572d194508f52807af6bcba","affectsGlobalScope":true},"3039ca5b4c980b09439c8b8962ea05552573fd995304d31957d47e01a6bca5ab","2e5ac0dd461b94010e16057c26d281841e3a935df927d76123b6864880086a26","b911176e7778c30f6549f86daae0353c53730eb0ee59b6476f1072cb51ab1af3","f8cc7ac396a3ea99a6959ddbaf883388260e035721216e5971af17db61f11f0b","895bedc6daf4f0da611480f24f65df818ea9e01404e4bf5927043dbf4eeed4d1","ea4facc7918e50e285a4419f7bc7ffdf978385899a3cf19ef7d7b782b896616d","8db893a4613484d4036337ffea6a5b675624518ad34597a8df255379802001ab","5828081db18ff2832ce9c56cc87f192bcc4df6378a03318775a40a775a824623","33b7db19877cf2f9306524371fcfc45dcb6436c8e905472ede7346c9f044bf20","b8eb76852bc6e72782541a2725580b1c3df02a0c96db570b0a7681567aeed598","6a7b38162c0cff2af6d2cbd4a98cfac6c0ea4fb1b5700c42f648de9b8c2e8e1f","19828d5df3be9b94598e5c25d783b936fcccaa226a2820bacee9ea94dc8aff2f","5d45955831c840d09b502ce6726a06435866b4736978e235a7d817ed45990df7","3bdf7ca46ef934ee671b3dd0e3d4cddcaecfe6146811b330743acdfb8e60f36c","70dab20ce12f8d153044fc487f2bfd40d21fc64329446f02c6a94b9759c13265","c1eed15acf77bbaa4a4840edbdcf70ff2f3c2a0f5af498578ce020e2f2c73f7f","71943244e9813364dac70c5be97fdce7bc775c96bb212d97a60ba072344dcbbc","6f1fa6fc9b169b165be0d8550a3ca0b5181af0c41e4e1e15f5e6bcb2a6e1c344","e311e90ded1cd037cbece1bc6649eaa7b65f4346c94ae81ba5441a8f9df93fa3","8eb08fff3569e1b9eddb72e9541a21e9a88b0c069945e8618e9bc75074048249","d596c650714d80a93a2fe15dce31ed9a77c2f2b1b9f4540684eaf271f05e2691","8f9fb9a9d72997c334ca96106095da778555f81ac31f1d2a9534d187b94e8bf6","aea632713de6ee4a86e99873486c807d3104c2bf704acef8d9c2567d0d073301","1adb14a91196aa7104b1f3d108533771182dc7aaea5d636921bc0f812cfee5f5","8d90bb23d4e2a4708dbf507b721c1a63f3abd12d836e22e418011a5f37767665","8cb0d02bb611ea5e97884deb11d6177eb919f52703f0e8060d4f190c97bb3f6c","78880fa8d163b58c156843fda943cc029c80fac5fb769724125db8e884dce32d","7856bc6f351d5439a07d4b23950aa060ea972fd98cbc5add0ad94bfc815f4c4c","ce379fb42f8ba7812c2cb88b5a4d2d94c5c75f31c31e25d10073e38b8758bd62","9d3db8aef76e0766621b93a1144069623346b9cfccf538b67859141a9793d16d","13fb62b7b7affaf711211d4e0c57e9e29d87165561971cc55cda29e7f765c44f","8868c445f34ee81895103fd83307eadbe213cfb53bbc5cd0e7f063e4214c49b0","277990f7c3f5cbbf2abd201df1d68b0001ff6f024d75ca874d55c2c58dd6e179","a31dfa9913def0386f7b538677c519094e4db7ce12db36d4d80a89891ef1a48f","f4c0c7ee2e447f369b8768deed1e4dd40b338f7af33b6cc15c77c44ff68f572d","2f268bd768d2b35871af601db7f640c9e6a7a2364de2fd83177158e0f7b454dc","73bfa99afd564cfef641ccb4fdef0debdb3c49f0a817085d68fc6b6508266f09","a004a3b60f23fcfb36d04221b4bef155e11fd57293ba4f1c020a220fadf0fc85","4e145e72e5600a49fa27282d63bb9715b19343d8826f91be0f324af73bc25322","62f734f7517d2ca3bf02abddaf8abf7e3de258667a63e8258373658bbb9153b6","df99236666c99f3e5c22c886fc4dba8156fed038057f7f56c4c39a0c363cc66a","b4bce232891b663cc0768f737f595a83de80b74671db22b137570ef2dc6b86ef","781b566c3eccba1a2cafbb827fb6fc02d5147c89a40e11c7892057481a195270","c9befaf90879c27ee3f7f12afd15b4531fbbea9ec37d145b83807a67d9f55c82","8630f26d1038328e6b9da9c082f6fa911903bc638499baa6cfab002b5a70af96","73474d70a9b4f02771119085c4cd7562be4169e7973544c9541341ca2931aa3d","54da497c3b3b94fae91a66ed222e21411dc595a17f9e6bd229e233d0de732691","803da2f4e024efa2edc55c67d35c5240e7ae599baf9263b453acd02127a582e9","b8b070df71250096699ad55a106d161d403347ed335f72c5ae8485e5d858524d","a9716557f56781aef13d6d3c5dafc61236f64bfd48d462c4848a7eca25f924ff","3d15b5e24065431bf7831b8e84000c0e767d921135af86ef0b0c034f14df5d8f","a563202fc316d8926dc83759cec155d5c028a7828996cbd283470ac7e8c58727","e5c004f39619ebaaa2475b18e949e12e51ff629132f48d56608081e5f0195577","e6b7a14eb53f023f455f4513b6a560f004fa1ebf6cc298b479be796541e322e6","771bf8091a4e40be8f539648b5a0ff7ecba8f46e72fc16acc10466c4c1304524","cb66d1c49ad20e7246b73671f59acaaaac72c58b7e37faae69ae366fd6adf1d3","e5c1c52655dc3f8400a3406fd9da0c4888e6b28c29de33bee51f9eaeda290b4d","1e28ee6d718080b750621e18befe236487df6685b37c17958520aaf777b7aeff","8891345dbe1920b9ed3f446a87de27b5cd6b2053112f6ff3975a661f9a03ec34","a72e21b05b937630b97b1d36bb76b879bb243a021516aef10701775f2da7f872","4debe398f42800c1359d60396fc76aa4fa34a23a96b597672b5c284fd81c0158","a720d8028d38f2b94855967789252c6148957dcd24e280d193b78db00eb3a099","1b0818297187a33e2c24c39145b409e11624523d32364edc22bceaf1f4c86f1b","332e362ba8bd05237c661ba685b2c37e9cde5e0876cb81bf515d15623bdee74c","84648722d2b1f16c55cb68dbfaf18b913a13a78274641f7236eeb4d7088f6db8","f63d313c2673117608b3ed762ac07f618ee873bee3764406b06bcfcb5a713afe","2e2a2a0f7ef2a7587cfe40a96dbca31e8badb15a8a42bf042fe7a63abc9e2f27","2bb32fb3f0fe14c48170dcad3d2a501c1883516d4da9cbd0a2043d90c9789a7b","352532af4d27bdf545d9bb20f0c55758138327404bd86f0934edc7ded76be7e6","64d93f4a24f8a70b64658a7d9b9e96bd46ad498ad5dc9cdb9d52da547e77ff68","8a728de3047a1dadcb69595e74c3d75bc80a2c8165f8cf875ab610042a137fbe","3eafed0be4b194295bcde379e7d083779d0f27f31b715738a3beac49547dc613","7e74740cb7a937af187118ae4582fbe5d4d30b34e9cddec2bd7f7a865e7824ca","8cdf90b59995b9f7c728a28e7af5dc4431f08f3346e6c16af49f548461a3e0aa","1d472b3eedeeaab5418ea6563734fffc68c404feac91900633e7126bee346590","6cf7182d798892394143549a7b27ed27f7bcf1bf058535ec21cc03f39904bfb3","abe524377702be43d1600db4a5a940da5c68949e7ac034c4092851c235c38803","daf4418239ceadb20481bff0111fe102ee0f6f40daaa4ee1fdaca6d582906a26","8a5c5bc61338c6f2476eb98799459fd8c0c7a0fc20cbcd559bb016021da98111","644cf9d778fa319c8044aed7eeb05a3adb81a1a5b8372fdc9980fbdd6a61f78e","d2c6adc44948dbfdece6673941547b0454748e2846bb1bcba900ee06f782b01d","d80b7e2287ee54b23fe6698cb4e09b1dabc8e1a90fb368e301ac6fbc9ad412e2","60b678d3c92834151ca6701c399c74c961193c06cc9d97da32cc4ad22ee5951e",{"version":"c7eebbc98b3e28df60899db055f0b1940295e6c68173e1859b97c062e02e00cf","affectsGlobalScope":true},"816f825b072afd246eb3905cf51528d65e6fe51c12a1f8fb370c93bb0e031c9b","f6a64974d6fab49d27f8b31578a08662b9a7f607de3b5ec2d7c45b3466d914fd","a8e9d24cd3dc3bd95b34eb6edeac7525b7fdbe23b373554bdc3e91572b8079ee","1d5fd841722ce9aa05b9d602153c15914108bdaa8154bdd24eddadb8a3df586c","14788c10b66324b98feee7a2567eb30d1066e11506e54bf1215b369d70da4932","316785de2c0af9fbd9f2191904670e880bc3836671dd306236675515e481973a","070d805e34c4b9a7ce184aabb7da77dc60f2bdb662349cf7fc23a2a69d17de8d","092deae5b432b6b04f8b4951f1478c08862e832abd4477315dba6ea0c39f1d9e","27d668b912bf3fd0a4ddf3886a8b405eed97505fdc78a9f0b708f38e3e51655d","72654e8bed98873e19827d9a661b419dfd695dbc89fd2bb20f7609e3d16ebd50","66bdb366b92004ba3bf97df0502b68010f244174ee27f8c344d0f62cb2ac8f1e","ae41e04ff8c248ab719fe7958754e8d517add8f1c7abcc8d50214fd67c14194d","558008ff2f788e594beaa626dfcfb8d65db138f0236b2295a6140e80f7abd5d2",{"version":"6573e49f0f35a2fd56fd0bb27e8d949834b98a9298473f45e947553447dd3158","affectsGlobalScope":true},{"version":"e04ea44fae6ce4dc40d15b76c9a96c846425fff7cc11abce7a00b6b7367cbf65","affectsGlobalScope":true},{"version":"7526edb97536a6bba861f8c28f4d3ddd68ddd36b474ee6f4a4d3e7531211c25d","affectsGlobalScope":true},"3c499fc4aad3185e54006bdb0bd853f7dd780c61e805ab4a01a704fa40a3f778",{"version":"13f46aaf5530eb680aeebb990d0efc9b8be6e8de3b0e8e7e0419a4962c01ac55","affectsGlobalScope":true},"17477b7b77632178ce46a2fce7c66f4f0a117aa6ef8f4d4d92d3368c729403c9",{"version":"700d5c16f91eb843726008060aebf1a79902bd89bf6c032173ad8e59504bc7ea","affectsGlobalScope":true},"169c322c713a62556aedbf3f1c3c5cf91c84ce57846a4f3b5de53f245149ec7b",{"version":"b0b314030907c0badf21a107290223e97fe114f11d5e1deceea6f16cabd53745","affectsGlobalScope":true},"7c6c5a958a0425679b5068a8f0cc8951b42eb0571fee5d6187855a17fa03d08a",{"version":"f659d54aa3496515d87ff35cd8205d160ca9d5a6eaf2965e69c4df2fa7270c2c","affectsGlobalScope":true},"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",{"version":"f3e7a4075f7edc952560ec2254b453bfc8496d78e034768052347e088537694b","affectsGlobalScope":true},"4a4d7982941daaeb02f730f07578bce156d2c7cabfa184099321ed8b1e51591b",{"version":"cc8e57cfe18cd11c3bab5157ec583cfe5d75eefefe4b9682e54b0055bf86159f","affectsGlobalScope":true},"75f6112942f6aba10b3e2de5371ec8d40a9ab9ab05c8eb8f98a7e8e9f220c8a2",{"version":"8a3b75fccc93851209da864abe53d968629fab3125981b6f47008ec63061eb39","affectsGlobalScope":true},"4aafdcfff990abfe7feb894446ab43d2268657084ba656222e9b873d2845fe3c",{"version":"d6f55de9010fbefe991546d35da3f09ae0e47afae754cb8a4c867fd7e50dcec0","affectsGlobalScope":true},"afac637a8547d41243dd8c4824c202c9d024534c5031181a81dece1281f1e261",{"version":"1ce2f82236ecdd61ff4e476c96d83ce37d9f2a80601a627fe1d3048e8648f43c","affectsGlobalScope":true},"42d908b851ddcf6df729c0a2ae56f151bad6610ea368729d68f0c8fbbd779913",{"version":"592e99b73ae40c0e64ce44b3e28cea3d7149864f2f3cbc6ccb71f784373ade97","affectsGlobalScope":true},"fa601c3ce9e69927d13e178fdcb6b70a489bb20c5ca1459add96e652dbdefcf6",{"version":"8f8ebce0e991de85323524170fad48f0f29e473b6dd0166118e2c2c3ba52f9d6","affectsGlobalScope":true},"e58a369a59a067b5ee3990d7e7ed6e2ce846d82133fb5c62503b8c86427421a4",{"version":"f877e78f5304ec3e183666aab8d5a1c42c3a617ff616d27e88cc6e0307641beb","affectsGlobalScope":true},"82a66c8db63050ce22777862d6dc095b5e74f80f56e3a2631870d7ee8d104c9e",{"version":"4fc0006f46461bb20aac98aed6c0263c1836ef5e1bbf1ca268db4258ed6a965e","affectsGlobalScope":true},"e086e212ddb5de48f83d971e892949a9ed5ada7134b3116f17768b6885bce6f3",{"version":"867954bf7772a2979c5c722ef216e432d0d8442e995e6018e89a159e08d5d183","affectsGlobalScope":true},"6cc643a497641f28562d8a24b3bd6c4252f3476b462ea406f3123ae70be343ce",{"version":"cd8a7e7d61af5ca34b39095ab24bdcb308bfd4ab379df8ef9d53ce9fa83187a8","affectsGlobalScope":true},"9e837aadb58587a9f79d1ba6a1625cfe40e4077c6bc89cd1c1d5886a2d2489cc",{"version":"544f8c58d5e1b386997f5ae49c6a0453b10bd9c7034c5de51317c8ac8ea82e9a","affectsGlobalScope":true},"2382c18dddfe93b455dfaccc5e6ad795cc33ba8a6a72de41622ef03dd27e377f",{"version":"ae9b62dd72bf086ccc808ba2e0d626d7d086281328fc2cf47030fd48b5eb7b16","affectsGlobalScope":true},"b03e600a48c41adfad25cda292a2bcd87963f7fce09f3561978482f9f6530fc4",{"version":"cc1bddca46e3993a368c85e6a3a37f143320b1c13e5bfe198186d7ed21205606","affectsGlobalScope":true},"34cb99d3f4d6e60c5776445e927c460158639eeb8fd480e181943e93685e1166",{"version":"c77843976650a6b19c00ed2ede800f57517b3895b2437d01efc623f576ef1473","affectsGlobalScope":true},"c8db20febc70a33fc8668c2f6475c42be345a0545f6bd719f787b62e60d8f49e",{"version":"5ebba285fdef0037c21fcbef6caad0e6cc9a36550a33b59f55f2d8d5746fc9b2","affectsGlobalScope":true},"85397e8169bdc706449ae59a849719349ecef1e26eef3e651a54bb2cc5ba8d65",{"version":"2b8dc33e6e5b898a5bca6ae330cd29307f718dca241f6a2789785a0ddfaa0895","affectsGlobalScope":true},"cc2c766993dfe7a58134ab3cacd2ef900ace4dec870d7b3805bf06c2a68928bd",{"version":"dde8acfb7dd736b0d71c8657f1be28325fea52b48f8bdb7a03c700347a0e3504","affectsGlobalScope":true},"96c711d561eaa29cec567f90571ea515f91412bb005ac2a4538bcadf0e439fa5",{"version":"34c9c31b78d5b5ef568a565e11232decf3134f772325e7cd0e2128d0144ff1e5","affectsGlobalScope":true},"7e72ce64e021f6f43c8743682a3c7cf2035166f8283ca675a4589e1bd8a63e55",{"version":"60cc5b4f0a18127b33f8202d0d0fde56bc5699f4da1764b62ed770da2d5d44f1","affectsGlobalScope":true},"5da9bade8fea62743220d554e24489ea6aa46596e94e67cfff19b95804a54a5f",{"version":"d11fa2d42f762954eb4a07a0ab16b0a46aa6faf7b239f6cd1a8f5a38cb08edcd","affectsGlobalScope":true},"87daa4e406afddcea17302b85e08a2de9444fe561347cd1572ffa671c0171552",{"version":"781afd67249e2733eb65511694e19cdcdb3af496e5d8cdee0a80eba63557ff6e","affectsGlobalScope":true},"6b32428a82779c0a33356f537ec131882935bc76ad0371722618a9ac6403cca0",{"version":"f3275e1f0e5852b1a50fd3669f6ad8e6e04db94693bcfb97d31851e63f8e301e","affectsGlobalScope":true},"de82ff7892200413e9e0c54b038d87099de9d74a9e815b3cb6e9908f950f6ccd",{"version":"8a6ecff784dafbdb121906a61009670121882523b646338196099d4f3b5761d8","affectsGlobalScope":true},"1d5f5827fdeb0d59f76a1ee6caf0804d5d3c260e60e465b0b62baea333199e62",{"version":"256bdff4c082d9f4e2303138f64c152c6bd7b9dbca3be565095b3f3d51e2ab36","affectsGlobalScope":true},"0b14c87ea4887402356f7c8b321dfd944880ae76cd703e342c57ac7a83de4465",{"version":"e214a2a7769955cd4d4c29b74044036e4af6dca4ab9aaa2ed69286fcdf5d23b3","affectsGlobalScope":true},"85647ff695641f7f2fdf511385d441fec76ee47b2ed3edb338f3d6701bf86059",{"version":"25659b24ac2917dbfcbb61577d73077d819bd235e3e7112c76a16de8818c5fd6","affectsGlobalScope":true},"d6f83ae805f5842baa481a110e50ca8dbed0b631e0fd197b721de91dd6948d77",{"version":"7402e6ca4224d9c8cdd742afd0b656470ea6a5efe2229644418198715bb4b557","affectsGlobalScope":true},"36b19abb9d0a0e6809f9493786fe73c3058f66f0a5778554b30bd09d6d21d3d8",{"version":"242b00f3d86b322df41ed0bbea60ad286c033ac08d643b71989213403abcdf8a","affectsGlobalScope":true},"009a83d5af0027c9ab394c09b87ba6b4ca88a77aa695814ead6e765ea9c7a7cd",{"version":"4dc6e0aeb511a3538b6d6d13540496f06911941013643d81430075074634a375","affectsGlobalScope":true},"3a9312d5650fcbaf5888d260ac21bc800cc19cc5cc93867877dfeb9bbd53e2ca",{"version":"7ed57d9cb47c621d4ef4d4d11791fec970237884ff9ef7e806be86b2662343e8","affectsGlobalScope":true},"3bee2291e79f793251dcbea6b2692f84891c8c6508d97d89e95e66f26d136d37",{"version":"5bd49ff5317b8099b386eb154d5f72eca807889a354bcee0dc23bdcd8154d224","affectsGlobalScope":true},"1d5156bc15078b5ae9a798c122c436ce40692d0b29d41b4dc5e6452119a76c0e",{"version":"bd449d8024fc6b067af5eac1e0feb830406f244b4c126f2c17e453091d4b1cb3","affectsGlobalScope":true},"b6ce2b60910be81d4f2000ffe0bdbec408d6423196f6ad00db2a467cd53d676b",{"version":"dd5eab3bb4d13ecb8e4fdc930a58bc0dfd4825c5df8d4377524d01c7dc1380c5","affectsGlobalScope":true},"f011eacef91387abfde6dc4c363d7ffa3ce8ffc472bcbaeaba51b789f28bd1ef",{"version":"ceae66bbecbf62f0069b9514fae6da818974efb6a2d1c76ba5f1b58117c7e32e","affectsGlobalScope":true},"4101e45f397e911ce02ba7eceb8df6a8bd12bef625831e32df6af6deaf445350",{"version":"07a772cc9e01a1014a626275025b8af79535011420daa48a8b32bfe44588609c","affectsGlobalScope":true},"6d0790ee42e40b27183db10ce3be3f0e98dc3944d73c9a4c092bf5ec3bb184f7",{"version":"5be6cb715e042708f5ec2375975ba7a855f54d3554cf8970cd49d0434ad5c235","affectsGlobalScope":true},"02fbf1f4aabb776e2cf229fd74840a27eee5a08642b8ca0677e680a8427d6d12",{"version":"4d13cccdda804f10cecab5e99408e4108f5db47c2ad85845c838b8c0d4552e13","affectsGlobalScope":true},"780abc69f1e0ed0a3ed43cfaf201378faf6e8d8ec13354ed7169159cdeead3b9",{"version":"7ced457d6288fcb2fa3b64ddcaba92dbe7c539cc494ad303f64fc0a2ab72157d","affectsGlobalScope":true},"5d2721c49e058b8f28e495a54f709a004571cd3f57a62df63ed3eddb9e860af1",{"version":"0ccde5fc989806345b5ecca397796e26bbbca2882297adea57009022be7a300a","affectsGlobalScope":true},"730592593eaba845555f4d8f602d8c066972c97a3a8522a0c6f8f721e36bdc90",{"version":"725128203f84341790bab6555e2c343db6e1108161f69d7650a96b141a3153be","affectsGlobalScope":true},"e6ed9d8801e5fddc1a4260510e4266fbf80d5767cf2b9a6cbe8d0eb39d45971d",{"version":"947bf6ad14731368d6d6c25d87a9858e7437a183a99f1b67a8f1850f41f8cedd","affectsGlobalScope":true},"8eda6e4644c03f941c57061e33cef31cfde1503caadb095d0eb60704f573adee",{"version":"0538a53133eebb69d3007755def262464317adcf2ce95f1648482a0550ffc854","affectsGlobalScope":true},"a1dd4d1eada136ec8afb47871da02c1a28be6adc81717106ded5fcdd6548835c",{"version":"8d3ccb8e37673a205fb24f1a3ce7bc9237d32be05494c240245e3a783dd8e16d","affectsGlobalScope":true},"92492e2b8992cc1d68eca60f289ce9fa29dda1eb4d12eed577bcdb958666754b",{"version":"d155bad43ed0facccf039f4220d5d07fbafab34d9b1405e30d213d1ab36af590","affectsGlobalScope":true},"4a5259be4d6c85a4cd49745fb1d29d510a4a855e84261ad77d0df8585808292c",{"version":"220f860f55d18691bedf54ba7df667e0f1a7f0eed11485622111478b0ab46517","affectsGlobalScope":true},"3bee701deb7e118ea775daf8355be548d8b87ddf705fe575120a14dcace0468a",{"version":"9c473a989218576ad80b55ea7f75c6a265e20b67872a04acb9fb347a0c48b1a0","affectsGlobalScope":true},"5f666c585bb469b58187b892ed6dfb1ebf4aa84464b8d383b1f6defc0abe5ae0",{"version":"20b41a2f0d37e930d7b52095422bea2090ab08f9b8fcdce269518fd9f8c59a21","affectsGlobalScope":true},"dbac1f0434cde478156c9cbf705a28efca34759c45e618af88eff368dd09721d",{"version":"0f864a43fa6819d8659e94d861cecf2317b43a35af2a344bd552bb3407d7f7ec","affectsGlobalScope":true},"855391e91f3f1d3e5ff0677dbd7354861f33a264dc9bcd6814be9eec3c75dc96",{"version":"ebb2f05e6d17d9c9aa635e2befe083da4be0b8a62e47e7cc7992c20055fac4f0","affectsGlobalScope":true},"aee945b0aace269d555904ab638d1e6c377ce2ad35ab1b6a82f481a26ef84330",{"version":"9fb8ef1b9085ff4d56739d826dc889a75d1fefa08f6081f360bff66ac8dd6c8d","affectsGlobalScope":true},"342fd04a625dc76a10b4dea5ffee92d59e252d968dc99eb49ce9ed07e87a49d0",{"version":"e1425c8355feaaca104f9d816dce78025aa46b81945726fb398b97530eee6b71","affectsGlobalScope":true},"c000363e096f8d47779728ebba1a8e19a5c9ad4c54dbde8729eafc7e75eee8dc",{"version":"42c6b2370c371581bfa91568611dae8d640c5d64939a460c99d311a918729332","affectsGlobalScope":true},"590155b280f2902ebb42a991e9f4817ddf6558e5eb197deb3a693f5e0fc79bd9",{"version":"867b000c7a948de02761982c138124ad05344d5f8cb5a7bf087e45f60ff38e7c","affectsGlobalScope":true},"6f1d28967ec27ef5d244770ac80a62b66f10439aea63ed52e0604a18aad6468c",{"version":"02c22afdab9f51039e120327499536ac95e56803ceb6db68e55ad8751d25f599","affectsGlobalScope":true},"aba5fbfef4b20028806dac5702f876b902a6ba04e3c5b79760b62fc268c1bc80",{"version":"37129ad43dd9666177894b0f3ce63bba752dc3577a916aa7fe2baa105f863de3","affectsGlobalScope":true},"68526c897cd9e129d21f982679011d64068eac52cc437fce5e48bc78670356f3",{"version":"31f709dc6793c847f5768128e46c00813c8270f7efdb2a67b19edceb0d11f353","affectsGlobalScope":true},"eee3c05152eff43e7a9555abbef7d8710bfdb404511432599e8ac63ae761c46c",{"version":"018847821d07559c56b0709a12e6ffaa0d93170e73c60ee9f108211d8a71ec97","affectsGlobalScope":true},"b50322892db37ef61b48411c989f4cd36b3f41205ad10e7c03f14afade571256",{"version":"7832e8fe1841bee70f9a5c04943c5af1b1d4040ac6ff43472aeb1d43c692a957","affectsGlobalScope":true},"9f2282aa955832e76be86172346dc00c903ea14daf99dd273e3ec562d9a90882",{"version":"013853836ed002be194bc921b75e49246d15c44f72e9409273d4f78f2053fc8f","affectsGlobalScope":true},"0e9a7364eaf09801cbb8cf0118441d5f7f011fc0060c60191587526c448974c4",{"version":"e08392a815b5a4a729d5f8628e3ed0d2402f83ed76b20c1bf551d454f59d3d16","affectsGlobalScope":true},"6a7f172fb4524b4091b793d0e2cccdb365876dcf7f056552a93fbf6c2c1d64d9",{"version":"c3dfd6032ba0bc68520b99fc40cb45f46c73f4c98dedcde79b181f1f0632c262","affectsGlobalScope":true},"261f0f336c13435274021ab058138312b2443bd61723de6acbc4e57a8cecf349",{"version":"5768572c8e94e5e604730716ac9ffe4e6abecbc6720930f067f5b799538f7991","affectsGlobalScope":true},"198075277aef627743ef66a469881addbbf2f6c4c508ffb4c96de94137ca8563",{"version":"e2ae8c8fcfb98fae10647c9159915deea2073bdfcc3fe99b5846fd9563867399","affectsGlobalScope":true},"d0984177c1dc95545541f477fb0df1fb76e7454a943c98ed208dc0da2ff096b2",{"version":"f366ca25885ab7c99fc71a54843420be31df1469f8556c37d24f72e4037cb601","affectsGlobalScope":true},"a05b412a93ba43d2d6e9c81718dea87a42c7e4f9e8b1efbaafee03a94eaf4b7a",{"version":"163cc945edad3584b23de3879dbad7b538d4de3a6c51cc28ae4115caee70ce21","affectsGlobalScope":true},"4fefff4da619ba238fccd45484e9ee84ee1ae89152eac9e64d0f1e871911121c",{"version":"d604893d4e88daade0087033797bbafc2916c66a6908da92e37c67f0bad608db","affectsGlobalScope":true},"56ce2cd3aa0ebbcf161faed36a9d119e5ff6f962993f1af29b826eff1801bad3",{"version":"dc265f24d2ddad98f081eb76d1a25acfb29e18f569899b75f40b99865a5d9e3b","affectsGlobalScope":true},"7c1538394a43ce6d7b7c471b87cc97c487bc3bff37fdd2fc5f659c67445a3a03",{"version":"dd7f9be1c6c69fbf3304bc0ae81584e6cd17ab6ad4ab69cb8b06f541318cc97e","affectsGlobalScope":true},"f528ce3ce9430376705b10ee52296d36b83871b2b39a8ae3ecec542fc4361928",{"version":"41ffc155348dd4993bc58ee901923f5ade9f44bc3b4d5da14012a8ded17c0edd","affectsGlobalScope":true},"580eedb87f9ed40ff5fc619507e47c984a1e3fbf2fee8f5eecbe98806997d0ee",{"version":"3e8e0655ed5a570a77ea9c46df87eeca341eed30a19d111070cf6b55512694e8","affectsGlobalScope":true},"c1b3019eeb7120da76e837268ac26beea8dc0aa8d6108e286e9cfa9478af562b","6bb6fda2bba279010a8ffb5221fd28aed12d3d37ebc396a6e0f02840adb17970",{"version":"cc4c74d1c56e83aa22e2933bfabd9b0f9222aadc4b939c11f330c1ed6d6a52ca","affectsGlobalScope":true},"b0672e739a3d2875447236285ec9b3693a85f19d2f5017529e3692a3b158803d",{"version":"8a2e0eab2b49688f0a67d4da942f8fd4c208776631ba3f583f1b2de9dfebbe6c","affectsGlobalScope":true},"229648df48b149ecb40a267e69899456c28dbe4b31e64513be64eb2b58e29f1c",{"version":"f6266ada92f0c4e677eb3fbf88039a8779327370f499690bf9720d6f7ad5f199","affectsGlobalScope":true},"ab149c81ee4c7bb5fd0abea1057389185e334d5038c4c8739faa65ec5feb6ffc",{"version":"fb6cb8911a03c7ac61ee80aafdc072623850dd6a6d9fa0c98b015d8b181153a5","affectsGlobalScope":true},"8946ad9bc3d5c42cdb07de081480d869e358f5986166649a9e4230bea2ea84bd",{"version":"09a227ec52ef63acca2a3a1f31ca6d3affa45b51e18ffdf0036152d5f102dfd7","affectsGlobalScope":true},"c03bcada0b059d1f0e83cabf6e8ca6ba0bfe3dece1641e9f80b29b8f6c9bcede",{"version":"f2eac49e9caa2240956e525024bf37132eae37ac50e66f6c9f3d6294a54c654c","affectsGlobalScope":true},"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",{"version":"f3e7a4075f7edc952560ec2254b453bfc8496d78e034768052347e088537694b","affectsGlobalScope":true},"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",{"version":"f3e7a4075f7edc952560ec2254b453bfc8496d78e034768052347e088537694b","affectsGlobalScope":true},"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",{"version":"f3e7a4075f7edc952560ec2254b453bfc8496d78e034768052347e088537694b","affectsGlobalScope":true},"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",{"version":"f3e7a4075f7edc952560ec2254b453bfc8496d78e034768052347e088537694b","affectsGlobalScope":true},"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",{"version":"f3e7a4075f7edc952560ec2254b453bfc8496d78e034768052347e088537694b","affectsGlobalScope":true},"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",{"version":"f3e7a4075f7edc952560ec2254b453bfc8496d78e034768052347e088537694b","affectsGlobalScope":true},"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",{"version":"f3e7a4075f7edc952560ec2254b453bfc8496d78e034768052347e088537694b","affectsGlobalScope":true},"a0ad84c717107c133f77f15b344d62633863931d4b3592de20c232ded129c50b",{"version":"7373a173ea1b42648b1779267a5a707eb403ccc31a16761870dbf0660eb234ee","affectsGlobalScope":true},"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",{"version":"f3e7a4075f7edc952560ec2254b453bfc8496d78e034768052347e088537694b","affectsGlobalScope":true},"ace629691abf97429c0afef8112cc0c070189ff2d12caee88e8913bdd2aaad25",{"version":"99a71914dd3eb5d2f037f80c3e13ba3caff0c3247d89a3f61a7493663c41b7ea","affectsGlobalScope":true},"25a12a35aeee9c92a4d7516c6197037fc98eee0c7f1d4c53ef8180ffc82cb476",{"version":"b4646ac5ca017c2bb22a1120b4506855f1cef649979bf5a25edbead95a8ea866","affectsGlobalScope":true},"54d94aeec7e46e1dab62270c203f7907ca62e4aaa48c6cdcfed81d0cd4da08f3",{"version":"f9585ff1e49e800c03414267219537635369fe9d0886a84b88a905d4bcfff998","affectsGlobalScope":true},"483d29eb2d4b6c4d486f67b682a5d0ca2d4d452e09e6d43eee0f5ef0f4950aee","eaf540a66adaf590521596a4de7d2f86644aae59b5ef449b26d4b00ccfc13ba5",{"version":"1ff9449d1efdebef55b0ba13fe7f04b697c264e73ec05f41f7633dd057468b2d","affectsGlobalScope":true},"79792358436829ae510866561a6c62e37472108ae7a1836ba2b7136eba000bda",{"version":"7c160037704eee2460c7de4a60f3379da37180db9a196071290137286542b956","affectsGlobalScope":true},"87bdcea89ec013888b0fdb1694ce0cb4b8bf6b9f03f90429cbb4e00b510f838d",{"version":"4681d15a4d7642278bf103db7cd45cc5fe0e8bde5ea0d2be4d5948186a9f4851","affectsGlobalScope":true},"91eb719bcc811a5fb6af041cb0364ac0993591b5bf2f45580b4bb55ddfec41e2","05d7cf6a50e4262ca228218029301e1cdc4770633440293e06a822cb3b0ef923",{"version":"78402a74c2c1fc42b4d1ffbad45f2041327af5929222a264c44be2e23f26b76a","affectsGlobalScope":true},"cc93c43bc9895982441107582b3ecf8ab24a51d624c844a8c7333d2590c929e2",{"version":"c5d44fe7fb9b8f715327414c83fa0d335f703d3fe9f1045a047141bfd113caec","affectsGlobalScope":true},"f8b42b35100812c99430f7b8ce848cb630c33e35cc10db082e85c808c1757554",{"version":"ba28f83668cca1ad073188b0c2d86843f9e34f24c5279f2f7ba182ff051370a4","affectsGlobalScope":true},"349b276c58b9442936b049d5495e087aef7573ad9923d74c4fbb5690c2f42a2e",{"version":"ad8c67f8ddd4c3fcd5f3d90c3612f02b3e9479acafab240b651369292bb2b87a","affectsGlobalScope":true},"1954f24747d14471a5b42bd2ad022c563813a45a7d40ba172fc2e89f465503e2",{"version":"05bbb3d4f0f6ca8774de1a1cc8ba1267fffcc0dd4e9fc3c3478ee2f05824d75d","affectsGlobalScope":true},"37e69b0edd29cbe19be0685d44b180f7baf0bd74239f9ac42940f8a73f267e36",{"version":"afba2e7ffca47f1d37670963b0481eb35983a6e7d043c321b3cfa2723cab93c9","affectsGlobalScope":true},"bb146d5c2867f91eea113d7c91579da67d7d1e7e03eb48261fdbb0dfb0c04d36",{"version":"90b95d16bd0207bb5f6fedf65e5f6dba5a11910ce5b9ffc3955a902e5a8a8bd5","affectsGlobalScope":true},"3698fee6ae409b528a07581f542d5d69e588892f577e9ccdb32a4101e816e435",{"version":"26fc7c5e17d3bcc56ed060c8fb46c6afde9bc8b9dbf24f1c6bdfecca2228dac8","affectsGlobalScope":true},"46fd8192176411dac41055bdb1fdad11cfe58cdce62ccd68acff09391028d23f",{"version":"22791df15401d21a4d62fc958f3683e5edc9b5b727530c5475b766b363d87452","affectsGlobalScope":true},"150ac8ae1c4500f57f2af6e491717a8858a40619063164b1ad746d6a9ef30207","cefffd616954d7b8f99cba34f7b28e832a1712b4e05ac568812345d9ce779540",{"version":"a365952b62dfc98d143e8b12f6dcc848588c4a3a98a0ae5bf17cbd49ceb39791","affectsGlobalScope":true},"af0b1194c18e39526067d571da465fea6db530bca633d7f4b105c3953c7ee807",{"version":"b58e47c6ff296797df7cec7d3f64adef335e969e91d5643a427bf922218ce4ca","affectsGlobalScope":true},"76cbd2a57dc22777438abd25e19005b0c04e4c070adca8bbc54b2e0d038b9e79","4aaf6fd05956c617cc5083b7636da3c559e1062b1cadba1055882e037f57e94c","171ad16fb81daf3fd71d8637a9a1db19b8e97107922e8446d9b37e2fafd3d500",{"version":"d4ce8dfc241ebea15e02f240290653075986daf19cf176c3ce8393911773ac1b","affectsGlobalScope":true},{"version":"52cd0384675a9fa39b785398b899e825b4d8ef0baff718ec2dd331b686e56814","affectsGlobalScope":true},{"version":"58c2bb87fdf190100849a698042d09373be574e531758b1cfe3533258c3d4daa","affectsGlobalScope":true},{"version":"b8f8d5bc91f9618e50778e56f99e74f63dc08f7a91799379887d0fb3ff51fe5e","affectsGlobalScope":true},{"version":"769c459185e07f5b15c8d6ebc0e4fec7e7b584fd5c281f81324f79dd7a06e69c","affectsGlobalScope":true},{"version":"c947df743f2fd638bd995252d7883b54bfef0dbad641f085cc0223705dfd190e","affectsGlobalScope":true},"db78f3b8c08924f96c472319f34b5773daa85ff79faa217865dafef15ea57ffb","8ae46c432d6a66b15bce817f02d26231cf6e75d9690ae55e6a85278eb8242d21","ff5a16ce08431fae07230367d151e3c92aa6899bc9a05669492a51666f11ceb5","526904beb2843034196e50156b58a5001ba5b87c5bb4e7ec04f539e6819f204e","e72688dcbc21937c6fcb275dbb1cbcf8539e5ae598bfa4948a40688c35716f7b","80883fa1b4dc48eb6db24453403c5cbf4a2a31777fde224b8fde7ba9246de371","4d311eabe35c4c1fe9b47d5e5f82e3c5467be90b34270fd71b3757bb5dbbe296","3ed501b59297806a921c5dd66ebc39da5a9d43ca9424114b02a7d63a9bbb7f12","d6cc93ec714c4c64db8063d9ce9c29b44d489922ed25866dba80fadeb5b023a0","66500cbabdb5d98df1ea231c2e2c0e04f80cd68274d7824dec4918c57cdc12ed","ef4a9912cd6a2cf0c5acc4fa29a46013bb2cd1180466c8b28b29b136639e0b11","f638ba336df996f9d7cf8a88633141612122b091f7a86a2c2d886f8de10595d2","d5ac44aae007e8852a0613908b99a642cc2464d7459380bf304d0c6e695a9cf5","a33933ca8477fae79e75a7be6a3e9d771676db10c3fbc4fdb95fa85622c37efe","7353061b0ab6ac04877a2a8c6a1c7f192dd6a148a2f5a71db83c782e0ca04e1c","45aa47354b80aa70ef600ae3b77eba08293bd3ff8c730157446d1163bb2c4c59","94fe6ddaa383a84b1d443f64c51b04606fadc8628820f643e819befc3b9a28aa","bb68c92912ca084538bc4c76109d28c858eb329aa7acbea374090cf6b74b9829","12afb4c7628d6de81969dccbdc8e3781ce5c88c66b966c1258394ce283e9afb8","a8407fac62af020b7a5ff6488440465a48ba161089971af22b3da324d56b9aca","3ced8319f120055c592b6b8414d004aaa06e33938d2f253f003b284c0bb3985f","419db3b5d56de49a509f837e321960523f0cc1d3bb37b7b18333a1f121c69076","00a2131114eddfa723cd9f69b6aeb7d671c637599020d67b4d6ca533f6f716a8","b07e934edbf5be0208c9b2baab7e7047e63cdabb991587badd84b7bd445d6c9c","e511bace92312c907946d03c0fa002cfde77be96f413ecf781fbc1dbb0a0669e","0501afdfd8bccf5aaddf1b8b9c20257d25a3d7dac1fd0a90f9557e0e64338861","5359adc2b85d3028780ed564439eecd78e66b1cf8133a0bdd731808d662e7e63","2de31a5be7702f3dc917c48fc4fffc95a227aa0a1a6a465741186b4607c8394e","a0fa0602bc1cdbbe7cee8a4ad911ca6121440cd156a852151d88c9ee9839fd9c","19537578ec66c52fa324ff2f771056ccb4011ece89f53b74fd4f3f80a7d2f60b","8f979fa812b9752794db60e49144f1ec479d6dc9e81da27816f58c36323639b1","792a6ba38b1471dfa98202fdcd3aded89f893cb65e96ce93cedf9bea63b8f403","52113a2faf704c202a93ea2b386f8ed725ab917a27352c0f9e68c0bd8af6b785","80409b939f6d9646889efb87782f44a5a523298b6a6518a4e3174b1f24a95f6b","ca6f63153550032552ebc09c7168f153f6356c25175eadd09f6aadf083d85c23","d08eb2846b87715968198b867f52c30b0964d989e7328b963e4268f01e0ca9db","091d5497002ac51c23143b0f9f102fdbc486610d0c691ba15584af54f677df39","8069f28b79acdafc1106ed26686ff667b734492ebdaed13aa5c2e9f3330d64f2","516ecd5cd6ada6f77cf69c0611ed07387672c583fb3060efefdf71e30f874807","7cc4941aa84a2574baa74eb410f29e90777e924f1804fb49ed49cd4d96faf836","a88b74e5b048fbc30e90d565c08f52bf1e1a1b267b69d6981e70c56c7661079e","5397a5810fbcb2e26cf126bc9a4e9b3d0caac98d42383bb0e60df791c13e7d44","9236702ea609b33e926213f1ef8984747531c17032b23fa0f06135b8ac8d8486","0f911d318ecd908d0d21409a530aa910a597f0bd8cd8f977aeeeaf057627af98","cc33c82d8628b58d8367f5036168d8899de197c03635f73e41a8a9fcbde954a2","6c2918917f06ef66336fa5d954fa9e67ebdd517af8dee5ffc4d85d8a6015c48d","4bd398b5296e04c7461f0a77194ce51e08eaa6e5e4c8bab5e9d8b7551d299ab7","d6d8ca5b0a0a4afcaefdf0829a462989b9ccc7729f72db0f4cfb2e98f7ed1e80","44b3a33100040d2ca20ae1865d75deebc6ba465bcc3a2c168d399340ddb93669","eba34d1488a003ba3a60e848b5b0d77fca32d63c751225061167ef850dffb99b","c91b8725db7f8446f9a8d378ec0216281d2556412fb7944dc28ef8c4af8285e6","320bdee7889fdef91c014a63f316702123cd2ec99e1b57c03dcfe07c1ee30572","8c90bca2d7649913258223d47dc0d2fa1e14d5d288e5a7481e6338dd17287ba1","31436b035129d97094d081dfa5e6324d71686b481000a35486477d4cf5344049","d31fa5597aed0deaa4e19c29acb9c202a25e267fd38510a02b10d01b4f28e270","e939101f93768ba30b627a843b367c944f661071dcde587006e2110ec527da41","ee405f6372a58f5ab0223e16431b975b311b7a1a3e84cec8b8be99d5d0104914","6b293e332268fb19029dd40e9119c22e559d332af5a4b23d21ef0a9b39c9a366","db339e1fd72f18fe99961302cba2571fe8f960c74b05164655d6c25ae3314fbe","602b7724ff9646f1cd487d767e0d8ede210387dfb2bb0488418f6fcd1f2c05af","5ca6be4bc24f5bdd8cede7b520f89b02f5fc5d5e3bc86828a262f03ce2e3cd91","9abf81f4dd99e09887e598fd58be06da9dc0400c3720006d74b29339c37d853e"],"root":[838,898],"options":{"inlineSources":true,"module":99,"noEmitOnError":false,"noImplicitAny":false,"noImplicitThis":true,"outDir":"../../../../dist/dev/.uvue/app-android","rootDir":"../../../../dist/dev/.tsc/app-android","skipLibCheck":true,"sourceMap":true,"strict":true,"target":99,"tsBuildInfoFile":"./.tsbuildInfo","useDefineForClassFields":false},"fileIdsList":[[846,847],[844,848],[46,48,50,833,834,840,841,842,855,856,857,858,859,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897],[46,48,50,833,834,860],[46,48,50,833,834,848,849,854,860],[46,48,50,833,834,854,860],[46,48,50,833,834],[46,48,50,833,834,849,860],[850,860],[46,48,50,833,834,849],[46,48,50,833,834,850,860],[849,851],[844,849],[46,48,50,833,834,844,849,850,854],[46,48,50,833,834,848,849,850,854],[46,48,50,833,834,849,853],[843,844],[843,845],[849,850],[46,48,50,833,834,849,850,851,852,853],[846,849],[842],[46,48,50,832,833,834],[593,607,828,831,833,834,835,836],[519,526],[592],[511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591],[514,515,516,517,518,520,522,524,525,527],[565],[526,530],[567],[586],[521],[527],[520,526,537],[526,535],[514,515,516,517,518,522,526,527,535,536],[566],[526],[535,536,537,582],[518,527,568,571],[513,518,523,528,535,563,564,568,569],[523,526],[570],[528],[517,526],[526,527],[526,537],[525,526,535,536,537],[530],[46,48,50,524,832,833],[830],[829],[608,609,760,797,804,823,825,827],[826],[824],[611,613,615,617,619,621,623,625,627,629,631,633,635,637,639,641,643,645,647,649,651,653,655,657,659,661,663,665,667,669,671,673,675,677,679,681,683,685,687,689,691,693,695,697,699,701,703,705,707,709,711,713,715,717,719,721,723,725,727,729,731,733,735,737,739,741,743,745,747,749,751,753,755,757,759],[610],[612],[614],[616],[620],[622],[624],[626],[628],[630],[632],[634],[636],[638],[640],[642],[644],[646],[648],[650],[652],[654],[656],[658],[660],[662],[664],[666],[668],[670],[672],[674],[676],[678],[680],[682],[684],[686],[688],[690],[692],[694],[696],[698],[700],[702],[704],[706],[708],[710],[712],[714],[716],[718],[720],[722],[724],[726],[728],[730],[732],[734],[736],[738],[740],[742],[744],[746],[748],[750],[752],[754],[756],[758],[762,764,766,768,770,772,774,776,778,780,782,784,786,788,790,792,794,796],[761],[763],[765],[767],[769],[771],[787],[791],[793],[795],[799,801,803],[798],[301,453],[800],[802],[806,808,810,812,814,816,818,820,822],[821],[813],[809],[807],[819],[811],[815],[805],[817],[530,537],[606],[594,595,596,597,598,599,600,601,602,603,604,605],[537],[530,537,590],[506,507,508,509],[505],[453],[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27],[839],[44],[44,45,46,48],[41,48,49,50],[42],[41,46,48,833,834],[45,46,47,50,833,834],[29,30,31,32,33,34,35,36,37,38,39],[33],[36],[33,35],[67,68],[198],[198,201,390,462],[201],[196,329,390,453,472,473],[51,63,66,79,173,175,185,188,191,196,252,255,274,278,280,281,282,299,301,316,329,340,342,344,345,346,366,369,387,390,440,452,453,455,456,463,464,467,468,469,470,474,476,482,484,485,486,487,488,493,494,497,498,499,502,503,504],[66,252,281,282,496,505],[66,67,68,274,439,440],[274],[66,79,99,175,274,329,340,342,344,346,366,369,390,453,468,474,475,476,485,505],[51,66,67,68,80,173,196,201,252,255,282,328,342,344,345,369,390,440,453,455,462,466,467,468,505],[51,66,173,390,453,469,473],[390,469],[51,66,173,454],[66,67,68,102,253,254,255,440,453],[67,68,107,500,501],[67,68,173,302,316],[68,108,174,390,453],[66,185,316,440,453,505],[66,67,68,453,505],[67,68,453],[52,66,440,453],[67,68,69,255,274,310,438,440,453],[63,67,68],[252],[281],[51,66,173,231,232,252,267,268,273,274,278,279,280,282,453],[66,231,232,274,278,279,280,283,304],[66,67,68,274],[57,60,61,66,231,232,274,275,278,279,280,283,301,302,303,304,305,306,307,308,309,453],[61,66,101,102,172,185,196,203,204,234,248,249,252,253,255,273,274,281,301,310,313,319,321,328,329,375,440,441,448,450,451,452],[273],[61,66,101,102,172,185,203,204,234,252,253,255,273,274,281,301,310,313,319,321,328,329,375,440,441,448,450,451,452,453,495],[79],[65,66,67,68,107,185,196,265,274,310,319,328,439,453],[67,68,97,254,266,274,310,312,440],[66,67,68,102,253,254,440,453],[51,173,275,453],[67,68,323],[67,68,97,257],[67,68,97,319,320,453],[263],[67,97,320,321],[67,68,260],[67,68,263],[67,68,320],[67,68,256,258,259,260,261,262,263,264,265,268,269,321],[58,60,61,63,67,68,70,102,253,255,272,274,301,315,316,440],[66,67,97,233,319,329],[66,67,68,107,172,185,233,250,251,252,253,254,255,256,258,260,264,265,268,270,271,272,313,314,315,317,318,321,328,329,440],[67,266],[67,68,319,320],[67,68,97,257,266,267],[67,68,97,258,265,268,313,319,329],[67,68,262],[51,58,66,67,68,164,203,204,231],[61,232,233],[67,68,328],[67,68,71],[232],[325],[58,231,322,324,453],[61,66,196,232,233,234,245,246,247,248,249,252,321,326,327,329],[245,247,248,328,329],[196],[52,185],[67,68,306],[66,67,68,306],[274,311],[66,67,68,185],[66,67,68,186],[102,274],[58,66,274,275,276,277,310],[450],[58],[278],[172,278,279,280,442,444,445,446,447,448,449],[442],[443],[231,443],[60,67,68,87,140,174,240,246,284,287,289,299,300],[236,289,301],[72,107,108,174,180,236,240,241,285,286,288,294,297,298,300,301],[61,72,106,107,181,196,239,247,248,296,299,328],[67,68,72,99,102,248,274,301,329,453],[71,108,148,172,231,234,240,328],[241],[67,68,301],[67,68,107],[108,173],[174],[108,140,143,287],[61,240,299],[107,108,181,240,299,301],[107,180],[71,72,107,180,235,236,237,238,239,245],[108,174],[299],[72,107,108,174,180,181,240,241,286,288,294,297,299,300,301],[67,68,106],[67,68,107,180],[72,107,236,239,291,301],[107,174,240,292,295,296],[236,287,290],[102],[107,240,293],[51,172,234,242,243,244],[82,83,84],[82,83],[89,93],[89],[89,95],[87,88,89,91,92,94,96,102],[67,68,179],[90],[65],[66,67,68,274,301],[67,68,301,478,479],[66,67,68,73,79,102,274,316,453,477,478,480,481],[66,67,68],[67,68,172],[63],[52,54,57,62,63,64,65,67,68],[68,75],[97,99,101],[51,53,67],[52],[67,68,70],[97,100],[60,61],[66,67,68,98,102],[51],[52,67,68,99,102],[51,52,53,54,55,56,57,63,64,65,66],[67],[51,58,67,68,102,172,203,204,205,212,230],[60,61,62,67,68],[66,67,68,102],[67,68,73],[68],[73,74,75],[74,76,77],[395],[391],[390,391,392,393],[240],[180,196,453],[390,453,462],[107,196,198,201,390,453,462,465],[462,463,466],[246],[67,68,365],[366],[57,66,67,68,107,179,181,182,390],[66,183],[68,183,390],[67,68,71,107,181,183],[107,342,344,345,390],[342,343,390,453],[196,197,199,453],[196,199,200,390,453],[107,181,350,352],[67,68,390],[66,67,68,191],[106,184,190,192,390],[66,67,68,274,439],[329,344,390],[234,252,328,453,496],[67,68,107,246,284,371,372,373,374],[106,107,180],[376],[67,68,180],[67,68,69,439],[67,68,76,78,81,85,86,103],[68,104],[66,67,68,71,97,336,337],[66,79,102,108,280,336,355,356,357,358,359,360,361,362,363],[67,68,69,274],[358],[336],[67,68,79,80],[67,68,81,105],[196,390,453,462],[79,185,343,440],[344,453],[72,248,329,341,343,390,440],[67,68,105,174],[334,390],[67,68,301,328,453],[67,68,371],[107,280,384],[107,371,383],[104],[329,342,344,390],[67,68,107,299,382],[58,67,68,87,107,181,351],[105],[66,67,68,71,390,394,396,437],[107,175,390],[67,68,388],[390],[67,68,184,330],[52,54,66,67,68,72,79,102,107,174,175,181,183,184,187,188,189,193,194,195,196,200,202,240,248,249,252,292,299,301,328,329,331,332,333,334,335,338,340,346,349,353,354,364,366,367,368,369,370,371,375,377,380,381,385,386,387,389,439,453],[54,66,79,107,175,181,183,190,196,197,249,252,299,340,346,366,368,371,380,381,387,389,390,453,457,458,459,460,461],[329],[66,107,340,346,366,369,371,390],[66,71,174,184,187,188,189],[52,66,79,102,105,107,175,249,252,274,329,340,342,344,346,353,366,385,390,453,463,466,468,476,482,483,484],[57,106,107,372,378,379],[106,199,380],[106],[347],[199,280,348],[52,67,68,101,350,352,375,390,458,489,490,491,492],[107,380],[277,390,462],[390,462,471],[68,175,196,329,342,344,453,462],[339],[65,112,113,171],[51,61,164,172],[51,60,164,172],[58,60],[58,59],[60,109,172],[110,207],[58,110,207,208,209,229],[65,206],[207],[110],[58,110,207,209,212,216,218],[58,60,61,111,207,213],[51,60,61,110,207,209,214],[215],[65,112],[61,65,111,113],[140,141,142,143,144,145,146,147],[93],[148,152,157,160,161,163,171],[150,153],[110,148,151,154,155,209,211,219,224,226,228,230],[148,149,150,151,152,153,154,156,157,159,163,171],[93,162,164],[148,150],[206,207,228],[206,207,211,227],[93,110,209],[150,151,153,154,224,226],[93,148],[148,153],[148,155],[93,159,220,221,224],[220,225],[58,224],[110,209,211,213,217,224,226],[110,148,151,154,155,209,211,212,224,226],[93,158],[220,221,224,225],[221],[220,221,222,224,226],[93,210,213,218,219,223,229],[140,141],[136],[135],[136,137],[58,116,138,139,169,171],[113,114,115,116,117,170,172],[171],[60,61,113,117,152,156,157,162,164,165,166,167,168,170,171],[115,116],[114],[58,115],[140,148],[129,131,132],[65,120,122],[65,124,125],[65,112,123,126],[131],[65,128],[65,129],[134],[127,129,130,135],[61],[121],[65,124],[65,424],[65,405,425,426],[400,411,423],[176,177,178,398,401,403,404,409,410,420,423,428],[176,177,178,398,401,403,404,420,422,423,428,430,433,434],[397,400,402,404,409,410,411,412,421,422,430,433,434,436],[176,177,178,411,423],[176,177,178,398,401,402,403,404,420,421,423,428,430,433,434],[176,397,398,401,402,403,404],[65,400,402,404,409,410,411,412,413,414,416,418,419,421,422,430,433,434,436,437],[179,430,434,435],[65,176,177,178],[399,400,401,403,404,405,406,423,427,434],[65,176,177,178,398,401,402,403,404,429,433,434,436,437],[179,430,434,436],[65,176,177,178,398,401,402,403,404,407,408,409,410,411,415,417,418,420,421,423,428,429,430,433,434,436,437],[65,176,177,178,398,401,402,403,404,408,411,415,419,420,421,422,428,429,430,433,434,436,437],[65,176,177,178,398,401,402,403,404,407,416,419,428,430,433,434,436],[65,176,177,178,398,401,402,403,404,407,408,415,416,419,420,428,430,433,434,436,437],[65,176,177,178,398,401,402,403,404,419,420,428,429,430,433,434,436],[65,176,177,178,409,417,419,423],[401,402,403],[176],[176,177],[176,177,400,402,404],[404],[176,179],[65,401],[65,179,416,430,433],[65,179,416,430,431,433],[65,176,177,178,398,401,402,403,404,408,411,415,416,419,420,421,422,428,429,430,433,434,436],[65,397,404,432,433],[65,176,398,401,402,403,404,432,434],[65,118,119,133]],"referencedMap":[[848,1],[849,2],[898,3],[881,4],[880,4],[890,4],[897,4],[896,4],[869,4],[867,4],[892,5],[882,4],[877,4],[878,4],[879,4],[866,6],[887,7],[868,4],[886,8],[885,4],[884,4],[883,4],[894,4],[875,9],[870,9],[895,4],[891,7],[889,4],[888,8],[874,4],[871,10],[876,11],[893,4],[872,4],[873,4],[852,12],[865,7],[864,7],[856,13],[861,4],[863,7],[858,7],[855,14],[862,15],[857,16],[845,17],[846,18],[853,19],[854,20],[860,21],[847,22],[833,23],[837,24],[520,25],[593,26],[592,27],[526,28],[566,29],[589,30],[568,31],[587,32],[522,33],[521,34],[585,35],[530,34],[564,36],[537,37],[567,38],[527,39],[583,40],[581,34],[580,34],[579,34],[578,34],[577,34],[576,34],[575,34],[574,34],[573,41],[570,42],[572,34],[524,43],[528,34],[571,44],[563,45],[562,34],[560,34],[559,34],[558,46],[557,34],[556,34],[555,34],[554,34],[553,47],[552,34],[551,34],[550,34],[549,34],[547,48],[548,34],[545,34],[544,34],[543,34],[546,49],[542,34],[541,39],[540,50],[539,50],[538,48],[534,50],[533,50],[532,50],[531,50],[529,45],[834,51],[831,52],[830,53],[828,54],[827,55],[825,56],[760,57],[611,58],[613,59],[615,60],[617,61],[621,62],[623,63],[625,64],[627,65],[629,66],[631,67],[633,68],[635,69],[637,70],[639,71],[641,72],[643,73],[645,74],[647,75],[649,76],[651,77],[653,78],[655,79],[657,80],[659,81],[661,82],[663,83],[665,84],[667,85],[669,86],[671,87],[673,88],[675,89],[677,90],[679,91],[681,92],[683,93],[685,94],[687,95],[689,96],[691,97],[693,98],[695,99],[697,100],[699,101],[701,102],[703,103],[705,104],[707,105],[709,106],[711,107],[713,108],[715,109],[717,110],[719,111],[721,112],[723,113],[725,114],[727,115],[729,116],[731,117],[733,118],[735,119],[737,120],[739,121],[741,122],[743,123],[745,124],[747,125],[749,126],[751,127],[753,128],[755,129],[757,130],[759,131],[797,132],[762,133],[764,134],[766,135],[768,136],[770,137],[772,138],[788,139],[792,140],[794,141],[796,142],[804,143],[799,144],[798,145],[801,146],[803,147],[823,148],[822,149],[814,150],[810,151],[808,152],[820,153],[812,154],[816,155],[806,156],[818,157],[594,158],[607,159],[606,160],[600,158],[601,158],[595,158],[596,158],[597,158],[598,158],[599,158],[603,161],[604,162],[602,161],[510,163],[506,164],[507,165],[28,166],[840,167],[47,7],[45,168],[46,169],[838,170],[43,171],[50,172],[48,173],[40,174],[35,175],[34,175],[37,176],[36,177],[39,177],[306,178],[201,179],[460,180],[202,181],[474,182],[505,183],[503,184],[456,185],[464,186],[486,187],[469,188],[504,189],[473,190],[455,191],[316,192],[502,193],[494,178],[501,194],[467,195],[488,196],[487,197],[273,198],[451,199],[439,200],[69,201],[281,202],[282,203],[185,198],[283,204],[305,205],[304,206],[310,207],[279,178],[453,208],[495,209],[496,210],[475,211],[440,212],[313,213],[255,214],[454,215],[191,178],[323,178],[324,216],[265,217],[321,218],[315,219],[259,178],[250,178],[257,220],[269,178],[261,221],[260,178],[318,222],[264,223],[251,178],[270,224],[317,225],[320,226],[319,227],[267,228],[271,229],[256,229],[268,230],[314,231],[258,217],[262,178],[263,232],[272,178],[232,233],[234,234],[248,235],[252,236],[322,237],[326,238],[325,239],[328,240],[249,241],[233,242],[441,243],[303,178],[309,244],[307,245],[311,186],[312,246],[186,247],[187,248],[275,249],[278,250],[448,251],[442,252],[446,253],[450,254],[443,255],[445,256],[447,252],[444,257],[301,258],[290,259],[299,260],[329,261],[302,262],[241,263],[242,264],[289,265],[106,266],[174,267],[298,268],[288,269],[327,270],[286,271],[296,272],[240,273],[180,274],[300,275],[371,178],[295,276],[107,277],[108,266],[181,278],[292,279],[297,280],[291,281],[236,268],[382,282],[293,178],[294,283],[245,284],[374,178],[87,178],[83,178],[85,285],[84,286],[82,178],[373,178],[94,287],[95,288],[96,289],[103,290],[351,291],[90,288],[91,292],[70,293],[73,178],[479,294],[480,295],[478,178],[482,296],[477,297],[274,298],[62,299],[66,300],[77,301],[102,302],[52,303],[53,304],[71,305],[101,306],[88,307],[99,308],[100,309],[98,310],[67,311],[68,312],[231,313],[266,178],[63,314],[481,315],[253,178],[74,316],[75,317],[76,318],[78,319],[396,320],[392,321],[394,322],[391,323],[465,324],[463,325],[466,326],[484,327],[64,178],[247,328],[354,178],[366,329],[367,330],[183,331],[333,332],[365,333],[182,334],[346,335],[341,336],[200,337],[199,179],[461,338],[197,268],[353,339],[184,340],[189,178],[192,341],[193,342],[334,343],[369,344],[497,345],[375,346],[378,347],[376,178],[377,348],[379,349],[470,178],[387,350],[104,351],[105,352],[359,178],[360,178],[338,353],[355,178],[363,178],[364,354],[357,355],[362,356],[336,178],[361,201],[356,357],[81,358],[79,359],[468,360],[344,361],[345,362],[342,363],[175,364],[335,365],[368,366],[372,367],[385,368],[384,369],[476,370],[343,371],[383,372],[352,373],[491,374],[438,375],[386,376],[389,377],[330,297],[388,305],[332,378],[331,379],[390,380],[462,381],[458,378],[459,382],[457,383],[190,384],[485,385],[370,178],[380,386],[381,387],[347,388],[348,389],[349,390],[493,391],[492,392],[471,393],[472,394],[499,395],[350,178],[340,396],[489,178],[172,397],[203,398],[204,399],[61,400],[60,401],[173,402],[109,401],[208,403],[230,404],[207,405],[206,406],[111,407],[217,408],[212,409],[110,293],[215,410],[216,411],[113,412],[112,413],[148,414],[161,415],[162,416],[155,417],[93,252],[229,418],[164,419],[163,420],[151,421],[158,415],[227,422],[228,423],[211,424],[210,425],[153,426],[154,427],[156,428],[225,429],[221,430],[220,431],[218,432],[213,433],[159,434],[226,435],[222,436],[223,437],[224,438],[150,426],[144,439],[142,439],[137,440],[136,441],[138,442],[168,252],[170,443],[171,444],[139,445],[169,446],[114,447],[115,448],[116,449],[146,439],[145,439],[147,439],[149,450],[143,439],[133,451],[123,452],[124,293],[126,453],[127,454],[132,455],[121,293],[129,456],[130,457],[135,458],[131,459],[120,460],[122,461],[125,462],[425,463],[427,464],[414,465],[411,466],[421,467],[423,468],[409,469],[422,470],[410,471],[417,472],[436,473],[179,474],[428,475],[430,476],[435,477],[419,478],[416,479],[420,480],[429,481],[407,482],[418,483],[404,484],[398,485],[178,486],[401,487],[403,488],[177,489],[402,490],[431,491],[432,492],[437,493],[434,494],[433,495],[134,496]],"exportedModulesMap":[[848,1],[849,2],[898,3],[881,4],[880,4],[890,4],[897,4],[896,4],[869,4],[867,4],[892,5],[882,4],[877,4],[878,4],[879,4],[866,6],[887,7],[868,4],[886,8],[885,4],[884,4],[883,4],[894,4],[875,9],[870,9],[895,4],[891,7],[889,4],[888,8],[874,4],[871,10],[876,11],[893,4],[872,4],[873,4],[852,12],[865,7],[864,7],[856,13],[861,4],[863,7],[858,7],[855,14],[862,15],[857,16],[845,17],[846,18],[853,19],[854,20],[860,21],[847,22],[833,23],[837,24],[520,25],[593,26],[592,27],[526,28],[566,29],[589,30],[568,31],[587,32],[522,33],[521,34],[585,35],[530,34],[564,36],[537,37],[567,38],[527,39],[583,40],[581,34],[580,34],[579,34],[578,34],[577,34],[576,34],[575,34],[574,34],[573,41],[570,42],[572,34],[524,43],[528,34],[571,44],[563,45],[562,34],[560,34],[559,34],[558,46],[557,34],[556,34],[555,34],[554,34],[553,47],[552,34],[551,34],[550,34],[549,34],[547,48],[548,34],[545,34],[544,34],[543,34],[546,49],[542,34],[541,39],[540,50],[539,50],[538,48],[534,50],[533,50],[532,50],[531,50],[529,45],[834,51],[831,52],[830,53],[828,54],[827,55],[825,56],[760,57],[611,58],[613,59],[615,60],[617,61],[621,62],[623,63],[625,64],[627,65],[629,66],[631,67],[633,68],[635,69],[637,70],[639,71],[641,72],[643,73],[645,74],[647,75],[649,76],[651,77],[653,78],[655,79],[657,80],[659,81],[661,82],[663,83],[665,84],[667,85],[669,86],[671,87],[673,88],[675,89],[677,90],[679,91],[681,92],[683,93],[685,94],[687,95],[689,96],[691,97],[693,98],[695,99],[697,100],[699,101],[701,102],[703,103],[705,104],[707,105],[709,106],[711,107],[713,108],[715,109],[717,110],[719,111],[721,112],[723,113],[725,114],[727,115],[729,116],[731,117],[733,118],[735,119],[737,120],[739,121],[741,122],[743,123],[745,124],[747,125],[749,126],[751,127],[753,128],[755,129],[757,130],[759,131],[797,132],[762,133],[764,134],[766,135],[768,136],[770,137],[772,138],[788,139],[792,140],[794,141],[796,142],[804,143],[799,144],[798,145],[801,146],[803,147],[823,148],[822,149],[814,150],[810,151],[808,152],[820,153],[812,154],[816,155],[806,156],[818,157],[594,158],[607,159],[606,160],[600,158],[601,158],[595,158],[596,158],[597,158],[598,158],[599,158],[603,161],[604,162],[602,161],[510,163],[506,164],[507,165],[28,166],[840,167],[47,7],[45,168],[46,169],[838,170],[43,171],[50,172],[48,173],[40,174],[35,175],[34,175],[37,176],[36,177],[39,177],[306,178],[201,179],[460,180],[202,181],[474,182],[505,183],[503,184],[456,185],[464,186],[486,187],[469,188],[504,189],[473,190],[455,191],[316,192],[502,193],[494,178],[501,194],[467,195],[488,196],[487,197],[273,198],[451,199],[439,200],[69,201],[281,202],[282,203],[185,198],[283,204],[305,205],[304,206],[310,207],[279,178],[453,208],[495,209],[496,210],[475,211],[440,212],[313,213],[255,214],[454,215],[191,178],[323,178],[324,216],[265,217],[321,218],[315,219],[259,178],[250,178],[257,220],[269,178],[261,221],[260,178],[318,222],[264,223],[251,178],[270,224],[317,225],[320,226],[319,227],[267,228],[271,229],[256,229],[268,230],[314,231],[258,217],[262,178],[263,232],[272,178],[232,233],[234,234],[248,235],[252,236],[322,237],[326,238],[325,239],[328,240],[249,241],[233,242],[441,243],[303,178],[309,244],[307,245],[311,186],[312,246],[186,247],[187,248],[275,249],[278,250],[448,251],[442,252],[446,253],[450,254],[443,255],[445,256],[447,252],[444,257],[301,258],[290,259],[299,260],[329,261],[302,262],[241,263],[242,264],[289,265],[106,266],[174,267],[298,268],[288,269],[327,270],[286,271],[296,272],[240,273],[180,274],[300,275],[371,178],[295,276],[107,277],[108,266],[181,278],[292,279],[297,280],[291,281],[236,268],[382,282],[293,178],[294,283],[245,284],[374,178],[87,178],[83,178],[85,285],[84,286],[82,178],[373,178],[94,287],[95,288],[96,289],[103,290],[351,291],[90,288],[91,292],[70,293],[73,178],[479,294],[480,295],[478,178],[482,296],[477,297],[274,298],[62,299],[66,300],[77,301],[102,302],[52,303],[53,304],[71,305],[101,306],[88,307],[99,308],[100,309],[98,310],[67,311],[68,312],[231,313],[266,178],[63,314],[481,315],[253,178],[74,316],[75,317],[76,318],[78,319],[396,320],[392,321],[394,322],[391,323],[465,324],[463,325],[466,326],[484,327],[64,178],[247,328],[354,178],[366,329],[367,330],[183,331],[333,332],[365,333],[182,334],[346,335],[341,336],[200,337],[199,179],[461,338],[197,268],[353,339],[184,340],[189,178],[192,341],[193,342],[334,343],[369,344],[497,345],[375,346],[378,347],[376,178],[377,348],[379,349],[470,178],[387,350],[104,351],[105,352],[359,178],[360,178],[338,353],[355,178],[363,178],[364,354],[357,355],[362,356],[336,178],[361,201],[356,357],[81,358],[79,359],[468,360],[344,361],[345,362],[342,363],[175,364],[335,365],[368,366],[372,367],[385,368],[384,369],[476,370],[343,371],[383,372],[352,373],[491,374],[438,375],[386,376],[389,377],[330,297],[388,305],[332,378],[331,379],[390,380],[462,381],[458,378],[459,382],[457,383],[190,384],[485,385],[370,178],[380,386],[381,387],[347,388],[348,389],[349,390],[493,391],[492,392],[471,393],[472,394],[499,395],[350,178],[340,396],[489,178],[172,397],[203,398],[204,399],[61,400],[60,401],[173,402],[109,401],[208,403],[230,404],[207,405],[206,406],[111,407],[217,408],[212,409],[110,293],[215,410],[216,411],[113,412],[112,413],[148,414],[161,415],[162,416],[155,417],[93,252],[229,418],[164,419],[163,420],[151,421],[158,415],[227,422],[228,423],[211,424],[210,425],[153,426],[154,427],[156,428],[225,429],[221,430],[220,431],[218,432],[213,433],[159,434],[226,435],[222,436],[223,437],[224,438],[150,426],[144,439],[142,439],[137,440],[136,441],[138,442],[168,252],[170,443],[171,444],[139,445],[169,446],[114,447],[115,448],[116,449],[146,439],[145,439],[147,439],[149,450],[143,439],[133,451],[123,452],[124,293],[126,453],[127,454],[132,455],[121,293],[129,456],[130,457],[135,458],[131,459],[120,460],[122,461],[125,462],[425,463],[427,464],[414,465],[411,466],[421,467],[423,468],[409,469],[422,470],[410,471],[417,472],[436,473],[179,474],[428,475],[430,476],[435,477],[419,478],[416,479],[420,480],[429,481],[407,482],[418,483],[404,484],[398,485],[178,486],[401,487],[403,488],[177,489],[402,490],[431,491],[432,492],[437,493],[434,494],[433,495],[134,496]],"semanticDiagnosticsPerFile":[833,832,837,565,520,516,517,514,593,591,592,526,566,590,589,568,535,536,519,515,586,587,522,521,518,585,584,530,564,537,567,527,582,583,581,580,579,578,577,576,575,574,573,570,572,524,569,528,571,563,562,561,560,559,558,557,523,556,555,554,553,552,551,550,549,547,548,545,544,543,546,525,542,541,540,539,538,534,533,532,531,529,588,513,512,511,834,835,831,830,829,608,609,828,827,826,825,824,760,611,610,613,612,615,614,617,616,619,618,621,620,623,622,625,624,627,626,629,628,631,630,633,632,635,634,637,636,639,638,641,640,643,642,645,644,647,646,649,648,651,650,653,652,655,654,657,656,659,658,661,660,663,662,665,664,667,666,669,668,671,670,673,672,675,674,677,676,679,678,681,680,683,682,685,684,687,686,689,688,691,690,693,692,695,694,697,696,699,698,701,700,703,702,705,704,707,706,709,708,711,710,713,712,715,714,717,716,719,718,721,720,723,722,725,724,727,726,729,728,731,730,733,732,735,734,737,736,739,738,741,740,743,742,745,744,747,746,749,748,751,750,753,752,755,754,757,756,759,758,797,762,761,764,763,766,765,768,767,770,769,772,771,774,773,776,775,778,777,780,779,782,781,784,783,786,785,788,787,790,789,792,791,794,793,796,795,804,799,798,801,800,803,802,823,822,821,814,813,810,809,808,807,820,819,812,811,816,815,806,805,818,817,836,594,607,606,605,600,601,595,596,597,598,599,603,604,602,510,506,507,508,509,1,16,2,28,3,26,4,5,17,18,6,20,21,19,27,7,8,9,10,11,12,13,14,24,25,22,23,15,47,45,46,44,838,42,43,50,49,48,41,40,31,35,32,33,34,37,36,38,39,30,29,306,201,460,202,198,474,505,503,456,464,486,469,504,473,455,316,502,494,501,467,488,487,273,451,439,69,281,282,185,283,305,304,310,279,453,495,496,475,440,313,255,454,191,323,324,265,321,315,259,250,257,269,261,260,318,264,251,270,317,320,319,267,271,256,268,314,258,262,263,272,232,234,248,252,322,326,325,328,249,233,441,452,303,309,307,308,311,312,186,187,276,275,278,448,277,442,446,450,443,445,447,444,449,301,290,72,299,287,239,284,329,302,285,241,242,244,243,289,106,238,174,298,288,327,286,296,240,180,237,300,371,295,107,108,181,292,297,291,236,382,293,294,245,235,86,374,87,83,85,84,82,373,89,94,95,96,92,103,351,90,91,70,73,479,480,478,482,477,274,62,66,280,77,102,52,53,71,101,88,99,100,98,188,67,68,231,266,63,481,253,74,75,76,78,337,396,395,392,394,393,391,465,463,466,484,254,80,56,196,246,194,97,195,500,57,64,54,55,247,354,366,367,183,333,365,182,346,341,200,199,461,197,353,184,189,490,192,193,334,369,497,375,378,376,377,379,470,387,483,104,105,359,360,338,355,363,358,364,357,362,336,361,356,81,79,468,344,345,342,175,335,368,372,385,384,476,343,383,352,491,438,386,389,330,388,332,331,390,462,458,459,457,190,485,370,380,381,347,348,349,493,492,471,472,499,350,339,340,498,489,58,172,51,203,204,59,61,205,60,173,65,109,208,230,207,206,219,111,217,212,110,215,216,209,214,113,112,140,148,141,161,162,155,93,160,229,164,163,151,158,227,228,211,210,153,154,156,225,221,220,218,213,159,226,222,223,224,150,144,142,166,157,137,136,138,167,168,165,170,117,152,171,139,169,114,115,116,146,145,147,149,143,133,123,124,126,127,132,128,121,129,130,135,119,118,131,120,122,125,425,424,426,427,405,414,411,421,423,409,422,410,417,413,436,415,179,428,399,406,400,397,430,435,419,416,420,408,429,407,418,412,176,404,398,178,401,403,177,402,431,432,437,434,433,134]},"version":"5.2.2"} \ No newline at end of file diff --git a/unpackage/cache/uts_custom_android/uniapp-x-uts.json b/unpackage/cache/uts_custom_android/uniapp-x-uts.json deleted file mode 100644 index 954f662e..00000000 --- a/unpackage/cache/uts_custom_android/uniapp-x-uts.json +++ /dev/null @@ -1 +0,0 @@ -{"duts":["uni-actionSheet","uni-theme","uni-getSystemInfo","uni-base64ToArrayBuffer","uni-arrayBufferToBase64","uni-crash","uni-storage","uni-dialogPage","uni-event","uni-exit","uni-form","uni-getAccessibilityInfo","uni-getAppAuthorizeSetting","uni-getAppBaseInfo","uni-getDeviceInfo","uni-getElementById","uni-getSystemSetting","uni-modal","uni-openAppAuthorizeSetting","uni-privacy","uni-progress","uni-prompt","uni-rpx2px","uni-rich-text","uni-makePhoneCall","uni-network","uni-clipboard","uni-media","uni-previewImage","uni-fileSystemManager","uni-scanCode","uni-camera","uni-barcode-scanning"]} \ No newline at end of file diff --git a/unpackage/debug/android_debug.apk b/unpackage/debug/android_debug.apk deleted file mode 100644 index d77f0bdf..00000000 Binary files a/unpackage/debug/android_debug.apk and /dev/null differ diff --git a/utils/supabaseService.uts b/utils/supabaseService.uts index ea81e2f9..3f50cfe0 100644 --- a/utils/supabaseService.uts +++ b/utils/supabaseService.uts @@ -55,6 +55,7 @@ export type Product = { shop_id?: string tags?: string attributes?: string + specification?: string created_at?: string updated_at?: string price?: number @@ -374,14 +375,22 @@ class SupabaseService { for (let i = 0; i < rawList.length; i++) { const item = rawList[i] const icon = this.getCategoryIcon(item) + + // 安全获取属性 + const idVal = item['id'] + const nameVal = item['name'] + const descVal = item['description'] + const colorVal = item['color'] + const slugVal = item['slug'] + const cat: Category = { - id: item['id'] as string, - name: item['name'] as string, + id: (typeof idVal == 'string') ? (idVal as string) : '', + name: (typeof nameVal == 'string') ? (nameVal as string) : '', icon: icon, - description: (item['description'] as string) ?? '', - color: (item['color'] as string) ?? '#4CAF50', + description: (typeof descVal == 'string') ? (descVal as string) : '', + color: (typeof colorVal == 'string') ? (colorVal as string) : '#4CAF50', level: 1, - slug: item['slug'] as string + slug: (typeof slugVal == 'string') ? (slugVal as string) : '' } categories.push(cat) } @@ -463,6 +472,7 @@ class SupabaseService { // 获取所有品牌 async getBrands(): Promise { try { + console.log('[getBrands] 开始获取品牌数据...') const response = await supa .from('ml_brands') .select('*') @@ -476,28 +486,32 @@ class SupabaseService { } const rawData = response.data + console.log('[getBrands] 原始数据:', rawData) if (rawData == null) { + console.log('[getBrands] 数据为空') return [] } const brands: Brand[] = [] const rawList = rawData as any[] + console.log('[getBrands] 数据条数:', rawList.length) for (let i: number = 0; i < rawList.length; i++) { const item = rawList[i] - const brandObj = item as UTSJSONObject + const brandObj = JSON.parse(JSON.stringify(item)) as UTSJSONObject const idVal = brandObj.get('id') const nameVal = brandObj.get('name') const logoVal = brandObj.get('logo_url') const descVal = brandObj.get('description') const brand: Brand = { - id: (typeof idVal == 'string') ? (idVal as string) : '', - name: (typeof nameVal == 'string') ? (nameVal as string) : '', - logo_url: (typeof logoVal == 'string') ? (logoVal as string) : '', - description: (typeof descVal == 'string') ? (descVal as string) : '' + id: (idVal != null && typeof idVal == 'string') ? (idVal as string) : '', + name: (nameVal != null && typeof nameVal == 'string') ? (nameVal as string) : '', + logo_url: (logoVal != null && typeof logoVal == 'string') ? (logoVal as string) : '', + description: (descVal != null && typeof descVal == 'string') ? (descVal as string) : '' } as Brand brands.push(brand) } + console.log('[getBrands] 返回品牌数量:', brands.length) return brands } catch (error) { console.error('获取品牌异常:', error) @@ -861,11 +875,98 @@ class SupabaseService { console.log(`Fallback (Raw) found: ${(res2.data as any[]).length} products`) - // Map raw data to Product interface (manually if needed for extra safety) const mappedData: Product[] = [] const rawData = res2.data as any[] for(let i = 0; i < rawData.length; i++) { - mappedData.push(rawData[i] as Product) + const item = rawData[i] as UTSJSONObject + const images: string[] = [] + + const mainImageUrl = item.getString('main_image_url') + if (mainImageUrl != null && mainImageUrl !== '') { + images.push(mainImageUrl) + } + + const imageUrlsRaw = item.get('image_urls') + if (imageUrlsRaw != null) { + try { + if (Array.isArray(imageUrlsRaw)) { + const arr = imageUrlsRaw as string[] + if (arr.length > 0 && images.length === 0) { + for (let j = 0; j < arr.length; j++) { + images.push(arr[j]) + } + } + } else { + const rawUrlStr = imageUrlsRaw as string + if (rawUrlStr.startsWith('[')) { + const parsed = JSON.parse(rawUrlStr) + if (Array.isArray(parsed) && images.length === 0) { + for (let j = 0; j < parsed.length; j++) { + images.push(parsed[j] as string) + } + } + } else { + if (images.indexOf(rawUrlStr) === -1) images.push(rawUrlStr) + } + } + } catch(e) { + console.error('解析图片数组失败:', e) + } + } + + if (images.length === 0) { + images.push('/static/default-product.png') + } + + let safePrice = item.getNumber('base_price') + if (safePrice == null) { + const p = item.getNumber('price') + safePrice = p != null ? p : 0 + } + + let safeOriginalPrice = item.getNumber('market_price') + if (safeOriginalPrice == null) { + const op = item.getNumber('original_price') + safeOriginalPrice = op != null ? op : safePrice + } + + let safeStock = item.getNumber('total_stock') + if (safeStock == null) { + let as_ = item.getNumber('available_stock') + if (as_ == null) { + const s = item.getNumber('stock') + safeStock = s != null ? s : 0 + } else { + safeStock = as_ + } + } + + let safeSales = item.getNumber('sale_count') + if (safeSales == null) { + const s = item.getNumber('sales') + safeSales = s != null ? s : 0 + } + + const product: Product = { + id: item.getString('id') ?? '', + category_id: item.getString('category_id') ?? '', + merchant_id: item.getString('merchant_id') ?? '', + name: item.getString('name') ?? '', + description: item.getString('description') ?? '', + images: images, + price: safePrice, + original_price: safeOriginalPrice, + stock: safeStock, + sales: safeSales, + status: item.getNumber('status') ?? 1, + created_at: item.getString('created_at') ?? '', + base_price: safePrice, + market_price: safeOriginalPrice, + main_image_url: images.length > 0 ? images[0] : '', + sale_count: safeSales, + total_stock: safeStock + } as Product + mappedData.push(product) } return { @@ -897,6 +998,171 @@ class SupabaseService { } } + // 根据店铺ID获取商品列表(新增) + async getProductsByShopId(shopId: string, page: number = 1, limit: number = 20): Promise> { + try { + console.log('getProductsByShopId querying for:', shopId) + + // 1. Try fetching from view with shop_id + let query = supa + .from('ml_products_detail_view') + .select('*', { count: 'exact' }) + .eq('shop_id', shopId) + .order('created_at', { ascending: false }) + .page(page) + .limit(limit) + + const response = await query.execute() + + // 检查视图结果:如果有错误 OR 数据为空,都尝试去查原始表 + if (response.error != null || (response.data != null && (response.data as any[]).length === 0)) { + if (response.error != null) { + console.error('获取店铺商品失败 (View):', response.error) + } else { + console.log('View returned 0 products, trying raw table fallback...') + } + + // Fallback: Try raw table with shop_id + console.log('Falling back to raw ml_products table with shop_id...') + const query2 = supa + .from('ml_products') + .select('*', { count: 'exact' }) + .eq('shop_id', shopId) + .order('created_at', { ascending: false }) + .page(page) + .limit(limit) + + const res2 = await query2.execute() + if (res2.error != null) { + console.error('获取店铺商品失败 (Raw):', res2.error) + return {data:[] as Product[], total:0, page, limit, hasmore:false} + } + + console.log(`Fallback (Raw) found: ${(res2.data as any[]).length} products`) + + const mappedData: Product[] = [] + const rawData = res2.data as any[] + for(let i = 0; i < rawData.length; i++) { + const item = rawData[i] as UTSJSONObject + const images: string[] = [] + + const mainImageUrl = item.getString('main_image_url') + if (mainImageUrl != null && mainImageUrl !== '') { + images.push(mainImageUrl) + } + + const imageUrlsRaw = item.get('image_urls') + if (imageUrlsRaw != null) { + try { + if (Array.isArray(imageUrlsRaw)) { + const arr = imageUrlsRaw as string[] + if (arr.length > 0 && images.length === 0) { + for (let j = 0; j < arr.length; j++) { + images.push(arr[j]) + } + } + } else { + const rawUrlStr = imageUrlsRaw as string + if (rawUrlStr.startsWith('[')) { + const parsed = JSON.parse(rawUrlStr) + if (Array.isArray(parsed) && images.length === 0) { + for (let j = 0; j < parsed.length; j++) { + images.push(parsed[j] as string) + } + } + } else { + if (images.indexOf(rawUrlStr) === -1) images.push(rawUrlStr) + } + } + } catch(e) { + console.error('解析图片数组失败:', e) + } + } + + if (images.length === 0) { + images.push('/static/default-product.png') + } + + let safePrice = item.getNumber('base_price') + if (safePrice == null) { + const p = item.getNumber('price') + safePrice = p != null ? p : 0 + } + + let safeOriginalPrice = item.getNumber('market_price') + if (safeOriginalPrice == null) { + const op = item.getNumber('original_price') + safeOriginalPrice = op != null ? op : safePrice + } + + let safeStock = item.getNumber('total_stock') + if (safeStock == null) { + let as_ = item.getNumber('available_stock') + if (as_ == null) { + const s = item.getNumber('stock') + safeStock = s != null ? s : 0 + } else { + safeStock = as_ + } + } + + let safeSales = item.getNumber('sale_count') + if (safeSales == null) { + const s = item.getNumber('sales') + safeSales = s != null ? s : 0 + } + + const product: Product = { + id: item.getString('id') ?? '', + category_id: item.getString('category_id') ?? '', + merchant_id: item.getString('merchant_id') ?? '', + name: item.getString('name') ?? '', + description: item.getString('description') ?? '', + images: images, + price: safePrice, + original_price: safeOriginalPrice, + stock: safeStock, + sales: safeSales, + status: item.getNumber('status') ?? 1, + created_at: item.getString('created_at') ?? '', + base_price: safePrice, + market_price: safeOriginalPrice, + main_image_url: images.length > 0 ? images[0] : '', + sale_count: safeSales, + total_stock: safeStock + } as Product + mappedData.push(product) + } + + return { + data: mappedData, + total: res2.total ?? 0, + page, + limit, + hasmore: res2.hasmore ?? false + } + } + + console.log(`Shop products found: ${(response.data as any[]).length}`) + return { + data: response.data as Product[], + total: response.total ?? 0, + page, + limit, + hasmore: response.hasmore ?? false + } + } catch (error) { + console.error('获取店铺商品异常:', error) + return { + data: [] as Product[], + total: 0, + page, + limit, + hasmore: false + } + } + } + // 获取热销商品(按销量排序) async getHotProducts(limit: number = 10): Promise { try { @@ -914,7 +1180,53 @@ class SupabaseService { return [] } - return response.data as Product[] + const rawData = response.data + if (rawData == null) { + return [] + } + + const products: Product[] = [] + const rawList = rawData as any[] + for (let i: number = 0; i < rawList.length; i++) { + const item = rawList[i] + const prodObj = item as UTSJSONObject + const imagesRaw = prodObj.getArray('images') + let safePrice = prodObj.getNumber('base_price') + if (safePrice == null) { + const p = prodObj.getNumber('price') + safePrice = p != null ? p : 0 + } + let safeOriginalPrice = prodObj.getNumber('market_price') + if (safeOriginalPrice == null) { + const op = prodObj.getNumber('original_price') + safeOriginalPrice = op != null ? op : safePrice + } + const product: Product = { + id: prodObj.getString('id') ?? '', + name: prodObj.getString('name') ?? '', + description: prodObj.getString('description') ?? '', + base_price: safePrice, + price: safePrice, + original_price: safeOriginalPrice, + market_price: safeOriginalPrice, + main_image_url: prodObj.getString('main_image_url') ?? prodObj.getString('image_url') ?? '', + image_url: prodObj.getString('image_url') ?? '', + images: imagesRaw != null ? (imagesRaw as string[]) : [] as string[], + category_id: prodObj.getString('category_id') ?? '', + brand_id: prodObj.getString('brand_id') ?? '', + shop_id: prodObj.getString('shop_id') ?? '', + stock: prodObj.getNumber('stock') ?? 0, + sale_count: prodObj.getNumber('sale_count') ?? 0, + status: prodObj.getNumber('status') ?? 1, + is_featured: prodObj.getBoolean('is_featured') ?? false, + is_new: prodObj.getBoolean('is_new') ?? false, + rating: prodObj.getNumber('rating') ?? 0, + review_count: prodObj.getNumber('review_count') ?? 0, + merchant_id: prodObj.getString('merchant_id') ?? '' + } as Product + products.push(product) + } + return products } catch (error) { console.error('获取热销商品异常:', error) return [] @@ -937,7 +1249,53 @@ class SupabaseService { return [] } - return response.data as Product[] + const rawData = response.data + if (rawData == null) { + return [] + } + + const products: Product[] = [] + const rawList = rawData as any[] + for (let i: number = 0; i < rawList.length; i++) { + const item = rawList[i] + const prodObj = item as UTSJSONObject + const imagesRaw = prodObj.getArray('images') + let safePrice = prodObj.getNumber('base_price') + if (safePrice == null) { + const p = prodObj.getNumber('price') + safePrice = p != null ? p : 0 + } + let safeOriginalPrice = prodObj.getNumber('market_price') + if (safeOriginalPrice == null) { + const op = prodObj.getNumber('original_price') + safeOriginalPrice = op != null ? op : safePrice + } + const product: Product = { + id: prodObj.getString('id') ?? '', + name: prodObj.getString('name') ?? '', + description: prodObj.getString('description') ?? '', + base_price: safePrice, + price: safePrice, + original_price: safeOriginalPrice, + market_price: safeOriginalPrice, + main_image_url: prodObj.getString('main_image_url') ?? prodObj.getString('image_url') ?? '', + image_url: prodObj.getString('image_url') ?? '', + images: imagesRaw != null ? (imagesRaw as string[]) : [] as string[], + category_id: prodObj.getString('category_id') ?? '', + brand_id: prodObj.getString('brand_id') ?? '', + shop_id: prodObj.getString('shop_id') ?? '', + stock: prodObj.getNumber('stock') ?? 0, + sale_count: prodObj.getNumber('sale_count') ?? 0, + status: prodObj.getNumber('status') ?? 1, + is_featured: prodObj.getBoolean('is_featured') ?? false, + is_new: prodObj.getBoolean('is_new') ?? false, + rating: prodObj.getNumber('rating') ?? 0, + review_count: prodObj.getNumber('review_count') ?? 0, + merchant_id: prodObj.getString('merchant_id') ?? '' + } as Product + products.push(product) + } + return products } catch (error) { console.error('获取价格排序商品异常:', error) return [] @@ -952,7 +1310,7 @@ class SupabaseService { .select('*') .eq('is_new', true) .eq('status', 1) - .order('published_at', { ascending: false }) // Use published_at for newest + .order('published_at', { ascending: false }) .limit(limit) .execute() @@ -961,7 +1319,53 @@ class SupabaseService { return [] } - return response.data as Product[] + const rawData = response.data + if (rawData == null) { + return [] + } + + const products: Product[] = [] + const rawList = rawData as any[] + for (let i: number = 0; i < rawList.length; i++) { + const item = rawList[i] + const prodObj = item as UTSJSONObject + const imagesRaw = prodObj.getArray('images') + let safePrice = prodObj.getNumber('base_price') + if (safePrice == null) { + const p = prodObj.getNumber('price') + safePrice = p != null ? p : 0 + } + let safeOriginalPrice = prodObj.getNumber('market_price') + if (safeOriginalPrice == null) { + const op = prodObj.getNumber('original_price') + safeOriginalPrice = op != null ? op : safePrice + } + const product: Product = { + id: prodObj.getString('id') ?? '', + name: prodObj.getString('name') ?? '', + description: prodObj.getString('description') ?? '', + base_price: safePrice, + price: safePrice, + original_price: safeOriginalPrice, + market_price: safeOriginalPrice, + main_image_url: prodObj.getString('main_image_url') ?? prodObj.getString('image_url') ?? '', + image_url: prodObj.getString('image_url') ?? '', + images: imagesRaw != null ? (imagesRaw as string[]) : [] as string[], + category_id: prodObj.getString('category_id') ?? '', + brand_id: prodObj.getString('brand_id') ?? '', + shop_id: prodObj.getString('shop_id') ?? '', + stock: prodObj.getNumber('stock') ?? 0, + sale_count: prodObj.getNumber('sale_count') ?? 0, + status: prodObj.getNumber('status') ?? 1, + is_featured: prodObj.getBoolean('is_featured') ?? false, + is_new: prodObj.getBoolean('is_new') ?? false, + rating: prodObj.getNumber('rating') ?? 0, + review_count: prodObj.getNumber('review_count') ?? 0, + merchant_id: prodObj.getString('merchant_id') ?? '' + } as Product + products.push(product) + } + return products } catch (error) { console.error('获取新品异常:', error) return [] @@ -997,12 +1401,25 @@ class SupabaseService { const item = rawList[i] const prodObj = item as UTSJSONObject const imagesRaw = prodObj.getArray('images') + let safePrice = prodObj.getNumber('base_price') + if (safePrice == null) { + const p = prodObj.getNumber('price') + safePrice = p != null ? p : 0 + } + let safeOriginalPrice = prodObj.getNumber('market_price') + if (safeOriginalPrice == null) { + const op = prodObj.getNumber('original_price') + safeOriginalPrice = op != null ? op : safePrice + } const product: Product = { id: prodObj.getString('id') ?? '', name: prodObj.getString('name') ?? '', description: prodObj.getString('description') ?? '', - price: prodObj.getNumber('price') ?? 0, - original_price: prodObj.getNumber('original_price') ?? 0, + base_price: safePrice, + price: safePrice, + original_price: safeOriginalPrice, + market_price: safeOriginalPrice, + main_image_url: prodObj.getString('main_image_url') ?? prodObj.getString('image_url') ?? '', image_url: prodObj.getString('image_url') ?? '', images: imagesRaw != null ? (imagesRaw as string[]) : [] as string[], category_id: prodObj.getString('category_id') ?? '', @@ -1015,7 +1432,7 @@ class SupabaseService { is_new: prodObj.getBoolean('is_new') ?? false, rating: prodObj.getNumber('rating') ?? 0, review_count: prodObj.getNumber('review_count') ?? 0, - merchant_id: '' + merchant_id: prodObj.getString('merchant_id') ?? '' } as Product products.push(product) } @@ -1169,6 +1586,7 @@ class SupabaseService { let selected: boolean = false let createdAt: string = '' let updatedAt: string = '' + let cartMerchantId: string = '' if (item instanceof UTSJSONObject) { itemId = item.getString('id') ?? '' @@ -1179,6 +1597,7 @@ class SupabaseService { selected = item.getBoolean('selected') ?? false createdAt = item.getString('created_at') ?? '' updatedAt = item.getString('updated_at') ?? '' + cartMerchantId = item.getString('merchant_id') ?? '' } else { const iObj = JSON.parse(JSON.stringify(item)) as UTSJSONObject itemId = iObj.getString('id') ?? '' @@ -1189,12 +1608,13 @@ class SupabaseService { selected = iObj.getBoolean('selected') ?? false createdAt = iObj.getString('created_at') ?? '' updatedAt = iObj.getString('updated_at') ?? '' + cartMerchantId = iObj.getString('merchant_id') ?? '' } const product = productMap.get(productId) const sku = (skuId !== '' && skuMap.has(skuId)) ? skuMap.get(skuId) : null - let merchantId: string = '' + let merchantId: string = cartMerchantId let productName: string = '' let productImage: string = '' let productPrice: number = 0 @@ -1203,7 +1623,10 @@ class SupabaseService { if (product != null) { if (product instanceof UTSJSONObject) { - merchantId = product.getString('merchant_id') ?? '' + // 优先使用购物车中的 merchant_id,如果没有则使用商品中的 + if (merchantId == '') { + merchantId = product.getString('merchant_id') ?? '' + } productName = product.getString('name') ?? '' productImage = product.getString('main_image_url') ?? '' productPrice = product.getNumber('base_price') ?? 0 @@ -1531,7 +1954,7 @@ class SupabaseService { } // 添加商品到购物车 - async addToCart(productId: string, quantity: number = 1, skuId?: string): Promise { + async addToCart(productId: string, quantity: number = 1, skuId: string = '', merchantId: string = ''): Promise { try { const userId = this.getCurrentUserId() if (userId == null) { @@ -1540,6 +1963,7 @@ class SupabaseService { } const realSkuId = (skuId != null && skuId.length > 0) ? skuId : null + const realMerchantId = (merchantId != null && merchantId.length > 0) ? merchantId : null // 检查商品是否已在购物车中 // 注意:必须处理 sku_id 为空的情况,使用 is.null 过滤器 @@ -1602,6 +2026,7 @@ class SupabaseService { .from('ml_shopping_cart') .update({ quantity: newQty, + merchant_id: realMerchantId, updated_at: new Date().toISOString() }) .eq('id', itemId) @@ -1612,17 +2037,21 @@ class SupabaseService { } } else { // 商品不存在,添加新记录 + const cartPayload = new UTSJSONObject() + cartPayload.set('user_id', userId) + cartPayload.set('product_id', productId) + cartPayload.set('sku_id', realSkuId) + cartPayload.set('quantity', quantity) + cartPayload.set('selected', true) + cartPayload.set('created_at', new Date().toISOString()) + cartPayload.set('updated_at', new Date().toISOString()) + if (realMerchantId != null) { + cartPayload.set('merchant_id', realMerchantId) + } + response = await supa .from('ml_shopping_cart') - .insert({ - user_id: userId, - product_id: productId, - sku_id: realSkuId, - quantity: quantity, - selected: true, - created_at: new Date().toISOString(), - updated_at: new Date().toISOString() - }) + .insert(cartPayload) .execute() } @@ -1738,12 +2167,10 @@ class SupabaseService { // 删除购物车商品 async deleteCartItem(cartItemId: string): Promise { - return true - /* try { console.log('正在执行删除购物车商品,ID:', cartItemId) const userId = this.getCurrentUserId() - if (!userId) { + if (userId == null) { console.error('用户未登录,无法删除购物车商品') return false } @@ -1755,7 +2182,7 @@ class SupabaseService { .delete() .execute() - if (response.error) { + if (response.error != null) { console.error('删除购物车商品失败:', response.error) return false } @@ -1765,16 +2192,13 @@ class SupabaseService { console.error('删除购物车商品异常:', error) return false } - */ } // 批量删除购物车商品 async batchDeleteCartItems(cartItemIds: string[]): Promise { - return true - /* try { const userId = this.getCurrentUserId() - if (!userId) { + if (userId == null) { console.error('用户未登录,无法删除购物车商品') return false } @@ -1782,11 +2206,11 @@ class SupabaseService { const response = await supa .from('ml_shopping_cart') .eq('user_id', userId) - .in('id', cartItemIds) + .in('id', cartItemIds as any[]) .delete() .execute() - if (response.error) { + if (response.error != null) { console.error('批量删除购物车商品失败:', response.error) return false } @@ -1796,16 +2220,13 @@ class SupabaseService { console.error('批量删除购物车商品异常:', error) return false } - */ } // 清空购物车 async clearCart(): Promise { - return true - /* try { const userId = this.getCurrentUserId() - if (!userId) { + if (userId == null) { console.error('用户未登录,无法清空购物车') return false } @@ -1816,7 +2237,7 @@ class SupabaseService { .delete() .execute() - if (response.error) { + if (response.error != null) { console.error('清空购物车失败:', response.error) return false } @@ -1826,7 +2247,6 @@ class SupabaseService { console.error('清空购物车异常:', error) return false } - */ } // 获取当前用户的所有地址 @@ -2125,9 +2545,12 @@ class SupabaseService { const orderNo = 'ML' + Date.now() + Math.floor(Math.random() * 1000) let merchantId = orderData.merchant_id + console.log('[CreateOrder] 原始 merchant_id:', merchantId) if (merchantId == null || merchantId == '' || merchantId == 'unknown') { + console.warn('[CreateOrder] merchant_id 为空或无效,将使用 userId 作为 fallback') merchantId = userId } + console.log('[CreateOrder] 最终使用的 merchant_id:', merchantId) let shippingAddrStr = '{}' if (orderData.shipping_address != null) { @@ -2341,8 +2764,17 @@ class SupabaseService { const sId = group.getString('shopId') const shopName = group.getString('shopName') + console.log('[createOrdersByShop] 店铺组信息:', { + merchant_id: mId, + shopId: sId, + shopName: shopName + }) + + const finalMerchantId = (mId != null && mId != '') ? mId : (sId ?? '') + console.log('[createOrdersByShop] 最终使用的 merchant_id:', finalMerchantId) + const orderId = await this.createOrder({ - merchant_id: (mId != null && mId != '') ? mId : (sId ?? ''), // 兼容旧字段 + merchant_id: finalMerchantId, product_amount: productAmount, shipping_fee: shopShippingFee, total_amount: shopTotal, @@ -2597,7 +3029,7 @@ class SupabaseService { const quantity = item.getNumber('quantity') ?? 1 if (productId != null) { - await this.addToCart(productId, quantity, skuId ?? null) + await this.addToCart(productId, quantity, skuId ?? '', '') } } return true @@ -3443,6 +3875,7 @@ class SupabaseService { fpObj.set('sales', pSales) fpObj.set('shopId', pShopId) fpObj.set('shopName', pShopName) + fpObj.set('merchant_id', pShopId) fpObj.set('viewTime', viewTime) result.push(fpObj) } @@ -3512,6 +3945,97 @@ class SupabaseService { } } + // 删除单个足迹 + async deleteFootprint(productId: string): Promise { + try { + const userId = this.getCurrentUserId() + if (userId == null) { + console.log('[deleteFootprint] 用户未登录') + return false + } + + const response = await supa + .from('ml_user_footprints') + .eq('user_id', userId) + .eq('product_id', productId) + .delete() + .execute() + + if (response.error != null) { + console.error('[deleteFootprint] 删除足迹失败:', response.error) + return false + } + + console.log('[deleteFootprint] 删除足迹成功') + return true + } catch (e) { + console.error('[deleteFootprint] 删除足迹异常:', e) + return false + } + } + + // 批量删除足迹 + async deleteFootprints(productIds: string[]): Promise { + try { + const userId = this.getCurrentUserId() + if (userId == null) { + console.log('[deleteFootprints] 用户未登录') + return false + } + + const idsAny: any[] = [] + for (let i = 0; i < productIds.length; i++) { + idsAny.push(productIds[i]) + } + + const response = await supa + .from('ml_user_footprints') + .eq('user_id', userId) + .in('product_id', idsAny) + .delete() + .execute() + + if (response.error != null) { + console.error('[deleteFootprints] 批量删除足迹失败:', response.error) + return false + } + + console.log('[deleteFootprints] 批量删除足迹成功') + return true + } catch (e) { + console.error('[deleteFootprints] 批量删除足迹异常:', e) + return false + } + } + + // 清空所有足迹 + async clearFootprints(): Promise { + try { + const userId = this.getCurrentUserId() + if (userId == null) { + console.log('[clearFootprints] 用户未登录') + return false + } + + const response = await supa + .from('ml_user_footprints') + .eq('user_id', userId) + .delete() + .execute() + + if (response.error != null) { + console.error('[clearFootprints] 清空足迹失败:', response.error) + return false + } + + console.log('[clearFootprints] 清空足迹成功') + return true + } catch (e) { + console.error('[clearFootprints] 清空足迹异常:', e) + return false + } + } + async getAddressList(): Promise { try { const userId = this.getCurrentUserId()