caiyuqin 2 месяцев назад
Родитель
Сommit
f04e246f70

+ 3 - 3
src/components/filter/filter.vue

@@ -211,9 +211,9 @@ const defaultEnd = "";
 const handleConfirm = (value: { startDate: string; endDate: string }) => {
   const currentGroup = matchedDataList.value[currentTab.value];
   selectedValues.value[currentGroup.key] = value;
-  matchedDataList.value[
-    currentTab.value
-  ].name = `${value.startDate} - ${value.endDate}`;
+  matchedDataList.value[currentTab.value].name = value.startDate
+    ? `${value.startDate} - ${value.endDate}`
+    : "日期筛选";
   emit("selectValue", selectedValues.value);
 };
 

+ 2 - 37
src/pages-A/shareCoupon/index.vue

@@ -563,7 +563,7 @@ async function drawMerchantLine(ctx, canvas, centerX, y, maxWidth, scale) {
   const avatars = couponDetail.value.merchantInfoVOList
     ?.filter(item => item?.logo)
     ?.map(item => item.logo) || [];
- //const avatars=['https://life.baoxianzhanggui.com/pro-img/securities/index/rank.png','https://life.baoxianzhanggui.com/pro-img/securities/index/rank.png','https://life.baoxianzhanggui.com/pro-img/securities/index/rank.png']
+  //const avatars=['https://life.baoxianzhanggui.com/pro-img/securities/index/rank.png','https://life.baoxianzhanggui.com/pro-img/securities/index/rank.png','https://life.baoxianzhanggui.com/pro-img/securities/index/rank.png']
   const label = '适用商家:'
   const avatarSize = 36 * scale
   const overlap = 12 * scale
@@ -1117,15 +1117,12 @@ async function handleSaveImage() {
 async function handleCopyShareLink() {
   if (copyLinkLoading.value)
     return
-
   copyLinkLoading.value = true
-
   try {
     if (!shareLink.value) {
       const result = await createWechatUrlCoupon({
         templateId: shareId.value,
-        //pathUrl: `pages-C/share/shareInfo`,
-        pathUrl: `pages/home/index`,
+        pathUrl: `pages-C/share/shareInfo`,
       })
       shareLink.value = result || ''
     }
@@ -1176,7 +1173,6 @@ function handleLongPressImage() {
 </script>
 
 <style lang="scss" scoped>
-/* 页面容器 */
 .share-container {
   position: relative;
   display: flex;
@@ -1188,25 +1184,16 @@ function handleLongPressImage() {
     "Helvetica Neue", Arial, sans-serif;
 }
 
-/* 顶部导航栏 */
 .top-nav {
-  // background: linear-gradient(-46deg, #ff7a75 0%, #ed6b66 98%);
   box-shadow: 0 2rpx 10rpx rgba(255, 100, 71, 0.3);
   position: fixed;
-  /* 固定定位 */
   top: 0;
-  /* 顶部对齐 */
   left: 0;
-  /* 左侧对齐 */
   right: 0;
-  /* 右侧对齐 */
   z-index: 999;
-  /* 确保在其他元素之上 */
   padding-top: var(--safe-area-inset-top);
-  /* 适配安全区域 */
 }
 
-/* 自定义导航栏 */
 .custom-navbar {
   display: flex;
   align-items: center;
@@ -1216,7 +1203,6 @@ function handleLongPressImage() {
   box-sizing: border-box;
 }
 
-/* 返回按钮 */
 .back-btn {
   width: 60rpx;
   height: 60rpx;
@@ -1231,7 +1217,6 @@ function handleLongPressImage() {
   font-weight: bold;
 }
 
-/* 导航栏标题 */
 .nav-title {
   font-family: Inter, Inter;
   font-weight: 400;
@@ -1241,17 +1226,14 @@ function handleLongPressImage() {
   text-align: center;
 }
 
-/* 右侧占位 */
 .right-space {
   width: 60rpx;
 }
 
-/* 安全区域 */
 .safe-top {
   background: linear-gradient(-46deg, #ff7a75 0%, #ed6b66 98%);
 }
 
-/* 预览区域 */
 .preview-area {
   position: absolute;
   inset: 0;
@@ -1267,7 +1249,6 @@ function handleLongPressImage() {
   overflow: hidden;
 }
 
-/* 预览图片容器 */
 .preview-image-wrapper {
   width: 100%;
   height: 100%;
@@ -1278,7 +1259,6 @@ function handleLongPressImage() {
   overflow: hidden;
 }
 
-/* 预览图片 */
 .qc-code-img {
   position: absolute;
   top: -9999px;
@@ -1296,7 +1276,6 @@ function handleLongPressImage() {
   opacity: 0.96;
 }
 
-/* 图片操作提示 */
 .image-tips {
   display: flex;
   justify-content: center;
@@ -1309,7 +1288,6 @@ function handleLongPressImage() {
   color: #666666;
 }
 
-/* 生成图片按钮容器 */
 .generate-btn-container {
   display: flex;
   justify-content: center;
@@ -1317,7 +1295,6 @@ function handleLongPressImage() {
   width: 100%;
 }
 
-/* 生成图片按钮 */
 .generate-btn {
   background: linear-gradient(-46deg, #ff7a75 0%, #ed6b66 98%);
   color: #ffffff;
@@ -1338,7 +1315,6 @@ function handleLongPressImage() {
   box-shadow: 0 5rpx 15rpx rgba(255, 100, 71, 0.3);
 }
 
-/* 操作区域 */
 .action-area {
   position: absolute;
   left: 0;
@@ -1352,7 +1328,6 @@ function handleLongPressImage() {
   z-index: 20;
 }
 
-/* 分享按钮 */
 .share-btn {
   display: flex;
   flex-direction: column;
@@ -1375,9 +1350,7 @@ function handleLongPressImage() {
   border: 0;
 }
 
-/* 按钮图标 */
 
-/* 按钮文本 */
 .btn-text {
   font-size: 28rpx;
   font-weight: 400;
@@ -1392,7 +1365,6 @@ function handleLongPressImage() {
   background: transparent;
 }
 
-/* 额外提示 */
 .extra-tips {
   background: #fffbe6;
   border: 2rpx solid #ffeaa7;
@@ -1406,7 +1378,6 @@ function handleLongPressImage() {
   line-height: 36rpx;
 }
 
-/* 加载遮罩 */
 .loading-mask {
   position: fixed;
   top: 0;
@@ -1420,7 +1391,6 @@ function handleLongPressImage() {
   z-index: 999;
 }
 
-/* 加载内容 */
 .loading-content {
   display: flex;
   flex-direction: column;
@@ -1428,7 +1398,6 @@ function handleLongPressImage() {
   justify-content: center;
 }
 
-/* 加载动画 */
 .loading-spinner {
   width: 80rpx;
   height: 80rpx;
@@ -1439,13 +1408,11 @@ function handleLongPressImage() {
   margin-bottom: 20rpx;
 }
 
-/* 加载文字 */
 .loading-content text {
   font-size: 28rpx;
   color: #666666;
 }
 
-/* 隐藏canvas */
 .canvas-hide {
   position: absolute;
   top: -9999px;
@@ -1453,7 +1420,6 @@ function handleLongPressImage() {
   opacity: 0;
 }
 
-/* 动画 */
 @keyframes spin {
   0% {
     transform: rotate(0deg);
@@ -1464,7 +1430,6 @@ function handleLongPressImage() {
   }
 }
 
-/* 响应式设计 */
 @media screen and (max-height: 1000rpx) {
   .preview-area {
     min-height: 0;

+ 6 - 5
src/pages-C/home/browse.vue

@@ -65,14 +65,15 @@ const selectValue = (selected: any) => {
 };
 
 const reloadListRef = (extraParams = {}) => {
+  let obj = filterParams.value;
   listRef.value.reloadList({
     browseBy: browseBy.value,
-    category: filterParams.value.type?.type,
-    startTime: filterParams.value.dataFilter
-      ? filterParams.value.dataFilter?.startDate + " 23:59:59"
+    category: obj.type?.type,
+    startTime: obj.dataFilter?.startDate
+      ? obj.dataFilter?.startDate + " 23:59:59"
       : "",
-    endTime: filterParams.value.dataFilter
-      ? filterParams.value.dataFilter?.endDate + " 23:59:59"
+    endTime: obj.dataFilter?.endDate
+      ? obj.dataFilter?.endDate + " 23:59:59"
       : "",
   });
 };

+ 8 - 6
src/pages-C/home/ranking.vue

@@ -82,8 +82,10 @@ function selectValue(selected) {
   params.sorting = selected?.rank?.type;
   params.type = selected?.date?.type;
   if (selected?.dataFilter) {
-    params.startTime = selected.dataFilter.startDate + " 00:00:00";
-    params.endTime = selected.dataFilter.endDate + " 23:59:59";
+    let start = selected.dataFilter.startDate;
+    let endDate = selected.dataFilter.endDate;
+    params.startTime = start ? start + " 00:00:00" : "";
+    params.endTime = endDate ? endDate + " 23:59:59" : "";
   }
 
   listRef.value?.reloadList(params);
@@ -139,11 +141,11 @@ function selectValue(selected) {
                   <u--image v-if="item.serialNumber == 1" class='selected-icon' :src="getImageUrl('@img/me/rank1.png')"
                     mode="aspectFit" width="48rpx" height="48rpx">
                   </u--image>
-                  <u--image v-else-if="item.serialNumber == 2" class='selected-icon' :src="getImageUrl('@img/me/rank2.png')"
-                    mode="aspectFit" width="48rpx" height="48rpx">
+                  <u--image v-else-if="item.serialNumber == 2" class='selected-icon'
+                    :src="getImageUrl('@img/me/rank2.png')" mode="aspectFit" width="48rpx" height="48rpx">
                   </u--image>
-                  <u--image v-else-if="item.serialNumber == 3" class='selected-icon' :src="getImageUrl('@img/me/rank3.png')"
-                    mode="aspectFit" width="48rpx" height="48rpx">
+                  <u--image v-else-if="item.serialNumber == 3" class='selected-icon'
+                    :src="getImageUrl('@img/me/rank3.png')" mode="aspectFit" width="48rpx" height="48rpx">
                   </u--image>
                   <text v-else class="ranking-value rank-num">{{ item.serialNumber }}</text>
                   <text class="ranking-value">{{ item.templateName }}</text>

+ 11 - 10
src/pages-C/home/sendCancelWriteOff.vue

@@ -15,7 +15,6 @@ definePage({
   },
 });
 
-// Task 2: 定义 API 函数
 const getCancelWriteOffListApi = (params: any) => {
   return getCouponIssueList({
     pageNo: params.pageNo,
@@ -28,7 +27,6 @@ const getCancelWriteOffListApi = (params: any) => {
   });
 };
 
-// Task 1: 定义 listRef、isMounted 等变量
 const listRef = ref();
 const isMounted = ref(false);
 const filterParams = ref({});
@@ -47,19 +45,19 @@ onLoad(async (options) => {
 });
 
 const reloadListRef = (extraParams = {}) => {
+  const obj = filterParams.value;
   listRef.value.reloadList({
-    dayType: filterParams.value.date?.type,
-    category: filterParams.value.type?.type,
-    startTime: filterParams.value.dataFilter
-      ? filterParams.value.dataFilter?.startDate + " 23:59:59"
+    dayType: obj.date?.type,
+    category: obj.type?.type,
+    startTime: obj.dataFilter?.startDate
+      ? obj.dataFilter?.startDate + " 23:59:59"
       : "",
-    endTime: filterParams.value.dataFilter
-      ? filterParams.value.dataFilter?.endDate + " 23:59:59"
+    endTime: obj.dataFilter?.endDate
+      ? obj.dataFilter?.endDate + " 23:59:59"
       : "",
   });
 };
 
-// Task 3: 筛选处理
 const selectValue = (selected: any) => {
   if (!isMounted.value) {
     isMounted.value = true;
@@ -69,7 +67,6 @@ const selectValue = (selected: any) => {
   reloadListRef();
 };
 
-// Task 4: filter 改为 Object 格式
 const filterObj = ref({ type: "", date: "1", dataFilter: null });
 </script>
 
@@ -132,6 +129,10 @@ const filterObj = ref({ type: "", date: "1", dataFilter: null });
                 <text class="detail-value">{{ type == 2 ? item.writeOffDate : item.receiveTime }}</text>
               </view>
             </view>
+            <u--image v-if='type==1' class='write-off-icon' :src="getImageUrl('@img/me/no-write-off.png')"
+              mode="aspectFit" width="188rpx" height="150rpx"></u--image>
+            <u--image v-else class='write-off-icon' :src="getImageUrl('@img/me/writeOff.png')" mode="aspectFit"
+              width="188rpx" height="150rpx"></u--image>
           </view>
         </template>
       </LsvList>

+ 7 - 6
src/pages-C/home/sendCoupon.vue

@@ -40,15 +40,16 @@ const clear = () => {
 };
 
 const reloadListRef = (extraParams = {}) => {
+  let obj = filterParams.value;
   listRef.value.reloadList({
     templateName: templateName.value,
-    type: filterParams.value.date?.type,
-    classification: filterParams.value.type?.type,
-    startTime: filterParams.value.dataFilter
-      ? filterParams.value.dataFilter?.startDate + " 23:59:59"
+    type: obj.date?.type,
+    classification: obj.type?.type,
+    startTime: obj.dataFilter?.startDate
+      ? obj.dataFilter?.startDate + " 23:59:59"
       : "",
-    endTime: filterParams.value.dataFilter
-      ? filterParams.value.dataFilter?.endDate + " 23:59:59"
+    endTime: obj.dataFilter?.endDate
+      ? obj.dataFilter?.endDate + " 23:59:59"
       : "",
   });
 };

+ 13 - 7
src/pages-C/home/sendWriteOff.vue

@@ -56,14 +56,15 @@ onLoad(async (options) => {
 });
 
 const reloadListRef = (extraParams = {}) => {
+  const obj = filterParams.value;
   listRef.value.reloadList({
-    dayType: filterParams.value.date?.type,
-    category: filterParams.value.type?.type,
-    startTime: filterParams.value.dataFilter
-      ? filterParams.value.dataFilter?.startDate + " 23:59:59"
+    dayType: obj.date?.type,
+    category: obj.type?.type,
+    startTime: obj.dataFilter?.startDate
+      ? obj.dataFilter?.startDate + " 23:59:59"
       : "",
-    endTime: filterParams.value.dataFilter
-      ? filterParams.value.dataFilter?.endDate + " 23:59:59"
+    endTime: obj.dataFilter?.endDate
+      ? obj.dataFilter?.endDate + " 23:59:59"
       : "",
   });
 };
@@ -74,6 +75,7 @@ const selectValue = (selected: any) => {
     isMounted.value = true;
     return;
   }
+  debugger;
   filterParams.value = selected;
   reloadListRef();
 };
@@ -163,7 +165,11 @@ const filterObj = ref({ type: "", date: "1", dataFilter: null });
                 <text class="detail-value">{{ item.receiveTime || '--' }}</text>
               </view>
             </view>
-            <u--image v-if='type==1' class='write-off-icon' :src="getImageUrl('@img/me/writeOff.png')" mode="aspectFit"
+            <!-- <u--image class='write-off-icon' :src="getImageUrl('@img/me/writeOff.png')" mode="aspectFit" width="188rpx"
+              height="150rpx"></u--image> -->
+            <u--image v-if='type==1' class='write-off-icon' :src="getImageUrl('@img/me/no-write-off.png')"
+              mode="aspectFit" width="188rpx" height="150rpx"></u--image>
+            <u--image v-else class='write-off-icon' :src="getImageUrl('@img/me/no-use.png')" mode="aspectFit"
               width="188rpx" height="150rpx"></u--image>
           </view>
         </template>

+ 1 - 1
src/pages-C/income/incomeMoney.vue

@@ -61,7 +61,7 @@ const getIncomeDisplay = (data) => {
   }
 
   let result = data.couponName || "";
-  if (data.status === 2) {
+  if (data.status == 2) {
     result += " (退款)";
   }
   return result;

+ 61 - 57
src/pages-C/my/myGroup.vue

@@ -76,21 +76,13 @@ const listRef = ref();
 const handleConfirm = (value: { startDate: string; endDate: string }) => {
   defaultStart.value = value.startDate;
   defaultEnd.value = value.endDate;
-  sendIncomeData({
-    timeType: activePeriod.value,
-    startTime: defaultStart.value ? defaultStart.value + " 00:00:00" : "",
-    endTime: defaultEnd.value ? defaultEnd.value + " 23:59:59" : "",
-  });
+  sendIncomeData(paramsObj());
   reloadListRef();
 };
 
 const reloadListRef = () => {
   if (activePanel.value == 1) {
-    listRef.value?.reloadList({
-      startTime: defaultStart.value ? defaultStart.value + " 00:00:00" : "",
-      endTime: defaultEnd.value ? defaultEnd.value + " 23:59:59" : "",
-      timeType: activePeriod.value,
-    });
+    listRef.value?.reloadList(paramsObj());
   } else {
     listRef.value?.reloadList({
       inviteType: activeTabs.value,
@@ -138,11 +130,7 @@ function goDetails(item: any) {
 
 const tabClick = (item: { label: string; value: string }) => {
   activePeriod.value = item.value;
-  sendIncomeData({
-    timeType: activePeriod.value,
-    startTime: defaultStart.value ? defaultStart.value + " 00:00:00" : "",
-    endTime: defaultEnd.value ? defaultEnd.value + " 23:59:59" : "",
-  });
+  sendIncomeData(paramsObj());
   reloadListRef();
 };
 
@@ -150,13 +138,17 @@ const activePanelClick = (item: { label: string; value: number }) => {
   activePanel.value = item.value;
   reloadListRef();
   if (item.value === 1) {
-    sendAmountStatistics({
-      timeType: activePeriod.value,
-      startTime: defaultStart.value ? defaultStart.value + " 00:00:00" : "",
-      endTime: defaultEnd.value ? defaultEnd.value + " 23:59:59" : "",
-    });
+    sendAmountStatistics(paramsObj());
   }
 };
+//参数
+const paramsObj = () => {
+  return {
+    timeType: activePeriod.value,
+    startTime: defaultStart.value ? defaultStart.value + " 00:00:00" : "",
+    endTime: defaultEnd.value ? defaultEnd.value + " 23:59:59" : "",
+  };
+};
 
 const leaveClick = (item: { label: string; value: string }) => {
   activeTabs.value = item.value;
@@ -178,27 +170,31 @@ const leaveClick = (item: { label: string; value: string }) => {
         <view v-if="panelTabs.length === 2" class="panel-divider" />
       </view>
 
-      <view v-if="activePanel === 1" class="filter-box">
-        <view class="list-filter">
-          <view class="period-tabs">
-            <view v-for="item in periodTabs" :key="item.value" class="period-tab"
-              :class="{ active: activePeriod === item.value }" @tap="tabClick(item)">
-              <text>{{ item.label }}</text>
+      <view v-if="activePanel === 1" class="filter-content">
+        <view class="filter-box">
+          <view class="filter-bar">
+            <view class="filter-tabs">
+              <view v-for="item in periodTabs" :key="item.value" class="period-tab"
+                :class="{ active: activePeriod === item.value }" @tap="tabClick(item)">
+                <text>{{ item.label }}</text>
+              </view>
+            </view>
+            <view class="income-line"></view>
+            <view class="date-filter" @click='showPicker=true'>
+              <view class="date-filter-text">{{ dateRangeText }}</view>
+              <view class="caret" />
             </view>
-          </view>
-          <view class="filter-divider" />
-          <view class="date-filter" @click='showPicker=true'>
-            <text>{{ dateRangeText }}</text>
-            <view class="caret" />
           </view>
         </view>
       </view>
 
-      <view v-else class="filter-box">
-        <view class="income-filter">
-          <view v-for="item in incomeFilterTabs" :key="item.value" class="period-tab"
-            :class="{ active: activeTabs==item.value }" @tap="leaveClick(item)">
-            <text>{{ item.label }}</text>
+      <view v-else class="filter-content">
+        <view class="filter-box">
+          <view class="filter-tabs">
+            <view v-for="item in incomeFilterTabs" :key="item.value" class="period-tab"
+              :class="{ active: activeTabs==item.value }" @tap="leaveClick(item)">
+              <text>{{ item.label }}</text>
+            </view>
           </view>
         </view>
       </view>
@@ -319,29 +315,34 @@ const leaveClick = (item: { label: string; value: string }) => {
   }
 
   // 筛选区域
+  .filter-content {
+    overflow: hidden;
+    background: #ffffff;
+    padding: 0 32rpx;
+    flex: 0 0 auto;
+    border-bottom: 1rpx solid #d9d9d9;
+  }
+
   .filter-box {
     display: flex;
-    align-items: center;
     width: 100%;
     height: 92rpx;
-    padding: 0 32rpx;
-    background: #ffffff;
     box-sizing: border-box;
-    flex: 0 0 auto;
-    border-bottom: 1rpx solid #d9d9d9;
+    align-items: center;
+    overflow-x: auto;
+    white-space: nowrap;
 
-    .list-filter,
-    .income-filter {
+    .filter-bar {
       display: flex;
       align-items: center;
       width: 100%;
     }
 
-    .period-tabs,
-    .income-filter {
+    .filter-tabs {
       display: flex;
       align-items: center;
       gap: 24rpx;
+      flex-shrink: 0;
     }
 
     .period-tab {
@@ -358,6 +359,7 @@ const leaveClick = (item: { label: string; value: string }) => {
       line-height: 36rpx;
       box-sizing: border-box;
       white-space: nowrap;
+      flex-shrink: 0;
 
       &.active {
         background: #ff5365;
@@ -365,23 +367,14 @@ const leaveClick = (item: { label: string; value: string }) => {
       }
     }
 
-    .filter-divider {
+    .income-line {
       width: 1rpx;
       height: 40rpx;
-      margin: 0 39rpx 0 30rpx;
       background: #d9d9d9;
+      margin: 0 39rpx 0 30rpx;
       flex: 0 0 auto;
     }
 
-    .caret {
-      width: 0;
-      height: 0;
-      margin-left: 8rpx;
-      border-left: 7rpx solid transparent;
-      border-right: 7rpx solid transparent;
-      border-top: 9rpx solid #333333;
-    }
-
     .date-filter {
       display: flex;
       align-items: center;
@@ -389,6 +382,17 @@ const leaveClick = (item: { label: string; value: string }) => {
       font-size: 28rpx;
       line-height: 28rpx;
       white-space: nowrap;
+      flex-shrink: 0;
+    }
+
+    .caret {
+      width: 0;
+      height: 0;
+      margin-left: 8rpx;
+      flex-shrink: 0;
+      border-left: 7rpx solid transparent;
+      border-right: 7rpx solid transparent;
+      border-top: 9rpx solid #333333;
     }
   }
 
@@ -436,7 +440,7 @@ const leaveClick = (item: { label: string; value: string }) => {
         width: 1rpx;
         height: 30rpx;
         background: #d9d9d9;
-        margin-top:-15rpx;
+        margin-top: -15rpx;
       }
     }
 

+ 24 - 17
src/pages-C/my/myNewUsers.vue

@@ -12,7 +12,6 @@ definePage({
   },
 });
 
-
 const tabList = ref([
   { label: "今天", value: "1" },
   { label: "近30天", value: "2" },
@@ -72,7 +71,6 @@ const dateRangeText = computed(() => {
   return "日期筛选";
 });
 
-
 onLoad((options) => {
   totalAmount.value = options.money;
 });
@@ -94,20 +92,22 @@ onLoad((options) => {
         <text class="income-amount">{{totalAmount || 0}}</text>
       </view>
 
-      <view class="filter-box">
-        <view class="filter-bar">
-          <view class="filter-tabs">
-            <view v-for="(item, index) in tabList" :key="index" class="filter-tab"
-              :class="{ active: currentTab === item.value }" @click="handleTabClick(item.value)">
-              <text class="tab-text">{{ item.label }}</text>
+      <view class="filter-content">
+        <view class="filter-box">
+          <view class="filter-bar">
+            <view class="filter-tabs">
+              <view v-for="(item, index) in tabList" :key="index" class="filter-tab"
+                :class="{ active: currentTab === item.value }" @click="handleTabClick(item.value)">
+                <text class="tab-text">{{ item.label }}</text>
+              </view>
             </view>
           </view>
-        </view>
-        <view class="income-line"></view>
-        <view class='income-select'>
-          <view class='income-time' @click='showPicker=true'>
-            <view class='income-time-name'>{{ dateRangeText }}</view>
-            <view class="caret" />
+          <view class="income-line"></view>
+          <view class='income-select'>
+            <view class='income-time' @click='showPicker=true'>
+              <view class='income-time-name'>{{ dateRangeText }}</view>
+              <view class="caret" />
+            </view>
           </view>
         </view>
       </view>
@@ -195,15 +195,20 @@ onLoad((options) => {
       line-height: 56rpx;
     }
   }
+  .filter-content {
+    overflow: hidden;
+    background: #ffffff;
+    padding: 0 32rpx;
+     margin: 32rpx 0;
+  }
   .filter-box {
     display: flex;
     width: 100%;
     height: 92rpx;
-    background: #ffffff;
-    margin: 32rpx 0;
-    padding: 0 32rpx;
     box-sizing: border-box;
     align-items: center;
+    overflow-x: auto;
+    white-space: nowrap;
     .filter-bar {
       display: flex;
       justify-content: space-between;
@@ -248,6 +253,8 @@ onLoad((options) => {
       display: flex;
       align-items: center;
       justify-content: space-between;
+      width: 0;
+      flex: 1;
 
       .income-time-name {
         font-size: 28rpx;

+ 2 - 1
src/pages-C/my/myShare.vue

@@ -219,12 +219,13 @@ onLoad((options) => {
     overflow: hidden;
     background: #ffffff;
     padding: 0 32rpx;
+    margin: 32rpx 0;
   }
   .filter-box {
     display: flex;
     width: 100%;
     height: 92rpx;
-    margin: 32rpx 0;
+
     box-sizing: border-box;
     align-items: center;
     overflow-x: auto;

+ 25 - 16
src/pages-C/my/myWriteOff.vue

@@ -12,7 +12,6 @@ definePage({
   },
 });
 
-
 const tabList = ref([
   { label: "今天", value: "1" },
   { label: "近30天", value: "2" },
@@ -93,20 +92,22 @@ onLoad((options) => {
         <text class="income-amount">{{totalAmount || 0}}</text>
       </view>
 
-      <view class="filter-box">
-        <view class="filter-bar">
-          <view class="filter-tabs">
-            <view v-for="(item, index) in tabList" :key="index" class="filter-tab"
-              :class="{ active: currentTab === item.value }" @click="handleTabClick(item.value)">
-              <text class="tab-text">{{ item.label }}</text>
+      <view class="filter-content">
+        <view class="filter-box">
+          <view class="filter-bar">
+            <view class="filter-tabs">
+              <view v-for="(item, index) in tabList" :key="index" class="filter-tab"
+                :class="{ active: currentTab === item.value }" @click="handleTabClick(item.value)">
+                <text class="tab-text">{{ item.label }}</text>
+              </view>
             </view>
           </view>
-        </view>
-        <view class="income-line"></view>
-        <view class='income-select'>
-          <view class='income-time' @click='showPicker=true'>
-            <view class='income-time-name'>{{ dateRangeText }}</view>
-            <view class="caret" />
+          <view class="income-line"></view>
+          <view class='income-select'>
+            <view class='income-time' @click='showPicker=true'>
+              <view class='income-time-name'>{{ dateRangeText }}</view>
+              <view class="caret" />
+            </view>
           </view>
         </view>
       </view>
@@ -222,15 +223,21 @@ onLoad((options) => {
       line-height: 56rpx;
     }
   }
+  .filter-content {
+    overflow: hidden;
+    background: #ffffff;
+    padding: 0 32rpx;
+    margin: 32rpx 0;
+  }
   .filter-box {
     display: flex;
     width: 100%;
     height: 92rpx;
-    background: #ffffff;
-    margin: 32rpx 0;
-    padding: 0 32rpx;
+
     box-sizing: border-box;
     align-items: center;
+    overflow-x: auto;
+    white-space: nowrap;
     .filter-bar {
       display: flex;
       justify-content: space-between;
@@ -274,6 +281,8 @@ onLoad((options) => {
       display: flex;
       align-items: center;
       justify-content: space-between;
+      width: 0;
+      flex: 1;
 
       .income-time {
         display: flex;

+ 44 - 14
src/pages/income/income.vue

@@ -9,6 +9,8 @@ import { getImageUrl } from "@/utils/imageUtil";
 import Classification from "./classification.vue";
 import Upopup from "@/components/popup/index.vue";
 import DateRangePicker from "@/components/dateRangePicker/index.vue";
+import LsvList from "@/components/listScrollView/index.vue";
+
 import {
   usePagination,
   useRequest,
@@ -16,7 +18,7 @@ import {
 } from "alova/client";
 import { getCategoryList } from "@/api/home";
 import { queryByUserId, pageMap } from "@/api/income";
-import LsvList from "@/components/listScrollView/index.vue";
+import { getBankSignRecord } from "@/api/pay";
 
 definePage({
   style: {
@@ -39,17 +41,12 @@ const getIncomeListApi = (params: any) => {
   return pageMap({
     pageNo: params.pageNo,
     pageSize: params.pageSize,
-    // isToday:"",
-    isToday: 2,
+    isToday: 1,
     status: classItem.value.set?.value || "",
     couponClassification: classItem.value.type?.value || "",
     classification: classification.value,
-    startTime: dateValue.value
-      ? dateValue.value.split(" - ")[0] + " 00:00:00"
-      : "",
-    endTime: dateValue.value
-      ? dateValue.value.split(" - ")[1] + " 23:59:59"
-      : "",
+    startTime: dateValue.value ? dateValue.value.split(" - ")[0] : "",
+    endTime: dateValue.value ? dateValue.value.split(" - ")[1] : "",
   });
 };
 
@@ -110,7 +107,8 @@ const visibleNoticeList = computed(() => {
     {
       title: "银行卡(张)",
       content: data.bankNumber || 0,
-      page: "/pages-C/my/myWriteOff",
+      page: "",
+      isBack: true,
     },
   ];
 });
@@ -120,6 +118,10 @@ function listInfo(item) {
     uni.navigateTo({
       url: `${item.page}?money=${item.content}`,
     });
+  } else {
+    if (item.isBack) {
+      onAClick();
+    }
   }
 }
 
@@ -186,8 +188,9 @@ const defaultStart = "";
 const defaultEnd = "";
 const dateValue = ref();
 const handleConfirm = (value: { startDate: string; endDate: string }) => {
-  console.log("选中的日期范围:", value);
-  dateValue.value = `${value.startDate} - ${value.endDate}`;
+  dateValue.value = value.startDate
+    ? `${value.startDate} - ${value.endDate}`
+    : "";
   reloadListRef();
 };
 
@@ -233,6 +236,34 @@ const couponTypeMap: Record<string, string> = {
   "3": "邀请新人",
   "4": "团员核销奖励",
 };
+
+function onAClick() {
+  // 判断是否有会员进件记录
+  getBankSignRecord()
+    .then((res: any) => {
+      if (res.data.code === 200) {
+        if (!res.data.result) {
+          // 没有签约记录,跳转银行卡列表
+          uni.navigateTo({ url: "/pages-B/payment/bankCard-list" });
+        } else {
+          const { state } = res.data.result;
+          if (state === "01") {
+            // 签约成功,直接跳转银行卡列表
+            uni.navigateTo({ url: "/pages-B/payment/bankCard-list" });
+          } else {
+            // 其他状态,跳转银行卡编辑页
+            uni.navigateTo({ url: "/pages-B/payment/bankCard-edit" });
+          }
+        }
+      } else {
+        uni.$u.toast(res.data.message);
+      }
+    })
+    .catch((err: any) => {
+      console.log("接口调用失败:", err);
+      uni.$u.toast("网络异常,请稍后重试");
+    });
+}
 </script>
 
 <template>
@@ -393,9 +424,8 @@ const couponTypeMap: Record<string, string> = {
 
 <style lang="scss" scoped>
 .page-container {
-  min-height: 100vh;
+  height: calc(100vh - 100rpx);
   background-color: #f8f8fa;
-  padding-bottom: 32rpx;
   display: flex;
   flex-direction: column;
   // 顶部渐变背景

+ 3 - 5
src/pages/my/my.vue

@@ -58,8 +58,6 @@ const visibleNoticeList = computed(() => {
   ];
 });
 
-
-
 onLoad(async () => {
   // 登录后查询收益数据
   if (hasLogin.value) {
@@ -79,11 +77,11 @@ onShow(async () => {
   }
 });
 
- //我的统计
+//我的统计
 const {
   send: getMyData,
   data: dataStatistics,
-  loading:statisticsLoading ,
+  loading: statisticsLoading,
 } = useRequest(getMyDataStatistics, {
   immediate: false,
   middleware: delayLoadingMiddleware(0, 500),
@@ -258,7 +256,7 @@ function listInfo(item) {
 
 <style lang="scss" scoped>
 .page-container {
-  min-height: 100vh;
+  height: calc(100vh - 100rpx);
   background-color: #f8f8fa;
 
   // 顶部渐变背景