wxml
因小程序语法和vue语法冲突故使用单括号
<form bindsubmit="onSubmit" report-submit="true">
<text class="helptop">问题及反馈:</text>
<view class="formarea">
<textarea bindinput="inputContent" name="content" auto-focus placeholder="请描述您的问题与反馈,您的反馈会在24小时内得到答复。" placeholder-class="pc"></textarea>
<text>4-200字</text>
</view>
<view class="forminput">
<text>联系方式:</text>
<input bindinput="inputPhone" name="phone"></input>
</view>
<view class="formimg">
<text class="formimgtit">添加图片:</text>
<view class='uploader-img df' wx:if="{pics}">
<view class='uploader-list' wx:for="{pics}" wx:key="item" >
<image src='{item}' data-index="{index}" mode="aspectFit" bindtap='previewImg1'/>
<image class='delete' data-index="{index}" src='../../images/delete.png' bindtap='deleteImg'/>
</view>
</view>
<view class='upAdd' bindtap='chooseImg'>
<image src='../../images/plus.png' mode="widthFix"/>
</view>
</view>
<view class="btn">
<button formType="submit" disabled="{disabled}">提交</button>
<view class="callGetPhone" wx:if="{store.phone}">客服电话:{store.phone}<text bindtap='callGetPhone' data-phone="{store.phone}">马上咨询</text></view>
</view>
</form>
js
// pages/user/help.js
const App = getApp();
Page({
/**
* 页面的初始数据
*/
data: {
disabled: false,
pics: [],//图片
imglist:[]
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
let _this = this;
App._get('user/getkefu', {}, function (result) {
_this.setData({
store: result.data.store
});
});
},
inputContent: function (e) {
this.setData({
content: e.detail.value
})
},
inputPhone: function (e) {
this.setData({
phone: e.detail.value
})
},
/**
* 图片放大查看
*/
previewImg: function (e) {
var index = e.target.dataset.index;//当前图片地址
var imgArr = e.target.dataset.list;//所有要预览的图片的地址集合 数组形式
// console.log(index, imgArr)
wx.previewImage({
current: imgArr[index],
urls: imgArr,
})
},
/**
* 图片上传
*
*/
//上传图片开始
chooseImg: function (e) {
var _this = this, pics = _this.data.pics;
let wxapp_id = App.getWxappId();
if (pics.length < 3) {
wx.chooseImage({
count: 3, // 最多可以选择的图片张数,默认9
sizeType: ['original', 'compressed'], // original 原图,compressed 压缩图,默认二者都有
sourceType: ['album', 'camera'], // album 从相册选图,camera 使用相机,默认二者都有
success: function (res) {
// 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片
var tempFilePaths = res.tempFilePaths;
for (var i = 0; i < tempFilePaths.length; i++) {
wx.uploadFile({
url: App.api_root + 'user/image',
filePath: tempFilePaths[i],
name: 'head',
formData: {
wxapp_id: wxapp_id,
user_id: App.getUserId()
},
success: function (resu) {
var resu = JSON.parse(resu.data);
if (resu.code == 1) {
let picurl=resu.data.url;
_this.setData({
imglist: _this.data.imglist.concat(picurl),
})
} else {
App.showError('上传失败');
}
}
});
// 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片
pics.push(tempFilePaths[i]);
}
_this.setData({
pics: pics
})
},
});
} else {
App.showError('最多上传3张图片');
}
},
// 删除图片
deleteImg: function (e) {
var that = this;
var pics = this.data.pics;
var imglist = this.data.imglist;
var index = e.currentTarget.dataset.index;
pics.splice(index, 1);
imglist.splice(index, 1);
this.setData({
imglist: imglist,
pics: pics,
})
},
// 预览图片
previewImg1: function (e) {
//获取当前图片的下标
var index = e.currentTarget.dataset.index;
//所有图片
var pics = this.data.pics;
wx.previewImage({
//当前显示图片
current: pics[index],
//所有图片
urls: pics
})
},
/**
* 表单验证
*/
validation: function (values) {
var _this = this;
if (values.content === '') {
this.data.error = '问题及反馈不能为空';
return false;
}
if (values.phone == "") {
this.data.error = '联系方式不能为空';
return false;
}
return true;
},
onSubmit(e) {
let _this = this,
values = e.detail.value;
values.imglist = _this.data.imglist;
// 记录formid
App.saveFormId(e.detail.formId);
// 表单验证
if (!_this.validation(values)) {
App.showError(_this.data.error);
_this.setData({
disabled: false
});
return false;
}
// 按钮禁用
_this.setData({
disabled: true
});
// 提交到后端
App._post_form('user/feedBack', values, result => {
if (result.code == 1) {
App.showSuccess('提交成功', function () {
wx.switchTab({
url: '../user/index'
})
});
} else {
App.showError('提交失败');
}
}, false, () => {
// 解除禁用
_this.setData({
disabled: false
});
});
},
// 拨打电话给收件人
callGetPhone(e) {
let _this = this;
// 号码
let phoneNumber = e.currentTarget.dataset.phone;
wx.makePhoneCall({
phoneNumber: phoneNumber,
success: function () {
console.log("拨打电话成功!")
},
fail: function () {
console.log("拨打电话失败!")
}
})
},
})
wxss
/* pages/user/help.wxss */
.helptop {
border-top: 2rpx solid #eee;
display: block;
font-size: 28rpx;
color: #666;
padding: 0 32rpx;
padding-top: 20rpx;
padding-bottom: 15rpx;
}
.formarea {
padding: 0 32rpx;
border-bottom: 2rpx solid #eee;
position: relative;
}
.formarea .pc {
font-size: 28rpx;
color: #D2D2D2;
}
.formarea textarea {
width: 100%;
height: 200rpx;
font-size: 28rpx;
color: #666;
}
.formarea text {
position: absolute;
font-size: 28rpx;
color: #D2D2D2;
display: block;
right: 25rpx;
bottom: 18rpx;
}
.forminput {
position: relative;
}
.forminput text {
font-size: 28rpx;
color: #666666;
line-height: 68rpx;
height: 68rpx;
display: block;
position: absolute;
left: 31rpx;
}
.forminput input {
line-height: 70rpx;
height: 70rpx;
padding-right: 31rpx;
padding-left: 170rpx;
border-bottom: 2rpx solid #eee;
font-size: 28rpx;
color: #666666;
}
.formimg {
padding: 0 31rpx;
border-bottom: 2rpx solid #eee;
padding-bottom: 30rpx;
margin-bottom: 79rpx;
}
.formimg .formimgtit {
font-size: 28rpx;
color: #666666;
padding-top: 20rpx;
display: block;
margin-bottom: 20rpx;
}
.formimg .upAdd image {
width: 118rpx;
height: 118rpx;
}
.uploader-img {
flex-wrap: wrap;
}
.uploader-list {
position: relative;
width: 20%;
overflow: hidden;
margin-right: 2%;
}
.uploader-list image {
width: 120rpx;
height: 120rpx;
}
.uploader-list .delete {
position: absolute;
width: 40rpx;
height: 40rpx;
right: 0rpx;
top: 10rpx;
}
.btn button {
display: block;
width: 619rpx;
height: 90rpx;
text-align: center;
line-height: 90rpx;
color: #fff;
background: #03AC67;
font-size: 32rpx;
border-radius: 50rpx;
margin: 0 auto;
}
.btn button::after {
display: none;
}
.btn .callGetPhone {
text-align: center;
display: block;
font-size: 28rpx;
color: #666;
margin-top: 25rpx;
}
.btn .callGetPhone text {
display: inline-block;
color: #03ac67;
margin-left: 10rpx;
margin-top: 0;
}