Commit 953e29f0 authored by chenqikuai's avatar chenqikuai

perf: 修改代码,消除一些warning

parent 889d78bb
...@@ -6,30 +6,27 @@ ...@@ -6,30 +6,27 @@
<div <div
v-if="iconName === 'icon-gengduo'" v-if="iconName === 'icon-gengduo'"
class="flex items-center" class="flex items-center"
@click="$emit('seeMore')"> @click="$emit('seeMore')"
>
<span class="word9">更多</span> <span class="word9">更多</span>
<icon <IconVue name="icon-gengduo" color="#979BB6" size="10" />
name="icon-gengduo"
color="#979BB6"
size="10"
/>
</div> </div>
<icon <IconVue
v-else-if="iconName === 'icon-shaixuan'" v-else-if="iconName === 'icon-shaixuan'"
:name="iconName" :name="iconName"
color="#979BB6" color="#979BB6"
size="16" size="16"
@click="clickFilter" @click="clickFilter"
/> />
<icon v-else-if="iconName" :name="iconName" color="#979BB6" size="16" /> <IconVue v-else-if="iconName" :name="iconName" color="#979BB6" size="16" />
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent } from "vue"; import { defineComponent } from "vue";
import Icon from "../common/Icon.vue"; import IconVue from "../common/Icon.vue";
export default defineComponent({ export default defineComponent({
emits: ["filter", "seeMore"], emits: ["filter", "seeMore"],
components: { Icon }, components: { IconVue },
props: { props: {
title: { title: {
type: String, type: String,
...@@ -82,4 +79,4 @@ export default defineComponent({ ...@@ -82,4 +79,4 @@ export default defineComponent({
text-align: center; text-align: center;
margin: 0 0 0 14px; margin: 0 0 0 14px;
} }
</style> </style>
\ No newline at end of file
...@@ -21,14 +21,12 @@ ...@@ -21,14 +21,12 @@
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent } from "vue"; import { defineComponent } from "vue";
import Icon from "../common/Icon.vue";
import Bridge from "@/utils/jsBridge2"; import Bridge from "@/utils/jsBridge2";
import { Toast } from "vant"; import { Toast } from "vant";
import { enableLive } from "@/service/StaffService"; import { enableLive } from "@/service/StaffService";
import { getCurrentUserAvatarUrl } from "@/utils/userMsg"; import { getCurrentUserAvatarUrl } from "@/utils/userMsg";
export default defineComponent({ export default defineComponent({
components: { Icon },
props: { props: {
title: String, title: String,
}, },
......
<template> <template>
<div class="wrap15 flex mx-5 items-center" @click="$emit('click')"> <div class="wrap15 flex mx-5 items-center" @click="$emit('click')">
<div class="bd5 ml-4"> <div class="bd5 ml-4">
<p class="word14">{{max_amount}}<span class="unit"></span></p> <p class="word14">{{ max_amount }}<span class="unit"></span></p>
<p class="txt8">最高可借</p> <p class="txt8">最高可借</p>
</div> </div>
<div <div
class="bd6 flex flex-col flex-shrink overflow-hidden overflow-ellipsis" class="bd6 flex flex-col flex-shrink overflow-hidden overflow-ellipsis"
> >
<span class="word15 w-full overflow-hidden overflow-ellipsis">{{product_name}}</span> <span class="word15 w-full overflow-hidden overflow-ellipsis">{{
<span class="txt10 w-full overflow-hidden overflow-ellipsis">{{features}}</span> product_name
}}</span>
<span class="txt10 w-full overflow-hidden overflow-ellipsis">{{
features
}}</span>
<!-- <span class="word16">{{features}}</span> --> <!-- <span class="word16">{{features}}</span> -->
</div> </div>
<div class="flex-grow"></div> <div class="flex-grow"></div>
<icon name="icon-gengduo" color="#979BB6" size="15" class="mr-6" /> <IconVue name="icon-gengduo" color="#979BB6" size="15" class="mr-6" />
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import Icon from "@/components/common/Icon.vue"; import IconVue from "@/components/common/Icon.vue";
import { eLoanMode } from "@/views/withMenu/Loan/types"; import { eLoanMode } from "@/views/withMenu/Loan/types";
import { PropType } from "vue" import { PropType } from "vue";
defineEmits(['click']) defineEmits(["click"]);
const props = defineProps({ const props = defineProps({
max_amount:{ max_amount: {
type:Number, type: Number,
required:true required: true,
}, },
product_name:{ product_name: {
type:String, type: String,
required:true required: true,
}, },
features:{ features: {
type:String, type: String,
required:true required: true,
}, },
inst_name:{ inst_name: {
type:String, type: String,
required:true required: true,
}, },
loanMode: { loanMode: {
type: Number as PropType<eLoanMode>, type: Number as PropType<eLoanMode>,
requried: true, requried: true,
}, },
}) });
</script> </script>
<style scoped> <style scoped>
.wrap15 { .wrap15 {
...@@ -161,4 +165,4 @@ const props = defineProps({ ...@@ -161,4 +165,4 @@ const props = defineProps({
height: 14px; height: 14px;
margin: 27px 0 0 69px; margin: 27px 0 0 69px;
} }
</style> </style>
\ No newline at end of file
<template> <template>
<Skeleton :row="3" :loading="skeLoading"> <Skeleton :row="3" :loading="skeLoading">
<van-swipe class="my-swipe" indicator-color="#3E4FAF" style="margin-top: 20px"> <van-swipe
class="my-swipe"
indicator-color="#3E4FAF"
style="margin-top: 20px"
>
<van-swipe-item <van-swipe-item
class="flex justify-center swpiItem" class="flex justify-center swpiItem"
v-for="item in state.hotProductList" v-for="item in state.hotProductList"
...@@ -72,7 +76,7 @@ const fetchList = () => { ...@@ -72,7 +76,7 @@ const fetchList = () => {
inst_name, inst_name,
product_name, product_name,
product_status, product_status,
} = ret.data; } = ret.data || {};
return { return {
rate, rate,
...@@ -87,11 +91,11 @@ const fetchList = () => { ...@@ -87,11 +91,11 @@ const fetchList = () => {
promiseList.push(promise); promiseList.push(promise);
}); });
state.hotProductList = []; state.hotProductList = [];
Promise.all(promiseList).then(list => { Promise.all(promiseList).then((list) => {
list.forEach(i => { list.forEach((i) => {
state.hotProductList.push(i); state.hotProductList.push(i);
}) });
}) });
} }
}); });
}; };
...@@ -105,4 +109,4 @@ const fetchList = () => { ...@@ -105,4 +109,4 @@ const fetchList = () => {
.swpiItem { .swpiItem {
height: 230px; height: 230px;
} }
</style> </style>
\ No newline at end of file
<template> <template>
<div class="inner_box border border-card-shadow rounded-2xl px-7 pt-8 pb-6 bg-white mt-5"> <div
<div class=" bg-app-blue rounded-full w-6 h-6 inline-block mr-2 align-middle relative"> class="
<img :src="path" class=" w-3 h-3 absolute inset-0 m-auto"> inner_box
border border-card-shadow
rounded-2xl
px-7
pt-8
pb-6
bg-white
mt-5
"
>
<div
class="
bg-app-blue
rounded-full
w-6
h-6
inline-block
mr-2
align-middle
relative
"
>
<img :src="path" class="w-3 h-3 absolute inset-0 m-auto" />
</div> </div>
<span :title="title" class=" text-app-blue font-semibold text-base align-middle">{{title}}</span> <span
<p class=" text-gray-700 text-sm text-justify pt-3"> :title="title"
class="text-app-blue font-semibold text-base align-middle"
>{{ title }}</span
>
<p class="text-gray-700 text-sm text-justify pt-3">
<slot></slot> <slot></slot>
</p> </p>
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent } from 'vue' import { defineComponent } from "vue";
import Icon from "@/components/common/Icon.vue"
export default defineComponent({ export default defineComponent({
components:{ Icon }, props: {
props:{ path: {
path:{ type: String,
type:String, default: "",
default:'' },
title: {
type: String,
default: "",
}, },
title:{
type:String,
default:''
}
}, },
setup () { setup() {
return {};
},
return {} });
}
})
</script> </script>
<style scoped> <style scoped>
.inner_box{ .inner_box {
box-shadow: 4px 9px #D6DBF8 ; box-shadow: 4px 9px #d6dbf8;
} }
</style> </style>
\ No newline at end of file
...@@ -46,7 +46,10 @@ ...@@ -46,7 +46,10 @@
网点 网点
</p> </p>
</div> </div>
<div class="flex items-start w-full justify-between" v-if="!disableChat"> <div
class="flex items-start w-full justify-between"
v-if="!disableChat"
>
<div class="text-gray-400 text-xs">{{ location }}</div> <div class="text-gray-400 text-xs">{{ location }}</div>
<div class="text-gray-400 text-xs float-right ml-2"> <div class="text-gray-400 text-xs float-right ml-2">
{{ filter.filterDistance(distance) }} {{ filter.filterDistance(distance) }}
...@@ -58,7 +61,7 @@ ...@@ -58,7 +61,7 @@
<div class="mt-2 pb-3 flex justify-between items-center"> <div class="mt-2 pb-3 flex justify-between items-center">
<div class="overflow-hidden mr-6"> <div class="overflow-hidden mr-6">
<div v-if="is_normal_work" class="mb-2"> <div v-if="is_normal_work" class="mb-2">
<icon <IconVue
name="icon-yingye" name="icon-yingye"
color="#1B1F37" color="#1B1F37"
size="14" size="14"
...@@ -90,7 +93,7 @@ ...@@ -90,7 +93,7 @@
> >
</div> </div>
<div v-if="is_normal_work"> <div v-if="is_normal_work">
<icon <IconVue
name="icon-a-shijian" name="icon-a-shijian"
color="#1B1F37" color="#1B1F37"
size="14" size="14"
...@@ -107,7 +110,7 @@ ...@@ -107,7 +110,7 @@
</div> </div>
<div class="text-right h-3" v-if="!disableChat"> <div class="text-right h-3" v-if="!disableChat">
<icon <IconVue
name="icon-ditu" name="icon-ditu"
color="#3E4FAF" color="#3E4FAF"
size="14" size="14"
...@@ -120,7 +123,7 @@ ...@@ -120,7 +123,7 @@
<!-- 底部操作 --> <!-- 底部操作 -->
<div <div
class="flex text-center py-3 text-gray-800 bg-branch-tab-bg rounded-b-2xl" class="flex text-center py-3 text-gray-800 bg-branch-tab-bg rounded-b-2xl"
v-if="(!isNotChatUser && is_normal_work && !disableChat)" v-if="!isNotChatUser && is_normal_work && !disableChat"
> >
<p <p
class="w-1/2 border-r border-gray-200 mb-0" class="w-1/2 border-r border-gray-200 mb-0"
...@@ -141,16 +144,8 @@ ...@@ -141,16 +144,8 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { import { computed, defineComponent, PropType, ref } from "vue";
computed, import IconVue from "@/components/common/Icon.vue";
defineComponent,
onMounted,
onUnmounted,
PropType,
reactive,
ref,
} from "vue";
import Icon from "@/components/common/Icon.vue";
import { transfterStrToDate } from "@/utils/transfer"; import { transfterStrToDate } from "@/utils/transfer";
import AddressService from "@/service/AddressService"; import AddressService from "@/service/AddressService";
import dayjs from "dayjs"; import dayjs from "dayjs";
...@@ -296,8 +291,8 @@ const handleClickNagigate = () => { ...@@ -296,8 +291,8 @@ const handleClickNagigate = () => {
}; };
const handleClickChatWithClientManager = async () => { const handleClickChatWithClientManager = async () => {
console.log(props.outlet_id, 'show outlet id'); console.log(props.outlet_id, "show outlet id");
authCheck(async () => { authCheck(async () => {
goToChatWithOutletRoboot({ goToChatWithOutletRoboot({
outletId: props.outlet_id as number, outletId: props.outlet_id as number,
...@@ -306,7 +301,7 @@ const handleClickChatWithClientManager = async () => { ...@@ -306,7 +301,7 @@ const handleClickChatWithClientManager = async () => {
}; };
const isNotChatUser = getUserMsg()?.role2 === eRole.manager; const isNotChatUser = getUserMsg()?.role2 === eRole.manager;
console.log(isNotChatUser, 'show isNotChatUser'); console.log(isNotChatUser, "show isNotChatUser");
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
...@@ -316,4 +311,4 @@ console.log(isNotChatUser, 'show isNotChatUser'); ...@@ -316,4 +311,4 @@ console.log(isNotChatUser, 'show isNotChatUser');
width: 0.8rem; width: 0.8rem;
} }
} }
</style> </style>
\ No newline at end of file
<template> <template>
<div class=" h-12 bg-white flex justify-between items-center px-3 rounded-lg"> <div class="h-12 bg-white flex justify-between items-center px-3 rounded-lg">
<div class=" flex items-center"> <div class="flex items-center">
<icon <IconVue :name="iconName" color="#4E61C9" size="14" />
:name="iconName" <span class="text-sm text-gray-800 ml-3">{{ label }}</span>
color="#4E61C9"
size="14"
/>
<span class=" text-sm text-gray-800 ml-3">{{label}}</span>
</div> </div>
<icon <IconVue name="icon-gengduo" color="#8E92A3" size="14" />
name="icon-gengduo"
color="#8E92A3"
size="14"
/>
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent } from 'vue' import { defineComponent } from "vue";
import Icon from "@/components/common/Icon.vue" import IconVue from "@/components/common/Icon.vue";
export default defineComponent({ export default defineComponent({
components:{ components: {
Icon IconVue,
}, },
props: { props: {
iconName: { iconName: {
type: String, type: String,
default: '' default: "",
},
label: {
type: String,
default: "",
}, },
label:{
type:String,
default:''
}
}, },
setup () { setup() {
return {};
},
return {} });
}
})
</script> </script>
<style scoped> <style scoped></style>
</style>
\ No newline at end of file
...@@ -2,12 +2,12 @@ ...@@ -2,12 +2,12 @@
<div class="navbar w-full" style="z-index: 300" v-if="!bangsBlock"> <div class="navbar w-full" style="z-index: 300" v-if="!bangsBlock">
<div <div
class="h-full theBar flex items-end px-5 justify-center relative h46" class="h-full theBar flex items-end px-5 justify-center relative h46"
style="background:#F7F7FA; padding-bottom: 8px;" style="background: #f7f7fa; padding-bottom: 8px"
:style="[isBangs ? 'height:' + `${46 + heightOfNotch}px` : '']" :style="[isBangs ? 'height:' + `${46 + heightOfNotch}px` : '']"
v-bind="$attrs" v-bind="$attrs"
> >
<div class="relative w-full flex items-center justify-center"> <div class="relative w-full flex items-center justify-center">
<icon <IconVue
v-if="showBackIcon" v-if="showBackIcon"
@click="$router.go(-1)" @click="$router.go(-1)"
name="icon-fanhui" name="icon-fanhui"
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
size="18" size="18"
:color="iconColor" :color="iconColor"
/> />
<icon <IconVue
v-if="showSecondIcon && isRole" v-if="showSecondIcon && isRole"
name="icon-kefu" name="icon-kefu"
class="absolute left-11" class="absolute left-11"
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
@click="$emit('clickSecondIcon')" @click="$emit('clickSecondIcon')"
:color="iconColor" :color="iconColor"
/> />
<icon <IconVue
v-if="showSearchIcon" v-if="showSearchIcon"
name="icon-sousuo" name="icon-sousuo"
class="absolute left-11" class="absolute left-11"
...@@ -31,7 +31,11 @@ ...@@ -31,7 +31,11 @@
@click="$router.push(path)" @click="$router.push(path)"
:color="iconColor" :color="iconColor"
/> />
<div class="title whitespace-nowrap overflow-hidden overflow-ellipsis px-5">{{ title }}</div> <div
class="title whitespace-nowrap overflow-hidden overflow-ellipsis px-5"
>
{{ title }}
</div>
</div> </div>
</div> </div>
<div <div
...@@ -43,26 +47,29 @@ ...@@ -43,26 +47,29 @@
<div v-else class="navbar w-full"> <div v-else class="navbar w-full">
<div <div
class="h-full theBar flex items-end px-5 justify-center relative" class="h-full theBar flex items-end px-5 justify-center relative"
style="background:rgb(237,237,237); " style="background: rgb(237, 237, 237)"
v-bind="$attrs" v-bind="$attrs"
:style="{ :style="{
'height': heightOfNotch + 'px', height: heightOfNotch + 'px',
}"
v-if="isBangs"
></div>
<div
:style="{
height: heightOfNotch + 'px',
}" }"
v-if="isBangs" v-if="isBangs"
></div> ></div>
<div :style="{
'height': heightOfNotch + 'px'
}" v-if="isBangs"></div>
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import { notchHeight } from "@/store/AppStore"; import { notchHeight } from "@/store/AppStore";
import { defineComponent } from "vue"; import { defineComponent } from "vue";
import Icon from "../common/Icon.vue"; import IconVue from "../common/Icon.vue";
export default defineComponent({ export default defineComponent({
inheritAttrs: false, inheritAttrs: false,
emits: ['clickSecondIcon'], emits: ["clickSecondIcon"],
components: { Icon }, components: { IconVue },
props: { props: {
title: { title: {
type: String, type: String,
...@@ -94,27 +101,32 @@ export default defineComponent({ ...@@ -94,27 +101,32 @@ export default defineComponent({
path: { path: {
type: Object, type: Object,
default: () => { default: () => {
return { path: '/Search' } return { path: "/Search" };
} },
}, },
bangsBlock: { bangsBlock: {
type: Boolean, type: Boolean,
default: false default: false,
} },
}, },
mounted() { mounted() {
console.log(document.documentElement.clientWidth, window.screen.width, 'show width'); console.log(
console.log(window.devicePixelRatio, 'show window.devicePixelRatio'); document.documentElement.clientWidth,
window.screen.width,
"show width"
);
console.log(window.devicePixelRatio, "show window.devicePixelRatio");
}, },
computed: { computed: {
isBangs() { isBangs() {
return true return true;
}, },
heightOfNotch() { // 刘海屏的刘海高度 单位px heightOfNotch() {
// 刘海屏的刘海高度 单位px
return notchHeight.value / window.devicePixelRatio; return notchHeight.value / window.devicePixelRatio;
return 103; return 103;
} },
} },
}); });
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
...@@ -136,4 +148,4 @@ export default defineComponent({ ...@@ -136,4 +148,4 @@ export default defineComponent({
font-weight: 400; font-weight: 400;
} }
} }
</style> </style>
\ No newline at end of file
...@@ -2,17 +2,17 @@ ...@@ -2,17 +2,17 @@
<Popup <Popup
v-model:show="visible" v-model:show="visible"
position="right" position="right"
style="height: 100vh; width: 86%;" style="height: 100vh; width: 86%"
> >
<div class="flex flex-col h-full"> <div class="flex flex-col h-full">
<div class="mx-5 flex items-center justify-center relative mt-2.5"> <div class="mx-5 flex items-center justify-center relative mt-2.5">
<icon <IconVue
color="#000000" color="#000000"
name="icon-a-shanchu1" name="icon-a-shanchu1"
class="absolute left-0" class="absolute left-0"
@click="clickClose" @click="clickClose"
/> />
<div class="title">{{ title || '此处是标题' }}</div> <div class="title">{{ title || "此处是标题" }}</div>
</div> </div>
<div class="flex-grow overflow-hidden"> <div class="flex-grow overflow-hidden">
<div class="h-full overflow-auto px-5"> <div class="h-full overflow-auto px-5">
...@@ -44,18 +44,18 @@ ...@@ -44,18 +44,18 @@
</Popup> </Popup>
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent } from 'vue' import { defineComponent } from "vue";
import { Popup } from 'vant' import { Popup } from "vant";
import Icon from '@/components/common/Icon.vue' import IconVue from "@/components/common/Icon.vue";
export default defineComponent({ export default defineComponent({
emits: ['clickLeft', 'clickRight'], emits: ["clickLeft", "clickRight"],
components: { components: {
Popup, Popup,
Icon, IconVue,
}, },
props: { props: {
leftBtnName: { type: String, default: '重置' }, leftBtnName: { type: String, default: "重置" },
rightBtnName: { type: String, default: '完成' }, rightBtnName: { type: String, default: "完成" },
leftBtnActive: { leftBtnActive: {
type: Boolean, type: Boolean,
default: true, default: true,
...@@ -73,20 +73,20 @@ export default defineComponent({ ...@@ -73,20 +73,20 @@ export default defineComponent({
}, },
methods: { methods: {
clickClose(): void { clickClose(): void {
this.setShow(false) this.setShow(false);
}, },
}, },
computed: { computed: {
visible: { visible: {
get(): boolean | undefined { get(): boolean | undefined {
return this.show return this.show;
}, },
set(v: boolean): void { set(v: boolean): void {
this.setShow(false) this.setShow(false);
}, },
}, },
}, },
}) });
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.btn { .btn {
......
<template> <template>
<div class="mb-5"> <div class="mb-5">
<div class="rating mx-auto flow-root"> <div class="rating mx-auto flow-root">
<div class="flex items-center justify-center mt-5"> <div class="flex items-center justify-center mt-5">
<div class="line"></div> <div class="line"></div>
<div class="title mx-2.5">评价服务</div> <div class="title mx-2.5">评价服务</div>
<div class="line"></div> <div class="line"></div>
</div> </div>
<div class="flex items-center justify-center mt-5"> <div class="flex items-center justify-center mt-5">
<div <div
v-for="item in props.list" v-for="item in props.list"
:key="item.icon" :key="item.icon"
class="flex flex-col items-center w-20" class="flex flex-col items-center w-20"
@click="!selected && setSelectedRate && setSelectedRate(item.name)" @click="!selected && setSelectedRate && setSelectedRate(item.name)"
> >
<icon <IconVue
size="22" size="22"
:name="item.icon" :name="item.icon"
:color="item.name === selected ? selectedColor : unselectedColor" :color="item.name === selected ? selectedColor : unselectedColor"
/> />
<div class="mt-3 name">{{ item.name }}</div> <div class="mt-3 name">{{ item.name }}</div>
</div>
</div>
</div> </div>
<div class="title mt-5 text-center" v-if="selected">感谢您的评价</div> </div>
</div> </div>
<div class="title mt-5 text-center" v-if="selected">感谢您的评价</div>
</div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import Icon from "@/components/common/Icon.vue" import IconVue from "@/components/common/Icon.vue";
import { defineProps, PropType } from "vue" import { defineProps, PropType } from "vue";
const props = defineProps({ const props = defineProps({
selected: String, selected: String,
setSelectedRate: Function, setSelectedRate: Function,
selectedColor: { selectedColor: {
type: String, type: String,
default: '#3E4FAF', default: "#3E4FAF",
},
unselectedColor: {
type: String,
default: "#8D92AF",
},
list: {
type: Array as PropType<{ icon: string; name: string }[]>,
default() {
return [
{
icon: "icon-manyi",
name: "满意",
},
{
icon: "icon-bumanyi",
name: "不满意",
},
];
}, },
unselectedColor: { },
type: String, });
default: '#8D92AF'
},
list: {
type: Array as PropType<{ icon: string, name: string }[]>,
default() {
return [
{
icon: 'icon-manyi',
name: '满意',
},
{
icon: 'icon-bumanyi',
name: '不满意',
}
]
}
}
})
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.title { .title {
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #333333;
}
.rating {
width: 335px;
height: 140px;
background: #ffffff;
.line {
width: 105px;
height: 1px;
border: 1px solid #f5f6f9;
}
.name {
font-size: 14px; font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC; font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400; font-weight: 400;
color: #333333; color: #333333;
}
} }
.rating { </style>
width: 335px;
height: 140px;
background: #ffffff;
.line {
width: 105px;
height: 1px;
border: 1px solid #f5f6f9;
}
.name {
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #333333;
}
}
</style>
\ No newline at end of file
...@@ -8,13 +8,15 @@ ...@@ -8,13 +8,15 @@
@click-overlay="hide" @click-overlay="hide"
> >
<div class="text-center py-4" @click="handleClickCall"> <div class="text-center py-4" @click="handleClickCall">
<icon <Icon
name="icon-a-dianhua" name="icon-a-dianhua"
color="#3E4FAF" color="#3E4FAF"
size="17" size="17"
class="inline-block pr-3 align-text-bottom" class="inline-block pr-3 align-text-bottom"
/> />
<span class="text-app-blue text-sm align-middle font-semibold">呼叫{{ phone }}</span> <span class="text-app-blue text-sm align-middle font-semibold"
>呼叫{{ phone }}</span
>
</div> </div>
</van-popup> </van-popup>
<van-popup <van-popup
...@@ -26,20 +28,27 @@ ...@@ -26,20 +28,27 @@
@click-overlay="hide" @click-overlay="hide"
> >
<div <div
class="text-app-blue text-sm font-semibold border-t border-gray-200 text-center py-4" class="
text-app-blue text-sm
font-semibold
border-t border-gray-200
text-center
py-4
"
@click="hide" @click="hide"
>取消</div> >
取消
</div>
</van-popup> </van-popup>
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import Vue, { getCurrentInstance } from 'vue' import Vue from "vue";
import jsBridge from "@/utils/jsBridge2" import jsBridge from "@/utils/jsBridge2";
import Icon from "../common/Icon.vue";
// const { ctx } = getCurrentInstance() as any
const emit = defineEmits(['hidden']) const emit = defineEmits(["hidden"]);
const props = defineProps({ const props = defineProps({
show: { show: {
...@@ -48,18 +57,17 @@ const props = defineProps({ ...@@ -48,18 +57,17 @@ const props = defineProps({
}, },
phone: { phone: {
type: String, type: String,
} },
}) });
const hide = () => { const hide = () => {
emit('hidden', false) emit("hidden", false);
} };
const handleClickCall = async () => { const handleClickCall = async () => {
console.log(props.phone) console.log(props.phone);
new jsBridge().bridge_call(props.phone, () => { new jsBridge().bridge_call(props.phone, () => {
emit('hidden', false) emit("hidden", false);
}) });
} };
</script>
</script>
\ No newline at end of file
...@@ -4,8 +4,8 @@ ...@@ -4,8 +4,8 @@
:style="{ background: '#0081F7 !important', color: 'white' }" :style="{ background: '#0081F7 !important', color: 'white' }"
iconColor="white" iconColor="white"
/> />
<div class=" -mt-5"> <div class="-mt-5">
<img src="../../assets/img/activity_bg.png" class=" w-full"/> <img src="../../assets/img/activity_bg.png" class="w-full" />
</div> </div>
<!-- 活动列表 --> <!-- 活动列表 -->
<van-list <van-list
...@@ -16,7 +16,8 @@ ...@@ -16,7 +16,8 @@
@load="onLoad" @load="onLoad"
> >
<div class="px-5"> <div class="px-5">
<Skeleton :loading="skeLoading" :row="3" class="mt-2"> <div class="mt-2" v-if="skeLoading"></div>
<Skeleton :loading="skeLoading" :row="3">
<card <card
v-for="activity in activityList" v-for="activity in activityList"
:update_at="activity.update_at" :update_at="activity.update_at"
...@@ -47,7 +48,7 @@ onMounted(() => { ...@@ -47,7 +48,7 @@ onMounted(() => {
fetchList(); fetchList();
}); });
const current = ref(1) const current = ref(1);
const LIST_SIZE: number = 4; const LIST_SIZE: number = 4;
const offset = ref(0); const offset = ref(0);
const loading = ref(false); const loading = ref(false);
...@@ -57,7 +58,7 @@ const activityList: Ref<ActivityItem[]> = ref([]); ...@@ -57,7 +58,7 @@ const activityList: Ref<ActivityItem[]> = ref([]);
const skeLoading = ref(false); const skeLoading = ref(false);
const onLoad = () => { const onLoad = () => {
current.value ++ current.value++;
offset.value = (current.value - 1) * LIST_SIZE; offset.value = (current.value - 1) * LIST_SIZE;
if (offset.value >= total.value) { if (offset.value >= total.value) {
finished.value = true; finished.value = true;
...@@ -69,10 +70,10 @@ const onLoad = () => { ...@@ -69,10 +70,10 @@ const onLoad = () => {
}; };
const fetchList = () => { const fetchList = () => {
skeLoading.value = true skeLoading.value = true;
queryActivityList({ limit: 4, offset: offset.value }).then((ret) => { queryActivityList({ limit: 4, offset: offset.value }).then((ret) => {
if (ret.code === 200) { if (ret.code === 200) {
skeLoading.value = false skeLoading.value = false;
total.value = ret.data.total; total.value = ret.data.total;
activityList.value = activityList.value.concat(ret.data.items); activityList.value = activityList.value.concat(ret.data.items);
loading.value = false; loading.value = false;
...@@ -85,4 +86,4 @@ const fetchList = () => { ...@@ -85,4 +86,4 @@ const fetchList = () => {
.title { .title {
font-size: 18px; font-size: 18px;
} }
</style> </style>
\ No newline at end of file
<template> <template>
<nav-bar :bangsBlock="true" /> <nav-bar :bangsBlock="true" />
<div class="register pt-5"> <div class="register pt-5">
<Icon <IconVue
name="icon-a-shanchu1" name="icon-a-shanchu1"
color="black" color="black"
size="20" size="20"
...@@ -144,7 +144,7 @@ import LoginButton from "./components/LoginButton/index.vue"; ...@@ -144,7 +144,7 @@ import LoginButton from "./components/LoginButton/index.vue";
import Check from "@/components/common/Check/index.vue"; import Check from "@/components/common/Check/index.vue";
import PhoneInput from "./components/PhoneInput/index.vue"; import PhoneInput from "./components/PhoneInput/index.vue";
import SlideValidator from "@/components/common/SlideValidator/index.vue"; import SlideValidator from "@/components/common/SlideValidator/index.vue";
import Icon from "@/components/common/Icon.vue"; import IconVue from "@/components/common/Icon.vue";
import notCheckedIcon from "@/assets/icons/not_checked.png"; import notCheckedIcon from "@/assets/icons/not_checked.png";
import checkedIcon from "@/assets/icons/checked.png"; import checkedIcon from "@/assets/icons/checked.png";
...@@ -193,7 +193,7 @@ export default defineComponent({ ...@@ -193,7 +193,7 @@ export default defineComponent({
Check, Check,
PhoneInput, PhoneInput,
SlideValidator, SlideValidator,
Icon, IconVue,
}, },
data() { data() {
return { return {
......
This diff is collapsed.
...@@ -6,7 +6,9 @@ ...@@ -6,7 +6,9 @@
@click="inputType === 1 ? (inputType = 2) : (inputType = 1)" @click="inputType === 1 ? (inputType = 2) : (inputType = 1)"
class="w-7 h-7 mx-2.5 text-center select-none focus:outline-none" class="w-7 h-7 mx-2.5 text-center select-none focus:outline-none"
> >
<i v-if="inputType === 1" class="iconfont text-primary text-xl">&#xe604;</i> <i v-if="inputType === 1" class="iconfont text-primary text-xl"
>&#xe604;</i
>
<i v-else class="iconfont text-primary text-xl">&#xe60d;</i> <i v-else class="iconfont text-primary text-xl">&#xe60d;</i>
</button> </button>
...@@ -30,13 +32,29 @@ ...@@ -30,13 +32,29 @@
<button <button
v-else v-else
@click="inputText.trim().length !== 0 && handleSend()" @click="inputText.trim().length !== 0 && handleSend()"
class="mx-2.5 px-4 py-1.5 flex items-center rounded-md text-center select-none focus:outline-none text-app-white" class="
mx-2.5
px-4
py-1.5
flex
items-center
rounded-md
text-center
select-none
focus:outline-none
text-app-white
"
style="background: rgb(7, 193, 99)" style="background: rgb(7, 193, 99)"
>发送</button> >
发送
</button>
</div> </div>
<!-- input menu --> <!-- input menu -->
<div v-show="showMenu" class="min-h-input-menu flex items-center px-8 text-sm text-subtle"> <div
v-show="showMenu"
class="min-h-input-menu flex items-center px-8 text-sm text-subtle"
>
<ChatInputAlbumVue /> <ChatInputAlbumVue />
<!-- <ChatInputCameraVue /> --> <!-- <ChatInputCameraVue /> -->
</div> </div>
...@@ -53,8 +71,7 @@ import ChatInputAlbumVue from "./ChatInputAlbum.vue"; ...@@ -53,8 +71,7 @@ import ChatInputAlbumVue from "./ChatInputAlbum.vue";
import ChatInputCameraVue from "./ChatInputCamera.vue"; import ChatInputCameraVue from "./ChatInputCamera.vue";
import { getFromId } from "@/store/appCallerStore"; import { getFromId } from "@/store/appCallerStore";
import { textInputStore } from "@/store/textInputStore"; import { textInputStore } from "@/store/textInputStore";
import { v4 as uuidv4 } from 'uuid' import { v4 as uuidv4 } from "uuid";
import Icon from "@/components/common/Icon.vue";
import { useRoute } from "vue-router"; import { useRoute } from "vue-router";
import { getUserMsg } from "@/utils/userMsg"; import { getUserMsg } from "@/utils/userMsg";
import { eRole } from "@/types/roleType"; import { eRole } from "@/types/roleType";
...@@ -68,7 +85,6 @@ export default defineComponent({ ...@@ -68,7 +85,6 @@ export default defineComponent({
ChatInputTextVue, ChatInputTextVue,
ChatInputAlbumVue, ChatInputAlbumVue,
ChatInputCameraVue, ChatInputCameraVue,
Icon,
}, },
setup(props) { setup(props) {
...@@ -78,7 +94,7 @@ export default defineComponent({ ...@@ -78,7 +94,7 @@ export default defineComponent({
voice, voice,
} }
const target = route.query.targetId as string const target = route.query.targetId as string;
/** 输入框类型,文本 or 语音 */ /** 输入框类型,文本 or 语音 */
const inputType = ref(InputType.text); const inputType = ref(InputType.text);
...@@ -94,7 +110,11 @@ export default defineComponent({ ...@@ -94,7 +110,11 @@ export default defineComponent({
type: ChatMessageTypes; type: ChatMessageTypes;
content: MessageContent; content: MessageContent;
}) => { }) => {
messageStore.sendMessage({ type: payload.type, content: payload.content, target: route.query.targetId as string }); messageStore.sendMessage({
type: payload.type,
content: payload.content,
target: route.query.targetId as string,
});
textInputStore.clearTextMessage(); textInputStore.clearTextMessage();
}; };
...@@ -117,7 +137,7 @@ export default defineComponent({ ...@@ -117,7 +137,7 @@ export default defineComponent({
// }) // })
const handleSend = () => { const handleSend = () => {
console.log('handle send'); console.log("handle send");
const isStaff = getUserMsg()?.role === eRole.staff; const isStaff = getUserMsg()?.role === eRole.staff;
const isUser = getUserMsg()?.role === eRole.user; const isUser = getUserMsg()?.role === eRole.user;
...@@ -127,43 +147,43 @@ export default defineComponent({ ...@@ -127,43 +147,43 @@ export default defineComponent({
*/ */
messageStore.displayNewMessage({ messageStore.displayNewMessage({
content: { content: {
content: inputText.value content: inputText.value,
}, },
from: getFromId() as string, from: getFromId() as string,
target: target, target: target,
uuid: uuidv4(), uuid: uuidv4(),
state: 'success', state: "success",
datetime: new Date().getTime(), datetime: new Date().getTime(),
type: ChatMessageTypes.robot, type: ChatMessageTypes.robot,
}) });
ChatDBService.getInstance().handleEveryReceive({ ChatDBService.getInstance().handleEveryReceive({
msg: { msg: {
content: { content: {
content: inputText.value content: inputText.value,
}, },
from: getFromId() as string, from: getFromId() as string,
target: target, target: target,
uuid: uuidv4(), uuid: uuidv4(),
state: 'success', state: "success",
datetime: new Date().getTime(), datetime: new Date().getTime(),
type: ChatMessageTypes.robot, type: ChatMessageTypes.robot,
}, },
masterId: getFromId() as string, masterId: getFromId() as string,
isChattingWithTargetId: true, isChattingWithTargetId: true,
isRoboot: true, isRoboot: true,
}) });
textInputStore.clearTextMessage(); textInputStore.clearTextMessage();
} else { } else {
sendChatMessage({ type: 1, content: { content: inputText.value } }) sendChatMessage({ type: 1, content: { content: inputText.value } });
} }
} };
return { return {
inputType, inputType,
inputText, inputText,
showMenu, showMenu,
sendChatMessage, sendChatMessage,
handleSend handleSend,
// showReceiptInput, // showReceiptInput,
}; };
}, },
...@@ -173,4 +193,4 @@ export default defineComponent({ ...@@ -173,4 +193,4 @@ export default defineComponent({
.min-h-input-bar { .min-h-input-bar {
min-height: 60px; min-height: 60px;
} }
</style> </style>
\ No newline at end of file
<template> <template>
<div class="describe mx-auto"> <div class="describe mx-auto">
<div class="box flex p-5"> <div class="box flex p-5">
<Icon name="icon-chanpinjieshao" size="30" color="RGBA(62, 79, 175, 1)" /> <IconVue
name="icon-chanpinjieshao"
size="30"
color="RGBA(62, 79, 175, 1)"
/>
<div class="ml-3"> <div class="ml-3">
<div class="title">产品介绍</div> <div class="title">产品介绍</div>
<div class="content whitespace-pre-wrap mt-2.5"> <div class="content whitespace-pre-wrap mt-2.5">
{{products}} {{ products }}
</div> </div>
</div> </div>
</div> </div>
<div class="box flex p-5"> <div class="box flex p-5">
<Icon name="icon-chanpintedian" size="30" color="RGBA(62, 79, 175, 1)" /> <IconVue
name="icon-chanpintedian"
size="30"
color="RGBA(62, 79, 175, 1)"
/>
<div class="ml-3"> <div class="ml-3">
<div class="title">产品特点</div> <div class="title">产品特点</div>
<div class="content whitespace-pre-wrap mt-2.5"> <div class="content whitespace-pre-wrap mt-2.5">
{{features}} {{ features }}
</div> </div>
</div> </div>
</div> </div>
<div class="box flex p-5"> <div class="box flex p-5">
<Icon name="icon-shiyongkehu" size="30" color="RGBA(62, 79, 175, 1)" /> <IconVue name="icon-shiyongkehu" size="30" color="RGBA(62, 79, 175, 1)" />
<div class="ml-3"> <div class="ml-3">
<div class="title">适用客户</div> <div class="title">适用客户</div>
<div class="content whitespace-pre-wrap mt-2.5"> <div class="content whitespace-pre-wrap mt-2.5">
{{apply_to}} {{ apply_to }}
</div> </div>
</div> </div>
</div> </div>
<div class="box flex p-5"> <div class="box flex p-5">
<Icon name="icon-shenqingtiaojian" size="30" color="RGBA(62, 79, 175, 1)" /> <IconVue
name="icon-shenqingtiaojian"
size="30"
color="RGBA(62, 79, 175, 1)"
/>
<div class="ml-3"> <div class="ml-3">
<div class="title">申请条件</div> <div class="title">申请条件</div>
<div class="content whitespace-pre-wrap mt-2.5"> <div class="content whitespace-pre-wrap mt-2.5">
{{apply_cond}} {{ apply_cond }}
</div> </div>
</div> </div>
</div> </div>
<div class="box flex p-5"> <div class="box flex p-5">
<Icon name="icon-tijiaotiaojian" size="30" color="RGBA(62, 79, 175, 1)" /> <IconVue
name="icon-tijiaotiaojian"
size="30"
color="RGBA(62, 79, 175, 1)"
/>
<div class="ml-3"> <div class="ml-3">
<div class="title">提交条件</div> <div class="title">提交条件</div>
<div class="content whitespace-pre-wrap mt-2.5"> <div class="content whitespace-pre-wrap mt-2.5">
{{submit_cond}} {{ submit_cond }}
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import Icon from "@/components/common/Icon.vue"; import IconVue from "@/components/common/Icon.vue";
import { onMounted } from "@vue/runtime-core"; import { onMounted } from "@vue/runtime-core";
const props = defineProps({ const props = defineProps({
products:{ products: {
type: String, type: String,
required:true, required: true,
}, },
features:{ features: {
type: String, type: String,
required:true, required: true,
}, },
apply_to:{ apply_to: {
type: String, type: String,
required:true, required: true,
}, },
apply_cond:{ apply_cond: {
type: String, type: String,
required:true, required: true,
}, },
submit_cond:{ submit_cond: {
type: String, type: String,
required:true, required: true,
}, },
}) });
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.describe { .describe {
...@@ -100,4 +115,4 @@ const props = defineProps({ ...@@ -100,4 +115,4 @@ const props = defineProps({
line-height: 24px; line-height: 24px;
} }
} }
</style> </style>
\ No newline at end of file
This diff is collapsed.
<template> <template>
<div <div
class=" h-14 flex bg-tab-bar-bg items-center mx-2.5 overflow-hidden py-3" class="h-14 flex bg-tab-bar-bg items-center mx-2.5 overflow-hidden py-3"
style="border-radius: 19px" style="border-radius: 19px"
> >
<div class="flex-row flex justify-around w-full h-full"> <div class="flex-row flex justify-around w-full h-full">
...@@ -15,7 +15,9 @@ ...@@ -15,7 +15,9 @@
> >
<TabItem <TabItem
:tabName="item.name" :tabName="item.name"
:iconName="activeTabRouteName === item.routeName ? item.icon : item.icon1" :iconName="
activeTabRouteName === item.routeName ? item.icon : item.icon1
"
:active="activeTabRouteName === item.routeName" :active="activeTabRouteName === item.routeName"
/> />
</div> </div>
...@@ -24,14 +26,12 @@ ...@@ -24,14 +26,12 @@
</template> </template>
<script lang="ts"> <script lang="ts">
import Icon from "@/components/common/Icon.vue";
import TabItem from "./TabItem.vue"; import TabItem from "./TabItem.vue";
import tabList from "../../tabList"; import tabList from "../../tabList";
import { defineComponent } from "vue"; import { defineComponent } from "vue";
export default defineComponent({ export default defineComponent({
components: { components: {
Icon,
TabItem, TabItem,
}, },
props: ["list", "activeTabRouteName"], props: ["list", "activeTabRouteName"],
...@@ -115,4 +115,4 @@ export default defineComponent({ ...@@ -115,4 +115,4 @@ export default defineComponent({
height: 22px; height: 22px;
margin: 6px 0 0 58px; margin: 6px 0 0 58px;
} }
</style> </style>
\ No newline at end of file
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
<div class="outer1 flex-col"> <div class="outer1 flex-col">
<div class="box2 flex-row justify-between"> <div class="box2 flex-row justify-between">
<div class="flex items-center"> <div class="flex items-center">
<icon <IconVue
class="icon2" class="icon2"
name="icon-gouxuanyangshi" name="icon-gouxuanyangshi"
color="#A7B2E3" color="#A7B2E3"
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
<span class="word2">中低风险</span> <span class="word2">中低风险</span>
</div> </div>
<div class="flex items-center"> <div class="flex items-center">
<icon <IconVue
class="icon2" class="icon2"
name="icon-gouxuanyangshi" name="icon-gouxuanyangshi"
color="#A7B2E3" color="#A7B2E3"
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
<span class="word3">风格稳健</span> <span class="word3">风格稳健</span>
</div> </div>
<div class="flex items-center"> <div class="flex items-center">
<icon <IconVue
class="icon2" class="icon2"
name="icon-gouxuanyangshi" name="icon-gouxuanyangshi"
color="#A7B2E3" color="#A7B2E3"
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
<script lang="ts"> <script lang="ts">
import { defineComponent } from "vue"; import { defineComponent } from "vue";
import Icon from "@/components/common/Icon.vue"; import IconVue from "@/components/common/Icon.vue";
import FnsCard3 from "@/components/FnsCard3/index.vue"; import FnsCard3 from "@/components/FnsCard3/index.vue";
import GroupTitle from "@/components/GroupTitle/index.vue"; import GroupTitle from "@/components/GroupTitle/index.vue";
import MainFnsSwip from "./Components/MainFnsSwip/index.vue"; import MainFnsSwip from "./Components/MainFnsSwip/index.vue";
...@@ -60,7 +60,7 @@ import NavBar from "@/components/NavBar/index.vue"; ...@@ -60,7 +60,7 @@ import NavBar from "@/components/NavBar/index.vue";
export default defineComponent({ export default defineComponent({
components: { components: {
Icon, IconVue,
FnsCard3, FnsCard3,
MainFnsSwip, MainFnsSwip,
GroupTitle, GroupTitle,
...@@ -86,4 +86,4 @@ export default defineComponent({ ...@@ -86,4 +86,4 @@ export default defineComponent({
.mainfnsswip { .mainfnsswip {
margin-top: -130px; margin-top: -130px;
} }
</style> </style>
\ No newline at end of file
...@@ -4,20 +4,31 @@ ...@@ -4,20 +4,31 @@
v-for="app in appList" v-for="app in appList"
:key="app.name" :key="app.name"
class="w-1/4 mb-5 text-center" class="w-1/4 mb-5 text-center"
@click="app.cb && app.cb() || $router.push({ name: app.routerName })" @click="(app.cb && app.cb()) || $router.push({ name: app.routerName })"
> >
<div class="w-16 h-16 bg-white app-container mx-auto flex items-center justify-center"> <div
<Icon :name="app.icon" :color="app.color" size="25" /> class="
w-16
h-16
bg-white
app-container
mx-auto
flex
items-center
justify-center
"
>
<IconVue :name="app.icon" :color="app.color" size="25" />
</div> </div>
<div class="mt-2.5 app-name">{{ app.name }}</div> <div class="mt-2.5 app-name">{{ app.name }}</div>
</div> </div>
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import Icon from "@/components/common/Icon.vue"; import IconVue from "@/components/common/Icon.vue";
import { defineComponent } from "vue"; import { defineComponent } from "vue";
export default defineComponent({ export default defineComponent({
components: { Icon }, components: { IconVue },
props: ["appList"], props: ["appList"],
}); });
</script> </script>
...@@ -32,4 +43,4 @@ export default defineComponent({ ...@@ -32,4 +43,4 @@ export default defineComponent({
font-weight: 400; font-weight: 400;
color: #1b1f37; color: #1b1f37;
} }
</style> </style>
\ No newline at end of file
...@@ -9,42 +9,54 @@ ...@@ -9,42 +9,54 @@
class="mx-3.5 wrap11" class="mx-3.5 wrap11"
> >
<template #left-icon> <template #left-icon>
<Icon name="icon-tongzhi" color="#1B1F37" class="mr-2" /> <IconVue name="icon-tongzhi" color="#1B1F37" class="mr-2" />
</template> </template>
<van-swipe vertical class="notice-swipe" :autoplay="3000" :show-indicators="false"> <van-swipe
vertical
class="notice-swipe"
:autoplay="3000"
:show-indicators="false"
>
<van-swipe-item <van-swipe-item
class="overflow-ellipsis overflow-hidden" class="overflow-ellipsis overflow-hidden"
v-for="item in list" v-for="item in list"
:key="item.uuid" :key="item.uuid"
> >
<div @click="$router.push({path: '/msgDetail', query: {info: JSON.stringify(item)}})"> <div
{{ item.content }} @click="
</div> $router.push({
path: '/msgDetail',
query: { info: JSON.stringify(item) },
})
"
>
{{ item.content }}
</div>
</van-swipe-item> </van-swipe-item>
</van-swipe> </van-swipe>
</van-notice-bar> </van-notice-bar>
</template> </template>
<script lang="ts"> <script lang="ts">
import Icon from "@/components/common/Icon.vue"; import IconVue from "@/components/common/Icon.vue";
import Vue, { defineComponent } from "vue"; import Vue, { defineComponent } from "vue";
import { NoticeBar, Swipe, SwipeItem } from "vant"; import { NoticeBar, Swipe, SwipeItem } from "vant";
export default defineComponent({ export default defineComponent({
components: { components: {
Icon, IconVue,
"van-swipe": Swipe, "van-swipe": Swipe,
"van-swipe-item": SwipeItem, "van-swipe-item": SwipeItem,
}, },
props: ['list'], props: ["list"],
setup() { setup() {
const goPage = () => { const goPage = () => {
console.log(1111) console.log(1111);
} };
return { return {
goPage goPage,
} };
} },
}); });
</script> </script>
<style> <style>
...@@ -86,4 +98,4 @@ export default defineComponent({ ...@@ -86,4 +98,4 @@ export default defineComponent({
white-space: nowrap; white-space: nowrap;
line-height: 17px; line-height: 17px;
} }
</style> </style>
\ No newline at end of file
...@@ -15,18 +15,25 @@ ...@@ -15,18 +15,25 @@
title="热门产品" title="热门产品"
@click="$router.push({ name: 'Loan' })" @click="$router.push({ name: 'Loan' })"
/> />
<Skeleton :loading="skeLoading" :row="3" class="mt-2">
<LoanCard <div class="mt-2" v-if="skeLoading"></div>
v-if="!isReviewMode && product_name" <Skeleton :loading="skeLoading" :row="3">
:max_amount="max_amount" <div>
:product_name="product_name" <LoanCard
:features="features" v-if="!isReviewMode && product_name"
:inst_name="inst_name" :max_amount="max_amount"
class="mt-5" :product_name="product_name"
@click=" :features="features"
$router.push({ name: 'LoanDetail', params: { uuid: hotLoanUuid } }) :inst_name="inst_name"
" class="mt-5"
/> @click="
$router.push({
name: 'LoanDetail',
params: { uuid: hotLoanUuid },
})
"
/>
</div>
</Skeleton> </Skeleton>
<group-title <group-title
class="mt-7" class="mt-7"
...@@ -41,7 +48,7 @@ ...@@ -41,7 +48,7 @@
title="精彩活动" title="精彩活动"
@click="$router.push({ name: 'ActivityList' })" @click="$router.push({ name: 'ActivityList' })"
/> />
<Skeleton :loading="skeLoading" :row="3" class="mt-2"> <Skeleton :loading="skeLoading" :row="3">
<div class="mx-5 mt-5 text-center"> <div class="mx-5 mt-5 text-center">
<img <img
class="w-83 h-22 object-cover object-center rounded-lg inline-block" class="w-83 h-22 object-cover object-center rounded-lg inline-block"
...@@ -73,7 +80,6 @@ import Banner from "./Banner/Banner.vue"; ...@@ -73,7 +80,6 @@ import Banner from "./Banner/Banner.vue";
import Navbar from "@/components/NavBar/index.vue"; import Navbar from "@/components/NavBar/index.vue";
import AppList from "./AppList/index.vue"; import AppList from "./AppList/index.vue";
import appList from "./appList"; import appList from "./appList";
import Icon from "@/components/common/Icon.vue";
import Notify from "./Notify/index.vue"; import Notify from "./Notify/index.vue";
import GroupTitle from "@/components/GroupTitle/index.vue"; import GroupTitle from "@/components/GroupTitle/index.vue";
import FnsCard from "./FnsCard/index.vue"; import FnsCard from "./FnsCard/index.vue";
...@@ -115,7 +121,6 @@ export default defineComponent({ ...@@ -115,7 +121,6 @@ export default defineComponent({
components: { components: {
Banner, Banner,
AppList, AppList,
Icon,
Notify, Notify,
GroupTitle, GroupTitle,
Navbar, Navbar,
......
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
<span class="word35">灵活快捷</span> <span class="word35">灵活快捷</span>
</div> </div>
</div> --> </div> -->
<LoanHotSwipe :loanMode="mode" class=" absolute top-0 bottom-0" /> <LoanHotSwipe :loanMode="mode" class="absolute top-0 bottom-0" />
</div> </div>
<!-- 热门产品 --> <!-- 热门产品 -->
<!-- <GroupTitle title="热门产品" class="mt-2.5" v-if="count" iconName="" /> --> <!-- <GroupTitle title="热门产品" class="mt-2.5" v-if="count" iconName="" /> -->
...@@ -71,7 +71,7 @@ ...@@ -71,7 +71,7 @@
<GroupTitle <GroupTitle
title="产品精选" title="产品精选"
v-if="state.allProductList" v-if="state.allProductList"
class=" mt-24" class="mt-24"
@seeMore="$router.push({ name: 'LoanList', params: { mode: mode } })" @seeMore="$router.push({ name: 'LoanList', params: { mode: mode } })"
/> />
<Skeleton <Skeleton
...@@ -102,7 +102,8 @@ ...@@ -102,7 +102,8 @@
v-if="src" v-if="src"
@click="$router.push({ name: 'ActivityList' })" @click="$router.push({ name: 'ActivityList' })"
/> />
<Skeleton :loading="skeLoading" :row="3" class="mt-2"> <div class="mt-2" v-if="skeLoading"></div>
<Skeleton :loading="skeLoading" :row="3">
<img <img
class="mx-5 w-83 h-22 mt-5 rounded-lg mx-auto" class="mx-5 w-83 h-22 mt-5 rounded-lg mx-auto"
:src="src" :src="src"
...@@ -213,20 +214,15 @@ const fetchList = () => { ...@@ -213,20 +214,15 @@ const fetchList = () => {
limit: 4, limit: 4,
loan_type: mode.value, loan_type: mode.value,
offset: 0, offset: 0,
product_status:eProductStatus.normal product_status: eProductStatus.normal,
}).then((ret) => { }).then((ret) => {
if (ret.code === 200) { if (ret.code === 200) {
skeLoading.value = false; skeLoading.value = false;
const promiseList = [] as Promise<any>[] const promiseList = [] as Promise<any>[];
ret.data.uuid.map((uuid) => { ret.data.uuid.map((uuid) => {
const promise = queryLoanProductInfo({ uuid }).then((ret) => { const promise = queryLoanProductInfo({ uuid }).then((ret) => {
const { const { max_amount, inst_name, uuid, features, product_name } =
max_amount, ret.data || {};
inst_name,
uuid,
features,
product_name,
} = ret.data;
count.value = count.value + 1; count.value = count.value + 1;
return { return {
max_amount, max_amount,
...@@ -234,15 +230,15 @@ const fetchList = () => { ...@@ -234,15 +230,15 @@ const fetchList = () => {
features, features,
inst_name, inst_name,
uuid, uuid,
} };
});
promiseList.push(promise);
});
Promise.all(promiseList).then((list) => {
list.forEach((i) => {
state.allProductList.push(i);
}); });
promiseList.push(promise)
}); });
Promise.all(promiseList).then(list=>{
list.forEach(i=>{
state.allProductList.push(i)
})
})
} }
}); });
count.value = 0; count.value = 0;
...@@ -273,4 +269,4 @@ onMounted(() => { ...@@ -273,4 +269,4 @@ onMounted(() => {
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
@import "./index.less"; @import "./index.less";
</style> </style>
\ No newline at end of file
...@@ -2,13 +2,25 @@ ...@@ -2,13 +2,25 @@
<div class="pb-5 min-h-screen overflow-scroll mb-8"> <div class="pb-5 min-h-screen overflow-scroll mb-8">
<nav-bar <nav-bar
title="网点服务" title="网点服务"
:style="{ 'background-color': '#2C3C92 !important', 'color': 'white' }" :style="{ 'background-color': '#2C3C92 !important', color: 'white' }"
iconColor="#FFFFFF" iconColor="#FFFFFF"
/> />
<!-- 当前网点 --> <!-- 当前网点 -->
<div class="px-4 bg-branch-deep-blue h-40 mb-28 bg-app-branch-deep-blue flow-root"> <div
<Skeleton :row="3" :loading="result.loading" class="mt-5"> class="
<div class="detail text-white text-sm pl-1 pt-8">提前预约网点 可享优先办理</div> px-4
bg-branch-deep-blue
h-40
mb-28
bg-app-branch-deep-blue
flow-root
"
>
<div class="mt-5" v-if="result.loading"></div>
<Skeleton :row="3" :loading="result.loading">
<div class="detail text-white text-sm pl-1 pt-8">
提前预约网点 可享优先办理
</div>
<branch <branch
:changeable="false" :changeable="false"
:name="result.topItem.name" :name="result.topItem.name"
...@@ -23,9 +35,12 @@ ...@@ -23,9 +35,12 @@
class="mt-3 shadow-sm z-20 relative" class="mt-3 shadow-sm z-20 relative"
/> />
</Skeleton> </Skeleton>
<Skeleton :row="3" :loading="result.loading" class="mt-12"> <div class="mt-12" v-if="result.loading"></div>
<Skeleton :row="3" :loading="result.loading">
<div class="overflow-scroll -mt-8 pb-5 z-10 relative"> <div class="overflow-scroll -mt-8 pb-5 z-10 relative">
<p class="mt-12 mb-3 text-base font-semibold text-gray-800">附近的网点</p> <p class="mt-12 mb-3 text-base font-semibold text-gray-800">
附近的网点
</p>
<branch <branch
v-for="(item, index) in result.lists" v-for="(item, index) in result.lists"
:key="index" :key="index"
...@@ -44,23 +59,27 @@ ...@@ -44,23 +59,27 @@
</div> </div>
</Skeleton> </Skeleton>
<!-- 附近网点 --> <!-- 附近网点 -->
<Skeleton :row="3" :loading="result.loading" class="mt-5 mb-10"></Skeleton> <div class="mt-5" v-if="result.loading"></div>
<Skeleton :row="3" :loading="result.loading"></Skeleton>
<Skeleton :row="3" :loading="result.loading" class="mt-10"></Skeleton> <div class="mb-10" v-if="result.loading"></div>
<Skeleton :row="3" :loading="result.loading" class="mt-10"></Skeleton>
<div class="mt-10" v-if="result.loading"></div>
<Skeleton :row="3" :loading="result.loading"></Skeleton>
<div class="mt-10" v-if="result.loading"></div>
<Skeleton :row="3" :loading="result.loading"></Skeleton>
</div> </div>
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent, reactive } from 'vue' import { defineComponent, reactive } from "vue";
import NavBar from "@/components/NavBar/index.vue" import NavBar from "@/components/NavBar/index.vue";
import Branch from '@/components/Mine/Branch/branch.vue' import Branch from "@/components/Mine/Branch/branch.vue";
import AddressService from '@/service/AddressService/index' import AddressService from "@/service/AddressService/index";
import { iNearbyOutLet } from "@/service/AddressService/types" import { iNearbyOutLet } from "@/service/AddressService/types";
import { Skeleton } from 'vant' import { Skeleton } from "vant";
const addressService = new AddressService() const addressService = new AddressService();
export default defineComponent({ export default defineComponent({
components: { NavBar, Branch, Skeleton }, components: { NavBar, Branch, Skeleton },
...@@ -69,26 +88,27 @@ export default defineComponent({ ...@@ -69,26 +88,27 @@ export default defineComponent({
topItem: {} as iNearbyOutLet, topItem: {} as iNearbyOutLet,
lists: [] as iNearbyOutLet[], lists: [] as iNearbyOutLet[],
loading: false, loading: false,
}) });
const getAddressList = () => { const getAddressList = () => {
result.loading = true; result.loading = true;
addressService.getNearby({ addressService
bank_code: Number(process.env.VUE_APP_BANK_CODE), .getNearby({
number: 4, bank_code: Number(process.env.VUE_APP_BANK_CODE),
}).then(res => { number: 4,
result.loading = false; })
result.topItem = res.data[0] .then((res) => {
result.lists = res.data.slice(1) result.loading = false;
}) result.topItem = res.data[0];
} result.lists = res.data.slice(1);
getAddressList() });
};
getAddressList();
return { return {
result, result,
} };
} },
}) });
</script> </script>
<style scoped> <style scoped></style>
</style>
\ No newline at end of file
<template> <template>
<div class="min-h-screen" style="background:#F8F8FA"> <div class="min-h-screen" style="background: #f8f8fa">
<!-- top --> <!-- top -->
<div class="top bg-center bg-no-repeat bg-cover"> <div class="top bg-center bg-no-repeat bg-cover">
<div class="w-full text-center text-white text-base pt-14">我的</div> <div class="w-full text-center text-white text-base pt-14">我的</div>
...@@ -7,7 +7,9 @@ ...@@ -7,7 +7,9 @@
<div class="mt-8 ml-5"> <div class="mt-8 ml-5">
<img :src="avatarUrl" class="w-12 h-12 inline-block object-contain" /> <img :src="avatarUrl" class="w-12 h-12 inline-block object-contain" />
<div class="text-white ml-3 inline-block"> <div class="text-white ml-3 inline-block">
<span v-if="isLogin">{{ filter.filterPhone(userMsg?.userInfo.phone) }}</span> <span v-if="isLogin">{{
filter.filterPhone(userMsg?.userInfo.phone)
}}</span>
<span v-else>未登录</span> <span v-else>未登录</span>
</div> </div>
</div> </div>
...@@ -16,7 +18,12 @@ ...@@ -16,7 +18,12 @@
@click="$router.push('setting')" @click="$router.push('setting')"
> >
<span class="text-sm leading-8 pr-2 pl-4 text-white">个人中心</span> <span class="text-sm leading-8 pr-2 pl-4 text-white">个人中心</span>
<icon name="icon-gengduo" color="#FFFFFF" size="14" class="my-auto pr-3" /> <IconVue
name="icon-gengduo"
color="#FFFFFF"
size="14"
class="my-auto pr-3"
/>
</div> </div>
</div> </div>
</div> </div>
...@@ -41,9 +48,10 @@ ...@@ -41,9 +48,10 @@
title="我的网点" title="我的网点"
@seeMore="$router.push('branch')" @seeMore="$router.push('branch')"
class="mt-5" class="mt-5"
:iconName="(isUser || !isLogin) ? 'icon-gengduo' : ''" :iconName="isUser || !isLogin ? 'icon-gengduo' : ''"
/> />
<Skeleton :loading="state.loading" :row="4" class="mt-2"> <div class="mt-2" v-if="state.loading"></div>
<Skeleton :loading="state.loading" :row="4">
<branch <branch
class="mt-3 mx-5" class="mt-3 mx-5"
v-if="state.branchinfo || !isUser" v-if="state.branchinfo || !isUser"
...@@ -62,49 +70,49 @@ ...@@ -62,49 +70,49 @@
</template> </template>
<script lang="ts"> <script lang="ts">
import { computed, defineComponent, onMounted, reactive, ref } from "vue" import { computed, defineComponent, onMounted, reactive, ref } from "vue";
import Icon from "@/components/common/Icon.vue" import IconVue from "@/components/common/Icon.vue";
import Service from '@/components/Mine/Service/index.vue' import Service from "@/components/Mine/Service/index.vue";
import Branch from '@/components/Mine/Branch/branch.vue' import Branch from "@/components/Mine/Branch/branch.vue";
import GroupTitle from "@/components/GroupTitle/index.vue" import GroupTitle from "@/components/GroupTitle/index.vue";
import { getCurrentUserAvatarUrl, getUserMsg } from "@/utils/userMsg" import { getCurrentUserAvatarUrl, getUserMsg } from "@/utils/userMsg";
import filter from "@/filter" import filter from "@/filter";
import AddressService from "@/service/AddressService" import AddressService from "@/service/AddressService";
import { iNearbyOutLet } from "@/service/AddressService/types" import { iNearbyOutLet } from "@/service/AddressService/types";
import { Skeleton } from "vant" import { Skeleton } from "vant";
import { eRole } from "@/types/roleType" import { eRole } from "@/types/roleType";
export default defineComponent({ export default defineComponent({
name: "Mine", name: "Mine",
components: { components: {
Icon, IconVue,
Service, Service,
Branch, Branch,
GroupTitle, GroupTitle,
Skeleton Skeleton,
}, },
props: { props: {
iconName: { iconName: {
type: String, type: String,
default: '' default: "",
}, },
}, },
setup(props, context) { setup(props, context) {
const avatarUrl = getCurrentUserAvatarUrl() const avatarUrl = getCurrentUserAvatarUrl();
const state = reactive({ const state = reactive({
branchinfo: {} as iNearbyOutLet, branchinfo: {} as iNearbyOutLet,
loading: false, loading: false,
}) });
const userMsg = computed(() => { const userMsg = computed(() => {
return getUserMsg() return getUserMsg();
}) });
const isUser = computed(() => { const isUser = computed(() => {
console.log('isuser', userMsg?.value?.role == eRole.user); console.log("isuser", userMsg?.value?.role == eRole.user);
return userMsg?.value?.role == eRole.user return userMsg?.value?.role == eRole.user;
}) });
let branchinfo = reactive({} as iNearbyOutLet) let branchinfo = reactive({} as iNearbyOutLet);
onMounted(async () => { onMounted(async () => {
state.loading = true; state.loading = true;
...@@ -113,38 +121,40 @@ export default defineComponent({ ...@@ -113,38 +121,40 @@ export default defineComponent({
const ret = await AddressService.getInstance().getNearby({ const ret = await AddressService.getInstance().getNearby({
bank_code: Number(process.env.VUE_APP_BANK_CODE), bank_code: Number(process.env.VUE_APP_BANK_CODE),
number: 1, number: 1,
}) });
if (ret.code === 200) { if (ret.code === 200) {
state.branchinfo = ret.data[0]; state.branchinfo = ret.data[0];
} }
} else { } else {
const ret = await AddressService.getInstance().getStaffOutlet() const ret = await AddressService.getInstance().getStaffOutlet();
if (ret.code == 200) { if (ret.code == 200) {
const ssid = ret.data.ss_id const ssid = ret.data.ss_id;
AddressService.getInstance().getOutlets({ AddressService.getInstance()
id: ssid, .getOutlets({
level: 4 id: ssid,
}).then((res) => { level: 4,
if (res.code == 200) { })
state.branchinfo = res.data .then((res) => {
} if (res.code == 200) {
}) state.branchinfo = res.data;
}
});
} }
} }
console.log('info', branchinfo); console.log("info", branchinfo);
state.loading = false; state.loading = false;
}) });
return { return {
filter, filter,
state, state,
isUser, isUser,
userMsg, userMsg,
avatarUrl avatarUrl,
} };
}, },
computed: { computed: {
isLogin() { isLogin() {
return !!getUserMsg() return !!getUserMsg();
}, },
}, },
}); });
...@@ -154,4 +164,4 @@ export default defineComponent({ ...@@ -154,4 +164,4 @@ export default defineComponent({
.top { .top {
background-image: url(../../../assets/img/mine_bg.png); background-image: url(../../../assets/img/mine_bg.png);
} }
</style> </style>
\ No newline at end of file
...@@ -2,12 +2,30 @@ ...@@ -2,12 +2,30 @@
<div> <div>
<nav-bar title="个人中心" :style="{ 'background-color': '#F7F7FA' }" /> <nav-bar title="个人中心" :style="{ 'background-color': '#F7F7FA' }" />
<!-- 头像 --> <!-- 头像 -->
<div class="px-5 py-3 flex justify-between items-center border-b border-gray-200"> <div
class="
px-5
py-3
flex
justify-between
items-center
border-b border-gray-200
"
>
<span class="text-sm font-semibold">头像</span> <span class="text-sm font-semibold">头像</span>
<img :src="avatarUrl" class="w-12 h-12 rounded-full object-contain" /> <img :src="avatarUrl" class="w-12 h-12 rounded-full object-contain" />
</div> </div>
<!-- 手机号码 --> <!-- 手机号码 -->
<div class="px-5 py-5 flex justify-between items-center border-b border-gray-200"> <div
class="
px-5
py-5
flex
justify-between
items-center
border-b border-gray-200
"
>
<span class="text-sm font-semibold">手机号码</span> <span class="text-sm font-semibold">手机号码</span>
<span class="text-sm">{{ getPhone }}</span> <span class="text-sm">{{ getPhone }}</span>
</div> </div>
...@@ -18,9 +36,12 @@ ...@@ -18,9 +36,12 @@
<div class="text-sm font-semibold">设置密码</div> <div class="text-sm font-semibold">设置密码</div>
<div class="text-xs text-gray-400 pt-1">保障账户登录安全</div> <div class="text-xs text-gray-400 pt-1">保障账户登录安全</div>
</div> </div>
<div class="flex items-center text-xs h-1 text-right" @click="pushRouter"> <div
class="flex items-center text-xs h-1 text-right"
@click="pushRouter"
>
<span>设置</span> <span>设置</span>
<icon <IconVue
name="icon-gengduo" name="icon-gengduo"
color="#8E92A3" color="#8E92A3"
size="12" size="12"
...@@ -30,62 +51,71 @@ ...@@ -30,62 +51,71 @@
</div> </div>
</div> </div>
</div> </div>
<div @click="clickLogout" class="logout-btn flex items-center justify-center fixed">退出登录</div> <div
@click="clickLogout"
class="logout-btn flex items-center justify-center fixed"
>
退出登录
</div>
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent } from 'vue' import { defineComponent } from "vue";
import NavBar from "@/components/NavBar/index.vue" import NavBar from "@/components/NavBar/index.vue";
import Icon from "@/components/common/Icon.vue" import IconVue from "@/components/common/Icon.vue";
import { eAccountType } from "@/views/Auth/Login/types" import { eAccountType } from "@/views/Auth/Login/types";
import { deleteUserMsg, getCurrentUserAvatarUrl, getUserMsg } from '@/utils/userMsg' import {
import filter from "@/filter" deleteUserMsg,
import router from '@/router' getCurrentUserAvatarUrl,
import { userLogout } from '@/service/UserManagementService' getUserMsg,
} from "@/utils/userMsg";
import filter from "@/filter";
import router from "@/router";
import { userLogout } from "@/service/UserManagementService";
export default defineComponent({ export default defineComponent({
components: { NavBar, Icon }, components: { NavBar, IconVue },
data() { data() {
return { return {
role: '' role: "",
} };
}, },
computed: { computed: {
hasPassword(): eAccountType { hasPassword(): eAccountType {
return eAccountType.REG_NOPD return eAccountType.REG_NOPD;
}, },
getPhone() { getPhone() {
const phone = getUserMsg()?.userInfo.phone + '' const phone = getUserMsg()?.userInfo.phone + "";
var newphone = phone.replace(phone.substr(3, 5), "*****") var newphone = phone.replace(phone.substr(3, 5), "*****");
return newphone return newphone;
} },
}, },
setup() { setup() {
const avatarUrl = getCurrentUserAvatarUrl() const avatarUrl = getCurrentUserAvatarUrl();
const clickLogout = () => { const clickLogout = () => {
userLogout(); userLogout();
deleteUserMsg(); deleteUserMsg();
router.push({ router.push({
name: 'Home' name: "Home",
}) });
} };
return { return {
userMsg: getUserMsg(), userMsg: getUserMsg(),
filter, filter,
clickLogout, clickLogout,
avatarUrl avatarUrl,
} };
}, },
methods: { methods: {
pushRouter() { pushRouter() {
this.$router.push({ this.$router.push({
name: 'PwdSetting', name: "PwdSetting",
query: { query: {
phone: this.userMsg?.userInfo.phone phone: this.userMsg?.userInfo.phone,
} },
}) });
}, },
} },
}) });
</script> </script>
<style scoped> <style scoped>
...@@ -102,4 +132,4 @@ export default defineComponent({ ...@@ -102,4 +132,4 @@ export default defineComponent({
margin-left: 40px; margin-left: 40px;
bottom: 50px; bottom: 50px;
} }
</style> </style>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment