Browse Source

1. 创建与修改商品表单,增加“重量”字段
2. AI 优化 add.vue 与 detail.vue 文件

2.1 add.vue
- 我已删除未使用的组件与导入:去除 `AppAvatarModule`、`AppUploader`、`mapActions`、`regionData`,合并 `@/api/shop` 的重复导入,统一表单校验模块为 `validator`。
- 修复生命周期与初始化:`onLoad(option)` 接收参数并保存 `this.option`,存在 `id` 时直接拉取详情 `_getDet()`;`onShow` 仅负责设置标题。
- 统一事件与类型:所有 switch/radio/picker 事件改为使用 `e.detail.value`,并对需要的值做 `Number(...)` 转换,避免字符串数值引发逻辑分支错误。
- 健壮化详情回填:`openStartTime/openEndTime` 为空用 09:00/18:00 默认值;判空由 `== ''` 改为更稳健的 `!data.openStartTime`/`!data.openEndTime`。
- 统一异步错误处理与加载态:详情获取与提交新增 `catch` 分支,`finally` 中关闭 `uni.showLoading()`,避免异常时 Loading 不消失。
- 清理调试输出:删除 `console.log` 与未使用的中间方法 `_resultData`。

2.2 detail.vue

- 已移除未使用组件与字段
- 删除 `AppUploader` 的引入与组件注册。
- 删除无用的 `selectJobType`、顶层 `status`、`goodsInfo` 等 data 字段。
- 删除表单内无用字段 `setItemNum`。
- 已精简生命周期与数据装配
- `onLoad` 中移除无用的 `selectJobId` 赋值,仅保留取 token 与 `getDetail()`。
- `getDetail` 中删除对 `goodsInfo.goodsItem` 的中间处理逻辑,直接用返回数据填充 `form`。
- 已删除无用方法
- 删除 `init`、`changeKind`、`setItemNumChange`、`selectItem`、`flowerChange`。
- 保持功能一致并补充细节
- 保留并接入 `weight` 字段(含校验、聚焦/失焦处理、提交与列表同步展示中的数值转换)。
- 其它逻辑不变,`updateGoodsData({...form})` 将自动携带 `weight`。

shizhongqi 11 tháng trước cách đây
mục cha
commit
b70d574964

+ 1 - 3
.cursor/rules/general-rules.mdc

@@ -16,7 +16,6 @@ alwaysApply: true
 9. **Vue 语法**: 本项目使用的是 Vue 2,请使用 Options API。
 
 ### 跨平台兼容性
-- **小程序限制**: 注意小程序的包大小限制(主包2M,总包20M),合理使用分包加载
 - **App 端**: 考虑 App 端的原生能力和性能特性
 - **H5 端**: 注意浏览器兼容性和 SEO 优化
 - **平台差异**: 使用条件编译处理平台特有功能,如支付、分享、定位等
@@ -40,7 +39,6 @@ alwaysApply: true
 - hd       -- 桌面电脑 web 端
 
 **其他项目**
-- jdApp, mallApp -- 其他业务线的移动端应用
-- jdadmin -- 基地管理后台
+- mallApp -- 其他业务线的移动端应用
 
 **重要说明**: 各个项目是相互独立的,修改代码时请确认在对应项目目录中操作,不跨项目目录。

+ 23 - 0
hdApp/src/admin/goods/add.vue

@@ -92,6 +92,11 @@
           <input v-model="form.flowerNum" placeholder-class="phcolor" @focus="onFlowerNumFocus" @blur="onFlowerNumBlur" class="tui-input" name="flowerNum" placeholder="用于判断花束大小" maxlength="5" type="number" />
         </tui-list-cell>
 
+        <tui-list-cell class="line-cell" :hover="false">
+          <view class="tui-title">重量(千克)</view>
+          <input v-model="form.weight" placeholder-class="phcolor" @focus="onWeightFocus" @blur="onWeightBlur" class="tui-input" name="weight" placeholder="单位:千克,可输入小数" maxlength="10" type="digit" />
+        </tui-list-cell>
+
         <tui-list-cell class="line-cell" :hover="false">
           <view class="tui-title">节日涨价</view>
           <view class="btn-group">
@@ -167,6 +172,7 @@ export default {
         stockSet: '0', // 默认库存充足
         priceType: '0', // 默认无价格
         flowerNum: "",
+        weight: "",
         catIds: [],
         autoRise: "1",
         needSend: "0",
@@ -450,6 +456,15 @@ export default {
           return false;
         }
       }
+
+      // 验证重量(千克)
+      if (this.form.weight !== "") {
+        const weightNum = parseFloat(this.form.weight);
+        if (isNaN(weightNum) || weightNum < 0) {
+          this.$msg('重量必须是大于等于0的数字!');
+          return false;
+        }
+      }
       
       let formData = e.detail.value;
       let checkRes = form.validation(formData, rules);
@@ -476,6 +491,14 @@ export default {
     // 花支数输入框失焦
     onFlowerNumBlur() {
       this.onInputBlur('flowerNum');
+    },
+    // 重量输入框聚焦
+    onWeightFocus() {
+      this.onInputFocus('weight');
+    },
+    // 重量输入框失焦
+    onWeightBlur() {
+      this.onInputBlur('weight');
     }
   }
 };

+ 25 - 46
hdApp/src/admin/goods/detail.vue

@@ -97,6 +97,11 @@
           <input v-model="form.flowerNum" @focus="onFlowerNumFocus" @blur="onFlowerNumBlur" placeholder-class="phcolor" class="tui-input" name="flowerNum" placeholder="用于判断花束大小" maxlength="5" type="number" />
         </tui-list-cell>
 
+        <tui-list-cell class="line-cell" :hover="false">
+          <view class="tui-title">重量(千克)</view>
+          <input v-model="form.weight" @focus="onWeightFocus" @blur="onWeightBlur" placeholder-class="phcolor" class="tui-input" name="weight" placeholder="单位:千克,可输入小数" maxlength="10" type="digit" />
+        </tui-list-cell>
+
         <tui-list-cell class="line-cell" :hover="false">
           <view class="tui-title">节日涨价</view>
           <view class="btn-group">
@@ -140,12 +145,10 @@
   </view>
 </template>
 <script>
-import { mapGetters } from "vuex";
 import TuiListCell from "@/components/plugin/list-cell";
-import AppUploader from "@/components/app-uploader";
 const form = require("@/utils/formValidation.js");
 import { getClass } from "@/api/category";
-import { getGoodsDetail, addGoodsData, updateGoodsData } from "@/api/goods";
+import { getGoodsDetail, updateGoodsData } from "@/api/goods";
 //图片上传插件来源:https://ext.dcloud.net.cn/plugin?id=2922 已改造,不能再升级 shish 20211228
 import htzImageUpload from '@/components/htz-image-upload/htz-image-upload.vue'
 //import productMins from "@/mixins/product"; //复制页面代码时,没去掉,引入的话会导致页面崩溃
@@ -154,17 +157,13 @@ export default {
   name: "add",
   components: {
     TuiListCell,
-    AppUploader,
     htzImageUpload
   },
 	mixins: [inputRestore],//productMins, 
   data() {
     return {
-			selectJobType: "addGoodsSelectItem",
       headers:{token:''},
       currentImgData: [],
-      status: 1,
-      goodsInfo:[],
       loading: false, // 添加加载状态
 
       form: {
@@ -182,7 +181,7 @@ export default {
         status: "1",
         flower:1,
         flowerNum:0,
-        setItemNum:0,
+        weight: "",
         stock:0,
         cover: "",
         shortCover: ""
@@ -192,9 +191,6 @@ export default {
     };
   },
   onLoad() {
-		if(this.option.id){
-			this.selectJobId = this.option.id
-		}
     const token = uni.getStorageSync('token')
     this.headers.token = token
     this.getDetail()
@@ -218,15 +214,6 @@ export default {
   },
   methods: {
     init(){},
-    changeKind(){
-      this.pageTo({url:'/admin/goods/selectKind?style=2&flower='+this.form.flower})
-    },
-    setItemNumChange(e){
-      this.form.setItemNum = e.detail.value;
-    },
-    selectItem(goods){
-      this.pageTo({url:'/admin/goods/selectItem?id='+goods.id})
-    },
     imgDeleteFn(res){
       const index = res.index
       this.form.shopImg.splice(index,1)
@@ -299,25 +286,6 @@ export default {
           return;
         }
 
-        this.goodsInfo = res.data
-
-        if(this.goodsInfo.goodsItem && !this.$util.isEmpty(this.goodsInfo.goodsItem)){
-          const newItem = this.goodsInfo.goodsItem.map(ele=>{
-            let unitType = ele.unitType
-            let bigCount = 0
-            let smallCount = 0
-            let num = ele.num
-            if(unitType == 0){
-              bigCount = num
-            }else{
-              smallCount = num
-            }
-            return {name:ele.name,cover:ele.smallCover,itemId:ele.ptItemId,id:ele.itemId,ratio:ele.ratio,
-            bigCount:bigCount,smallCount:smallCount,bigUnit:ele.bigName,smallUnit:ele.smallName,shortCover:ele.shortCover}
-          })
-          //this.pushToSave(newItem)
-        }
-
         Object.keys(this.form).forEach((i) => {
           this.form[i] = res.data[i];
         });
@@ -342,7 +310,6 @@ export default {
         this.form.sold = res.data.sold || "";
         // 添加仅支持自取字段
         this.form.needSend = res.data.needSend || "0";
-        
         // 设置状态
         this.form.status = res.data.status || "1";
         
@@ -435,6 +402,15 @@ export default {
           return false;
         }
       }
+
+      // 验证重量(千克)
+      if (this.form.weight !== "") {
+        const weightNum = parseFloat(this.form.weight);
+        if (isNaN(weightNum) || weightNum < 0) {
+          this.$msg('重量必须是大于等于0的数字!');
+          return false;
+        }
+      }
       
       let formData = e.detail.value;
       let checkRes = form.validation(formData, rules);
@@ -520,6 +496,7 @@ export default {
                   stock: this.form.stockSet === '1' ? parseInt(this.form.stock || 0) : 9999,
                   sold: parseInt(this.form.sold || 0),
                   flowerNum: parseInt(this.form.flowerNum || 0),
+                  weight: parseFloat(this.form.weight || 0),
                   autoRise: this.form.autoRise,
                   needSend: this.form.needSend,
                   freightType: this.form.freightType,
@@ -563,12 +540,6 @@ export default {
     freightChange(e) {
       this.form.freightType = e.detail.value;
     },
-    flowerChange(e){
-      if(this.option.id && Number(this.option.id)>0){
-        this.$msg('不可修改')
-        return false
-      }
-    },
     statusChange(e){
       this.form.status = e.detail.value;
     },
@@ -596,6 +567,14 @@ export default {
     // 花支数输入框失焦
     onFlowerNumBlur() {
       this.onInputBlur('flowerNum');
+    },
+    // 重量输入框聚焦
+    onWeightFocus() {
+      this.onInputFocus('weight');
+    },
+    // 重量输入框失焦
+    onWeightBlur() {
+      this.onInputBlur('weight');
     }
   }
 };