diff --git a/src/assets/styles/global.less b/src/assets/styles/global.less
index aaea06d..24f4291 100644
--- a/src/assets/styles/global.less
+++ b/src/assets/styles/global.less
@@ -89,10 +89,6 @@ html.theme-dark body {
text-overflow: unset;
}
}
-
- .t-cell__description {
- margin-top: 0;
- }
}
.t-dialog__footer {
diff --git a/src/components/ProductSelector.vue b/src/components/ProductSelector.vue
index 6046cdc..886321a 100644
--- a/src/components/ProductSelector.vue
+++ b/src/components/ProductSelector.vue
@@ -9,6 +9,7 @@
>
+
import { BottomPopup } from "timi-tdesign-mobile";
import ProductAPI from "@/api/ProductAPI";
+import ProductSkuFormItem from "@/components/ProductSkuFormItem.vue";
import type {
Product,
ProductSelection,
@@ -143,6 +145,8 @@ const selectedProduct = computed(() => {
return props.selectedProduct || productList.value.find(item => item.skuList?.some(sku => sku.id === props.modelValue?.skuId));
});
const selectedProductName = computed(() => selectedProduct.value?.name || "");
+const selectedSku = computed(() => selectedProduct.value?.skuList?.find(sku => sku.id === props.modelValue?.skuId));
+const selectedUnit = computed(() => selectedSku.value?.unitList?.find(unit => unit.id === props.modelValue?.skuUnitId));
const filteredProductList = computed(() => {
const text = keyword.value.toLocaleLowerCase();
return productList.value.filter(item => !text || `${item.name}${item.code}`.toLocaleLowerCase().includes(text));
diff --git a/src/components/ProductSkuFormItem.vue b/src/components/ProductSkuFormItem.vue
new file mode 100644
index 0000000..a02d26a
--- /dev/null
+++ b/src/components/ProductSkuFormItem.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
diff --git a/src/components/ProductSkuSnapshotTags.vue b/src/components/ProductSkuTags.vue
similarity index 91%
rename from src/components/ProductSkuSnapshotTags.vue
rename to src/components/ProductSkuTags.vue
index 6c7aea5..a279941 100644
--- a/src/components/ProductSkuSnapshotTags.vue
+++ b/src/components/ProductSkuTags.vue
@@ -8,6 +8,7 @@
variant="light-outline"
:content="tag.content"
/>
+
@@ -15,7 +16,7 @@
import type { ProductSkuSpecSnapshot } from "@/types/Product";
import { getProductSkuSnapshotText } from "@/utils/product";
-defineOptions({ name: "ProductSkuSnapshotTags" });
+defineOptions({ name: "ProductSkuTags" });
interface Props {
productName?: string | null;
diff --git a/src/pages/fulfillment/OrderFulfillmentCreate.vue b/src/pages/fulfillment/OrderFulfillmentCreate.vue
index 2528d3e..289cd0c 100644
--- a/src/pages/fulfillment/OrderFulfillmentCreate.vue
+++ b/src/pages/fulfillment/OrderFulfillmentCreate.vue
@@ -42,7 +42,7 @@
v-if="item.skuCodeSnapshot || item.skuSpecSnapshot?.length || item.skuNameSnapshot || item.specSummarySnapshot || item.unitSnapshot"
class="sku-tags"
>
-
-
@@ -48,12 +47,14 @@
v-text="(item.productNameSnapshot || '产').slice(0, 1)"
/>
-
-
+
+
@@ -82,6 +83,7 @@ import { DialogPlugin } from "tdesign-mobile-vue";
import { Time } from "timi-web";
import { useUserStore } from "timi-web-api";
import PackageAPI from "@/api/PackageAPI";
+import ProductSkuTags from "@/components/ProductSkuTags.vue";
import { useCurrentStoreStore } from "@/store/currentStoreStore";
import { useNavBarStore } from "@/store/navBarStore";
import type { GaoPackageConfig, PackageConfigItem, PackageConfigStatus } from "@/types/Package";
@@ -89,7 +91,7 @@ import { getErrorMessage } from "@/utils/error";
import { formatPackageAmount, getPackageConfigStatusText } from "@/utils/package";
import { Message } from "@/utils/message";
import { gaoRoleCodes, permissionCodes } from "@/utils/permission";
-import { getProductPhotoURL as getProductPhotoUrl, getProductSkuSnapshotText } from "@/utils/product";
+import { getProductPhotoURL as getProductPhotoUrl } from "@/utils/product";
defineOptions({ name: "PackageConfigDetail" });
@@ -116,11 +118,6 @@ function getItemPhotoURL(item: PackageConfigItem): string {
return getProductPhotoUrl(item.sku || {});
}
-function getItemTitle(item: PackageConfigItem): string {
- const skuText = getProductSkuSnapshotText(item.productNameSnapshot, item.skuNameSnapshot, item.specSummarySnapshot);
- return `${item.productNameSnapshot || "未命名产品"}${skuText ? ` · ${skuText}` : ""}`;
-}
-
async function loadData(): Promise {
const id = String(route.params.id || "");
if (!id) {
@@ -286,16 +283,20 @@ onUnmounted(() => navBarStore.clearRight());
.item {
padding: 10px;
- .item-title {
- gap: .5rem;
+ :deep(.t-cell__title) {
display: flex;
align-items: center;
- justify-content: space-between;
}
.avatar {
- width: 3.5rem;
- height: 3.5rem;
+ width: 2.5rem;
+ height: 2.5rem;
+ }
+
+ .title {
+ gap: .5rem;
+ display: flex;
+ align-items: center;
}
}
}
diff --git a/src/pages/package/PackageConfigEdit.vue b/src/pages/package/PackageConfigEdit.vue
index 66472b4..51512b9 100644
--- a/src/pages/package/PackageConfigEdit.vue
+++ b/src/pages/package/PackageConfigEdit.vue
@@ -52,9 +52,6 @@
@update:model-value="applyProduct(index, $event)"
@select="applyProductSelection(index, $event)"
/>
-
-
-
-
- 停用配置
- 删除
-
+
): void {
form.status = String(value[0]) as PointRedeemSkuStatus;
statusVisible.value = false;
@@ -110,6 +124,8 @@ async function load(): Promise {
const item = await PointAPI.redeemSkuDetail(id);
form.id = item.id || "";
form.product = item.product;
+ form.sku = item.sku;
+ form.unit = item.unit;
selection.value = item.skuId && item.skuUnitId ? { skuId: item.skuId, skuUnitId: item.skuUnitId } : undefined;
form.pointText = String(item.defaultPointCost || "");
form.status = item.status || "DRAFT";
@@ -155,22 +171,6 @@ async function save(): Promise {
}
}
-async function disable(): Promise {
- if (!form.id || isSaving.value) {
- return;
- }
- isSaving.value = true;
- try {
- await PointAPI.redeemSkuDisable(form.id);
- Message.success("兑换配置已停用");
- await router.replace({ name: "PointRedeemSkuList" });
- } catch (error) {
- Message.error(getErrorMessage(error, "兑换配置停用失败"));
- } finally {
- isSaving.value = false;
- }
-}
-
async function remove(): Promise {
if (!form.id || isSaving.value) {
return;
@@ -209,17 +209,5 @@ onUnmounted(() => navBarStore.clearRight());
.tips {
font-size: .875rem;
}
-
- .actions {
- --td-button-border-radius: 1rem;
-
- gap: .75rem;
- margin: 0 1rem;
- display: flex;
-
- .t-button {
- flex: 1;
- }
- }
}
diff --git a/src/pages/point/PointRedeemSkuList.vue b/src/pages/point/PointRedeemSkuList.vue
index df1f083..aa25a9c 100644
--- a/src/pages/point/PointRedeemSkuList.vue
+++ b/src/pages/point/PointRedeemSkuList.vue
@@ -16,8 +16,8 @@
v-for="(item, index) in result.list"
:key="item.id"
class="item"
+ :title="item.product?.name || item.sku?.name || '未命名产品'"
arrow
- :description="item.unit?.name || '单位未知'"
v-entrance-transition="index * 30"
@click="toEdit(item)"
>
@@ -35,19 +35,23 @@
v-text="(item.product?.name || item.sku?.name || '产').slice(0, 1)"
/>
-
-
-
+
+
+
+
+
-
-
-
@@ -63,6 +67,7 @@