first commit
This commit is contained in:
234
src/pages/business/CRM/checkinStatistics.vue
Normal file
234
src/pages/business/CRM/checkinStatistics.vue
Normal file
@@ -0,0 +1,234 @@
|
||||
<template>
|
||||
<view class="con-body">
|
||||
<view class="con-bg">
|
||||
<!-- 头部 -->
|
||||
<customHeader ref="customHeaderRef" :title="'打卡统计'" :leftFlag="true" :rightFlag="false"></customHeader>
|
||||
|
||||
<!-- 高度来避免头部遮挡 -->
|
||||
<view class="top-height"></view>
|
||||
|
||||
<!-- 正文内容 -->
|
||||
<view>
|
||||
<!-- 搜索 -->
|
||||
<view class="search">
|
||||
<picker @change="bindPickerChange" :value="cityIndex" :range="cityArr" class="picker-bg">
|
||||
<view class="picker">
|
||||
<uni-icons type="location" size="18"></uni-icons>
|
||||
<view>{{cityArr[cityIndex]}}</view>
|
||||
<uni-icons type="down" size="18"></uni-icons>
|
||||
</view>
|
||||
</picker>
|
||||
<picker mode="date" :value="defaultDate" :start="startDate" :end="endDate"
|
||||
@change="bindDateChange" class="picker-bg">
|
||||
<view class="picker">
|
||||
<uni-icons custom-prefix="iconfont" color="#ffffff" type="icon-phoneshizhong" size="18"></uni-icons>
|
||||
<view>{{defaultDate}}</view>
|
||||
<uni-icons type="down" size="18"></uni-icons>
|
||||
</view>
|
||||
</picker>
|
||||
<button type="default" @click="handleSearch" size="mini" class="btn-search">查询</button>
|
||||
</view>
|
||||
<!-- 签到打卡 -->
|
||||
<view class="checkin-tab">
|
||||
<view class="checkin-tab-item" :class="{active:tabType==0}" @click="handleTab(0)">
|
||||
<view class="tab-item-title">7</view>
|
||||
<view class="tab-item-name">最新签到打卡</view>
|
||||
</view>
|
||||
<view class="checkin-tab-item" :class="{active:tabType==1}" @click="handleTab(1)">
|
||||
<view class="tab-item-title">4</view>
|
||||
<view class="tab-item-name">未签到打卡</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- tab切换显示 -->
|
||||
<view class="white-bg">
|
||||
<!-- 最新签到列表 -->
|
||||
<view class="tab-con" v-if="tabType==0">
|
||||
<view class="tab-title" v-for="(item,index) in list1" :key="index">
|
||||
{{item}}
|
||||
<uni-icons type="checkbox-filled" size="26" color="#02C74C"></uni-icons>
|
||||
</view>
|
||||
</view>
|
||||
<!-- 未签到列表 -->
|
||||
<view class="tab-con" v-if="tabType==1">
|
||||
<view class="tab-title" v-for="(item,index) in list2" :key="index">
|
||||
{{item}}
|
||||
<uni-icons type="info-filled" size="26" color="#FF8059"></uni-icons>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted } from 'vue'
|
||||
import customHeader from '@/components/customHeader.vue'
|
||||
import { getDate} from '@/utils/datetime.js'
|
||||
|
||||
let cityIndex = ref(0);
|
||||
let cityArr = ["北京大区","天津大区"];
|
||||
// 选择大区列表
|
||||
let bindPickerChange = (e)=>{
|
||||
console.log('picker发送选择改变,携带值为', e.detail.value)
|
||||
cityIndex.value = e.detail.value
|
||||
}
|
||||
|
||||
// 开始时间
|
||||
let startDate = getDate('start');
|
||||
// 结束时间,间隔10年
|
||||
let endDate = getDate('end');
|
||||
let defaultDate = getDate({ format: true })
|
||||
let bindDateChange = (e) =>{
|
||||
defaultDate = e.detail.value
|
||||
}
|
||||
|
||||
let searchValue = ref(null)
|
||||
// 查询搜索跳转
|
||||
let handleSearch = () => {
|
||||
console.log(searchValue.value)
|
||||
}
|
||||
|
||||
// tab 切换
|
||||
let tabType = ref(0)
|
||||
let handleTab = (type)=>{
|
||||
tabType.value = type;
|
||||
}
|
||||
// 列表
|
||||
let list1 = ref([]);
|
||||
list1.value = ["王振","胡本华","高勐","崔礼涛","汪津春","王永健","张浩"];
|
||||
|
||||
let list2 = ref([]);
|
||||
list2.value = ["付翰","张旭光","赵欣鸣","张王小北"];
|
||||
|
||||
// 确定
|
||||
let handleSubmit = () => {
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.search {
|
||||
display: flex;
|
||||
padding:0 30rpx;
|
||||
}
|
||||
|
||||
.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 .picker-bg{
|
||||
display: flex;
|
||||
background-color: #6FA2F8;
|
||||
border-radius: 25px;
|
||||
color:#fff;
|
||||
font-size:28rpx;
|
||||
padding:0rpx 20rpx;
|
||||
/* #ifndef APP-PLUS */
|
||||
padding:10rpx 20rpx 0 20rpx;
|
||||
/* #endif */
|
||||
margin-right:20rpx;
|
||||
}
|
||||
.search .picker-bg .picker {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
/* #ifndef APP-PLUS */
|
||||
padding-top:2rpx;
|
||||
/* #endif */
|
||||
}
|
||||
.search .picker-bg .picker .uni-icons{
|
||||
color:#fff !important;
|
||||
}
|
||||
.search .picker-bg .picker .uni-icons:first-child{
|
||||
margin-right: 10rpx;
|
||||
}
|
||||
.search .picker-bg .picker .uniui-down{
|
||||
margin-left: 20rpx;
|
||||
}
|
||||
|
||||
.checkin-tab{
|
||||
margin-top:35rpx;
|
||||
display: flex;
|
||||
padding:0 30rpx;
|
||||
flex: 1;
|
||||
}
|
||||
.checkin-tab-item{
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color:rgba(255, 255, 255, 0.5);
|
||||
text-align: center;
|
||||
margin-right:30rpx;
|
||||
font-weight: bold;
|
||||
padding-bottom:20rpx;
|
||||
}
|
||||
.checkin-tab-item.active{
|
||||
position: relative;
|
||||
color:#fff;
|
||||
}
|
||||
.checkin-tab-item.active::after{
|
||||
content: '';
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
background-color: #fff;
|
||||
width: 100rpx;
|
||||
height: 8rpx;
|
||||
}
|
||||
.checkin-tab-item .tab-item-title{
|
||||
font-size:60rpx;
|
||||
}
|
||||
|
||||
|
||||
.white-bg {
|
||||
width: 670rpx;
|
||||
margin: 0;
|
||||
border-radius: 8px 8px 0 0;
|
||||
padding:50rpx 40rpx;
|
||||
margin-top:20rpx;
|
||||
/* #ifdef APP-PLUS */
|
||||
height:calc(100vh - 260px);
|
||||
/* #endif */
|
||||
/* #ifndef APP-PLUS */
|
||||
height:calc(100vh - 230px);
|
||||
/* #endif */
|
||||
}
|
||||
|
||||
.tab-con{
|
||||
display: flex;
|
||||
flex-flow: row wrap
|
||||
}
|
||||
.tab-con .tab-title{
|
||||
border:1px solid #E8E8E8;
|
||||
text-align: center;
|
||||
border-radius: 5px;
|
||||
position: relative;
|
||||
/* padding:10rpx 20rpx; */
|
||||
margin-right:20rpx;
|
||||
margin-bottom:30rpx;
|
||||
width:148rpx;
|
||||
height: 60rpx;
|
||||
line-height: 60rpx;
|
||||
font-size: 28rpx;
|
||||
}
|
||||
.tab-con .tab-title:nth-child(4n){
|
||||
margin-right: 0;
|
||||
}
|
||||
.tab-con .uni-icons{
|
||||
position: absolute;
|
||||
right:-10px;
|
||||
top:-10px;
|
||||
}
|
||||
</style>
|
||||
224
src/pages/business/CRM/marketInformation.vue
Normal file
224
src/pages/business/CRM/marketInformation.vue
Normal file
@@ -0,0 +1,224 @@
|
||||
<template>
|
||||
<view class="con-body">
|
||||
<view class="con-bg">
|
||||
<!-- 头部 -->
|
||||
<customHeader ref="customHeaderRef" :title="'市场信息管理'" :leftFlag="true" :rightFlag="true">
|
||||
<template #right>
|
||||
<view class="head-right" @click="handleAdd">
|
||||
<uni-icons type="plus" size="24" color="#B7D2FF"></uni-icons>新增
|
||||
</view>
|
||||
</template>
|
||||
</customHeader>
|
||||
|
||||
<!-- 高度来避免头部遮挡 -->
|
||||
<view class="top-height" :style="{ paddingTop: navBarPaddingTop + 'px' }"></view>
|
||||
|
||||
<!-- 正文内容 -->
|
||||
<view class="all-body market-con">
|
||||
<view class="nav-list">
|
||||
<view class="nav-item" :class="{active:index==activeTab}"
|
||||
v-for="(item,index) in tabList" :key="index"
|
||||
@click="handleNav(index)"
|
||||
>{{ item }}</view>
|
||||
</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}">
|
||||
<!-- 市场机会信息 -->
|
||||
<block v-if="activeTab === 0">
|
||||
市场机会信息内容
|
||||
</block>
|
||||
<!-- 重大事项信息 -->
|
||||
<block v-if="activeTab === 1">
|
||||
<view class="white-bg margin-bottom20" v-for="(item, index) in list" :key="index">
|
||||
<view class="report-list">
|
||||
<view class="title r-list">
|
||||
<view class="r-left" style="font-size:38rpx;">{{ item.title }}</view>
|
||||
<view class="r-right btn-gray flex-auto" :class="{'btn-blue':item.status==2}" size="mini">{{ item.statusName }}</view>
|
||||
</view>
|
||||
<view style="padding:0rpx 0 10rpx">
|
||||
<view class="font-bold" style="padding-bottom:10rpx">产生影响</view>
|
||||
<view class="font-gray">{{ item.desc }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</block>
|
||||
</mescroll-uni>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted } from 'vue'
|
||||
import customHeader from '@/components/customHeader.vue'
|
||||
import MescrollUni from 'mescroll-uni/mescroll-uni.vue';
|
||||
import { getNavBarPaddingTop } from '@/utils/system.js'
|
||||
import { mattersList } from '@/api/business.js'
|
||||
|
||||
// 获取导航栏高度用于内容区域padding
|
||||
const navBarPaddingTop = ref(0);
|
||||
onMounted(() => {
|
||||
navBarPaddingTop.value = getNavBarPaddingTop() * 2;
|
||||
})
|
||||
|
||||
const activeTab = ref(1);// 默认重大事项信息
|
||||
const tabList = ['市场机会信息', '重大事项信息', '竞争对手信息', '人员变动信息','多标签效果','多标签效果'];
|
||||
let handleNav = (index)=>{
|
||||
console.log(index)
|
||||
activeTab.value = index;
|
||||
}
|
||||
|
||||
// 新增
|
||||
let handleAdd = () => {
|
||||
// uni.navigateTo({ url: '/pages/business/CRM/visitorReportAdd' })
|
||||
}
|
||||
|
||||
// 查询列表
|
||||
let list = ref([]);
|
||||
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 getMattersList(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 getMattersList(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 getMattersList = (pageIndex, pageSize) => {
|
||||
return new Promise(async (resolve) => {
|
||||
let param = {
|
||||
pageIndex,
|
||||
pageSize
|
||||
}
|
||||
|
||||
let res = await mattersList(param);
|
||||
resolve({
|
||||
list: res.list,
|
||||
total: res.totalCount
|
||||
});
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.all-body{
|
||||
/* #ifdef APP-PLUS */
|
||||
top:88rpx;
|
||||
height: calc(100vh - 44px);
|
||||
/* #endif */
|
||||
/* #ifndef APP-PLUS */
|
||||
top:100rpx;
|
||||
height: calc(100vh - 48px);
|
||||
/* #endif */
|
||||
|
||||
}
|
||||
/*.market-con{
|
||||
|
||||
} */
|
||||
|
||||
.nav-list{
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
/* #ifdef APP-PLUS */
|
||||
padding:80rpx 30rpx 0;
|
||||
/* #endif */
|
||||
/* #ifndef APP-PLUS */
|
||||
padding:20rpx 30rpx 0;
|
||||
/* #endif */
|
||||
}
|
||||
.nav-list .nav-item{
|
||||
background-color:#05A3F4;
|
||||
border-radius: 10rpx;
|
||||
color:#FFFFFF;
|
||||
font-size:28rpx;
|
||||
text-align: center;
|
||||
padding:10rpx 25rpx;
|
||||
margin-right:15rpx;
|
||||
margin-bottom:20rpx;
|
||||
}
|
||||
.nav-list .nav-item:nth-child(3n){
|
||||
margin-right:0;
|
||||
}
|
||||
|
||||
.nav-list .nav-item.active{
|
||||
background-color: #fff;
|
||||
color:#3384DF;
|
||||
font-weight: bold;
|
||||
|
||||
}
|
||||
|
||||
.report-list .r-list{
|
||||
align-items:flex-start;
|
||||
}
|
||||
|
||||
|
||||
.scroll-h {
|
||||
/* #ifdef APP-PLUS */
|
||||
height: calc(100vh - 155px);
|
||||
/* #endif */
|
||||
/* #ifndef APP-PLUS */
|
||||
height: calc(100vh - 135px);
|
||||
/* #endif */
|
||||
}
|
||||
|
||||
.white-bg {
|
||||
padding-top:10rpx;
|
||||
padding-bottom: 10rpx;
|
||||
}
|
||||
.report-list .title{
|
||||
display: flex;
|
||||
}
|
||||
</style>
|
||||
169
src/pages/business/CRM/paymentCollection.vue
Normal file
169
src/pages/business/CRM/paymentCollection.vue
Normal file
@@ -0,0 +1,169 @@
|
||||
<template>
|
||||
<view class="con-body">
|
||||
<view class="con-bg">
|
||||
<!-- 头部 -->
|
||||
<customHeader ref="customHeaderRef" :title="'个人回款信息统计表'" :leftFlag="true" :rightFlag="false"></customHeader>
|
||||
|
||||
<!-- 高度来避免头部遮挡 -->
|
||||
<view class="top-height"></view>
|
||||
|
||||
<!-- 正文内容 -->
|
||||
<view>
|
||||
<!-- 搜索 -->
|
||||
<view class="search">
|
||||
<picker mode="date" :value="defaultDate" :start="startDate" :end="endDate"
|
||||
@change="bindDateChange" class="picker-bg">
|
||||
<view class="picker">
|
||||
<uni-icons custom-prefix="iconfont" color="#ffffff" type="icon-phoneshizhong" size="18"></uni-icons>
|
||||
<view>{{defaultDate}}</view>
|
||||
<uni-icons type="down" size="18"></uni-icons>
|
||||
</view>
|
||||
</picker>
|
||||
<picker @change="bindPickerChange" :value="peopleIndex" :range="peopleArr" class="picker-bg">
|
||||
<view class="picker">
|
||||
<uni-icons type="person" size="18"></uni-icons>
|
||||
<view>{{peopleArr[peopleIndex]}}</view>
|
||||
<uni-icons type="down" size="18"></uni-icons>
|
||||
</view>
|
||||
</picker>
|
||||
<button type="default" @click="handleSearch" size="mini" class="btn-search">查询</button>
|
||||
</view>
|
||||
|
||||
<!-- 回款信息查询 -->
|
||||
<view class="white-bg">
|
||||
<view class="table-title">回款信息查询</view>
|
||||
<table class="my-table">
|
||||
<tr>
|
||||
<th class="tab-width100">姓名</th>
|
||||
<th class="tab-width160">客户名称</th>
|
||||
<th>目标回款</th>
|
||||
<th>实际回款</th>
|
||||
<th>完成度</th>
|
||||
</tr>
|
||||
<tr v-for="(item, index) in tableData" :key="index">
|
||||
<td>{{ item.name }}</td>
|
||||
<td class="txtLeft">{{ item.guestName }}</td>
|
||||
<td>{{ item.tragetReturnMoney }}</td>
|
||||
<td>{{ item.returnMoney }}</td>
|
||||
<td>{{ item.completRate }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted } from 'vue'
|
||||
import customHeader from '@/components/customHeader.vue'
|
||||
import { getDate} from '@/utils/datetime.js'
|
||||
|
||||
|
||||
// 开始时间
|
||||
let startDate = getDate('start');
|
||||
// 结束时间,间隔10年
|
||||
let endDate = getDate('end');
|
||||
let defaultDate = getDate({ format: true })
|
||||
let bindDateChange = (e) =>{
|
||||
defaultDate = e.detail.value
|
||||
}
|
||||
|
||||
let peopleIndex = ref(0);
|
||||
let peopleArr = ["张志刚1","张志刚2"];
|
||||
// 选择列表
|
||||
let bindPickerChange = (e)=>{
|
||||
console.log('picker发送选择改变,携带值为', e.detail.value)
|
||||
peopleIndex.value = e.detail.value
|
||||
}
|
||||
|
||||
let searchValue = ref(null)
|
||||
// 查询搜索跳转
|
||||
let handleSearch = () => {
|
||||
console.log(searchValue.value)
|
||||
}
|
||||
|
||||
const tableData = [
|
||||
{ name: '张志钢',guestName:'航宇救生装备有限公司',tragetReturnMoney:677153.25,returnMoney:677153.25,completRate:'100%'},
|
||||
{ name: '张志钢',guestName:'中国船舶集团有限公司第七一七研究所',tragetReturnMoney:'700000.00',returnMoney:'53890.00',completRate:'7.7%'},
|
||||
{ name: '张志钢',guestName:'北京国科舰航传感技术有限公司',tragetReturnMoney:'290877.00',returnMoney:'290877.00',completRate:'100%'},
|
||||
{ name: '张志钢',guestName:'武汉杭久电气有限公司',tragetReturnMoney:869706.80,returnMoney:537809.75,completRate:'61.8%'},
|
||||
{ name: '张志钢',guestName:'深圳市欧灿科技有限公司',tragetReturnMoney:328097.10,returnMoney:297905.37,completRate:'90.8%'},
|
||||
{ name: '张志钢',guestName:'其他',tragetReturnMoney:558703.02,returnMoney:558703.02,completRate:'100%'},
|
||||
{ name: '张志钢',guestName:'武汉航空仪表有限责任公司',tragetReturnMoney:'9807328.00',returnMoney:8692300.93,completRate:'88.6%'},
|
||||
{ name: '张志钢',guestName:'武汉永力科技股份有限公司',tragetReturnMoney:539087.21,returnMoney:539087.21,completRate:'100%'},
|
||||
|
||||
]
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.search {
|
||||
display: flex;
|
||||
padding:0 30rpx;
|
||||
}
|
||||
|
||||
.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 .picker-bg{
|
||||
display: flex;
|
||||
background-color: #6FA2F8;
|
||||
border-radius: 25px;
|
||||
color:#fff;
|
||||
font-size:28rpx;
|
||||
padding:0rpx 20rpx;
|
||||
/* #ifndef APP-PLUS */
|
||||
padding:10rpx 20rpx 0 20rpx;
|
||||
/* #endif */
|
||||
margin-right:20rpx;
|
||||
}
|
||||
.search .picker-bg .picker {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
/* #ifndef APP-PLUS */
|
||||
padding-top:2rpx;
|
||||
/* #endif */
|
||||
}
|
||||
.search .picker-bg .picker .uni-icons{
|
||||
color:#fff !important;
|
||||
}
|
||||
.search .picker-bg .picker .uni-icons:first-child{
|
||||
margin-right: 10rpx;
|
||||
}
|
||||
.search .picker-bg .picker .uniui-down{
|
||||
margin-left: 20rpx;
|
||||
}
|
||||
|
||||
.white-bg {
|
||||
width: 750rpx;
|
||||
margin: 0;
|
||||
border-radius: 8px 8px 0 0;
|
||||
padding:20rpx 0rpx;
|
||||
margin-top:20rpx;
|
||||
/* #ifdef APP-PLUS */
|
||||
height:calc(100vh - 135px);
|
||||
/* #endif */
|
||||
/* #ifndef APP-PLUS */
|
||||
height:calc(100vh - 112px);
|
||||
/* #endif */
|
||||
}
|
||||
|
||||
.table-title{
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
border-bottom:2px solid #E7E7E7;
|
||||
padding-bottom:20rpx;
|
||||
}
|
||||
</style>
|
||||
216
src/pages/business/CRM/visitorReport.vue
Normal file
216
src/pages/business/CRM/visitorReport.vue
Normal file
@@ -0,0 +1,216 @@
|
||||
<template>
|
||||
<view class="con-body">
|
||||
<view class="con-bg">
|
||||
<!-- 头部 -->
|
||||
<customHeader ref="customHeaderRef" :title="'走访报告列表'" :leftFlag="true" :rightFlag="true">
|
||||
<template #right>
|
||||
<view class="head-right" @click="handleAdd">
|
||||
<uni-icons type="plus" size="24" color="#B7D2FF"></uni-icons>新增
|
||||
</view>
|
||||
</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="handleDetail(item)">
|
||||
<view class="report-list">
|
||||
<view class="title">{{ item.title }}</view>
|
||||
<view class="r-list">
|
||||
<view class="r-name">{{ item.name }}</view>
|
||||
<view class="r-right btn-orange" size="mini">{{ item.statusName }}</view>
|
||||
</view>
|
||||
<view class="border-bottom"></view>
|
||||
<view class="r-list">
|
||||
<view class="r-left">报告类型</view>
|
||||
<view class="r-right">{{ item.reportTypeName }}</view>
|
||||
</view>
|
||||
<view class="border-bottom"></view>
|
||||
<view class="r-list">
|
||||
<view class="r-left">报告人</view>
|
||||
<view class="r-right">{{ item.reportPeople }}</view>
|
||||
</view>
|
||||
<view class="border-bottom"></view>
|
||||
<view class="r-list">
|
||||
<view class="r-left">报告日期</view>
|
||||
<view class="r-right">{{ item.dateStr }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</mescroll-uni>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted } 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'
|
||||
|
||||
// 获取导航栏高度用于内容区域padding
|
||||
const navBarPaddingTop = ref(0);
|
||||
onMounted(() => {
|
||||
navBarPaddingTop.value = getNavBarPaddingTop() * 2;
|
||||
})
|
||||
|
||||
let searchValue = ref(null)
|
||||
// 查询搜索跳转
|
||||
let handleSearch = () => {
|
||||
console.log(searchValue.value)
|
||||
}
|
||||
|
||||
// 新增
|
||||
let handleAdd = ()=>{
|
||||
uni.navigateTo({ url:'/pages/business/CRM/visitorReportAdd' })
|
||||
}
|
||||
|
||||
// 查询列表
|
||||
let list = ref([]);
|
||||
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 getVisitorReportList(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 getVisitorReportList(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 getVisitorReportList = (pageIndex, pageSize) => {
|
||||
return new Promise(async (resolve) => {
|
||||
let param = {
|
||||
pageIndex,
|
||||
pageSize
|
||||
}
|
||||
|
||||
let res = await visitorReportList(param);
|
||||
resolve({
|
||||
list: res.list,
|
||||
total: res.totalCount
|
||||
});
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
// 跳转到详情
|
||||
let handleDetail=(item)=>{
|
||||
uni.navigateTo({
|
||||
url: "/pages/business/CRM/visitorReportDetail?id="+item.id
|
||||
})
|
||||
}
|
||||
</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>
|
||||
150
src/pages/business/CRM/visitorReportAdd.vue
Normal file
150
src/pages/business/CRM/visitorReportAdd.vue
Normal file
@@ -0,0 +1,150 @@
|
||||
<template>
|
||||
<view class="con-body">
|
||||
<view class="con-bg">
|
||||
<!-- 头部 -->
|
||||
<customHeader ref="customHeaderRef" :title="'走访报告添加'" :leftFlag="true" :rightFlag="true">
|
||||
<template #right>
|
||||
<view class="head-right" @click="submitForm">
|
||||
<uni-icons custom-prefix="iconfont" type="icon-phonebaocun" size="22"
|
||||
color="#B7D2FF"></uni-icons>保存
|
||||
</view>
|
||||
</template>
|
||||
</customHeader>
|
||||
|
||||
<!-- 高度来避免头部遮挡 -->
|
||||
<view class="top-height"></view>
|
||||
|
||||
<!-- 正文内容 -->
|
||||
<view class="white-bg">
|
||||
<view class="form-con">
|
||||
<uni-forms ref="formRef" :model="formData" :rules="rules" label-width="100px" >
|
||||
<uni-forms-item label="客户名称" name="guestName" class="f-c-right">
|
||||
<picker @change="bindPickerChange" :value="guestIndex" :range="guestArr">
|
||||
<view class="f-c-text">
|
||||
{{guestArr[guestIndex]}}
|
||||
<uni-icons type="right" size="20" color="#A0A0A0"></uni-icons>
|
||||
</view>
|
||||
</picker>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="签到记录" class="f-c-right">
|
||||
<view class="f-c-text txt-right">--</view>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="我方领导" name="leader" required class="uni-forms-item is-direction-top is-top">
|
||||
<uni-easyinput v-model="formData.leader" placeholder="请输入我方领导" />
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="走访日期" name="visitDate" class="uni-forms-item is-direction-top is-top">
|
||||
<uni-datetime-picker type="date" :clear-icon="false" v-model="formData.visitDate" @change="changeDate" />
|
||||
</uni-forms-item>
|
||||
</uni-forms>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted } from 'vue'
|
||||
import customHeader from '@/components/customHeader.vue'
|
||||
import{ getGuestList} from '@/api/business.js'
|
||||
|
||||
// 客户名称列表
|
||||
let guestList = ref([]);
|
||||
let guestArr = ref([])
|
||||
let guestIndex = ref(0);
|
||||
let selectGuestList = async ()=>{
|
||||
let res = await getGuestList();
|
||||
let list = res.list;
|
||||
list.forEach(item => {
|
||||
guestArr.value.push(item.name)
|
||||
});
|
||||
guestList.value = res.list
|
||||
}
|
||||
selectGuestList();
|
||||
|
||||
// 选择客户列表
|
||||
let bindPickerChange = (e)=>{
|
||||
console.log('picker发送选择改变,携带值为', e.detail.value)
|
||||
guestIndex.value = e.detail.value
|
||||
}
|
||||
|
||||
// 表单ref
|
||||
const formRef = ref(null);
|
||||
|
||||
// 表单数据
|
||||
const formData = ref({
|
||||
guestName:'',
|
||||
leader:'',
|
||||
visitDate:''
|
||||
});
|
||||
// 验证规则
|
||||
const rules = {
|
||||
leader: {
|
||||
rules: [
|
||||
{ required: true, errorMessage: '我方领导不能为空' }
|
||||
]
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
// 修改日期
|
||||
let changeDate = (e)=>{
|
||||
console.log('changeDate:', e);
|
||||
};
|
||||
|
||||
// 保存走访报告
|
||||
const submitForm = async () => {
|
||||
try {
|
||||
// 验证表单
|
||||
await formRef.value.validate();
|
||||
|
||||
// 验证通过后的操作
|
||||
uni.showToast({
|
||||
title: '验证通过',
|
||||
icon: 'success'
|
||||
});
|
||||
console.log('表单数据:', formData.value);
|
||||
|
||||
// 这里可以添加提交到服务器的代码
|
||||
|
||||
} catch (err) {
|
||||
console.log('表单验证失败:', err);
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.white-bg {
|
||||
width: 750rpx;
|
||||
padding: 30rpx 0 0;
|
||||
margin-bottom: 0;
|
||||
border-radius: 8px 8px 0 0;
|
||||
}
|
||||
.form-con{
|
||||
/* #ifdef APP-PLUS */
|
||||
height:calc(100vh - 100px)
|
||||
/* #endif */
|
||||
/* #ifndef APP-PLUS */
|
||||
height:calc(100vh - 80px)
|
||||
/* #endif */
|
||||
}
|
||||
|
||||
:deep(.uni-date-x){
|
||||
display: block;
|
||||
}
|
||||
:deep(.uni-date-x .icon-calendar){
|
||||
float: right;
|
||||
margin-top:15rpx;
|
||||
margin-right: 20rpx;
|
||||
background:url('../../../static/images/business/icon-date.png') no-repeat;
|
||||
background-size:32rpx 35rpx;
|
||||
width:32rpx;
|
||||
height: 35rpx;
|
||||
}
|
||||
:deep(.uni-date-x .icon-calendar::before){
|
||||
display: none;
|
||||
}
|
||||
:deep(.uni-date-x .uni-date__x-input){
|
||||
padding-left:20rpx;
|
||||
color:#919191;
|
||||
}
|
||||
</style>
|
||||
190
src/pages/business/CRM/visitorReportDetail.vue
Normal file
190
src/pages/business/CRM/visitorReportDetail.vue
Normal file
@@ -0,0 +1,190 @@
|
||||
<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">{{ item.title }}</view>
|
||||
<view class="r-list">
|
||||
<view class="r-name">{{ item.name }}</view>
|
||||
<view class="r-right btn-pink" size="mini" @click="handleZan">
|
||||
<uni-icons type="hand-up-filled" size="16" color="#ffffff"></uni-icons> 赞
|
||||
</view>
|
||||
</view>
|
||||
<view class="border-bottom b-width"></view>
|
||||
<view class="r-list">
|
||||
<view class="r-left">报告人</view>
|
||||
<view class="r-right">{{ item.reportPeople }}</view>
|
||||
</view>
|
||||
<view class="border-bottom b-width"></view>
|
||||
<view class="r-list">
|
||||
<view class="r-left">走访日期</view>
|
||||
<view class="r-right">{{ item.dateStr }}</view>
|
||||
</view>
|
||||
<view class="border-bottom b-width"></view>
|
||||
<view class="r-list">
|
||||
<view class="r-left">是否双方高层领导参与</view>
|
||||
<view class="r-right">{{ item.isJoin }}</view>
|
||||
</view>
|
||||
<view class="border-bottom b-width"></view>
|
||||
<view class="r-list">
|
||||
<view class="r-left">活动类型</view>
|
||||
<view class="r-right">{{ item.activityTypeName }}</view>
|
||||
</view>
|
||||
<view class="border-bottom b-width"></view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 报告明细&评论 -->
|
||||
<customTabs v-model="activeTab" :tabs="tabList" :modelValue="activeTab">
|
||||
<!-- 报告明细 -->
|
||||
<block v-if="activeTab === 0">
|
||||
<view class="white-bg white-bg-2">
|
||||
<view class="report-list">
|
||||
<view class="r-list">
|
||||
<view class="r-left">拜访事项</view>
|
||||
<view class="r-right">获得信息</view>
|
||||
</view>
|
||||
<view class="border-bottom b-width"></view>
|
||||
<view class="r-list">
|
||||
<view class="r-left">拜访类型</view>
|
||||
<view class="r-right">竞争对手信息</view>
|
||||
</view>
|
||||
<view class="border-bottom b-width"></view>
|
||||
<view class="r-list" style="display: block">
|
||||
<view class="r-name">结果</view>
|
||||
<view class="r-gray">考察了几家连接器单位,陶瓷管壳55所、43所现在的开模费有所下降,便宜的几千块钱。</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="white-bg white-bg-2">
|
||||
<view class="report-list">
|
||||
<view class="r-list">
|
||||
<view class="r-left">拜访事项</view>
|
||||
<view class="r-right">日常走访</view>
|
||||
</view>
|
||||
<view class="border-bottom b-width"></view>
|
||||
<view class="r-list">
|
||||
<view class="r-left">拜访类型</view>
|
||||
<view class="r-right">竞争对手信息</view>
|
||||
</view>
|
||||
<view class="border-bottom b-width"></view>
|
||||
<view class="r-list">
|
||||
<view class="r-left">客户人员</view>
|
||||
<view class="r-right">孙琳琳、顾鹏、田玲</view>
|
||||
</view>
|
||||
<view class="border-bottom b-width"></view>
|
||||
<view class="r-list">
|
||||
<view class="r-left">我方人员</view>
|
||||
<view class="r-right">肖建华、石宪、刘启运、赵震</view>
|
||||
</view>
|
||||
<view class="border-bottom b-width"></view>
|
||||
<view class="r-list" style="display: block">
|
||||
<view class="r-name">结果</view>
|
||||
<view class="r-gray">
|
||||
<view class="margin-bottom20" >1、江苏屹信现在有意向寻找第二家管壳供方,主要是因为客户要求做一些封装产品和自研顶目涉及到SIP系统级封装研发工作。 </view>
|
||||
<view>2、江苏屹信管壳主要是功放管壳带热沉/CPC/钨铜/钼铜。陶瓷管壳希望在30天内交付。</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</block>
|
||||
<!-- 评论 -->
|
||||
<block v-if="activeTab === 1">
|
||||
<view class="white-bg white-bg-2">评论内容</view>
|
||||
</block>
|
||||
</customTabs>
|
||||
|
||||
|
||||
|
||||
<!-- 底部加高度来避免tabbar遮挡 -->
|
||||
<view class="bottom-height"></view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted } from 'vue'
|
||||
import { onLoad } from '@dcloudio/uni-app'
|
||||
import customHeader from '@/components/customHeader.vue'
|
||||
import customTabs from '@/components/customTabs.vue';
|
||||
import { visitorReportDetail } from '@/api/business.js'
|
||||
|
||||
|
||||
// 加载后调用
|
||||
let id = ref(null)
|
||||
onLoad((options) => {
|
||||
id.value = options.id;
|
||||
getVisitorReportDetail();
|
||||
})
|
||||
|
||||
// 查询详情
|
||||
let item = ref({});
|
||||
const getVisitorReportDetail = async () => {
|
||||
let param = {
|
||||
id: id.value
|
||||
}
|
||||
let res = await visitorReportDetail(param);
|
||||
item.value = res.activeObj;
|
||||
}
|
||||
|
||||
// 报告明细&评论
|
||||
const activeTab = ref(0);//默认报告明细
|
||||
const tabList = ['报告明细', '评论'];
|
||||
|
||||
// 跳转走访报告录入
|
||||
let handleZan = ()=>{
|
||||
|
||||
}
|
||||
|
||||
</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>
|
||||
215
src/pages/business/CRM/visitorReportEnter.vue
Normal file
215
src/pages/business/CRM/visitorReportEnter.vue
Normal file
@@ -0,0 +1,215 @@
|
||||
<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 white-bg-2">
|
||||
<view class="w-b-title" @click="handleExpand">日常走访
|
||||
<text>
|
||||
{{ expandFlag ? '展开' : '收起' }}
|
||||
<i :class="{ iconfont: true, 'icon-up': !expandFlag, 'icon-down': expandFlag }"></i>
|
||||
</text>
|
||||
</view>
|
||||
<view v-if="!expandFlag" class="form-con">
|
||||
<uni-forms ref="formRef" :model="formData" :rules="rules" label-width="100px" label-position="top">
|
||||
<uni-forms-item label="客户人员" name="guestName1" class="f-c-right">
|
||||
<multipleSelect :multiple="true" :value="monIndex1" downInner :options="guestList1"
|
||||
@change="changeValue1" :key="Math.round()"
|
||||
></multipleSelect>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="我方参与人" name="guestName2" class="f-c-right">
|
||||
<multipleSelect :multiple="true" :value="monIndex2" downInner :options="guestList2"
|
||||
@change="changeValue2" :key="Math.round()"
|
||||
></multipleSelect>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="活动内容" name="activeCon" required
|
||||
class="uni-forms-item is-direction-top is-top">
|
||||
<multipleSelect :multiple="true" :value="monIndex3" downInner :options="guestList3"
|
||||
@change="changeValue3" :key="Math.round()"
|
||||
></multipleSelect>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="活动文字" name="activeTxt" class="uni-forms-item is-direction-top is-top">
|
||||
<uni-easyinput type="textarea" autoHeight v-model="formData.activeTxt" placeholder="请输入" class="form-texarea" />
|
||||
</uni-forms-item>
|
||||
</uni-forms>
|
||||
<view class="footer-con">
|
||||
<button class="btn-default" type="default" @click="handleDelete" size="mini">删 除</button>
|
||||
<button class="btn-primary" type="primary" @click="submitForm" size="mini">保存/修改</button>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
|
||||
<!-- 业务招待 -->
|
||||
<view class="white-bg white-bg-2 white-bg-3">
|
||||
<view class="w-b-title" @click="handleExpand2">业务招待
|
||||
<text>
|
||||
{{ expandFlag2 ? '展开' : '收起' }}
|
||||
<i :class="{ iconfont: true, 'icon-up': !expandFlag2, 'icon-down': expandFlag2 }"></i>
|
||||
</text>
|
||||
</view>
|
||||
<view v-if="!expandFlag2" class="form-con">
|
||||
业务招待
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 技术交流 -->
|
||||
<view class="white-bg white-bg-2 white-bg-3">
|
||||
<view class="w-b-title" @click="handleExpand3">技术交流
|
||||
<text>
|
||||
{{ expandFlag3 ? '展开' : '收起' }}
|
||||
<i :class="{ iconfont: true, 'icon-up': !expandFlag3, 'icon-down': expandFlag3 }"></i>
|
||||
</text>
|
||||
</view>
|
||||
<view v-if="!expandFlag3" class="form-con">
|
||||
技术交流
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, reactive, onMounted } from 'vue'
|
||||
import customHeader from '@/components/customHeader.vue'
|
||||
import multipleSelect from '@/components/multipleSelect.vue'
|
||||
|
||||
|
||||
// 日常走访
|
||||
let expandFlag = ref(false);
|
||||
let handleExpand = () => {
|
||||
expandFlag.value = !expandFlag.value;
|
||||
}
|
||||
|
||||
// 客户人员
|
||||
let monIndex1= reactive([0]);
|
||||
const changeValue1 = (item, value) => {
|
||||
console.log("客户人员", item, value);
|
||||
monIndex1 = value;
|
||||
};
|
||||
const guestList1 = [
|
||||
{ value: 0, text: "客户1" },
|
||||
{ value: 1, text: "客户2" },
|
||||
{ value: 2, text: "客户3" },
|
||||
{ value: 3, text: "客户4" },
|
||||
{ value: 4, text: "客户5" },
|
||||
];
|
||||
|
||||
// 我方人员
|
||||
let monIndex2= reactive([0]);
|
||||
const changeValue2 = (item, value) => {
|
||||
console.log("我方人员", item, value);
|
||||
monIndex2 = value;
|
||||
};
|
||||
const guestList2 = [
|
||||
{ value: 0, text: "我方1" },
|
||||
{ value: 1, text: "我方2" },
|
||||
{ value: 2, text: "我方3" },
|
||||
{ value: 3, text: "我方4" },
|
||||
{ value: 4, text: "我方5" },
|
||||
];
|
||||
|
||||
// 活动内容
|
||||
let monIndex3= reactive([0]);
|
||||
const changeValue3 = (item, value) => {
|
||||
console.log("活动内容", item, value);
|
||||
monIndex2 = value;
|
||||
};
|
||||
const guestList3 = [
|
||||
{ value: 0, text: "活动内容1" },
|
||||
{ value: 1, text: "活动内容2" },
|
||||
{ value: 2, text: "活动内容3" },
|
||||
{ value: 3, text: "活动内容4" },
|
||||
{ value: 4, text: "活动内容5" },
|
||||
];
|
||||
|
||||
// 业务招待
|
||||
let expandFlag2 = ref(true);
|
||||
let handleExpand2 = () => {
|
||||
expandFlag2.value = !expandFlag2.value;
|
||||
}
|
||||
|
||||
// 技术交流
|
||||
let expandFlag3 = ref(true);
|
||||
let handleExpand3 = () => {
|
||||
expandFlag3.value = !expandFlag3.value;
|
||||
}
|
||||
|
||||
// 表单ref
|
||||
const formRef = ref(null);
|
||||
|
||||
// 表单数据
|
||||
const formData = ref({
|
||||
guestName1: '',
|
||||
guestName2: '',
|
||||
activeCon:'',
|
||||
activeTxt: ''
|
||||
});
|
||||
// 验证规则
|
||||
const rules = {
|
||||
activeCon: {
|
||||
rules: [
|
||||
{ required: true, errorMessage: '请选择活动内容' }
|
||||
]
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
// 删除
|
||||
let handleDelete = ()=>{
|
||||
|
||||
}
|
||||
// 保存/修改
|
||||
const submitForm = async () => {
|
||||
try {
|
||||
// 验证表单
|
||||
await formRef.value.validate();
|
||||
|
||||
// 验证通过后的操作
|
||||
uni.showToast({
|
||||
title: '验证通过',
|
||||
icon: 'success'
|
||||
});
|
||||
console.log('表单数据:', formData.value);
|
||||
|
||||
// 这里可以添加提交到服务器的代码
|
||||
|
||||
} catch (err) {
|
||||
console.log('表单验证失败:', err);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.white-bg {
|
||||
width: 690rpx;
|
||||
margin: 0;
|
||||
border-radius: 8px 8px 0 0;
|
||||
}
|
||||
|
||||
.white-bg.white-bg-2 {
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
.white-bg.white-bg-3 {
|
||||
border-radius:0
|
||||
}
|
||||
|
||||
.white-bg .w-b-title {
|
||||
color: #3384DF;
|
||||
font-size: 38rpx;
|
||||
}
|
||||
|
||||
.form-con{
|
||||
padding:30rpx 0 0;
|
||||
}
|
||||
:deep(.form-con .uni-forms-item){
|
||||
margin-bottom:22px !important;
|
||||
}
|
||||
|
||||
</style>
|
||||
185
src/pages/business/CRM/vistorCheckin.vue
Normal file
185
src/pages/business/CRM/vistorCheckin.vue
Normal file
@@ -0,0 +1,185 @@
|
||||
<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">
|
||||
<image src="../../../static/images/business/btn-qd.png" class="btn-image" @click="handleCheckIn" />
|
||||
<image src="../../../static/images/business/btn-dk.png" class="btn-image" @click="handleClockIn" />
|
||||
<view class="check-desc">
|
||||
业务人员可通过<text class="font-orange">签到</text>或<text class="font-blue">打卡</text>进行行为记录,该时间会和走访报告中的时间进行关联,便于查看。
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 打卡遮罩层 -->
|
||||
<view class="check-con" v-if="checkFlag">
|
||||
<view class="check-in">
|
||||
<view class="check-tip">打卡</view>
|
||||
<view class="check-title">确定要在此处打卡吗?</view>
|
||||
<view class="check-location">
|
||||
<uni-icons type="location-filled" size="30" color="#0395E0"></uni-icons> 亚洲金融大厦
|
||||
</view>
|
||||
<view class="check-address">北京市朝阳区天辰东路1号院</view>
|
||||
<view class="check-footer">
|
||||
<button class="btn-default" type="default" @click="handleCancel" size="mini">取 消</button>
|
||||
<button class="btn-primary" type="primary" @click="handleSubmit" size="mini">确 定</button>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted } from 'vue'
|
||||
import customHeader from '@/components/customHeader.vue'
|
||||
|
||||
|
||||
let checkFlag = ref(false);
|
||||
// 签到
|
||||
let handleCheckIn = () => {
|
||||
console.log("签到")
|
||||
checkFlag.value = true;
|
||||
}
|
||||
// 打卡
|
||||
let handleClockIn = () => {
|
||||
console.log("打卡")
|
||||
checkFlag.value = true;
|
||||
}
|
||||
// 取消
|
||||
let handleCancel = () => {
|
||||
checkFlag.value = false;
|
||||
|
||||
}
|
||||
// 确定
|
||||
let handleSubmit = () => {
|
||||
checkFlag.value = false;
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.white-bg {
|
||||
width: 650rpx;
|
||||
margin: 0;
|
||||
border-radius: 8px 8px 0 0;
|
||||
padding: 50rpx;
|
||||
/* #ifdef APP-PLUS */
|
||||
height: calc(100vh - 125px);
|
||||
/* #endif */
|
||||
/* #ifndef APP-PLUS */
|
||||
height: calc(100vh - 98px);
|
||||
/* #endif */
|
||||
|
||||
|
||||
}
|
||||
|
||||
.btn-image {
|
||||
width: 340rpx;
|
||||
height: 340rpx;
|
||||
margin: 30rpx auto 60rpx;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.check-desc {
|
||||
background-color: #F5F5F5;
|
||||
padding: 40rpx 50rpx;
|
||||
font-size: 28rpx;
|
||||
border-radius: 10px;
|
||||
margin-top: 100rpx;
|
||||
}
|
||||
|
||||
.check-desc .font-orange {
|
||||
color: #F5813A;
|
||||
font-size: 32rpx;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.check-desc .font-blue {
|
||||
color: #2CBAEF;
|
||||
font-size: 32rpx;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* 弹窗处理 */
|
||||
.check-con {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background-color: rgba(0, 0, 0, 0.4);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
z-index: 999;
|
||||
}
|
||||
|
||||
/* 遮罩层内容样式 */
|
||||
.check-in {
|
||||
background-color: #fff;
|
||||
padding: 40rpx 30rpx 60rpx;
|
||||
border-radius: 10px;
|
||||
/* width: 620rpx; */
|
||||
width: 560rpx;
|
||||
position: absolute;
|
||||
top: 48%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.check-in .check-tip {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.check-in .check-title {
|
||||
font-size: 32rpx;
|
||||
padding: 20rpx 0;
|
||||
}
|
||||
.check-in .check-location{
|
||||
color:#0395E0;
|
||||
font-size:42rpx;
|
||||
font-weight: bold;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin:30rpx 0;
|
||||
}
|
||||
.check-in .check-location .uniui-location-filled{
|
||||
font-weight: normal;
|
||||
margin-right: 20rpx;
|
||||
}
|
||||
.check-in .check-address{
|
||||
color:#919191;
|
||||
font-size: 32rpx;
|
||||
margin-bottom:80rpx;
|
||||
}
|
||||
|
||||
.check-in .check-footer {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.check-in .check-footer .btn-default,
|
||||
.check-in .check-footer .btn-primary {
|
||||
background-color: #fff;
|
||||
border: 1px solid #05A3F4;
|
||||
color: #05A3F4;
|
||||
border-radius: 25px;
|
||||
padding: 0rpx 80rpx;
|
||||
font-size: 34rpx;
|
||||
/* margin-left: 0;
|
||||
margin-right: 20rpx; */
|
||||
}
|
||||
|
||||
.check-in .check-footer .btn-primary {
|
||||
background-color: #05A3F4;
|
||||
border: 1px solid #05A3F4;
|
||||
color: #fff;
|
||||
/* padding: 0rpx 60rpx; */
|
||||
}
|
||||
</style>
|
||||
142
src/pages/business/CRM/weekPlanUpdate.vue
Normal file
142
src/pages/business/CRM/weekPlanUpdate.vue
Normal file
@@ -0,0 +1,142 @@
|
||||
<template>
|
||||
<view class="con-body">
|
||||
<view class="con-bg">
|
||||
<!-- 头部 -->
|
||||
<customHeader ref="customHeaderRef" :title="'修改周计划'" :leftFlag="true" :rightFlag="true">
|
||||
<template #right>
|
||||
<view class="head-right" @click="submitForm">
|
||||
<uni-icons custom-prefix="iconfont" type="icon-phonebaocun" size="22"
|
||||
color="#B7D2FF"></uni-icons>保存
|
||||
</view>
|
||||
</template>
|
||||
</customHeader>
|
||||
<!-- 高度来避免头部遮挡 -->
|
||||
<view class="top-height"></view>
|
||||
|
||||
<!-- 正文内容 -->
|
||||
<view class="week-plan-title">
|
||||
<view>姓名:赵欣鸣</view>
|
||||
<view>2025-09 第 3 周</view>
|
||||
</view>
|
||||
<view class="white-bg white-bg-2">
|
||||
<view class="w-b-title">2025-09-21 星期一
|
||||
<text>
|
||||
<uni-icons type="right" size="20" color="#A0A0A0"></uni-icons>
|
||||
</text>
|
||||
</view>
|
||||
<view class="form-con">
|
||||
<uni-forms ref="formRef" :model="formData" :rules="rules" label-width="100px" label-position="top">
|
||||
<uni-forms-item label="工作类型" name="workType">
|
||||
<view class="form-picker">
|
||||
<picker @change="changeValue" :value="workIndex" :range="workList">
|
||||
<view class="flex">
|
||||
{{workList[workIndex]}}
|
||||
<uni-icons type="down" size="20" color="#A0A0A0"></uni-icons>
|
||||
</view>
|
||||
</picker>
|
||||
</view>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="内容" name="content">
|
||||
<uni-easyinput type="textarea" autoHeight v-model="formData.content" placeholder="请输入" class="form-texarea" />
|
||||
</uni-forms-item>
|
||||
</uni-forms>
|
||||
|
||||
</view>
|
||||
|
||||
</view>
|
||||
|
||||
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, reactive, onMounted } from 'vue'
|
||||
import customHeader from '@/components/customHeader.vue'
|
||||
import multipleSelect from '@/components/multipleSelect.vue'
|
||||
|
||||
// 工作类型
|
||||
let workIndex= ref(0);
|
||||
const workList = ["外出","出差","公司","办事处"];
|
||||
|
||||
// 表单ref
|
||||
const formRef = ref(null);
|
||||
|
||||
// 表单数据
|
||||
const formData = ref({
|
||||
workType:'',
|
||||
content: ''
|
||||
});
|
||||
// 验证规则
|
||||
const rules = {
|
||||
workType: {
|
||||
rules: [
|
||||
{ required: true, errorMessage: '请选择工作类型' }
|
||||
]
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
// 选择工作类型
|
||||
const changeValue = (e) => {
|
||||
console.log("工作类型", e.detail.value);
|
||||
workIndex = e.detail.value;
|
||||
formData.value.workType = workList[workIndex]
|
||||
};
|
||||
|
||||
// 保存
|
||||
const submitForm = async () => {
|
||||
try {
|
||||
// 验证表单
|
||||
await formRef.value.validate();
|
||||
|
||||
// 验证通过后的操作
|
||||
uni.showToast({
|
||||
title: '验证通过',
|
||||
icon: 'success'
|
||||
});
|
||||
console.log('表单数据:', formData.value);
|
||||
|
||||
// 这里可以添加提交到服务器的代码
|
||||
|
||||
} catch (err) {
|
||||
console.log('表单验证失败:', err);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.week-plan-title{
|
||||
color:#fff;
|
||||
padding: 0 30rpx 30rpx;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.white-bg {
|
||||
width: 690rpx;
|
||||
margin: 0;
|
||||
border-radius: 8px 8px 0 0;
|
||||
}
|
||||
|
||||
.white-bg.white-bg-2 {
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
.white-bg.white-bg-3 {
|
||||
border-radius:0
|
||||
}
|
||||
|
||||
.white-bg .w-b-title {
|
||||
color: #3384DF;
|
||||
font-size: 38rpx;
|
||||
}
|
||||
|
||||
.form-con{
|
||||
padding:30rpx 0 0;
|
||||
}
|
||||
:deep(.form-con .uni-forms-item){
|
||||
margin-bottom:22px !important;
|
||||
}
|
||||
|
||||
</style>
|
||||
181
src/pages/business/business.vue
Normal file
181
src/pages/business/business.vue
Normal file
@@ -0,0 +1,181 @@
|
||||
<template>
|
||||
<view class="con-body">
|
||||
<view class="con-bg">
|
||||
<!-- 头部 -->
|
||||
<customHeader ref="customHeaderRef" :title="'业务中心'"
|
||||
:leftFlag="false" :rightFlag="false"
|
||||
></customHeader>
|
||||
<!-- 高度来避免头部遮挡 -->
|
||||
<view class="top-height"></view>
|
||||
|
||||
<!-- 搜索 -->
|
||||
<view class="search">
|
||||
<uni-search-bar class="custom-search" radius="28"
|
||||
placeholder="请输入您想查询的内容或服务"
|
||||
clearButton="auto" cancelButton="none"
|
||||
bgColor="#6FA2F8" textColor="#ffffff"
|
||||
@confirm="handleSearch"
|
||||
/>
|
||||
</view>
|
||||
|
||||
<!-- 下拉刷新 -->
|
||||
<mescroll-uni ref="mescrollRef" @init="mescrollInit"
|
||||
:down="downOption" @down="downCallback"
|
||||
:fixed="false" class="scroll-h"
|
||||
>
|
||||
<!-- 首页日常服务 -->
|
||||
<view class="white-bg">
|
||||
<view class="w-b-title">
|
||||
首页日常服务
|
||||
<view type="primary" @click="handleEdit" class="btn-edit">编 辑</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 企业日常 -->
|
||||
<view class="white-bg">
|
||||
<view class="w-b-title" @click="handleExpand">企业日常
|
||||
<text>{{expandFlag?'展开':'收起'}}<i :class="{iconfont:true,'icon-up':!expandFlag,'icon-down':expandFlag}"></i></text>
|
||||
</view>
|
||||
<view class="logo-list" v-if="!expandFlag">
|
||||
<view v-for="(item,index) in list1" class="l-l-item" :key="index">
|
||||
<img :src="item.imgSrc" />
|
||||
<text class="font-gray">{{ item.name }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- CRM系统 -->
|
||||
<view class="white-bg">
|
||||
<view class="w-b-title" @click="handleExpand2">CRM系统
|
||||
<text>{{expandFlag2?'展开':'收起'}}<i :class="{iconfont:true,'icon-up':!expandFlag2,'icon-down':expandFlag2}"></i></text>
|
||||
</view>
|
||||
<view class="logo-list" v-if="!expandFlag2">
|
||||
<view v-for="(item,index) in list2" class="l-l-item" :key="index" @click="handleJump(item.url)">
|
||||
<uni-badge :text="item.badgeCount" size="small"></uni-badge>
|
||||
<img :src="item.imgSrc" />
|
||||
<text class="font-gray">{{ item.name }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 供应链采纳 -->
|
||||
<view class="white-bg">
|
||||
<view class="w-b-title">供应链采纳
|
||||
<text>展开<i :class="{iconfont:true,'icon-down':true}"></i></text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- PLM系统 -->
|
||||
<view class="white-bg">
|
||||
<view class="w-b-title">PLM系统
|
||||
<text>展开<i :class="{iconfont:true,'icon-down':true}"></i></text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 底部加高度来避免tabbar遮挡 -->
|
||||
<view class="bottom-height"></view>
|
||||
</mescroll-uni>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref,onMounted } from 'vue'
|
||||
import customHeader from '@/components/customHeader.vue'
|
||||
import MescrollUni from 'mescroll-uni/mescroll-uni.vue';
|
||||
import { getNavBarPaddingTop} from '@/utils/system.js'
|
||||
import { businessDaily,businessCRMList } from '@/api/business.js';
|
||||
|
||||
// 获取导航栏高度用于内容区域padding
|
||||
const navBarPaddingTop = ref(0);
|
||||
onMounted(() => {
|
||||
navBarPaddingTop.value = getNavBarPaddingTop()*2;
|
||||
})
|
||||
|
||||
// 查询搜索跳转
|
||||
let handleSearch = ()=>{
|
||||
|
||||
}
|
||||
|
||||
// 下拉刷新
|
||||
const mescrollRef = ref(null);
|
||||
const mescrollInit = (mescroll) => {
|
||||
mescrollRef.value = mescroll;
|
||||
};
|
||||
const downOption = ref({
|
||||
auto: true,
|
||||
textInOffset: '下拉刷新',
|
||||
textOutOffset: '释放更新',
|
||||
textLoading: '刷新中...'
|
||||
});
|
||||
|
||||
// 下拉刷新
|
||||
const downCallback = async (mescroll) => {
|
||||
try {
|
||||
setTimeout(async ()=>{
|
||||
// mescroll.resetUpScroll();
|
||||
},500);
|
||||
} catch (error) {
|
||||
mescroll.endErr();
|
||||
} finally {
|
||||
setTimeout(async ()=>{
|
||||
mescroll.endSuccess();
|
||||
},500);
|
||||
}
|
||||
}
|
||||
|
||||
// 日常服务编辑
|
||||
let handleEdit=()=>{
|
||||
|
||||
}
|
||||
|
||||
// 图标查询处理
|
||||
// 1.企业日常
|
||||
let list1 = ref([])
|
||||
let getBusinessDailyList= async ()=>{
|
||||
let busRes = await businessDaily({});
|
||||
list1.value = busRes.list || [];
|
||||
}
|
||||
getBusinessDailyList();
|
||||
// 企业日常-右侧展开
|
||||
let expandFlag=ref(false);
|
||||
let handleExpand = ()=>{
|
||||
expandFlag.value = !expandFlag.value;
|
||||
}
|
||||
|
||||
// 2.CRM系统
|
||||
let list2 = ref([])
|
||||
let getBusinessCRMList= async ()=>{
|
||||
let busRes = await businessCRMList({});
|
||||
list2.value = busRes.list || [];
|
||||
}
|
||||
getBusinessCRMList();
|
||||
// 企业日常-右侧展开
|
||||
let expandFlag2=ref(false);
|
||||
let handleExpand2 = ()=>{
|
||||
expandFlag2.value = !expandFlag2.value;
|
||||
}
|
||||
|
||||
// 跳转
|
||||
let handleJump=(url)=>{
|
||||
console.log(url)
|
||||
if(url){
|
||||
uni.navigateTo({ url })
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<style scope>
|
||||
.scroll-h{
|
||||
/* #ifdef APP-PLUS */
|
||||
height: calc(100vh - 120px) !important;
|
||||
/* #endif */
|
||||
/* #ifndef APP-PLUS */
|
||||
height: calc(100vh - 140px) !important;
|
||||
/* #endif */
|
||||
}
|
||||
:deep(.mescroll-upwarp){
|
||||
display:none
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user