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

Merge remote-tracking branch 'origin/master' into zzx

zouzexu 1 день назад
Родитель
Сommit
5b1df576cd

+ 8 - 0
src/api/api.type.d.ts

@@ -828,6 +828,14 @@ namespace Api {
      * 核销时间
      */
     verificationTime?: string
+    /**
+     * 需提前预约天数
+     */
+    advanceBookingTime?: number
+    /**
+     * 有效时间
+     */
+    effectiveTime?: number
     [property: string]: any
   }
   interface ChargeOrderInfo {

+ 6 - 6
src/api/globals.d.ts

@@ -1054,21 +1054,21 @@ declare global {
         config: Config
       ): Alova2Method<apiResData<string>, 'djk.djkAppletOrderConfirm', Config>;
       welfareList<
-        Config extends Alova2MethodConfig<apiResData<DjkWelfareVO[]>> & {
+        Config extends Alova2MethodConfig<apiResData<Api.DjkWelfareVO[]>> & {
 
         }
       >(
         config: Config
-      ): Alova2Method<apiResData<DjkWelfareVO[]>, 'djk.welfareList', Config>;
+      ): Alova2Method<apiResData<Api.DjkWelfareVO[]>, 'djk.welfareList', Config>;
       welfareInfo<
-        Config extends Alova2MethodConfig<apiResData<DjkWelfareVO>> & {
+        Config extends Alova2MethodConfig<apiResData<Api.DjkWelfareVO>> & {
           data: {
             id: number
           }
         }
       >(
         config: Config
-      ): Alova2Method<apiResData<DjkWelfareVO>, 'djk.welfareList', Config>;
+      ): Alova2Method<apiResData<Api.DjkWelfareVO>, 'djk.welfareList', Config>;
       welfareClaimInfo<
         Config extends Alova2MethodConfig<apiResData<any>> & {
           data: {
@@ -1103,12 +1103,12 @@ declare global {
         config: Config
       ): Alova2Method<apiResData<any>, 'djk.welfareClaimInfoDetaile', Config>;
       welfareClaimInfoPopup<
-        Config extends Alova2MethodConfig<apiResData<DjkWelfareVO>> & {
+        Config extends Alova2MethodConfig<apiResData<Api.DjkWelfareVO>> & {
           pathParams: { memberId: number };
         }
       >(
         config: Config
-      ): Alova2Method<apiResData<DjkWelfareVO>, 'djk.welfareClaimInfoPopup', Config>;
+      ): Alova2Method<apiResData<Api.DjkWelfareVO>, 'djk.welfareClaimInfoPopup', Config>;
       addWelfareOrder<
         Config extends Alova2MethodConfig<apiResData<any>> & {
           data: {/**

+ 6 - 2
src/pages/index/index.vue

@@ -63,7 +63,7 @@ const navList = computed(() => {
     { icon: `${StaticUrl}/smqjh-jiayou.png`, title: '加油', name: '', show: !isOnlineAudit.value }, // refueling-tabbar
     { icon: `${StaticUrl}/smqjh-jiudian.png`, title: '酒店民宿', name: '', show: !isOnlineAudit.value },
     { icon: `${StaticUrl}/smqjh-daijia.png`, title: '代驾', name: '', show: !isOnlineAudit.value },
-    { icon: `${StaticUrl}/smqjh-djk.png`, title: '大健康', name: 'djk-homeTabbar', show: true },
+    { icon: `${StaticUrl}/smqjh-djk.png`, title: '大健康', name: 'djk-homeTabbar', show: !isOnlineAudit.value },
   ]
   return list
 })
@@ -230,6 +230,10 @@ function handleChangeSwiper(e: UniHelper.SwiperOnChangeEvent) {
                   <view @click="router.push({ name: 'xsb-goods', params: { id: item.prodId } })">
                     <view class="relative h-344rpx">
                       <image :src="item.pic" class="h-344rpx w-344rpx" />
+                      <image
+                        :src="`${StaticUrl}/xsb-shui-index.png`"
+                        class="absolute left-0 top-0 h-344rpx w-344rpx"
+                      />
                       <view class="absolute bottom-0 left-0 flex items-center text-22rpx">
                         <view class="rounded-tl-8rpx bg-[#02ECFD] pl-4rpx">
                           星闪豹
@@ -276,7 +280,7 @@ function handleChangeSwiper(e: UniHelper.SwiperOnChangeEvent) {
             </scroll-view>
           </view>
         </wd-skeleton>
-        <wd-loadmore :state="state" :loading-props="{ color: '#9ED605', size: 20 }" @reload="reload" />
+        <wd-loadmore v-if="goodsList.length > 9" :state="state" :loading-props="{ color: '#9ED605', size: 20 }" @reload="reload" />
         <wd-overlay :show="showoverlay" @click="showoverlay = false">
           <view class="mt-280rpx flex items-center justify-center">
             <view class="relative h-906rpx w-644rpx flex flex-col justify-center text-center" :style="{ backgroundImage: `url(${StaticUrl}/home-overlay-img.png)`, backgroundSize: 'cover', backgroundPosition: 'center' }">

+ 1 - 0
src/store/sys.ts

@@ -93,5 +93,6 @@ export const useSysStore = defineStore('system', {
         })
       })
     },
+
   },
 })

+ 8 - 10
src/subPack-common/integral/index.vue

@@ -9,17 +9,11 @@ definePage({
     disableScroll: true,
   },
 })
-const navTabTypeList = [
-  { name: '全部', value: 'all' },
-  { name: '星闪豹', value: 'XSB' },
-  { name: '充电', value: 'CD' },
-  { name: '电影演出', value: 'DYY' },
-  { name: '视频权益', value: 'VIDEO' },
-  { name: '大牌点餐', value: 'SHOP' },
-]
+const navTabTypeList = ref<Api.sysDict[]>([])
 const { data: info } = useRequest(() =>
   Apis.xsb.findUserPoints({}),
 )
+
 const type = ['充值', '下单', '退款', '过期积分', '退款过期积分']
 const { data: pointList, isLastPage, page } = usePagination((pageNum, pageSize) => Apis.xsb.findUserPointsPage({ data: { pageNum, pageSize } }), { data: resp => resp.data?.list, initialPage: 1, initialPageSize: 10, immediate: true, append: true })
 
@@ -30,9 +24,13 @@ function handleScrollBottom() {
     page.value++
   }
 }
-
+async function getNavList() {
+  const res = await Apis.sys.dictPage({ data: { typeCode: 'sys_business_type' } })
+  navTabTypeList.value = res.data?.list || []
+}
+getNavList()
 function getLabel(val: string) {
-  return navTabTypeList.find(i => i.value === val)?.name || '未知类型'
+  return navTabTypeList.value.find(i => i.value === val)?.name || '未知类型'
 }
 </script>
 

+ 2 - 2
src/subPack-djk/commonTab/components/index.vue

@@ -26,7 +26,7 @@ function handleBottom() {
     <wd-navbar
       title="大健康"
       :bordered="false" :z-index="99"
-      safe-area-inset-top placeholder left-arrow fixed @click-left="router.back()"
+      safe-area-inset-top left-arrow placeholder fixed @click-left="router.back()"
     />
     <scroll-view scroll-y :style="{ height: `calc(100vh - ${(statusBarHeight + MenuButtonHeight) * 4}rpx)` }" @scrolltolower="handleBottom">
       <view class="px24rpx">
@@ -55,7 +55,7 @@ function handleBottom() {
                 </text> {{ its.price }}
               </view>
-              <view class="text-24rpx">
+              <view class="w-300rpx truncate text-24rpx">
                 {{ its.goodsName }}
               </view>
               <view class="text-24rpx text-gray">

+ 30 - 2
src/subPack-djk/commonTab/index.vue

@@ -3,6 +3,7 @@ import home from './components/index.vue'
 import fl from './components/fl.vue'
 import order from './components/order.vue'
 import { StaticUrl } from '@/config'
+import router from '@/router'
 
 definePage({
   name: 'djk-homeTabbar',
@@ -15,6 +16,8 @@ definePage({
   },
 })
 const { refreshOrderList } = storeToRefs(useSysStore())
+const { userInfo, token } = storeToRefs(useUserStore())
+const showCurtain = ref(false)
 onLoad((options: any) => {
   if (options.pay) {
     handleTabbarChange({ value: 'djk-order' })
@@ -29,6 +32,7 @@ const tabbarItems = ref([
   { name: 'djk-order', value: null, active: false, title: '订单', icon1: `${StaticUrl}/djk-order0.png`, icon2: `${StaticUrl}/djk-order1.png` },
 ])
 const tabbarName = ref('djk-home')
+const welfare = ref<Api.DjkWelfareVO>()
 function handleTabbarChange({ value }: { value: string }) {
   setTabbarItemActive(value)
   tabbarName.value = value
@@ -43,15 +47,25 @@ function setTabbarItemActive(name: string) {
     }
   })
 }
+async function getData() {
+  if (!token.value)
+    return
+  const res = await Apis.djk.welfareClaimInfoPopup({ pathParams: { memberId: userInfo.value.id } })
+  if (res.data.id) {
+    welfare.value = res.data
+    showCurtain.value = true
+  }
+}
+getData()
 </script>
 
 <template>
   <view class="page-xsb">
     <fl v-if="tabbarName == 'djk-fl'" />
     <order v-if="tabbarName == 'djk-order'" />
-    <home v-show="tabbarName == 'djk-home'" />
+    <home v-if="tabbarName == 'djk-home'" />
     <wd-tabbar
-      v-model="tabbarName" placeholder safe-area-inset-bottom fixed :bordered="false" custom-class="custom-tab"
+      v-model="tabbarName" safe-area-inset-bottom placeholder fixed :bordered="false" custom-class="custom-tab"
       :z-index="99999" @change="handleTabbarChange"
     >
       <wd-tabbar-item
@@ -73,6 +87,20 @@ function setTabbarItemActive(name: string) {
         </template>
       </wd-tabbar-item>
     </wd-tabbar>
+    <wd-overlay :show="showCurtain" :z-index="999999999" @click="showCurtain = false">
+      <view class="h-screen flex items-center justify-center">
+        <view class="relative h702rpx w702rpx">
+          <image
+            :src="`${StaticUrl}/djk-fl-popup.png`"
+            class="h702rpx w702rpx"
+            @click="router.push({ name: 'djk-welfare', params: { id: String(welfare?.id) } })"
+          />
+          <view class="absolute bottom-120rpx left-50% text-28rpx text-white -translate-x-50%">
+            领取:{{ welfare?.quantityClaimed || 0 }}/{{ welfare?.inventory || 0 }}
+          </view>
+        </view>
+      </view>
+    </wd-overlay>
   </view>
 </template>
 

+ 8 - 3
src/subPack-djk/confirmOrder/index.vue

@@ -13,16 +13,21 @@ const phone = ref(useUserStore().userInfo.mobile)
 const isEdit = ref(false)
 const points = ref(0)
 const price = ref(0)
+const goodsId = ref()
 onLoad((options: any) => {
-  console.log(options.order)
-  orderInfo.value = JSON.parse(options.order)
-  getCore()
+  goodsId.value = options.order
+  getGoodsDetaile()
 })
 async function getCore() {
   const res = await Apis.djk.djkAppletOrderConfirm({ data: { goodsId: orderInfo.value?.id, channelId: useUserStore().userInfo.channelId } })
   points.value = res.data.points
   price.value = res.data.price
 }
+async function getGoodsDetaile() {
+  const res = await Apis.djk.goodsInfo({ data: { goodsId: goodsId.value } })
+  orderInfo.value = res.data
+  getCore()
+}
 async function handlePay() {
   if (!orderInfo.value) {
     useGlobalToast().show({ msg: '网络异常!请联系客服' })

+ 1 - 1
src/subPack-djk/goodsinfo/index.vue

@@ -50,7 +50,7 @@ function handlePhone() {
 }
 async function handlePay() {
   await useUserStore().checkLogin()
-  router.push({ name: 'djk-confirmOrder', params: { order: JSON.stringify(goodsInfo.value) } })
+  router.push({ name: 'djk-confirmOrder', params: { order: goodsId.value } })
 }
 </script>
 

+ 6 - 6
src/subPack-djk/orderDetaile/index.vue

@@ -68,13 +68,13 @@ async function handleAfterSale() {
 }
 function handleNav() {
   uni.openLocation({
-    latitude: Number(orderInfo.value?.djkOrderAttachInfo?.shopLat),
-    longitude: Number(orderInfo.value?.djkOrderAttachInfo?.shopLng),
+    latitude: Number(orderInfo.value?.shopInfo?.shopLat),
+    longitude: Number(orderInfo.value?.shopInfo?.shopLng),
   })
 }
 function handlePhone() {
   uni.makePhoneCall({
-    phoneNumber: String(orderInfo.value?.djkOrderAttachInfo?.tel),
+    phoneNumber: String(orderInfo.value?.shopInfo?.tel),
   })
 }
 </script>
@@ -169,7 +169,7 @@ function handlePhone() {
             {{ orderInfo.djkOrderAttachInfo?.goodsName }}
           </view>
           <view class="mt16rpx text-24rpx text-gray">
-            有效期360天·需提前1天预约
+            有效期{{ orderInfo.djkOrderAttachInfo?.effectiveTime }}天·需提前{{ orderInfo.djkOrderAttachInfo?.advanceBookingTime }}天预约
           </view>
           <view class="mt16rpx flex items-center justify-between">
             <view class="text-36rpx text-#FF4D3A font-semibold">
@@ -213,7 +213,7 @@ function handlePhone() {
       <view class="mt20rpx rounded-16rpx bg-white p24rpx">
         <view class="mt20rpx h160rpx flex items-center justify-between bg-cover bg-center px24rpx" :style="{ backgroundImage: `url(${StaticUrl}/djk-shop-nav-bg.png)` }">
           <view class="flex items-center">
-            {{ orderInfo.djkOrderAttachInfo?.shopAddress }}
+            {{ orderInfo.shopInfo?.shopName }}
           </view>
           <view class="flex items-center">
             <view class="mr40rpx flex flex-col items-center justify-center" @click="handleNav">
@@ -250,7 +250,7 @@ function handlePhone() {
           退款规则
         </view>
         <view class="mt20rpx text-24rpx">
-          支付成功后,服务有效期为30
+          支付成功后,服务有效期为{{ orderInfo.djkOrderAttachInfo?.effectiveTime }}
         </view>
         <view class="mt20rpx text-24rpx">
           有效期内可自主申请退款

+ 1 - 1
src/subPack-djk/shopinfo/index.vue

@@ -106,7 +106,7 @@ function handlePhone() {
                 :src="item.goodsImg"
               />
               <view class="bg-#F9F9F9 p16rpx">
-                <view class="text-28rpx font-semibold">
+                <view class="line-clamp-2 text-28rpx font-semibold">
                   {{ item.goodsName }}
                 </view>
                 <view class="mt16rpx flex items-center justify-between">

+ 7 - 2
src/subPack-djk/welfare/index.vue

@@ -13,6 +13,7 @@ onLoad((options: any) => {
 const mapUser = ['全部用户', '仅限新用户', '特定用户标签', '指定用户']
 const phone = ref(useUserStore().userInfo.mobile)
 const selectGoods = ref<Api.PmsDjkGoods>()
+const subLoding = ref(false)
 async function getWelfare(id: number) {
   const res = await Apis.djk.welfareInfo({ data: { id } })
   welfare.value = res.data
@@ -23,6 +24,7 @@ async function handleSelect(item: Api.PmsDjkGoods) {
 }
 async function handelSubmit() {
   uni.showLoading({ mask: true })
+  subLoding.value = true
   try {
     await Apis.djk.welfareClaimInfo({
       data: {
@@ -35,16 +37,19 @@ async function handelSubmit() {
     const data = await Apis.djk.addWelfareOrder({ data: { welfareId: Number(welfare.value?.id), shopId: selectGoods.value?.shopId, channelId: useUserStore().userInfo.channelId, phone: phone.value, goodsId: selectGoods.value?.id, goodsNum: 1, customerAuthorization: boolToNumber(isAllow.value) } })
     useGlobalToast().show('领取成功!')
     uni.hideLoading()
-
+    show.value = false
     setTimeout(() => {
       router.push({
         name: 'djk-orderDetaile',
         params: { id: data.data },
       })
+      subLoding.value = false
     }, 1500)
   }
   catch {
     uni.hideLoading()
+    subLoding.value = false
+    show.value = false
     console.log('领取失败')
   }
 }
@@ -150,7 +155,7 @@ async function handelSubmit() {
             </wd-button>
           </view>
           <view class="w48%">
-            <wd-button block @click="handelSubmit">
+            <wd-button block :loading="subLoding" @click="handelSubmit">
               确认领取
             </wd-button>
           </view>

+ 2 - 2
src/subPack-smqjh/components/djk-order/index.vue

@@ -92,10 +92,10 @@ async function handleAfterSale(item: Api.xsbOrderList) {
           </view>
           <view class="text-24rpx">
             <view class="mt5rpx">
-              订单号:{{ order.djkOrderAttachInfo?.goodsNum }}
+              订单号:{{ order.djkOrderAttachInfo?.orderNumber }}
             </view>
             <view class="mt5rpx">
-              ¥{{ order.djkOrderAttachInfo?.price }} 有效期30
+              ¥{{ order.djkOrderAttachInfo?.price }} 有效期{{ order.djkOrderAttachInfo?.effectiveTime }}
             </view>
             <view class="mt5rpx">
               {{ phoneFormat(String(order.consigneeMobile)) }}

+ 1 - 0
src/subPack-smqjh/order/order-data.ts

@@ -4,6 +4,7 @@ export const navTabTypeList = [
   { name: '充电', value: 'CD' },
   { name: '电影演出', value: 'DYY' },
   { name: '视频权益', value: 'XNSP' },
+  { name: '大健康', value: 'DJK' },
   { name: '大牌点餐', value: 'SHOP' },
 ]
 

+ 11 - 5
src/subPack-xsb/commonTab/components/cart.vue

@@ -50,11 +50,17 @@ onMounted(async () => {
                   <wd-checkbox :model-value="item.id" />
                 </view>
                 <view class="flex flex-1">
-                  <image
-                    :src="item.pic"
-                    class="h206rpx w200rpx flex-shrink-0"
-                    @click.stop="router.push({ name: 'xsb-goods', params: { id: String(item.prodId) } })"
-                  />
+                  <view class="relative">
+                    <image
+                      :src="item.pic"
+                      class="h206rpx w200rpx flex-shrink-0"
+                      @click.stop="router.push({ name: 'xsb-goods', params: { id: String(item.prodId) } })"
+                    />
+                    <image
+                      :src="`${StaticUrl}/xbs-shui-cart.png`"
+                      class="absolute left-0 top-0 h206rpx w200rpx flex-shrink-0"
+                    />
+                  </view>
                   <view class="ml20rpx flex-1">
                     <view class="text-left text-28rpx font-semibold">
                       <!-- <view v-for="i in 2" :key="i" class="mr5px inline-block">

+ 6 - 2
src/subPack-xsb/commonTab/components/classfiy.vue

@@ -471,8 +471,12 @@ function handlePay() {
             <view v-if="productList.length" class="p20rpx">
               <view v-for="item in productList" :id="`class${item.prodId}`" :key="item.id" class="relative">
                 <view class="flex" @click="handleGo(item)">
-                  <view class="mr20rpx h172rpx w172rpx flex-shrink-0 overflow-hidden rounded-16rpx bg-#F6F6F6">
+                  <view class="relative mr20rpx h172rpx w172rpx flex-shrink-0 overflow-hidden rounded-16rpx bg-#F6F6F6">
                     <image :src="item.pic" lazy-load class="h-full w-full" />
+                    <image
+                      :src="`${StaticUrl}/xsb-shui-class.png`"
+                      class="absolute left-0 top-0 h-full w-full"
+                    />
                   </view>
                   <view class="flex-1">
                     <view class="text-left text-28rpx font-semibold">
@@ -652,7 +656,7 @@ function handlePay() {
       <template #footer>
         <view class="box-border w-full flex items-center justify-between py20rpx">
           <view class="w-48%">
-            <wd-button plain hairline block @click="selectGoods = false">
+            <wd-button hairline plain block @click="selectGoods = false">
               取消
             </wd-button>
           </view>

+ 4 - 0
src/subPack-xsb/components/goodsItem/index.vue

@@ -13,6 +13,10 @@ defineProps<{ itemGoods: Api.xsbCategoryProductList }>()
           :src="itemGoods.pic"
           class="h344rpx w344rpx"
         />
+        <image
+          :src="`${StaticUrl}/xsb-shui-index.png`"
+          class="absolute left-0 top-0 h344rpx w344rpx"
+        />
       </view>
       <view class="mt20rpx px20rpx">
         <view class="line-clamp-2 text-left text-28rpx font-semibold">

+ 12 - 5
src/subPack-xsb/search/index.vue

@@ -1,4 +1,5 @@
 <script setup lang="ts">
+import { StaticUrl } from '@/config'
 import router from '@/router'
 
 definePage({
@@ -104,7 +105,7 @@ function handleSearchText(text: string) {
         <view class="flex flex-1 items-center">
           <wd-icon name="search" size="20px" color="#aaa" />
           <view class="ml20rpx flex-1">
-            <input v-model.trim="searchText" type="text" placeholder="请输入搜索内容">
+            <input v-model.trim="searchText" type="text" placeholder="请输入搜索内容" @confirm="handleSearch">
           </view>
         </view>
         <view class="w-90rpx flex items-center">
@@ -152,10 +153,16 @@ function handleSearchText(text: string) {
     <view v-if="isSearch" class="px24rpx pt20rpx">
       <view v-for="item in data" :key="item.id" class="relative mb20rpx rounded-16rpx bg-white p24rpx">
         <view class="box-border flex items-center justify-between" @click="router.push({ name: 'xsb-goods', params: { id: String(item.prodId) } })">
-          <image
-            :src="item.pic"
-            class="h200rpx w200rpx flex-shrink-0 rounded-16rpx"
-          />
+          <view class="relative">
+            <image
+              :src="item.pic"
+              class="h200rpx w200rpx flex-shrink-0 rounded-16rpx"
+            />
+            <image
+              :src="`${StaticUrl}/xsb-shui-search.png`"
+              class="absolute left-0 top-0 h200rpx w200rpx flex-shrink-0 rounded-16rpx"
+            />
+          </view>
           <view class="ml20rpx flex-1">
             <view class="text-32rpx font-semibold">
               {{ item.prodName }}