From a1d7e81859f554f3a53680cc35f0f49bf1f77098 Mon Sep 17 00:00:00 2001
From: wwf <1971391498@qq.com>
Date: 星期四, 14 五月 2026 14:37:02 +0800
Subject: [PATCH] 导入项目
---
src/views/mall/product/spu/components/SkuTableSelect.vue | 95 +++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 95 insertions(+), 0 deletions(-)
diff --git a/src/views/mall/product/spu/components/SkuTableSelect.vue b/src/views/mall/product/spu/components/SkuTableSelect.vue
new file mode 100644
index 0000000..307208c
--- /dev/null
+++ b/src/views/mall/product/spu/components/SkuTableSelect.vue
@@ -0,0 +1,95 @@
+<template>
+ <Dialog v-model="dialogVisible" :appendToBody="true" title="閫夋嫨瑙勬牸" width="700">
+ <el-table v-loading="loading" :data="list" show-overflow-tooltip>
+ <el-table-column label="#" width="55">
+ <template #default="{ row }">
+ <el-radio :value="row.id" v-model="selectedSkuId" @change="handleSelected(row)"
+ >
+ </el-radio>
+ </template>
+ </el-table-column>
+ <el-table-column label="鍥剧墖" min-width="80">
+ <template #default="{ row }">
+ <el-image
+ :src="row.picUrl"
+ class="h-30px w-30px"
+ :preview-src-list="[row.picUrl]"
+ preview-teleported
+ />
+ </template>
+ </el-table-column>
+ <el-table-column label="瑙勬牸" align="center" min-width="80">
+ <template #default="{ row }">
+ {{ row.properties?.map((p) => p.valueName)?.join(' ') }}
+ </template>
+ </el-table-column>
+ <el-table-column align="center" label="閿�鍞环(鍏�)" min-width="80">
+ <template #default="{ row }">
+ {{ fenToYuan(row.price) }}
+ </template>
+ </el-table-column>
+ </el-table>
+ </Dialog>
+</template>
+
+<script lang="ts" setup>
+import { ElTable } from 'element-plus'
+import * as ProductSpuApi from '@/api/mall/product/spu'
+import { propTypes } from '@/utils/propTypes'
+import { fenToYuan } from '@/utils'
+
+defineOptions({ name: 'SkuTableSelect' })
+
+const props = defineProps({
+ spuId: propTypes.number.def(null)
+})
+
+const message = useMessage() // 娑堟伅寮圭獥
+const list = ref<any[]>([]) // 鍒楄〃鐨勬暟鎹�
+const loading = ref(false) // 鍒楄〃鐨勫姞杞戒腑
+const dialogVisible = ref(false) // 寮圭獥鐨勬槸鍚﹀睍绀�
+
+const selectedSkuId = ref() // 閫変腑鐨勫晢鍝� spuId
+
+/** 閫変腑鏃惰Е鍙� */
+const handleSelected = (row: ProductSpuApi.Sku) => {
+ emits('change', row)
+ // 鍏抽棴寮圭獥
+ dialogVisible.value = false
+ selectedSkuId.value = undefined
+}
+
+// 纭閫夋嫨鏃剁殑瑙﹀彂浜嬩欢
+const emits = defineEmits<{
+ (e: 'change', spu: ProductSpuApi.Sku): void
+}>()
+
+/** 鎵撳紑寮圭獥 */
+const open = () => {
+ dialogVisible.value = true
+}
+defineExpose({ open }) // 鎻愪緵 open 鏂规硶锛岀敤浜庢墦寮�寮圭獥
+
+/** 鏌ヨ鍒楄〃 */
+const getSpuDetail = async () => {
+ loading.value = true
+ try {
+ const spu = await ProductSpuApi.getSpu(props.spuId)
+ list.value = spu.skus
+ } finally {
+ loading.value = false
+ }
+}
+
+/** 鍒濆鍖� **/
+onMounted(async () => {})
+watch(
+ () => props.spuId,
+ () => {
+ if (!props.spuId) {
+ return
+ }
+ getSpuDetail()
+ }
+)
+</script>
--
Gitblit v1.8.0