li.shaoyi vor 3 Jahren
Ursprung
Commit
2cc8ce86bb
39 geänderte Dateien mit 390 neuen und 249 gelöschten Zeilen
  1. 11 0
      package-lock.json
  2. 1 0
      package.json
  3. 2 2
      public/config/appconfig.json
  4. 4 3
      src/business/bank/index.ts
  5. 4 3
      src/business/credit/index.ts
  6. 3 0
      src/hooks/datatable/index.ts
  7. 0 0
      src/packages/mobile/assets/iconfont/iconfont.js
  8. 0 0
      src/packages/mobile/assets/themes/dark/dark.less
  9. 0 0
      src/packages/mobile/assets/themes/default/default.less
  10. 74 0
      src/packages/mobile/assets/themes/global/global.less
  11. 0 0
      src/packages/mobile/assets/themes/light/light.less
  12. 4 61
      src/packages/mobile/assets/themes/style.less
  13. 36 28
      src/packages/mobile/components/base/pull-refresh/index.vue
  14. 8 0
      src/packages/mobile/components/base/qrcode/index.less
  15. 48 0
      src/packages/mobile/components/base/qrcode/index.vue
  16. 1 1
      src/packages/mobile/components/layouts/view/index.less
  17. 1 1
      src/packages/mobile/components/layouts/view/index.vue
  18. 29 1
      src/packages/mobile/router/index.ts
  19. 35 0
      src/packages/mobile/views/account/certification/index.vue
  20. 12 12
      src/packages/mobile/views/bank/statement/index.vue
  21. 1 1
      src/packages/mobile/views/boot/index.vue
  22. 4 1
      src/packages/mobile/views/credit/signin/index.vue
  23. 12 12
      src/packages/mobile/views/credit/statement/index.vue
  24. 12 36
      src/packages/mobile/views/home/components/main/index.less
  25. 44 37
      src/packages/mobile/views/home/components/main/index.vue
  26. 0 0
      src/packages/mobile/views/market/details/index.less
  27. 1 1
      src/packages/mobile/views/market/details/index.vue
  28. 1 1
      src/packages/mobile/views/market/main/index.vue
  29. 4 1
      src/packages/mobile/views/mine/generalize/index.vue
  30. 17 0
      src/packages/mobile/views/news/details/index.vue
  31. 3 3
      src/packages/mobile/views/setting/password/index.vue
  32. 0 13
      src/packages/mobile/views/user/forget/index.less
  33. 4 8
      src/packages/mobile/views/user/forget/index.vue
  34. 0 4
      src/packages/mobile/views/user/logoff/index.less
  35. 2 2
      src/packages/mobile/views/user/logoff/index.vue
  36. 1 11
      src/packages/mobile/views/user/register/index.less
  37. 8 4
      src/packages/mobile/views/user/register/index.vue
  38. 1 1
      src/packages/pc/assets/themes/default/variable.less
  39. 2 1
      src/shims-vue.d.ts

+ 11 - 0
package-lock.json

@@ -18,6 +18,7 @@
         "long": "^5.2.0",
         "moment": "^2.29.3",
         "protobufjs": "^6.11.2",
+        "qrcodejs2": "^0.0.2",
         "sortablejs": "^1.15.0",
         "uuid": "^8.3.2",
         "vant": "^3.4.8",
@@ -10002,6 +10003,11 @@
         "node": ">=6"
       }
     },
+    "node_modules/qrcodejs2": {
+      "version": "0.0.2",
+      "resolved": "https://registry.npmjs.org/qrcodejs2/-/qrcodejs2-0.0.2.tgz",
+      "integrity": "sha512-+Y4HA+cb6qUzdgvI3KML8GYpMFwB24dFwzMkS/yXq6hwtUGNUnZQdUnksrV1XGMc2mid5ROw5SAuY9XhI3ValA=="
+    },
     "node_modules/qs": {
       "version": "6.9.7",
       "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz",
@@ -20058,6 +20064,11 @@
       "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
       "dev": true
     },
+    "qrcodejs2": {
+      "version": "0.0.2",
+      "resolved": "https://registry.npmjs.org/qrcodejs2/-/qrcodejs2-0.0.2.tgz",
+      "integrity": "sha512-+Y4HA+cb6qUzdgvI3KML8GYpMFwB24dFwzMkS/yXq6hwtUGNUnZQdUnksrV1XGMc2mid5ROw5SAuY9XhI3ValA=="
+    },
     "qs": {
       "version": "6.9.7",
       "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz",

+ 1 - 0
package.json

@@ -20,6 +20,7 @@
     "long": "^5.2.0",
     "moment": "^2.29.3",
     "protobufjs": "^6.11.2",
+    "qrcodejs2": "^0.0.2",
     "sortablejs": "^1.15.0",
     "uuid": "^8.3.2",
     "vant": "^3.4.8",

+ 2 - 2
public/config/appconfig.json

@@ -1,5 +1,5 @@
 {
-  "version": "1.0.1",
-  "versionCode": "100001",
+  "version": "1.0.2",
+  "versionCode": "100002",
   "apiUrl": "http://218.17.158.45:16021/cfg?key=test_thj"
 }

+ 4 - 3
src/business/bank/index.ts

@@ -6,15 +6,15 @@ import { queryHisAmountLog } from '@/services/api/bank'
 // 资金流水列表
 export function useBankStatementList() {
     const { getFirstAccountId } = useLoginStore()
-    const { dataList, total, pageIndex, pageSize } = useDataTable<Model.HisAmountLogRsp>()
+    const { dataList, total, pageIndex, pageSize, pageCount } = useDataTable<Model.HisAmountLogRsp>()
     const loading = shallowRef(false)
 
     const getBankStatementList = () => {
         loading.value = true
         return queryHisAmountLog({
             data: {
-                // page: pageIndex.value,
-                // pagesize: pageSize.value,
+                page: pageIndex.value,
+                pagesize: pageSize.value,
                 accountID: getFirstAccountId().toString(),
             },
             success: (res) => {
@@ -33,6 +33,7 @@ export function useBankStatementList() {
         total,
         pageIndex,
         pageSize,
+        pageCount,
         getBankStatementList,
     }
 }

+ 4 - 3
src/business/credit/index.ts

@@ -6,15 +6,15 @@ import { queryUserScoreLog } from '@/services/api/credit'
 // 积分流水列表
 export function useCreditStatementList() {
     const { getUserId } = useLoginStore()
-    const { dataList, total, pageIndex, pageSize } = useDataTable<Model.UserScoreLogRsp>()
+    const { dataList, total, pageIndex, pageSize, pageCount } = useDataTable<Model.UserScoreLogRsp>()
     const loading = shallowRef(false)
 
     const getCreditStatementList = () => {
         loading.value = true
         return queryUserScoreLog({
             data: {
-                // page: pageIndex.value,
-                // pagesize: pageSize.value,
+                page: pageIndex.value,
+                pagesize: pageSize.value,
                 userid: getUserId(),
             },
             success: (res) => {
@@ -33,6 +33,7 @@ export function useCreditStatementList() {
         total,
         pageIndex,
         pageSize,
+        pageCount,
         getCreditStatementList,
     }
 }

+ 3 - 0
src/hooks/datatable/index.ts

@@ -10,6 +10,8 @@ export function useDataTable<T>(options: DataTableOptions = {}) {
     const pageSize = shallowRef(options.pageSize ?? 20)
     // 当前页码
     const pageIndex = shallowRef(options.pageIndex ?? 1)
+    // 总页数
+    const pageCount = computed(() => Math.ceil(total.value / pageSize.value) || 1)
     // 过滤筛选值
     const filters = shallowRef<FilterValue<T>[]>([])
     // 过滤选项
@@ -130,6 +132,7 @@ export function useDataTable<T>(options: DataTableOptions = {}) {
         total,
         pageIndex,
         pageSize,
+        pageCount,
         filterMethod,
         getQueryParam,
         ...toRefs(filterOptons),

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
src/packages/mobile/assets/iconfont/iconfont.js


+ 0 - 0
src/packages/mobile/assets/themes/dark/variable.less → src/packages/mobile/assets/themes/dark/dark.less


+ 0 - 0
src/packages/mobile/assets/themes/default/variable.less → src/packages/mobile/assets/themes/default/default.less


+ 74 - 0
src/packages/mobile/assets/themes/global/global.less

@@ -0,0 +1,74 @@
+[class*='g-image'] {
+    position  : relative;
+    object-fit: cover;
+    overflow  : hidden;
+
+    &:before {
+        content        : '';
+        position       : absolute;
+        left           : 0;
+        top            : 0;
+        width          : 100%;
+        height         : 100%;
+        background     : #fff url("~@mobile/assets/images/avatar.png") no-repeat center;
+        background-size: cover;
+    }
+}
+
+.g-form {
+    &__container {
+        display       : flex;
+        flex-direction: column;
+        gap           : .24rem;
+        padding       : .32rem 0;
+    }
+
+    &__footer {
+        display    : flex;
+        align-items: center;
+        gap        : .2rem;
+        padding    : .2rem .32rem;
+    }
+}
+
+.g-flex {
+    display       : flex;
+    flex-direction: column;
+    height        : 100%;
+
+    &--row {
+        flex-direction: row;
+    }
+
+    &__body {
+        flex                      : 1;
+        overflow-y                : auto;
+        -webkit-overflow-scrolling: touch;
+    }
+
+    &__footer {
+        margin-top: auto;
+    }
+}
+
+.g-color {
+    &--up {
+        color: var(--color-up);
+    }
+
+    &--down {
+        color: var(--color-down);
+    }
+}
+
+/* 导航列表 */
+.g-navmenu {
+    .app-iconfont {
+        height: 100%;
+
+        &__icon {
+            font-size   : .32rem;
+            margin-right: .24rem;
+        }
+    }
+}

+ 0 - 0
src/packages/mobile/assets/themes/light/variable.less → src/packages/mobile/assets/themes/light/light.less


+ 4 - 61
src/packages/mobile/assets/themes/style.less

@@ -1,62 +1,5 @@
 @import './base/reset.less';
-@import './default/variable.less';
-@import './light/variable.less';
-@import './dark/variable.less';
-
-[class*='g-image'] {
-    position  : relative;
-    object-fit: cover;
-    overflow  : hidden;
-
-    &:before {
-        content        : '';
-        position       : absolute;
-        left           : 0;
-        top            : 0;
-        width          : 100%;
-        height         : 100%;
-        background     : #fff url("~@mobile/assets/images/avatar.png") no-repeat center;
-        background-size: cover;
-    }
-}
-
-.g-flex {
-    display       : flex;
-    flex-direction: column;
-    height        : 100%;
-
-    &--row {
-        flex-direction: row;
-    }
-
-    &__body {
-        flex                      : 1;
-        overflow-y                : auto;
-        -webkit-overflow-scrolling: touch;
-    }
-
-    &__footer {
-        margin-top: auto;
-    }
-}
-
-.g-color {
-    &--up {
-        color: var(--color-up);
-    }
-
-    &--down {
-        color: var(--color-down);
-    }
-}
-
-.g-navmenu {
-    .app-iconfont {
-        height: 100%;
-
-        &__icon {
-            font-size   : .32rem;
-            margin-right: .24rem;
-        }
-    }
-}
+@import './global/global.less';
+@import './default/default.less';
+@import './light/light.less';
+@import './dark/dark.less';

+ 36 - 28
src/packages/mobile/components/base/pull-refresh/index.vue

@@ -2,7 +2,7 @@
     <PullRefresh class="app-pull-refresh" v-model="refreshing" @refresh="onRefresh">
         <slot name="header"></slot>
         <List v-model:loading="loading" :finished="finished" :finished-text="finishedText" @load="onLoad">
-            <template v-for="(item, index) in tableSource" :key="index">
+            <template v-for="(item, index) in dataList" :key="index">
                 <slot :item="item" :index="index"></slot>
             </template>
         </List>
@@ -11,18 +11,21 @@
 </template>
 
 <script lang="ts" setup>
-import { shallowRef, computed, PropType } from 'vue'
+import { shallowRef } from 'vue'
 import { List, PullRefresh } from 'vant'
 
 const props = defineProps({
-    total: {
+    updateList: {
+        type: Array,
+        required: true
+    },
+    pageIndex: {
         type: Number,
-        default: 0,
+        default: 1,
     },
-    dataList: {
-        // eslint-disable-next-line
-        type: Array as PropType<any>,
-        required: true
+    pageCount: {
+        type: Number,
+        default: 1,
     },
     finishedText: {
         type: String,
@@ -30,35 +33,40 @@ const props = defineProps({
     }
 })
 
-const emit = defineEmits(['update:loading', 'update:dataList', 'refresh'])
-const refreshing = shallowRef(false) // 是否处于加载状态
+const emit = defineEmits(['update:pageIndex', 'refresh', 'updated'])
+const refreshing = shallowRef(false) // 是否处于下拉加载状态
 const finished = shallowRef(false) // 是否已加载完成所有数据
 const loading = shallowRef(false)
-
-const tableSource = computed({
-    get: () => props.dataList,
-    set: (val) => {
-        emit('update:dataList', val)
-    }
-})
+// eslint-disable-next-line
+const dataList = shallowRef<any[]>([])
 
 // 上拉加载
 const onLoad = () => {
-    const resolve = (data?: unknown[]) => {
-        const list = tableSource.value
+    let pageIndex = props.pageIndex
+    if (refreshing.value) {
+        pageIndex = 1
+        emit('update:pageIndex', pageIndex)
+    }
+
+    const callback = () => {
         if (refreshing.value) {
-            list.length = 0
+            dataList.value = []
             refreshing.value = false
         }
-        if (data) {
-            list.push(...data)
-        }
-        if (list.length >= props.total) {
-            finished.value = true
-        }
-        tableSource.value = list
+        pageIndex++
+        dataList.value.push(...props.updateList)
+        loading.value = false
+
+        emit('update:pageIndex', pageIndex)
+        emit('updated', dataList.value)
+    }
+
+    if (pageIndex <= props.pageCount) {
+        emit('refresh', callback)
+    } else {
+        refreshing.value = false
+        finished.value = true
     }
-    emit('refresh', resolve)
 }
 
 // 下拉刷新

+ 8 - 0
src/packages/mobile/components/base/qrcode/index.less

@@ -0,0 +1,8 @@
+.app-qrcode {
+    &__container {
+        display        : flex;
+        justify-content: center;
+        align-items    : center;
+        padding        : .32rem;
+    }
+}

+ 48 - 0
src/packages/mobile/components/base/qrcode/index.vue

@@ -0,0 +1,48 @@
+<template>
+    <van-dialog class="app-qrcode" v-model:show="showDialog" confirm-button-text="取消">
+        <div class="app-qrcode__container" ref="qrcodeRef" />
+    </van-dialog>
+</template>
+
+<script lang="ts" setup>
+import { shallowRef, computed, watch, nextTick } from 'vue'
+import { Dialog } from 'vant'
+import QRCode from 'qrcodejs2'
+
+const props = defineProps({
+    show: {
+        type: Boolean,
+        default: false
+    },
+    content: String
+})
+
+const VanDialog = Dialog.Component
+const emit = defineEmits(['update:show'])
+const qrcodeRef = shallowRef<HTMLDivElement>()
+
+const showDialog = computed({
+    get: () => props.show,
+    set: (val) => emit('update:show', val)
+})
+
+watch(showDialog, (status) => {
+    if (status) {
+        nextTick(() => {
+            const el = qrcodeRef.value
+            if (el) {
+                el.innerHTML = ''
+                new QRCode(el, {
+                    width: 180,
+                    height: 180,
+                    text: props.content
+                })
+            }
+        })
+    }
+})
+</script>
+
+<style lang="less">
+@import './index.less';
+</style>

+ 1 - 1
src/packages/mobile/components/layouts/view/index.less

@@ -4,7 +4,7 @@
     height                    : 100%;
     -webkit-overflow-scrolling: touch;
 
-    &__wrapper {
+    &__body {
         flex      : 1;
         overflow-y: auto;
     }

+ 1 - 1
src/packages/mobile/components/layouts/view/index.vue

@@ -1,7 +1,7 @@
 <template>
     <div class="app-view">
         <slot name="header"></slot>
-        <app-scroll-view class="app-view__wrapper">
+        <app-scroll-view class="app-view__body">
             <slot></slot>
         </app-scroll-view>
         <slot name="footer"></slot>

+ 29 - 1
src/packages/mobile/router/index.ts

@@ -88,6 +88,34 @@ const routes: Array<RouteRecordRaw> = [
     ]
   },
   {
+    path: '/account',
+    component: Page,
+    children: [
+      {
+        path: 'certification',
+        name: 'account-certification',
+        component: () => import('../views/account/certification/index.vue'),
+        meta: {
+          ignoreAuth: true,
+        },
+      }
+    ]
+  },
+  {
+    path: '/news',
+    component: Page,
+    children: [
+      {
+        path: 'details',
+        name: 'news-details',
+        component: () => import('../views/news/details/index.vue'),
+        meta: {
+          ignoreAuth: true,
+        },
+      }
+    ]
+  },
+  {
     path: '/market',
     component: Page,
     children: [
@@ -99,7 +127,7 @@ const routes: Array<RouteRecordRaw> = [
       {
         path: 'detail',
         name: 'market-detail',
-        component: () => import('../views/market/detail/index.vue'),
+        component: () => import('../views/market/details/index.vue'),
       }
     ]
   },

+ 35 - 0
src/packages/mobile/views/account/certification/index.vue

@@ -0,0 +1,35 @@
+<template>
+    <app-view class="g-form account-certification">
+        <template #header>
+            <app-navbar title="实名认证" />
+        </template>
+        <Form ref="formRef" class="g-form__container" @submit="formSubmit">
+            <CellGroup inset>
+                <Field v-model="formData.mobilephone" name="mobilephone" label="姓名" placeholder="必填"
+                    :rules="formRules.mobilephone" />
+                <Field v-model="formData.vcode" name="vcode" label="证件类型" placeholder="必填" :rules="formRules.vcode"
+                    is-link readonly />
+                <Field v-model="formData.loginpwd" name="loginpwd" label="证件号码" placeholder="必填"
+                    :rules="formRules.loginpwd" />
+                <Field v-model="formData.refernum" name="refernum" label="证件照片" placeholder="必填"
+                    :rules="formRules.refernum">
+                    <template #input>
+                        <Uploader v-model="value" />
+                    </template>
+                </Field>
+            </CellGroup>
+        </Form>
+        <template #footer>
+            <div class="g-form__footer">
+                <Button type="primary" @click="formRef?.submit" round block>提交审核</Button>
+            </div>
+        </template>
+    </app-view>
+</template>
+
+<script lang="ts" setup>
+import { reactive, shallowRef } from 'vue'
+import { CellGroup, Button, Field, Form, FormInstance, Uploader, Toast, FieldRule, ActionSheet, ActionSheetAction } from 'vant'
+
+const formRef = shallowRef<FormInstance>()
+</script>

+ 12 - 12
src/packages/mobile/views/bank/statement/index.vue

@@ -4,10 +4,10 @@
             <app-navbar title="资金流水">
             </app-navbar>
         </template>
-        <app-pull-refresh class="credit-statement__container" v-model:dataList="tableList" :total="total"
-            @refresh="onRefresh">
+        <app-pull-refresh class="credit-statement__container" v-model:pageIndex="pageIndex" :page-count="pageCount"
+            :updateList="dataList" @refresh="onRefresh" @updated="onUpdated">
             <template #header>
-                <ul class="list list-row" v-if="tableList.length">
+                <ul class="list list-row" v-if="showHeader">
                     <li class="list-column">
                         <span>时间</span>
                     </li>
@@ -34,21 +34,21 @@
 </template>
 
 <script lang="ts" setup>
-import { reactive } from 'vue'
+import { shallowRef } from 'vue'
 import { formatDate } from '@/filters'
 import { getAccountBusinessCodeName } from '@/constants/bank'
 import { useBankStatementList } from '@/business/bank'
 import AppPullRefresh from '@mobile/components/base/pull-refresh/index.vue'
 
-const { dataList, total, getBankStatementList } = useBankStatementList()
-const tableList = reactive<Model.HisAmountLogRsp[]>([])
+const { dataList, pageIndex, pageCount, getBankStatementList } = useBankStatementList()
+const showHeader = shallowRef(false)
 
-const onRefresh = (resolve: (data: Model.HisAmountLogRsp[]) => void) => {
-    getBankStatementList().then(() => {
-        resolve(dataList.value)
-    }).catch(() => {
-        resolve([])
-    })
+const onRefresh = (callback: () => void) => {
+    getBankStatementList().then(() => callback())
+}
+
+const onUpdated = (data: Model.UserScoreLogRsp[]) => {
+    showHeader.value = data.length > 0
 }
 </script>
 

+ 1 - 1
src/packages/mobile/views/boot/index.vue

@@ -26,7 +26,7 @@ import plus from '@/utils/h5plus'
 
 const route = useRoute()
 const router = useRouter()
-const countdown = 2  // 倒计时秒数
+const countdown = 1  // 倒计时秒数
 
 const state = reactive({
   loading: true,

+ 4 - 1
src/packages/mobile/views/credit/signin/index.vue

@@ -19,7 +19,7 @@
                             <app-iconfont icon="icon-qiandao" label-direction="bottom">签到</app-iconfont>
                         </li>
                         <li>
-                            <app-iconfont icon="icon-jifenchoujiang" label-direction="bottom">积分抽奖</app-iconfont>
+                            <app-iconfont icon="icon-jifenchoujiang" label-direction="bottom">积分红包</app-iconfont>
                         </li>
                         <li>
                             <app-iconfont icon="icon-jifenliushui" label-direction="bottom"
@@ -37,6 +37,9 @@
                         <app-iconfont class="icon-title" icon="icon-meiriqiandao">每日签到</app-iconfont>
                         <app-iconfont class="icon-score" icon="icon-jifenyue">+20</app-iconfont>
                     </div>
+                    <!-- <div class="list-item__button">
+                        <Button type="primary" v-if="userAccount.issigned" round>已完成</Button>
+                    </div> -->
                 </dd>
                 <dd class="list-item">
                     <div class="list-item__title">

+ 12 - 12
src/packages/mobile/views/credit/statement/index.vue

@@ -4,10 +4,10 @@
             <app-navbar title="积分流水">
             </app-navbar>
         </template>
-        <app-pull-refresh class="credit-statement__container" v-model:dataList="tableList" :total="total"
-            @refresh="onRefresh">
+        <app-pull-refresh class="credit-statement__container" v-model:pageIndex="pageIndex" :page-count="pageCount"
+            :updateList="dataList" @refresh="onRefresh" @updated="onUpdated">
             <template #header>
-                <ul class="list list-row" v-if="tableList.length">
+                <ul class="list list-row" v-if="showHeader">
                     <li class="list-column">
                         <span>时间</span>
                     </li>
@@ -34,21 +34,21 @@
 </template>
 
 <script lang="ts" setup>
-import { reactive } from 'vue'
+import { shallowRef } from 'vue'
 import { formatDate } from '@/filters'
 import { getScoreConfigTypeName } from '@/constants/credit'
 import { useCreditStatementList } from '@/business/credit'
 import AppPullRefresh from '@mobile/components/base/pull-refresh/index.vue'
 
-const { dataList, total, getCreditStatementList } = useCreditStatementList()
-const tableList = reactive<Model.UserScoreLogRsp[]>([])
+const { dataList, pageIndex, pageCount, getCreditStatementList } = useCreditStatementList()
+const showHeader = shallowRef(false)
 
-const onRefresh = (resolve: (data: Model.UserScoreLogRsp[]) => void) => {
-    getCreditStatementList().then(() => {
-        resolve(dataList.value)
-    }).catch(() => {
-        resolve([])
-    })
+const onRefresh = (callback: () => void) => {
+    getCreditStatementList().then(() => callback())
+}
+
+const onUpdated = (data: Model.UserScoreLogRsp[]) => {
+    showHeader.value = data.length > 0
 }
 </script>
 

+ 12 - 36
src/packages/mobile/views/home/components/main/index.less

@@ -12,12 +12,10 @@
     }
 
     &__banner {
-        min-height      : 3rem;
         background-color: #999;
 
         .van-swipe {
             &-item {
-                height   : 3rem;
                 font-size: 0;
 
                 img {
@@ -31,44 +29,22 @@
 
     &__iconbar {
         background-color: #fff;
-        margin-bottom   : .2rem;
+        padding-bottom  : .24rem;
 
-        .van-swipe {
-            &__indicators {
-                position       : static;
-                transform      : none;
-                justify-content: center;
-                padding-bottom : .24rem;
-            }
+        ul {
+            display        : flex;
+            justify-content: space-around;
+            padding-top    : .24rem;
+        }
 
-            &__indicator {
-                background-color: #ccc;
+        .app-iconfont {
+            &__icon {
+                font-size: .72rem;
             }
 
-            &-item {
-                ul {
-                    display  : flex;
-                    flex-wrap: wrap;
-                    padding  : .24rem;
-
-                    li {
-                        flex          : 1;
-                        display       : flex;
-                        flex-direction: column;
-                        align-items   : center;
-
-                        .app-iconfont {
-                            &__icon {
-                                font-size: .72rem;
-                            }
-
-                            &__label {
-                                font-size : .24rem;
-                                margin-top: .12rem;
-                            }
-                        }
-                    }
-                }
+            &__label {
+                font-size : .24rem;
+                margin-top: .08rem;
             }
         }
     }

+ 44 - 37
src/packages/mobile/views/home/components/main/index.vue

@@ -4,45 +4,42 @@
       <app-navbar title="铁合金掌上行" :show-back-button="false" />
     </template>
     <div class="home-main__banner">
-      <Swipe :autoplay="3000" indicator-color="white" lazy-render>
-        <SwipeItem v-for="(item, index) in bannerList" :key="index">
+      <Swipe :autoplay="3000" indicator-color="white" lazy-render style="min-height:3rem">
+        <SwipeItem v-for="(item, index) in topBanners" :key="index" style="height:3rem">
           <img :src="getImageUrl(item.imagepath)" />
         </SwipeItem>
       </Swipe>
     </div>
     <PullRefresh class="home-main__container" v-model="refreshing" @refresh="onRefresh">
       <div class="home-main__iconbar">
-        <Swipe>
-          <SwipeItem>
-            <ul>
-              <!-- <li>
-                <app-iconfont icon="icon-chanpinjieshao" label-direction="bottom">产品介绍</app-iconfont>
-              </li>
-              <li>
-                <app-iconfont icon="icon-chanpinjiage" label-direction="bottom">产品价格</app-iconfont>
-              </li> -->
-              <li @click="routerTo('rules-ptgz')">
-                <app-iconfont icon="icon-pingtaiguize" label-direction="bottom">平台规则</app-iconfont>
-              </li>
-              <li @click="routerTo('credit-signin')">
-                <app-iconfont icon="icon-woderenwu" label-direction="bottom">我的任务</app-iconfont>
-              </li>
-              <li @click="routerTo('rules-myrz')">
-                <app-iconfont icon="icon-maoyirongzi" label-direction="bottom">贸易融资</app-iconfont>
-              </li>
-              <li @click="routerTo('rules-ccwl')">
-                <app-iconfont icon="icon-wuliucangchu" label-direction="bottom">仓储物流</app-iconfont>
-              </li>
-            </ul>
+        <ul>
+          <li>
+            <app-iconfont icon="icon-chanpinjieshao" label-direction="bottom">产品介绍</app-iconfont>
+          </li>
+          <li>
+            <app-iconfont icon="icon-chanpinjiage" label-direction="bottom">产品价格</app-iconfont>
+          </li>
+          <li @click="routerTo('rules-ptgz')">
+            <app-iconfont icon="icon-pingtaiguize" label-direction="bottom">平台规则</app-iconfont>
+          </li>
+        </ul>
+        <ul>
+          <li @click="routerTo('credit-signin')">
+            <app-iconfont icon="icon-woderenwu" label-direction="bottom">我的任务</app-iconfont>
+          </li>
+          <li @click="routerTo('rules-myrz')">
+            <app-iconfont icon="icon-a-bianzu17" label-direction="bottom">贸易融资</app-iconfont>
+          </li>
+          <li @click="routerTo('rules-ccwl')">
+            <app-iconfont icon="icon-a-bianzu12" label-direction="bottom">仓储物流</app-iconfont>
+          </li>
+        </ul>
+      </div>
+      <div class="home-main__banner">
+        <Swipe :autoplay="3000" indicator-color="white" lazy-render style="min-height:1.5rem">
+          <SwipeItem v-for="(item, index) in bodyBanners" :key="index" style="height:1.5rem">
+            <img :src="getImageUrl(item.imagepath)" />
           </SwipeItem>
-          <!-- <SwipeItem>
-            <ul>
-              <li @click="routerTo('rules-ccwl')">
-                <app-iconfont icon="icon-wuliucangchu" label-direction="bottom">仓储物流</app-iconfont>
-              </li>
-              <li v-for="i in 4" :key="i"></li>
-            </ul>
-          </SwipeItem> -->
         </Swipe>
       </div>
       <!-- <div class="home-main__market">
@@ -64,12 +61,12 @@
         </div>
       </div> -->
       <div class="home-main__news">
-        <Cell class="titlebar" title-class="titlebar-title" value-class="titlebar-more" title="市场资讯" value="更多资讯"
-          is-link />
+        <Cell class="titlebar" title-class="titlebar-title" value-class="titlebar-more" title="市场资讯" />
         <CellGroup class="article">
           <template v-for="(item, index) in newsList" :key="index">
             <Cell class="article-item" title-class="article-item__title" value-class="article-item__time"
-              :title="item.title" :value="formatDate(item.creaedate, 'MM/DD')" />
+              :title="item.title" :value="formatDate(item.creaedate, 'MM/DD')"
+              @click="routerTo('news-details', { details: JSON.stringify(item) })" />
           </template>
         </CellGroup>
       </div>
@@ -88,7 +85,8 @@ import AppIconfont from '@mobile/components/base/iconfont/index.vue'
 
 const { routerTo } = useNavigation()
 const refreshing = shallowRef(false) // 是否处于加载中状态
-const bannerList = shallowRef<Model.ImageConfigsRsp[]>([]) // 轮播图列表
+const topBanners = shallowRef<Model.ImageConfigsRsp[]>([]) // 轮播图列表
+const bodyBanners = shallowRef<Model.ImageConfigsRsp[]>([]) // 轮播图列表
 const newsList = shallowRef<Model.SiteColumnDetailRsp[]>([]) // 资讯列表
 
 // 下拉刷新
@@ -101,7 +99,16 @@ queryImageConfigs({
     imageType: 1
   },
   success: (res) => {
-    bannerList.value = res.data
+    topBanners.value = res.data
+  }
+})
+
+queryImageConfigs({
+  data: {
+    imageType: 10
+  },
+  success: (res) => {
+    bodyBanners.value = res.data
   }
 })
 

+ 0 - 0
src/packages/mobile/views/market/detail/index.less → src/packages/mobile/views/market/details/index.less


+ 1 - 1
src/packages/mobile/views/market/detail/index.vue → src/packages/mobile/views/market/details/index.vue

@@ -1,5 +1,5 @@
 <template>
-  <app-view class="order-detail">
+  <app-view class="order-details">
     <template #header>
       <app-navbar title="详情" />
     </template>

+ 1 - 1
src/packages/mobile/views/market/main/index.vue

@@ -7,7 +7,7 @@
         </template>
       </app-navbar>
     </template>
-    <app-pull-refresh v-model:loading="state.loading" v-model:dataList="state.list" :total="60" @refresh="onRefresh"
+    <app-pull-refresh v-model:loading="state.loading" v-model:updateList="state.list" @refresh="onRefresh"
       v-if="animationend">
       <template #default="{ item }">
         <Cell :title="item" :to="{ name: 'market-detail', params: { id: 1 } }" />

+ 4 - 1
src/packages/mobile/views/mine/generalize/index.vue

@@ -15,7 +15,7 @@
                 </div>
                 <div class="block-right">
                     <h4>推广编号</h4>
-                    <span>{{ userAccount.refernum }}</span>
+                    <span @click="showQRCode = true">{{ userAccount.refernum }}</span>
                 </div>
             </div>
         </div>
@@ -27,6 +27,7 @@
                 <Empty />
             </Tab>
         </Tabs>
+        <app-qrcode v-model:show="showQRCode" :content="userAccount.refernum" />
     </app-view>
 </template>
 
@@ -35,8 +36,10 @@ import { shallowRef } from 'vue'
 import { Tab, Tabs, Empty } from 'vant'
 import { useLoginStore } from '@/stores'
 import { queryUserAccount } from '@/services/api/account'
+import AppQrcode from '@mobile/components/base/qrcode/index.vue'
 
 const { getUserId } = useLoginStore()
+const showQRCode = shallowRef(false)
 const userAccount = shallowRef<Partial<Model.UserAccount>>({
     todayrefercount: 0,
     refercount: 0,

+ 17 - 0
src/packages/mobile/views/news/details/index.vue

@@ -0,0 +1,17 @@
+<template>
+    <app-view>
+        <template #header>
+            <app-navbar title="资讯详情" />
+        </template>
+        <div v-html="details?.context"></div>
+    </app-view>
+</template>
+
+<script lang="ts" setup>
+import { shallowRef } from 'vue'
+import { useNavigation } from '@/hooks/navigation'
+
+const { route } = useNavigation()
+const params = route.params.details
+const details = shallowRef<Model.SiteColumnDetailRsp>(JSON.parse(params.toString()))
+</script>

+ 3 - 3
src/packages/mobile/views/setting/password/index.vue

@@ -1,9 +1,9 @@
 <template>
-    <app-view class="setting-password">
+    <app-view class="g-form setting-password">
         <template #header>
             <app-navbar title="修改密码" />
         </template>
-        <Form ref="formRef" class="forget-form" @submit="onSubmit" style="padding:.32rem 0">
+        <Form ref="formRef" class="g-form__container" @submit="onSubmit">
             <CellGroup inset>
                 <Field v-model="formData.OldPwd" type="password" name="OldPwd" label="原密码" placeholder="必填"
                     autocomplete="off" :rules="formRules.OldPwd" />
@@ -14,7 +14,7 @@
             </CellGroup>
         </Form>
         <template #footer>
-            <div class="forget-footer" style="padding:.32rem">
+            <div class="g-form__footer">
                 <Button type="primary" @click="formRef?.submit()" round block>提交</Button>
             </div>
         </template>

+ 0 - 13
src/packages/mobile/views/user/forget/index.less

@@ -1,13 +0,0 @@
-.forget {
-    &-form {
-        padding: .32rem 0;
-
-        .van-cell-group:not(:first-child) {
-            margin-top: .24rem;
-        }
-    }
-
-    &-footer {
-        padding: .32rem;
-    }
-}

+ 4 - 8
src/packages/mobile/views/user/forget/index.vue

@@ -1,9 +1,9 @@
 <template>
-    <app-view class="forget">
+    <app-view class="g-form forget">
         <template #header>
             <app-navbar title="重置登录密码" />
         </template>
-        <Form ref="formRef" class="forget-form" @submit="formSubmit">
+        <Form ref="formRef" class="g-form__container" @submit="formSubmit">
             <CellGroup inset>
                 <Field v-model="formData.mobile" type="tel" name="mobile" label="手机号码" placeholder="必填"
                     autocomplete="off" :rules="formRules.mobile" />
@@ -23,7 +23,7 @@
             </CellGroup>
         </Form>
         <template #footer>
-            <div class="forget-footer">
+            <div class="g-form__footer">
                 <Button type="primary" @click="formRef?.submit()" round block>重置密码</Button>
             </div>
         </template>
@@ -164,8 +164,4 @@ const formSubmit = () => {
         })
     })
 }
-</script>
-
-<style lang="less" scoped>
-@import './index.less';
-</style>
+</script>

+ 0 - 4
src/packages/mobile/views/user/logoff/index.less

@@ -16,8 +16,4 @@
             }
         }
     }
-
-    &__footer {
-        padding: .32rem;
-    }
 }

+ 2 - 2
src/packages/mobile/views/user/logoff/index.vue

@@ -1,5 +1,5 @@
 <template>
-    <app-view class="logoff">
+    <app-view class="g-form logoff">
         <template #header>
             <app-navbar title="注销服务" />
         </template>
@@ -14,7 +14,7 @@
             </dl>
         </section>
         <template #footer>
-            <div class="logoff__footer">
+            <div class="g-form__footer">
                 <Button type="primary" @click="onSubmit" round block>确认注销</Button>
             </div>
         </template>

+ 1 - 11
src/packages/mobile/views/user/register/index.less

@@ -1,11 +1,5 @@
 .register {
-    &-form {
-        padding: .32rem 0;
-
-        .van-cell-group:not(:first-child) {
-            margin-top: .24rem;
-        }
-
+    .g-form__container {
         .agreement {
             display    : flex;
             align-items: center;
@@ -15,8 +9,4 @@
             }
         }
     }
-
-    &-footer {
-        padding: .32rem;
-    }
 }

+ 8 - 4
src/packages/mobile/views/user/register/index.vue

@@ -1,9 +1,9 @@
 <template>
-  <app-view class="register">
+  <app-view class="g-form register">
     <template #header>
       <app-navbar title="个人用户注册" />
     </template>
-    <Form ref="formRef" class="register-form" @submit="formSubmit">
+    <Form ref="formRef" class="g-form__container register__form" @submit="formSubmit">
       <CellGroup inset>
         <Field v-model="formData.mobilephone" type="tel" name="mobilephone" label="手机号码" placeholder="必填"
           autocomplete="off" :rules="formRules.mobilephone" />
@@ -19,7 +19,11 @@
         <Field v-model="formData.loginpwd" name="loginpwd" type="password" label="登录密码" placeholder="必填"
           autocomplete="off" :rules="formRules.loginpwd" />
         <Field v-model="formData.refernum" name="refernum" label="推荐码" placeholder="必填" autocomplete="off"
-          :rules="formRules.refernum" />
+          :rules="formRules.refernum">
+          <!-- <template #button>
+            <Button size="small" type="primary">扫码</Button>
+          </template> -->
+        </Field>
       </CellGroup>
       <CellGroup inset>
         <Cell>
@@ -34,7 +38,7 @@
       </CellGroup>
     </Form>
     <template #footer>
-      <div class="register-footer">
+      <div class="g-form__footer">
         <Button type="primary" @click="formRef?.submit" round block>免费注册</Button>
       </div>
     </template>

+ 1 - 1
src/packages/pc/assets/themes/default/variable.less

@@ -1,4 +1,4 @@
-[theme='default'] {
+:root {
     /* 字体大小规范 */
     --font-x-large            : 18px;
     --font-large              : 16px;

+ 2 - 1
src/shims-vue.d.ts

@@ -18,4 +18,5 @@ declare module 'worker-loader!*' {
 }
 
 declare module 'mockjs'
-declare module 'protobufjs'
+declare module 'protobufjs'
+declare module 'qrcodejs2'

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.