-
-
+
+
+ 库存
+
+
+
+ 可用
+
+
+
+ 预占
+
+
@@ -35,7 +73,7 @@ import ProductAPI from "@/api/ProductAPI";
import { useNavBarStore } from "@/store/navBarStore";
import type { ProductStock } from "@/types/Product";
import { getErrorMessage } from "@/utils/error";
-import { getProductBaseUnitName, getProductQuantityText } from "@/utils/product";
+import { getProductPhotoURL, getProductQuantityText } from "@/utils/product";
import { Message } from "@/utils/message";
import { permissionCodes } from "@/utils/permission";
@@ -56,24 +94,6 @@ let requestToken = 0;
const emptyText = computed(() => isLoading.value ? "正在加载库存" : keyword.value ? "未找到匹配库存" : "暂无库存记录");
-function getStockStatusText(item: ProductStock): string {
- if (!item.product?.stockEnabled) {
- return "不管理库存";
- }
- const available = Number(item.availableQuantity || 0);
- const min = Number(item.product.minStockQuantity || 0);
- return 0 < min && available < min ? "库存不足" : "库存正常";
-}
-
-function getStockTheme(item: ProductStock): "danger" | "success" | "default" {
- if (!item.product?.stockEnabled) {
- return "default";
- }
- const available = Number(item.availableQuantity || 0);
- const min = Number(item.product.minStockQuantity || 0);
- return 0 < min && available < min ? "danger" : "success";
-}
-
async function fetch(reset = false): Promise
{
if (!reset && (isLoading.value || isNoMore.value)) {
return;
@@ -178,19 +198,47 @@ onUnmounted(() => {
}
}
- .list {
- padding-top: .75rem;
+ .list-wrap {
+ min-height: 70vh;
- .item {
- .title {
- gap: .5rem;
- display: flex;
- align-items: center;
- }
+ .list {
+ padding-top: .75rem;
- .description {
- display: grid;
- gap: .125rem;
+ .item {
+ padding: 10px;
+
+ .avatar {
+ width: 3.5rem;
+ height: 3.5rem;
+ }
+
+ .title {
+ gap: .5rem;
+ flex: 1;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ }
+
+ .stock {
+ gap: .5rem;
+ display: flex;
+ margin-top: .5rem;
+ flex-wrap: wrap;
+
+ strong {
+ display: inline-block;
+ margin-left: .25rem;
+ }
+ }
+
+ .reserved {
+ color: var(--td-warning-color);
+ }
+
+ .available {
+ color: var(--td-success-color);
+ }
}
}
}
diff --git a/src/pages/product/component/ProductProfile.vue b/src/pages/product/component/ProductProfile.vue
new file mode 100644
index 0000000..f251397
--- /dev/null
+++ b/src/pages/product/component/ProductProfile.vue
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+
+