Commit 0cfc2f1e authored by lshan's avatar lshan

合并

parents f00a14c4 420f553a
......@@ -60,20 +60,27 @@ const fetchList = () => {
skeLoading.value = false;
ret.data.uuid.map((uuid) => {
queryLoanProductInfo({ uuid }).then((ret) => {
const { rate_lower, max_amount, max_date, inst_name, product_name } =
const { rate_lower, max_amount, max_date, inst_name, product_name,product_status } =
ret.data;
state.hotProductList.push({
rate_lower,
max_amount,
max_date,
inst_name,
product_name,
uuid,
});
console.log('status',product_status);
if( product_status == 3){
state.hotProductList.push({
rate_lower,
max_amount,
max_date,
inst_name,
product_name,
uuid,
product_status
});
}
});
});
}
});
console.log('pro',state.hotProductList);
};
</script>
......
......@@ -4,5 +4,6 @@ export interface hotProduct{
max_date:number
inst_name:string
product_name:string,
uuid:string
uuid:string,
product_status:number
}
\ No newline at end of file
......@@ -30,23 +30,41 @@
</div>
<div class="border border-blue-50"></div>
<!-- 营业时间 -->
<div class="mt-2 pb-3">
<template v-if="is_normal_work">
<icon
name="icon-yingye"
color="#1B1F37"
size="14"
class="inline-block align-middle mr-3"
/>
<span
v-if="isOpen"
class="text-app-blue border border-app-blue bg-indigo-100 text-xs px-2 rounded"
>营业中</span>
<span
v-else
class="text-app-blue border border-app-blue bg-indigo-100 text-xs px-2 rounded"
>休息中</span>
</template>
<div class="mt-2 pb-3 flex justify-between items-center">
<div class="overflow-hidden mr-6">
<div v-if="is_normal_work" class="mb-2">
<icon
name="icon-yingye"
color="#1B1F37"
size="14"
class="inline-block align-middle mr-3"
/>
<span
v-if="isOpen"
class="text-app-blue border border-app-blue bg-indigo-100 text-xs px-2 rounded"
>营业中</span>
<span
v-else
class="text-app-blue border border-app-blue bg-indigo-100 text-xs px-2 rounded"
>休息中</span>
</div>
<div v-if="is_normal_work">
<icon
name="icon-a-shijian"
color="#1B1F37"
size="14"
class="inline-block align-text-top mr-3"
/>
<span
class="text-gray-400 text-sm inline-block align-top"
>{{ weekDays }}{{ dailyTime }}</span>
</div>
<template v-else>
<!-- <div class="text-red">{{ error }}</div> -->
<div class="text-red">{{ errorReason }}</div>
</template>
</div>
<div class="text-right h-3">
<icon
name="icon-ditu"
......
<template>
<div class="navbar w-full" style="z-index: 300">
<div
class="h-full theBar flex items-center px-5 justify-center relative "
class="h-full theBar flex items-center px-5 justify-center relative"
style="background:#F7F7FA"
v-bind="$attrs"
>
......@@ -30,7 +30,7 @@
@click="$router.push(path)"
:color="iconColor"
/>
<div class="title">{{ title }}</div>
<div class="title whitespace-nowrap overflow-hidden overflow-ellipsis px-5">{{ title }}</div>
</div>
</div>
<div class="some-block" v-if="occupyPosition"></div>
......
import { reactive } from "vue"
import { eLoanMode } from "@/views/withMenu/Loan/types"
export const loanMode = {
state: reactive({
mode: eLoanMode.personal
}),
setModeAction(newV: eLoanMode) {
this.state.mode = newV
console.log('newV',newV);
}
}
\ No newline at end of file
import { simpleItemInfo } from "@/views/withMenu/Loan/types"
import { reactive } from "@vue/reactivity"
export const loanSearchState = reactive({ result: [] as simpleItemInfo[] })
export function setSearchResult(newV: simpleItemInfo) {
loanSearchState.result.push(newV)
}
export function clearSearchResult() {
loanSearchState.result = []
}
......@@ -51,7 +51,7 @@ export const getDisplayNamesFromAddress = async (
return addressList.map((item) => {
const msg = fullList.find((i: any) => i?.addr === item)
if (msg?.out_let_name) {
return msg?.out_let_name + '客服经理'
return msg?.out_let_name + msg.user_name
} else {
return msg?.phone
}
......
......@@ -58,6 +58,7 @@ import Icon from "@/components/common/Icon.vue";
import { useRoute } from "vue-router";
import { getUserMsg } from "@/utils/userMsg";
import { eRole } from "@/types/roleType";
import ChatDBService from "@/db/ChatDBService";
export default defineComponent({
props: {
......@@ -117,8 +118,7 @@ export default defineComponent({
console.log('handle send');
const isStaff = getUserMsg()?.role === eRole.staff;
const isUser = getUserMsg()?.role === eRole.user;
console.log(isStaff, 'isStaff');
if (isUser && props.serviceShowValue === "人工服务") {
messageStore.displayNewMessage({
content: {
......@@ -131,6 +131,21 @@ export default defineComponent({
datetime: new Date().getTime(),
type: ChatMessageTypes.robot,
})
ChatDBService.getInstance().handleEveryReceive({
msg: {
content: {
content: inputText.value
},
from: getFromId() as string,
target: target,
uuid: uuidv4(),
state: 'success',
datetime: new Date().getTime(),
type: ChatMessageTypes.robot,
},
masterId: getFromId() as string,
isChattingWithTargetId: true,
})
textInputStore.clearTextMessage();
} else {
sendChatMessage({ type: 1, content: { content: inputText.value } })
......
......@@ -233,28 +233,31 @@ export default defineComponent({
<span class="word8">产品详情</span>
<img class="label6" src={leftBg} />
</div>
<div class="block10 flex">
<div class="group6 flex-col">
<div class="wrap3 flex-col">
<span class="txt11">贷款机构</span>
<span class="info15">产品名称</span>
<span class="word20">贷款利率</span>
<span class="txt12">贷款额度</span>
<span class="txt13">贷款期限</span>
<span class="txt14">担保方式</span>
<div class=" bg-white mx-5 rounded-2xl overflow-hidden mt-5">
<div class="flex justify-between text-sm text-gray-800 border-b border-product-detail-bg">
<span class=" w-100 align-center bg-product-detail-bg py-4 inline-block text-center">贷款机构</span>
<span class=" w-235 py-4 pr-5 inline-block break-words text-right">{inst_name.value}</span>
</div>
</div>
<div class="section4 flex-row">
<div class="mod1 flex-col" />
<div class="mod2 flex-col w-full text-right">
<span class="info8">{inst_name.value}</span>
<span class="info9">{product_name.value}</span>
<span class="info10">{rate_lower.value}%~{rate_upper.value}%</span>
<span class="info11">{min_amount.value}~{max_amount.value}</span>
<span class="word9">{min_date.value}个月~{max_date.value}个月</span>
<span class="info12">{filterGuaranteeType(guarantee_type.value)}</span>
<div class="flex justify-between text-sm text-gray-800 border-b border-product-detail-bg">
<span class=" w-100 align-center bg-product-detail-bg py-4 inline-block text-center">产品名称</span>
<span class=" w-235 py-4 pr-5 inline-block break-words text-right">{product_name.value}</span>
</div>
</div>
<div class="flex text-sm text-gray-800 border-b border-product-detail-bg justify-between">
<span class=" w-100 align-center bg-product-detail-bg py-4 inline-block text-center">贷款利率</span>
<span class=" w-235 py-4 pr-5 inline-block break-words text-right">{rate_lower.value}%~{rate_upper.value}%</span>
</div>
<div class="flex text-sm text-gray-800 border-b border-product-detail-bg justify-between">
<span class=" w-100 align-center bg-product-detail-bg py-4 inline-block text-center">贷款额度</span>
<span class=" w-235 py-4 pr-5 inline-block break-words text-right">{min_amount.value}~{max_amount.value}</span>
</div>
<div class="flex text-sm text-gray-800 border-b border-product-detail-bg justify-between">
<span class=" w-100 align-center bg-product-detail-bg py-4 inline-block text-center">贷款期限</span>
<span class=" w-235 py-4 pr-5 inline-block break-words text-right">{min_date.value}个月~{max_date.value}个月</span>
</div>
<div class="flex text-sm text-gray-800 border-b border-product-detail-bg justify-between">
<span class=" w-100 align-center bg-product-detail-bg py-4 inline-block text-center">担保方式</span>
<span class=" w-235 py-4 pr-5 inline-block break-words text-right">{filterGuaranteeType(guarantee_type.value)}</span>
</div>
</div>
<LoanDetailDescribe class=" mt-5" products={products.value} features={features.value} apply_to={apply_to.value} apply_cond={apply_cond.value} submit_cond={submit_cond.value} />
<div class="title mx-5 mt-5" >营业网点</div>
......@@ -294,6 +297,7 @@ export default defineComponent({
},
});
</script>
<style lang="less" scoped>
@import "./index.less";
.title {
......@@ -309,4 +313,11 @@ export default defineComponent({
font-weight: 600;
color: #ffffff;
}
.w-100{
width:100px;
}
.w-235{
width:235px;
}
</style>
\ No newline at end of file
......@@ -18,7 +18,7 @@
@load="onLoad"
>
<LoanCard
v-for="item in state.list"
v-for="item in state"
:key="item.value"
:max_amount="item.max_amount"
:product_name="item.product_name"
......@@ -67,9 +67,16 @@ import GroupTitle from "@/components/GroupTitle/index.vue";
import PopUp from "@/components/PopUp/index.vue";
import LoanFilter from "@/components/PopUpContent/LoanFilter/index.vue";
import LoanCard from "@/components/Loan/LoanCard/index.vue";
import { defineComponent, ref, computed, onMounted, reactive } from "vue";
import {
defineComponent,
ref,
computed,
onMounted,
reactive,
onUnmounted,
} from "vue";
import { queryDirectLoanReq } from "@/service/LoanProductService/index";
import { useRoute } from "vue-router";
import { useRoute, useRouter } from "vue-router";
import {
queryLoanProductList,
queryLoanProductInfo,
......@@ -78,6 +85,11 @@ import {
import { simpleItemInfo } from "@/views/withMenu/Loan/types";
import { iLoanProdcutItem } from "@/service/LoanProductService/type";
import { Skeleton } from "vant";
import {
loanSearchState,
setSearchResult,
clearSearchResult,
} from "@/store/loanSearchResultStore";
export default defineComponent({
components: {
......@@ -90,9 +102,20 @@ export default defineComponent({
},
setup() {
const mode = ref(+useRoute().params.mode);
onMounted(() => {
fetchList();
fetchBanks();
/* 状态为空时获取list */
if (loanSearchState.result.length == 0) {
fetchList();
fetchBanks();
}
});
onUnmounted(() => {
/* 返回Loan主页时需清空list */
if (useRoute().name === "Loan") {
clearSearchResult()
}
});
const onLoad = () => {
......@@ -112,8 +135,8 @@ export default defineComponent({
const loading = ref(false);
const finished = ref(false);
const total = ref(0);
let state = reactive({
list: [] as simpleItemInfo[],
const state = computed(() => {
return loanSearchState.result;
});
const bankList = computed(() => {
......@@ -136,7 +159,7 @@ export default defineComponent({
queryLoanProductInfo({ uuid }).then((ret) => {
const { max_amount, inst_name, uuid, features, product_name } =
ret.data;
state.list.push({
setSearchResult({
max_amount,
product_name,
features,
......@@ -158,6 +181,7 @@ export default defineComponent({
}
});
};
return {
mode,
state,
......@@ -262,10 +286,10 @@ export default defineComponent({
queryList() {
this.loading = true;
queryDirectLoanReq({
rate_lower: +this.reqParams.min!,
rate_upper: +this.reqParams.max!,
min_amount: +this.reqParams.min2!,
max_amount: +this.reqParams.max2!,
rate_lower: +this.reqParams.min! ? +this.reqParams.min! : 0,
rate_upper: +this.reqParams.max! ? +this.reqParams.max! : 1000,
min_amount: +this.reqParams.min2! ? +this.reqParams.min2! : 0,
max_amount: +this.reqParams.max2! ? +this.reqParams.max2! : 9999,
bank_code: this.reqParams.selectedBanks[0],
max_date: this.reqParams.selectedPerids[0]
? this.reqParams.selectedPerids[0].max_date
......@@ -281,19 +305,18 @@ export default defineComponent({
}).then((ret) => {
if (ret.code == 200) {
this.loading = false;
this.state.list = [];
const list = ret.data.items.map((item) => {
clearSearchResult();
ret.data.items.map((item) => {
const { max_amount, inst_name, uuid, features, product_name } =
item;
return {
setSearchResult({
max_amount,
product_name,
features,
inst_name,
uuid,
};
});
});
this.state.list = list;
}
});
},
......
......@@ -21,7 +21,7 @@
:features="features"
:inst_name="inst_name"
class="mt-5"
@click="$router.push({ name: 'LoanDetail', params: { uuid: uuid } })"
@click="$router.push({ name: 'LoanDetail', params: { uuid: hotLoanUuid } })"
/>
</Skeleton>
<group-title class="mt-7" title="精彩直播" />
......@@ -39,7 +39,7 @@
@click="
$router.push({
name: 'ActivityDetail',
params: { uuid: uuid },
params: { uuid: activityUuid },
})
"
/>
......@@ -121,11 +121,12 @@ export default defineComponent({
constants: {},
hotNews: [],
src: "",
uuid: "",
activityUuid: "",
max_amount: 0,
product_name: "",
features: "",
inst_name: "",
hotLoanUuid:""
};
},
mounted() {
......@@ -166,7 +167,7 @@ export default defineComponent({
if (ret.code === 200) {
this.skeLoading = false;
this.src = getImageSrcFromFileHash(ret.data.items[0]?.file_name);
this.uuid = ret.data.items[0]?.uuid;
this.activityUuid = ret.data.items[0]?.uuid;
}
},
async fetchLoanProductList() {
......@@ -179,9 +180,11 @@ export default defineComponent({
});
if (ret.code === 200) {
this.skeLoading = false;
this.uuid = ret.data.uuid[0];
const uuid = this.uuid;
queryLoanProductInfo({ uuid }).then((ret) => {
this.hotLoanUuid = ret.data.uuid[0];
const uuid = this.hotLoanUuid;
queryLoanProductInfo( {uuid} ).then((ret) => {
console.log('uuid',uuid);
if (ret.code === 200) {
this.max_amount = ret.data.max_amount;
this.inst_name = ret.data.inst_name;
......
......@@ -10,7 +10,7 @@
color:
eLoanMode.personal === mode ? 'rgba(62, 79, 175, 1)' : '',
}"
@click="setMode(eLoanMode.personal)"
@click="loanMode.setModeAction(eLoanMode.personal)"
>个人贷</span
>
<span
......@@ -18,7 +18,7 @@
:style="{
color: eLoanMode.company === mode ? 'rgba(62, 79, 175, 1)' : '',
}"
@click="setMode(eLoanMode.company)"
@click="loanMode.setModeAction(eLoanMode.company)"
>企业贷</span
>
</div>
......@@ -60,7 +60,7 @@
</div>
</div>
<!-- 热门贷款 -->
<GroupTitle title="热门贷款" class="mt-2.5" iconName="" />
<GroupTitle title="热门贷款" class="mt-2.5" v-if="count" iconName="" />
<LoanHotSwipe :loanMode="mode" class="mt-5" />
<!-- 非热门贷款 -->
<GroupTitle
......@@ -68,7 +68,12 @@
v-if="state.allProductList"
@seeMore="$router.push({ name: 'LoanList', params: { mode: mode } })"
/>
<Skeleton :row="3" :loading="skeLoading" style="margin-top: 20px" v-if="state.allProductList">
<Skeleton
:row="3"
:loading="skeLoading"
style="margin-top: 20px"
v-if="state.allProductList"
>
<LoanCard
v-for="item in state.allProductList"
:key="item.value"
......@@ -125,7 +130,13 @@ import GroupTitle from "@/components/GroupTitle/index.vue";
import HotNews from "@/components/HotNews/index.vue";
import { queryActivityList } from "@/service/ActivityService";
import { getImageSrcFromFileHash } from "@/service/FileService";
import { onMounted, PropType, reactive, watch } from "@vue/runtime-core";
import {
computed,
onMounted,
PropType,
reactive,
watch,
} from "@vue/runtime-core";
import { getNewsList } from "@/service/NewsService/index";
import { simpleItemInfo } from "./types";
import { Skeleton } from "vant";
......@@ -134,12 +145,10 @@ import {
queryLoanProductInfo,
queryLimit,
} from "@/service/LoanProductService";
const mode = ref(eLoanMode.personal);
import { loanMode } from "@/store/loanModeStore";
import { clearSearchResult } from "@/store/loanSearchResultStore"
let skeLoading = ref(false);
const setMode = (v: eLoanMode) => {
mode.value = v;
};
let state = reactive({ allProductList: [] as Array<simpleItemInfo> });
const src = ref("");
const uuid = ref("");
......@@ -150,12 +159,21 @@ const limit = reactive({
max_amount: "",
state: false,
});
const count = ref(0);
watch(mode, () => {
state.allProductList = [];
fetchList();
const mode = computed(() => {
return loanMode.state.mode;
});
watch(
() => loanMode.state.mode,
() => {
state.allProductList = [];
clearSearchResult();
fetchList();
}
);
const getNews = () => {
getNewsList({
limit: 2,
......@@ -177,30 +195,42 @@ const fetchActivityList = () => {
skeLoading.value = false;
};
const fetchList = () => {
// 取从四开始的贷款,即非热门贷款
// 取前7贷款产品遍历
skeLoading.value = true;
queryLoanProductList({
limit: 4,
limit: 7,
loan_type: mode.value,
offset: 3,
offset: 0,
}).then((ret) => {
if (ret.code === 200) {
skeLoading.value = false;
ret.data.uuid.map((uuid) => {
queryLoanProductInfo({ uuid }).then((ret) => {
const { max_amount, inst_name, uuid, features, product_name } =
ret.data;
state.allProductList.push({
const {
max_amount,
product_name,
features,
inst_name,
uuid,
});
features,
product_name,
product_status,
} = ret.data;
if (count.value < 4) {
if (product_status == 2) {
count.value = count.value + 1;
state.allProductList.push({
max_amount,
product_name,
features,
inst_name,
uuid,
});
}
}
});
});
}
});
count.value = 0;
};
const formatLimit = (limit: string): string => {
......
......@@ -10,5 +10,6 @@ export interface simpleItemInfo{
product_name:string,
features:string,
inst_name:string,
uuid:string
uuid:string,
product_status?:number
}
\ No newline at end of file
......@@ -27,8 +27,8 @@
<!-- 附近网点 -->
<Skeleton :row="3" :loading="result.loading" class="-mt-20 mb-10"></Skeleton>
<Skeleton :row="3" :loading="result.loading" class="mt-5">
<div class="px-4 overflow-scroll -mt-10">
<p class="mt-8 mb-5 text-base font-semibold text-gray-800">附近的网点</p>
<div class="px-4 overflow-scroll -mt-8">
<p class="mt-12 mb-3 text-base font-semibold text-gray-800">附近的网点</p>
<branch
v-for="(item, index) in result.lists"
:key="index"
......
......@@ -64,6 +64,7 @@ module.exports = {
"app-btn-disabled": "#E7E7E7",
"app-branch-deep-blue": "#2C3C92",
"branch-tab-bg":"#F9FBFF",
"product-detail-bg":"#EAF0FF",
black: colors.black,
white: colors.white,
gray: colors.coolGray,
......
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