推送市场信息模块

This commit is contained in:
PC-202311141343\Administrator
2025-08-18 16:30:52 +08:00
parent 46f12f9be4
commit 236c99ad92
18 changed files with 1542 additions and 67 deletions

View File

@@ -174,6 +174,11 @@
title: '提交成功',
icon: 'success'
})
uni.$emit('refreshMarketList');
setTimeout(() => {
uni.navigateBack(1);
}, 1500);
console.log('表单数据:', formData.value)
} catch (err) {
console.log('表单验证失败:', err)

View File

@@ -179,8 +179,10 @@
title: '提交成功',
icon: 'success'
})
uni.$emit('refreshMarketOpportunityList')
uni.navigateBack(1)
uni.$emit('refreshMarketList');
setTimeout(() => {
uni.navigateBack(1);
}, 1500);
} catch (err) {
console.log('表单验证失败:', err)
}
@@ -216,8 +218,10 @@ onMounted(() => {
title: '删除成功',
icon: 'success'
})
uni.$emit('refreshMarketOpportunityList')
uni.navigateBack(1)
uni.$emit('refreshMarketList');
setTimeout(() => {
uni.navigateBack(1);
}, 1500);
} catch (err) {
console.log('表单验证失败:', err)
}

View File

@@ -327,15 +327,12 @@ const dynamicPlaceholder = computed(() => {
// 当前选中的信息类型
const competitorLevelOneIndex = ref(0)
const competitorLevelOne = ref('基本信息')
const competitorLevelTwo = ref('资质情况')
// 当前选中的具体分类索引
const competitorLevelTwoIndex = ref(0)
// 当前显示的具体分类选项数组(动态切换 array2 / array3
const currentCompetitorLevelTwoArray = ref(array2.value)
// 当前选中的具体分类名称
const competitorLevelTwo = ref('')
// 表单引用 & 客户选择器引用
const formRef = ref(null)
@@ -374,6 +371,11 @@ const dynamicPlaceholder = computed(() => {
title: '提交成功',
icon: 'success'
})
uni.$emit('refreshMarketList');
setTimeout(() => {
uni.navigateBack(1);
}, 1500);
console.log('表单数据:', formData.value)
} catch (err) {
console.log('表单验证失败:', err)

View File

@@ -379,8 +379,10 @@ const dynamicPlaceholder = computed(() => {
title: '提交成功',
icon: 'success'
})
uni.$emit('refreshMarketOpportunityList')
uni.navigateBack(1)
uni.$emit('refreshMarketList');
setTimeout(() => {
uni.navigateBack(1);
}, 1500);
} catch (err) {
console.log('表单验证失败:', err)
}
@@ -448,8 +450,10 @@ const dynamicPlaceholder = computed(() => {
title: '删除成功',
icon: 'success'
})
uni.$emit('refreshMarketOpportunityList')
uni.navigateBack(1)
uni.$emit('refreshMarketList');
setTimeout(() => {
uni.navigateBack(1);
}, 1500);
} catch (err) {
console.log('表单验证失败:', err)
}

View File

@@ -0,0 +1,411 @@
<template>
<view class="con-body">
<view class="con-bg">
<!-- 头部 -->
<customHeader ref="customHeaderRef" :title="'市场信息查看'" :leftFlag="true" :rightFlag="true">
<template #right>
</template>
</customHeader>
<!-- 高度来避免头部遮挡 -->
<view class="top-height" :style="{ paddingTop: navBarPaddingTop + 'px' }"></view>
<!-- 正文内容 -->
<view class="all-body">
<!-- 搜索 @blur="blur" @focus="focus" @input="input" @cancel="cancel" @clear="clear"-->
<!-- <view class="search">
<uni-search-bar class="custom-search" radius="28" placeholder="请输入客户名称" clearButton="auto"
cancelButton="none" bgColor="#6FA2F8" textColor="#ffffff" v-model="searchValue" />
<button type="default" @click="handleSearch" size="mini" class="btn-search">查询</button>
</view> -->
<view class="search_center">
<view class="category">
<view class="flex_row_center_center" @click="showCate">
<text>{{selCategory.val||'全部'}}</text>
<image src="@/static/images/icon-notice@2x.png" mode=""></image>
</view>
<view class="pop_arrow" v-if="maskShow"></view>
<view class="pop" v-if="maskShow">
<text v-for="(item,index) in categories" :key="index"
@click="toList(item.categoryId,item.categoryName)">{{item.categoryName}}</text>
</view>
</view>
<image class="search_icon" src="@/static/images/icon-notice@2x.png"></image>
<input class='sea_input' :focus="inputFocus" type='text' :value="inputval" placeholder="请输入搜索条件"
@input="inputChange" @confirm='search' maxlength="50" placeholder-class="placeClass"></input>
<image class='clear_content' v-show="inputval" @click="clearInputVal"
src="@/static/images/icon-notice@2x.png" />
</view>
<text class='sea_btn' @click="btnSearch(1)">{{'搜索'}}</text>
<!-- 分页部分 -->
<mescroll-uni ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback"
:up="upOption" :down="downOption" :fixed="false" textColor="#ffffff" bgColor="#ffffff"
class="scroll-h" :class="{ 'loading-scroll': cssFlag }">
<view class="white-bg margin-bottom20" v-for="(item, index) in list" :key="index" @click="showDetail(item)">
<view>
<view class="report-list">
<view class="title">信息类型:{{ item.informationType }}</view>
<view class="r-list">
<view class="r-name"v-if="item.cusName!=null">公司名称:{{ item.cusName }}</view>
<view class="r-right btn-gray flex-auto" :class="item.myselfBrowsing==0?'btn-blue':'btn-green'"
size="mini">{{item.myselfBrowsing==0?'未读':'已读'}}</view>
</view>
<view class="border-bottom"></view>
<view class="border-bottom"></view>
<view class="r-list">
<view class="r-left">报告人</view>
<view class="r-right">{{ item.createName }}</view>
</view>
<view class="border-bottom"></view>
<view class="r-list">
<view class="r-left">报告日期</view>
<view class="r-right">{{ item.createTime }}</view>
</view>
</view>
</view>
</view>
</mescroll-uni>
</view>
</view>
</view>
</template>
<script setup>
import {
ref,
onMounted,
watch
} from 'vue'
import customHeader from '@/components/customHeader.vue'
import MescrollUni from 'mescroll-uni/mescroll-uni.vue';
import {
getNavBarPaddingTop
} from '@/utils/system.js'
import {
visitorReportList
} from '@/api/business.js'
import {
viewingMarketInfForAllMembers
} from '@/api/crm/api_ys.js';
import {
onLoad,
onShow,
onUnload
} from '@dcloudio/uni-app'
// 获取导航栏高度用于内容区域padding
const navBarPaddingTop = ref(0);
onMounted(() => {
navBarPaddingTop.value = getNavBarPaddingTop() * 2;
uni.$on('updateStatus', markVisited)
})
// 查询列表
let list = ref([]);
let searchValue = ref(null)
//监视查询的内容的变化
watch(searchValue, (newValue, oldValue) => {
//变化了之后,重新查询内容
var data = {
pageNum: 1,
pageSize: 10,
searchContent: searchValue.value
};
viewingMarketInfForAllMembers(data).then(res => {
if (res.code == 200) {
//设置列表数据
list.value = res.rows;
}
})
})
const index = ref(0)
const categories = ref([{
categoryId: 1,
categoryName: '市场机会'
}, {
categoryId: 2,
categoryName: '重大事项信息'
}, {
categoryId: 3,
categoryName: '竞争对手信息'
}, {
categoryId: 4,
categoryName: '人员变化信息'
}, {
categoryId: 5,
categoryName: '重点型号任务信息'
}, {
categoryId: 6,
categoryName: '通用信息'
}])
const selCategory = ref ({
id: 1,
val: ''
})
// 查询搜索跳转
let handleSearch = () => {
var data = {
pageNum: 1,
pageSize: 10,
searchContent: searchValue.value
};
viewingMarketInfForAllMembers(data).then(res => {
if (res.code == 200) {
//设置列表数据
list.value = res.rows;
} else {
uni.showToast({
icon: 'none',
title: "请求失败",
});
list.value = null;
}
})
console.log(searchValue.value)
}
const mescrollRef = ref(null);
const upOption = ref({
page: {
num: 0,
size: 10
},
noMoreSize: 5,
empty: {
tip: '~ 空空如也 ~'
},
textLoading: '加载中...',
textNoMore: '已经到底了'
});
const downOption = ref({
auto: true,
textInOffset: '下拉刷新',
textOutOffset: '释放更新',
textLoading: '刷新中...'
});
let cssFlag = ref(false); //控制样式
const mescrollInit = (mescroll) => {
cssFlag.value = true;
mescrollRef.value = mescroll;
};
// 下拉刷新
const downCallback = async (mescroll) => {
try {
setTimeout(async () => {
const res = await getViewingMarketInfForAllMembers(1, upOption.value.page.size);
cssFlag.value = false;
list.value = res.list;
mescroll.resetUpScroll();
}, 500);
} catch (error) {
mescroll.endErr();
} finally {
setTimeout(async () => {
mescroll.endSuccess();
}, 500);
}
}
// 上拉加载更多
const upCallback = async (mescroll) => {
try {
setTimeout(async () => {
const res = await getViewingMarketInfForAllMembers(mescroll.num, mescroll.size);
if (mescroll.num === 1) {
list.value = res.list;
} else {
list.value.push(...res.list);
}
mescroll.endBySize(res.list.length, res.total);
}, 500);
} catch (error) {
mescroll.endErr();
}
}
// 获取数据列表
const getViewingMarketInfForAllMembers = (pageNum, pageSize) => {
return new Promise(async (resolve) => {
let param = {
pageNum,
pageSize
}
let res = await viewingMarketInfForAllMembers(param);
resolve({
list: res.rows,
total: res.total
});
});
}
let Loop = ref(0)
let now
const visistId = ref();
const cusName = ref();
const cusId = ref();
const status = ref()
function showDetail(item) {
uni.navigateTo({
url: "/pages/business/CRM/marketInformation/informationDetail?informationId=" + item.informationId + '&selValue=' + item.selValue+ '&inputval=' + item.inputval
})
}
onUnload(() => {
uni.$off('updateStatus')
})
const markVisited = (informationId) => {
const newList = [...list.value].map(item => {
if (item.informationId == informationId) {
return { ...item, myselfBrowsing: 1 };
}
return item;
});
list.value = newList;
};
</script>
<style scoped>
.all-body {
/* #ifdef APP-PLUS */
top: 150rpx;
height: calc(100vh - 75px);
/* #endif */
/* #ifndef APP-PLUS */
top: 120rpx;
height: calc(100vh);
/* #endif */
}
.search {
display: flex;
}
.search .btn-search {
border: none;
background: none;
line-height: normal;
color: #fff;
line-height: 56rpx !important;
padding: 10rpx 0 0;
text-align: left;
cursor: pointer;
}
.search .btn-search::after {
display: none;
}
.search .custom-search {
width: 80%;
}
.search .custom-search.uni-searchbar {
padding-right: 0 !important;
}
.scroll-h {
/* #ifdef APP-PLUS */
height: calc(100vh - 120px);
/* #endif */
/* #ifndef APP-PLUS */
height: calc(100vh - 110px);
/* #endif */
}
.white-bg {
padding-bottom: 10rpx;
}
.search_center {
display: flex;
align-items: center;
border: none;
flex: 1;
height: 70rpx;
margin-left: 20rpx;
padding-left: 20rpx;
border-radius: 32.5rpx;
background-color: #f5f5f5;
.search_icon {
width: 30rpx;
height: 30rpx;
margin-right: 22rpx;
}
.category {
display: flex;
align-items: center;
margin-right: 16rpx;
padding-right: 16rpx;
border-right: 2rpx solid #D4D4D4;
position: relative;
text {
font-size: 13px;
margin-left: 10rpx;
margin-right: 10rpx;
}
image {
margin-top: 4rpx;
width: 20rpx;
height: 11rpx;
}
.pop {
position: absolute;
top: 50rpx;
background: #FFFFFF;
box-shadow: 0px 0px 40rpx 0px rgba(59, 59, 59, 0.2);
border-radius: 12rpx;
display: flex;
flex-direction: column;
align-items: center;
padding: 20rpx;
z-index: 100;
max-height: 566rpx;
overflow-y: auto;
text {
font-size: 28rpx;
font-family: PingFang SC;
font-weight: 500;
color: #333333;
white-space: nowrap;
margin: 10rpx 0;
line-height: 56rpx;
}
}
.pop_arrow {
position: absolute;
top: 48rpx;
z-index: 999;
&::after {
position: absolute;
content: "";
left: 68rpx;
top: -26rpx;
border: 14rpx solid #fff;
border-color: transparent transparent #fff transparent;
}
}
}
}
</style>

View File

@@ -0,0 +1,288 @@
<template>
<view class="con-body">
<view class="con-bg">
<!-- 头部 -->
<customHeader ref="customHeaderRef" :title="'市场信息详情'" :leftFlag="true" :rightFlag="false"></customHeader>
<!-- 高度来避免头部遮挡 -->
<view class="top-height"></view>
<!-- 正文内容 -->
<!-- 详情内容 -->
<view class="white-bg">
<view class="report-list">
<view class="title">{{ detailList.informationType }}</view>
<view class="r-list">
<view class="r-name">{{ detailList.cusName }}</view>
</view>
<view class="border-bottom b-width"></view>
<view class="r-list">
<view class="r-left">报告人</view>
<view class="r-right">{{ detailList.createName }}</view>
</view>
<view class="border-bottom b-width"></view>
<view class="r-list">
<view class="r-left">创建日期</view>
<view class="r-right">{{ detailList.createTime }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.createTime != null"></view>
<view class="r-list" v-if="detailList.createTime != null">
<view class="r-left">创建时间</view>
<view class="r-right">{{ detailList.createTime }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.opportunityType != null"></view>
<view class="r-list" v-if="detailList.opportunityType != null">
<view class="r-left">机会类型</view>
<view class="r-right">{{ detailList.opportunityType }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.understandTheWay != null"></view>
<view class="r-list" v-if="detailList.understandTheWay != null">
<view class="r-left">了解途径</view>
<view class="r-right">{{ detailList.understandTheWay }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.opportunityDescription != null"></view>
<view class="r-list" v-if="detailList.opportunityDescription != null">
<view class="r-left">机会描述</view>
<view class="r-right">{{ detailList.opportunityDescription }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.opportunityStatus != null"></view>
<view class="r-list" v-if="detailList.opportunityStatus != null">
<view class="r-left">机会所处状态</view>
<view class="r-right">{{ detailList.opportunityStatus }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.predictedAmount != null"></view>
<view class="r-list" v-if="detailList.predictedAmount != null">
<view class="r-left">预测金额或情况</view>
<view class="r-right">{{ detailList.predictedAmount }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.competitionSituation != null"></view>
<view class="r-list" v-if="detailList.competitionSituation != null">
<view class="r-left">竞争情况</view>
<view class="r-right">{{ detailList.competitionSituation }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.majorTypesOfMatters != null"></view>
<view class="r-list" v-if="detailList.majorTypesOfMatters != null">
<view class="r-left">重大事项类型</view>
<view class="r-right">{{ detailList.majorTypesOfMatters }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.theImpactGenerated != null"></view>
<view class="r-list" v-if="detailList.theImpactGenerated != null">
<view class="r-left">产生的影响</view>
<view class="r-right">{{ detailList.theImpactGenerated }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.companyResponseStrategy != null"></view>
<view class="r-list" v-if="detailList.companyResponseStrategy != null">
<view class="r-left">公司应对策略</view>
<view class="r-right">{{ detailList.companyResponseStrategy }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.competitiveUnits != null"></view>
<view class="r-list" v-if="detailList.competitiveUnits != null">
<view class="r-left">竞争单位</view>
<view class="r-right">{{ detailList.competitiveUnits }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.competitorLevelOne != null"></view>
<view class="r-list" v-if="detailList.competitorLevelOne != null">
<view class="r-left">信息类型</view>
<view class="r-right">{{ detailList.competitorLevelOne }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.competitorLevelTwo != null"></view>
<view class="r-list" v-if="detailList.competitorLevelTwo != null">
<view class="r-left">具体分类</view>
<view class="r-right">{{ detailList.competitorLevelTwo }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.specificMatters != null"></view>
<view class="r-list" v-if="detailList.specificMatters != null">
<view class="r-left">具体事情</view>
<view class="r-right">{{ detailList.specificMatters }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.originalPosition != null"></view>
<view class="r-list" v-if="detailList.originalPosition != null">
<view class="r-left">原职务</view>
<view class="r-right">{{ detailList.originalPosition }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.currentPosition != null"></view>
<view class="r-list" v-if="detailList.currentPosition != null">
<view class="r-left">现职务</view>
<view class="r-right">{{ detailList.currentPosition }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.positionOfOurCompany != null"></view>
<view class="r-list" v-if="detailList.positionOfOurCompany != null">
<view class="r-left">现职务是否与我公司业务相关</view>
<view class="r-right">{{ detailList.positionOfOurCompany }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.developmentEfforts != null"></view>
<view class="r-list" v-if="detailList.developmentEfforts != null">
<view class="r-left">攻关力度</view>
<view class="r-right">{{ detailList.developmentEfforts }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.successor != null"></view>
<view class="r-list" v-if="detailList.successor != null">
<view class="r-left">继任者</view>
<view class="r-right">{{ detailList.successor }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.keyModels != null"></view>
<view class="r-list" v-if="detailList.keyModels != null">
<view class="r-left">重点型号</view>
<view class="r-right">{{ detailList.keyModels }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.currentStatus != null"></view>
<view class="r-list" v-if="detailList.currentStatus != null">
<view class="r-left">目前状态</view>
<view class="r-right">{{ detailList.currentStatus }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.batchProductionPlan != null"></view>
<view class="r-list" v-if="detailList.batchProductionPlan != null">
<view class="r-left">批产计划</view>
<view class="r-right">{{ detailList.batchProductionPlan }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.situation != null"></view>
<view class="r-list" v-if="detailList.situation != null">
<view class="r-left">外协外包上级单位情况</view>
<view class="r-right">{{ detailList.situation }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.subordinateSupportingUnits != null"></view>
<view class="r-list" v-if="detailList.subordinateSupportingUnits != null">
<view class="r-left">下级配套单位</view>
<view class="r-right">{{ detailList.subordinateSupportingUnits }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.generalFormType != null"></view>
<view class="r-list" v-if="detailList.generalFormType != null">
<view class="r-left">通用表单类型</view>
<view class="r-right">{{ detailList.generalFormType }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.informationContent != null"></view>
<view class="r-list" v-if="detailList.informationContent != null">
<view class="r-left">信息内容</view>
<view class="r-right">{{ detailList.informationContent }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.remark != null"></view>
<view class="r-list" v-if="detailList.remark != null">
<view class="r-left">备注</view>
<view class="r-right">{{ detailList.remark }}</view>
</view>
<view class="border-bottom b-width"></view>
</view>
</view>
<!-- 底部加高度来避免tabbar遮挡 -->
<view class="bottom-height"></view>
</view>
</view>
</template>
<script setup>
import {
ref,
onMounted
} from 'vue'
import {
onLoad,
onShow
} from '@dcloudio/uni-app'
import customHeader from '@/components/customHeader.vue'
import customTabs from '@/components/customTabs.vue';
import {
viewingMarketInfgetDetail
} from '@/api/crm/api_ys.js';
let informationId = ref(0)
// 加载后调用
let id = ref(null)
onLoad((options) => {
informationId.value = options.informationId
getVisitorReportDetail();
})
// 查询详情
let item = ref({});
//明细List
let detailList = ref({})
const getVisitorReportDetail = async () => {
let param = {
informationId: informationId.value
}
let detailRes = await viewingMarketInfgetDetail(param);
detailList.value = detailRes.rows[0];
uni.$emit('updateStatus',informationId.value);
}
</script>
<style scoped>
.white-bg {
width: 690rpx;
margin: 0;
border-radius: 8px 8px 0 0;
}
.white-bg.white-bg-2 {
border-radius: 0;
margin-bottom: 20rpx;
}
:deep(.tabs-header) {
/* background: none !important; */
border-bottom: none !important;
margin: 0 auto;
gap: 5px;
}
:deep(.tab-item) {
color: #919191;
font-size: 32rpx;
font-weight: bold;
/* flex:none; */
/* margin: 0 -50rpx; */
/* padding: 0 50rpx; */
}
:deep(.tab-item:first-child) {
text-align: right;
margin-left: 230rpx;
}
:deep(.tab-item:last-child) {
text-align: left;
margin-right: 230rpx;
}
:deep(.tab-item.active) {
color: #3384DF;
font-weight: bold;
}
:deep(.tab-item.active::after) {
width: 100rpx;
height: 8rpx;
}
</style>

View File

@@ -178,6 +178,11 @@
title: '提交成功',
icon: 'success'
})
uni.$emit('refreshMarketList');
setTimeout(() => {
uni.navigateBack(1);
}, 1500);
console.log('表单数据:', formData.value)
} catch (err) {
console.log('表单验证失败:', err)

View File

@@ -183,8 +183,10 @@
title: '提交成功',
icon: 'success'
})
uni.$emit('refreshMarketOpportunityList')
uni.navigateBack(1)
uni.$emit('refreshMarketList');
setTimeout(() => {
uni.navigateBack(1);
}, 1500);
} catch (err) {
console.log('表单验证失败:', err)
}
@@ -217,8 +219,10 @@
title: '删除成功',
icon: 'success'
})
uni.$emit('refreshMarketOpportunityList')
uni.navigateBack(1)
uni.$emit('refreshMarketList');
setTimeout(() => {
uni.navigateBack(1);
}, 1500);
} catch (err) {
console.log('表单验证失败:', err)
}

View File

@@ -203,6 +203,11 @@
title: '提交成功',
icon: 'success'
})
uni.$emit('refreshMarketList');
setTimeout(() => {
uni.navigateBack(1);
}, 1500);
console.log('表单数据:', formData.value)
} catch (err) {
console.log('表单验证失败:', err)

View File

@@ -210,8 +210,10 @@
title: '提交成功',
icon: 'success'
})
uni.$emit('refreshMarketOpportunityList')
uni.navigateBack(1)
uni.$emit('refreshMarketList');
setTimeout(() => {
uni.navigateBack(1);
}, 1500);
} catch (err) {
console.log('表单验证失败:', err)
}
@@ -250,8 +252,10 @@
title: '删除成功',
icon: 'success'
})
uni.$emit('refreshMarketOpportunityList')
uni.navigateBack(1)
uni.$emit('refreshMarketList');
setTimeout(() => {
uni.navigateBack(1);
}, 1500);
} catch (err) {
console.log('表单验证失败:', err)
}

View File

@@ -32,7 +32,7 @@
<view class="title r-list">
<view class="r-left" style="font-size:38rpx;">{{ item.cusName }}</view>
<view class="r-right btn-gray flex-auto" :class="{'btn-blue':item.status==2}"
size="mini" @click="itemView(item)">{{ item.state }}</view>
size="mini" @click.stop="itemView(item)">{{ item.state }}</view>
</view>
<view style="padding:0rpx 0 10rpx">
<view class="font-bold" style="padding-bottom:10rpx">机会类型:{{item.opportunityType}}
@@ -51,13 +51,13 @@
<view class="title r-list">
<view class="r-left" style="font-size:38rpx;">{{ item.cusName }}</view>
<view class="r-right btn-gray flex-auto" :class="{'btn-blue':item.status==2}"
size="mini">{{ item.state }}</view>
size="mini" @click.stop="itemView(item)">{{ item.state }}</view>
</view>
<view style="padding:0rpx 0 10rpx">
<view class="font-bold" style="padding-bottom:10rpx">
产生的影响:{{item.theImpactGenerated}}</view>
<view class="font-bold" style="padding-bottom:10rpx">
重大事项类型:{{item.majorTypesOfMatters}}</view>
重大事项类型:{{item.opportunityType}}</view>
<!-- <view class="font-gray">{{ item.desc }}</view> -->
</view>
</view>
@@ -70,7 +70,7 @@
<view class="title r-list">
<view class="r-left" style="font-size:38rpx;">{{ item.competitiveUnits }}</view>
<view class="r-right btn-gray flex-auto" :class="{'btn-blue':item.status==2}"
size="mini">{{ item.state }}</view>
size="mini" @click.stop="itemView(item)">{{ item.state }}</view>
</view>
<view style="padding:0rpx 0 10rpx">
<view class="font-bold" style="padding-bottom:10rpx">
@@ -89,7 +89,7 @@
<view class="title r-list">
<view class="r-left" style="font-size:38rpx;">{{ item.cusName }}</view>
<view class="r-right btn-gray flex-auto" :class="{'btn-blue':item.status==2}"
size="mini">{{ item.state }}</view>
size="mini" @click.stop="itemView(item)">{{ item.state }}</view>
</view>
<view style="padding:0rpx 0 10rpx">
<view class="font-bold" style="padding-bottom:10rpx">客户人员名称:{{item.cusUserName}}
@@ -110,7 +110,7 @@
<view class="title r-list">
<view class="r-left" style="font-size:38rpx;">{{ item.cusName }}</view>
<view class="r-right btn-gray flex-auto" :class="{'btn-blue':item.status==2}"
size="mini">{{ item.state }}</view>
size="mini" @click.stop="itemView(item)">{{ item.state }}</view>
</view>
<view style="padding:0rpx 0 10rpx">
<view class="font-bold" style="padding-bottom:10rpx">重点型号:{{item.keyModels}}</view>
@@ -128,7 +128,7 @@
<view class="title r-list">
<view class="r-left" style="font-size:38rpx;">{{ item.cusName }}</view>
<view class="r-right btn-gray flex-auto" :class="{'btn-blue':item.status==2}"
size="mini">{{ item.state }}</view>
size="mini" @click.stop="itemView(item)">{{ item.state }}</view>
</view>
<view style="padding:0rpx 0 10rpx">
<view class="font-bold" style="padding-bottom:10rpx">标签:{{item.generalFormType}}
@@ -148,7 +148,8 @@
<script setup>
import {
ref,
onMounted
onMounted,
onUnmounted
} from 'vue'
import customHeader from '@/components/customHeader.vue'
import MescrollUni from 'mescroll-uni/mescroll-uni.vue';
@@ -166,7 +167,12 @@
const navBarPaddingTop = ref(0);
onMounted(() => {
navBarPaddingTop.value = getNavBarPaddingTop() * 2;
uni.$on('refreshMarketList', handleRefreshList);
})
onUnmounted(() => {
// 移除事件监听
uni.$off('refreshMarketList', handleRefreshList);
});
const mescrollInstance = ref(null);
const activeTab = ref(0); // 默认市场机会
const tabList = ['市场机会', '重大事项信息', '竞争对手信息', '人员变化信息', '重点型号任务信息', '通用表单'];
@@ -322,13 +328,14 @@
title: '提交成功',
duration: 2000
})
handleRefreshList();
} else {
uni.showToast({
title: res.msg || '操作失败',
icon: 'none'
})
}
reload()
} catch {
uni.showToast({
title: '提交失败,请重试',
@@ -344,13 +351,14 @@
title: '提交成功',
duration: 2000
})
handleRefreshList();
} else {
uni.showToast({
title: res.msg || '操作失败',
icon: 'none'
})
}
reload()
} catch {
uni.showToast({
title: '提交失败,请重试',
@@ -405,6 +413,13 @@
// console.log(item)
// uni.navigateTo({ url: '/pages/business/CRM/visitorReportAdd' })
}
const handleRefreshList = () => {
if (mescrollInstance.value) {
mescrollInstance.value.triggerDownScroll();
}
};
</script>
<style scoped>

View File

@@ -0,0 +1,249 @@
<template>
<view class="con-body">
<view class="con-bg">
<!-- 头部 -->
<customHeader ref="customHeaderRef" :title="'市场信息审核'" :leftFlag="true" :rightFlag="true">
<template #right>
</template>
</customHeader>
<!-- 高度来避免头部遮挡 -->
<view class="top-height" :style="{ paddingTop: navBarPaddingTop + 'px' }"></view>
<!-- 正文内容 -->
<view class="all-body">
<!-- 搜索 @blur="blur" @focus="focus" @input="input" @cancel="cancel" @clear="clear"-->
<!-- <view class="search">
<uni-search-bar class="custom-search" radius="28" placeholder="请输入客户名称" clearButton="auto"
cancelButton="none" bgColor="#6FA2F8" textColor="#ffffff" v-model="searchValue" />
<button type="default" @click="handleSearch" size="mini" class="btn-search">查询</button>
</view> -->
<!-- 分页部分 -->
<mescroll-uni ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback"
:up="upOption" :down="downOption" :fixed="false" textColor="#ffffff" bgColor="#ffffff"
class="scroll-h" :class="{ 'loading-scroll': cssFlag }">
<view class="white-bg margin-bottom20" v-for="(item, index) in list" :key="index" @click="touchstart(item)">
<view>
<view class="report-list">
<view class="title">信息类型{{ item.informationType }}</view>
<view class="r-list">
<view class="r-name">公司名称{{ item.cusName }}</view>
</view>
<view class="border-bottom"></view>
<view class="r-list">
<view class="r-left">创建人</view>
<view class="r-right">{{ item.createName }}</view>
</view>
<view class="r-list">
<view class="r-left">创建时间</view>
<view class="r-right">{{ item.createTime }}</view>
</view>
<view class="border-bottom"></view>
<view class="r-list">
<view class="r-left">是否为商业航天类型</view>
<view class="r-name">{{ item.commercialAerospace }}</view>
</view>
</view>
</view>
</view>
</mescroll-uni>
</view>
</view>
</view>
</template>
<script setup>
import { ref, onMounted, watch,onUnmounted } from 'vue'
import customHeader from '@/components/customHeader.vue'
import MescrollUni from 'mescroll-uni/mescroll-uni.vue';
import { getNavBarPaddingTop } from '@/utils/system.js'
import { visitorReportList } from '@/api/business.js'
import { approvalMarketInfget } from '@/api/crm/api_ys.js';
import { onShow } from '@dcloudio/uni-app'
// 获取导航栏高度用于内容区域padding
const navBarPaddingTop = ref(0);
onMounted(() => {
navBarPaddingTop.value = getNavBarPaddingTop() * 2;
})
// 查询列表
let list = ref([]);
let searchValue = ref(null)
//监视查询的内容的变化
watch(searchValue, (newValue, oldValue) => {
//变化了之后,重新查询内容
var data = {
pageNum: 1,
pageSize: 10,
searchContent: searchValue.value
};
getYsVisistList(data).then(res => {
if (res.code == 200) {
//设置列表数据
list.value = res.rows;
}
})
})
// 新增
let handleAdd = () => {
uni.navigateTo({url: '/pages/business/CRM/paymentCollection/addPaymentCollection'})
}
const mescrollRef = ref(null);
const upOption = ref({
page: {num: 0, size: 10},
noMoreSize: 5,
empty: {tip: '~ 空空如也 ~'},
textLoading: '加载中...',
textNoMore: '已经到底了'
});
const downOption = ref({
auto: true,
textInOffset: '下拉刷新',
textOutOffset: '释放更新',
textLoading: '刷新中...'
});
let cssFlag = ref(false);//控制样式
const mescrollInit = (mescroll) => {
cssFlag.value = true;
mescrollRef.value = mescroll;
};
// 下拉刷新
const downCallback = async (mescroll) => {
try {
setTimeout(async () => {
const res = await ApprovalMarketInfget(1, upOption.value.page.size);
cssFlag.value = false;
list.value = res.list;
mescroll.resetUpScroll();
}, 500);
} catch (error) {
mescroll.endErr();
} finally {
setTimeout(async () => {
mescroll.endSuccess();
}, 500);
}
}
// 上拉加载更多
const upCallback = async (mescroll) => {
try {
setTimeout(async () => {
const res = await ApprovalMarketInfget(mescroll.num, mescroll.size);
if (mescroll.num === 1) {
list.value = res.list;
} else {
list.value.push(...res.list);
}
mescroll.endBySize(res.list.length, res.total);
}, 500);
} catch (error) {
mescroll.endErr();
}
}
// 获取数据列表
const ApprovalMarketInfget = (pageNum, pageSize) => {
return new Promise(async (resolve) => {
let param = {
pageNum,
pageSize
}
let res = await approvalMarketInfget(param);
resolve({
list: res.rows,
total: res.total
});
});
}
let Loop = ref(0)
function touchstart(item) {
uni.navigateTo({
url: "/pages/business/CRM/marketInformation/marketInformationReviewDetail?informationId=" + item.informationId
})
}
// 生命周期钩子
onShow(() => {
// 监听刷新事件
uni.$on('refreshList', ApprovalMarketInfget(1,10))
// 页面显示时也加载一次数据
ApprovalMarketInfget(1,10)
})
onUnmounted(() => {
// 移除监听(避免重复触发)
uni.$off('refreshList')
})
onMounted(() => {
ApprovalMarketInfget()
})
</script>
<style scoped>
.all-body {
/* #ifdef APP-PLUS */
top: 150rpx;
height: calc(100vh - 75px);
/* #endif */
/* #ifndef APP-PLUS */
top: 120rpx;
height: calc(100vh);
/* #endif */
}
.search {
display: flex;
}
.search .btn-search {
border: none;
background: none;
line-height: normal;
color: #fff;
line-height: 56rpx !important;
padding: 10rpx 0 0;
text-align: left;
cursor: pointer;
}
.search .btn-search::after {
display: none;
}
.search .custom-search {
width: 80%;
}
.search .custom-search.uni-searchbar {
padding-right: 0 !important;
}
.scroll-h {
/* #ifdef APP-PLUS */
height: calc(100vh - 120px);
/* #endif */
/* #ifndef APP-PLUS */
height: calc(100vh - 110px);
/* #endif */
}
.white-bg {
padding-bottom: 10rpx;
}
</style>

View File

@@ -0,0 +1,385 @@
<template>
<view class="con-body">
<view class="con-bg">
<!-- 头部 -->
<customHeader ref="customHeaderRef" :title="'市场信息详情'" :leftFlag="true" :rightFlag="false"></customHeader>
<!-- 高度来避免头部遮挡 -->
<view class="top-height"></view>
<!-- 正文内容 -->
<!-- 详情内容 -->
<view class="white-bg">
<view class="report-list">
<view class="title">{{ detailList.informationType }}</view>
<view class="r-list">
<view class="r-name">{{ detailList.cusName }}</view>
</view>
<view class="border-bottom b-width"></view>
<view class="r-list">
<view class="r-left">报告人</view>
<view class="r-right">{{ detailList.createName }}</view>
</view>
<view class="border-bottom b-width"></view>
<view class="r-list">
<view class="r-left">创建日期</view>
<view class="r-right">{{ detailList.createTime }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.opportunityType != null"></view>
<view class="r-list" v-if="detailList.opportunityType != null">
<view class="r-left">机会类型</view>
<view class="r-right">{{ detailList.opportunityType }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.understandTheWay != null"></view>
<view class="r-list" v-if="detailList.understandTheWay != null">
<view class="r-left">了解途径</view>
<view class="r-right">{{ detailList.understandTheWay }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.opportunityDescription != null"></view>
<view class="r-list" v-if="detailList.opportunityDescription != null">
<view class="r-left">机会描述</view>
<view class="r-right">{{ detailList.opportunityDescription }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.opportunityStatus != null"></view>
<view class="r-list" v-if="detailList.opportunityStatus != null">
<view class="r-left">机会所处状态</view>
<view class="r-right">{{ detailList.opportunityStatus }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.predictedAmount != null"></view>
<view class="r-list" v-if="detailList.predictedAmount != null">
<view class="r-left">预测金额或情况</view>
<view class="r-right">{{ detailList.predictedAmount }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.competitionSituation != null"></view>
<view class="r-list" v-if="detailList.competitionSituation != null">
<view class="r-left">竞争情况</view>
<view class="r-right">{{ detailList.competitionSituation }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.majorTypesOfMatters != null"></view>
<view class="r-list" v-if="detailList.majorTypesOfMatters != null">
<view class="r-left">重大事项类型</view>
<view class="r-right">{{ detailList.majorTypesOfMatters }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.theImpactGenerated != null"></view>
<view class="r-list" v-if="detailList.theImpactGenerated != null">
<view class="r-left">产生的影响</view>
<view class="r-right">{{ detailList.theImpactGenerated }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.companyResponseStrategy != null"></view>
<view class="r-list" v-if="detailList.companyResponseStrategy != null">
<view class="r-left">公司应对策略</view>
<view class="r-right">{{ detailList.companyResponseStrategy }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.competitiveUnits != null"></view>
<view class="r-list" v-if="detailList.competitiveUnits != null">
<view class="r-left">竞争单位</view>
<view class="r-right">{{ detailList.competitiveUnits }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.competitorLevelOne != null"></view>
<view class="r-list" v-if="detailList.competitorLevelOne != null">
<view class="r-left">信息类型</view>
<view class="r-right">{{ detailList.competitorLevelOne }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.competitorLevelTwo != null"></view>
<view class="r-list" v-if="detailList.competitorLevelTwo != null">
<view class="r-left">具体分类</view>
<view class="r-right">{{ detailList.competitorLevelTwo }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.specificMatters != null"></view>
<view class="r-list" v-if="detailList.specificMatters != null">
<view class="r-left">具体事情</view>
<view class="r-right">{{ detailList.specificMatters }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.originalPosition != null"></view>
<view class="r-list" v-if="detailList.originalPosition != null">
<view class="r-left">原职务</view>
<view class="r-right">{{ detailList.originalPosition }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.currentPosition != null"></view>
<view class="r-list" v-if="detailList.currentPosition != null">
<view class="r-left">现职务</view>
<view class="r-right">{{ detailList.currentPosition }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.positionOfOurCompany != null"></view>
<view class="r-list" v-if="detailList.positionOfOurCompany != null">
<view class="r-left">现职务是否与我公司业务相关</view>
<view class="r-right">{{ detailList.positionOfOurCompany }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.developmentEfforts != null"></view>
<view class="r-list" v-if="detailList.developmentEfforts != null">
<view class="r-left">攻关力度</view>
<view class="r-right">{{ detailList.developmentEfforts }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.successor != null"></view>
<view class="r-list" v-if="detailList.successor != null">
<view class="r-left">继任者</view>
<view class="r-right">{{ detailList.successor }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.keyModels != null"></view>
<view class="r-list" v-if="detailList.keyModels != null">
<view class="r-left">重点型号</view>
<view class="r-right">{{ detailList.keyModels }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.currentStatus != null"></view>
<view class="r-list" v-if="detailList.currentStatus != null">
<view class="r-left">目前状态</view>
<view class="r-right">{{ detailList.currentStatus }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.batchProductionPlan != null"></view>
<view class="r-list" v-if="detailList.batchProductionPlan != null">
<view class="r-left">批产计划</view>
<view class="r-right">{{ detailList.batchProductionPlan }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.situation != null"></view>
<view class="r-list" v-if="detailList.situation != null">
<view class="r-left">外协外包上级单位情况</view>
<view class="r-right">{{ detailList.situation }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.subordinateSupportingUnits != null"></view>
<view class="r-list" v-if="detailList.subordinateSupportingUnits != null">
<view class="r-left">下级配套单位</view>
<view class="r-right">{{ detailList.subordinateSupportingUnits }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.generalFormType != null"></view>
<view class="r-list" v-if="detailList.generalFormType != null">
<view class="r-left">通用表单类型</view>
<view class="r-right">{{ detailList.generalFormType }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.informationContent != null"></view>
<view class="r-list" v-if="detailList.informationContent != null">
<view class="r-left">信息内容</view>
<view class="r-right">{{ detailList.informationContent }}</view>
</view>
<view class="border-bottom b-width" v-if="detailList.remark != null"></view>
<view class="r-list" v-if="detailList.remark != null">
<view class="r-left">备注</view>
<view class="r-right">{{ detailList.remark }}</view>
</view>
<view class="border-bottom b-width"></view>
</view>
</view>
<!-- 底部加高度来避免tabbar遮挡 -->
<!-- <view class="bottom-height"></view> -->
<view class="tipsPopBtn">
<view class="btnCancal" @click="refuse">驳回</view>
<!-- <view class="btnComfire" @click="refusePass">通过不得分</view> -->
<view class="btnComfire" @click="adopt">通过</view>
</view>
</view>
</view>
</template>
<script setup>
import {
ref,
onMounted
} from 'vue'
import {
onLoad,
onShow
} from '@dcloudio/uni-app'
import customHeader from '@/components/customHeader.vue'
import customTabs from '@/components/customTabs.vue';
import {
viewingMarketInfgetDetail,
crmMarketInformationApprovalSuccess,
crmMarketInformationApprovalUnSuccess
} from '@/api/crm/api_ys.js';
let informationId = ref(0)
// 加载后调用
let id = ref(null)
onLoad((options) => {
informationId.value = options.informationId
getVisitorReportDetail();
})
// 查询详情
let item = ref({});
//明细List
let detailList = ref({})
const getVisitorReportDetail = async () => {
let param = {
informationId: informationId.value
}
let detailRes = await viewingMarketInfgetDetail(param);
detailList.value = detailRes.rows[0];
}
//通过审批
const adopt = async () => {
try {
const param = {
informationId: informationId.value
}
const res = await crmMarketInformationApprovalSuccess(param);
console.log(res)
uni.showToast({
title: '提交成功',
icon: 'success'
});
// 操作完成后返回
setTimeout(() => {
uni.navigateBack(1);
}, 1500);
} catch (err) {
console.log('提交失败:', err);
uni.showToast({
title: '提交失败',
icon: 'error'
});
}
}
// 修正后的驳回方法
const refuse = async () => {
uni.showModal({
title: '驳回原因',
content: '',
editable: true,
success: async function (modalRes) { // 使用modalRes避免重名
if (modalRes.confirm) {
try {
const param = {
informationId: informationId.value,
opinion: modalRes.content // 用户输入的驳回原因
};
const apiRes = await crmMarketInformationApprovalUnSuccess(param); // 避免与modalRes重名
console.log('驳回成功:', apiRes);
uni.showToast({
title: '驳回成功',
icon: 'success'
});
// 操作完成后返回
setTimeout(() => {
uni.navigateBack(1);
}, 1500);
} catch (err) {
console.log('驳回失败:', err);
uni.showToast({
title: '驳回失败',
icon: 'error'
});
}
}
}
});
}
</script>
<style scoped>
.white-bg {
width: 690rpx;
margin: 0;
border-radius: 8px 8px 0 0;
}
.white-bg.white-bg-2 {
border-radius: 0;
margin-bottom: 20rpx;
}
.tipsPopBtn {
width: 300px;
display: flex;
justify-content: space-between;
align-items: center;
margin: 50px auto 56px auto;
bottom: 0;
left: 0;
}
.btnCancal {
width: 100px;
height: 60px;
border: 2px solid #29abe2;
border-radius: 40px;
display: flex;
justify-content: center;
align-items: center;
color: #29abe2;
font-size: 15px;
}
.btnComfire {
width: 100px;
height: 60px;
background-color: #29abe2;
border-radius: 40px;
display: flex;
justify-content: center;
align-items: center;
color: #FFF;
font-size: 15px;
}
:deep(.tabs-header) {
/* background: none !important; */
border-bottom: none !important;
margin: 0 auto;
gap: 5px;
}
:deep(.tab-item) {
color: #919191;
font-size: 32rpx;
font-weight: bold;
/* flex:none; */
/* margin: 0 -50rpx; */
/* padding: 0 50rpx; */
}
:deep(.tab-item:first-child) {
text-align: right;
margin-left: 230rpx;
}
:deep(.tab-item:last-child) {
text-align: left;
margin-right: 230rpx;
}
:deep(.tab-item.active) {
color: #3384DF;
font-weight: bold;
}
:deep(.tab-item.active::after) {
width: 100rpx;
height: 8rpx;
}
</style>

View File

@@ -87,9 +87,6 @@
let customerUser = reactive({})
// 客户相关
const guestList = ref([])
const guestArr = ref([])
const guestIndex = ref(0)
// 表单数据
const formData = ref({
cusId: null,
@@ -186,7 +183,7 @@
const form = ref({
cusId: null,
cusName: null,
opportunityType: "", // 机会类型
opportunityType: array.value[0].name, // 机会类型
understandTheWay: "", // 了解途径
opportunityDescription: "", // 机会描述
opportunityStatus: "", // 机会所处状态
@@ -243,7 +240,12 @@
//监听时间
onMounted(() => {
uni.$on('onCustomerSelected', handleCustomerSelected)
// 设置机会类型的默认值
formData.value.opportunityType = array.value[0].name;
opportunityTypeIndex.value = 0;
// 原有的监听客户选择事件
uni.$on('onCustomerSelected', handleCustomerSelected);
})
//取消监听
onUnmounted(() => {
@@ -266,17 +268,18 @@
try {
// 表单校验
await formRef.value.validate()
const res = await crmMarketInformationAdd(formData.value);
const res = await crmMarketInformationAdd(formData.value);
console.log(res)
uni.showToast({
title: '提交成功',
icon: 'success'
})
uni.$emit('refreshMarketList');
setTimeout(() => {
uni.navigateBack(1);
}, 1500);
console.log('表单数据:', formData.value)
// TODO: 在这里添加提交到后端的逻辑,比如调用 api.CrmMarketInformationAdd(formData.value)
// 暂时只做校验提示
} catch (err) {
console.log('表单验证失败:', err)
}

View File

@@ -293,8 +293,10 @@ onMounted(() => {
title: '提交成功',
icon: 'success'
})
uni.$emit('refreshMarketOpportunityList')
uni.navigateBack(1)
uni.$emit('refreshMarketList');
setTimeout(() => {
uni.navigateBack(1);
}, 1500);
} catch (err) {
console.log('表单验证失败:', err)
@@ -309,7 +311,10 @@ onMounted(() => {
title: '删除成功',
icon: 'success'
})
uni.navigateBack(1)
uni.$emit('refreshMarketList');
setTimeout(() => {
uni.navigateBack(1);
}, 1500);
} catch (err) {
console.log('表单验证失败:', err)
}

View File

@@ -81,7 +81,10 @@
} from 'vue'
import customHeader from '@/components/customHeader.vue'
import cache from '@/utils/cache'
import { onShow, onUnload } from '@dcloudio/uni-app';
import {
onShow,
onUnload
} from '@dcloudio/uni-app';
import {
getGuestList
} from '@/api/business.js'
@@ -227,23 +230,23 @@
url: '/pages/business/CRM/customerUserList?cusName=' + formData.value.cusName
})
}
//页面渲染完成后查询catch的get
onShow(() => {
//页面渲染完成后查询catch的get
onShow(() => {
if (cache.get('checkedRCClientList') != null && cache.get('checkedRCClientList') != []) {
formData.value.cusUserName = cache.get('checkedRCClientList')
}
if (cache.get('checkedRCClientList') != null && cache.get('checkedRCClientList') != []) {
formData.value.cusUserName = cache.get('checkedRCClientList')
}
})
//页面卸载之后,删除缓存信息
onUnload(() => {
handleDeleteLocal()
})
})
//页面卸载之后,删除缓存信息
onUnload(() => {
handleDeleteLocal()
})
//删除缓存
let handleDeleteLocal = () => {
cache.remove('checkedRCClientList');
}
//删除缓存
let handleDeleteLocal = () => {
cache.remove('checkedRCClientList');
}
// 提交表单
const submitForm = async () => {
@@ -251,7 +254,7 @@ let handleDeleteLocal = () => {
// 表单校验
await formRef.value.validate()
const cusUserName1 = formData.value.cusUserName;
const stringOfNames = cusUserName1.join(",")
const stringOfNames = cusUserName1.join(",")
formData.value.cusUserName = stringOfNames
const res = await crmMarketInformationAdd(formData.value);
console.log(res)
@@ -259,10 +262,10 @@ let handleDeleteLocal = () => {
title: '提交成功',
icon: 'success'
})
console.log('表单数据:', formData.value)
// TODO: 在这里添加提交到后端的逻辑,比如调用 api.CrmMarketInformationAdd(formData.value)
// 暂时只做校验提示
uni.$emit('refreshMarketList');
setTimeout(() => {
uni.navigateBack(1);
}, 1500);
} catch (err) {
console.log('表单验证失败:', err)

View File

@@ -263,8 +263,10 @@ let handleDeleteLocal = () => {
title: '提交成功',
icon: 'success'
})
uni.$emit('refreshMarketOpportunityList')
uni.navigateBack(1)
uni.$emit('refreshMarketList');
setTimeout(() => {
uni.navigateBack(1);
}, 1500);
// TODO: 在这里添加提交到后端的逻辑,比如调用 api.CrmMarketInformationAdd(formData.value)
// 暂时只做校验提示
@@ -318,8 +320,10 @@ let handleDeleteLocal = () => {
title: '删除成功',
icon: 'success'
})
uni.$emit('refreshMarketOpportunityList')
uni.navigateBack(1)
uni.$emit('refreshMarketList');
setTimeout(() => {
uni.navigateBack(1);
}, 1500);
} catch (err) {
console.log('表单验证失败:', err)
}