Переглянути джерело

Merge branch 'v20' of http://192.168.31.240:3000/MTP2.0_New/MTP20_WEB_GLOBAL into v20

li.shaoyi 3 місяців тому
батько
коміт
d1d33e6da4

+ 1 - 1
public/locales/zh-CN.json

@@ -313,7 +313,7 @@
             "pleaseenterorderqty": "请输入数量",
             "tips1": "确认要提交吗?",
             "tips2": "*若存在价格匹配的反方向委托订单,系统将会自动撤销",
-            "tips3": "*提交成功。",
+            "tips3": "提交成功。",
             "tips4": "请输入摘牌量",
             "delistingqty": "摘牌量",
             "delistingbuyorsell": "摘牌方向",

+ 1 - 1
public/locales/zh-TW.json

@@ -313,7 +313,7 @@
             "pleaseenterorderqty": "請輸入數量",
             "tips1": "確認要提交嗎?",
             "tips2": "*若存在價格匹配的反方向委託訂單,系統將會自動撤銷",
-            "tips3": "*提交成功。",
+            "tips3": "提交成功。",
             "tips4": "請輸入摘牌量",
             "delistingqty": "摘牌量",
             "delistingbuyorsell": "摘牌方向",

+ 5 - 5
src/packages/mobile/components/modules/images/Index.vue

@@ -1,7 +1,7 @@
 <template>
-    <app-view class="g-detail" v-if="record" style="background-color: #fff;margin-top: 5px;">
-        <p v-if="record.pictureurl">
-            <img :src="getFileUrl(record.pictureurl)" alt="" />
+    <app-view class="g-detail" v-if="quote" style="background-color: #fff;margin-top: 5px;">
+        <p v-if="quote.pictureurl">
+            <img :src="getFileUrl(quote.pictureurl)" alt="" />
         </p>
     </app-view>
 </template>
@@ -11,8 +11,8 @@ import { PropType } from 'vue'
 import { getFileUrl } from '@/filters'
 
 defineProps({
-    record: {
-        type: Object as PropType<Model.GoodsRsp>
+    quote: {
+        type: Object as PropType<Model.GoodsQuote>
     }
 })
 </script>

+ 17 - 17
src/packages/mobile/views/mall/list/Index.vue

@@ -3,23 +3,23 @@
         <template #header>
             <app-navbar :title="groupInfo ? groupInfo.goodsgroupname : '全款商城'" :show-back-button="showBackButton" />
         </template>
-        <div class="pricing-v2">
-            <div class="pricing-v2-item" v-for="(item, index) in dataList" :key="index">
-                <article>
-                    <h3>
-                        <span>{{ item.goodscode }}</span>
-                    </h3>
-                    <section @click="rowClick(item)">
-                        <dl>
-                            <dt>销售价</dt>
-                            <dd :class="item.askColor">
-                                {{ handleNumberValue(formatDecimal(item.ask, item.decimalplace)) }}
-                            </dd>
-                        </dl>
-                    </section>
-                </article>
-            </div>
-        </div>
+        <Waterfall class="g-goods-waterfall" :data-list="dataList">
+            <template #default="{ item }">
+                <div class="goods" @click="rowClick(item)">
+                    <div class="goods-image">
+                        <img :src="getFileUrl(item.thumurls)" />
+                    </div>
+                    <div class="goods-info">
+                        <div class="goods-info__title">{{ item.goodsname }}/{{ item.goodscode }}</div>
+                        <div class="goods-info__price">
+                            <Tag type="danger" plain>销售价</Tag>
+                            <span class="unit">¥</span>
+                            <span :class="item.askColor">{{ handleNumberValue(formatDecimal(item.ask, item.decimalplace)) }}</span>
+                        </div>
+                    </div>
+                </div>
+            </template>
+        </Waterfall>
     </app-view>
 </template>
 

+ 32 - 4
src/packages/mobile/views/mall/trade/Index.vue

@@ -33,6 +33,11 @@
                     </div>
                 </template>
             </Field>
+            <Field name="Region" v-model="formData.AddrInfo" type="textarea" autosize clearable :rules="formRules.AddrInfo" maxlength="50" label="地址" :placeholder="$t('common.required')">
+                <template #right-icon>
+                    <Icon name="add-o" @click="showContact = true" />
+                </template>
+            </Field>
         </Form>
        <Tabs v-model:active="active">
             <template v-for="(item, index) in components.filter(e => e.show === true)" :key="index">
@@ -41,7 +46,8 @@
                 </Tab>
             </template>
         </Tabs>
-         <template #footer v-if="goods">
+        <app-contact v-model:show="showContact" @change="contactChange" />
+        <template #footer v-if="goods">
             <div class="g-form__footer inset">
                 <Button type="danger" block :disabled="orderQty === 0" @click="onSubmit">
                     {{ $t('operation.buynow') }}
@@ -53,7 +59,7 @@
 
 <script lang="ts" setup>
 import { shallowRef, onMounted, onUnmounted, computed, defineAsyncComponent } from 'vue'
-import { Form, Field, Button, FormInstance, Radio, RadioGroup, Tab, Tabs } from 'vant'
+import { Form, Field, Button, FormInstance, Radio, RadioGroup, Tab, Tabs, Icon, FieldRule } from 'vant'
 import { useFuturesStore, useUserStore, i18n } from '@/stores'
 import { useNavigation } from '@mobile/router/navigation'
 import { currencyFormat } from '@/filters'
@@ -64,6 +70,7 @@ import eventBus from '@/services/bus'
 import quoteSocket from '@/services/websocket/quote'
 import Stepper from '@mobile/components/base/stepper/index.vue'
 import Banner from '@mobile/components/base/banner/index.vue'
+import AppContact from '@mobile/components/modules/contact/index.vue'
 
 const { getQueryString, getQueryStringToNumber, routerBack } = useNavigation()
 
@@ -74,6 +81,8 @@ const goodsid = getQueryStringToNumber('goodsid')
 const quote = futuresStore.getGoodsQuote(goodsCode)
 const goods = futuresStore.getGoods(goodsid)
 
+const showContact = shallowRef(false) // 显示联系人选择列表
+
 const { global: { t } } = i18n
 const subscribe = quoteSocket.createSubscribe()
 
@@ -102,8 +111,8 @@ const marketPrice = computed(() => {
 
 // Banner图
 const topBanners = computed(() => {
-    const { bannerurls } = futuresStore.getGoods(goodsCode) ?? {}
-    return bannerurls?.split(',') ?? []
+    const { thumurls } = futuresStore.getGoods(goodsCode) ?? {}
+    return thumurls?.split(',') ?? []
 })
 
 const pictureurl = computed(() => {
@@ -115,6 +124,25 @@ const onQtyRadioChange = (value: number) => {
     orderQty.value = value
 }
 
+// 选择联系信息
+const contactChange = (item: Model.UserReceiveInfoRsp) => {
+    const contact = `${item.receivername} ${item.phonenum}`
+    const address = `${item.provincename} ${item.cityname} ${item.districtname} ${item.address}`
+    formData.AddrInfo = [contact, address].join('\n')
+    formRef.value?.validate('Region')
+}
+
+// 表单验证规则
+const formRules: { [key: string]: FieldRule[] } = {
+    AddrInfo: [{
+        required: true,
+        message: '请选择地址',
+        validator: () => {
+            return !!formData.AddrInfo
+        }
+    }],
+}
+
 const components = [
     {
         name: 'images',

+ 21 - 19
src/packages/mobile/views/score/list/Index.vue

@@ -3,34 +3,36 @@
         <template #header>
             <app-navbar :title="groupInfo ? groupInfo.goodsgroupname : '积分商城'" :show-back-button="showBackButton" />
         </template>
-        <div class="pricing-v2">
-            <div class="pricing-v2-item" v-for="(item, index) in dataList" :key="index">
-                <article>
-                    <h3>
-                        <span>{{ item.goodscode }}</span>
-                    </h3>
-                    <section @click="rowClick(item)">
-                        <dl>
-                            <dt>积分</dt>
-                            <dd :class="item.askColor">
-                                {{ handleNumberValue(formatDecimal(item.ask, item.decimalplace)) }}
-                            </dd>
-                        </dl>
-                    </section>
-                </article>
-            </div>
-        </div>
+        <Waterfall class="g-goods-waterfall" :data-list="dataList">
+            <template #default="{ item }">
+                <div class="goods" @click="rowClick(item)">
+                    <div class="goods-image">
+                        <img :src="getFileUrl(item.thumurls)" />
+                    </div>
+                    <div class="goods-info">
+                        <div class="goods-info__title">{{ item.goodsname }}/{{ item.goodscode }}</div>
+                        <div class="goods-info__price">
+                            <Tag type="danger" plain>积分</Tag>
+                            <span class="unit">¥</span>
+                            <span :class="item.askColor">{{ handleNumberValue(formatDecimal(item.ask, item.decimalplace)) }}</span>
+                        </div>
+                    </div>
+                </div>
+            </template>
+        </Waterfall>
     </app-view>
 </template>
 
 <script lang="ts" setup>
 import { computed, onUnmounted, onActivated } from 'vue'
-import { handleNumberValue, formatDecimal } from '@/filters'
+import { Tag } from 'vant'
+import { handleNumberValue, formatDecimal, getFileUrl } from '@/filters'
 import { ETradeMode } from '@/constants/client'
 import { useNavigation } from '@mobile/router/navigation'
 import { useUserStore, useFuturesStore, i18n } from '@/stores'
-import quoteSocket from '@/services/websocket/quote'
 import { BuyOrSell, BuildType } from '@/constants/order'
+import quoteSocket from '@/services/websocket/quote'
+import Waterfall from '@mobile/components/base/waterfall/index.vue'
 
 defineProps({
     showBackButton: {

+ 32 - 5
src/packages/mobile/views/score/trade/Index.vue

@@ -33,6 +33,11 @@
                     </div>
                 </template>
             </Field>
+            <Field name="Region" v-model="formData.AddrInfo" type="textarea" autosize clearable :rules="formRules.AddrInfo" maxlength="50" label="地址" :placeholder="$t('common.required')">
+                <template #right-icon>
+                    <Icon name="add-o" @click="showContact = true" />
+                </template>
+            </Field>
         </Form>
        <Tabs v-model:active="active">
             <template v-for="(item, index) in components.filter(e => e.show === true)" :key="index">
@@ -41,7 +46,8 @@
                 </Tab>
             </template>
         </Tabs>
-         <template #footer v-if="goods">
+        <app-contact v-model:show="showContact" @change="contactChange" />
+        <template #footer v-if="goods">
             <div class="g-form__footer inset">
                 <Button type="danger" block :disabled="orderQty === 0" @click="onSubmit">
                     {{ $t('operation.buynow') }}
@@ -53,7 +59,7 @@
 
 <script lang="ts" setup>
 import { shallowRef, onMounted, onUnmounted, computed, defineAsyncComponent } from 'vue'
-import { Form, Field, Button, FormInstance, Radio, RadioGroup, Tab, Tabs } from 'vant'
+import { Form, Field, Button, FormInstance, FieldRule, Radio, RadioGroup, Tab, Tabs, Icon } from 'vant'
 import { useFuturesStore, useUserStore, i18n } from '@/stores'
 import { useNavigation } from '@mobile/router/navigation'
 import { currencyFormat } from '@/filters'
@@ -64,6 +70,7 @@ import eventBus from '@/services/bus'
 import quoteSocket from '@/services/websocket/quote'
 import Stepper from '@mobile/components/base/stepper/index.vue'
 import Banner from '@mobile/components/base/banner/index.vue'
+import AppContact from '@mobile/components/modules/contact/index.vue'
 
 const { getQueryString, getQueryStringToNumber, routerBack } = useNavigation()
 
@@ -79,7 +86,8 @@ const subscribe = quoteSocket.createSubscribe()
 
 const formRef = shallowRef<FormInstance>()
 const { formData, formSubmit } = useOrder()
-
+// 显示联系人选择列表
+const showContact = shallowRef(false) 
 const { getSystemParamValue } = useUserStore()
 const system_1012 = getSystemParamValue('1012') ?? '1'
 
@@ -102,8 +110,8 @@ const marketPrice = computed(() => {
 
 // Banner图
 const topBanners = computed(() => {
-    const { bannerurls } = futuresStore.getGoods(goodsCode) ?? {}
-    return bannerurls?.split(',') ?? []
+    const { thumurls } = futuresStore.getGoods(goodsCode) ?? {}
+    return thumurls?.split(',') ?? []
 })
 
 const pictureurl = computed(() => {
@@ -115,6 +123,25 @@ const onQtyRadioChange = (value: number) => {
     orderQty.value = value
 }
 
+// 选择联系信息
+const contactChange = (item: Model.UserReceiveInfoRsp) => {
+    const contact = `${item.receivername} ${item.phonenum}`
+    const address = `${item.provincename} ${item.cityname} ${item.districtname} ${item.address}`
+    formData.AddrInfo = [contact, address].join('\n')
+    formRef.value?.validate('Region')
+}
+
+// 表单验证规则
+const formRules: { [key: string]: FieldRule[] } = {
+    AddrInfo: [{
+        required: true,
+        message: '请选择地址',
+        validator: () => {
+            return !!formData.AddrInfo
+        }
+    }],
+}
+
 const components = [
     {
         name: 'images',

+ 2 - 3
src/packages/pc/views/market/trade/mall/index.vue

@@ -5,7 +5,7 @@
             <article v-for="(item, index) in futuresStore.marketGoodsList" :key="index">
                 <h3 @click="openImageViewer(item.pictureurl)">
                     <span>{{ item.goodscode }}</span>
-                    <app-icon icon="PictureFilled" v-if="item.pictureurl" />
+                    <el-image :src="getFirstImage(item.thumurls)" style="width: 20px;height: 20px;" lazy />
                 </h3>
                 <section @click="onRowClick(item)">
                     <dl>
@@ -26,9 +26,8 @@
 import { shallowRef, onMounted, onUnmounted, defineAsyncComponent } from 'vue'
 import { getFileUrl } from '@/filters'
 import { useComponent } from '@/hooks/component'
-import { handleNumberValue, formatDecimal } from '@/filters'
+import { handleNumberValue, formatDecimal, getFirstImage } from '@/filters'
 import { useUserStore, useFuturesStore, useGlobalStore, i18n } from '@/stores'
-import AppIcon from '@pc/components/base/icon/index.vue'
 
 const t = i18n.global.t
 const futuresStore = useFuturesStore()

+ 2 - 3
src/packages/pc/views/market/trade/score/index.vue

@@ -5,7 +5,7 @@
             <article v-for="(item, index) in futuresStore.marketGoodsList" :key="index">
                 <h3 @click="openImageViewer(item.pictureurl)">
                     <span>{{ item.goodscode }}</span>
-                    <app-icon icon="PictureFilled" v-if="item.pictureurl" />
+                    <el-image :src="getFirstImage(item.thumurls)" style="width: 20px;height: 20px;" lazy />
                 </h3>
                 <section @click="onRowClick(item)">
                     <dl>
@@ -26,9 +26,8 @@
 import { shallowRef, onMounted, onUnmounted, defineAsyncComponent } from 'vue'
 import { getFileUrl } from '@/filters'
 import { useComponent } from '@/hooks/component'
-import { handleNumberValue, formatDecimal } from '@/filters'
+import { handleNumberValue, formatDecimal, getFirstImage } from '@/filters'
 import { useUserStore, useFuturesStore, useGlobalStore, i18n } from '@/stores'
-import AppIcon from '@pc/components/base/icon/index.vue'
 
 const t = i18n.global.t
 const futuresStore = useFuturesStore()