li.shaoyi 1 anno fa
parent
commit
e26176e15c
35 ha cambiato i file con 325 aggiunte e 301 eliminazioni
  1. 2 0
      src/packages/gcszt/assets/themes/global/global.less
  2. 2 0
      src/packages/gstj/assets/themes/global/global.less
  3. 2 0
      src/packages/gzcj/assets/themes/global/global.less
  4. 0 0
      src/packages/mobile/assets/themes/base/iconfont.less
  5. 2 0
      src/packages/mobile/assets/themes/global/global.less
  6. 4 0
      src/packages/mobile/components/base/waterfall/index.less
  7. 1 1
      src/packages/mobile/components/base/waterfall/index.vue
  8. 0 1
      src/packages/mobile/components/layouts/login/index.less
  9. 5 5
      src/packages/mobile/components/layouts/login/index.vue
  10. 20 14
      src/packages/mobile/views/user/forget/Index.vue
  11. 5 1
      src/packages/mobile/views/user/register/Index.vue
  12. 2 0
      src/packages/nhgj/assets/themes/global/global.less
  13. 2 0
      src/packages/qdhs/assets/themes/global/global.less
  14. 2 0
      src/packages/qxst/assets/themes/global/global.less
  15. 2 0
      src/packages/tc/assets/themes/global/global.less
  16. 2 0
      src/packages/thj/assets/themes/global/global.less
  17. 2 0
      src/packages/tjmd/assets/themes/global/global.less
  18. 5 5
      src/packages/tss/assets/themes/default/default.less
  19. 3 0
      src/packages/tss/assets/themes/global/global.less
  20. 6 9
      src/packages/tss/router/index.ts
  21. 26 0
      src/packages/tss/views/group/index.vue
  22. 7 0
      src/packages/tss/views/group/list/index.less
  23. 57 0
      src/packages/tss/views/group/list/index.vue
  24. 8 29
      src/packages/tss/views/home/index.vue
  25. 40 97
      src/packages/tss/views/home/main/index.less
  26. 19 36
      src/packages/tss/views/home/main/index.vue
  27. 11 28
      src/packages/tss/views/mine/Index.vue
  28. 0 17
      src/packages/tss/views/product/index.less
  29. 0 23
      src/packages/tss/views/product/index.vue
  30. 0 33
      src/packages/tss/views/product/list/index.vue
  31. 28 0
      src/packages/tss/views/search/index.less
  32. 51 0
      src/packages/tss/views/search/index.vue
  33. 5 2
      src/packages/tss/views/user/login/Index.vue
  34. 2 0
      src/packages/zrwyt/assets/themes/global/global.less
  35. 2 0
      src/packages/zrwyt2/assets/themes/global/global.less

+ 2 - 0
src/packages/gcszt/assets/themes/global/global.less

@@ -244,6 +244,8 @@
             min-height: 120px;
             font-size: 0;
             border-radius: 8px;
+            border-bottom-left-radius: 0;
+            border-bottom-right-radius: 0;
             overflow: hidden;
 
             &__mask {

+ 2 - 0
src/packages/gstj/assets/themes/global/global.less

@@ -244,6 +244,8 @@
             min-height: 120px;
             font-size: 0;
             border-radius: 8px;
+            border-bottom-left-radius: 0;
+            border-bottom-right-radius: 0;
             overflow: hidden;
 
             &__mask {

+ 2 - 0
src/packages/gzcj/assets/themes/global/global.less

@@ -244,6 +244,8 @@
             min-height: 120px;
             font-size: 0;
             border-radius: 8px;
+            border-bottom-left-radius: 0;
+            border-bottom-right-radius: 0;
             overflow: hidden;
 
             &__mask {

File diff suppressed because it is too large
+ 0 - 0
src/packages/mobile/assets/themes/base/iconfont.less


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

@@ -256,6 +256,8 @@
             min-height: 120px;
             font-size: 0;
             border-radius: 8px;
+            border-bottom-left-radius: 0;
+            border-bottom-right-radius: 0;
             overflow: hidden;
 
             &__mask {

+ 4 - 0
src/packages/mobile/components/base/waterfall/index.less

@@ -1,4 +1,8 @@
 .app-waterfall {
+    &:empty {
+        display: none;
+    }
+
     ul {
         position: relative;
 

+ 1 - 1
src/packages/mobile/components/base/waterfall/index.vue

@@ -1,6 +1,6 @@
 <template>
     <div class="app-waterfall">
-        <ul ref="warterfallRef">
+        <ul ref="warterfallRef" v-if="dataList.length">
             <li v-for="(item, index) in dataList" :key="index">
                 <slot :item="item">{{ item }}</slot>
             </li>

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

@@ -73,7 +73,6 @@
                 --van-button-primary-background: #00577c;
                 //--van-button-primary-background: linear-gradient(to right, #dc364a, #1973e1);
                 padding: 12px;
-                padding-top: 24px;
             }
         }
     }

+ 5 - 5
src/packages/mobile/components/layouts/login/index.vue

@@ -17,11 +17,11 @@
         <Field v-model="formData.password" name="password" type="password" :label="$t('user.login.password')"
           label-align="top" size="large" :placeholder="$t('user.login.Pleaseenterthepassword')"
           :rules="[{ required: true, message: $t('user.login.Pleaseenterthepassword') }]" autocomplete="off" />
-        <Field>
-          <template #input>
-            <SliderVerify @statu="slide" style="max-width: 100%;margin: auto;" v-if="showSliderVerify" />
+        <Cell>
+          <template #value>
+            <SliderVerify @statu="slide" style="width: 100%;" v-if="showSliderVerify" />
           </template>
-        </Field>
+        </Cell>
       </CellGroup>
       <div class="button-submit">
         <Button type="primary" native-type="submit" round block>{{ $t('user.login.login') }}</Button>
@@ -54,7 +54,7 @@
 
 <script lang="ts" setup>
 import { shallowRef } from 'vue'
-import { Button, Field, CellGroup, Form, Checkbox, showFailToast, showToast } from 'vant'
+import { Button, Field, CellGroup,Cell, Form, Checkbox, showFailToast, showToast } from 'vant'
 import { fullloading, dialog } from '@/utils/vant'
 import { useLogin } from '@/business/login'
 import { useNavigation } from '@mobile/router/navigation'

+ 20 - 14
src/packages/mobile/views/user/forget/Index.vue

@@ -5,21 +5,22 @@
         </template>
         <Form ref="formRef" class="g-form__container" @submit="formSubmit">
             <CellGroup inset>
-                <Field v-model="formData.mobile" type="tel" name="mobile" :label="$t('user.forget.mobile')" :placeholder="$t('common.pleaseenter')" autocomplete="off"
-                    :rules="formRules.mobile" />
-                <Field v-model="formData.vcode" type="digit" name="vcode" :label="$t('user.forget.vcode')" :placeholder="$t('common.pleaseenter')" autocomplete="off"
-                    :rules="formRules.vcode">
+                <Field v-model="formData.mobile" type="tel" name="mobile" :label="$t('user.forget.mobile')"
+                    :placeholder="$t('common.pleaseenter')" autocomplete="off" :rules="formRules.mobile" />
+                <Field v-model="formData.vcode" type="digit" name="vcode" :label="$t('user.forget.vcode')"
+                    :placeholder="$t('common.pleaseenter')" autocomplete="off" :rules="formRules.vcode">
                     <template #button>
-                        <Button size="small" type="danger" :disabled="isCountdown" @click="sendVerifyCode">
+                        <Button size="small" type="danger" :disabled="loading" @click="sendVerifyCode">
                             <span v-if="isCountdown">{{ $t('user.forget.sendagain') }}({{ currentTime.seconds }})</span>
                             <span v-else>{{ $t('user.forget.getsmscode') }}</span>
                         </Button>
                     </template>
                 </Field>
-                <Field v-model="formData.password" name="password" type="password" :label="$t('user.forget.newpwd')" :placeholder="$t('common.pleaseenter')"
-                    autocomplete="off" :rules="formRules.password" />
-                <Field v-model="formData.confirmpassword" name="confirmpassword" type="password" :label="$t('user.forget.confirmpwd')"
-                :placeholder="$t('common.pleaseenter')" autocomplete="off" :rules="formRules.confirmpassword" />
+                <Field v-model="formData.password" name="password" type="password" :label="$t('user.forget.newpwd')"
+                    :placeholder="$t('common.pleaseenter')" autocomplete="off" :rules="formRules.password" />
+                <Field v-model="formData.confirmpassword" name="confirmpassword" type="password"
+                    :label="$t('user.forget.confirmpwd')" :placeholder="$t('common.pleaseenter')" autocomplete="off"
+                    :rules="formRules.confirmpassword" />
             </CellGroup>
         </Form>
         <template #footer>
@@ -31,7 +32,7 @@
 </template>
 
 <script lang="ts" setup>
-import { reactive, ref, computed, shallowRef } from 'vue'
+import { reactive, ref, computed } from 'vue'
 import { CellGroup, Button, Field, Form, FormInstance, showFailToast, FieldRule } from 'vant'
 import { useCountDown } from '@vant/use'
 import { fullloading, dialog } from '@/utils/vant'
@@ -45,19 +46,22 @@ import { i18n, useUserStore } from '@/stores'
 
 const { router } = useNavigation()
 const formRef = ref<FormInstance>()
+const loading = ref(false)
 const isCountdown = ref(false) // 是否正在倒计时
 
 const { getSystemParamValue } = useUserStore()
-const system_1010 = shallowRef(getSystemParamValue('1010') ?? '1')
+const param1010 = getSystemParamValue('1010') ?? '1'
+const param1013 = getSystemParamValue('1013') ?? '30'
 
 const { global: { t } } = i18n
 
 // 倒计时函数
 const countdown = useCountDown({
-    time: 60 * 1000,
+    time: +param1013 * 1000,
     onFinish: () => {
         countdown.reset()
         isCountdown.value = false
+        loading.value = false
     }
 })
 
@@ -80,14 +84,14 @@ const formRules: { [key in keyof Model.ResetPasswordReq | 'confirmpassword']?: F
         message: t('user.forget.tips1'),
         validator: (val) => {
             /// 值为”0“ 时 只校验长度20位,不限字符
-            if (system_1010.value === '0') {
+            if (param1010 === '0') {
                 if (val.length <= 20) {
                     return true
                 }
                 return t('banksign.tips6')
             } else {
                 if (validateRules.phone.validate(val)) {
-                return true
+                    return true
                 }
                 return validateRules.phone.message
             }
@@ -122,6 +126,7 @@ const formRules: { [key in keyof Model.ResetPasswordReq | 'confirmpassword']?: F
 // 发送手机验证码
 const sendVerifyCode = () => {
     formRef.value?.validate('mobile').then(() => {
+        loading.value = true
         sendResetVerifyCode({
             data: {
                 mobile: getEncryptMobile(formData.mobile),
@@ -131,6 +136,7 @@ const sendVerifyCode = () => {
             isCountdown.value = true
             countdown.start()
         }).catch(() => {
+            loading.value = false
             showFailToast(t('user.forget.tips7'))
         })
     })

+ 5 - 1
src/packages/mobile/views/user/register/Index.vue

@@ -10,7 +10,7 @@
         <Field v-model="formData.vcode" type="digit" name="vcode" :label="$t('user.register.vcode')"
           :placeholder="$t('common.required')" :rules="formRules.vcode">
           <template #button>
-            <Button size="small" type="danger" :disabled="isCountdown" @click="sendVerifyCode">
+            <Button size="small" type="danger" :disabled="loading" @click="sendVerifyCode">
               <span v-if="isCountdown">{{ $t('user.register.sendagain') }}({{ currentTime.seconds }})</span>
               <span v-else>{{ $t('user.register.getsmscode') }}</span>
             </Button>
@@ -86,6 +86,7 @@ const globalStore = useGlobalStore()
 const registrationCodeRule = globalStore.getSystemInfo('registrationCodeRule')
 const formRef = ref<FormInstance>()
 const checked = ref(false) // 是否同意注册条款
+const loading = ref(false)
 const isCountdown = ref(false) // 是否正在倒计时
 const showReward = ref(false) // 显示红包
 const redEnvelope = ref(0) // 红包金额
@@ -104,6 +105,7 @@ const countdown = useCountDown({
   onFinish: () => {
     countdown.reset()
     isCountdown.value = false
+    loading.value = false
   }
 })
 
@@ -185,6 +187,7 @@ const formRules: { [key: string]: FieldRule[] } = {
 // 发送手机验证码
 const sendVerifyCode = () => {
   formRef.value?.validate('mobilephone').then(() => {
+    loading.value = true
     sendRegisterVerifyCode({
       data: {
         phonenumber: formData.mobilephone
@@ -193,6 +196,7 @@ const sendVerifyCode = () => {
       isCountdown.value = true
       countdown.start()
     }).catch(() => {
+      loading.value = false
       showFailToast(t('user.register.tips7'))
     })
   })

+ 2 - 0
src/packages/nhgj/assets/themes/global/global.less

@@ -244,6 +244,8 @@
             min-height: 120px;
             font-size: 0;
             border-radius: 8px;
+            border-bottom-left-radius: 0;
+            border-bottom-right-radius: 0;
             overflow: hidden;
 
             &__mask {

+ 2 - 0
src/packages/qdhs/assets/themes/global/global.less

@@ -244,6 +244,8 @@
             min-height: 120px;
             font-size: 0;
             border-radius: 8px;
+            border-bottom-left-radius: 0;
+            border-bottom-right-radius: 0;
             overflow: hidden;
 
             &__mask {

+ 2 - 0
src/packages/qxst/assets/themes/global/global.less

@@ -244,6 +244,8 @@
             min-height: 120px;
             font-size: 0;
             border-radius: 8px;
+            border-bottom-left-radius: 0;
+            border-bottom-right-radius: 0;
             overflow: hidden;
 
             &__mask {

+ 2 - 0
src/packages/tc/assets/themes/global/global.less

@@ -244,6 +244,8 @@
             min-height: 120px;
             font-size: 0;
             border-radius: 8px;
+            border-bottom-left-radius: 0;
+            border-bottom-right-radius: 0;
             overflow: hidden;
 
             &__mask {

+ 2 - 0
src/packages/thj/assets/themes/global/global.less

@@ -244,6 +244,8 @@
             min-height: 120px;
             font-size: 0;
             border-radius: 8px;
+            border-bottom-left-radius: 0;
+            border-bottom-right-radius: 0;
             overflow: hidden;
 
             &__mask {

+ 2 - 0
src/packages/tjmd/assets/themes/global/global.less

@@ -244,6 +244,8 @@
             min-height: 120px;
             font-size: 0;
             border-radius: 8px;
+            border-bottom-left-radius: 0;
+            border-bottom-right-radius: 0;
             overflow: hidden;
 
             &__mask {

+ 5 - 5
src/packages/tss/assets/themes/default/default.less

@@ -18,27 +18,27 @@
     /* 导航栏 */
     --navbar-height: 44px;
     --navbar-color: #fff;
-    --navbar-background: #C30D23;
+    --navbar-background: #c1a36b;
     --navbar-backbutton-color: #fff;
 
     /* 标签栏 */
     --tabbar-background: #fff;
     --tabbar-icon: #999;
-    --tabbar-icon-active: #c30d23;
+    --tabbar-icon-active: #c1a36b;
 
     /* 内容边距 */
     --content-inset: 12px;
 
     /* Vant-Button */
     --van-button-border-width: 0;
-    --van-button-primary-background: #1e78b9;
-    --van-button-danger-background: #d82d42;
+    --van-button-primary-background: #72533B;
+    --van-button-danger-background: #c19239;
 
     /* Vant-Checkbox */
     --van-checkbox-checked-icon-color: #DD364A !important;
 
     /* Vant-Tabs */
-    --van-tabs-bottom-bar-color: #DD364A;
+    --van-tabs-bottom-bar-color: #72533B;
 
     --van-dialog-confirm-button-text-color: #DD364A;
 

+ 3 - 0
src/packages/tss/assets/themes/global/global.less

@@ -233,6 +233,7 @@
 
     .goods {
         background-color: #fff;
+        box-shadow: 0 0 16px 0 #efefef;
         border-radius: 8px;
         overflow: hidden;
 
@@ -244,6 +245,8 @@
             min-height: 120px;
             font-size: 0;
             border-radius: 8px;
+            border-bottom-left-radius: 0;
+            border-bottom-right-radius: 0;
             overflow: hidden;
 
             &__mask {

+ 6 - 9
src/packages/tss/router/index.ts

@@ -48,9 +48,9 @@ const routes: Array<RouteRecordRaw> = [
             component: () => import('../views/mine/Index.vue'),
           },
           {
-            path: 'pricing',
-            name: 'home-pricing-v2',
-            component: () => import('@mobile/views/pricing/list/v2/index.vue'),
+            path: 'group',
+            name: 'home-group',
+            component: () => import('../views/group/index.vue'),
           },
           ...homeRoutes
         ]
@@ -58,16 +58,13 @@ const routes: Array<RouteRecordRaw> = [
     ]
   },
   {
-    path: '/product',
+    path: '/search',
     component: Page,
     children: [
       {
         path: '',
-        name: 'product',
-        component: () => import('../views/product/index.vue'),
-        props: {
-          showBackButton: true
-        }
+        name: 'search',
+        component: () => import('../views/search/index.vue'),
       }
     ]
   },

+ 26 - 0
src/packages/tss/views/group/index.vue

@@ -0,0 +1,26 @@
+<template>
+    <app-view>
+        <template #header>
+            <app-navbar title="分类" :show-back-button="showBackButton">
+                <template #footer>
+                    <Search shape="round" background="transparent" placeholder="请输入搜索关键词" style="padding-top: 0;"
+                        @click="$router.push({ name: 'search' })" />
+                </template>
+            </app-navbar>
+        </template>
+        <GroupList :market-id="10101" title="全款" />
+        <GroupList :market-id="10101" title="预付款" />
+    </app-view>
+</template>
+
+<script lang="ts" setup>
+import { Search } from 'vant'
+import GroupList from './list/index.vue'
+
+defineProps({
+    showBackButton: {
+        type: Boolean,
+        default: false
+    }
+})
+</script>

+ 7 - 0
src/packages/tss/views/group/list/index.less

@@ -0,0 +1,7 @@
+.app-group{
+    &__title{
+        font-size: 16px;
+        font-weight: bold;
+        padding: 10px;
+    }
+}

+ 57 - 0
src/packages/tss/views/group/list/index.vue

@@ -0,0 +1,57 @@
+<template>
+    <div class="app-group">
+        <h4 class="app-group__title" v-if="title">{{ title }}</h4>
+        <Waterfall class="g-goods-waterfall" :data-list="goodsGroups">
+            <template #default="{ item }">
+                <div class="goods"
+                    @click="$router.push({ name: 'pricing-list', query: { groupId: item.goodsgroupid } })">
+                    <div class="goods-image">
+                        <img :src="item.thumurls" />
+                    </div>
+                    <div class="goods-info">
+                        <div class="goods-info__title">{{ item.goodsgroupname }}</div>
+                    </div>
+                </div>
+            </template>
+        </Waterfall>
+    </div>
+</template>
+
+<script lang="ts" setup>
+import { computed } from 'vue'
+import { getFileUrl } from '@/filters'
+import { useUserStore } from '@/stores'
+import Waterfall from '@mobile/components/base/waterfall/index.vue'
+
+const props = defineProps({
+    marketId: {
+        type: Number,
+        required: true
+    },
+    title: {
+        type: String,
+    }
+})
+
+const emit = defineEmits(['click'])
+const userStore = useUserStore()
+
+const goodsGroups = computed(() => {
+    const list = userStore.getUserDataInfo('goodsgroups')
+    return list.filter((e) => e.marketid === props.marketId).map((e) => {
+        const [firstImg] = e.thumurls.split(',')
+        return {
+            ...e,
+            thumurls: firstImg ? getFileUrl(firstImg) : ''
+        }
+    })
+})
+
+const onClick = (item: Model.GoodsGroup) => {
+    emit('click', item)
+}
+</script>
+
+<style lang="less">
+@import "./index.less";
+</style>

+ 8 - 29
src/packages/tss/views/home/index.vue

@@ -17,20 +17,18 @@
 import { shallowRef, nextTick, watch, onMounted, onActivated, computed } from 'vue'
 import { Tabbar } from '@mobile/components/base/tabbar/types'
 import { useNavigation } from '@mobile/router/navigation'
-import { useMarketSection } from '@/business/market'
 import { useLoginStore, useFuturesStore } from '@/stores'
 import { i18n } from '@/stores'
-import { displayname } from "@/filters"
 import AppTabbar from '@mobile/components/base/tabbar/index.vue'
 import AppUpdater from '@mobile/components/base/updater/index.vue'
 import RouterTransition from '@mobile/components/base/router-transition/index.vue'
 
-const { global: { t } } = i18n
-
 defineProps({
   iosUpdateUrl: String
 })
 
+const { t } = i18n.global
+
 const { route, routerTo } = useNavigation()
 const loginStore = useLoginStore()
 const futuresStore = useFuturesStore()
@@ -49,13 +47,6 @@ const tabIndex = computed(() => {
   return tabList.value.findIndex((e) => e.name === route.name)
 })
 
-// 获取市场板块
-const { allMarket } = useMarketSection(() => {
-  const tab = tabList.value[tabIndex.value]
-  marketSection.value = tab?.params
-  currentTab.value = tabIndex.value
-})
-
 // 导航标签列表
 const tabList = computed(() => {
   const result: Tabbar[] = [
@@ -66,30 +57,18 @@ const tabList = computed(() => {
       activeIcon: 'g-icon-home--fill',
     },
     {
+      name: 'home-group',
+      label: '分类',
+      icon: 'g-icon-group--line',
+      activeIcon: 'g-icon-group--fill',
+    },
+    {
       name: 'home-mine',
       label: t('tabbar.mine'),
       icon: 'g-icon-mine--line',
       activeIcon: 'g-icon-mine--fill',
     }
   ]
-  if (loginStore.token) {
-    const market = allMarket.value.find((e) => e.marketids === '10101')
-    if (market) {
-      result.splice(1, 0, {
-        name: 'home-pricing-v2',
-        label: displayname(market),
-        icon: 'g-icon-pricing--line',
-        activeIcon: 'g-icon-pricing--fill',
-      })
-    }
-  } else {
-    result.splice(1, 0, {
-      name: '#',
-      label: t('tabbar.trade'),
-      icon: 'g-icon-quote--line',
-      activeIcon: 'g-icon-quote--fill',
-    })
-  }
   return result
 })
 

+ 40 - 97
src/packages/tss/views/home/main/index.less

@@ -1,77 +1,54 @@
 @import '@mobile/assets/themes/base/mixin.less';
 
 .home-main {
-    &__header {
-        background: linear-gradient(var(--navbar-background), var(--navbar-background) 60%, transparent 60%);
-        padding: 10px;
-    }
-
-    &__iconbar {
-        ul {
-            display: flex;
-            flex-wrap: wrap;
-            padding-top: 12px;
-
-            &:last-child {
-                padding-bottom: 12px;
-            }
-
-            li {
-                display: flex;
-                flex-direction: column;
-                align-items: center;
-                width: calc(~'100% / 4');
-                text-align: center;
-
-                .g-icon {
-                    width: 36px;
-                    height: 36px;
-                    font-size: 22px;
-                    color: #fff;
-                    background-color: #000;
-                    border-radius: 50%;
-                    margin-bottom: 4px;
-
-                    &-listing--line {
-                        background-color: #4e9ddb;
-                    }
-
-                    &-transfer--line {
-                        background-color: #42739b;
-                    }
-
-                    &-presale--line {
-                        background-color: #8c8b94;
-                    }
-
-                    &-pickup--line {
-                        background-color: #72c990;
-                    }
-
-                    &-settlement--line {
-                        background-color: #9d6969;
-                    }
-
-                    &-pricing--line {
-                        background-color: #8272c9;
-                    }
-
-                    &-swap--line {
-                        background-color: #ebc413;
-                    }
+    --van-search-padding: 0 10px 10px 10px;
+
+    &__banner {
+        position: relative;
+        overflow: hidden;
+        padding: 0 10px;
+
+        &::before {
+            content: '';
+            width: 140%;
+            height: 120px;
+            position: absolute;
+            left: -20%;
+            top: 0;
+            border-radius: 0 0 50% 50%;
+            background-color: var(--navbar-background);
+        }
 
-                    &-pricing--line {
-                        background-color: #df4343;
-                    }
-                }
-            }
+        .app-banner {
+            position: relative;
+            z-index: 1;
+            border-radius: 10px;
+            overflow: hidden;
         }
     }
 
     &__titlebar {
         .van-cell__title {
+            display: flex;
+            align-items: center;
+            line-height: 1;
             font-size: 16px;
             font-weight: bold;
+
+            img {
+                width: 16px;
+                height: 16px;
+                margin-right: 5px;
+            }
+
+            span {
+                +span {
+                    color: #999;
+                    font-size: 13px;
+                    font-weight: normal;
+                    margin-left: 5px;
+                }
+            }
         }
 
         .van-cell__value {
@@ -80,26 +57,6 @@
         }
     }
 
-    &__market {
-        .scrollbar {
-            width: 100%;
-            padding: 10px;
-        }
-
-        .van-swipe {
-            height: 32px;
-            background-color: #f6f6f6;
-
-            ul {
-                display: flex;
-                justify-content: space-around;
-                align-items: center;
-                height: inherit;
-                font-size: 13px;
-            }
-        }
-    }
-
     &__news {
         .article {
             &-item {
@@ -117,18 +74,4 @@
             }
         }
     }
-
-    &__group {
-        ul {
-            display: flex;
-            flex-wrap: wrap;
-
-            li {
-                width: 50%;
-                font-size: 13px;
-                text-align: center;
-                padding: 10px;
-            }
-        }
-    }
 }

+ 19 - 36
src/packages/tss/views/home/main/index.vue

@@ -1,11 +1,19 @@
 <template>
   <app-view class="home-main">
     <template #header>
-      <app-navbar :title="globalStore.getSystemInfo('appName')" :show-back-button="false" />
+      <app-navbar :title="globalStore.getSystemInfo('appName')" :show-back-button="false">
+        <template #footer>
+          <Search shape="round" background="transparent" placeholder="请输入搜索关键词"
+            @click="$router.push({ name: 'search' })" />
+        </template>
+      </app-navbar>
     </template>
-    <Banner :data-list="topBanners" />
-    <PullRefresh class="home-main__container" v-model="refreshing" @refresh="onRefresh" :pulling-text="$t('common.pulling-text')" 
-      :loosing-text="$t('common.loosing-text')" :loading-text="$t('common.loading-text')" :success-text="$t('common.success-text')">
+    <div class="home-main__banner">
+      <Banner :data-list="topBanners" />
+    </div>
+    <PullRefresh class="home-main__container" v-model="refreshing" @refresh="onRefresh"
+      :pulling-text="$t('common.pulling-text')" :loosing-text="$t('common.loosing-text')"
+      :loading-text="$t('common.loading-text')" :success-text="$t('common.success-text')">
       <app-block>
         <Cell :value="$t('common.more')" :to="{ name: 'notice-list' }" icon="volume" is-link>
           <template #title>
@@ -13,22 +21,6 @@
           </template>
         </Cell>
       </app-block>
-      <app-block class="home-main__iconbar">
-        <ul>
-          <li @click="$router.push({ name: 'product' })">
-            <Iconfont label-direction="bottom" icon="g-icon-swap--line">{{ $t('home.product') }}</Iconfont>
-          </li>
-          <li @click="$router.push({ name: 'pricing-list' })">
-            <Iconfont label-direction="bottom" icon="g-icon-pricing--line">{{ $t('home.pricing') }}</Iconfont>
-          </li>
-          <li @click="$router.push({ name: 'pricing-trade', query: {} })">
-            <Iconfont label-direction="bottom" icon="g-icon-pickup--line">{{ $t('home.pickup') }}</Iconfont>
-          </li>
-          <li @click="openComponent('detail2')">
-            <Iconfont label-direction="bottom" icon="g-icon-settlement--line">{{ $t('home.delivery') }}</Iconfont>
-          </li>
-        </ul>
-      </app-block>
       <app-block class="home-main__news">
         <CellGroup class="article">
           <Cell class="home-main__titlebar" :title="$t('routes.news')" :value="$t('common.more')" icon="fire"
@@ -42,24 +34,21 @@
         </CellGroup>
       </app-block>
       <app-block class="home-main__group" v-if="loginStore.token">
-        <ProductList />
+        <GroupList :market-id="53201" />
       </app-block>
     </PullRefresh>
-    <component ref="componentRef" :is="componentMap.get(componentId)" v-bind="{ onlyDelivery }" @closed="closeComponent" v-if="componentId" />
   </app-view>
 </template>
 
 <script lang="ts" setup>
-import { shallowRef, defineAsyncComponent } from 'vue'
-import { Cell, CellGroup, PullRefresh, Badge } from 'vant'
-import { formatDate } from "@/filters"
-import { queryImageConfigs } from "@/services/api/common"
-import { queryNewTitles } from "@/services/api/news"
+import { shallowRef } from 'vue'
+import { Cell, CellGroup, PullRefresh, Badge, Search } from 'vant'
+import { formatDate } from '@/filters'
+import { queryImageConfigs } from '@/services/api/common'
+import { queryNewTitles } from '@/services/api/news'
 import { useLoginStore, useNoticeStore, useGlobalStore } from '@/stores'
-import { useComponent } from '@/hooks/component'
 import Banner from '@mobile/components/base/banner/index.vue'
-import Iconfont from '@/components/base/iconfont/index.vue'
-import ProductList from '../../product/list/index.vue'
+import GroupList from '../../group/list/index.vue'
 
 const noticeStore = useNoticeStore()
 const loginStore = useLoginStore()
@@ -68,12 +57,6 @@ const refreshing = shallowRef(false) // 是否处于加载中状态
 const topBanners = shallowRef<string[]>([]); // 轮播图列表
 const newsList = shallowRef<Model.NewTitlesRsp[]>([]) // 资讯列表
 
-const onlyDelivery = shallowRef(true)
-const componentMap = new Map<string, unknown>([
-    ['detail2', defineAsyncComponent(() => import('@mobile/views/order/position/components/pricing/detail2/Index.vue'))]
-])
-const { componentRef, componentId, openComponent, closeComponent } = useComponent()
-
 // 下拉刷新
 const onRefresh = () => {
   if (!topBanners.value.length) {

+ 11 - 28
src/packages/tss/views/mine/Index.vue

@@ -23,7 +23,7 @@
                     <div class="profile-account">
                         <div class="profile-account-first">
                             <span>{{ $t('account.account') }}</span>
-                            <Icon name="checked" size="14" color="#46D63C" ></Icon>
+                            <Icon name="checked" size="14" color="#46D63C"></Icon>
                         </div>
                         <span>{{ currentAccount.accountid ?? 0 }}</span>
                     </div>
@@ -34,32 +34,12 @@
                             <span>{{ $t('mine.balance') }}</span>
                             <span>{{ currentAccount.currentbalance?.toFixed(2) }}</span>
                         </li>
-                        <li>
-                            <span>{{ $t('mine.netWorth') }}</span>
-                            <span>{{ currentAccount.hazardValue?.toFixed(2) }}</span>
-                        </li>
-                    </ul>
-                    <ul>
-                        <li>
-                            <span>{{ $t('mine.freezeMargin') }}</span>
-                            <span>{{ currentAccount.freezeMargin?.toFixed(2) }}</span>
-                        </li>
-                        <li>
-                            <span>{{ $t('mine.usedMargin') }}</span>
-                            <span>{{ currentAccount.usedmargin?.toFixed(2) }}</span>
-                        </li>
                     </ul>
                     <ul>
                         <li>
                             <span>{{ $t('mine.availableFunds') }}</span>
                             <span>{{ currentAccount.avaiableMoney?.toFixed(2) }}</span>
                         </li>
-                        <!-- <li>
-                            <span>{{ $t('mine.riskRate') }}</span>
-                            <span :class="currentAccount.hazardRatioColor">
-                                {{ parsePercent(currentAccount.hazardRatio) }}
-                            </span>
-                        </li> -->
                     </ul>
                 </div>
                 <div class="button">
@@ -71,7 +51,8 @@
         <app-block class="mine-iconbar">
             <ul>
                 <li @click="routerTo('order-position')">
-                    <Iconfont label-direction="bottom" icon="g-icon-position--line">{{ $t('mine.myposition') }}</Iconfont>
+                    <Iconfont label-direction="bottom" icon="g-icon-position--line">{{ $t('mine.myposition') }}
+                    </Iconfont>
                 </li>
                 <li @click="routerTo('order-list')">
                     <Iconfont label-direction="bottom" icon="g-icon-order--line">{{ $t('mine.myorder') }}</Iconfont>
@@ -123,20 +104,22 @@
                         <Iconfont icon="g-icon-fwrx">{{ $t('rules.fwrx') }}</Iconfont>
                     </template>
                 </Cell>
-                <Cell is-link :to="{ name: 'mine-setting' }">
+                <Cell is-link :to="{ name: 'rules-gywm' }">
                     <template #title>
-                        <Iconfont icon="g-icon-setting">{{ $t('mine.settings') }}</Iconfont>
+                        <Iconfont icon="g-icon-gywm">{{ $t('mine.aboutus') }}</Iconfont>
                     </template>
                 </Cell>
-                <Cell is-link :to="{ name: 'rules-gywm' }">
+                <Cell is-link :to="{ name: 'mine-setting' }">
                     <template #title>
-                        <Iconfont icon="g-icon-gywm">{{ $t('mine.aboutus') }}</Iconfont>
+                        <Iconfont icon="g-icon-setting">{{ $t('mine.settings') }}</Iconfont>
                     </template>
                 </Cell>
             </CellGroup>
         </app-block>
         <div class="mine-footer">
-            <Button class="button-logout" type="danger" size="small" round @click="userLogout">{{ $t('common.logout') }}</Button>
+            <Button class="button-logout" type="danger" size="small" round @click="userLogout">
+                {{ $t('common.logout') }}
+            </Button>
         </div>
     </app-view>
 </template>
@@ -149,7 +132,7 @@ import { fullloading, dialog } from '@/utils/vant'
 import { useNavigation } from '@mobile/router/navigation'
 import { AuthStatus } from '@/constants/account'
 import { queryBankAccountSign } from '@/services/api/bank'
-import { useLoginStore, useAccountStore, useUserStore,  } from '@/stores'
+import { useLoginStore, useAccountStore, useUserStore, } from '@/stores'
 import eventBus from '@/services/bus'
 import Iconfont from '@/components/base/iconfont/index.vue'
 import { i18n } from '@/stores'

+ 0 - 17
src/packages/tss/views/product/index.less

@@ -1,17 +0,0 @@
-.product {
-    &-list {
-        padding: 10px;
-
-        ul {
-            display: flex;
-            flex-wrap: wrap;
-
-            li {
-                width: 50%;
-                font-size: 13px;
-                text-align: center;
-                padding: 10px;
-            }
-        }
-    }
-}

+ 0 - 23
src/packages/tss/views/product/index.vue

@@ -1,23 +0,0 @@
-<template>
-    <app-view class="product">
-        <template #header>
-            <app-navbar :title="$t('home.product')" :show-back-button="showBackButton" />
-        </template>
-        <ProductList class="product-list" />
-    </app-view>
-</template>
-
-<script lang="ts" setup>
-import ProductList from './list/index.vue'
-
-defineProps({
-    showBackButton: {
-        type: Boolean,
-        default: false
-    }
-})
-</script>
-
-<style lang="less">
-@import "./index.less";
-</style>

+ 0 - 33
src/packages/tss/views/product/list/index.vue

@@ -1,33 +0,0 @@
-<template>
-    <div>
-        <ul>
-            <template v-for="item in goodsGroups" :key="item.goodsgroupid">
-                <li v-if="item.thumurls"
-                    @click="$router.push({ name: 'pricing-list', query: { groupId: item.goodsgroupid } })">
-                    <Image :src="item.thumurls" radius="4" />
-                    <span>{{ item.goodsgroupname }}</span>
-                </li>
-            </template>
-        </ul>
-    </div>
-</template>
-
-<script lang="ts" setup>
-import { computed } from 'vue'
-import { Image } from 'vant'
-import { getFileUrl } from '@/filters'
-import { useUserStore } from '@/stores'
-
-const userStore = useUserStore()
-
-const goodsGroups = computed(() => {
-    const list = userStore.getUserDataInfo('goodsgroups')
-    return list.filter((e) => e.marketid.toString().startsWith('10')).map((e) => {
-        const [firstImg] = e.thumurls.split(',')
-        return {
-            ...e,
-            thumurls: firstImg ? getFileUrl(firstImg) : ''
-        }
-    })
-})
-</script>

+ 28 - 0
src/packages/tss/views/search/index.less

@@ -0,0 +1,28 @@
+.search {
+    .app-navbar {
+        .column {
+            flex: none;
+
+            &--left {
+                width: 50px;
+            }
+
+            &--center {
+                flex: 1;
+
+                .column-block {
+                    flex: 1;
+                }
+            }
+
+            &--right {
+                display: none;
+            }
+        }
+
+        .van-search {
+            width: 100%;
+            padding: 0 10px;
+        }
+    }
+}

+ 51 - 0
src/packages/tss/views/search/index.vue

@@ -0,0 +1,51 @@
+<template>
+    <app-view class="search">
+        <template #header>
+            <app-navbar>
+                <Search v-model="keyword" shape="round" background="transparent" placeholder="请输入搜索关键词" autofocus
+                    @search="onSearch" />
+            </app-navbar>
+            <Waterfall class="g-goods-waterfall" :data-list="searchList" v-if="searchList.length">
+                <template #default="{ item }">
+                    <div class="goods">
+                        <div class="goods-image">
+                            <img :src="getFileUrl(item.pictureurl)" />
+                        </div>
+                        <div class="goods-info">
+                            <div class="goods-info__title">{{ item.goodscode }}</div>
+                            <div class="goods-info__price">
+                                <span class="integer">{{ item.ask }}</span>
+                            </div>
+                        </div>
+                    </div>
+                </template>
+            </Waterfall>
+            <Empty description="暂无结果" v-else />
+        </template>
+    </app-view>
+</template>
+
+<script lang="ts" setup>
+import { shallowRef } from 'vue'
+import { Search, Empty } from 'vant'
+import { getFileUrl } from '@/filters'
+import { useFuturesStore } from '@/stores'
+import Waterfall from '@mobile/components/base/waterfall/index.vue'
+
+const futuresStore = useFuturesStore()
+const keyword = shallowRef('')
+
+const searchList = shallowRef<Model.GoodsQuote[]>([])
+
+const onSearch = () => {
+    if (keyword.value) {
+        searchList.value = futuresStore.quotationList.filter((e) => [53201, 10101].includes(e.marketid) && e.goodscode.toLowerCase().includes(keyword.value.toLowerCase()))
+    } else {
+        searchList.value = []
+    }
+}
+</script>
+
+<style lang="less">
+@import "./index.less";
+</style>

+ 5 - 2
src/packages/tss/views/user/login/Index.vue

@@ -5,12 +5,13 @@
 <script lang="ts" setup>
 import { onMounted, onUnmounted } from 'vue'
 import { dialog } from '@/utils/vant'
-import { i18n } from '@/stores'
+import { useLoginStore, i18n } from '@/stores'
 import plus from '@/utils/h5plus'
 import AppLogin from '@mobile/components/layouts/login/index.vue'
 import logoImage from '../../../assets/images/login-logo.png'
 
 const { t } = i18n.global
+const loginStore = useLoginStore()
 
 onMounted(() => {
   plus.setStatusBarStyle('dark')
@@ -20,7 +21,9 @@ onUnmounted(() => {
   plus.setStatusBarStyle('light')
 
   setTimeout(() => {
-    dialog({ message: t('user.login.tips7'), confirmButtonText: t('operation.confirm') })
+    if (loginStore.token) {
+      dialog({ message: t('user.login.tips7'), confirmButtonText: t('operation.confirm') })
+    }
   }, 500)
 })
 </script>

+ 2 - 0
src/packages/zrwyt/assets/themes/global/global.less

@@ -244,6 +244,8 @@
             min-height: 120px;
             font-size: 0;
             border-radius: 8px;
+            border-bottom-left-radius: 0;
+            border-bottom-right-radius: 0;
             overflow: hidden;
 
             &__mask {

+ 2 - 0
src/packages/zrwyt2/assets/themes/global/global.less

@@ -244,6 +244,8 @@
             min-height: 120px;
             font-size: 0;
             border-radius: 8px;
+            border-bottom-left-radius: 0;
+            border-bottom-right-radius: 0;
             overflow: hidden;
 
             &__mask {

Some files were not shown because too many files changed in this diff