通过一个方法进行多条数据的查看详情+使用递归完成地址的联动查看详情和修改操作+时间线使用方法

一、后台Dal层多条数据的查看详情

   创建一个ViewModel的类 放入需要查看详情的字段 方便调用

/// <summary>
        /// 订单详情
        /// </summary>
        /// <param name="oId"></param>
        /// <returns></returns>
        public ViewModel OrderDetail(int oId)
        {
            ViewModel vm = new ViewModel();
            //订单状态
            var item = db.Orders.Where(u => u.OId == oId).FirstOrDefault();
            vm.OId = item.OId;
            vm.OrderNumber = item.OrderNumber;

            //商品列表
            var productList = from a in db.SubOrders
                      join b in db.Products on a.PId equals b.PId
                      where a.OId == oId
                      select new ProductDto
                      {
                          PId =  b.PId,
                          PName =b.PName,
                          Price= b.Price,
                          Count = a.Counter  //购买数量
                      };
            vm.ProductList = productList.ToList();

            //收货人信息
            var query = from c in db.ShopAddress
                        join d in db.Citys on c.ProvinceId equals d.CId
                        join e in db.Citys on c.CityId equals e.CId
                        select new
                        {
                            c.Phone,
                            c.ShopName,
                            Address = d.CName + e.CName + c.Address
                        };
            var itemAddress = query.FirstOrDefault();
            vm.ShopName = itemAddress.ShopName;
            vm.Phone = itemAddress.Phone;
            vm.Address = itemAddress.Address;

            return vm;
        }

二、前台Vs Code多条数据的查看详情

   通过主页面传过来的ID进行显示

<template>
  <div class="page">
    <div class="status">
      <h1>订单状态</h1>
      <table>
        <tr>
          <td>订单号:</td>
          <td>{{viewModel.OrderNumber}}</td>
        </tr>
        <tr>
          <td>订单状态:</td>
          <td>{{viewModel.IsPayment===1?"已支付":"未支付"}}</td>
        </tr>
      </table>
    </div>
    <div class="pruductlist">
      <h1>商品列表</h1>
      <table>
        <thead>
          <tr>
            <td>商品名称</td>
            <td>商品价格</td>
            <td>购买数量</td>
            <td>小计</td>
          </tr>
        </thead>
        <tbody>

          <tr v-for="(item,index) in viewModel.ProductList"
              :key="index">
            <td>{{item.PName}}</td>
            <td>{{item.Price}}</td>
            <td>{{item.Count}}</td>
            <td>{{item.Price*item.Count}}</td>
          </tr>
          <tr>
            <td colspan="4">商品总价:¥{{totalSum}}</td>
          </tr>
        </tbody>
      </table>

    </div>
    <div class="address">
      <el-descriptions title="收货人信息">
        <el-descriptions-item label="收货人姓名">{{viewModel.ShopName}}</el-descriptions-item>
        <el-descriptions-item label="收货人地址">{{viewModel.Address}}</el-descriptions-item>
        <el-descriptions-item label="电话">{{viewModel.Phone}}</el-descriptions-item>

      </el-descriptions>

    </div>
  </div>
</template>

<script type="text/ecmascript-6">
export default {
  data() {
    return {
      viewModel: {
        OId: 0,
        OrderNumber: '',
        IsPayment: 0,
        ProductList: [],
        Address: '',
        ShopName: '',
        Phone: '',
      },
    }
  },
  components: {},
  methods: {
    loadOrderDetail() {
      this.$axios
        .get(
          `http://localhost:63096/api/order/OrderDetail?oid=${this.$route.params.oid}`
        )
        .then((res) => {
          this.viewModel = res.data
          console.log(this.viewModel)
        })
    },
  },
  created() {
    this.loadOrderDetail()
  },
  computed: {
    totalSum() {
      var total = 0
      this.viewModel.ProductList.forEach((item) => {
        total += item.Price * item.Count
      })
      return total
    },
  },
}
</script>

<style scoped >
    table{
        background-color: white;
        padding: 10;
        width: 100%;
    }
    td{
border: 1px solid #ccc;
padding: 10px;
        
    }
</style>

三、后台Dal递归地址联动显示修改操作

/// <summary>
        /// 返回级联数据
        /// </summary>
        /// <returns></returns>
        
        public List<TsCity> GetCities()
        {
            return GetTsCities(db.Citys.ToList(), 0);
        }

        public List<TsCity> GetTsCities(List<City> list,int pid)
        {
            return list.Where(u => u.ParentId == pid).Select(t => new TsCity
            {
                CId = t.CId,
                CName = t.CName,
                ParentId = t.ParentId,
                Children = GetTsCities(list, t.CId).Count==0?null : GetTsCities(list, t.CId)
            }).ToList();
        }

四、前台Vs Code递归地址联动显示修改操作

   页面显示

/// <summary>
        /// 收货地址
        /// </summary>
        /// <param name="sid"></param>
        /// <returns></returns>
        public ShopAddress GetShopAddressById(int sid)
        {
            return db.ShopAddress.Where(u => u.SId == sid).FirstOrDefault();
        }
        /// <summary>
        /// 修改收货地址
        /// </summary>
        /// <param name="shopAddress"></param>
        /// <returns></returns>
        public int EditShopAddress(ShopAddress shopAddress)
        {
            var item = db.ShopAddress.Find(shopAddress.SId);
            item.ProvinceId = shopAddress.ProvinceId;
            item.CityId = shopAddress.CityId;
            item.Address = shopAddress.Address;
            return db.SaveChanges();
        }

/// <summary>
        /// 返回级联数据
        /// </summary>
        /// <returns></returns>
        
        public List<TsCity> GetCities()
        {
            return GetTsCities(db.Citys.ToList(), 0);
        }

        public List<TsCity> GetTsCities(List<City> list,int pid)
        {
            return list.Where(u => u.ParentId == pid).Select(t => new TsCity
            {
                CId = t.CId,
                CName = t.CName,
                ParentId = t.ParentId,
                Children = GetTsCities(list, t.CId).Count==0?null : GetTsCities(list, t.CId)
            }).ToList();
        }

   数据加载

data() {
  return {
    OrderNumber: '', //查询-订单编号
    tableData: [], //表格数据
    pageindex: 1,
    pagesize: 5,
    totalCount: 0,
    ids: [], //批量删除
    dialogFormVisible: false,  //模态框 是否隐藏
    form: {  //模态表单
        sid:0,
        city:[],  //获取级联后的数据
        address:''  //详细地址
      },
      shopAddress:{
          SId:0,
          ProvinceId:0,
          CityId:0,
          Address:''
      },
      formLabelWidth: '120px',
      options:[] , //级联
      dialogVisible: false,  //模态框 物流
      activities:[] , //模态框  物流数据
      reverse: true,  //模态框 是否倒序
  }
 //加载级联数据
 loadCascader(){
     this.$axios.get('http://localhost:63096/api/order/GetCities').then(res=>{
         this.options = res.data;
     })
 },
 //修改级联数据
 EditAddrsss(){
     this.dialogFormVisible = false
     this.shopAddress.SId = this.form.sid
     this.shopAddress.ProvinceId = this.form.city[0]
     this.shopAddress.CityId = this.form.city[1]
     this.shopAddress.Address = this.form.address
     this.$axios.post('http://localhost:63096/api/order/EditShopAddress',this.shopAddress).then(res=>{
         if (res.data>0) {
             this.$message.success('修改成功');
             this.loadDataTable();
             
         }else{
             this.$message.success('修改失败');
             
         }
     })
     //console.log(this.form);
 },

五、后台Dal时间线显示操作

/// <summary>
        /// 显示物流信息
        /// </summary>
        /// <param name="oid"></param>
        /// <returns></returns>
        public List<Logistics> GetLogistics(int oid)
        {
            return db.Logistics.Where(u => u.OId == oid).ToList();
        }

六、前台Vs Code时间线显示操作

   页面显示

<el-dialog
  title="物流进度"
  :visible.sync="dialogVisible"
  width="30%"
  :before-close="handleClose">
  <el-timeline :reverse="reverse">
    <el-timeline-item
      v-for="(activity, index) in activities"
      :key="index"
      :timestamp="activity.ScheduleTime">
      {{activity.Schedule}}
    </el-timeline-item>
  </el-timeline>
  
</el-dialog>

    数据加载

//行时间路程按钮
handleDelete( row) {
    this.dialogVisible = true;
    this.$axios(`http://localhost:63096/api/order/GetLogistics?oid=${row.OId}`).then(res=>{
        this.activities = res.data;
    })
  console.log(this.activities)
},

 //点击退出
  handleClose(done) {
     done();
   }

 

posted @ 2021-09-23 22:09  魔术人生  阅读(242)  评论(0编辑  收藏  举报
复制代码