首次上传

This commit is contained in:
浅念
2025-03-14 16:55:12 +08:00
commit 6a3ae3d600
1537 changed files with 512730 additions and 0 deletions
+180
View File
@@ -0,0 +1,180 @@
<template>
<view>
<uni-nav-bar leftText=" " :fixed="true" :border="false" leftIcon="back" @clickLeft="leftClick" color="#000000" backgroundColor="#fff" :statusBar="true" title="信息录入"></uni-nav-bar>
<view class="content">
<view class="cell">
<view>客户称呼 <text class="red">*</text></view>
<view class="right">
<input placeholder="输入客户称呼" v-model="form.name" />
</view>
</view>
<u-divider text=""></u-divider>
<view class="cell">
<view>性别</view>
<view class="right">
<u-radio-group v-model="form.gender">
<u-radio name="男">男</u-radio>
<u-radio name="女">女</u-radio>
</u-radio-group>
</view>
</view>
<u-divider text=""></u-divider>
<view class="cell">
<view>联系方式 <text class="red">*</text></view>
<view class="right">
<input placeholder="输入联系方式" v-model="form.phone" />
</view>
</view>
<u-divider text=""></u-divider>
<view class="cell">
<view>客户偏好</view>
<view class="right select" @click="showbrand = true">
<input placeholder="选择客户偏好" disabled v-model="brandname" />
<u-picker :show="showbrand" @cancel="cancel('showbrand')" :columns="brandList" keyName="name" @confirm="changeHandler"></u-picker>
<u-icon class="arrowright" name="arrow-right" size="18" color="#747474"></u-icon>
</view>
</view>
<u-divider text=""></u-divider>
<view class="cell">
<view>客户等级</view>
<view class="right select" @click="showtype = true">
<input placeholder="选择客户等级" disabled v-model="vehicle_type" />
<u-picker :show="showtype" @cancel="cancel('showtype')" :columns="typesList" keyName="name" @confirm="typesChange"></u-picker>
<u-icon class="arrowright" name="arrow-right" size="18" color="#747474"></u-icon>
</view>
</view>
<u-divider text=""></u-divider>
<view class="cell">
<view>国家地区</view>
<view class="right select" @click="showenergy = true">
<input placeholder="选择国家地区" disabled v-model="vehicle_energy" />
<u-picker :show="showenergy" @cancel="cancel('showenergy')" :columns="energyList" keyName="name" @confirm="energyChange"></u-picker>
<u-icon class="arrowright" name="arrow-right" size="18" color="#747474"></u-icon>
</view>
</view>
<u-divider text=""></u-divider>
<view class="cell">
<view>首次跟进</view>
<view class="right">
<input placeholder="首次跟进" type="digit" v-model="form.mileage"/>
</view>
</view>
<u-divider text=""></u-divider>
<view class="cell1">
<view>详细情况</view>
<view class="">
<textarea auto-height v-model="form.condition_desc" placeholder="详细情况..."/>
</view>
</view>
<u-gap height="100" bgColor="#fff"></u-gap>
</view>
<view class="foot">
<button class="btn" @click="nextFn">提交</button>
</view>
</view>
</template>
<script>
import { request,showToast } from '@/api/apiT.js'
// import ldSelect from '@/components/ld-select/ld-select.vue'
export default {
data() {
return {
brandList:[],
energyList:[],
typesList:[],
form: {
name: '',
gender: '男',
phone: '',
preference: '赵野军',
level: '初步接触',
region: '',
firstFollow: '2025-03-11 12:00:01',
details: ''
}
}
},
onLoad() {
const { windowWidth, windowHeight } = uni.getSystemInfoSync();
this.x = windowWidth-70
this.y = windowHeight-185
},
methods: {
leftClick(){
uni.navigateBack({})
},
}
}
</script>
<style lang="scss">
textarea {
min-height: 200rpx;// 设置默认高度 ,解决设置自适应高度之后高度无效问题
margin-top: 15px;
background-color: #F6F6F6;
padding: 15px;
border-radius: 10px;
}
.u-divider{
margin: 0px 0px !important;
}
.uniui-right{
position: absolute;
top: 2px;
}
.red{
color: red;
}
.content{
padding-top: 10px;
background: #FFFFFF;
height: calc(100vh - 44px);
}
.cell{
position: relative;
display: flex;
justify-content:space-between;
padding: 18px 20px;
align-items: center;
font-size: 32rpx;
font-weight: 500;
font-size: 32rpx;
color: #666666;
}
.arrowright{
margin-right: -15px;
}
.cell1{
font-size: 32rpx;
padding: 18px 20px;
align-items: center;
font-weight: 500;
color: #666666;
}
.right{
text-align: right;
color: #222222;
}
.select{
display: flex;
position: relative;
margin-right: 10px;
}
.foot{
position: fixed;
bottom: 0px;
width: 100%;
height: 90px;
background: #FFFFFF;
z-index: 1;
}
.btn{
background: linear-gradient(to right, #3471FF, #6776FF);
color: white;
border-radius: 50px;
width: 92%;
margin-bottom: 40px;
margin: 15px 4%;
}
</style>
+279
View File
@@ -0,0 +1,279 @@
<template>
<view>
<uni-nav-bar leftText=" " :fixed="true" :border="false" leftIcon="back" @clickLeft="leftClick" color="#000000" backgroundColor="#fff" :statusBar="true" title="客户资料"></uni-nav-bar>
<view class="content">
<view class="cell">
<view>客户称呼</view>
<view class="right">
<input placeholder="输入客户称呼" v-model="form.name" />
</view>
</view>
<u-divider text=""></u-divider>
<view class="cell">
<view>性别</view>
<view class="right">
<u-radio-group v-model="form.gender">
<u-radio name="男">男</u-radio>
<u-radio name="女">女</u-radio>
</u-radio-group>
</view>
</view>
<u-divider text=""></u-divider>
<view class="cell">
<view>联系方式 </view>
<view class="right">
<input placeholder="输入联系方式" v-model="form.phone" />
</view>
</view>
<u-divider text=""></u-divider>
<view class="cell">
<view>Email</view>
<view class="right">
<input placeholder="输入Email" v-model="form.phone" />
</view>
</view>
<u-divider text=""></u-divider>
<view class="cell">
<view>客户偏好</view>
<view class="right select" @click="showbrand = true">
<input placeholder="选择客户偏好" disabled v-model="brandname" />
<u-picker :show="showbrand" @cancel="cancel('showbrand')" :columns="brandList" keyName="name" @confirm="changeHandler"></u-picker>
<u-icon class="arrowright" name="arrow-right" size="18" color="#747474"></u-icon>
</view>
</view>
<u-divider text=""></u-divider>
<view class="cell">
<view>客户等级</view>
<view class="right select" @click="showtype = true">
<input placeholder="选择客户等级" disabled v-model="vehicle_type" />
<u-picker :show="showtype" @cancel="cancel('showtype')" :columns="typesList" keyName="name" @confirm="typesChange"></u-picker>
<u-icon class="arrowright" name="arrow-right" size="18" color="#747474"></u-icon>
</view>
</view>
<u-divider text=""></u-divider>
<view class="cell">
<view>公司</view>
<view class="right select" @click="showenergy = true">
<input placeholder="去定位" disabled v-model="vehicle_energy" />
<u-picker :show="showenergy" @cancel="cancel('showenergy')" :columns="energyList" keyName="name" @confirm="energyChange"></u-picker>
<u-icon class="arrowright" name="arrow-right" size="18" color="#747474"></u-icon>
</view>
</view>
<u-divider text=""></u-divider>
<view class="cell1">
<view>备注(非必填)</view>
<view class="">
<textarea auto-height v-model="form.condition_desc" placeholder="详细情况..."/>
</view>
</view>
</view>
<u-gap height="10" bgColor="#F6F6F6"></u-gap>
<view class="steps">
<view class="title">
跟进记录 <text class="status">跟进中</text>
</view>
<u-steps current="0" direction="column" dot>
<u-steps-item title="在线跟进">
<view slot="desc">
<view class="">
时间:2025-03-11 12:00:01
</view>
<view class="">
<image src="/static/image/customer/addr.png" mode=""></image>
</view>
</view>
</u-steps-item>
<u-steps-item title="拜访跟进">
<view slot="desc" class="desc">
<view class="">
<view class="">
时间:2025-03-11 12:00:01
</view>
<view class="">地址:迪拜某某地方</view>
<view class="">拜访内容:讨论需求</view>
</view>
<view class="">
<image src="/static/image/customer/addr.png" mode=""></image>
</view>
</view>
</u-steps-item>
<u-steps-item title="拜访跟进">
<view slot="desc" class="desc">
<view class="">
<view class="">
时间:2025-03-11 12:00:01
</view>
<view class="">地址:迪拜某某地方</view>
<view class="">拜访内容:讨论需求</view>
</view>
<view class="">
<image src="/static/image/customer/addr.png" mode=""></image>
</view>
</view>
</u-steps-item>
</u-steps>
<!-- <empty :list="brandList"></empty> -->
</view>
<view class="zw"></view>
<view class="foot">
<button class="btn" @click="nextFn">提交</button>
</view>
</view>
</template>
<script>
import { request,showToast } from '@/api/apiT.js'
export default {
data() {
return {
id:'',
brandList:[],
energyList:[],
typesList:[],
brandList1:[],
energyList1:[],
typesList1:[],
showbrand: false,
showtype: false,
showenergy: false,
defaultIndex1:[0],
defaultIndex2:[0],
defaultIndex3:[0],
brandname:'',
vehicle_type:'',
vehicle_energy:'',
form:{
name:'',
vin:'',
brand:'',
price:'',
vehicle_type:'',
vehicle_energy:'',
mileage :'',
vehicle_age:'',
condition_desc:'',
front_45_degree:'',
front_left_45_degree:'',
front_left_headlight:'',
front_view:'',
lower_front:'',
wheel_hub:'',
front_right_seat:'',
right_lower_side:'',
rear_right_taillight:'',
rear_right_45_degree:'',
lower_rear:'',
trunk:'',
left_lower_side:'',
rear_seats:'',
center_console:'',
control_panel:'',
gear_shift:'',
car_key:'',
steering_wheel:'',
dashboard:'',
odometer_reading:'',
front_left_door_panel:'',
front_left_door_function_area:'',
front_left_seat:'',
interior_ceiling:'',
}
}
},
onLoad(options) {
console.log(options);
var that = this
},
methods: {
leftClick(){
uni.navigateBack({})
}
}
}
</script>
<style lang="scss">
uni-page-body {
background-color: #fff !important;
}
.u-divider{
margin: 0px 0px !important;
}
.zw{
height: 120px;
}
.uniui-right{
position: absolute;
top: 2px;
}
.content{
padding-top: 10px;
background: #FFFFFF;
}
.cell{
position: relative;
display: flex;
justify-content:space-between;
padding: 18px 20px;
align-items: center;
font-weight: 500;
}
.arrowright{
margin-right: -15px;
}
.cell1{
font-size: 32rpx;
padding: 18px 20px;
align-items: center;
font-weight: 500;
}
.right{
text-align: right;
}
.select{
display: flex;
position: relative;
margin-right: 10px;
}
.steps{
padding: 15px;
image{
width: 44px;
height:44px;
}
.desc{
display: flex;
justify-content: space-between;
align-items: center;
color: #999999;
}
.title{
color: #666666;
font-size: 32rpx;
margin-bottom: 15px;
.status{
font-size: 28rpx;
color: #3471FF;
margin-left: 10px;
}
}
}
.foot{
position: fixed;
bottom: 0px;
width: 100%;
height: 160rpx;
background: #FFFFFF;
z-index: 1;
}
.btn{
background: linear-gradient(to right, #3471FF, #6776FF);
color: white;
border-radius: 50px;
width: 92%;
margin-bottom: 40px;
margin: 15px 4%;
}
</style>
+297
View File
@@ -0,0 +1,297 @@
<template>
<view>
<uni-nav-bar leftText=" " :fixed="true" :border="false" leftIcon="back" @clickLeft="leftClick" color="#000000" backgroundColor="#fff" :statusBar="true" title="添加跟进"></uni-nav-bar>
<view class="content">
<view class="cell">
<view>跟进方式</view>
<view class="right">
<u-radio-group v-model="form.followType">
<u-radio name="1">在线跟进</u-radio>
<u-radio name="2">拜访</u-radio>
</u-radio-group>
</view>
</view>
<u-divider text=""></u-divider>
<view class="cell">
<view>跟进时间</view>
<view class="right" @click="show = true">
<input placeholder="跟进时间" v-model="form.firstFollow" />
</view>
</view>
<u-divider text=""></u-divider>
<view class="cell1" v-if="form.followType==1">
<view>上传跟进最后聊天截图</view>
<view>
<uni-file-picker fileMediatype="image" limit="1" :del-icon="false" disable-preview @select="select" @delete="delfn('front_45_degree')">
<image src="/static/image/customer/upimg.png" mode="" class="addimg"></image>
</uni-file-picker>
</view>
</view>
<view class="cell" v-if="form.followType==2">
<view>当前位置</view>
<view class="right">
<input placeholder="输入当前位置" v-model="form.phone" />
</view>
</view>
<u-divider text="" v-if="form.followType==2"></u-divider>
<view class="cell1" v-if="form.followType==2">
<view>当前位置拍照上传</view>
<view style="margin-top: 10px;">
<uni-file-picker fileMediatype="image" limit="1" :del-icon="false" disable-preview @select="select" @delete="delfn('front_45_degree')">
<image src="/static/image/customer/upimg.png" mode="" class="addimg"></image>
</uni-file-picker>
</view>
</view>
<u-divider text="" v-if="form.followType==2"></u-divider>
<view class="cell1" v-if="form.followType==2">
<view>拜访内容</view>
<view class="yuyin">
<textarea auto-height v-model="form.condition_desc" placeholder="拜访内容..."/>
<image src="/static/image/customer/yuyin.png" mode=""></image>
</view>
</view>
<u-divider text="" v-if="form.followType==2"></u-divider>
<view class="cell1" v-if="form.followType==2">
<view>备注(非必填)</view>
<view class="">
<textarea auto-height v-model="form.condition_desc" placeholder="详细情况..."/>
</view>
</view>
</view>
<u-gap height="10" bgColor="#F6F6F6"></u-gap>
<view class="steps">
<view class="title">
跟进记录 <text class="status">跟进中</text>
</view>
<u-steps current="0" direction="column" dot>
<u-steps-item title="在线跟进">
<view slot="desc">
<view class="">
时间:2025-03-11 12:00:01
</view>
<view class="">
<image src="/static/image/customer/addr.png" mode=""></image>
</view>
</view>
</u-steps-item>
<u-steps-item title="拜访跟进">
<view slot="desc" class="desc">
<view class="">
<view class="">
时间:2025-03-11 12:00:01
</view>
<view class="">地址:迪拜某某地方</view>
<view class="">拜访内容:讨论需求</view>
</view>
<view class="">
<image src="/static/image/customer/addr.png" mode=""></image>
</view>
</view>
</u-steps-item>
<u-steps-item title="拜访跟进">
<view slot="desc" class="desc">
<view class="">
<view class="">
时间:2025-03-11 12:00:01
</view>
<view class="">地址:迪拜某某地方</view>
<view class="">拜访内容:讨论需求</view>
</view>
<view class="">
<image src="/static/image/customer/addr.png" mode=""></image>
</view>
</view>
</u-steps-item>
</u-steps>
<!-- <empty :list="brandList"></empty> -->
</view>
<u-gap height="100" bgColor="#fff"></u-gap>
<view class="foot">
<button class="btn1" @click="nextFn">下次跟进提醒</button>
<button class="btn" @click="nextFn">提交</button>
</view>
<u-datetime-picker
:show="show"
v-model="firstFollow"
mode="datetime"
@confirm="confirm"
@cancel="cancel"
@change="change"
></u-datetime-picker>
</view>
</template>
<script>
import { request,showToast } from '@/api/apiT.js'
// import ldSelect from '@/components/ld-select/ld-select.vue'
export default {
data() {
return {
brandList:[],
energyList:[],
typesList:[],
show:false,
firstFollow: '2025-03-11 12:00:01',
form: {
name: '',
followType: '1',
phone: '',
preference: '赵野军',
level: '初步接触',
region: '',
firstFollow: '2025-03-11 12:00:01',
details: ''
}
}
},
onLoad() {
const { windowWidth, windowHeight } = uni.getSystemInfoSync();
this.x = windowWidth-70
this.y = windowHeight-185
},
methods: {
leftClick(){
uni.navigateBack({})
},
cancel() {
this.show = false
},
confirm(e) {
this.show = false
this.form.firstFollow = this.result(e.value, e.mode)
console.log(this.result(e.value, e.mode))
console.log(this.form.firstFollow )
},
change(e) {
// console.log('change', e)
},
result(time, mode) {
const timeFormat = uni.$u.timeFormat
switch (mode) {
case 'datetime':
return timeFormat(time, 'yyyy-mm-dd hh:MM')
case 'date':
return timeFormat(time, 'yyyy-mm-dd')
case 'year-month':
return timeFormat(time, 'yyyy-mm')
case 'time':
return time
default:
return ''
}
},
}
}
</script>
<style lang="scss">
uni-page-body {
background-color: #fff !important;
}
textarea {
min-height: 200rpx;// 设置默认高度 ,解决设置自适应高度之后高度无效问题
margin-top: 15px;
background-color: #F6F6F6;
padding: 15px;
border-radius: 10px;
}
.u-divider{
margin: 0px 0px !important;
}
.content{
padding-top: 10px;
background: #FFFFFF;
// height: calc(100vh - 44px);
}
.cell{
position: relative;
display: flex;
justify-content:space-between;
padding: 18px 20px;
align-items: center;
font-size: 32rpx;
font-weight: 500;
font-size: 32rpx;
color: #666666;
}
.arrowright{
margin-right: -15px;
}
.cell1{
font-size: 32rpx;
padding: 18px 20px;
align-items: center;
font-weight: 500;
color: #666666;
}
.right{
text-align: right;
color: #222222;
}
.foot{
position: fixed;
bottom: 0px;
width: 100%;
height: 90px;
background: #FFFFFF;
z-index: 1;
display: flex;
padding-top: 20px;
}
.btn{
background: linear-gradient(to right, #3471FF, #6776FF);
color: white;
border-radius: 50px;
width: 45%;
height: 96rpx;
line-height: 96rpx;
margin-top: 20px;
}
.btn1{
border: 1px solid #3471FF;
background: #fff;
color: #3471FF;
border-radius: 50px;
width: 45%;
height: 96rpx;
line-height: 96rpx;
margin-top: 20px;
}
.addimg{
width: 110px;
height:110px;
}
.yuyin{
position: relative;
image{
width: 20px;
height:24px;
position: absolute;
right: 15px;
bottom: 10px;
}
}
.steps{
padding: 15px;
image{
width: 44px;
height:44px;
}
.desc{
display: flex;
justify-content: space-between;
align-items: center;
color: #999999;
}
.title{
color: #666666;
font-size: 32rpx;
margin-bottom: 15px;
.status{
font-size: 28rpx;
color: #3471FF;
margin-left: 10px;
}
}
}
</style>
+295
View File
@@ -0,0 +1,295 @@
<template>
<view class="conts">
<view class="top">
<view class="navbar">客户管理</view>
<view class="topSearch">
<view class="left">
<u-search v-model="value5" bgColor="#fff" search-icon="" :show-action="false" placeholder="请输入客户名称或手机号"></u-search>
<view @click="searchCli" class="search">
<image src="/static/image/customer/search1.png" mode=""></image>
</view>
</view>
<view class="right">
<image src="/static/image/customer/search.png" @click="show = true" mode=""></image>
</view>
</view>
</view>
<view class="list">
<view class="contents" v-for="(item, index) in datalist" :key="index" >
<view class="" @click="godetile(item)">
<view class="top">
<view class="">2025.03.11 12:00</view>
<view class="tag">跟进中</view>
</view>
<u-divider text="" :hairline="true"></u-divider>
<view class="cont">
<view class="title">
<view class=""><text class="name">刘德华</text><text class="phone">138****2264</text></view>
<view class="ststus">初步接触</view>
</view>
<view class="info"><text class="sex">男</text> | <text class="addr">迪拜</text><text class="type">越野车</text>
</view>
</view>
</view>
<view class="desc1">
<view class="" @click="phoneClick(item)"><image src="/static/image/customer/phone.png" mode=""></image> 呼叫</view>
<view class="" @click="editClick(item)"><image src="/static/image/customer/edit.png" mode=""></image> 跟进</view>
<view class="" @click="delClick(item)"><image src="/static/image/customer/trash.png" mode=""></image> 删除</view>
</view>
</view>
</view>
<u-picker :show="show" :columns="columns" @cancel="cancel" @confirm="confirm" title="客户筛选" keyName="label"></u-picker>
<u-popup :show="showts" :closeOnClickOverlay="false" :round="20" mode="center">
<view class="popupcontent">
<view class="title">提示</view>
<view class="text">
确定要删除此客户吗?
</view>
</view>
<view class="cent">
<view class="btn1" @click="showts = !showts">取消</view>
<view class="btn" @click="showts = !showts">确定</view>
</view>
</u-popup>
<movable-area class="movable-area">
<movable-view class="movable-view" :x="x" :y="y" direction="all">
<view class="index" @tap="addcustomer" >
<image src="/static/image/customer/add.png" mode="widthFix">
</view>
</movable-view>
</movable-area>
</view>
</template>
<script>
// import { request,showToast } from '@/api/apiT.js'
export default {
data() {
return {
x: 300, //x坐标
y: 550, //y坐标
value5:'',
show:false,
showts:false,
columns:[
[{
label: '当天跟进客户',
id: 1
}, {
label: '近三天跟进客户',
id: 2
}, {
label: '近七天跟进客户',
id: 3
}]
],
datalist:[
{id:1},
{id:2},
{id:3},
{id:4}
],
}
},
methods: {
close() {
// console.log('close');
this.show= false
},
confirm(e) {
// console.log('confirm', e);
this.show = false
},
cancel() {
// console.log('cancel');
this.show = false
},
godetile(item){
console.log(item)
uni.navigateTo({
url: '/pages/customer/detile'
});
},
phoneClick(item){
console.log(item)
},
editClick(item){
uni.navigateTo({
url: '/pages/customer/followup'
});
},
delClick(item){
this.showts=true
},
addcustomer(){
uni.navigateTo({
url: '/pages/customer/add'
});
},
}
}
</script>
<style lang="scss">
.conts{
background-image: url("/static/image/customer/bg.png");
background-size: 100%;
background-repeat: no-repeat;
}
.navbar{
height: 44px;
line-height: 44px;
text-align: center;
color: #fff;
font-size: 32rpx;
}
.topSearch {
display: flex;
align-items: center;
padding: 10px 15px 5px;
.left {
position: relative;
width: 88%;
}
.right {
flex: 1;
text-align: right;
image{
width: 24px;
height: 20px;
margin-top: 5px;
}
}
.search{
background: linear-gradient(to right, #3471FF, #6776FF);
color: white;
border-radius: 20px;
padding: 6px 16px 2px;
text-align: center;
position: absolute;
top: 2px;
right: 5px;
font-size: 12px;
image{
width: 16px;
height: 16px;
}
}
}
.list{
padding: 15px;
overflow: auto;
height: calc(100vh-140px);
.contents{
background-color: #FFFFFF;
border-radius: 10px;
margin-bottom: 10px;
.top{
padding: 10px 15px 0px;
display: flex;
align-items: center;
justify-content: space-between;
.tag{
background: #3471FF;
color: white;
border-radius: 10px 0px 0px 10px;
padding: 0px 10px;
margin-right: -15px;
}
}
.cont{
padding: 0px 15px 10px;
font-size: 24rpx;
.title{
display: flex;
align-items: center;
justify-content: space-between;
color: #222222;
.name{
font-size: 32rpx;
font-weight: bold;
margin-right: 10px;
}
.phone{
font-size: 28rpx;
}
}
.ststus{
color: #666666;
}
.info,.desc{
color: #78758E;
line-height: 26px;
}
.sex{
margin-right: 5px;
}
.addr{
margin-left: 5px;
}
.type{
margin-left: 5px;
color: #3471FF;
}
}
}
.desc1{
padding: 0px 15px 10px;
color: #3471FF;
display: flex;
justify-content: right;
view{
margin-left:15px;
}
image{
width: 14px;
height: 14px;
// vertical-align: sub;
margin-right: 5px;
}
}
}
.popupcontent{
text-align: center;
padding: 10px 40px 20px;
.title{
font-size: 18px;
color: #333333;
line-height: 60px;
}
.text{
color: #666666;
font-size: 16px;
}
}
.cent{
display: flex;
align-items: center;
justify-content: space-around;
padding: 0px 10px 20px;
text-align: center;
.btn1{
background-color: #F6F6F6;
border: 1px solid #F6F6F6;
color: #333333;
border-radius: 50px;
width: 46%;
margin: 10px 0px 20px;
height: 40px;
line-height: 40px;
}
.btn{
background-color: #3471FF;
color: white;
border-radius: 50px;
width: 46%;
margin: 10px 0px 20px;
height: 40px;
line-height: 40px;
}
}
</style>
+238
View File
@@ -0,0 +1,238 @@
<template>
<view class="content">
<view class="contop">
<view class="changeyy" @click="switchLang" >
<image src="/static/image/change.png" mode=""></image>切换语言
</view>
<view class="title">
您已陪伴HESU CRM
</view>
<view class="num">
66 <text>天</text>
</view>
</view>
<view class="data-briefing">
<view class="top">
<text>数据简报</text>
<view class="time" @click="show = true">
<image src="/static/image/time.png" mode=""></image>
<!-- <u--input v-model="timevalue" border="none" disabled disabledColor="#ffffff" style="width: 65px;margin-left: 5px;"></u--input> -->
<u--input v-model="time" border="none" disabled disabledColor="#ffffff" style="width: 65px;margin-left: 5px;"></u--input>
<u-icon name="arrow-down" color="#666666" size="16"></u-icon>
</view>
</view>
<view class="cont">
<u-grid :border="false" col="4">
<u-grid-item>
<text class="grid-num">20</text>
<text class="grid-text">常见问题</text>
</u-grid-item>
<u-grid-item>
<text class="grid-num">20</text>
<text class="grid-text">新增客户</text>
</u-grid-item>
<u-grid-item>
<text class="grid-num">20</text>
<text class="grid-text">新增拜访</text>
</u-grid-item>
<u-grid-item>
<text class="grid-num">20</text>
<text class="grid-text">新增跟进</text>
</u-grid-item>
</u-grid>
</view>
</view>
<view class="userlist">
<u-sticky offset-top="-44">
<u-tabs :list="list1" :scrollable="false"></u-tabs>
</u-sticky>
<view class="list">
<userlist :list="datalist" @click="godetile">
<template v-slot:footer>
<view class="desc">客户想要性价比高,偏爱宝马</view>
</template>
<template v-slot:footertab>
<view></view>
</template>
</userlist>
</view>
</view>
<u-datetime-picker :show="show" v-model="value1" @confirm="confirm" @cancel="cancel" @close="close" mode="year-month"></u-datetime-picker>
</view>
</template>
<script>
import userlist from '@/components/userlist/index.vue';
// import { request,showToast } from '@/api/apiT.js'
export default {
components: {
userlist
},
data() {
return {
home: this.$t('tabbar.home'),
value0: 0,
show: false,
value1: Number(new Date()),
timevalue:this.result(Number(new Date())),
time:this.result(Number(new Date())),
datalist:[
{id:1},
{id:2},
{id:3},
{id:4}
],
list1: [
{
name: '全部',
}, {
name: '跟进中',
}, {
name: '已成交'
}, {
name: '已丢失'
}
]
}
},
onLoad() {
},
methods: {
switchLang() {
this.$i18n.locale = this.$i18n.locale == 'en' ? 'cn' : 'en';
uni.setTabBarItem({
index: 0,
text: this.$t('tabbar.home')
})
uni.setTabBarItem({
index: 1,
text: this.$t('tabbar.customer')
})
uni.setTabBarItem({
index: 2,
text: this.$t('tabbar.mine')
})
},
close() {
this.show = false
},
cancel() {
this.show = false
},
confirm(e) {
this.show = false
this.result(e.value, e.mode)
},
result(time, mode) {
const timeFormat = uni.$u.timeFormat
this.timevalue=timeFormat(time, 'yyyy-mm')
this.time=timeFormat(time, 'yyyy-mm')
return timeFormat(time, 'yyyy-mm')
},
godetile(item){
console.log(item)
uni.navigateTo({
url: '/pages/customer/detile'
});
}
}
}
</script>
<style lang="scss">
.u-pageicon{
width: 18px;
height: 18px;
}
.changeyy{
padding: 10px 15px;
border-radius: 50px;
background-color: rgba(255, 255,255, 0.2);
margin-bottom: 50rpx;
display: inline-block;
image{
width: 14px;
height: 12px;
margin-right: 5px;
}
}
.content{
width: 100%;
font-size: 28rpx;
position: relative;
background: #F6F6F6;
.contop{
background-image: url("/static/image/topbg.png");
background-size: 100%;
background-repeat: no-repeat;
padding: 88rpx 30rpx 240rpx;
color: #FFFFFF;
.title{
font-size: 32rpx;
margin-bottom: 20px;
}
.num{
font-size: 60rpx;
font-weight: bold;
font-family: PingFang SC-Regular;
text{
font-size: 36rpx;
font-weight: 300;
margin-left: 6px;
}
}
}
.data-briefing{
background-color: #FFFFFF;
margin: 15px;
padding: 15px;
border-radius: 10px;
margin-top: -21%;
.top{
display: flex;
align-items: center;
justify-content: space-between;
text{
font-size: 32rpx;
color: #222222;
font-weight: bold;
}
.time{
display: flex;
align-items: center;
color: #666666;
image{
width: 15px;
height: 15px;
}
}
}
.cont{
margin-top: 20px;
.grid-num{
font-size: 36rpx;
color: #000000;
font-weight: bold;
}
.grid-text{
color: #222222;
font-size: 24rpx;
}
}
}
.userlist{
background-image: url(/static/image/cbg.png);
background-size: 100%;
background-repeat: no-repeat;
.list{
padding: 15px;
}
}
}
</style>
+204
View File
@@ -0,0 +1,204 @@
<template>
<view class="contents">
<view class="navbar">我的</view>
<view class="content">
<view class="contop">
<view class="">
<!-- <image class="userimg" :src="userinfo.avatar" mode=""></image> -->
<image class="userimg" src="/static/image/mine/user.png" mode=""></image>
</view>
<view class="right" @click="changinfo">
<view class="">
<text>迪士尼公主</text>
<image src="/static/image/mine/edit.png" mode=""></image>
</view>
<view class="">
ID:080427
</view>
</view>
</view>
<view class="bottomCon">
<view class="sonContent" @click="navTo('/pages/mine/mycarSource')">
<image class="son-img-bg" src="/static/image/mine/icon1.png"></image>
<span>消息通知</span>
<view class="">
<u-badge :value="9" type="error" style="display: inline-block;"></u-badge>
<uni-icons type="right" size="18"></uni-icons>
</view>
</view>
<view class="sonContent" @click="navTo('/pages/mine/drafts')">
<image class="son-img-bg" src="/static/image/mine/icon2.png"></image>
<span>修改密码</span>
<uni-icons type="right" size="18"></uni-icons>
</view>
<view class="sonContent" @click="navTo('/pages/mine/soldList')">
<image class="son-img-bg" src="/static/image/mine/icon3.png"></image>
<span>联系客服</span>
<uni-icons type="right" size="18"></uni-icons>
</view>
<view class="sonContent" @click="navTo('/pages/mine/mycarSource')">
<image class="son-img-bg" src="/static/image/mine/icon4.png"></image>
<span>意见反馈</span>
<uni-icons type="right" size="18"></uni-icons>
</view>
<view class="sonContent" @click="navTo('/pages/mine/drafts')">
<image class="son-img-bg" src="/static/image/mine/icon5.png"></image>
<span>关于我们</span>
<uni-icons type="right" size="18"></uni-icons>
</view>
<view class="sonContent" @click="navTo('/pages/mine/soldList')">
<image class="son-img-bg" src="/static/image/mine/icon6.png"></image>
<span>注销账户</span>
<uni-icons type="right" size="18"></uni-icons>
</view>
<view class="sonContent" @click="navTo('/pages/mine/soldList')">
<image class="son-img-bg" src="/static/image/mine/icon7.png"></image>
<span>退出登录</span>
<uni-icons type="right" size="18"></uni-icons>
</view>
<!-- <view class="sonContent1" @click="goout">
<span>退出当前账号</span>
</view> -->
<!-- <button v-else="is_login" class="logobtn" open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">一键登录</button> -->
</view>
</view>
</view>
</template>
<script>
import { request,showToast } from '@/api/apiT.js'
export default {
data() {
return {
userinfo:'',
is_login:uni.getStorageSync('is_login'),
show: false
}
},
onLoad() {
},
onShow() {
},
methods: {
changinfo(){
uni.navigateTo({
url: '/pages/mine/changinfo'
});
}
}
}
</script>
<style lang="scss">
.u-badge--not-dot{
padding: 5px 8px;
margin-right: 20px;
}
.contents{
background-image: url("/static/image/mine/bg.png");
background-size: 100%;
background-repeat: no-repeat;
}
.navbar{
height: 50px;
line-height: 50px;
text-align: center;
color: #fff;
font-size: 32rpx;
}
.content{
padding:20px 15px 15px;
.contop{
display: flex;
align-items: center;
margin: 25px 0px 50px;
font-size: 34rpx;
color: white;
.right{
margin-left: 15px;
image{
width: 32rpx;
height:32rpx;
}
}
}
}
.slot-image {
/* #ifndef APP-NVUE */
display: block;
/* #endif */
margin-right: 10px;
width: 20px;
height: 20px;
}
.userimg{
width: 60px;
height: 60px;
border-radius: 50%;
}
.timg{
width: 100%;
height: 220rpx;
}
.bottomCon {
margin-top: 40rpx;
color: #000;
font-weight: 400;
// padding: 0 24rpx 20rpx;
box-sizing: border-box;
// border-radius: 22rpx;
// background: #FFFFFF;
display: flex;
box-sizing: border-box;
flex-direction: column;
.sonTitle {
height: 80rpx;
line-height: 80rpx;
font-size: 36rpx;
border-bottom: 2rpx solid #F3F3F3;
}
.sonContent1{
background: #FFFFFF;
border-radius: 22rpx;
text-align: center;
font-size: 28rpx;
font-weight: 400;
padding: 32rpx 28rpx;
color: #515151;
margin-bottom: 10px;
}
.sonContent {
background: #FFFFFF;
border-radius: 22rpx;
position: relative;
flex: 1;
// border-bottom: 2rpx solid #F3F3F3;
display: flex;
align-items: center;
justify-content: space-between;
font-size: 28rpx;
font-weight: 500;
padding: 32rpx 28rpx;
color: #000;
margin-bottom: 10px;
.son-img-bg {
width: 24px;
height: 24px;
position: absolute;
top: 50%;
margin-top: -20rpx;
left: 12;
}
span {
margin-left: 68rpx;
font-size: 28rpx;
}
}
}
</style>
+57
View File
@@ -0,0 +1,57 @@
<template>
<view>
<uni-nav-bar leftText=" " :fixed="true" :border="false" leftIcon="back" @clickLeft="leftClick" color="#000000"
backgroundColor="#fff" :statusBar="true" title="隐私政策"></uni-nav-bar>
<view class="contents">
<view class="title">
{{title}}
</view>
<view class="" v-html="content">
</view>
</view>
</view>
</template>
<script>
import {
request,
showToast
} from '@/api/apiT.js'
export default {
data() {
return {
content: '',
title: ''
}
},
onLoad() {
this.getcont()
},
methods: {
leftClick() {
uni.navigateBack({})
},
getcont() {
request({
url: 'agreement/privacy',
method: 'get',
}).then(res => {
this.content = res.data.data.content
this.title = res.data.data.title
})
}
}
}
</script>
<style>
.contents {
padding: 10px 12px;
}
.title {
text-align: center;
font-size: 18px;
}
</style>
+53
View File
@@ -0,0 +1,53 @@
<template>
<view>
<uni-nav-bar leftText=" " :fixed="true" :border="false" leftIcon="back" @clickLeft="leftClick" color="#000000" backgroundColor="#fff" :statusBar="true" title="用户服务协议"></uni-nav-bar>
<view class="contents" >
<view class="title">
{{title}}
</view>
<view class="" v-html="content">
</view>
</view>
</view>
</template>
<script>
import { request,showToast } from '@/api/apiT.js'
export default {
data() {
return {
content:'',
title:''
}
},
onLoad() {
this.getcont()
},
methods: {
leftClick(){
uni.navigateBack({})
},
getcont(){
request({
url:'agreement/user',
method:'get',
}).then(res => {
this.content = res.data.data.content
this.title = res.data.data.title
})
}
}
}
</script>
<style>
.contents{
padding: 10px 12px;
}
.title{
text-align: center;
font-size: 18px;
}
</style>
+255
View File
@@ -0,0 +1,255 @@
<template>
<view class="page">
<view class="title">
<view>Hello!<br>欢迎来到XXX</view>
</view>
<view class="form">
<view class="tab">
<view :class="loginType==1? 'select type1' : 'type1'" @click="loginType=1">快捷登录</view>
<view :class="loginType==2? 'select type2' : 'type2'" @click="loginType=2">账号登陆</view>
</view>
<view class="inputs_button">
<view class="inputs">
<view class="account">
<input type="number" v-model="account" :adjust-position="false" placeholder="手机号" />
</view>
<view class="password" v-if="loginType==2">
<u--input
type="password"
placeholder="请输入内容"
border="none"
></u--input>
<!-- <input :type="pwdShow? 'text' : 'password'" v-model="password" :adjust-position="false"
placeholder="密码" /> -->
<uni-icons :type="pwdShow? 'eye-filled' : 'eye-slash-filled'" size="24" color="#cccccc"
@click="pwdShow=!pwdShow"></uni-icons>
</view>
<view class="vcode" v-if="loginType==1">
<input type="number" v-model="vcode" :adjust-position="false" placeholder="验证码" />
<text v-if="vcodeTime==0" style="color:#3264ed" @click="getVcode">获取验证码</text>
<text v-else style="color:#ccc">重新获取({{vcodeTime}}s)</text>
</view>
</view>
<view class="button">
<view @click="login">
登录
</view>
</view>
</view>
</view>
<view class="pact">
<radio :checked="pactChecked" activeBackgroundColor="#3264ed" activeBorderColor="#3264ed"
borderColor="#3264ed" color="#fff" @click="pactChange" />
<view>我已阅读并同意<text @click="toPact">《用户协议》</text>和<text @click="toPact">《隐私协议》</text></view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
account: "",
password: "",
vcode: "",
loginType: 1,
pwdShow: false,
pactChecked: false,
vcodeTime: 0,
vcodeTimer: null
}
},
onLoad() {
},
methods: {
login() {
uni.showToast({
title: "登录方式" + this.loginType,
icon: 'none'
})
},
getVcode() {
this.vcodeTime = 60
this.vcodeTimer = setInterval(() => {
if (this.vcodeTime > 0) {
this.vcodeTime--
} else {
clearInterval(this.vcodeTimer)
this.vcodeTimer = null
}
}, 1000)
uni.showToast({
title: "获取验证码",
icon: 'none'
})
},
pactChange() {
this.pactChecked = !this.pactChecked
},
toPact() {
uni.showToast({
title: "协议",
icon: 'none'
})
}
}
}
</script>
<style lang="scss" scoped>
.page {
min-height: 100vh;
background-image: url("../../static/image/loginBg.png");
// background: url("../../static/image/loginBg.png") no-repeat top center;
background-size: 100%;
background-repeat: no-repeat;
display: flex;
flex-direction: column;
justify-content: space-between;
.title {
padding-top: 220rpx;
padding-bottom: 70rpx;
view {
padding-left: 64rpx;
font-size: 48rpx;
font-weight: 700;
color: #383838;
}
}
.form {
flex: 1;
margin: 0 32rpx;
border-radius: 40rpx;
background-color: #fff;
overflow: hidden;
.tab {
display: flex;
align-items: center;
justify-content: space-between;
background-color: #ecf1fb;
height: 100rpx;
background: linear-gradient(180deg, #e3ebf9 0%, #ffffff 100%);
view {
width: 340rpx;
line-height: 100rpx;
text-align: center;
color: #9e9e9e;
position: relative;
}
view::after {
content: '';
width: 50rpx;
height: 8rpx;
display: block;
background-color: #3264ed;
border-radius: 4rpx;
position: absolute;
left: 50%;
bottom: 14rpx;
transform: translateX(-50%);
opacity: 0;
}
view.select {
background-color: #fff;
color: #3264ed;
}
view.type1.select {
border-radius: 0 40rpx 0 0;
}
view.type2.select {
border-radius: 40rpx 0 0;
}
view.select::after {
opacity: 1;
}
}
.inputs_button {
background-color: #fff;
.inputs {
padding: 150rpx 32rpx 0;
margin-bottom: 80rpx;
.account,
.password,
.vcode {
height: 96rpx;
border-radius: 20rpx;
padding: 0 48rpx;
display: flex;
align-items: center;
background-color: #f7fafc;
input {
flex: 1;
}
}
.account {
margin-bottom: 48rpx;
}
.vcode {
text {
text-wrap: nowrap;
font-size: 26rpx;
background-color: #fff;
padding: 14rpx 30rpx;
border-radius: 12rpx;
}
}
}
.button {
padding: 0 32rpx;
view {
line-height: 96rpx;
border-radius: 20rpx;
text-align: center;
font-size: 32rpx;
background-color: #3264ed;
color: #fff;
}
}
}
}
.pact {
display: flex;
align-items: center;
justify-content: center;
padding-bottom: 120rpx;
font-size: 24rpx;
text {
color: #3264ed;
}
radio {
:deep(.uni-radio-input) {
border: 1rpx solid #3264ed;
}
transform:scale(0.6)
}
}
}
</style>
+181
View File
@@ -0,0 +1,181 @@
<template>
<view>
<uni-nav-bar leftText=" " :fixed="true" :border="false" leftIcon="back" @clickLeft="leftClick" color="#000000" backgroundColor="#fff" :statusBar="true" title="个人资料"></uni-nav-bar>
<view class="content">
<view class="">
</view>
<view class="cell">
<view>头像</view>
<view class="right">
<uni-file-picker fileMediatype="image" limit="1" @select="select" @delete="delfn" :del-icon="false" disable-preview :imageStyles="imageStyles">
<image :src="userinfo.avatar==''?'/static/image/mine/user.png':userinfo.avatar" mode="" class="addimg"></image>
</uni-file-picker>
</view>
</view>
<view class="cell1">
<view>昵称</view>
<view class="right select">
<input placeholder="请填写昵称" v-model="userinfo.nickname"></input>
<uni-icons type="right" size="18"></uni-icons>
</view>
</view>
<view class="cell1">
<view>手机号</view>
<view class="right select">
<input placeholder="请填写手机号" type="number" v-model="userinfo.phone"></input>
<uni-icons type="right" size="18"></uni-icons>
</view>
</view>
<view class="cell1">
<view>公司</view>
<view class="right select">
<input placeholder="请填写公司" v-model="userinfo.company"></input>
<uni-icons type="right" size="18"></uni-icons>
</view>
</view>
</view>
<view class="foot">
<button class="btn" @click="bcFn">保存</button>
</view>
</view>
</template>
<script>
import { request,showToast } from '@/api/apiT.js'
export default {
data() {
return {
imageStyles: {
width: 40,
height: 40,
border: {
radius: '50%'
}
},
userinfo:{
nickname:'',
avatar:'',
company:'',
phone:'',
},
}
},
onLoad() {
this.getinfo()
},
methods: {
getinfo(){
var that= this;
request({
url:'api/user/info',
method:'POST',
}).then(res => {
that.userinfo = res.data.data
})
},
uploadfn(imgUrl){
var that = this;
uni.uploadFile({
url: 'https://api.collect.hs.hnzhwlkj.club/api/upload/image',
filePath: imgUrl,
name: 'image',
header:{'content-type': 'application/x-www-form-urlencoded','Authorization': 'Bearer ' + uni.getStorageSync('token')},
success: (uploadFileRes) => {
const path=JSON.parse(uploadFileRes.data)
that.userinfo.avatar = path.data.image_url
console.log(that.carinfo)
}
});
},
delfn(){
that.userinfo.avatar =''
},
select(e){
const tempFilePaths = e.tempFilePaths;
const imgUrl=tempFilePaths[0]
this.uploadfn(imgUrl)
},
leftClick(){
uni.navigateBack({})
},
bcFn(){
request({
url:'api/user/update',
method:'POST',
data:{
nickname:this.userinfo.nickname,
avatar:this.userinfo.avatar,
company:this.userinfo.company,
phone:this.userinfo.phone
}
}).then(res => {
uni.showToast({
title: res.data.message,
icon: 'none'
});
if(res.data.code ==0){
setTimeout(() => {
uni.reLaunch({
url: '/pages/index/mine',// 替换为你要跳转的页面路径
});
}, 1000);
}
})
}
}
}
</script>
<style>
.uniui-right{
position: absolute;
top: 2px;
}
.content{
background: #FFFFFF;
}
.cell{
display: flex;
justify-content:space-between;
padding: 10px 20px;
align-items: center;
font-weight: 500;
}
.cell1{
display: flex;
justify-content:space-between;
padding: 18px 20px;
align-items: center;
font-weight: 500;
}
.right{
text-align: right;
}
.select{
display: flex;
position: relative;
margin-right: 10px;
}
.foot{
position: fixed;
bottom: 0px;
width: 100%;
height: 240rpx;
background: #FFFFFF;
}
.btn{
background-color: #3F435B;
color: white;
border-radius: 50px;
width: 84%;
margin-bottom: 40px;
margin: 20px 8%;
}
.addimg{
width: 35px;
height: 35px;
border-radius: 50%;
}
</style>