添加页面及部分多语言切换

This commit is contained in:
浅念
2025-03-15 15:46:16 +08:00
parent 36ee43c61b
commit f050f7cd4d
19 changed files with 1126 additions and 302 deletions
+38 -4
View File
@@ -6,12 +6,46 @@ export default {
mine: 'mine'
},
home: {
desc: 'This is home page'
desc: 'home',
langbtn:'Change Language',
title:'You have accompanied me',
day:'day',
databf:'Data Briefing',
addxs:'Add clues',
addkh:'Add customer',
addbf:'Add visit',
addgj:'Add follow up'
},
customer: {
desc: 'This is tool page'
desc: 'This is tool page',
title:'Customer Management',
inputhd:'Please enter keywords to search',
},
mine: {
desc: 'This is template page'
}
desc: 'This is template page',
title:'Account',
msg:'Message Notification',
cpassword:'Change Password',
contact:'Contact Service',
feedback:'Feedback',
about:'About Us',
logoff:'Log Off',
logout:'Log Out',
kfphone:'Service phone number',
lxcall:'Contact Way',
lxcallinputhd:'Please enter',
feedbackinputhd:'Please provide your valuable feedback~',
},
call:'Call',
delete:'Delete',
all:'All',
followup:'Follow up',
deal:'Deal',
lost:'Lost',
cancel:'cancel',
confirm:'confirm',
prompt:'prompt',
deletemsg:'Are you sure you want to delete this customer?',
submit:'Submit'
}
+17
View File
@@ -0,0 +1,17 @@
export default {
// 可以以页面为单位来写,比如首页的内容,写在index字段,个人中心写在center,共同部分写在common部分
tabbar: {
home: 'начало',
customer: 'клиент',
mine: 'мой'
},
home: {
desc: 'начало'
},
customer: {
desc: 'клиент'
},
mine: {
desc: 'мой'
}
}
+37 -4
View File
@@ -6,12 +6,45 @@ export default {
mine: '我的'
},
home: {
desc: '首页'
desc: '首页',
langbtn:'切换语言',
title:'您已陪伴',
day:'天',
databf:'数据简报',
addxs:'新增线索',
addkh:'新增客户',
addbf:'新增拜访',
addgj:'新增跟进'
},
customer: {
desc: '客户'
desc: '客户',
title:'客户管理',
inputhd:'请输入客户名称或手机号',
},
mine: {
desc: '我的'
}
desc: '我的',
title:'我的',
msg:'消息通知',
cpassword:'修改密码',
contact:'联系客服',
feedback:'意见反馈',
about:'关于我们',
logoff:'注销账户',
logout:'退出登录',
kfphone:'客服电话',
lxcall:'联系方式',
lxcallinputhd:'请输入您的手机号码',
feedbackinputhd:'请输入您的宝贵意见~',
},
call:'呼叫',
delete:'删除',
all:'全部',
followup:'跟进中',
deal:'已成交',
lost:'已丢失',
cancel:'取消',
confirm:'确定',
prompt:'提示',
deletemsg:'确定要删除此客户吗?',
submit:'提交'
}
+2 -2
View File
@@ -3,7 +3,7 @@
<view class="contents" v-for="(item, index) in list" :key="index" @click="handleItemClick(item)">
<view class="top">
<view class="">2025.03.11 12:00</view>
<view class="tag">跟进中</view>
<view class="tag">{{$t('followup')}}</view>
</view>
<u-divider text="" :hairline="true"></u-divider>
<view class="cont">
@@ -59,7 +59,7 @@
background: #3471FF;
color: white;
border-radius: 10px 0px 0px 10px;
padding: 0px 10px;
padding: 3px 10px;
margin-right: -15px;
}
}
+4 -2
View File
@@ -18,6 +18,7 @@ Vue.prototype.$backgroundAudioData = {
// 引入语言包,注意路径
import Chinese from '@/common/locales/zh.js';
import English from '@/common/locales/en.js';
import Eyu from '@/common/locales/ru.js';
// 引入并使用vue-i18n
import VueI18n from 'vue-i18n'
@@ -26,13 +27,14 @@ Vue.use(VueI18n)
// 构造i18n对象
const i18n = new VueI18n({
// 默认语言,这里的local属性,对应message中的cn、en属性
locale: 'cn',
locale: 'zh',
// 引入语言文件
messages: {
// 这里的属性名是任意的,您也可以把zh设置为cn等,只是后续切换语言时
// 要标识这里的语言属性,如:this.$i18n.locale = zh|en|cn|xxx
'cn': Chinese,
'zh': Chinese,
'en': English,
'ru': Eyu,
}
})
App.mpType = 'app'
+11 -2
View File
@@ -23,7 +23,8 @@
"Push" : {},
"Share" : {},
"VideoPlayer" : {},
"Maps" : {}
"Maps" : {},
"Speech" : {}
},
"distribute" : {
"android" : {
@@ -69,7 +70,15 @@
},
"sdkConfigs" : {
"speech" : {
"ifly" : {}
"baidu" : {
"appid" : "117980829",
"apikey" : "dBy4AMe8Ii7ZHX8R072pFAfM",
"secretkey" : "2GrccBcltV15Cd1e3C3xy2CnQtZatVso"
},
"ifly" : {
"appid" : "6fb000c3",
"apikey" : "eec37300f2e638b0bc3b91752be40c30"
}
},
"maps" : {}
},
+36
View File
@@ -122,6 +122,42 @@
"enablePullDownRefresh": false,
"navigationStyle":"custom"// 去掉微信小程序顶部导航
}
},
{
"path" : "feedback",
"style" :
{
"navigationBarTitleText" : "",
"enablePullDownRefresh": false,
"navigationStyle":"custom"// 去掉微信小程序顶部导航
}
},
{
"path" : "about",
"style" :
{
"navigationBarTitleText" : "",
"enablePullDownRefresh": false,
"navigationStyle":"custom"// 去掉微信小程序顶部导航
}
},
{
"path" : "logoff",
"style" :
{
"navigationBarTitleText" : "",
"enablePullDownRefresh": false,
"navigationStyle":"custom"// 去掉微信小程序顶部导航
}
},
{
"path" : "resetPwd",
"style" :
{
"navigationBarTitleText" : "",
"enablePullDownRefresh": false,
"navigationStyle":"custom"// 去掉微信小程序顶部导航
}
}
]
}
+78 -24
View File
@@ -3,9 +3,9 @@
<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>客户称呼</view>
<view class="right">
<input placeholder="输入客户称呼" v-model="form.name" />
<input placeholder="输入称呼" v-model="form.contacts" />
</view>
</view>
<u-divider text=""></u-divider>
@@ -26,20 +26,27 @@
</view>
</view>
<u-divider text=""></u-divider>
<view class="cell">
<view>Email</view>
<view class="right">
<input placeholder="输入Email" v-model="form.email" />
</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>
<view class="right select" @click="showcartype = true">
<input placeholder="选择客户偏好" disabled v-model="car_type_name" />
<u-picker :cancel-text="$t('cancel')" :confirm-text="$t('confirm')" :show="showcartype" @cancel="cancel('showcartype')" :columns="carTypeList" keyName="name" @confirm="cartypesChange"></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>
<view class="right select" @click="showgrade = true">
<input placeholder="选择客户等级" disabled v-model="grade_name" />
<u-picker :cancel-text="$t('cancel')" :confirm-text="$t('confirm')" :show="showgrade" @cancel="cancel('showgrade')" :columns="getGradeList" keyName="name" @confirm="gradeHandler"></u-picker>
<u-icon class="arrowright" name="arrow-right" size="18" color="#747474"></u-icon>
</view>
</view>
@@ -47,8 +54,8 @@
<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>
<input placeholder="选择国家地区" disabled v-model="country_name" />
<u-picker :cancel-text="$t('cancel')" :confirm-text="$t('confirm')" :show="showenergy" @cancel="cancel('showenergy')" :columns="areaList" keyName="name" @confirm="areaChange"></u-picker>
<u-icon class="arrowright" name="arrow-right" size="18" color="#747474"></u-icon>
</view>
</view>
@@ -63,7 +70,7 @@
<view class="cell1">
<view>详细情况</view>
<view class="">
<textarea auto-height v-model="form.condition_desc" placeholder="详细情况..."/>
<textarea auto-height v-model="form.describe" placeholder="详细情况..."/>
</view>
</view>
<u-gap height="100" bgColor="#fff"></u-gap>
@@ -79,31 +86,78 @@
export default {
data() {
return {
brandList:[],
energyList:[],
typesList:[],
showgrade: false,
showcartype: false,
showenergy: false,
getGradeList:[],
carTypeList:[],
areaList:[],
grade_name:'',
car_type_name:'',
country_name:'',
form: {
name: '',
contacts: '',
gender: '男',
phone: '',
preference: '赵野军',
level: '初步接触',
region: '',
firstFollow: '2025-03-11 12:00:01',
details: ''
email: '',
describe: '',
grade:'',
country_id:'',
car_type_id:''
}
}
},
onLoad() {
const { windowWidth, windowHeight } = uni.getSystemInfoSync();
this.x = windowWidth-70
this.y = windowHeight-185
},
methods: {
leftClick(){
uni.navigateBack({})
},
getGrade(){
request({
url:'customer/getGrade',
method:'get',
}).then(res => {
var list = res.data.data
this.getGradeList = [list]
})
},
carType(){
request({
url:'carType/getAll',
method:'get',
}).then(res => {
var list = res.data.data
this.carTypeList = [list]
})
},
area(){
request({
url:'area/getAll',
method:'get',
}).then(res => {
var list = res.data.data
this.areaList = [list]
})
},
gradeHandler(val){
this.form.grade = val.value[0].brand_id
this.grade_name = val.value[0].name
this.showgrade = false
},
areaChange(val){
this.form.country_id = val.value[0].energy_id
this.country_name = val.value[0].name
this.showarea = false
},
cartypesChange(val){
this.form.car_type_id = val.value[0].energy_id
this.car_type_name = val.value[0].name
this.showcartype = false
},
cancel(val){
this[val] = false
},
}
}
</script>
+76 -61
View File
@@ -5,7 +5,7 @@
<view class="cell">
<view>客户称呼</view>
<view class="right">
<input placeholder="输入客户称呼" v-model="form.name" />
<input placeholder="输入称呼" v-model="form.contacts" />
</view>
</view>
<u-divider text=""></u-divider>
@@ -20,7 +20,7 @@
</view>
<u-divider text=""></u-divider>
<view class="cell">
<view>联系方式 </view>
<view>联系方式 <text class="red">*</text></view>
<view class="right">
<input placeholder="输入联系方式" v-model="form.phone" />
</view>
@@ -29,24 +29,24 @@
<view class="cell">
<view>Email</view>
<view class="right">
<input placeholder="输入Email" v-model="form.phone" />
<input placeholder="输入Email" v-model="form.email" />
</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>
<view class="right select" @click="showcartype = true">
<input placeholder="选择客户偏好" disabled v-model="car_type_name" />
<u-picker :cancel-text="$t('cancel')" :confirm-text="$t('confirm')" :show="showcartype" @cancel="cancel('showcartype')" :columns="carTypeList" keyName="name" @confirm="cartypesChange"></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>
<view class="right select" @click="showgrade = true">
<input placeholder="选择客户等级" disabled v-model="grade_name" />
<u-picker :cancel-text="$t('cancel')" :confirm-text="$t('confirm')" :show="showgrade" @cancel="cancel('showgrade')" :columns="getGradeList" keyName="name" @confirm="gradeHandler"></u-picker>
<u-icon class="arrowright" name="arrow-right" size="18" color="#747474"></u-icon>
</view>
</view>
@@ -54,8 +54,7 @@
<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>
<input placeholder="去定位" disabled v-model="country_name" />
<u-icon class="arrowright" name="arrow-right" size="18" color="#747474"></u-icon>
</view>
</view>
@@ -63,7 +62,7 @@
<view class="cell1">
<view>备注(非必填)</view>
<view class="">
<textarea auto-height v-model="form.condition_desc" placeholder="详细情况..."/>
<textarea auto-height v-model="form.describe" placeholder="详细情况..."/>
</view>
</view>
</view>
@@ -127,56 +126,24 @@
data() {
return {
id:'',
brandList:[],
energyList:[],
typesList:[],
brandList1:[],
energyList1:[],
typesList1:[],
showbrand: false,
showtype: false,
showgrade: false,
showcartype: 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:'',
getGradeList:[],
carTypeList:[],
areaList:[],
grade_name:'',
car_type_name:'',
country_name:'',
form: {
contacts: '',
gender: '男',
phone: '',
email: '',
describe: '',
grade:'',
country_id:'',
car_type_id:''
}
}
@@ -189,6 +156,54 @@
methods: {
leftClick(){
uni.navigateBack({})
},
getGrade(){
request({
url:'customer/getGrade',
method:'get',
}).then(res => {
var list = res.data.data
this.getGradeList = [list]
})
},
carType(){
request({
url:'carType/getAll',
method:'get',
}).then(res => {
var list = res.data.data
this.carTypeList = [list]
})
},
area(){
request({
url:'area/getAll',
method:'get',
}).then(res => {
var list = res.data.data
this.areaList = [list]
})
},
gradeHandler(val){
this.form.grade = val.value[0].brand_id
this.grade_name = val.value[0].name
this.showgrade = false
},
areaChange(val){
this.form.country_id = val.value[0].energy_id
this.country_name = val.value[0].name
this.showarea = false
},
cartypesChange(val){
this.form.car_type_id = val.value[0].energy_id
this.car_type_name = val.value[0].name
this.showcartype = false
},
cancel(val){
this[val] = false
},
nextFn(){
}
}
}
+110 -6
View File
@@ -37,7 +37,7 @@
<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')">
<uni-file-picker fileMediatype="image" limit="1" :del-icon="false" disable-preview @select="select1" @delete="delfn('front_45_degree')">
<image src="/static/image/customer/upimg.png" mode="" class="addimg"></image>
</uni-file-picker>
</view>
@@ -46,15 +46,16 @@
<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>
<textarea auto-height v-model="form.bf_desc" placeholder="拜访内容..."/>
<image src="/static/image/customer/yuyin.png" mode="" @tap="startRecognizebd"></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="">
<view class="yuyin">
<textarea auto-height v-model="form.condition_desc" placeholder="详细情况..."/>
<image src="/static/image/customer/yuyin.png" mode="" @tap="startRecognize"></image>
</view>
</view>
</view>
@@ -121,8 +122,8 @@
</view>
</template>
<script>
import permision from "@/common/permission.js"
import { request,showToast } from '@/api/apiT.js'
// import ldSelect from '@/components/ld-select/ld-select.vue'
export default {
data() {
return {
@@ -139,7 +140,8 @@
level: '初步接触',
region: '',
firstFollow: '2025-03-11 12:00:01',
details: ''
details: '',
bf_desc:''
}
}
},
@@ -152,6 +154,9 @@
leftClick(){
uni.navigateBack({})
},
nextFn(){
},
cancel() {
this.show = false
@@ -180,6 +185,105 @@
return ''
}
},
delfn(name){
console.log(name)
that.carinfo[name] =''
},
uploadfn(imgUrl,name){
var that = this;
uni.uploadFile({
url: 'https://api.collect.hs.hnzhwlkj.club/upload',
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.carinfo[name] = path.data.image_name
console.log(that.carinfo)
}
});
},
select(e){
const tempFilePaths = e.tempFilePaths;
const imgUrl=tempFilePaths[0]
this.uploadfn(imgUrl,'front_45_degree')
},
select1(e){
const tempFilePaths = e.tempFilePaths;
const imgUrl=tempFilePaths[0]
this.uploadfn(imgUrl,'front_45_degree')
},
async startRecognizebd () {
// #ifdef APP-PLUS
let status = await this.checkPermission();
if (status !== 1) {
return;
}
// #endif
// TODO ios 在没有请求过权限之前无法得知是否有相关权限,这种状态下需要直接调用语音,会弹出正在识别的toast
var options = {};
var that = this;
options.engine = 'baidu';
that.valuebd = "";
plus.speech.startRecognize(options, function (s) {
console.log(s);
that.valuebd += s;
}, function (e) {
console.log("语音识别失败:" + e.message);
});
},
async startRecognize () {
// #ifdef APP-PLUS
let status = await this.checkPermission();
if (status !== 1) {
return;
}
// #endif
// TODO ios 在没有请求过权限之前无法得知是否有相关权限,这种状态下需要直接调用语音,会弹出正在识别的toast
var options = {};
var that = this;
that.value = "";
options.engine = 'iFly';
options.punctuation = false; // 是否需要标点符号
options.timeout = 10 * 1000; //语音录入持续时长
plus.speech.startRecognize(options, function(s) {
console.log(s);
that.value += s;
// 关闭语音
plus.speech.stopRecognize();
}, function (e) {
console.log("语音识别失败:" + e.message);
});
},
// #ifdef APP-PLUS
async checkPermission() {
let status = permision.isIOS ? await permision.requestIOS('record') :
await permision.requestAndroid('android.permission.RECORD_AUDIO');
if (status === null || status === 1) {
status = 1;
} else if (status === 2) {
uni.showModal({
content: "系统麦克风已关闭",
confirmText: "确定",
showCancel: false,
success: function(res) {
}
})
} else {
uni.showModal({
content: "需要麦克风权限",
confirmText: "设置",
success: function(res) {
if (res.confirm) {
permision.gotoAppSetting();
}
}
})
}
return status;
}
// #endif
}
}
</script>
+44 -18
View File
@@ -1,10 +1,10 @@
<template>
<view class="conts">
<view class="top">
<view class="navbar">客户管理</view>
<view class="navbar">{{$t('customer.title')}}</view>
<view class="topSearch">
<view class="left">
<u-search v-model="value5" bgColor="#fff" search-icon="" :show-action="false" placeholder="请输入客户名称或手机号"></u-search>
<u-search v-model="value5" bgColor="#fff" search-icon="" :show-action="false" :placeholder="$t('customer.inputhd')"></u-search>
<view @click="searchCli" class="search">
<image src="/static/image/customer/search1.png" mode=""></image>
</view>
@@ -20,7 +20,7 @@
<view class="" @click="godetile(item)">
<view class="top">
<view class="">2025.03.11 12:00</view>
<view class="tag">跟进中</view>
<view class="tag">{{$t('followup')}}</view>
</view>
<u-divider text="" :hairline="true"></u-divider>
<view class="cont">
@@ -33,28 +33,28 @@
</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 class="" @click="callPhone(item)"><image src="/static/image/customer/phone.png" mode=""></image> {{$t('call')}}</view>
<view class="" @click="editClick(item)"><image src="/static/image/customer/edit.png" mode=""></image> {{$t('followup')}}</view>
<view class="" @click="delClick(item)"><image src="/static/image/customer/trash.png" mode=""></image> {{$t('delete')}}</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="title">{{$t('prompt')}}</view>
<view class="text">
确定要删除此客户吗?
{{$t('deletemsg')}}
</view>
</view>
<view class="cent">
<view class="btn1" @click="showts = !showts">取消</view>
<view class="btn" @click="showts = !showts">确定</view>
<view class="btn1" @click="showts = !showts">{{$t('cancel')}}</view>
<view class="btn" @click="showts = !showts">{{$t('confirm')}}</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" >
<view class="index" @tap="addcustomer">
<image src="/static/image/customer/add.png" mode="widthFix">
</view>
</movable-view>
@@ -85,14 +85,22 @@
}]
],
datalist:[
{id:1},
{id:2},
{id:3},
{id:4}
{id:1,phone:'17839087603'},
{id:2,phone:'18437931136'},
{id:3,phone:'18339827479'},
{id:4,phone:'17839087603'}
],
}
},
onLoad() {
const { windowWidth, windowHeight } = uni.getSystemInfoSync();
this.x = windowWidth-70
this.y = windowHeight-25
},
methods: {
searchCli(){
},
close() {
// console.log('close');
this.show= false
@@ -111,8 +119,26 @@
url: '/pages/customer/detile'
});
},
phoneClick(item){
console.log(item)
// 拨打电话
callPhone(item) {
var phoneNumber= item.phone
if (!phoneNumber) {
uni.showToast({
title: '请输入电话号码',
icon: 'none',
});
return;
}
uni.makePhoneCall({
phoneNumber: phoneNumber,
success: () => {
console.log('拨打电话成功');
},
fail: (err) => {
console.log('拨打电话失败', err);
},
});
},
editClick(item){
uni.navigateTo({
@@ -199,7 +225,7 @@
background: #3471FF;
color: white;
border-radius: 10px 0px 0px 10px;
padding: 0px 10px;
padding: 3px 10px;
margin-right: -15px;
}
}
+52 -22
View File
@@ -1,22 +1,21 @@
<template>
<view class="content">
<view class="contop">
<view class="changeyy" @click="switchLang" >
<image src="/static/image/change.png" mode=""></image>切换语言
<view class="changeyy" @click="showlang = true" >
<image src="/static/image/change.png" mode=""></image>{{$t('home.langbtn')}}
</view>
<view class="title">
您已陪伴HESU CRM
{{$t('home.title')}} HESU CRM
</view>
<view class="num">
66 <text>天</text>
66 <text>{{$t('home.day')}}</text>
</view>
</view>
<view class="data-briefing">
<view class="top">
<text>数据简报</text>
<text>{{$t('home.databf')}}</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>
@@ -25,19 +24,19 @@
<u-grid :border="false" col="4">
<u-grid-item>
<text class="grid-num">20</text>
<text class="grid-text">常见问题</text>
<text class="grid-text">{{$t('home.addxs')}}</text>
</u-grid-item>
<u-grid-item>
<text class="grid-num">20</text>
<text class="grid-text">新增客户</text>
<text class="grid-text">{{$t('home.addkh')}}</text>
</u-grid-item>
<u-grid-item>
<text class="grid-num">20</text>
<text class="grid-text">新增拜访</text>
<text class="grid-text">{{$t('home.addbf')}}</text>
</u-grid-item>
<u-grid-item>
<text class="grid-num">20</text>
<text class="grid-text">新增跟进</text>
<text class="grid-text">{{$t('home.addgj')}}</text>
</u-grid-item>
</u-grid>
</view>
@@ -57,7 +56,8 @@
</userlist>
</view>
</view>
<u-datetime-picker :show="show" v-model="value1" @confirm="confirm" @cancel="cancel" @close="close" mode="year-month"></u-datetime-picker>
<u-datetime-picker :cancel-text="$t('cancel')" :confirm-text="$t('confirm')" :show="show" v-model="value1" @confirm="confirm" @cancel="cancel" mode="year-month"></u-datetime-picker>
<u-picker :cancel-text="$t('cancel')" :confirm-text="$t('confirm')" :show="showlang" :columns="columns" @cancel="cancellang" @confirm="confirmlang" :title="$t('home.langbtn')" keyName="label"></u-picker>
</view>
</template>
@@ -73,6 +73,7 @@
home: this.$t('tabbar.home'),
value0: 0,
show: false,
showlang: false,
value1: Number(new Date()),
timevalue:this.result(Number(new Date())),
time:this.result(Number(new Date())),
@@ -82,25 +83,56 @@
{id:3},
{id:4}
],
columns:[
[{
label: '中文',
id: 'zh'
}, {
label: '英文',
id: 'en'
}, {
label: '俄语',
id: 'ru'
}]
],
list1: [
{
name: '全部',
name: this.$t('all'),
}, {
name: '跟进中',
name: this.$t('followup'),
}, {
name: '已成交'
name: this.$t('deal')
}, {
name: '已丢失'
name: this.$t('lost')
}
]
}
},
onLoad() {
},
methods: {
switchLang() {
this.$i18n.locale = this.$i18n.locale == 'en' ? 'cn' : 'en';
confirm(e) {
// console.log('confirm', e);
this.show = false
},
cancellang() {
// console.log('cancel');
this.showlang = false
},
confirmlang(e) {
this.$i18n.locale = e.value[0].id
this.showlang = false
this.list1 = [
{
name: this.$t('all'),
}, {
name: this.$t('followup'),
}, {
name: this.$t('deal')
}, {
name: this.$t('lost')
}
];
uni.setTabBarItem({
index: 0,
text: this.$t('tabbar.home')
@@ -114,9 +146,6 @@
text: this.$t('tabbar.mine')
})
},
close() {
this.show = false
},
cancel() {
this.show = false
},
@@ -173,6 +202,7 @@
.title{
font-size: 32rpx;
margin-bottom: 20px;
width: 58%;
}
.num{
font-size: 60rpx;
@@ -220,7 +250,7 @@
}
.grid-text{
color: #222222;
font-size: 24rpx;
font-size: 20rpx;
}
}
+72 -20
View File
@@ -1,6 +1,6 @@
<template>
<view class="contents">
<view class="navbar">我的</view>
<view class="navbar">{{$t('mine.title')}}</view>
<view class="content">
<view class="contop">
<view class="">
@@ -20,50 +20,55 @@
<view class="bottomCon">
<view class="sonContent" @click="navTo('/pages/mine/massege')">
<image class="son-img-bg" src="/static/image/mine/icon1.png"></image>
<span>消息通知</span>
<span>{{$t('mine.msg')}}</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')">
<view class="sonContent" @click="navTo('/pages/mine/resetPwd')">
<image class="son-img-bg" src="/static/image/mine/icon2.png"></image>
<span>修改密码</span>
<span>{{$t('mine.cpassword')}}</span>
<uni-icons type="right" size="18"></uni-icons>
</view>
<view class="sonContent" @click="navTo('/pages/mine/soldList')">
<view class="sonContent" @click="show=true">
<image class="son-img-bg" src="/static/image/mine/icon3.png"></image>
<span>联系客服</span>
<span>{{$t('mine.contact')}}</span>
<uni-icons type="right" size="18"></uni-icons>
</view>
<view class="sonContent" @click="navTo('/pages/mine/mycarSource')">
<view class="sonContent" @click="navTo('/pages/mine/feedback')">
<image class="son-img-bg" src="/static/image/mine/icon4.png"></image>
<span>意见反馈</span>
<span>{{$t('mine.feedback')}}</span>
<uni-icons type="right" size="18"></uni-icons>
</view>
<view class="sonContent" @click="navTo('/pages/mine/drafts')">
<view class="sonContent" @click="navTo('/pages/mine/about')">
<image class="son-img-bg" src="/static/image/mine/icon5.png"></image>
<span>关于我们</span>
<span>{{$t('mine.about')}}</span>
<uni-icons type="right" size="18"></uni-icons>
</view>
<view class="sonContent" @click="navTo('/pages/mine/soldList')">
<view class="sonContent" @click="navTo('/pages/mine/logoff')">
<image class="son-img-bg" src="/static/image/mine/icon6.png"></image>
<span>注销账户</span>
<span>{{$t('mine.logoff')}}</span>
<uni-icons type="right" size="18"></uni-icons>
</view>
<view class="sonContent" @click="navTo('/pages/mine/soldList')">
<view class="sonContent" @click="navTo('/pages/login/index')">
<image class="son-img-bg" src="/static/image/mine/icon7.png"></image>
<span>退出登录</span>
<span>{{$t('mine.logout')}}</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>
<!-- 联系客服弹框 -->
<u-popup :show="show" :closeOnClickOverlay="false" :round="20" mode="center">
<view class="popupcontent">
<image class="log1" src="/static/image/mine/kefu.png"></image>
<view class="title">{{$t('mine.kfphone')}}</view>
<view class="calls">13545678952</view>
<button class="btn" @click="callPhone()">{{$t('call')}}</button>
</view>
</u-popup>
</view>
</template>
@@ -73,7 +78,6 @@
data() {
return {
userinfo:'',
is_login:uni.getStorageSync('is_login'),
show: false
}
},
@@ -93,6 +97,26 @@
url: url
});
},
// 拨打电话
callPhone(phoneNumber) {
this.show = false;
if (!phoneNumber) {
uni.showToast({
title: '请输入电话号码',
icon: 'none',
});
return;
}
uni.makePhoneCall({
phoneNumber: phoneNumber,
success: () => {
console.log('拨打电话成功');
},
fail: (err) => {
console.log('拨打电话失败', err);
},
});
},
}
}
</script>
@@ -215,5 +239,33 @@
}
}
}
.popupcontent{
padding: 20px 30px;
background: linear-gradient(to bottom, #B1C8FF, #ffffff);
border-radius: 10px;
text-align: center;
color: #333333;
.title{
font-size: 32rpx;
}
.calls{
color: #3471FF;
font-size: 40rpx;
margin: 10px 0px;
}
image{
width: 360rpx;
height:360rpx;
}
.btn{
background: linear-gradient(to right, #3471FF, #6776FF);
color: white;
border-radius: 50px;
width: 100%;
margin-top: 30px;
height: 80rpx;
line-height: 80rpx;
font-size: 30rpx;
}
}
</style>
+98 -136
View File
@@ -1,66 +1,66 @@
<template>
<view class="page">
<view class="title">
<view>Hello!<br>欢迎来到XXX</view>
<image src="/static/image/hesu.png" mode=""></image>
</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="手机号" />
<input type="number" v-model="email" :adjust-position="false" placeholder="手机号" />
</view>
<view class="password" v-if="loginType==2">
<view class="password">
<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="forgot-password">
<text @click="forgotPassword">忘记密码?</text>
</view>
<view class="button">
<view @click="login">
登录
</view>
</view>
</view>
<view class="three">
<u-divider text="第三方登录" style="padding: 0px 40px;"></u-divider>
<u-grid :border="false" @click="click" align="center">
<u-grid-item>
<image src="/static/image/login/fenshu.png" mode=""></image>
<text class="grid-text">飞书</text>
</u-grid-item>
<u-grid-item>
<image src="/static/image/login/emali.png" mode=""></image>
<text class="grid-text">邮箱</text>
</u-grid-item>
<u-grid-item>
<image src="/static/image/login/phone.png" mode=""></image>
<text class="grid-text">手机</text>
</u-grid-item>
</u-grid>
</view>
<view class="pact">
<radio :checked="pactChecked" activeBackgroundColor="#3264ed" activeBorderColor="#3264ed"
<view>我已经阅读并同意<text @click="toPact">《用户协议》</text>和<text @click="toPact">《隐私协议》</text></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>
import { request,showToast } from '@/api/apiT.js'
export default {
data() {
return {
account: "",
email: "",
password: "",
vcode: "",
loginType: 1,
pwdShow: false,
pactChecked: false,
vcodeTime: 0,
vcodeTimer: null
}
},
onLoad() {
@@ -68,29 +68,50 @@
},
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
if(this.email==''){
uni.showToast({
title:'邮箱不能为空',
icon: 'none'
});
return false
}
if(this.password==''){
uni.showToast({
title:'密码不能为空',
icon: 'none'
});
return false
}
if(!this.pactChecked){
uni.showToast({
title:'请先勾选同意用户服务协议以及隐私政策',
icon: 'none'
});
return false
}
request({
url:'user/login',
method:'POST',
data:{
email: this.email,
password: this.password,
}
}).then(res => {
console.log(res.data.data)
if (res.data.code == -1) {
uni.showToast({
title: res.data.msg,
icon: 'none'
});
} else if (res.data.code == 0) {
//返回数据接收成功
uni.reLaunch({
url: '/pages/index/index',// 替换为你要跳转的页面路径
});
}
}, 1000)
uni.showToast({
title: "获取验证码",
icon: 'none'
})
},
pactChange() {
this.pactChecked = !this.pactChecked
},
toPact() {
uni.showToast({
title: "协议",
@@ -104,8 +125,7 @@
<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-image: url("../../static/image/login/loginbg.png");
background-size: 100%;
background-repeat: no-repeat;
display: flex;
@@ -114,87 +134,30 @@
.title {
padding-top: 220rpx;
padding-bottom: 70rpx;
view {
padding-left: 64rpx;
font-size: 48rpx;
font-weight: 700;
color: #383838;
text-align: center;
image{
width: 160px;
height: 37px;
}
}
.form {
flex: 1;
margin: 0 32rpx;
border-radius: 40rpx;
background-color: #fff;
margin: 0 76rpx;
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;
padding: 150rpx 0px 0;
margin-bottom: 20rpx;
.account,
.password,
.vcode {
height: 96rpx;
border-radius: 20rpx;
.password{
height: 80rpx;
border-radius: 50px;
padding: 0 48rpx;
display: flex;
align-items: center;
background-color: #f7fafc;
background-color: #F6F6F6;
input {
flex: 1;
@@ -204,39 +167,38 @@
.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;
line-height: 80rpx;
border-radius: 50px;
text-align: center;
font-size: 32rpx;
background-color: #3264ed;
background: linear-gradient(to right, #3471FF, #6776FF);
color: #fff;
}
}
}
.three{
margin: 40rpx 0px;
padding: 20rpx 40rpx;
image{
width: 100rpx;
height: 100rpx;
}
}
}
.forgot-password {
text-align: right;
margin-bottom: 20px;
}
.pact {
display: flex;
align-items: center;
justify-content: center;
padding-bottom: 120rpx;
font-size: 24rpx;
text {
+90
View File
@@ -0,0 +1,90 @@
<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="title">
<image src="/static/image/hesu.png" mode=""></image>
</view>
<u-cell-group :border="false">
<u-cell
size="large"
title="版本更新"
value="v0.0101"
isLink
@click="handleVersionUpdate"
></u-cell>
<u-cell title="隐私政策" isLink @click="handlePrivacyPolicy" />
<u-cell title="用户协议" isLink @click="handleUserAgreement" />
</u-cell-group>
</view>
<view class="footer">
<text class="copyright">©河南新友合科技有限公司 版权所有</text>
</view>
</view>
</template>
<script>
export default {
data() {
return {
}
},
methods: {
leftClick(){
uni.navigateBack({})
},
handleVersionUpdate() {
uni.showToast({
title: '检查版本更新',
icon: 'none'
});
// 这里可以添加检查版本更新的逻辑
},
handlePrivacyPolicy() {
uni.navigateTo({
url: '/pages/about/privacy-policy'
});
},
handleUserAgreement() {
uni.navigateTo({
url: '/pages/about/user-agreement'
});
}
}
}
</script>
<style lang="scss" scoped>
::v-deep .u-cell__body{
padding: 15px 0px !important;
}
.title {
padding: 140rpx 0px;
text-align: center;
image{
width: 160px;
height: 37px;
}
}
.content {
font-size: 14px;
padding: 10px 15px;
color: #333333;
}
.footer {
width: 100%;
text-align: center;
position: fixed;
bottom: 20px;
.copyright {
font-size: 12px;
color:#3471FF;
}
}
</style>
+76
View File
@@ -0,0 +1,76 @@
<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="container">
<u--textarea v-model="value2" border="none" :placeholder="$t('mine.feedbackinputhd')" count ></u--textarea>
<view class="cels">
<text>{{$t('mine.lxcall')}}</text>
<input :placeholder="$t('mine.lxcallinputhd')" v-model="form.phone" />
</view>
</view>
<view class="foot">
<button class="btn" @click="nextFn">{{$t('submit')}}</button>
</view>
</view>
</template>
<script>
export default {
data() {
return {
form: {
feedback: '',
phone: ''
},
}
},
methods: {
leftClick(){
uni.navigateBack({})
},
submitForm() {
}
}
};
</script>
<style scoped lang="scss">
.u-textarea{
background-color: #F6F6F6 !important;
}
.container {
padding: 20px;
color: #666666;
font-size: 28rpx;
.cels{
display: flex;
align-items: center;
justify-content: space-between;
background-color: #F6F6F6;
padding: 15px 10px;
margin-top: 20px;
border-radius: 10px;
input{
text-align: right;
font-size: 28rpx;
}
}
}
.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>
+90
View File
@@ -0,0 +1,90 @@
<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="card-content">
<image src="/static/image/mine/waring.png" mode=""></image>
<view class="section-title">账户注销</view>
<view class="warning-text">以下信息将被清空无法找回</view>
<view class="msgcont">
<view class=""><text>*</text> 身份、账号信息</view>
<view class=""><text>*</text>所有客户信息</view>
<view class=""><text>*</text>个人隐私信息</view>
</view>
</view>
<!-- 确定注销按钮 -->
<view class="foot">
<button class="btn" @click="nextFn">确定注销账户</button>
</view>
</view>
</template>
<script>
export default {
data() {
return {
}
},
methods: {
leftClick(){
uni.navigateBack({})
},
}
}
</script>
<style lang="scss" scoped>
.card-content {
margin-top: 100rpx;
padding:30rpx ;
text-align: center;
color: #222222;
image{
width: 120rpx;
height: 112rpx;
margin-bottom: 20rpx;
}
.section-title {
font-size: 18px;
margin-bottom: 10px;
}
.warning-text {
font-size: 14px;
color: #999999;
margin-bottom: 15px;
}
.msgcont{
margin-top: 60rpx;
background-color: #F6F6F6;
border-radius: 10px;
padding: 15px;
text-align: left;
line-height: 30px;
text{
color: #FE4949;
margin-right: 5px;
}
}
}
.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>
+5 -1
View File
@@ -48,7 +48,11 @@
title: `点击了第 ${index + 1} 条消息`,
icon: 'none'
});
}
},
leftClick(){
uni.navigateBack({})
},
}
}
</script>
+190
View File
@@ -0,0 +1,190 @@
<template>
<view class="page">
<view class="title">
<image src="/static/image/hesu.png" mode=""></image>
</view>
<view class="form">
<view class="inputs_button">
<view class="inputs">
<view class="laber">邮箱</view>
<view class="vcode">
<u--input
type="password"
placeholder="邮箱地址"
border="none"
></u--input>
<text v-if="vcodeTime==0" @click="getVcode">获取验证码</text>
<text v-else style="color:#fff">重新获取({{vcodeTime}}s)</text>
</view>
<view class="password">
<u--input
type="password"
placeholder="验证码"
border="none"
></u--input>
</view>
<view class="laber">重置密码</view>
<view class="account">
<u--input
type="password"
placeholder="新密码"
border="none"
></u--input>
</view>
<view class="password">
<u--input
type="password"
placeholder="确认密码"
border="none"
></u--input>
</view>
</view>
<view class="button">
<view @click="login">
确认修改
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import { request,showToast } from '@/api/apiT.js'
export default {
data() {
return {
email: "",
password: "",
pactChecked: false,
vcodeTime: 0,
vcodeTimer: null
}
},
onLoad() {
},
methods: {
leftClick(){
uni.navigateBack({})
},
login() {
if(this.email==''){
uni.showToast({
title:'邮箱不能为空',
icon: 'none'
});
return false
}
if(this.password==''){
uni.showToast({
title:'密码不能为空',
icon: 'none'
});
return false
}
},
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'
})
},
}
}
</script>
<style lang="scss" scoped>
.page {
min-height: 100vh;
background-image: url("../../static/image/login/loginbg.png");
background-size: 100%;
background-repeat: no-repeat;
display: flex;
flex-direction: column;
justify-content: space-between;
.title {
padding-top: 220rpx;
text-align: center;
image{
width: 160px;
height: 37px;
}
}
.form {
flex: 1;
margin: 0 76rpx;
overflow: hidden;
.inputs_button {
.inputs {
padding: 150rpx 0px 0;
margin-bottom: 20rpx;
.laber{
color: #222222;
font-size: 32rpx;
line-height: 48px;
padding-left: 15px;
}
.account,
.vcode,
.password{
height: 80rpx;
border-radius: 50px;
padding: 0 30rpx;
display: flex;
align-items: center;
background-color: #F6F6F6;
input {
flex: 1;
}
}
.account {
margin-bottom: 48rpx;
}
.vcode {
margin-bottom: 10px;
padding-right: 0px;
text {
text-wrap: nowrap;
font-size: 26rpx;
padding: 14rpx 30rpx;
background-color: #3471FF;
border-radius: 50px;
color: #fff;
}
}
}
.button {
padding: 0 32rpx;
margin-top: 80rpx;
view {
line-height: 80rpx;
border-radius: 50px;
text-align: center;
font-size: 32rpx;
background: linear-gradient(to right, #3471FF, #6776FF);
color: #fff;
}
}
}
}
}
</style>