Просмотр исходного кода

Merge branch 'dev' of https://git.citupro.com/zhengnaiwen_citu/menduner into dev

lifanagju_citu 4 месяцев назад
Родитель
Сommit
e8b4cc85e3

+ 2 - 3
src/layout/index.vue

@@ -35,8 +35,7 @@ const footerWhiteList = [
   '/headhunting',
   '/headhunting/service',
   '/headhunting/service/details',
-  '/recruit/personal/resume/analysis',
-  '/mall/pointExchange/records'
+  '/recruit/personal/resume/analysis'
 ]
 const router = useRouter()
 const sharedState = useSharedState()
@@ -70,7 +69,7 @@ onMounted(async () => {
   z-index: 999;
 }
 .content {
-  min-height: calc(100vh - 256px);
+  min-height: calc(100vh - 242px);
   margin-top: 50px;
 }
 </style>

+ 12 - 1
src/router/modules/components/recruit/personCenter.js

@@ -188,7 +188,18 @@ const personCenter = [
               //   }
               // }
             ]
-          }
+          },
+          // 收货地址
+          {
+            path: '/recruit/personal/personalCenter/shippingAddress',
+            name: 'Shipping Address',
+            component: () => import('@/views/recruit/personal/PersonalCenter/shippingAddress/index.vue'),
+            meta: {
+              title: '收货地址',
+              enName: 'Shipping Address',
+              icon: 'mdi-map-marker-outline'
+            }
+          },
         ]
       }
     ]

+ 0 - 77
src/router/modules/recruit.js

@@ -5,10 +5,6 @@ import personal from './components/recruit/personal'
 import Layout from '@/layout'
 import { setLoginType } from '@/utils/loginType'
 const recruit = [
-  // {
-  //   path: '/home',
-  //   redirect: '/recruitHome'
-  // },
   {
     path: '/recruit',
     redirect: '/recruitHome'
@@ -67,79 +63,6 @@ const recruit = [
           title: '商品详情'
         }
       },
-      {
-        path: '/mall/pointExchange/records',
-        component: () => import('@/views/mall/home/pointExchange/records.vue'),
-        name: 'mallPointExchangeRecords',
-        meta: {
-          title: '积分兑换记录'
-        }
-      },
-      {
-        path: '/mall/user',
-        redirect: '/mall/user/order',
-        component: () => import('@/views/mall/user/index.vue'),
-        name: 'mallUser',
-        meta: {
-          title: '我的'
-        },
-        children: [
-          {
-            path: '/mall/user/order',
-            component: () => import('@/views/mall/user/order/index.vue'),
-            name: 'mallUserOrder',
-            meta: {
-              title: '我的订单',
-              enName: 'My Order',
-              icon: 'mdi-order-bool-ascending'
-            }
-          },
-          {
-            path: '/mall/user/address',
-            component: () => import('@/views/mall/user/address/index.vue'),
-            name: 'mallUserAddress',
-            meta: {
-              title: '收货地址',
-              enName: 'Shipping Address',
-              icon: 'mdi-map-marker-outline'
-            }
-          },
-          {
-            path: '/mall/user/prize',
-            component: () => import('@/views/mall/user/prize/index.vue'),
-            name: 'mallUserPrize',
-            meta: {
-              title: '我的奖品',
-              enName: 'My Award',
-              icon: 'mdi-gift-outline'
-            }
-          }
-        ]
-      },
-      {
-        path: '/mall/user/order/detail/:id',
-        component: () => import('@/views/mall/user/order/detail.vue'),
-        show: true,
-        meta: {
-          title: '订单详情'
-        }
-      },
-      {
-        path: '/mall/order/settlement/:id',
-        component: () => import('@/views/mall/settlement/index.vue'),
-        show: true,
-        meta: {
-          title: '订单结算页'
-        }
-      },
-      // {
-      //   path: '/mall/order',
-      //   component: () => import('@/views/mall/order/index.vue'),
-      //   name: 'mallOrder',
-      //   meta: {
-      //     title: '我的订单'
-      //   }
-      // },
       {
         path: '/mall/cart',
         component: () => import('@/views/mall/cart/index.vue'),

+ 4 - 4
src/views/mall/cart/index.vue

@@ -5,7 +5,7 @@
       <div class="resume-title">我的购物车</div>
       <div>
         <v-btn color="primary" size="small" variant="text" class="ml-2" @click="getCartList"><v-icon>mdi-refresh</v-icon>刷新购物车</v-btn>
-        <v-btn v-if="props.showOrder" color="primary" size="small" variant="text" class="ml-2" to="/mall/user/order"><v-icon>mdi-account-circle-outline</v-icon>我的订单</v-btn>
+        <v-btn v-if="props.showOrder" color="primary" size="small" variant="text" class="ml-2" to="/recruit/personal/personalCenter/tradeOrder?key=1"><v-icon>mdi-account-circle-outline</v-icon>我的订单</v-btn>
       </div>
     </div>
     <div v-if="cartList.length" class="mt-3">
@@ -240,13 +240,13 @@ const handleSettlement = () => {
 // const payCancel = () => {
 //   Snackbar.warning('您已取消支付!')
 //   showPay.value = false
-//   // window.open('/mall/user/order?tab=0')
-//   setTimeout(() => { router.push({ path: '/mall/user/order', query: { tab: 0 } }) }, 500);
+//   // window.open('/recruit/personal/personalCenter/tradeOrder?key=1')
+//   setTimeout(() => { router.push('/recruit/personal/personalCenter/tradeOrder?key=1') }, 500);
 // }
 // const paySuccess = (e) => {
 //   // Snackbar.success('支付成功!')
 //   // showPay.value = false
-//   // setTimeout(() => { router.push({ path: '/mall/user/order', query: { tab: 10 } }) }, 500);
+//   // setTimeout(() => { router.push('/recruit/personal/personalCenter/tradeOrder?key=1') }, 500);
 //   router.push({ path: '/mall/payOver', query: { price: e.price }})
 // }
 </script>

+ 1 - 1
src/views/mall/components/confirm_order/addressSelection.vue

@@ -39,7 +39,7 @@
 <script setup>
   import { computed, ref } from 'vue';
   import { isEmpty1 } from '@/utils/is'
-  import addressPage from '@/views/mall/user/address'
+  import addressPage from '@/views/recruit/personal/PersonalCenter/shippingAddress/index.vue'
   import Snackbar from '@/plugins/snackbar'
   const props = defineProps({
     modelValue: {

+ 10 - 6
src/views/mall/components/confirm_order/index.vue

@@ -29,12 +29,14 @@ defineOptions({name: 'confirm_order-index'})
 import Confirm from '@/plugins/confirm'
 import Snackbar from '@/plugins/snackbar'
 import { useI18n } from '@/hooks/web/useI18n'
-import { useRouter } from 'vue-router'; const router = useRouter()
-import { ref } from 'vue'
+import { useRouter, useRoute } from 'vue-router'; const router = useRouter()
+import { computed, ref } from 'vue'
 import confirm from './confirm.vue'
 import pay from './pay.vue'
 const { t } = useI18n()
 
+const route = useRoute()
+const { spuId } = route.query
 const skuInfo = ref(localStorage.getItem('confirm_order_data')) // 购买商品规格信息
 
 const confirmRef = ref()
@@ -66,18 +68,20 @@ let closeConfirm = false // 关闭路由拦截
 
 const paySuccess = (e) => {
   closeConfirm = true
-  router.replace({ path: '/mall/payOver', query: { price: e.price, orderId: orderId.value } })
+  // router.replace({ path: '/mall/payOver', query: { price: e.price, orderId: orderId.value } })
+  closeConfirm = true
+  setTimeout(() => { router.replace('/recruit/personal/personalCenter/tradeOrder?key=1') }, 500);
 }
 const payCancel = () => {
   Snackbar.warning('您已取消支付!')
   showPay.value = false
   closeConfirm = true
-  setTimeout(() => { router.replace({ path: '/mall/user/order', query: { tab: 0 } }) }, 500);
+  setTimeout(() => { router.replace('/recruit/personal/personalCenter/tradeOrder?key=1') }, 500);
 }
 
 const goBack = () => {
   if (!orderId.value) return router.go(-1)
-  router.replace({ path: '/mall/user/order', query: { tab: 0 } })
+  router.replace('/recruit/personal/personalCenter/tradeOrder?key=1')
 }
 
 router.beforeEach((to, from, next) => {
@@ -87,7 +91,7 @@ router.beforeEach((to, from, next) => {
   }
   Confirm(t('common.confirmTitle'), '您尚未支付成功,是否确定离开?').then(async () => {
     closeConfirm = true
-    router.replace({ path: '/mall/user/order', query: { tab: 0 } })
+    router.replace('/recruit/personal/personalCenter/tradeOrder?key=1')
   })
 })
 

+ 1 - 1
src/views/mall/components/details.vue

@@ -178,7 +178,7 @@ const onBuy = async (e) => {
 
   localStorage.setItem('confirm_order_data', data)
   nextTick(() => {
-    router.push('/mall/confirm_order')
+    router.push({path: '/mall/confirm_order', query: { price: e.price, spuId: id }})
   })
 }
 

+ 1 - 1
src/views/mall/components/details/order/addressSelection.vue

@@ -39,7 +39,7 @@
 <script setup>
   import { computed, ref } from 'vue';
   import { isEmpty1 } from '@/utils/is'
-  import addressPage from '@/views/mall/user/address'
+  import addressPage from '@/views/recruit/personal/PersonalCenter/shippingAddress/index.vue'
   import Snackbar from '@/plugins/snackbar'
   const props = defineProps({
     modelValue: {

+ 0 - 8
src/views/mall/components/navbar.vue

@@ -11,14 +11,6 @@
           <v-icon size="24" class="mr-2">mdi-account-circle-outline</v-icon>
           我的
         </span>
-        <!-- <span class="cursor-pointer d-flex align-center ml-8" @click="emit('pointExchange')">
-          <v-icon>mdi-octagram-outline</v-icon>
-          积分兑换
-        </span> -->
-        <!-- <span class="cursor-pointer d-flex align-center ml-8" :class="{'active-route' : isActive('/mall/order')}" @click="handleTo('/mall/user/order')">
-          <v-icon size="20" class="mr-2">mdi-order-bool-ascending</v-icon>
-          我的订单
-        </span> -->
         <span class="cursor-pointer d-flex align-center ml-8" :class="{'active-route' : isActive('/mall/cart')}" @click="handleTo('/mall/cart')">
           <v-icon size="20" class="mr-2">mdi-cart-outline</v-icon>
           购物车

+ 1 - 1
src/views/mall/home/pointExchange/index.vue

@@ -5,7 +5,7 @@
       <div>
         <span class="cursor-pointer active" @click="handleTo('/recruit/personal/personalCenter/wallet')">当前账户积分:{{ point }}</span>
         <span class="septal-line"></span>
-        <span class="cursor-pointer active" @click="handleTo('/mall/pointExchange/records')">兑换记录</span>
+        <span class="cursor-pointer active" @click="handleTo('/recruit/personal/personalCenter/tradeOrder?key=2')">兑换记录</span>
       </div>
     </div>
     <div class="goods-box mt-5">

+ 0 - 65
src/views/mall/home/pointExchange/records.vue

@@ -1,65 +0,0 @@
-<template>
-  <div class="pa-5 white-bgc" style="height: calc(100vh - 50px);">
-    <!-- <v-breadcrumbs color="primary" :items="breadcrumbs"></v-breadcrumbs> -->
-    <v-btn class="mb-3" size="large" color="primary" variant="text" prepend-icon="mdi-chevron-triple-left" @click="router.go(-1)">返回上一页</v-btn>
-    <v-card elevation="5">
-      <CtTable
-        :items="dataList"
-        :headers="headers"
-        :loading="false"
-        :elevation="0"
-        :isTools="false"
-        :showPage="true"
-        :total="total"
-        :page-info="queryParams"
-        itemKey="id"
-        @pageHandleChange="handleChangePage"
-      >
-      </CtTable>
-    </v-card>
-  </div>
-</template>
-
-<script setup>
-defineOptions({name: 'mall-point-exchange-records'})
-import { ref } from 'vue'
-import { getRedeemPage } from '@/api/mall/index.js'
-import { getToken } from '@/utils/auth'
-import { useRouter } from 'vue-router'
-
-const router = useRouter()
-const total = ref(0)
-const headers = [
-  { title: '商品名称', key: 'name', sortable: false },
-  { title: '消耗积分', key: 'point', sortable: false },
-  { title: '收货人姓名', key: 'contactName', sortable: false },
-  { title: '联系电话/收货人电话', key: 'contactPhone', sortable: false },
-  { title: '收货详细地址', key: 'contactAddress', sortable: false },
-  { title: '订单编号', key: 'orderNo', sortable: false }
-]
-const breadcrumbs = [
-  { title: '首页', href: '/mall' },
-  { title: '积分兑换记录', href: '/mall/pointExchange/records', disabled: true }
-]
-const queryParams = ref({
-  pageNo: 1,
-  pageSize: 10,
-})
-
-// 数据
-const dataList = ref([])
-const getData = async () => {
-  const res  = await getRedeemPage(queryParams.value)
-  dataList.value = res.list
-  total.value = res.total
-}
-if (getToken()) getData()
-
-const handleChangePage = (e) => {
-  queryParams.value.pageNo = e
-  getData()
-}
-</script>
-
-<style lang="scss" scoped>
-</style>

+ 0 - 20
src/views/mall/order/index.vue

@@ -1,20 +0,0 @@
-<!-- 导航栏-我的订单 -->
-<template>
-  <div>
-    <Navbar class="mb-3" />
-    <v-card class="default-width card-box mb-5 resume-box">
-      <div class="resume-header mx-n2 mb-3">
-        <div class="resume-title">我的订单</div>
-      </div>
-      <order :tabListBg="false"></order>
-    </v-card>
-  </div>
-</template>
-
-<script setup>
-defineOptions({name: 'mall-order'})
-import order from '@/views/mall/user/order'
-import Navbar from '@/views/mall/components/navbar.vue'
-</script>
-<style lang="scss" scoped>
-</style>

+ 1 - 1
src/views/mall/payOver/components/show.vue

@@ -6,7 +6,7 @@
     <!-- <div style="font-weight: 500; color: #777;" class="mt-3"></div> -->
     <div class="mt-3">
       <v-btn class="mx-3" color="primary" variant="outlined" @click="router.push('/mall')">商城首页</v-btn>
-      <v-btn class="mx-3" color="primary" variant="outlined" to="/mall/user/order">查看订单</v-btn>
+      <v-btn class="mx-3" color="primary" variant="outlined" to="/recruit/personal/personalCenter/tradeOrder?key=1">查看订单</v-btn>
     </div>
   </div>
 </template>

+ 0 - 2
src/views/mall/payOver/index.vue

@@ -28,10 +28,8 @@ const getLottery = async () => {
 }
 getLottery()
 
-// 前往我的奖品
 const router = useRouter()
 const handleReceive = () => {
-  router.push('/mall/user/prize')
 }
 </script>
 

+ 0 - 188
src/views/mall/settlement/index.vue

@@ -1,188 +0,0 @@
-<template>
-	<v-card class="default-width pa-5 mb-5" style="min-height: 75vh; margin-top: 70px;">
-		<div>
-    <!-- 头部地址选择【配送地址】【自提地址】 -->
-    <AddressSelection v-model="addressState" class="addressBox elevation-3" />
-    
-    <!-- 购买的商品信息 -->
-    <v-card class="goodsListBox my-3 pa-3 elevation-5">
-      <s-goods-item
-        v-for="(item, index) in state.orderInfo.items"
-        :key="item.skuId"
-        :img="item.picUrl"
-        :title="item.spuName"
-        :skuText="item.properties.map((property) => property.valueName).join(' ')"
-        :price="item.price"
-        :num="item.count"
-        :style="{'marginTop': index ? '8px' : '0px'}"
-      />
-    </v-card>
-
-    <!-- 价格信息 -->
-    <div>
-      <div>
-        <!-- <div class="order-item d-flex color-666">
-          <div class="item-title mr-3 ">商品金额:</div>
-          <div>¥{{ fen2yuan(state.orderInfo.price.totalPrice) }}</div>
-        </div> -->
-        <!-- 快递配置时,信息的展示 -->
-        <!-- <div
-          class="order-item d-flex"
-          v-if="addressState.deliveryType === 1"
-        >
-          <div class="item-title mr-3">运{{ spaces() }}费:</div>
-          <div>
-            <span class="text-red" v-if="state.orderInfo.price.deliveryPrice > 0">
-              +¥{{ fen2yuan(state.orderInfo.price.deliveryPrice) }}
-            </span>
-            <div class="item-value" v-else>免运费</div>
-          </div>
-        </div> -->
-        <!-- 门店自提时,需要填写姓名和手机号 -->
-      </div>
-      
-      <div class="mt-5">
-        <v-text-field
-          v-model="state.orderPayload.remark"
-          label="订单备注" 
-          placeholder="建议留言前先与商家沟通"
-          variant="outlined" 
-          density="compact"
-          color="primary"
-        ></v-text-field>
-      </div>
-
-      <div class="total-box-footer d-flex flex-column align-end">
-        <div class="d-flex">
-          <div class="mr-3">
-            <span class="total-num">共</span>
-            <span class="mx-1" style="color: var(--v-primary-base);">{{ state.orderInfo.items.reduce((acc, item) => acc + item.count, 0) }}</span>
-            <span class="total-num">件</span>
-          </div>
-          <div>合计支付:</div>
-          <div class="total-num text-red"> ¥{{ fen2yuan(state.orderInfo.price.payPrice) }}元</div>
-        </div>
-      </div>
-
-			<div class="text-center">
-				<div>请在30分钟内完成支付,支付成功后可以随机抽取赠送的房券。</div>
-				<v-btn class="elevation-5" color="primary" width="250">立即支付</v-btn>
-				<div>支付时间还剩余30分27秒</div>
-			</div>
-
-    </div>
-  </div>
-	</v-card>
-</template>
-
-<script setup>
-defineOptions({ name: 'mall-order-settlement' })
-import { useRoute, useRouter } from 'vue-router'
-import { reactive, ref, onMounted, watch } from 'vue'
-import AddressSelection from '@/views/mall/components/details/order/addressSelection.vue'
-import sGoodsItem from '@/views/mall/components/s-goods-item'
-import { fen2yuan } from '@/hooks/web/useGoods'
-import { spaces } from '@/utils/index.js'
-import { getTradeConfig, createOrder, settlementOrder } from '@/api/mall/trade'
-import Snackbar from '@/plugins/snackbar'
-
-const route = useRoute()
-const router = useRouter()
-const { id } = route.params
-const { count }	= route.query
-
-const state = reactive({
-  orderPayload: {},
-  orderInfo: {
-    items: [], // 商品项列表
-    price: {}, // 价格信息
-  },
-  showCoupon: false, // 是否展示优惠劵
-  couponInfo: [], // 优惠劵列表
-  showDiscount: false, // 是否展示营销活动
-  // ========== 积分 ==========
-  pointStatus: false, //是否使用积分
-});
-// 检测支付环境
-const payState = reactive({
-  orderType: 'goods', // 订单类型; goods - 商品订单, recharge - 充值订单
-  orderInfo: {}, // 支付单信息
-  payStatus: 0, // 0=检测支付环境, -2=未查询到支付单信息, -1=支付已过期, 1=待支付,2=订单已支付
-  payMethods: [], // 可选的支付方式
-  payment: '', // 选中的支付方式
-});
-const addressState = ref({
-  addressInfo: {}, // 选择的收货地址
-  deliveryType: undefined, // 收货方式:1-快递配送,2-门店自提
-  isPickUp: true, // 门店自提是否开启
-  pickUpInfo: {}, // 选择的自提门店信息
-  receiverName: '', // 收件人名称
-  receiverMobile: '', // 收件人手机
-});
-async function tradeConfig () {
-  // 获取交易配置
-  const data = await getTradeConfig();
-  addressState.value.isPickUp = data.deliveryPickUpEnabled;
-  // 价格计算
-  // 情况一:先自动选择“快递物流”
-  addressState.value.deliveryType = 1;
-  let orderCode = await getOrderInfo();
-  if (orderCode === 0) {
-    return;
-  }
-  // 情况二:失败,再自动选择“门店自提”
-  if (addressState.value.isPickUp) {
-    addressState.value.deliveryType = 2;
-    let orderCode = await getOrderInfo();
-    if (orderCode === 0) {
-      return;
-    }
-  }
-  // 情况三:都失败,则不选择
-  addressState.value.deliveryType = undefined;
-  await getOrderInfo()
-}
-
-// 检查库存 & 计算订单价格
-async function getOrderInfo() {
-    // 计算价格
-    const data = await settlementOrder({
-      items: [{ skuId: id, count }],
-      couponId: state.orderPayload.couponId,
-      deliveryType: addressState.value.deliveryType,
-      addressId: addressState.value.addressInfo.id, // 收件地址编号
-      pickUpStoreId: addressState.value.pickUpInfo.id, //自提门店编号
-      receiverName: addressState.value.receiverName, // 选择门店自提时,该字段为联系人名
-      receiverMobile: addressState.value.receiverMobile, // 选择门店自提时,该字段为联系人手机
-      pointStatus: state.pointStatus,
-      combinationActivityId: state.orderPayload.combinationActivityId,
-      combinationHeadId: state.orderPayload.combinationHeadId,
-      seckillActivityId: state.orderPayload.seckillActivityId,
-      pointActivityId: state.orderPayload.pointActivityId,
-    });
-    state.orderInfo = data;
-    state.couponInfo = data.coupons || [];
-    // 设置收货地址
-    if (state.orderInfo.address) {
-      addressState.value.addressInfo = state.orderInfo.address;
-    }
-    return 0;
-  }
-
-	// 使用 watch 监听地址和配送方式的变化
-  watch(addressState, async (newAddress, oldAddress) => {
-    // 如果收货地址或配送方式有变化,则重新计算价格
-    if (
-      newAddress.addressInfo.id !== oldAddress.addressInfo.id ||
-      newAddress.deliveryType !== oldAddress.deliveryType
-    ) {
-      await getOrderInfo();
-    }
-  });
-
-onMounted(async () => {
-  if (!id || !count) return router.go(-1)
-	await tradeConfig()
-})
-
-</script>

+ 0 - 19
src/views/mall/user/cart/index.vue

@@ -1,19 +0,0 @@
-<!-- 我的-购物车 -->
-<template>
-  <div>
-    <cart
-      :showNavbar="false"
-      :defaultWidth="false"
-      :showOrder="false"
-      :elevation="0"
-    ></cart>
-  </div>
-</template>
-
-<script setup>
-defineOptions({name: 'mall-user-cart'})
-import cart from '@/views/mall/cart/index.vue'
-
-</script>
-<style lang="scss" scoped>
-</style>

+ 0 - 52
src/views/mall/user/order/commentForm.vue

@@ -1,52 +0,0 @@
-<template>
-  <div v-for="(val, index) in orderList" :key="val.id">
-    <GoodsItem :item="val" :showHover="false" :showLine="false" />
-    <div class="d-flex align-center my-3">
-      <span>商品质量</span>
-      <v-rating :length="5" :size="34" v-model="commentList[index].descriptionScores" color="warning" active-color="warning" />
-    </div>
-    <div class="d-flex align-center my-3">
-      <span>服务态度</span>
-      <v-rating :length="5" :size="34" v-model="commentList[index].benefitScores" color="warning" active-color="warning" />
-    </div>
-    <v-textarea v-model="commentList[index].content" rows="3" color="primary" clearable counter label="宝贝满足你的期待吗?说说你的使用心得,分享给想买的他们吧~" />
-    <Imgs v-model="commentList[index].picUrls" limit="9"></Imgs>
-    <v-checkbox v-model="commentList[index].anonymous" color="primary" hide-details label="匿名评论"></v-checkbox>
-    <v-divider v-if="index !== orderList.length - 1" color="error" class="my-3"></v-divider>
-  </div>
-</template>
-
-<script setup>
-defineOptions({ name: 'mall-user-order-commentForm' })
-import { ref, onMounted } from 'vue'
-import { getMallOrderDetail } from '@/api/mall/user'
-import Snackbar from '@/plugins/snackbar'
-import GoodsItem from '../../components/GoodsItem/index.vue'
-
-const props = defineProps({ orderId: [String, Number] })
-
-const commentList = ref([])
-const orderList = ref([])
-
-onMounted(async () => {
-  if (!props.orderId) return Snackbar.warning('请重新选择订单')
-  const data = await getMallOrderDetail(props.orderId)
-  orderList.value = data.items
-  commentList.value = data.items.map(e => {
-    return {
-      orderItemId: e.id,
-      anonymous: false,
-      benefitScores: 5,
-      descriptionScores: 5,
-      picUrls: [],
-      content: ''
-    }
-  })
-})
-
-defineExpose({ commentList })
-</script>
-
-<style scoped lang="scss">
-
-</style>

+ 0 - 102
src/views/mall/user/order/detail.vue

@@ -1,102 +0,0 @@
-<template>
-  <div>
-    <Navbar class="mb-3" />
-    <div class="default-width pb-5">
-      <v-banner color="primary" :text="formatOrderStatusDescription(order)" style="background-color: #00897B; color: #fff;"></v-banner>
-
-      <v-row no-gutters class="mt-3">
-        <v-col span="6">
-          <!-- 订单信息 -->
-          <v-card class="pa-5">
-            <h3>订单信息</h3>
-            <v-divider class="my-3"></v-divider>
-            <div class="font-size-15 color-666">
-              <p>订单编号:{{ order.no }}</p>
-              <p class="my-3">下单时间:{{ timesTampChange(order.createTime) }}</p>
-              <p>支付时间:{{ timesTampChange(order.payTime) }}</p>
-              <p class="mt-3">支付方式:{{ order.payChannelName }}</p>
-              <p class="mt-3">订单备注:{{ order.userRemark }}</p>
-            </div>
-          </v-card>
-        </v-col>
-        <v-col span="6" class="ml-3">
-          <!-- 物流信息 -->
-          <v-card class="pa-5" style="height: 100%">
-            <h3>物流信息</h3>
-            <v-divider class="my-3"></v-divider>
-            <div class="font-size-15 color-666">
-              <p>收货地址:{{ order.receiverName }},{{ order.receiverMobile }},{{ order.receiverAreaName }} {{ order.receiverDetailAddress }}</p>
-              <p class="my-3">物流公司:{{ order.logisticsName }}</p>
-              <p>运单号:{{ order.logisticsNo }}</p>
-            </div>
-          </v-card>
-        </v-col>
-      </v-row>
-
-      <!-- 商品列表 -->
-      <v-card class="my-3 pa-5">
-        <h3 class="mb-3">商品列表</h3>
-        <v-divider></v-divider>
-
-        <CtTable
-          class="mt-3"
-          :items="order.items"
-          :headers="headers"
-          :loading="false"
-          :elevation="0"
-          :isTools="false"
-          :showPage="false"
-          itemKey="id"
-        >
-          <template #picUrl="{ item }">
-            <v-img :src="item.picUrl" width="90" height="90"></v-img>
-          </template>
-          <template #spuName="{ item }">
-            <span class="color-primary cursor-pointer" @click="handleToGoodsDetail(item)">{{ item.spuName }}</span>
-          </template>
-        </CtTable>
-        <div class="text-end color-primary mr-3 mt-5 font-size-20">
-          共{{ order.productCount }}件商品,合计:¥{{ fen2yuan(order.payPrice) }}
-        </div>
-      </v-card>
-    </div>
-  </div>
-</template>
-
-<script setup>
-defineOptions({ name: 'mall-user-order-detail'})
-import { ref, onMounted } from 'vue'
-import { useRouter } from 'vue-router'
-import { getMallOrderDetail } from '@/api/mall/user'
-import Snackbar from '@/plugins/snackbar'
-import Navbar from '../../components/navbar.vue'
-import { timesTampChange } from '@/utils/date'
-import { fen2yuan, formatOrderStatusDescription } from '@/hooks/web/useGoods'
-
-const router = useRouter()
-const { id } = router.currentRoute.value.params
-const order = ref({})
-
-const headers = [
-  { title: '', key: 'picUrl', sortable: false },
-  { title: '商品名称', key: 'spuName', sortable: false },
-  { title: '规格', key: 'contactAddress', sortable: false, value: item => item.properties.map((property) => property.valueName).join(' ') },
-  { title: '单价', key: 'price', sortable: false, value: item => '¥' + fen2yuan(item.price) },
-  { title: '数量', key: 'count', sortable: false }
-]
-
-onMounted(async () =>{
-  if (!id) return Snackbar.error('订单不存在')
-  const data = await getMallOrderDetail(id)
-  order.value = data
-})
-
-// 跳转商品详情
-const handleToGoodsDetail = (item) => {
-  window.open(`/mall/goodsDetail/${item.spuId}`)
-}
-</script>
-
-<style scoped lang="scss">
-
-</style>

+ 0 - 201
src/views/mall/user/order/index.vue

@@ -1,201 +0,0 @@
-<template>
-  <div>
-    <v-tabs v-model="tab" align-tabs="start" color="primary" :bg-color="props.tabListBg ? '#f7f8fa': '#fff'" @update:modelValue="queryParams.pageNo = 1, getOrderPage()">
-      <v-tab v-for="(val, i) in tabList" :key="i" :value="val.value">{{ val.title }}</v-tab>
-    </v-tabs>
-    <div v-if="orderList.length" class="mt-3">
-      <div v-for="val in orderList" :key="val.id" class="order-item mb-3">
-        <div class="order-item-header px-5">
-          <div style="width: 40%;">
-            <span>订单号:{{ val.no }}</span>
-            <span class="ml-5">{{ timesTampChange(val.createTime) }}</span>
-          </div>
-          <div class="text-end color-warning" :class="formatOrderColor(val)" style="flex: 1">
-            {{ formatOrderStatus(val) }}
-          </div>
-        </div>
-        <!-- 商品列表 -->
-        <GoodsItem v-for="k in val.items" :key="k.id" :item="k" />
-        <!-- 操作按钮 -->
-        <div class="text-end pa-3 font-size-13 color-666">
-          <div>共{{ val.productCount }}件商品,合计:¥{{ fen2yuan(val.payPrice) }}</div>
-          <v-btn class="mt-2" variant="tonal" rounded="xl" @click.stop="handleDetail(val)">查看详情</v-btn>
-          <v-btn v-if="val.buttons.includes('confirm')" class="mt-2 ml-3" variant="tonal" color="success" rounded="xl" @click.stop="handleConfirm(val)">确认收货</v-btn>
-          <!-- <v-btn v-if="val.buttons.includes('comment')" class="mt-2" variant="tonal" rounded="xl" @click.stop="handleComment(val)">评价</v-btn> -->
-          <!-- <v-btn v-if="val.buttons.includes('express')" class="mt-2" variant="tonal" rounded="xl">查看物流</v-btn> -->
-          <v-btn v-if="val.buttons.includes('cancel')" class="mt-2 ml-3" variant="tonal" rounded="xl" @click.stop="handleCancel(val)">取消订单</v-btn>
-          <v-btn v-if="val.buttons.includes('delete')" class="mt-2 ml-3" variant="tonal" color="error" rounded="xl" @click.stop="handleDelete(val)">删除订单</v-btn>
-          <v-btn v-if="val.buttons.includes('pay')" class="mt-2 ml-3" variant="tonal" color="primary" rounded="xl" @click.stop="handlePay(val)">继续支付</v-btn>
-        </div>
-      </div>
-      <CtPagination :total="total" :page="queryParams.pageNo" :limit="queryParams.pageSize" @handleChange="handleChangePage"></CtPagination>
-    </div>
-    <Empty v-else :elevation="false" :message="tab === -1 ? '暂无订单' : '暂无' + tabList.find(e => e.value === tab).title + '订单'"></Empty>
-  </div>
-
-  <!-- <CtDialog :visible="showDialog" titleClass="text-h6" :footer="true" :widthType="3" title="商品评论" @submit="handleSubmit" @close="handleClose">
-    <CommentForm ref="commentFormRef" v-if="showDialog" :orderId="commentOrderId" />
-  </CtDialog> -->
-  <!-- 支付 -->
-  <CtDialog :visible="showPay" titleClass="text-h6" :widthType="3" title="收银台" :footer="false" @close="payCancel">
-    <pay ref="payRef" :id="payOrderId" @paySuccess="paySuccess"></pay>
-  </CtDialog>
-</template>
-
-<script setup>
-defineOptions({ name: 'mall-user-order-index'})
-import { ref } from 'vue'
-import { getMallOrderPage, receiveOrder, deleteTradeOrder, cancelTradeOrder, createOrderItemComment } from '@/api/mall/user'
-import { timesTampChange } from '@/utils/date'
-import { fen2yuan, handleOrderButtons, formatOrderStatus, formatOrderColor } from '@/hooks/web/useGoods'
-import Confirm from '@/plugins/confirm'
-import Snackbar from '@/plugins/snackbar'
-import GoodsItem from '../../components/GoodsItem/index.vue'
-import CommentForm from './commentForm.vue'
-import pay from '@/views/mall/components/details/order/pay.vue'
-import { useRoute } from 'vue-router'; const route = useRoute()
-import { useRouter } from 'vue-router'; const router = useRouter()
-
-const props = defineProps({
-  tabListBg: {
-    type: Boolean,
-    default: true
-  },
-})
-
-const tab = ref(route?.query?.tab ? (route.query.tab)-0 : -1)
-const tabList = [
-  { title: '全部', value: -1 },
-  { title: '待付款', value: 0 },
-  { title: '待发货', value: 10 },
-  { title: '待收货', value: 20 },
-  { title: '已完成', value: 30 },
-  { title: '已取消', value: 40 },
-  // { title: '待评价', value: 30 }
-]
-const total = ref(0)
-const queryParams = ref({
-  pageNo: 1,
-  pageSize: 10
-})
-
-// 获取订单列表
-const orderList = ref([])
-const getOrderPage = async () => {
-  queryParams.value.status = tab.value
-  if (tab.value === -1) delete queryParams.value.status
-  if (tab.value === 30) queryParams.value.commentStatus = false
-
-  const result = await getMallOrderPage(queryParams.value)
-
-  result.list.forEach(order => handleOrderButtons(order))
-  orderList.value = result.list
-  total.value = result.total
-}
-getOrderPage()
-
-// 分页
-const handleChangePage = (e) => {
-  queryParams.value.pageNo = e
-  getOrderPage()
-}
-
-// 查看详情
-const handleDetail = ({ id }) => {
-  window.open(`/mall/user/order/detail/${id}`)
-}
-
-// 删除订单
-const handleDelete = async ({ id }) => {
-  Confirm('系统提示', '是否确认删除该订单?').then(async () => {
-    await deleteTradeOrder(id)
-    Snackbar.success('删除成功')
-    await getOrderPage()
-  })
-}
-
-// 取消订单
-const handleCancel = async ({ id }) => {
-  Confirm('系统提示', '是否确认取消该订单?').then(async () => {
-    await cancelTradeOrder(id)
-    Snackbar.success('取消成功')
-    await getOrderPage()
-  })
-}
-
-// 商品评论
-// const showDialog = ref(false)
-// const commentOrderId = ref(null) // 订单id
-// const commentFormRef = ref()
-// const handleComment = (val) => {
-//   commentOrderId.value = val.id
-//   showDialog.value = true
-// }
-// const handleClose = () => {
-//   commentOrderId.value = null
-//   showDialog.value = false
-// }
-// const handleSubmit = async () => {
-//   const commentList = commentFormRef.value.commentList
-//   for (const comment of commentList) {
-//     await createOrderItemComment(comment)
-//   }
-//   Snackbar.success('评论成功')
-//   handleClose()
-//   getOrderPage()
-// }
-
-// // 收货成功后提示去评论
-// const handlePromptComment = (id) => {
-//   Confirm('确认收货成功', '是否前往评价?', { sureText: '立即评价', cancelText: '关闭' }).then(() => {
-//     handleComment({ id })
-//   })
-// }
-
-// 确认收货
-const handleConfirm = ({ id }) => {
-  if (!id) return
-  Confirm('系统提示', '是否确认收货?').then(async () => {
-    await receiveOrder(id)
-    Snackbar.success('收货成功')
-    queryParams.value.pageNo = 1
-    await getOrderPage()
-    handlePromptComment(id) // 收货成功后提示去评论
-  })
-}
-
-const showPay = ref(false)
-const payOrderId  = ref('')
-const handlePay = (val) => {
-  if (!payOrderId) return Snackbar.success('订单错误!')
-  payOrderId.value = val.payOrderId
-  showPay.value = true
-}
-// 
-const payCancel = () => {
-  Snackbar.warning('您已取消支付!')
-  showPay.value = false
-  // router.push({ path: '/mall/user/order', query: { tab: 0 } })
-}
-const paySuccess = (e) => {
-  // Snackbar.success('支付成功!')
-  // showPay.value = false
-  // getOrderPage()
-  router.push({ path: '/mall/payOver', query: { price: e.price }})
-}
-
-</script>
-
-<style scoped lang="scss">
-.order-item {
-  border: 1px solid #dbdbdb;
-  &-header {
-    display: flex;
-    background-color: #f2f4f7;
-    height: 36px;
-    line-height: 36px;
-    font-size: 13px;
-    color: #666;
-  }
-}
-</style>

+ 1 - 1
src/views/mall/user/prize/index.vue

@@ -39,7 +39,7 @@
 <script setup>
 defineOptions({ name: 'mall-user-prize-index' })
 import { ref, computed } from 'vue'
-import SelectAddress from '@/views/mall/user/address'
+import SelectAddress from '@/views/recruit/personal/PersonalCenter/shippingAddress/index.vue'
 import Snackbar from '@/plugins/snackbar'
 import { getLuckLotteryRecordPage, luckyLotteryRecordReceive } from '@/api/mall/prize'
 

+ 1 - 1
src/views/mall/user/address/index.vue → src/views/recruit/personal/PersonalCenter/shippingAddress/index.vue

@@ -51,7 +51,7 @@
 </template>
 
 <script setup>
-defineOptions({ name: 'mall-user-address-index' })
+defineOptions({ name: 'personal-personCenter-address-index' })
 import { ref } from 'vue'
 import { getMallUserAddressList, deleteMallUserAddress, createMallUserAddress, updateMallUserAddress } from '@/api/mall/address'
 import Confirm from '@/plugins/confirm'

+ 34 - 28
src/views/recruit/personal/PersonalCenter/tradeOrder/components/detail.vue

@@ -3,6 +3,33 @@
     <div class="default-width pb-5">
       <v-banner color="primary" :text="formatOrderStatusDescription(order)" style="background-color: #00897B; color: #fff;"></v-banner>
 
+      <!-- 商品列表 -->
+      <v-card class="my-3 pa-5">
+        <h3 class="mb-3">商品列表</h3>
+        <v-divider></v-divider>
+
+        <CtTable
+          class="mt-3"
+          :items="order.items"
+          :headers="headers"
+          :loading="false"
+          :elevation="0"
+          :isTools="false"
+          :showPage="false"
+          itemKey="id"
+        >
+          <template #picUrl="{ item }">
+            <v-img :src="item.picUrl" width="90" height="90" class="my-1"></v-img>
+          </template>
+          <template #spuName="{ item }">
+            <span class="color-primary cursor-pointer" @click="handleToGoodsDetail(item)">{{ item.spuName }}</span>
+          </template>
+        </CtTable>
+        <div class="text-end color-primary mr-3 mt-5 font-size-20">
+          共{{ order.productCount }}件商品,合计:¥{{ fen2yuan(order.payPrice) }}
+        </div>
+      </v-card>
+
       <v-row no-gutters class="mt-3">
         <v-col span="6">
           <!-- 订单信息 -->
@@ -31,33 +58,6 @@
           </v-card>
         </v-col>
       </v-row>
-
-      <!-- 商品列表 -->
-      <v-card class="my-3 pa-5">
-        <h3 class="mb-3">商品列表</h3>
-        <v-divider></v-divider>
-
-        <CtTable
-          class="mt-3"
-          :items="order.items"
-          :headers="headers"
-          :loading="false"
-          :elevation="0"
-          :isTools="false"
-          :showPage="false"
-          itemKey="id"
-        >
-          <template #picUrl="{ item }">
-            <v-img :src="item.picUrl" width="90" height="90"></v-img>
-          </template>
-          <template #spuName="{ item }">
-            <span class="color-primary cursor-pointer" @click="handleToGoodsDetail(item)">{{ item.spuName }}</span>
-          </template>
-        </CtTable>
-        <div class="text-end color-primary mr-3 mt-5 font-size-20">
-          共{{ order.productCount }}件商品,合计:¥{{ fen2yuan(order.payPrice) }}
-        </div>
-      </v-card>
     </div>
   </div>
 </template>
@@ -84,8 +84,14 @@ const headers = [
 ]
 
 onMounted(async () =>{
-  if (!id) return Snackbar.error('订单不存在')
   const data = await getMallOrderDetail(id)
+  if (!data) {
+    Snackbar.warning('订单不存在')
+    setTimeout(() => {
+      window.close()
+    }, 1000)
+    return
+  }
   order.value = data
 })
 

+ 53 - 0
src/views/recruit/personal/PersonalCenter/tradeOrder/dynamic/pointExchangeRecord.vue

@@ -0,0 +1,53 @@
+<template>
+  <CtTable
+    class="mt-3"
+    :items="dataList"
+    :headers="headers"
+    :loading="false"
+    :elevation="0"
+    :isTools="false"
+    :showPage="true"
+    :total="total"
+    :page-info="queryParams"
+    itemKey="id"
+    @pageHandleChange="handleChangePage"
+  >
+  </CtTable>
+</template>
+
+<script setup>
+defineOptions({name: 'personal-person-center-point-exchange-records'})
+import { ref } from 'vue'
+import { getRedeemPage } from '@/api/mall/index.js'
+
+const total = ref(0)
+const headers = [
+  { title: '商品名称', key: 'name', sortable: false },
+  { title: '消耗积分', key: 'point', sortable: false },
+  { title: '收货人姓名', key: 'contactName', sortable: false },
+  { title: '联系电话/收货人电话', key: 'contactPhone', sortable: false },
+  { title: '收货详细地址', key: 'contactAddress', sortable: false },
+  { title: '订单编号', key: 'orderNo', sortable: false }
+]
+const queryParams = ref({
+  pageNo: 1,
+  pageSize: 10,
+})
+
+// 数据
+const dataList = ref([])
+const getData = async () => {
+  const res  = await getRedeemPage(queryParams.value)
+  dataList.value = res.list
+  total.value = res.total
+}
+getData()
+
+const handleChangePage = (e) => {
+  queryParams.value.pageNo = e
+  getData()
+}
+</script>
+
+<style lang="scss" scoped>
+</style>

+ 8 - 3
src/views/recruit/personal/PersonalCenter/tradeOrder/index.vue

@@ -1,4 +1,3 @@
-<!--  -->
 <template>
   <div class="white-bgc pa-3">
     <v-tabs v-model="tab" align-tabs="start" color="primary" bg-color="#f7f8fa" @update:model-value="handleChangeTab">
@@ -13,17 +12,23 @@ defineOptions({name: 'tradingOrder'})
 import { ref, shallowRef } from 'vue'
 import RechargeVipOrder from './dynamic/rechargeVip.vue'
 import MallOrder from './dynamic/mallOrder.vue'
+import PointExchangeRecord from './dynamic/pointExchangeRecord.vue'
+import { useRoute } from 'vue-router'
 
 const tab = ref(0)
 const items = shallowRef([
   { label: '余额充值、购买会员订单', value: 0, path: RechargeVipOrder },
-  // { label: '商城交易订单', value: 1, path: MallOrder }
+  { label: '商城交易订单', value: 1, path: MallOrder },
+  { label: '积分兑换记录', value: 2, path: PointExchangeRecord }
 ])
+const route = useRoute()
+const { key } = route.query
+if (key) tab.value = Number(key)
 
 // 切换
 const handleChangeTab = () => {
 }
-
 </script>
+
 <style lang="scss" scoped>
 </style>