diff --git a/common/js/goods_detail_base.js b/common/js/goods_detail_base.js index b37dc85..55e2d98 100644 --- a/common/js/goods_detail_base.js +++ b/common/js/goods_detail_base.js @@ -79,7 +79,7 @@ export default { }, methods: { // 处理商品详情数据 - handleGoodsSkuData() { + async handleGoodsSkuData() { // this.navbarData.title = this.goodsSkuDetail.goods_name.length > 9 ? this.goodsSkuDetail.goods_name.substr(0, 9) + "..." : this.goodsSkuDetail.goods_name; //设置标题 // this.$langConfig.title(this.navbarData.title); @@ -186,7 +186,7 @@ export default { // this.getBarrageData(); if (this.addonIsExist.form) { - this.getGoodsForm(); + await this.getGoodsForm(); } }, /** @@ -321,17 +321,35 @@ export default { }, /** * 获取商品表单 + * 后端与 /form/api/form/info 对齐:res.data = {json_data:[...组件], form_config:{...样式(camelCase)}} + * - 把组件数组塞进 goodsSkuDetail.goods_form(保持下游 用法不变) + * - 把 form_config 单独存到 goodsSkuDetail.goods_form_config,下游 消费 + * 历史扁平数组兼容:若后端还是返回 list 形态(旧实现),form_config 留空,走 ns-form 默认值。 + * 数据兜底:res.data 为 null(商品没绑表单)时也初始化为空数组 + 空对象, + * 避免下游 v-bind 把 undefined 传给 ns-newform 的 Array-typed :data prop。 */ - getGoodsForm() { - this.$api.sendRequest({ + async getGoodsForm() { + const res = await this.$api.sendRequest({ url: "/form/api/form/goodsform", data: { goods_id: this.goodsSkuDetail.goods_id }, - success: res => { - if (res.code == 0 && res.data) this.$set(this.goodsSkuDetail, 'goods_form', res.data); - } + async: false }); + if (!res || res.code != 0 || !res.data) { + // 商品没绑表单 / 接口报错:保持 goods_form 是空数组,避免下游 type 警告 + this.$set(this.goodsSkuDetail, 'goods_form', []); + this.$set(this.goodsSkuDetail, 'goods_form_config', {}); + return; + } + if (Array.isArray(res.data)) { + // 旧版扁平数组兼容 + this.$set(this.goodsSkuDetail, 'goods_form', res.data); + this.$set(this.goodsSkuDetail, 'goods_form_config', {}); + } else { + this.$set(this.goodsSkuDetail, 'goods_form', res.data.json_data || []); + this.$set(this.goodsSkuDetail, 'goods_form_config', res.data.form_config || {}); + } } }, /** diff --git a/pages_goods/detail.vue b/pages_goods/detail.vue index 46335b0..1eb63bb 100644 --- a/pages_goods/detail.vue +++ b/pages_goods/detail.vue @@ -411,7 +411,11 @@ --> - + diff --git a/pages_goods/public/js/detail.js b/pages_goods/public/js/detail.js index a04d65f..c9c90ea 100644 --- a/pages_goods/public/js/detail.js +++ b/pages_goods/public/js/detail.js @@ -156,7 +156,7 @@ export default { }; // 处理商品数据 - this.handleGoodsSkuData(); + await this.handleGoodsSkuData(); // 限时折扣 if (this.goodsSkuDetail.promotion_type == 1 && this.addonIsExist.discount) { @@ -221,7 +221,7 @@ export default { //商品留言打开 showinformation(){ - this.informationform = this.goodsSkuDetail.goods_form + this.informationform = this.goodsSkuDetail?.goods_form ?? []; this.$refs.informationPopup.open(); }, //商品留言关闭