diff --git a/pages/index/product.vue b/pages/index/product.vue
index 7eb4faa..5c3d9ff 100644
--- a/pages/index/product.vue
+++ b/pages/index/product.vue
@@ -1,20 +1,69 @@
-
-
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/peach/components/p-goods-column/p-goods-column.vue b/peach/components/p-goods-column/p-goods-column.vue
new file mode 100644
index 0000000..b34f1cc
--- /dev/null
+++ b/peach/components/p-goods-column/p-goods-column.vue
@@ -0,0 +1,176 @@
+
+
+
+
+
+
+
+ {{ data.title || data.name }}
+
+
+ {{ data.subtitle || data.introduction }}
+
+
+
+
+
+ {{ priceUnit }}
+ {{ isArray(data.price) ? fen2yuan(data.price[0]) : fen2yuan(data.price) }}
+
+
+ {{ priceUnit }}
+ {{ fen2yuan(data.marketPrice) }}
+
+
+
+ {{ salesAndStock }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/peach/hooks/useGoods.js b/peach/hooks/useGoods.js
new file mode 100644
index 0000000..8cb666d
--- /dev/null
+++ b/peach/hooks/useGoods.js
@@ -0,0 +1,33 @@
+import { ref } from "vue";
+import dayjs from "dayjs";
+
+/**
+ * 将分转成元
+ *
+ * @param price 分,例如说 100 分
+ * @returns {string} 元,例如说 1.00 元
+ */
+export function fen2yuan(price) {
+ return (price / 100.0).toFixed(2);
+}
+
+/**
+ * 格式化销量
+ * @param {'exact' | string} type 格式类型:exact=精确值,其它=大致数量
+ * @param {number} num 销量
+ * @return {string} 格式化后的销量字符串
+ */
+export function formatSales(type, num) {
+ let prefix = type !== "exact" && num < 10 ? "销量" : "已售";
+ return formatNum(prefix, type, num);
+}
+
+/**
+ * 格式化库存
+ * @param {'exact' | any} type 格式类型:exact=精确值,其它=大致数量
+ * @param {number} num 销量
+ * @return {string} 格式化后的销量字符串
+ */
+export function formatStock(type, num) {
+ return formatNum("库存", type, num);
+}