Browse Source

修改,订单物流没有商品报错

YY 2 years ago
parent
commit
bfb89bf8f5

+ 0 - 498
src/views/platmanag/order/parts/detail/detail_orderDetail copy.vue

@@ -1,498 +0,0 @@
-<template>
-  <div id="form-1">
-    <el-row>
-      <el-col
-        :span="24"
-        class="main animate__animated animate__backInRight"
-        v-loading="loadings"
-        element-loading-text="拼命加载中"
-        element-loading-spinner="el-icon-loading"
-      >
-        <el-col class="top-btn">
-          <el-button type="primary" size="mini" @click="toBack()">返回</el-button>
-        </el-col>
-        <el-col :span="9" class="one">
-          <el-col :span="24" class="add">
-            <el-col :span="2">
-              <i class="el-icon-location"></i>
-            </el-col>
-            <el-col :span="22">
-              <el-col>
-                <p>{{ address.name }},{{ address.phone }}</p>
-              </el-col>
-              <el-col>
-                <p>{{ address.province }} , {{ address.city }} , {{ address.area }} , {{ address.address }}</p>
-              </el-col>
-            </el-col>
-          </el-col>
-          <el-col :span="24" class="shop"> <i class="el-icon-s-shop"></i>{{ shop.name }}</el-col>
-          <el-col :span="24" v-for="(item, index) in list" :key="index">
-            <el-col :span="24" class="goods bode">
-              <el-col :span="6"><el-image :src="item.goods.file[0].url"></el-image></el-col>
-              <el-col :span="18">
-                <el-col :span="12">
-                  <el-col>
-                    <p>{{ item.goods.name }}</p>
-                  </el-col>
-                  <el-col>
-                    <p>规格:{{ item.name }}</p>
-                  </el-col>
-                </el-col>
-                <el-col :span="12" class="money">
-                  <el-col>
-                    <p v-if="form.type == '0'">¥{{ item.sell_money }}</p>
-                    <p v-else-if="form.type == '1'">¥{{ item.group_config.money }}</p>
-                  </el-col>
-                  <el-col>
-                    <p>X{{ item.buy_num }}</p>
-                  </el-col>
-                  <el-col>
-                    <span class="spanfour" style="color: blue" @click="toUrl(item.goods.url)"> 查看商品来源:{{ item.goods.source }}</span>
-                  </el-col>
-                  <el-col>
-                    <p>{{ item.is_afterSale == true ? '已申请售后' : '未申请售后' }}</p>
-                  </el-col>
-                  <el-col>
-                    <p>{{ item.is_rate == true ? '已评价' : '未评价' }}</p>
-                  </el-col>
-                </el-col>
-              </el-col>
-            </el-col>
-            <el-col :span="24" class="bode">
-              <el-col :span="6">运费</el-col>
-              <el-col :span="18" class="other" v-if="!item.goods.freight == '0'">{{ item.goods.freight }}</el-col>
-              <el-col :span="18" class="other" v-else>包邮</el-col>
-            </el-col>
-          </el-col>
-          <el-col :span="24" class="bode">
-            <el-col :span="6">订单备注</el-col>
-            <el-col :span="18" class="other" v-if="form.remarks">{{ form.remarks }}</el-col>
-            <el-col :span="18" class="other" v-else>暂无备注</el-col>
-          </el-col>
-          <el-col :span="24" class="bode">
-            <el-col :span="6">配送方式</el-col>
-            <el-col :span="18" class="other">{{ form.transport_type_name }}</el-col>
-          </el-col>
-          <el-col :span="24" class="goods_total bode">
-            <el-col :span="6">快递费</el-col>
-            <el-col :span="18" class="other">
-              <p>¥{{ total_detail.freight_total }}</p>
-            </el-col>
-          </el-col>
-          <el-col :span="24" class="goods_total bode">
-            <el-col :span="8">优惠后实付金额</el-col>
-            <el-col :span="16" class="other">
-              <p>¥{{ pay.pay_money }}</p>
-            </el-col>
-          </el-col>
-          <el-col :span="24" class="bode">
-            <el-col :span="6">下单时间</el-col>
-            <el-col :span="18" class="other">{{ form.buy_time }}</el-col>
-          </el-col>
-          <el-col :span="24" class="bode">
-            <el-col :span="6">支付时间</el-col>
-            <el-col :span="18" class="other">{{ form.pay_time }}</el-col>
-          </el-col>
-          <el-col :span="24" class="bode" v-if="form.status == '3'">
-            <el-col :span="6">寄出运单号</el-col>
-            <el-col :span="18" class="other">{{ transport.shop_transport_no || '暂无单号' }}</el-col>
-          </el-col>
-          <el-col :span="24" class="bode" v-if="form.status == '3'">
-            <el-col :span="6">寄出快递公司</el-col>
-            <el-col :span="18" class="other">{{ transport.shop_transport_name || '暂无快递信息' }}</el-col>
-          </el-col>
-          <el-col :span="24">
-            <el-col v-for="(item, index) in transport" :key="index" class="transport">
-              <el-col :span="24" class="bode">
-                <el-col :span="6">发货商品{{ index + 1 }}</el-col>
-                <el-col :span="18" class="other">{{ item.goods_name }}</el-col>
-              </el-col>
-              <el-col :span="24" class="bode">
-                <el-col :span="6">发货数量</el-col>
-                <el-col :span="18" class="other">{{ item.num }}</el-col>
-              </el-col>
-              <el-col :span="24" class="bode">
-                <el-col :span="6">寄出运单号</el-col>
-                <el-col :span="18" class="other">{{ item.shop_transport_no || '暂无单号' }}</el-col>
-              </el-col>
-              <el-col :span="24" class="bode">
-                <el-col :span="6">寄出快递公司</el-col>
-                <el-col :span="18" class="other">{{ item.shop_transport_name || '暂无快递信息' }}</el-col>
-              </el-col>
-              <el-col :span="24" style="text-align: center">
-                <el-button type="danger" @click="toDel(item)"> 删除 </el-button>
-              </el-col>
-            </el-col>
-          </el-col>
-          <el-col v-if="form.status == '1' || form.status == '2-'">
-            <el-button type="primary" @click="onstatus('0')"> 全部发货 </el-button>
-            <el-button type="primary" @click="onstatus('1')"> 部分发货 </el-button>
-          </el-col>
-          <el-col :span="24" class="form" v-if="form.status == '1' || form.status == '2' || form.status == '2-'">
-            <el-form :model="form" ref="form" :rules="rules" label-width="100px" class="demo-ruleForm">
-              <el-form-item label="发货商品" prop="goods_name" v-if="status == '1' && form.transport_type == '0'">
-                <el-select v-model="form.goods_name" clearable filterable placeholder="请选择发货商品" size="small" style="width: 100%" @change="goodsChange">
-                  <el-option v-for="i in list" :key="i._id" :label="getName(i)" :value="i._id"> </el-option>
-                </el-select>
-                <p>
-                  <span style="color: red">用于部分发货 </span>
-                </p>
-              </el-form-item>
-              <el-form-item label="发货商品数量" prop="num" v-if="status == '1' && form.transport_type == '0'">
-                <el-input v-model="form.num" placeholder="请输入发货商品数量" size="small" @input="toNum"></el-input>
-                <p>
-                  用于部分发货:发货最大数量不得超过购买商品最大数量 <span style="color: red"> {{ buy_num }}</span>
-                </p>
-              </el-form-item>
-              <el-form-item label="寄出运单号" prop="shop_transport_no" v-if="form.transport_type == '0'">
-                <el-input v-model="form.shop_transport_no" placeholder="请输入运单号,快递公司,同时填入" size="small"></el-input>
-              </el-form-item>
-              <el-form-item label="快递公司" prop="shop_transport_type" v-if="form.transport_type == '0'">
-                <el-select
-                  v-model="form.shop_transport_type"
-                  filterable
-                  remote
-                  reserve-keyword
-                  placeholder="请选择快递公司,运单号,同时填入"
-                  :remote-method="querySearch"
-                  :loading="loading"
-                  @change="handleSelect"
-                  size="small"
-                  style="width: 100%"
-                >
-                  <el-option v-for="item in shop_transport_typeList" :key="item.id" :label="item.label" :value="item.value"> </el-option>
-                </el-select>
-              </el-form-item>
-              <el-form-item label="快递类型" prop="transport_type">
-                <el-select v-model="form.transport_type" clearable filterable placeholder="请选择快递类型" size="small" style="width: 100%">
-                  <el-option v-for="i in transport_typeList" :key="i.label" :label="i.label" :value="i.value"> </el-option>
-                </el-select>
-              </el-form-item>
-              <el-form-item>
-                <el-col>
-                  <el-button type="primary" @click="onSubmit('form', '2')" v-if="(form.status == '1' || form.status == '2-') && status == '0'">
-                    保存
-                  </el-button>
-                  <el-button type="primary" @click="onSubmit('form', '2-')" v-if="(form.status == '1' || form.status == '2-') && status == '1'">
-                    添加保存
-                  </el-button>
-                  <el-button type="primary" @click="onSubmit('form', '3')" v-if="form.status == '2'"> 确认收货 </el-button>
-                  <el-button type="primary" @click="onSubmit('form', '2')" v-if="form.status == '2'"> 保存 </el-button>
-                </el-col>
-              </el-form-item>
-            </el-form>
-          </el-col>
-        </el-col>
-        <el-col :span="9" class="one" v-if="transport.shop_transport_no">
-          <el-col :span="24">{{ activit.is_check || '暂无快递信息' }}</el-col>
-          <el-col :span="24">{{ transport.shop_transport_name || '暂无快递信息' }}: {{ activit.no || '暂无快递信息' }}</el-col>
-          <el-col :span="24">
-            <p>订单编号: {{ form.id }}</p>
-          </el-col>
-          <el-col :span="24">
-            <p>收货地址:{{ address.province }} , {{ address.city }} , {{ address.area }} , {{ address.address }}</p>
-          </el-col>
-          <el-col :span="24">
-            <el-timeline :reverse="reverse">
-              <el-timeline-item v-for="(activity, index) in activities" :key="index" :timestamp="activity.time" :color="activity.color">
-                {{ activity.context }}
-              </el-timeline-item>
-            </el-timeline>
-          </el-col>
-        </el-col>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-const _ = require('lodash');
-const moment = require('moment');
-import { mapState, mapGetters, createNamespacedHelpers } from 'vuex';
-const { mapActions } = createNamespacedHelpers('orderDetail');
-const { mapActions: dictData } = createNamespacedHelpers('dictData');
-const { mapActions: sot } = createNamespacedHelpers('sot');
-
-export default {
-  name: 'form-1',
-  props: { id: { type: String } },
-  components: {},
-  data: function () {
-    return {
-      form: {},
-      // 地址
-      address: {},
-      // 实付金额
-      total_detail: {},
-      // 商铺
-      shop: {},
-      // 运单号
-      transport: [],
-      pay: {},
-      // 商品列表
-      list: [],
-      // 物流
-      reverse: false,
-      activities: [],
-      activit: {},
-      // 订单状态
-      order_processList: [],
-      // 快递公司
-      shop_transport_typeList: [],
-      // 快递类型
-      transport_typeList: [],
-      loading: false,
-      rules: {
-        shop_transport_no: [{ required: true, message: '请输入快递单号', trigger: 'blur' }],
-        shop_transport_type: [{ required: true, message: '请选择快递公司', trigger: 'change' }],
-        transport_type: [{ required: true, message: '请选择快递类型', trigger: 'change' }],
-      },
-      loadings: true,
-      buy_num: '',
-      status: '0',
-    };
-  },
-  async created() {
-    await this.searchOther();
-
-    await this.search();
-  },
-  methods: {
-    ...dictData({ dictQuery: 'query' }),
-    ...sot({ sotFetch: 'fetch' }),
-    ...mapActions(['query', 'fetch', 'create', 'update']),
-    // 查询
-    async search() {
-      let res;
-      res = await this.fetch(this.id);
-      if (this.$checkRes(res)) {
-        let name = this.transport_typeList.find((i) => i.value == res.data.transport_type);
-        if (name) res.data.transport_type_name = name.label;
-        this.$set(this, `form`, res.data);
-        if (res.data.transport == undefined) this.$set(this.form, `transport_type`, '0');
-        // 地址
-        this.$set(this, `address`, res.data.address);
-        this.$set(this, `shop`, res.data.shop);
-        // 商品
-        this.$set(this, `list`, res.data.goods);
-        // 应付金额
-        this.$set(this, `total_detail`, res.data.total_detail);
-        this.$set(this, `pay`, res.data.order.pay);
-        if (res.data.transport != undefined) {
-          for (const p1 of res.data.transport) {
-            let goods = this.form.goods.find((i) => i.id == p1.goods);
-            if (goods) p1.goods_name = goods.goods.name + ',' + goods.name;
-            // p1.good = p1.goods;
-            let arr = await this.dictQuery({ code: 'transport_company', value: p1.shop_transport_type });
-            if (this.$checkRes(arr)) {
-              let type = arr.data.find((i) => i.value == p1.shop_transport_type);
-              if (type) {
-                p1.shop_transport_name = type.label;
-                this.querySearch(type.label);
-              }
-            }
-            // p1.shop_transport_type = this.transport.shop_transport_type;
-            // p1.shop_transport_no = this.transport.shop_transport_no;
-          }
-          this.$set(this, `transport`, res.data.transport);
-          res = await this.sotFetch(this.id);
-          if (this.$checkRes(res)) {
-            if (res.errcode == '0') {
-              let activities = res.data.list;
-              // activities[0].color = '#0bbd87';
-              this.$set(this, `activities`, activities);
-              this.$set(this, `activit`, res.data);
-            }
-          }
-        }
-      }
-      this.loadings = false;
-    },
-    async querySearch(value) {
-      this.loading = true;
-      let res = await this.dictQuery({ code: 'transport_company', label: value });
-      if (this.$checkRes(res)) {
-        this.$set(this, 'shop_transport_typeList', res.data);
-      }
-      this.loading = false;
-    },
-    toUrl(url) {
-      if (url) {
-        window.open(url, '_blank');
-      } else {
-        this.$message.error('该商品还未添加来源网址,无法跳转');
-      }
-    },
-    onstatus(status) {
-      this.status = status;
-    },
-    handleSelect(value) {},
-    // 选择商品
-    goodsChange(value) {
-      let name = this.form.goods.find((i) => i.id == value);
-      this.$set(this, `buy_num`, name.buy_num);
-    },
-    getName(i) {
-      let name = i.goods.name + ',' + i.name;
-      return name;
-    },
-
-    // 发货最大数量
-    toNum(val) {
-      if (val > this.buy_num) {
-        this.$message.error('超过发货最大数量');
-        this.$set(this.form, `num`, '');
-      }
-    },
-    toDel(data) {
-      this.$confirm('是否确认删除', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning',
-      }).then(async () => {
-        let list = this.transport;
-        let form = this.form;
-        let newList = list.filter((i) => i.id != data.id);
-        form.transport = newList;
-        this.$set(this, `transport`, newList);
-        let res;
-        if (form.id) res = await this.update(form);
-        if (this.$checkRes(res)) {
-          this.$message({ type: `success`, message: `维护信息成功` });
-          this.search();
-        }
-      });
-    },
-    // 提交
-    async onSubmit(formName, val) {
-      this.$refs[formName].validate(async (valid) => {
-        if (valid) {
-          this.$confirm('是否确认保存', '提示', {
-            confirmButtonText: '确定',
-            cancelButtonText: '取消',
-            type: 'warning',
-          }).then(async () => {
-            var form = this.form;
-            if (form.transport_type == '0') {
-              var shop_transport_no = form.shop_transport_no;
-              var shop_transport_type = form.shop_transport_type;
-              if (form.transport != undefined && val == '2-') {
-                let goods = form.goods_name;
-                let num = form.num;
-                form.transport.push({ id: moment(new Date()).valueOf(), goods, num, shop_transport_no, shop_transport_type });
-              } else if (form.transport == undefined && val == '2-') {
-                let goods = form.goods_name;
-                let num = form.num;
-                let transport = [];
-                transport.push({ id: moment(new Date()).valueOf(), goods, num, shop_transport_no, shop_transport_type });
-                form.transport = transport;
-              } else if ((val == '2' || val == '3') && form.transport_type == '0') {
-                let transport = [];
-                transport.push({ shop_transport_no, shop_transport_type });
-                form.transport = transport;
-              }
-            }
-            var res;
-            if (val != undefined || val != '') form.status = val;
-            if (form.id) res = await this.update(form);
-            if (this.$checkRes(res)) {
-              this.$message({ type: `success`, message: `维护信息成功` });
-              this.search();
-            }
-          });
-        } else {
-          return false;
-        }
-      });
-    },
-
-    // 返回
-    toBack() {
-      this.$emit('toBack');
-    },
-    // 查询其他信息
-    async searchOther() {
-      let res;
-      // 减免方式
-      res = await this.dictQuery({ code: 'order_process' });
-      if (this.$checkRes(res)) {
-        this.$set(this, `order_processList`, res.data);
-      }
-      // 快递类型
-      res = await this.dictQuery({ code: 'transport_type' });
-      if (this.$checkRes(res)) {
-        this.$set(this, `transport_typeList`, res.data);
-      }
-    },
-  },
-  computed: {},
-  metaform() {
-    return { title: this.$route.meta.title };
-  },
-  watch: {
-    test: {
-      deep: true,
-      immediate: true,
-      handler(val) {},
-    },
-  },
-};
-</script>
-
-<style lang="less" scoped>
-.main {
-  .one {
-    margin: 10px 0 0 2%;
-    padding: 5px;
-    .add {
-      border-bottom: 2px dashed #ccc;
-      margin: 0 0 5px 0;
-      padding: 5px 0;
-    }
-    .shop {
-      padding: 4px 0;
-      font-size: 18px;
-      border-bottom: 1px solid #ccc;
-    }
-    .goods {
-      padding: 10px 0;
-      .money {
-        text-align: right;
-      }
-    }
-    .transport {
-      margin: 50px;
-      padding: 5px;
-      // margin: 0 0 0 40px;
-      border: 1px solid rgb(254, 195, 195);
-    }
-    .other {
-      text-align: right;
-      word-break: break-all;
-      p {
-        color: red;
-      }
-      .spanfour {
-        color: blue;
-      }
-    }
-    .el-col {
-      margin: 3px 0;
-    }
-    .bode {
-      border-bottom: 1px solid rgb(238, 237, 237);
-    }
-    .form {
-      margin: 20px 0 0 0;
-    }
-  }
-}
-
-/deep/.el-timeline {
-  margin: 20px 0 0 0;
-  font-size: 16px;
-}
-/deep/.el-timeline-item__node:nth-child(1) {
-  background-color: green;
-}
-</style>

+ 8 - 5
src/views/platmanag/order/parts/detail/detail_orderDetail.vue

@@ -25,6 +25,7 @@
               :shop_transport_typeList="shop_transport_typeList"
               :transport_typeList="transport_typeList"
               @querySearch="querySearch"
+              @search="search"
             ></card-2>
           </el-tab-pane>
         </el-tabs>
@@ -87,8 +88,8 @@ export default {
       if (this.$checkRes(res)) {
         let name = this.transport_typeList.find((i) => i.value == res.data.transport_type);
         if (name) res.data.transport_type_name = name.label;
+        if (res.data.transport == undefined || res.data.transport.length == 0) res.data.transport_type = '0';
         this.$set(this, `form`, res.data);
-        if (res.data.transport == undefined) this.$set(this.form, `transport_type`, '0');
         // 地址
         this.$set(this, `address`, res.data.address);
         this.$set(this, `shop`, res.data.shop);
@@ -97,11 +98,13 @@ export default {
         // 应付金额
         this.$set(this, `total_detail`, res.data.total_detail);
         this.$set(this, `pay`, res.data.order.pay);
-        if (res.data.transport != undefined || res.data.transport.length != 0) {
+        if (res.data.transport != undefined || res.data.transport.length > 0) {
           for (const p1 of res.data.transport) {
-            for (const p2 of p1.goods) {
-              let goods = this.form.goods.find((i) => i.id == p2.goods_id);
-              if (goods) p2.goods_name = goods.goods.name + ',' + goods.name;
+            if (p1.goods) {
+              for (const p2 of p1.goods) {
+                let goods = this.form.goods.find((i) => i.id == p2.goods_id);
+                if (goods) p2.goods_name = goods.goods.name + ',' + goods.name;
+              }
             }
             let arr = await this.dictQuery({ code: 'transport_company', value: p1.shop_transport_type });
             if (this.$checkRes(arr)) {

+ 11 - 4
src/views/platmanag/order/parts/detail/parts/card-2.vue

@@ -129,6 +129,7 @@
 </template>
 
 <script>
+const moment = require('moment');
 import { mapState, createNamespacedHelpers } from 'vuex';
 const { mapActions } = createNamespacedHelpers('orderDetail');
 export default {
@@ -179,6 +180,9 @@ export default {
   created() {},
   methods: {
     ...mapActions(['query', 'fetch', 'create', 'update']),
+    search() {
+      this.$emit('search');
+    },
     // 远程查询
     async querySearch(value) {
       this.loading = true;
@@ -283,11 +287,9 @@ export default {
               var shop_transport_type = form.shop_transport_type;
               if (form.transport != undefined && val == '2-') {
                 let goods = this.goodsList;
-                // let num = form.num;
                 form.transport.push({ id: moment(new Date()).valueOf(), goods, shop_transport_no, shop_transport_type });
               } else if (form.transport == undefined && val == '2-') {
                 let goods = this.goodsList;
-                // let num = form.num;
                 let transport = [];
                 transport.push({ id: moment(new Date()).valueOf(), goods, shop_transport_no, shop_transport_type });
                 form.transport = transport;
@@ -297,9 +299,14 @@ export default {
                 form.transport = transport;
               }
             }
-            // console.log(form);
             var res;
-            if (val != undefined || val != '') form.status = val;
+            if (val != undefined || val != '') {
+              if (this.goodsList.length == 0) {
+                form.status = '2';
+              } else {
+                form.status = val;
+              }
+            }
             if (form.id) res = await this.update(form);
             if (this.$checkRes(res)) {
               this.$message({ type: `success`, message: `维护信息成功` });

+ 0 - 498
src/views/selfShop/order/parts/detail/detail_orderDetail copy.vue

@@ -1,498 +0,0 @@
-<template>
-  <div id="form-1">
-    <el-row>
-      <el-col
-        :span="24"
-        class="main animate__animated animate__backInRight"
-        v-loading="loadings"
-        element-loading-text="拼命加载中"
-        element-loading-spinner="el-icon-loading"
-      >
-        <el-col class="top-btn">
-          <el-button type="primary" size="mini" @click="toBack()">返回</el-button>
-        </el-col>
-        <el-col :span="9" class="one">
-          <el-col :span="24" class="add">
-            <el-col :span="2">
-              <i class="el-icon-location"></i>
-            </el-col>
-            <el-col :span="22">
-              <el-col>
-                <p>{{ address.name }},{{ address.phone }}</p>
-              </el-col>
-              <el-col>
-                <p>{{ address.province }} , {{ address.city }} , {{ address.area }} , {{ address.address }}</p>
-              </el-col>
-            </el-col>
-          </el-col>
-          <el-col :span="24" class="shop"> <i class="el-icon-s-shop"></i>{{ shop.name }}</el-col>
-          <el-col :span="24" v-for="(item, index) in list" :key="index">
-            <el-col :span="24" class="goods bode">
-              <el-col :span="6"><el-image :src="item.goods.file[0].url"></el-image></el-col>
-              <el-col :span="18">
-                <el-col :span="12">
-                  <el-col>
-                    <p>{{ item.goods.name }}</p>
-                  </el-col>
-                  <el-col>
-                    <p>规格:{{ item.name }}</p>
-                  </el-col>
-                </el-col>
-                <el-col :span="12" class="money">
-                  <el-col>
-                    <p v-if="form.type == '0'">¥{{ item.sell_money }}</p>
-                    <p v-else-if="form.type == '1'">¥{{ item.group_config.money }}</p>
-                  </el-col>
-                  <el-col>
-                    <p>X{{ item.buy_num }}</p>
-                  </el-col>
-                  <el-col>
-                    <span class="spanfour" style="color: blue" @click="toUrl(item.goods.url)"> 查看商品来源:{{ item.goods.source }}</span>
-                  </el-col>
-                  <el-col>
-                    <p>{{ item.is_afterSale == true ? '已申请售后' : '未申请售后' }}</p>
-                  </el-col>
-                  <el-col>
-                    <p>{{ item.is_rate == true ? '已评价' : '未评价' }}</p>
-                  </el-col>
-                </el-col>
-              </el-col>
-            </el-col>
-            <el-col :span="24" class="bode">
-              <el-col :span="6">运费</el-col>
-              <el-col :span="18" class="other" v-if="!item.goods.freight == '0'">{{ item.goods.freight }}</el-col>
-              <el-col :span="18" class="other" v-else>包邮</el-col>
-            </el-col>
-          </el-col>
-          <el-col :span="24" class="bode">
-            <el-col :span="6">订单备注</el-col>
-            <el-col :span="18" class="other" v-if="form.remarks">{{ form.remarks }}</el-col>
-            <el-col :span="18" class="other" v-else>暂无备注</el-col>
-          </el-col>
-          <el-col :span="24" class="bode">
-            <el-col :span="6">配送方式</el-col>
-            <el-col :span="18" class="other">{{ form.transport_type_name }}</el-col>
-          </el-col>
-          <el-col :span="24" class="goods_total bode">
-            <el-col :span="6">快递费</el-col>
-            <el-col :span="18" class="other">
-              <p>¥{{ total_detail.freight_total }}</p>
-            </el-col>
-          </el-col>
-          <el-col :span="24" class="goods_total bode">
-            <el-col :span="8">优惠后实付金额</el-col>
-            <el-col :span="16" class="other">
-              <p>¥{{ pay.pay_money }}</p>
-            </el-col>
-          </el-col>
-          <el-col :span="24" class="bode">
-            <el-col :span="6">下单时间</el-col>
-            <el-col :span="18" class="other">{{ form.buy_time }}</el-col>
-          </el-col>
-          <el-col :span="24" class="bode">
-            <el-col :span="6">支付时间</el-col>
-            <el-col :span="18" class="other">{{ form.pay_time }}</el-col>
-          </el-col>
-          <el-col :span="24" class="bode" v-if="form.status == '3'">
-            <el-col :span="6">寄出运单号</el-col>
-            <el-col :span="18" class="other">{{ transport.shop_transport_no || '暂无单号' }}</el-col>
-          </el-col>
-          <el-col :span="24" class="bode" v-if="form.status == '3'">
-            <el-col :span="6">寄出快递公司</el-col>
-            <el-col :span="18" class="other">{{ transport.shop_transport_name || '暂无快递信息' }}</el-col>
-          </el-col>
-          <el-col :span="24">
-            <el-col v-for="(item, index) in transport" :key="index" class="transport">
-              <el-col :span="24" class="bode">
-                <el-col :span="6">发货商品{{ index + 1 }}</el-col>
-                <el-col :span="18" class="other">{{ item.goods_name }}</el-col>
-              </el-col>
-              <el-col :span="24" class="bode">
-                <el-col :span="6">发货数量</el-col>
-                <el-col :span="18" class="other">{{ item.num }}</el-col>
-              </el-col>
-              <el-col :span="24" class="bode">
-                <el-col :span="6">寄出运单号</el-col>
-                <el-col :span="18" class="other">{{ item.shop_transport_no || '暂无单号' }}</el-col>
-              </el-col>
-              <el-col :span="24" class="bode">
-                <el-col :span="6">寄出快递公司</el-col>
-                <el-col :span="18" class="other">{{ item.shop_transport_name || '暂无快递信息' }}</el-col>
-              </el-col>
-              <el-col :span="24" style="text-align: center">
-                <el-button type="danger" @click="toDel(item)"> 删除 </el-button>
-              </el-col>
-            </el-col>
-          </el-col>
-          <el-col v-if="form.status == '1' || form.status == '2-'">
-            <el-button type="primary" @click="onstatus('0')"> 全部发货 </el-button>
-            <el-button type="primary" @click="onstatus('1')"> 部分发货 </el-button>
-          </el-col>
-          <el-col :span="24" class="form" v-if="form.status == '1' || form.status == '2' || form.status == '2-'">
-            <el-form :model="form" ref="form" :rules="rules" label-width="100px" class="demo-ruleForm">
-              <el-form-item label="发货商品" prop="goods_name" v-if="status == '1' && form.transport_type == '0'">
-                <el-select v-model="form.goods_name" clearable filterable placeholder="请选择发货商品" size="small" style="width: 100%" @change="goodsChange">
-                  <el-option v-for="i in list" :key="i._id" :label="getName(i)" :value="i._id"> </el-option>
-                </el-select>
-                <p>
-                  <span style="color: red">用于部分发货 </span>
-                </p>
-              </el-form-item>
-              <el-form-item label="发货商品数量" prop="num" v-if="status == '1' && form.transport_type == '0'">
-                <el-input v-model="form.num" placeholder="请输入发货商品数量" size="small" @input="toNum"></el-input>
-                <p>
-                  用于部分发货:发货最大数量不得超过购买商品最大数量 <span style="color: red"> {{ buy_num }}</span>
-                </p>
-              </el-form-item>
-              <el-form-item label="寄出运单号" prop="shop_transport_no" v-if="form.transport_type == '0'">
-                <el-input v-model="form.shop_transport_no" placeholder="请输入运单号,快递公司,同时填入" size="small"></el-input>
-              </el-form-item>
-              <el-form-item label="快递公司" prop="shop_transport_type" v-if="form.transport_type == '0'">
-                <el-select
-                  v-model="form.shop_transport_type"
-                  filterable
-                  remote
-                  reserve-keyword
-                  placeholder="请选择快递公司,运单号,同时填入"
-                  :remote-method="querySearch"
-                  :loading="loading"
-                  @change="handleSelect"
-                  size="small"
-                  style="width: 100%"
-                >
-                  <el-option v-for="item in shop_transport_typeList" :key="item.id" :label="item.label" :value="item.value"> </el-option>
-                </el-select>
-              </el-form-item>
-              <el-form-item label="快递类型" prop="transport_type">
-                <el-select v-model="form.transport_type" clearable filterable placeholder="请选择快递类型" size="small" style="width: 100%">
-                  <el-option v-for="i in transport_typeList" :key="i.label" :label="i.label" :value="i.value"> </el-option>
-                </el-select>
-              </el-form-item>
-              <el-form-item>
-                <el-col>
-                  <el-button type="primary" @click="onSubmit('form', '2')" v-if="(form.status == '1' || form.status == '2-') && status == '0'">
-                    保存
-                  </el-button>
-                  <el-button type="primary" @click="onSubmit('form', '2-')" v-if="(form.status == '1' || form.status == '2-') && status == '1'">
-                    添加保存
-                  </el-button>
-                  <el-button type="primary" @click="onSubmit('form', '3')" v-if="form.status == '2'"> 确认收货 </el-button>
-                  <el-button type="primary" @click="onSubmit('form', '2')" v-if="form.status == '2'"> 保存 </el-button>
-                </el-col>
-              </el-form-item>
-            </el-form>
-          </el-col>
-        </el-col>
-        <el-col :span="9" class="one" v-if="transport.shop_transport_no">
-          <el-col :span="24">{{ activit.is_check || '暂无快递信息' }}</el-col>
-          <el-col :span="24">{{ transport.shop_transport_name || '暂无快递信息' }}: {{ activit.no || '暂无快递信息' }}</el-col>
-          <el-col :span="24">
-            <p>订单编号: {{ form.id }}</p>
-          </el-col>
-          <el-col :span="24">
-            <p>收货地址:{{ address.province }} , {{ address.city }} , {{ address.area }} , {{ address.address }}</p>
-          </el-col>
-          <el-col :span="24">
-            <el-timeline :reverse="reverse">
-              <el-timeline-item v-for="(activity, index) in activities" :key="index" :timestamp="activity.time" :color="activity.color">
-                {{ activity.context }}
-              </el-timeline-item>
-            </el-timeline>
-          </el-col>
-        </el-col>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-const _ = require('lodash');
-const moment = require('moment');
-import { mapState, mapGetters, createNamespacedHelpers } from 'vuex';
-const { mapActions } = createNamespacedHelpers('orderDetail');
-const { mapActions: dictData } = createNamespacedHelpers('dictData');
-const { mapActions: sot } = createNamespacedHelpers('sot');
-
-export default {
-  name: 'form-1',
-  props: { id: { type: String } },
-  components: {},
-  data: function () {
-    return {
-      form: {},
-      // 地址
-      address: {},
-      // 实付金额
-      total_detail: {},
-      // 商铺
-      shop: {},
-      // 运单号
-      transport: [],
-      pay: {},
-      // 商品列表
-      list: [],
-      // 物流
-      reverse: false,
-      activities: [],
-      activit: {},
-      // 订单状态
-      order_processList: [],
-      // 快递公司
-      shop_transport_typeList: [],
-      // 快递类型
-      transport_typeList: [],
-      loading: false,
-      rules: {
-        shop_transport_no: [{ required: true, message: '请输入快递单号', trigger: 'blur' }],
-        shop_transport_type: [{ required: true, message: '请选择快递公司', trigger: 'change' }],
-        transport_type: [{ required: true, message: '请选择快递类型', trigger: 'change' }],
-      },
-      loadings: true,
-      buy_num: '',
-      status: '0',
-    };
-  },
-  async created() {
-    await this.searchOther();
-
-    await this.search();
-  },
-  methods: {
-    ...dictData({ dictQuery: 'query' }),
-    ...sot({ sotFetch: 'fetch' }),
-    ...mapActions(['query', 'fetch', 'create', 'update']),
-    // 查询
-    async search() {
-      let res;
-      res = await this.fetch(this.id);
-      if (this.$checkRes(res)) {
-        let name = this.transport_typeList.find((i) => i.value == res.data.transport_type);
-        if (name) res.data.transport_type_name = name.label;
-        this.$set(this, `form`, res.data);
-        if (res.data.transport == undefined) this.$set(this.form, `transport_type`, '0');
-        // 地址
-        this.$set(this, `address`, res.data.address);
-        this.$set(this, `shop`, res.data.shop);
-        // 商品
-        this.$set(this, `list`, res.data.goods);
-        // 应付金额
-        this.$set(this, `total_detail`, res.data.total_detail);
-        this.$set(this, `pay`, res.data.order.pay);
-        if (res.data.transport != undefined) {
-          for (const p1 of res.data.transport) {
-            let goods = this.form.goods.find((i) => i.id == p1.goods);
-            if (goods) p1.goods_name = goods.goods.name + ',' + goods.name;
-            // p1.good = p1.goods;
-            let arr = await this.dictQuery({ code: 'transport_company', value: p1.shop_transport_type });
-            if (this.$checkRes(arr)) {
-              let type = arr.data.find((i) => i.value == p1.shop_transport_type);
-              if (type) {
-                p1.shop_transport_name = type.label;
-                this.querySearch(type.label);
-              }
-            }
-            // p1.shop_transport_type = this.transport.shop_transport_type;
-            // p1.shop_transport_no = this.transport.shop_transport_no;
-          }
-          this.$set(this, `transport`, res.data.transport);
-          res = await this.sotFetch(this.id);
-          if (this.$checkRes(res)) {
-            if (res.errcode == '0') {
-              let activities = res.data.list;
-              // activities[0].color = '#0bbd87';
-              this.$set(this, `activities`, activities);
-              this.$set(this, `activit`, res.data);
-            }
-          }
-        }
-      }
-      this.loadings = false;
-    },
-    async querySearch(value) {
-      this.loading = true;
-      let res = await this.dictQuery({ code: 'transport_company', label: value });
-      if (this.$checkRes(res)) {
-        this.$set(this, 'shop_transport_typeList', res.data);
-      }
-      this.loading = false;
-    },
-    toUrl(url) {
-      if (url) {
-        window.open(url, '_blank');
-      } else {
-        this.$message.error('该商品还未添加来源网址,无法跳转');
-      }
-    },
-    onstatus(status) {
-      this.status = status;
-    },
-    handleSelect(value) {},
-    // 选择商品
-    goodsChange(value) {
-      let name = this.form.goods.find((i) => i.id == value);
-      this.$set(this, `buy_num`, name.buy_num);
-    },
-    getName(i) {
-      let name = i.goods.name + ',' + i.name;
-      return name;
-    },
-
-    // 发货最大数量
-    toNum(val) {
-      if (val > this.buy_num) {
-        this.$message.error('超过发货最大数量');
-        this.$set(this.form, `num`, '');
-      }
-    },
-    toDel(data) {
-      this.$confirm('是否确认删除', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning',
-      }).then(async () => {
-        let list = this.transport;
-        let form = this.form;
-        let newList = list.filter((i) => i.id != data.id);
-        form.transport = newList;
-        this.$set(this, `transport`, newList);
-        let res;
-        if (form.id) res = await this.update(form);
-        if (this.$checkRes(res)) {
-          this.$message({ type: `success`, message: `维护信息成功` });
-          this.search();
-        }
-      });
-    },
-    // 提交
-    async onSubmit(formName, val) {
-      this.$refs[formName].validate(async (valid) => {
-        if (valid) {
-          this.$confirm('是否确认保存', '提示', {
-            confirmButtonText: '确定',
-            cancelButtonText: '取消',
-            type: 'warning',
-          }).then(async () => {
-            var form = this.form;
-            if (form.transport_type == '0') {
-              var shop_transport_no = form.shop_transport_no;
-              var shop_transport_type = form.shop_transport_type;
-              if (form.transport != undefined && val == '2-') {
-                let goods = form.goods_name;
-                let num = form.num;
-                form.transport.push({ id: moment(new Date()).valueOf(), goods, num, shop_transport_no, shop_transport_type });
-              } else if (form.transport == undefined && val == '2-') {
-                let goods = form.goods_name;
-                let num = form.num;
-                let transport = [];
-                transport.push({ id: moment(new Date()).valueOf(), goods, num, shop_transport_no, shop_transport_type });
-                form.transport = transport;
-              } else if ((val == '2' || val == '3') && form.transport_type == '0') {
-                let transport = [];
-                transport.push({ shop_transport_no, shop_transport_type });
-                form.transport = transport;
-              }
-            }
-            var res;
-            if (val != undefined || val != '') form.status = val;
-            if (form.id) res = await this.update(form);
-            if (this.$checkRes(res)) {
-              this.$message({ type: `success`, message: `维护信息成功` });
-              this.search();
-            }
-          });
-        } else {
-          return false;
-        }
-      });
-    },
-
-    // 返回
-    toBack() {
-      this.$emit('toBack');
-    },
-    // 查询其他信息
-    async searchOther() {
-      let res;
-      // 减免方式
-      res = await this.dictQuery({ code: 'order_process' });
-      if (this.$checkRes(res)) {
-        this.$set(this, `order_processList`, res.data);
-      }
-      // 快递类型
-      res = await this.dictQuery({ code: 'transport_type' });
-      if (this.$checkRes(res)) {
-        this.$set(this, `transport_typeList`, res.data);
-      }
-    },
-  },
-  computed: {},
-  metaform() {
-    return { title: this.$route.meta.title };
-  },
-  watch: {
-    test: {
-      deep: true,
-      immediate: true,
-      handler(val) {},
-    },
-  },
-};
-</script>
-
-<style lang="less" scoped>
-.main {
-  .one {
-    margin: 10px 0 0 2%;
-    padding: 5px;
-    .add {
-      border-bottom: 2px dashed #ccc;
-      margin: 0 0 5px 0;
-      padding: 5px 0;
-    }
-    .shop {
-      padding: 4px 0;
-      font-size: 18px;
-      border-bottom: 1px solid #ccc;
-    }
-    .goods {
-      padding: 10px 0;
-      .money {
-        text-align: right;
-      }
-    }
-    .transport {
-      margin: 50px;
-      padding: 5px;
-      // margin: 0 0 0 40px;
-      border: 1px solid rgb(254, 195, 195);
-    }
-    .other {
-      text-align: right;
-      word-break: break-all;
-      p {
-        color: red;
-      }
-      .spanfour {
-        color: blue;
-      }
-    }
-    .el-col {
-      margin: 3px 0;
-    }
-    .bode {
-      border-bottom: 1px solid rgb(238, 237, 237);
-    }
-    .form {
-      margin: 20px 0 0 0;
-    }
-  }
-}
-
-/deep/.el-timeline {
-  margin: 20px 0 0 0;
-  font-size: 16px;
-}
-/deep/.el-timeline-item__node:nth-child(1) {
-  background-color: green;
-}
-</style>

+ 8 - 5
src/views/selfShop/order/parts/detail/detail_orderDetail.vue

@@ -25,6 +25,7 @@
               :shop_transport_typeList="shop_transport_typeList"
               :transport_typeList="transport_typeList"
               @querySearch="querySearch"
+              @search="search"
             ></card-2>
           </el-tab-pane>
         </el-tabs>
@@ -87,8 +88,8 @@ export default {
       if (this.$checkRes(res)) {
         let name = this.transport_typeList.find((i) => i.value == res.data.transport_type);
         if (name) res.data.transport_type_name = name.label;
+        if (res.data.transport == undefined || res.data.transport.length == 0) res.data.transport_type = '0';
         this.$set(this, `form`, res.data);
-        if (res.data.transport == undefined) this.$set(this.form, `transport_type`, '0');
         // 地址
         this.$set(this, `address`, res.data.address);
         this.$set(this, `shop`, res.data.shop);
@@ -97,11 +98,13 @@ export default {
         // 应付金额
         this.$set(this, `total_detail`, res.data.total_detail);
         this.$set(this, `pay`, res.data.order.pay);
-        if (res.data.transport != undefined) {
+        if (res.data.transport != undefined || res.data.transport.length > 0) {
           for (const p1 of res.data.transport) {
-            for (const p2 of p1.goods) {
-              let goods = this.form.goods.find((i) => i.id == p2.goods_id);
-              if (goods) p2.goods_name = goods.goods.name + ',' + goods.name;
+            if (p1.goods) {
+              for (const p2 of p1.goods) {
+                let goods = this.form.goods.find((i) => i.id == p2.goods_id);
+                if (goods) p2.goods_name = goods.goods.name + ',' + goods.name;
+              }
             }
             let arr = await this.dictQuery({ code: 'transport_company', value: p1.shop_transport_type });
             if (this.$checkRes(arr)) {

+ 11 - 4
src/views/selfShop/order/parts/detail/parts/card-2.vue

@@ -129,6 +129,7 @@
 </template>
 
 <script>
+const moment = require('moment');
 import { mapState, createNamespacedHelpers } from 'vuex';
 const { mapActions } = createNamespacedHelpers('orderDetail');
 export default {
@@ -179,6 +180,9 @@ export default {
   created() {},
   methods: {
     ...mapActions(['query', 'fetch', 'create', 'update']),
+    search() {
+      this.$emit('search');
+    },
     // 远程查询
     async querySearch(value) {
       this.loading = true;
@@ -283,11 +287,9 @@ export default {
               var shop_transport_type = form.shop_transport_type;
               if (form.transport != undefined && val == '2-') {
                 let goods = this.goodsList;
-                // let num = form.num;
                 form.transport.push({ id: moment(new Date()).valueOf(), goods, shop_transport_no, shop_transport_type });
               } else if (form.transport == undefined && val == '2-') {
                 let goods = this.goodsList;
-                // let num = form.num;
                 let transport = [];
                 transport.push({ id: moment(new Date()).valueOf(), goods, shop_transport_no, shop_transport_type });
                 form.transport = transport;
@@ -297,9 +299,14 @@ export default {
                 form.transport = transport;
               }
             }
-            // console.log(form);
             var res;
-            if (val != undefined || val != '') form.status = val;
+            if (val != undefined || val != '') {
+              if (this.goodsList.length == 0) {
+                form.status = '2';
+              } else {
+                form.status = val;
+              }
+            }
             if (form.id) res = await this.update(form);
             if (this.$checkRes(res)) {
               this.$message({ type: `success`, message: `维护信息成功` });