Browse Source

加气优惠

chenlei 1 year ago
parent
commit
dda3880ad2

+ 10 - 8
README.md

@@ -59,17 +59,19 @@
 - 15.公共请求框架支持文件上传,swagger导入接口信息识别是否是上传接口,调用接口时自动唤起选择文件窗口
 - 16.公共请求方法,支持类型修饰,深度合并两个ts对象类型 √
 - 17.全局防抖函数,支持常规等待和立即执行,目标方法哈希计算,追加防抖函数细粒度标签;已应用于页面生命周期管理中心,避免init方法重复执行;页面公共跳转方法,避免页面重复跳转。√
-- 18.开发环境,通过generateBundle钩子函数实现增量修改微信小程序的js文件,以便提高小程序ide工具的编译速度。
-- 19.全局sass变量自动引入,全局sass变量、样式表定义。
-- 20.公共请求框架,根据swagger导入接口信息支持增量导入。
+- 18.开发环境,通过generateBundle钩子函数实现增量修改微信小程序的js文件,以便提高小程序ide工具的编译速度。
+- 19.全局sass变量自动引入,全局sass变量、样式表定义。
+- 20.公共请求框架,根据swagger导入接口信息支持增量导入。
 - 21.页面方法公共初始化,对页面方法进行集中拦截、公共管控,已支持自动为对象内所有方法增加防重提功能(同步方法、异步方法执行中再次触发不执行)。√
 - 22.微信小程序环境支持websocket-stomp协议,收银员扫描驾驶员二维码创建订单后,驾驶员端自动跳转待支付页面。√
 - 23.构建项目时自动化上传体验版至小程序后台。√
 - 24.构建项目时可区分开发、测试、生成环境,编写对应的命令。√
-- 25.在页面跳转时支持页面预初始化。
+- 25.在页面跳转时支持页面预初始化。
 - 26.容器组件根据页面公共配置,自动识别支持自定义头部,呈现头部区域标题、返回按钮。√
-- 27.编写公共组件:计数器、抽屉、详情页模板、流光加载效果、浮点单位、刷新、骨架屏、吸顶。
-- 28.编写业务组件:车牌号输入、拨打电话、加气站模块。
-- 29.本地调试时,通过编写unocss插件去掉unicss默认无用样式变量,提高浏览器环境样式调试性能。
+- 27.编写公共组件:计数器、抽屉、详情页模板、流光加载效果、浮点单位、刷新、骨架屏、吸顶。
+- 28.编写业务组件:车牌号输入、拨打电话、加气站模块。
+- 29.本地调试时,通过编写unocss插件去掉unicss默认无用样式变量,提高浏览器环境样式调试性能。
 - 30.公共请求框架支持mock机制,支持划分mock场景。√
-- 31.公共请求框架兼容axios请求,为了与与mock插件适配,调试方便。√
+- 31.公共请求框架兼容axios请求,为了与mock插件适配,调试方便。√
+- 32.vite.config.js中对scss注入$uni_platform全局变量,用于在scss文件中判断运行环境。√
+- 33.uno.config.js 通过编写classNamePreContainer插件, 拦截\_\_uno.css文件,将样式名称增加.container 前缀,提高样式权重。√

+ 1 - 1
package.json

@@ -103,7 +103,7 @@
     "stompjs": "^2.3.3",
     "vant": "3.6.12",
     "vue": "3.4.30",
-    "vue-i18n": "^9.1.9",
+    "vue-i18n": "^9.14.1",
     "z-paging": "^2.7.10"
   },
   "devDependencies": {

File diff suppressed because it is too large
+ 325 - 105
pnpm-lock.yaml


+ 1 - 1
src/components/business/station/index.vue

@@ -57,7 +57,7 @@
     <div class="s-fz" v-if="props.type === '2'">
       平台价 {{ props.stationInfo.platformPrice }} 元/公斤
     </div>
-    <div class="flex mr-12 ss-fz mt-spacd2">
+    <div class="flex mr-12 ss-fz mt-spacd2" v-if="props.stationInfo.tags?.length">
       <div class="flex-wrap tag" v-for="(t, i) in props.stationInfo.tags" :key="i">{{ t }}</div>
     </div>
   </div>

+ 1 - 1
src/components/numer/index.vue

@@ -8,7 +8,7 @@
       <div v-if="props.unit">{{ props.unit }}</div>
     </template>
     <template v-else>
-      <div v-if="props.pre">{{ props.pre }}</div>
+      <div class="mr-spacd4" v-if="props.pre">{{ props.pre }}</div>
       <div v-if="func.isnull(props.value)">
         {{ func.convert.nullView(props.value) }}
       </div>

+ 10 - 0
src/pages/cards/index.vue

@@ -1,5 +1,11 @@
 <template>
   <ay-container>
+    <div class="p-color mb-spac pb-spacd2 bottom-line">
+      <div class="inline" @click="ay.goPage(config.pages.order_index)">
+        <ay-numer :value="data.driverRebateTotal" pre="已节省" unit="元" />
+        <uni-icons type="right" color="" class="p-fz" />
+      </div>
+    </div>
     <div class="flex justify-around mb-spac">
       <div
         class="card-top-item"
@@ -59,6 +65,7 @@ const data = ay.initData({
   ],
   truckInfo: {} as 司机车辆管理信息,
   truckCard: {} as 车辆购车加气优惠卡信息VO类,
+  driverRebateTotal: 0,
 })
 const methods = {
   tabClick(t) {
@@ -71,6 +78,9 @@ const methods = {
 }
 
 ay.entrance(async (args) => {
+  webapi.settle.driver_rebate_total().then((res) => {
+    data.driverRebateTotal = res
+  })
   await webapi.strategy
     .get_truck_info()
     .then((res) => {

+ 1 - 1
src/pages/index/index.vue

@@ -245,7 +245,7 @@ const data = ay.initData({
     },
     {
       id: 3,
-      name: '优惠卡/券',
+      name: '优惠省钱',
       icon: card,
     },
   ],

+ 74 - 4
src/pages/order/index.vue

@@ -8,7 +8,16 @@
           :clearIcon="false"
           @change="methods.changeDate"
         />
-        <uni-badge type="primary" :text="data.checkCount" absolute="rightTop" :offset="[-3, 3]">
+        <button
+          type="primary"
+          plain="true"
+          size="mini"
+          class="ml-spac"
+          @click="methods.showFilters"
+        >
+          筛选{{ data.checkCount ? ` · ${data.checkCount}` : '' }}
+        </button>
+        <!-- <uni-badge type="primary" :text="data.checkCount" absolute="rightTop" :offset="[-3, 3]">
           <uni-icons
             class="ml-spacd2"
             type="settings"
@@ -16,9 +25,24 @@
             size="24"
             @click="methods.showFilters"
           />
-        </uni-badge>
+        </uni-badge> -->
       </div>
     </ay-sticky>
+    <div class="center justify-between s-fz tags">
+      <div
+        class="text-center chunk tag"
+        v-for="(t, i) in data.tags"
+        :key="i"
+        :class="{ odd: i % 2 === 0 }"
+      >
+        <div>{{ t.title }}</div>
+        <div>{{ t.unit }}</div>
+        <div class="font-bold p-fz">
+          {{ func.convert.nullView(t.value, 1) }}
+          <!-- <ay-numer :value="func.convert.nullView(t.value, 1)" /> -->
+        </div>
+      </div>
+    </div>
     <div id="orderList">
       <div
         class="chunk childs-fcjb-mbd2"
@@ -36,7 +60,7 @@
         </div>
         <div>
           <div>小计(元)</div>
-          <div class="font-bold bs-fz">{{ o.allAmount }}</div>
+          <div class="font-bold bs-fz">{{ o.allAmount }}</div>
         </div>
         <div>
           <div class="gray-color">{{ func.getDate(o.createDate).format() }}</div>
@@ -102,7 +126,7 @@
           </div>
         </div>
         <div class="btns">
-          <button @click="methods.clearFilters">清</button>
+          <button @click="methods.clearFilters">清</button>
           <button type="primary" @click="methods.saveFilters">确定</button>
         </div>
       </div>
@@ -145,6 +169,32 @@ const data = ay.initData({
   ] as any[],
   range: [],
   orderList: [] as 订单详情[],
+  tags: [
+    {
+      field: 'allValue',
+      title: '加气总额',
+      unit: '(元)',
+      value: '',
+    },
+    {
+      field: 'allQty',
+      title: '加气总量',
+      unit: '(公斤)',
+      value: '',
+    },
+    {
+      field: 'count',
+      title: '订单总数',
+      unit: '(笔)',
+      value: '',
+    },
+    {
+      field: 'allPrefer',
+      title: '优惠总额',
+      unit: '(元)',
+      value: '',
+    },
+  ],
 })
 const filtersView = computed(() => {
   const rv = [...data.filters]
@@ -278,6 +328,9 @@ const methods = {
         { showLoading: !cras.isAdd },
       )
       .then((res) => {
+        data.tags.forEach((f) => {
+          f.value = res[f.field]
+        })
         if (cras.isAdd) {
           data.orderList.push(...res.page.records)
         } else {
@@ -323,4 +376,21 @@ ay.entrance((args) => {
     color: $p-color;
   }
 }
+.tags {
+  > .tag {
+    min-width: 20%;
+    max-width: 25%;
+    padding: $p-spacd2 0;
+    background-color: #d5f8e9;
+  }
+  .odd {
+    background-color: #d5e9fa;
+  }
+  // > div:nth-child(odd) {
+  //   background-color: #d5e9fa;
+  // }
+  // > div:nth-child(even) {
+  //   background-color: #d5f8e9;
+  // }
+}
 </style>

+ 9 - 9
src/pages/order/orderDetail.vue

@@ -24,7 +24,7 @@
           <div>
             <div>
               结算金额
-              <ay-numer :value="data.orderDetail.amount" pre="" unit="元" :isSimple="true" />
+              <ay-numer :value="data.orderDetail.amount" pre="" unit="元" :isSimple="true" />
             </div>
           </div>
         </div>
@@ -96,13 +96,13 @@ const data = ay.initData({
           title: '平台价',
           key: 'platformPrice',
           unit: '元/公斤',
-          preInfo: '¥',
+          // preInfo: '¥',
         },
         {
           title: '结算价',
           key: 'actualPrice',
           unit: '元/公斤',
-          preInfo: '¥',
+          // preInfo: '¥',
         },
         {
           title: '创建时间',
@@ -168,7 +168,7 @@ const data = ay.initData({
           title: '结算金额',
           key: 'amount',
           unit: '元',
-          preInfo: '¥',
+          // preInfo: '¥',
         },
       ],
     },
@@ -184,7 +184,7 @@ const data = ay.initData({
           title: '订单总金额',
           key: 'allAmount',
           unit: '元',
-          preInfo: '¥',
+          // preInfo: '¥',
         },
         {
           title: '优惠金额',
@@ -197,13 +197,13 @@ const data = ay.initData({
           title: '平台价',
           key: 'platformPrice',
           unit: '元/公斤',
-          preInfo: '¥',
+          // preInfo: '¥',
         },
         {
           title: '结算价',
           key: 'actualPrice',
           unit: '元/公斤',
-          preInfo: '¥',
+          // preInfo: '¥',
         },
       ],
     },
@@ -292,13 +292,13 @@ const data = ay.initData({
           title: '站清分额',
           key: 'serviceFee',
           unit: '元',
-          preInfo: '¥',
+          // preInfo: '¥',
         },
         {
           title: '站清分单价',
           key: 'gasstationFee',
           unit: '元/公斤',
-          preInfo: '¥',
+          // preInfo: '¥',
         },
       ],
     },

+ 1 - 1
src/pages/station/detail.vue

@@ -42,7 +42,7 @@
           <div class="lng bs-fz">LNG</div>
           <div>
             <span class="font-bold mr-spacd2 price-color bs-fz">
-              {{ data.detail.actualPrice }}
+              {{ data.detail.platformPrice }}
             </span>
             <span class="s-fz price">元/公斤</span>
           </div>

+ 7 - 6
src/style/_variables.scss

@@ -1,4 +1,5 @@
-$container: 'container';
+$container: '.container ';
+
 // 主题色
 // $p-color: #f40018;
 $p-color: #0084f4;
@@ -33,15 +34,15 @@ $green-color: #00ad65;
 $yellow-color: #b8741a;
 $bg-color: #fff;
 
-// 修改uni-ui 样式
-$uni-primary: $p-color;
-$uni-spacing-sm: 10rpx;
-$uni-spacing-base: 10rpx;
-
 %box-shadow {
     box-shadow: 0 0 1rpx 0 hsla(210, 34%, 80%, 0.4);
 }
 
+/* 颜色变量 */
+$uni-primary: $p-color;
+$uni-spacing-sm: 10rpx;
+$uni-spacing-base: 10rpx;
+
 /* 携带参数 */
 @mixin spacing($multiple) {
     width: $width;

+ 43 - 34
src/style/index.scss

@@ -2,14 +2,7 @@
 /* stylelint-disable scss/at-extend-no-missing-placeholder */
 /* stylelint-disable prettier/prettier */
 /* stylelint-disable scss/no-global-function-names */
-.test {
-  // 可以通过 @apply 多个样式封装整体样式
-  @apply mt-4 ml-4;
-
-  padding-top: 4px;
-  color: red;
-}
-
+$H5Container: if($uni_platform =='h5', $container, '');
 
 .s-fz,
 .ss-fz {
@@ -194,22 +187,22 @@ $spac-map: (
   $suffixm: if($j ==1, '', 'm' + $j);
 
   // margin $p-spac除数
-  .#{$container} .m-spac#{$suffix} {
+  #{$container}.m-spac#{$suffix} {
     margin:calc($p-spac / #{$j});
   }
 
   // margin $p-spac除数 负值
-  .#{$container} .nm-spac#{$suffix} {
+  #{$container}.nm-spac#{$suffix} {
     margin:calc($p-spac / -#{$j});
   }
 
   // padding $p-spac除数
-  .#{$container} .p-spac#{$suffix} {
+  #{$container}.p-spac#{$suffix} {
     padding:calc($p-spac / #{$j});
   }
 
   // padding $p-spac倍数
-  .#{$container} .p-spac#{$suffixm} {
+  #{$container}.p-spac#{$suffixm} {
     padding:calc($p-spac * #{$j});
   }
 
@@ -218,29 +211,29 @@ $spac-map: (
     $t: map-get($spac-map, $i);
 
     // 4方向 $p-spac除数
-    .#{$container} .#{map-get($t,0)}-spac#{ $suffix} {
+    #{$container}.#{map-get($t,0)}-spac#{ $suffix} {
       #{map-get($t,1)}: calc($p-spac / #{$j});
     }
 
     // margin 4方向 $p-spac倍数
-    .#{$container} .m#{map-get($t,0)}-spac#{ $suffixm} {
+    #{$container}.m#{map-get($t,0)}-spac#{ $suffixm} {
       margin-#{map-get($t,1)}: calc($p-spac * #{$j});
     }
 
     // margin 4方向 $p-spac除数 
     @if($j>1) {
-      .#{$container} .m#{map-get($t,0)}-spac#{ $suffix} {
+      #{$container}.m#{map-get($t,0)}-spac#{ $suffix} {
         margin-#{map-get($t,1)}: calc($p-spac / #{$j});
       }
     }
 
     // margin 4方向 $p-spac除数 负值
-    .#{$container} .nm#{map-get($t,0)}-spac#{ $suffix} {
+    #{$container}.nm#{map-get($t,0)}-spac#{ $suffix} {
       margin-#{map-get($t,1)}: calc($p-spac / -#{$j});
     }
 
     // padding 4方向 $p-spac除数
-    .#{$container} .p#{map-get($t,0)}-spac#{ $suffix} {
+    #{$container}.p#{map-get($t,0)}-spac#{ $suffix} {
       padding-#{map-get($t,1)}: calc($p-spac / #{$j});
     }
   }
@@ -290,14 +283,30 @@ $spac-map: (
 
 
 // 主按钮
-button[type=primary],
-button[type=primary]:active,
-button[type=primary]:hover,
-button[type=primary]:focus {
+#{$H5Container}button[type=primary],
+#{$H5Container}button[type=primary]:active,
+#{$H5Container}button[type=primary]:hover,
+#{$H5Container}button[type=primary]:focus {
   // margin: 0;
-  background-color: $p-color !important;
+  background-color: $p-color ;
+}
+
+#{$H5Container}button[type=primary][plain],
+#{$H5Container}button[type=primary][plain]:active,
+#{$H5Container}button[type=primary][plain]:hover,
+#{$H5Container}button[type=primary][plain]:focus {
+  color: $p-color;
+  background-color: transparent;
+  border: 1rpx solid $p-color;
+}
+
+
+
+#{$H5Container}button[size='mini'] {
+  padding: 0 $p-spacd2;
 }
 
+
 button[disabled][type=primary] {
   background-color: rgba($p-color, .6);
 }
@@ -445,21 +454,21 @@ image {
   }
 }
 
-.#{$container} .justify-between {
-  @apply justify-between;
-}
+// #{$container}.justify-between {
+//   @apply justify-between;
+// }
 
-.#{$container} .justify-start {
-  @apply justify-start;
-}
+// #{$container}.justify-start {
+//   @apply justify-start;
+// }
 
-.#{$container} .inline-block {
-  @apply inline-block;
-}
+// #{$container}.inline-block {
+//   @apply inline-block;
+// }
 
-.#{$container} .m-b-0 {
-  @apply m-b-0;
-}
+// #{$container}.m-b-0 {
+//   @apply m-b-0;
+// }
 
 // #region 穿透到组件内样式,以pass-com 开头
 .pass-com-rotater {

+ 2 - 0
src/types/schemas/strategy.d.ts

@@ -4530,6 +4530,8 @@ interface 待支付订单_可选支付方式个人支付实体类 {
   payType?: number
   /** 优惠明细 */
   rebateDetail?: 待支付订单_可选支付方式优惠明细实体类[]
+  /** 微信支付金额 */
+  wxAmount?: number
 }
 interface 待支付订单_可选支付方式优惠明细实体类 {
   /** 优惠金额 */

+ 2 - 2
src/uni.scss

@@ -16,7 +16,7 @@
 /* 颜色变量 */
 
 /* 行为相关颜色 */
-$uni-color-primary: #007aff;
+$uni-color-primary: #0084f4;
 $uni-color-success: #4cd964;
 $uni-color-warning: #f0ad4e;
 $uni-color-error: #dd524d;
@@ -74,4 +74,4 @@ $uni-font-size-title: 20px;
 $uni-color-subtitle: #555; // 二级标题颜色
 $uni-font-size-subtitle: 18px;
 $uni-color-paragraph: #3f536e; // 文章段落颜色
-$uni-font-size-paragraph: 15px;
+$uni-font-size-paragraph: 15px;

+ 2 - 2
src/utils/config/interFaces/allinpay.ts

@@ -341,11 +341,11 @@ export default {
 
     resType: {} as ResponseEntity,
   },
-  /**  B2B充值回调 */
+  /** 微信充值通联单边账处理 */
   recharge: {
     realUrl: '/allinpay/pay/callback/recharge' as const,
 
-
+    resType: {} as boolean,
   },
   /** 分账退款申请回调 */
   splitRefund_1: {

+ 9 - 9
src/utils/config/interFaces/index.ts

@@ -1,30 +1,30 @@
 import websocket from './websocket'
+import settle from './settle'
 import tms from './tms'
+import account from './account'
 import message from './message'
 import user from './user'
-import allinpay from './allinpay'
-import account from './account'
-import settle from './settle'
 import pay from './pay'
+import allinpay from './allinpay'
 import strategy from './strategy'
 
 export default {
   /** websocket打印中心 */
   websocket,
+  /** 结算中心 */
+  settle,
   /** 运力中心 */
   tms,
+  /** 账户中心 */
+  account,
   /** 消息中心 */
   message,
   /** 用户中心 */
   user,
-  /** 通联支付 */
-  allinpay,
-  /** 账户中心 */
-  account,
-  /** 结算中心 */
-  settle,
   /** 支付中心 */
   pay,
+  /** 通联支付 */
+  allinpay,
   /** 运营策略中心 */
   strategy,
 }

+ 1 - 1
src/utils/config/pages.ts

@@ -137,7 +137,7 @@ export default {
   cards_index: {
     _url: '/pages/cards/index',
     _type: 'page',
-    title: '优惠卡/券',
+    title: '优惠省钱',
     identity: true,
     isPager: false
   } as ayPage,

+ 8 - 2
src/utils/func/convert.ts

@@ -1,3 +1,9 @@
+const maps = {
+  nullView: {
+    0: '--',
+    1: '0',
+  },
+}
 const convert = {
   transformFromBaiduToGCJ(latitude, longitude) {
     const xPi = (3.14159265358979323846264338327950288 * 3000.0) / 180.0
@@ -14,8 +20,8 @@ const convert = {
   mobileDes(mobile) {
     return mobile && mobile.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')
   },
-  nullView(data) {
-    const rv = !data && data !== 0 ? '--' : data
+  nullView(data, type = 0) {
+    const rv = !data && data !== 0 ? maps.nullView[type] : data
     return rv
   },
   getOrderStatusStr(settleStatus) {

+ 15 - 0
uno.config.ts

@@ -53,6 +53,20 @@ function optimization(): SourceCodeTransformer {
     },
   }
 }
+/** __uno.css中的样式名称增加.container 前缀,提高样式权重 */
+function classNamePreContainer(): SourceCodeTransformer {
+  return {
+    name: 'classNamePreContainer',
+    enforce: 'pre', // enforce before other transformers
+    idFilter(id) {
+      // __uno.css
+      return id.includes('__uno.css')
+    },
+    async transform(code, id, { uno }) {
+      code.replace(/(\.(?:(?!container).+))\{/g, '.container $1{')
+    },
+  }
+}
 export default defineConfig({
   presets: [
     ...presets,
@@ -79,6 +93,7 @@ export default defineConfig({
    */
   shortcuts: [['center', 'flex justify-center items-center']],
   transformers: [
+    classNamePreContainer(),
     optimization(),
     // 启用 @apply 功能
     transformerDirectives(),

+ 2 - 1
vite.config.ts

@@ -140,7 +140,8 @@ export default ({ command, mode }) => {
     css: {
       preprocessorOptions: {
         scss: {
-          additionalData: `@import '/src/style/variables.scss';`,
+          additionalData: `@import '/src/style/variables.scss';
+          $uni_platform: '${UNI_PLATFORM}';`,
         },
       },
       postcss: {