微信小程式發模板訊息給使用者
阿新 • • 發佈:2018-12-11
第一步:index.wxml,其程式碼如下所示
<!--index.wxml--> <form bindsubmit='formSubmit' report-submit='true'> <view class="container"> <input class='input_title' type='text' placeholder="會議室基本資訊和已預訂計劃"></input> </view> <view class="container"> <text class='title'>會議室名稱</text> <view bindtap='bindShowMsg' class='select-list'> <input disabled='true' name="class_name" value='{{selectName}}'></input> <image class='img_select' src='../../images/select.png'></image> </view> </view> <view class='select-box' wx:if="{{select}}" > <view class='selected' bindtap="mySelect" data-name='第一會議室'>第一會議室</view> <view class='selected' bindtap="mySelect" data-name='第二會議室'>第二會議室</view> <view class='selected' bindtap="mySelect" data-name='第三會議室'>第三會議室</view> </view> <view class="container"> <text class='title'>會議名稱(限90個位元組)</text> <input type='text' maxlength='90' class='input_name' name="meet_title" bindblur='checkTitle' ></input> </view> <view class="container"> <text class='title'>主持人姓名(限45個位元組)</text> <input type='text' maxlength='45' class='input_name' name="user_name" bindblur='checkName'></input> </view> <view class="container"> <text class='title'>會議開始時間</text> <picker mode="date" value="{{startDate}}" bindchange="bindStartDateChange"> <view class='date'> <text>日期:</text> <input disabled='true' name='startDate' value='{{startDate}}' class='date_year'></input> </view> </picker> <picker mode="time" value="{{startTime}}" bindchange="bindStartTimeChange"> <view class="date"> <text>時間:</text> <input disabled='true' name='startTime' value='{{startTime}}' class='date_time'></input> </view> </picker> </view> <view class="container"> <text class='title'>會議結束時間</text> <picker mode="date" value="{{endDate}}" bindchange="bindEndDateChange"> <view class='date'> <text>日期:</text> <input disabled='true' name='endDate' value='{{endDate}}' class='date_year' start="{{startDate}}" end="{{startTime}}"></input> </view> </picker> <picker mode="time" value="{{endTime}}" bindchange="bindEndTimeChange"> <view class="date"> <text>時間:</text> <input disabled='true' name='endTime' value='{{endTime}}' class='date_time'></input> </view> </picker> </view> <view class="container"> <text class='title'>參會組織/人郵件</text> <input type='text' maxlength='90' class='input_name' name="mail" bindblur='setMail'></input> </view> <view class="container"> <button class='button' bindtap='addMail'>新增</button> <button class='button' bindtap='delMail'>刪除</button> <scroll-view scroll-y class='mails' name="mails" > <view wx:for="{{mails}}" wx:for-index="index" wx:for-item="item"> <text>{{item}}</text> </view> </scroll-view> </view> <button form-type='submit' >提交</button> </form>
第二步:index.wxss,其程式碼如下所示:
/**index.wxss**/ .container{ width: 100%; display: flex; flex-wrap: wrap; margin-bottom: 5px; font-size: 12px; } .title { width: 120px; height: 20px; line-height: 20px; font-size: 11px; background-color: blue; color: white; text-align: center; border: solid 1px deepskyblue; border-radius: 2px; margin: 0 10px; } .select-list{ width: 130px; height: 20px; line-height: 20px; font-size: 11px; text-align: center; background-color: white; border: solid 1px black; border-radius: 2px; } .select-box{ width: 130px; height: 60px; position: relative; font-size: 14px; margin-left: 142px; background-color: red; text-align: center; border: solid 1px red; border-radius: 2px; } .select{ height: 20px; line-height: 20px; } .img_select{ position: absolute; width: 15px; height: 10px; left: 255px; top: 35px; } .input_title{ margin: 0 auto; width: 140px; height: 20px; border:solid 1px black; flex: center; text-align: center; font-size: 10px; } .input_name{ width: 170px; border:solid 1px black; } .font{ font-size: 12px; line-height: 20px; } .date{ display: flex; height: 20px; } .date text,.date input{ justify-self: start; line-height: 20px; } .date_year{ width: 70px; } .date_time{ width: 40px; } .button{ border-radius: 5px; background-color: wheat; font-size: 12px; height: 30px; } .mails{ height: 200px; width: 320px; border: solid 1px black; }
第三步:index.js,其程式碼如下所示:
//index.js
//獲取應用例項
const app = getApp()
var arr = new Array();
Page({
data: {
select: false,
class_name: '',
meet_titlt: "",
user_name: "",
selectName: '第一會議室',
startDate: '2016-09-01',
startTime: '12:01',
endDate: '2016-09-02',
endTime: '12:02',
mail: "",
mails: [],
color: "deepskyblue",
isClick: true,
titleFlag: false,
nameFlag: false,
endDataFlag: true,
endTimeFlag: true,
mailFlag: false,
code: "a",
formId:""
},
onLoad: function (options) {
},
// 顯示下拉框
bindShowMsg() {
if (this.data.select == false) {
this.setData({
select: true
})
} else {
this.setData({
select: false
})
}
},
// 選擇下拉框
mySelect(e) {
var name = e.currentTarget.dataset.name
this.setData({
selectName: name,
class_name: name,
select: false
})
},
// 選擇開始日期
bindStartDateChange: function (e) {
this.setData({
startDate: e.detail.value
})
},
// 選擇開始時間
bindStartTimeChange: function (e) {
this.setData({
startTime: e.detail.value
})
},
// 選擇截止日期
bindEndDateChange: function (e) {
var endDate = e.detail.value;
if (endDate < this.data.startDate) {
wx.showModal({
title: '提示',
content: '請選擇正確的日期',
});
this.setData({
endDate: this.data.startDate
});
} else {
this.setData({
endDate: endDate,
endDateFlag: true
})
}
},
// 選擇截止時間
bindEndTimeChange: function (e) {
var endTime = e.detail.value;
if (this.data.startDate == this.data.endDate) {
if (endTime <= this.data.startTime) {
wx.showModal({
title: '提示',
content: '請選擇正確的時間',
});
this.setData({
endTime: this.data.startTime
});
}
} else {
this.setData({
endTime: endTime,
endTimeFlag: true
})
}
},
// 提交表單
formSubmit: function (e) {
// 得到formid
var formId = e.detail.formId;
console.log(formId);
// 驗證所有輸入項是否正確
if (this.data.titleFlag && this.data.nameFlag && this.data.endDataFlag && this.data.endTimeFlag && this.data.mailFlag) {
var class_name = e.detail.value.class_name;
var meet_title = e.detail.value.meet_title;
var user_name = e.detail.value.user_name;
var startDate = e.detail.value.startDate;
var startTime = e.detail.value.startTime;
var endDate = e.detail.value.endDate;
var endTime = e.detail.value.endTime;
var mails = this.data.mails;
//var code = "";
console.log(class_name + ";" + meet_title + ";" + user_name + ";" + startDate + ";" + startTime + ";" + endDate + ";" + endTime + ";" + mails + ";");
var openid = "";
// 登入
wx.login({
success: function (res) {
if (res.code) { //wx.login獲取code。
var access_token = "";
wx.request({
url: 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=你的小程式appid&secret=你的小程式密匙',
type: "get",
dataType: "json",
async: true,
success: function (result) {
let _access_token = result.data.access_token;
let url = 'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=' + _access_token;
wx.request({
url: 'https://api.weixin.qq.com/sns/jscode2session?appid=' + "你的小程式appid" + '&secret=' + "你的小程式密匙" + '&js_code=' + res.code + '&grant_type=authorization_code',
data: {},
header: {
'content-type': 'json'
},
success: function (res) {
// 得到使用者的openid
openid = res.data.openid //返回openid
var user = "";
// 拼接參會人
for (var i = 0; i < mails.length; i++) {
if (mails.length == 1) {
user += mails[i];
} else {
user += mails[i] + ";";
}
}
if (user.lastIndexOf(";") > 0) {
user = user.substring(0, user.length - 1);
}
console.log(user);
// 設定模板訊息的data值
let _jsonData = {
touser: openid,
template_id: '你的小程式模板id',
form_id: e.detail.formId,
page: "pages/index/index",
data: {
// 會議時間
"keyword1": { "value": startDate + " " + startTime, "color": "#173177" },
// 參會人
"keyword2": { "value": user, "color": "#173177" },
// 主持人
"keyword3": { "value": user_name, "color": "#173177" },
// 會議室
"keyword4": { "value": class_name, "color": "#173177" },
// 會議名稱
"keyword5": { "value": meet_title, "color": "#173177" },
}
};
// 開始傳送模板訊息
wx.request({
url: url,
data: _jsonData,
method: "post",
success: function (res) {
console.log(res)
}
});
}
});
},
});
// 傳送郵件
wx.request({
url: 'http://localhost:8080/TestSpringMVC/sendMail',
data: {
"class_name": class_name,
"meet_title": meet_title,
"user_name": user_name,
"startDate": startDate,
"startTime": startTime,
"endDate": endDate,
"endTime": endTime,
"mails": mails
},
header: {
'Content-Type': 'application/json'
},
success: function (res) {
wx.showToast({
title: '傳送成功',
icon: 'success',
duration: 2000
})
},
fail: function () {
wx.showModal({
title: '提示',
content: '傳送失敗',
})
}
})
}
}
});
} else {
wx.showModal({
title: '提示',
content: '請輸入全部正確的資訊',
})
}
},
// 驗證郵箱
setMail: function (e) {
var email = e.detail.value;
var reg = new RegExp('^[a-zA-Z0-9_.-] [email protected][a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$');
var flag = reg.test(email);
if (flag) {
this.setData({
mail: email,
mailFlag: true
})
} else {
wx.showModal({
title: '提示',
content: '請輸入正確的郵箱',
})
}
},
// 新增參會人郵箱
addMail: function () {
var email = this.data.mail;
var reg = new RegExp('^[a-zA-Z0-9_.-][email protected][a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$');
var flag = reg.test(email);
var isExit = true;
if (flag) {
if (arr != null) {
for (var i = 0; i < arr.length; i++) {
//判斷是否存在
if (email == arr[i]) {
isExit = false;
wx.showModal({
title: '提示',
content: '該郵箱已存在',
});
}
}
if (isExit) {
arr.push(this.data.mail);
this.setData({
mails: arr
});
}
}
} else {
wx.showModal({
title: '提示',
content: '請輸入正確的郵箱',
})
}
},
// 刪除郵箱
delMail: function () {
if (arr != null) {
for (var i = 0; i < arr.length; i++) {
if (this.data.mail == arr[i]) {
arr.splice(i, 1);
}
}
}
this.setData({
mails: arr
});
},
//驗證標題
checkTitle: function (e) {
var title = e.detail.value;
if (title != null && title != "") {
this.setData({
meet_title: title,
titleFlag: true
})
} else {
wx.showModal({
title: '提示',
content: '會議名稱不能為空',
})
}
},
// 驗證主持人姓名
checkName: function (e) {
var name = e.detail.value;
if (name != null && name != "") {
this.setData({
user_name: name,
nameFlag: true
})
} else {
wx.showModal({
title: '提示',
content: '主持人姓名不能為空',
})
}
},
})