1 line
25 KiB
Plaintext
1 line
25 KiB
Plaintext
{"version":3,"sources":["pages/mall/consumer/points/exchange.uvue","pages/user/login.uvue","uni_modules/ak-req/ak-req.uts"],"sourcesContent":["<template>\n <scroll-view class=\"exchange-page\" direction=\"vertical\">\n <view class=\"header\">\n <view class=\"points-info\">\n <text class=\"points-label\">可用积分</text>\n <text class=\"points-value\">{{ totalPoints }}</text>\n </view>\n <view class=\"header-actions\">\n <text class=\"records-link\" @click=\"goToRecords\">兑换记录</text>\n </view>\n </view>\n\n <view class=\"tabs\">\n <view \n class=\"tab-item\" \n :class=\"activeTab === 'all' ? 'active' : ''\"\n @click=\"switchTab('all')\"\n >\n <text class=\"tab-text\">全部</text>\n </view>\n <view \n class=\"tab-item\" \n :class=\"activeTab === 'coupon' ? 'active' : ''\"\n @click=\"switchTab('coupon')\"\n >\n <text class=\"tab-text\">优惠券</text>\n </view>\n <view \n class=\"tab-item\" \n :class=\"activeTab === 'physical' ? 'active' : ''\"\n @click=\"switchTab('physical')\"\n >\n <text class=\"tab-text\">实物</text>\n </view>\n <view \n class=\"tab-item\" \n :class=\"activeTab === 'virtual' ? 'active' : ''\"\n @click=\"switchTab('virtual')\"\n >\n <text class=\"tab-text\">虚拟</text>\n </view>\n </view>\n\n <view class=\"product-list\" v-if=\"!loading\">\n <view \n class=\"product-card\" \n v-for=\"product in filteredProducts\" \n :key=\"product.id\"\n @click=\"showExchangePopup(product)\"\n >\n <image \n class=\"product-image\" \n :src=\"product.image_url != null && product.image_url.length > 0 ? product.image_url : defaultImage\" \n mode=\"aspectFill\"\n />\n <view class=\"product-info\">\n <text class=\"product-name\">{{ product.name }}</text>\n <text class=\"product-desc\" v-if=\"product.description\">{{ product.description }}</text>\n <view class=\"product-bottom\">\n <view class=\"product-points\">\n <text class=\"points-num\">{{ product.points_required }}</text>\n <text class=\"points-unit\">积分</text>\n </view>\n <text class=\"product-stock\">库存{{ product.stock }}件</text>\n <text class=\"product-original\" v-if=\"product.original_price\">¥{{ product.original_price }}</text>\n </view>\n </view>\n </view>\n </view>\n\n <view class=\"empty-state\" v-if=\"!loading && filteredProducts.length === 0\">\n <text class=\"empty-text\">暂无可兑换商品</text>\n </view>\n\n <view class=\"loading-state\" v-if=\"loading\">\n <text class=\"loading-text\">加载中...</text>\n </view>\n\n <view class=\"exchange-popup\" v-if=\"showPopup\" @click=\"closePopup\">\n <view class=\"popup-content\" @click.stop>\n <view class=\"popup-header\">\n <text class=\"popup-title\">确认兑换</text>\n <text class=\"popup-close\" @click=\"closePopup\">×</text>\n </view>\n \n <view class=\"popup-product\" v-if=\"selectedProduct != null\">\n <image \n class=\"popup-product-image\" \n :src=\"selectedProduct.image_url != null && selectedProduct.image_url.length > 0 ? selectedProduct.image_url : defaultImage\" \n mode=\"aspectFill\"\n />\n <view class=\"popup-product-info\">\n <text class=\"popup-product-name\">{{ selectedProduct.name }}</text>\n <view class=\"popup-product-points\">\n <text class=\"popup-points-num\">{{ selectedProduct.points_required }}</text>\n <text class=\"popup-points-unit\">积分</text>\n </view>\n </view>\n </view>\n\n <view class=\"popup-quantity\">\n <text class=\"quantity-label\">兑换数量</text>\n <view class=\"quantity-control\">\n <text class=\"quantity-btn\" @click=\"decreaseQuantity\">-</text>\n <text class=\"quantity-value\">{{ exchangeQuantity }}</text>\n <text class=\"quantity-btn\" @click=\"increaseQuantity\">+</text>\n </view>\n </view>\n\n <view class=\"popup-summary\">\n <view class=\"summary-row\">\n <text class=\"summary-label\">消耗积分</text>\n <text class=\"summary-value\">{{ totalPointsCost }}</text>\n </view>\n <view class=\"summary-row\">\n <text class=\"summary-label\">当前积分</text>\n <text class=\"summary-value\">{{ totalPoints }}</text>\n </view>\n <view class=\"summary-row\" v-if=\"totalPoints < totalPointsCost\">\n <text class=\"summary-label insufficient\">积分不足</text>\n <text class=\"summary-value insufficient\">差{{ totalPointsCost - totalPoints }}</text>\n </view>\n </view>\n\n <button \n class=\"popup-btn\" \n :class=\"{ disabled: totalPoints < totalPointsCost }\"\n :disabled=\"totalPoints < totalPointsCost || exchanging\"\n @click=\"confirmExchange\"\n >\n {{ exchanging ? '兑换中...' : '确认兑换' }}\n </button>\n </view>\n </view>\n\n <view class=\"success-popup\" v-if=\"showSuccess\" @click=\"closeSuccess\">\n <view class=\"success-content\" @click.stop>\n <view class=\"success-icon\">✓</view>\n <text class=\"success-title\">兑换成功</text>\n <text class=\"success-desc\">消耗 {{ totalPointsCost }} 积分</text>\n <button class=\"success-btn\" @click=\"closeSuccess\">确定</button>\n </view>\n </view>\n </scroll-view>\n</template>\n\n<script setup lang=\"uts\">\nimport { ref, computed, onMounted } from 'vue'\nimport { supabaseService } from '@/utils/supabaseService.uts'\n\ntype PointProduct = {\n id: string\n name: string\n description: string | null\n image_url: string | null\n product_type: string\n points_required: number\n original_price: number | null\n stock: number\n status: number\n}\n\nconst totalPoints = ref<number>(0)\nconst products = ref<PointProduct[]>([])\nconst loading = ref<boolean>(true)\nconst activeTab = ref<string>('all')\nconst showPopup = ref<boolean>(false)\nconst showSuccess = ref<boolean>(false)\nconst selectedProduct = ref<PointProduct | null>(null)\nconst exchangeQuantity = ref<number>(1)\nconst exchanging = ref<boolean>(false)\n\nconst defaultImage: string = '/static/images/default-product.png'\n\nconst filteredProducts = computed((): PointProduct[] => {\n if (activeTab.value === 'all') {\n return products.value\n }\n const filtered: PointProduct[] = []\n for (let i = 0; i < products.value.length; i++) {\n if (products.value[i].product_type === activeTab.value) {\n filtered.push(products.value[i])\n }\n }\n return filtered\n})\n\nconst totalPointsCost = computed((): number => {\n if (selectedProduct.value == null) return 0\n return selectedProduct.value.points_required * exchangeQuantity.value\n})\n\nconst loadProducts = async (): Promise<void> => {\n loading.value = true\n try {\n const points = await supabaseService.getUserPoints()\n totalPoints.value = points\n\n const productList = await supabaseService.getPointProducts()\n const parsed: PointProduct[] = []\n for (let i = 0; i < productList.length; i++) {\n const item = productList[i]\n \n let id = ''\n let name = ''\n let description: string | null = null\n let image_url: string | null = null\n let product_type = 'coupon'\n let points_required = 0\n let original_price: number | null = null\n let stock = 0\n let status = 1\n \n let itemObj: UTSJSONObject | null = null\n if (item instanceof UTSJSONObject) {\n itemObj = item\n } else {\n itemObj = JSON.parse(JSON.stringify(item)) as UTSJSONObject\n }\n \n id = itemObj.getString('id') ?? ''\n name = itemObj.getString('name') ?? ''\n description = itemObj.getString('description')\n image_url = itemObj.getString('image_url')\n product_type = itemObj.getString('product_type') ?? 'coupon'\n points_required = itemObj.getNumber('points_required') ?? 0\n original_price = itemObj.getNumber('original_price')\n stock = itemObj.getNumber('stock') ?? 0\n status = itemObj.getNumber('status') ?? 1\n \n const product: PointProduct = {\n id,\n name,\n description,\n image_url,\n product_type,\n points_required,\n original_price,\n stock,\n status\n }\n parsed.push(product)\n }\n products.value = parsed\n } catch (e) {\n console.error('加载商品失败:', e)\n } finally {\n loading.value = false\n }\n}\n\nconst switchTab = (tab: string): void => {\n activeTab.value = tab\n}\n\nconst showExchangePopup = (product: PointProduct): void => {\n selectedProduct.value = product\n exchangeQuantity.value = 1\n showPopup.value = true\n}\n\nconst closePopup = (): void => {\n showPopup.value = false\n selectedProduct.value = null\n}\n\nconst increaseQuantity = (): void => {\n if (selectedProduct.value != null && exchangeQuantity.value < selectedProduct.value.stock) {\n exchangeQuantity.value++\n }\n}\n\nconst decreaseQuantity = (): void => {\n if (exchangeQuantity.value > 1) {\n exchangeQuantity.value--\n }\n}\n\nconst confirmExchange = async (): Promise<void> => {\n if (selectedProduct.value == null) return\n if (totalPoints.value < totalPointsCost.value) return\n \n exchanging.value = true\n \n try {\n const result = await supabaseService.exchangeProduct(\n selectedProduct.value.id,\n exchangeQuantity.value,\n null\n )\n \n if (result.getBoolean('success') === true) {\n showPopup.value = false\n totalPoints.value -= totalPointsCost.value\n showSuccess.value = true\n loadProducts()\n } else {\n const message = result.getString('message') ?? '兑换失败'\n uni.showToast({ title: message, icon: 'none' })\n }\n } catch (e) {\n console.error('兑换异常:', e)\n uni.showToast({ title: '兑换异常', icon: 'none' })\n } finally {\n exchanging.value = false\n }\n}\n\nconst closeSuccess = (): void => {\n showSuccess.value = false\n}\n\nconst goToRecords = (): void => {\n uni.navigateTo({\n url: '/pages/mall/consumer/points/exchange-records'\n })\n}\n\nonMounted(() => {\n loadProducts()\n})\n</script>\n\n<style>\n.exchange-page {\n flex: 1;\n height: 100%;\n background-color: #f5f5f5;\n}\n\n.header {\n background: linear-gradient(135deg, #ff6b35 0%, #ff8c42 100%);\n padding: 16px;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n}\n\n.points-info {\n display: flex;\n flex-direction: column;\n}\n\n.points-label {\n font-size: 12px;\n color: rgba(255, 255, 255, 0.8);\n}\n\n.points-value {\n font-size: 28px;\n font-weight: bold;\n color: white;\n}\n\n.header-actions {\n display: flex;\n flex-direction: row;\n}\n\n.records-link {\n font-size: 14px;\n color: white;\n padding: 6px 12px;\n background-color: rgba(255, 255, 255, 0.2);\n border-radius: 16px;\n}\n\n.tabs {\n display: flex;\n flex-direction: row;\n background-color: white;\n padding: 0 16px;\n}\n\n.tab-item {\n flex: 1;\n padding: 12px 0;\n display: flex;\n align-items: center;\n justify-content: center;\n border-bottom: 2px solid transparent;\n}\n\n.tab-item.active {\n border-bottom-color: #ff6b35;\n}\n\n.tab-text {\n font-size: 14px;\n color: #666;\n}\n\n.tab-item.active .tab-text {\n color: #ff6b35;\n font-weight: bold;\n}\n\n.product-list {\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n padding: 8px;\n}\n\n.product-card {\n width: 48%;\n margin: 4px;\n background-color: white;\n border-radius: 8px;\n overflow: hidden;\n}\n\n.product-image {\n width: 100%;\n height: 150px;\n}\n\n.product-info {\n padding: 8px;\n}\n\n.product-name {\n font-size: 14px;\n color: #333;\n lines: 2;\n text-overflow: ellipsis;\n}\n\n.product-desc {\n font-size: 12px;\n color: #999;\n margin-top: 4px;\n lines: 1;\n text-overflow: ellipsis;\n}\n\n.product-bottom {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n margin-top: 8px;\n}\n\n.product-points {\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n\n.points-num {\n font-size: 18px;\n font-weight: bold;\n color: #ff6b35;\n}\n\n.points-unit {\n font-size: 12px;\n color: #ff6b35;\n margin-left: 2px;\n}\n\n.product-stock {\n font-size: 12px;\n color: #ff6b35;\n}\n\n.product-original {\n font-size: 12px;\n color: #999;\n}\n\n.empty-state {\n padding: 60px 0;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.empty-text {\n font-size: 14px;\n color: #999;\n}\n\n.loading-state {\n padding: 60px 0;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.loading-text {\n font-size: 14px;\n color: #999;\n}\n\n.exchange-popup {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: flex-end;\n justify-content: center;\n z-index: 1000;\n}\n\n.popup-content {\n background-color: white;\n border-radius: 16px 16px 0 0;\n width: 100%;\n padding: 16px;\n}\n\n.popup-header {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.popup-title {\n font-size: 18px;\n font-weight: bold;\n color: #333;\n}\n\n.popup-close {\n font-size: 24px;\n color: #999;\n}\n\n.popup-product {\n display: flex;\n flex-direction: row;\n padding: 12px;\n background-color: #f9f9f9;\n border-radius: 8px;\n margin-bottom: 16px;\n}\n\n.popup-product-image {\n width: 80px;\n height: 80px;\n border-radius: 4px;\n}\n\n.popup-product-info {\n flex: 1;\n margin-left: 12px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n}\n\n.popup-product-name {\n font-size: 14px;\n color: #333;\n lines: 2;\n}\n\n.popup-product-points {\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-top: 8px;\n}\n\n.popup-points-num {\n font-size: 20px;\n font-weight: bold;\n color: #ff6b35;\n}\n\n.popup-points-unit {\n font-size: 12px;\n color: #ff6b35;\n margin-left: 2px;\n}\n\n.popup-quantity {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n padding: 12px 0;\n border-bottom: 1px solid #f0f0f0;\n}\n\n.quantity-label {\n font-size: 14px;\n color: #333;\n}\n\n.quantity-control {\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n\n.quantity-btn {\n width: 28px;\n height: 28px;\n background-color: #f5f5f5;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 18px;\n color: #666;\n}\n\n.quantity-value {\n width: 40px;\n text-align: center;\n font-size: 16px;\n color: #333;\n}\n\n.popup-summary {\n padding: 12px 0;\n}\n\n.summary-row {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.summary-label {\n font-size: 14px;\n color: #666;\n}\n\n.summary-label.insufficient {\n color: #ff6b35;\n}\n\n.summary-value {\n font-size: 14px;\n color: #333;\n}\n\n.summary-value.insufficient {\n color: #ff6b35;\n}\n\n.popup-btn {\n background: linear-gradient(135deg, #ff6b35 0%, #ff8c42 100%);\n color: white;\n font-size: 16px;\n font-weight: bold;\n border-radius: 24px;\n height: 44px;\n line-height: 44px;\n margin-top: 16px;\n}\n\n.popup-btn.disabled {\n background: #ccc;\n}\n\n.success-popup {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1001;\n}\n\n.success-content {\n background-color: white;\n border-radius: 16px;\n padding: 32px;\n width: 280px;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.success-icon {\n width: 60px;\n height: 60px;\n background-color: #52c41a;\n border-radius: 30px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 30px;\n color: white;\n margin-bottom: 16px;\n}\n\n.success-title {\n font-size: 20px;\n font-weight: bold;\n color: #333;\n margin-bottom: 8px;\n}\n\n.success-desc {\n font-size: 14px;\n color: #666;\n margin-bottom: 24px;\n}\n\n.success-btn {\n background-color: #ff6b35;\n color: white;\n font-size: 16px;\n border-radius: 20px;\n width: 100%;\n height: 40px;\n line-height: 40px;\n}\n</style>\n",null,null],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;YAkKA,IAAM,cAAc,IAAI,MAAM,EAAE,CAAC;YACjC,IAAM,WAAW,QAAI;YACrB,IAAM,UAAU,IAAI,OAAO,EAAE,IAAI;YACjC,IAAM,YAAY,IAAI,MAAM,EAAE;YAC9B,IAAM,YAAY,IAAI,OAAO,EAAE,KAAK;YACpC,IAAM,cAAc,IAAI,OAAO,EAAE,KAAK;YACtC,IAAM,kBAAkB,IAAI,eAAqB,IAAI;YACrD,IAAM,mBAAmB,IAAI,MAAM,EAAE,CAAC;YACtC,IAAM,aAAa,IAAI,OAAO,EAAE,KAAK;YAErC,IAAM,cAAc,MAAM,GAAG;YAE7B,IAAM,mBAAmB,SAAS,gBAAI,cAAiB;gBACrD,IAAI,UAAU,KAAK,CAAA,GAAA,CAAK,OAAO;oBAC7B,OAAO,SAAS,KAAK;;gBAEvB,IAAM,mBAAU,gBAAiB,KAAE;oBACnC;oBAAK,IAAI,YAAI,CAAC;oBAAd,MAAgB,EAAC,CAAA,CAAG,SAAS,KAAK,CAAC,MAAM;wBACvC,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC,YAAY,CAAA,GAAA,CAAK,UAAU,KAAK,EAAE;4BACtD,SAAS,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;;wBAFQ;;;gBAK3C,OAAO;YACT;;YAEA,IAAM,kBAAkB,SAAS,OAAI,MAAM,CAAG;gBAC5C,IAAI,gBAAgB,KAAK,CAAA,EAAA,CAAI,IAAI;oBAAE,OAAO,CAAC;;gBAC3C,OAAO,gBAAgB,KAAK,GAAC,eAAe,CAAA,CAAA,CAAG,iBAAiB,KAAK;YACvE;;YAEA,IAAM,eAAe,OAAU,WAAQ,IAAI,EAAI;gBAAA,OAAA,eAAA;wBAC7C,QAAQ,KAAK,GAAG,IAAI;wBACpB,IAAI;4BACF,IAAM,SAAS,MAAM,gBAAgB,aAAa;4BAClD,YAAY,KAAK,GAAG;4BAEpB,IAAM,cAAc,MAAM,gBAAgB,gBAAgB;4BAC1D,IAAM,iBAAQ,gBAAiB,KAAE;gCACjC;gCAAK,IAAI,YAAI,CAAC;gCAAd,MAAgB,EAAC,CAAA,CAAG,YAAY,MAAM;oCACpC,IAAM,OAAO,WAAW,CAAC,EAAE;oCAE3B,IAAI,KAAK;oCACT,IAAI,OAAO;oCACX,IAAI,aAAa,MAAM,IAAU,IAAI;oCACrC,IAAI,WAAW,MAAM,IAAU,IAAI;oCACnC,IAAI,eAAe;oCACnB,IAAI,0BAAkB,CAAC;oCACvB,IAAI,gBAAgB,MAAM,IAAU,IAAI;oCACxC,IAAI,gBAAQ,CAAC;oCACb,IAAI,iBAAS,CAAC;oCAEd,IAAI,SAAS,iBAAuB,IAAI;oCACxC,IAAI,KAAI,EAAA,CAAY,eAAe;wCACjC,UAAU,KAAI,EAAA,CAAA;sCACT,IAEN,CAFM;wCACL,UAAS,WAAA,iBAAA,CAAC,KAAK,KAAK,CAAC,KAAK,SAAS,CAAC,QAAK,oDAAC,EAAA,CAAI;;oCAGhD,KAAK,QAAQ,SAAS,CAAC,MAAK,EAAA,CAAI;oCAChC,OAAO,QAAQ,SAAS,CAAC,QAAO,EAAA,CAAI;oCACpC,cAAc,QAAQ,SAAS,CAAC;oCAChC,YAAY,QAAQ,SAAS,CAAC;oCAC9B,eAAe,QAAQ,SAAS,CAAC,gBAAe,EAAA,CAAI;oCACpD,kBAAkB,QAAQ,SAAS,CAAC,mBAAkB,EAAA,CAAI,CAAC;oCAC3D,iBAAiB,QAAQ,SAAS,CAAC;oCACnC,QAAQ,QAAQ,SAAS,CAAC,SAAQ,EAAA,CAAI,CAAC;oCACvC,SAAS,QAAQ,SAAS,CAAC,UAAS,EAAA,CAAI,CAAC;oCAEzC,IAAM,UAAS,aACb,KAAA,IACA,OAAA,MACA,cAAA,aACA,YAAA,WACA,eAAA,cACA,kBAAA,iBACA,iBAAA,gBACA,QAAA,OACA,SAAA;oCAEF,OAAO,IAAI,CAAC;oCAzC0B;;;4BA2CxC,SAAS,KAAK,GAAG;;yBACjB,OAAO,cAAG;4BACV,QAAQ,KAAK,CAAC,WAAW,GAAA;;iCACjB;4BACR,QAAQ,KAAK,GAAG,KAAK;;iBAExB;YAAD;YAEA,IAAM,YAAY,IAAC,KAAK,MAAM,GAAG,IAAI,CAAG;gBACtC,UAAU,KAAK,GAAG;YACpB;YAEA,IAAM,oBAAoB,IAAC,SAAS,eAAe,IAAI,CAAG;gBACxD,gBAAgB,KAAK,GAAG;gBACxB,iBAAiB,KAAK,GAAG,CAAC;gBAC1B,UAAU,KAAK,GAAG,IAAI;YACxB;YAEA,IAAM,aAAa,OAAI,IAAI,CAAG;gBAC5B,UAAU,KAAK,GAAG,KAAK;gBACvB,gBAAgB,KAAK,GAAG,IAAI;YAC9B;YAEA,IAAM,mBAAmB,OAAI,IAAI,CAAG;gBAClC,IAAI,gBAAgB,KAAK,CAAA,EAAA,CAAI,IAAI,CAAA,EAAA,CAAI,iBAAiB,KAAK,CAAA,CAAA,CAAG,gBAAgB,KAAK,GAAC,KAAK,EAAE;oBACzF,iBAAiB,KAAK;;YAE1B;YAEA,IAAM,mBAAmB,OAAI,IAAI,CAAG;gBAClC,IAAI,iBAAiB,KAAK,CAAA,CAAA,CAAG,CAAC,EAAE;oBAC9B,iBAAiB,KAAK;;YAE1B;YAEA,IAAM,kBAAkB,OAAU,WAAQ,IAAI,EAAI;gBAAA,OAAA,eAAA;wBAChD,IAAI,gBAAgB,KAAK,CAAA,EAAA,CAAI,IAAI;4BAAE;;wBACnC,IAAI,YAAY,KAAK,CAAA,CAAA,CAAG,gBAAgB,KAAK;4BAAE;;wBAE/C,WAAW,KAAK,GAAG,IAAI;wBAEvB,IAAI;4BACF,IAAM,SAAS,MAAM,gBAAgB,eAAe,CAClD,gBAAgB,KAAK,GAAC,EAAE,EACxB,iBAAiB,KAAK,EACtB,IAAI;4BAGN,IAAI,OAAO,UAAU,CAAC,WAAU,GAAA,CAAK,IAAI,EAAE;gCACzC,UAAU,KAAK,GAAG,KAAK;gCACvB,YAAY,KAAK,IAAI,gBAAgB,KAAK;gCAC1C,YAAY,KAAK,GAAG,IAAI;gCACxB;8BACK,IAGN,CAHM;gCACL,IAAM,UAAU,OAAO,SAAS,CAAC,WAAU,EAAA,CAAI;+DAC/B,QAAO,SAAS,OAAM;;;yBAExC,OAAO,cAAG;4BACV,QAAQ,KAAK,CAAC,SAAS,GAAA;2DACP,QAAO,QAAQ,OAAM;;iCAC7B;4BACR,WAAW,KAAK,GAAG,KAAK;;iBAE3B;YAAD;YAEA,IAAM,eAAe,OAAI,IAAI,CAAG;gBAC9B,YAAY,KAAK,GAAG,KAAK;YAC3B;YAEA,IAAM,cAAc,OAAI,IAAI,CAAG;iDAE3B,MAAK;YAET;YAEA,UAAU,KAAK;gBACb;YACF;;;uBA/TE,IA8Ic,eAAA,IA9ID,WAAM,iBAAgB,eAAU;oBAC3C,IAQO,QAAA,IARD,WAAM,WAAQ;wBAClB,IAGO,QAAA,IAHD,WAAM,gBAAa;4BACvB,IAAsC,QAAA,IAAhC,WAAM,iBAAe;4BAC3B,IAAmD,QAAA,IAA7C,WAAM,iBAAc,IAAI,YAAA,KAAW,GAAA,CAAA;;wBAE3C,IAEO,QAAA,IAFD,WAAM,mBAAgB;4BAC1B,IAA2D,QAAA,IAArD,WAAM,gBAAgB,aAAO,cAAa;;;oBAIpD,IA6BO,QAAA,IA7BD,WAAM,SAAM;wBAChB,IAMO,QAAA,IALL,WAAK,IAAA;4BAAC;4BACE,IAAA,UAAA,KAAS,CAAA,GAAA,CAAA,OAAA;gCAAA;4BAAA,EAAA,IAAA,CAAA;gCAAA;4BAAA;yBAAA,GAChB,aAAK,KAAA;4BAAE,UAAS;wBAAA;;4BAEjB,IAAgC,QAAA,IAA1B,WAAM,aAAW;;;;wBAEzB,IAMO,QAAA,IALL,WAAK,IAAA;4BAAC;4BACE,IAAA,UAAA,KAAS,CAAA,GAAA,CAAA,UAAA;gCAAA;4BAAA,EAAA,IAAA,CAAA;gCAAA;4BAAA;yBAAA,GAChB,aAAK,KAAA;4BAAE,UAAS;wBAAA;;4BAEjB,IAAiC,QAAA,IAA3B,WAAM,aAAW;;;;wBAEzB,IAMO,QAAA,IALL,WAAK,IAAA;4BAAC;4BACE,IAAA,UAAA,KAAS,CAAA,GAAA,CAAA,YAAA;gCAAA;4BAAA,EAAA,IAAA,CAAA;gCAAA;4BAAA;yBAAA,GAChB,aAAK,KAAA;4BAAE,UAAS;wBAAA;;4BAEjB,IAAgC,QAAA,IAA1B,WAAM,aAAW;;;;wBAEzB,IAMO,QAAA,IALL,WAAK,IAAA;4BAAC;4BACE,IAAA,UAAA,KAAS,CAAA,GAAA,CAAA,WAAA;gCAAA;4BAAA,EAAA,IAAA,CAAA;gCAAA;4BAAA;yBAAA,GAChB,aAAK,KAAA;4BAAE,UAAS;wBAAA;;4BAEjB,IAAgC,QAAA,IAA1B,WAAM,aAAW;;;;;gCAIO,QAAA,KAAO,GAAzC;wBAAA,IAyBO,QAAA,gBAzBD,WAAM;4BACV,IAuBO,UAAA,IAAA,EAAA,cAAA,UAAA,CArBa,iBAAA,KAAgB,EAAA,IAA3B,SAAA,OAAA,SAAO,UAAA,GAAA,CAAA;uCAFhB,IAuBO,QAAA,IAtBL,WAAM,gBAEL,SAAK,QAAQ,EAAE,EACf,aAAK,KAAA;oCAAE,kBAAkB;gCAAO;oCAEjC,IAIE,SAAA,IAHA,WAAM,iBACL,SAAK,IAAA,QAAQ,SAAS,CAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAY,QAAQ,SAAS,GAAC,MAAM,CAAA,CAAA,CAAA,CAAA,EAAO;wCAAA,QAAQ,SAAS;oCAAT,EAAY,IAAY,CAAZ;wCAAA;oCAAA,CAAY,EAClG,UAAK;;;oCAEP,IAWO,QAAA,IAXD,WAAM,iBAAc;wCACxB,IAAoD,QAAA,IAA9C,WAAM,iBAAc,IAAI,QAAQ,IAAI,GAAA,CAAA;mDACT,QAAQ,WAAW,GAApD;4CAAA,IAAsF,QAAA,gBAAhF,WAAM,qBAA6C,QAAQ,WAAW,GAAA,CAAA;wCAAA;;;wCAC5E,IAOO,QAAA,IAPD,WAAM,mBAAgB;4CAC1B,IAGO,QAAA,IAHD,WAAM,mBAAgB;gDAC1B,IAA6D,QAAA,IAAvD,WAAM,eAAY,IAAI,QAAQ,eAAe,GAAA,CAAA;gDACnD,IAAmC,QAAA,IAA7B,WAAM,gBAAc;;4CAE5B,IAAyD,QAAA,IAAnD,WAAM,kBAAgB,KAAE,CAAA,CAAA,IAAG,QAAQ,KAAK,EAAA,CAAA,CAAG,KAAC,CAAA;uDACb,QAAQ,cAAc,GAA3D;gDAAA,IAAiG,QAAA,gBAA3F,WAAM,qBAAiD,IAAC,CAAA,CAAA,IAAG,QAAQ,cAAc,GAAA,CAAA;4CAAA;;;;;;;;;;;;;;gCAM9D,QAAA,KAAO,CAAA,EAAA,CAAI,iBAAA,KAAgB,CAAC,MAAM,CAAA,GAAA,CAAA,CAAA,GAAnE;wBAAA,IAEO,QAAA,gBAFD,WAAM;4BACV,IAAuC,QAAA,IAAjC,WAAM,eAAa;;;;;;+BAGO,QAAA,KAAO,GAAzC;wBAAA,IAEO,QAAA,gBAFD,WAAM;4BACV,IAAwC,QAAA,IAAlC,WAAM,iBAAe;;;;;;+BAGM,UAAA,KAAS,GAA5C;wBAAA,IAuDO,QAAA,gBAvDD,WAAM,kBAAmC,aAAO;4BACpD,IAqDO,QAAA,IArDD,WAAM,iBAAiB,aAAK,cAAN,KAAA,CAAA,GAAW;gCAAA;6BAAA;gCACrC,IAGO,QAAA,IAHD,WAAM,iBAAc;oCACxB,IAAqC,QAAA,IAA/B,WAAM,gBAAc;oCAC1B,IAAsD,QAAA,IAAhD,WAAM,eAAe,aAAO,aAAY;;gCAGd,IAAA,gBAAA,KAAe,CAAA,EAAA,CAAA,IAAA,EAAjD;oCAAA,IAaO,QAAA,gBAbD,WAAM;wCACV,IAIE,SAAA,IAHA,WAAM,uBACL,SAAK,IAAA,gBAAA,KAAe,GAAC,SAAS,CAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAY,gBAAA,KAAe,GAAC,SAAS,GAAC,MAAM,CAAA,CAAA,CAAA,CAAA,EAAO;4CAAA,gBAAA,KAAe,GAAC,SAAS;wCAAT,EAAY,IAAY,CAAZ;4CAAA;wCAAA,CAAY,EAC1H,UAAK;;;wCAEP,IAMO,QAAA,IAND,WAAM,uBAAoB;4CAC9B,IAAkE,QAAA,IAA5D,WAAM,uBAAoB,IAAI,gBAAA,KAAe,GAAC,IAAI,GAAA,CAAA;4CACxD,IAGO,QAAA,IAHD,WAAM,yBAAsB;gDAChC,IAA2E,QAAA,IAArE,WAAM,qBAAkB,IAAI,gBAAA,KAAe,GAAC,eAAe,GAAA,CAAA;gDACjE,IAAyC,QAAA,IAAnC,WAAM,sBAAoB;;;;;;;gCAKtC,IAOO,QAAA,IAPD,WAAM,mBAAgB;oCAC1B,IAAwC,QAAA,IAAlC,WAAM,mBAAiB;oCAC7B,IAIO,QAAA,IAJD,WAAM,qBAAkB;wCAC5B,IAA6D,QAAA,IAAvD,WAAM,gBAAgB,aAAO,mBAAkB;wCACrD,IAA0D,QAAA,IAApD,WAAM,mBAAgB,IAAI,iBAAA,KAAgB,GAAA,CAAA;wCAChD,IAA6D,QAAA,IAAvD,WAAM,gBAAgB,aAAO,mBAAkB;;;gCAIzD,IAaO,QAAA,IAbD,WAAM,kBAAe;oCACzB,IAGO,QAAA,IAHD,WAAM,gBAAa;wCACvB,IAAuC,QAAA,IAAjC,WAAM,kBAAgB;wCAC5B,IAAwD,QAAA,IAAlD,WAAM,kBAAe,IAAI,gBAAA,KAAe,GAAA,CAAA;;oCAEhD,IAGO,QAAA,IAHD,WAAM,gBAAa;wCACvB,IAAuC,QAAA,IAAjC,WAAM,kBAAgB;wCAC5B,IAAoD,QAAA,IAA9C,WAAM,kBAAe,IAAI,YAAA,KAAW,GAAA,CAAA;;oCAEZ,IAAA,YAAA,KAAW,CAAA,CAAA,CAAG,gBAAA,KAAe,EAA7D;wCAAA,IAGO,QAAA,gBAHD,WAAM;4CACV,IAAoD,QAAA,IAA9C,WAAM,+BAA6B;4CACzC,IAAoF,QAAA,IAA9E,WAAM,+BAA6B,IAAC,CAAA,CAAA,IAAG,gBAAA,KAAe,CAAA,CAAA,CAAG,YAAA,KAAW,GAAA,CAAA;;;;;;gCAI9E,IAOS,UAAA,IANP,WAAK,IAAA;oCAAC;oCACE,IAAA,eAAA,YAAA,KAAA,CAAA,CAAA,CAAA,gBAAA,KAAA;iCAA2C,GAClD,eAAU,YAAA,KAAW,CAAA,CAAA,CAAG,gBAAA,KAAe,CAAA,EAAA,CAAI,WAAA,KAAU,GACrD,aAAO,sBAEL,IAAA,WAAA,KAAU,EAAA;oCAAA;gCAAA,EAAA,IAAA,CAAA;oCAAA;gCAAA,CAAA,GAAA,EAAA,EAAA;oCAAA;iCAAA;;;;;;;;;+BAKe,YAAA,KAAW,GAA7C;wBAAA,IAOO,QAAA,gBAPD,WAAM,iBAAoC,aAAO;4BACrD,IAKO,QAAA,IALD,WAAM,mBAAmB,aAAK,cAAN,KAAA,CAAA,GAAW;gCAAA;6BAAA;gCACvC,IAAmC,QAAA,IAA7B,WAAM,iBAAe;gCAC3B,IAAuC,QAAA,IAAjC,WAAM,kBAAgB;gCAC5B,IAA6D,QAAA,IAAvD,WAAM,iBAAe,MAAG,CAAA,CAAA,IAAG,gBAAA,KAAe,EAAA,CAAA,CAAG,OAAG,CAAA;gCACtD,IAA6D,UAAA,IAArD,WAAM,eAAe,aAAO,eAAc"} |