于有一个demo,使用扫一扫功能了,真机测试可用,推荐大家学习研究:

代码示例:
- let req = require( ‘../../requests/request.js’ );
- let util = require( ‘../../utils/util.js’ )
- Page({
- data:{
- radioValue: “”,
- radioName: “”,
- epxressLists: [],
- saveExpressLists: [],
- words: [“#”,”A”,”B”,”C”,”D”,”E”,”F”,”G”,”H”,”I”,”J”,”K”,”L”,”M”,”N”,”O”,”P”,”Q”,”R”,”S”,”T”,”U”,”V”,”W”,”X”,”Y”,”Z”],
- selectedWord: “top”,
- wWidth: 0,
- wHeight: 0,
- isShowModal: false,
- currentTop: 0,
- obj: {},
- animationError: {},
- errorShow: false,
- scale: 1,
- expressObj: [],
- searchInput: ”
- },
- onLoad(obj){
- const wSize = util.getWindowSize();
- this.setData({wWidth: wSize.wWidth, wHeight: wSize.wHeight, scale: wSize.scale, obj});
- this.getExpressLsit();
- },
- showModal(e) {
- this.setDefault(e)
- this.setData({isShowModal: true})
- },
- changeModalText(e) {
- this.setDefault(e)
- },
- hideModal() {
- this.setData({isShowModal: false})
- },
- setDefault(e){
- const wWidth = parseFloat(this.data.wWidth)
- const currentTop = parseFloat(e.touches[0].clientY);
- const startTop = (wWidth / 750) * 200;
- const eachLen = (wWidth / 750) * 25;
- let len = currentTop – startTop;
- let selectedWord = [];
- len = len / eachLen
- len = parseInt(len)
- this.setData({selectedWord: this.data.words[len], currentTop})
- },
- radioChange(e) {
- const index = e.currentTarget.dataset.index.split(“-“)
- const lists = this.data.epxressLists[index[0]]
- const arr = lists.list[index[1]];
- const obj = this.data.obj
- this.setData({radioValue: arr.code, radioName: arr.name})
- obj.key = arr.code
- obj.name = arr.name
- this.setData({obj})
- this.goToDetails()
- },
- goToDetails(){
- const unixTime = new Date().getTime()
- const num = this.data.obj.num
- const key = this.data.radioValue
- const name = this.data.radioName
- const params = {
- data: {tid: unixTime, companyCode: key, logisticCode: num},
- method: ‘GET’
- }
- util.showLoading(“加载中…”,”loading”, 10000)
- req.getEpxressData(params, data => {
- const status = parseInt(data.status)
- const msg = data.msg || ‘数据查询异常,请稍后再试’
- if(data.data === null) {
- this.showError(msg)
- return
- }
- const state = (data.data.state === null) ? data.data.state : parseInt(data.data.state)
- const traces = data.data.traces
- if(!data.data.success) {
- this.showError(msg)
- return
- }
- if(traces === null) {
- this.showError(‘无该单号信息, 请确认单号’)
- return
- }
- if(state === null || state < 0) {
- this.showError(‘无该单号信息, 请确认单号’)
- return
- }
- if(status !== 1){
- this.showError(data.details)
- return
- }
- if(status === 1 && !!data.data.success && !!traces && parseInt(state) > 0){
- wx.redirectTo({url: ‘../details/details?num=’ + num + ‘&key=’ + key + “&name=” + name})
- }
- }, data => {
- }, data => {
- util.hideToast()
- })
- },
- getExpressLsit() {
- const params = {
- data: {},
- method: ‘GET’
- }
- req.getEpxressList(params, data => {
- const lists = data
- const arr = lists.data
- let epxressLists = []
- const expressObj = []
- for(let i = 0; i < arr.length; i ++) {
- for(let val in arr[i]) {
- for(let j = 0; j < arr[i][val].length; j ++) {
- expressObj.push(arr[i][val][j])
- }
- }
- }
- this.setData({expressObj})
- for(let i = 0; i < arr.length; i ++) {
- for(let val in arr[i]) {
- epxressLists[i] = {key: val, list:arr[i][val]}
- }
- }
- this.setData({epxressLists, saveExpressLists: epxressLists})
- })
- },
- inputChange(e) {
- let searchInput = e.detail.value;
- this.setData({searchInput})
- },
- clearNum() {
- this.setData({searchInput: ”})
- },
- inputConfirm(e) {
- let words = [];
- let firstWord = e.detail.value;
- let searchList = this.data.searchList;
- firstWord = firstWord.replace(/(^s*)|(s*$)/g, “”);
- const expressObj = this.data.expressObj;
- if(firstWord.length >= 2) {
- firstWord = firstWord.substring(0,2);
- }
- for(let i = 0; i < expressObj.length; i ++) {
- if(expressObj[i].name.indexOf(firstWord) > -1) {
- this.setData({selectedWord: expressObj[i].code})
- break;
- }
- }
- },
- selectWord(e) {
- let firstWord = e.target.dataset.value
- this.getOneList(firstWord)
- },
- getOneList(firstWord) {
- if(!firstWord) return
- firstWord = firstWord[0]
- firstWord = firstWord.toUpperCase()
- this.setData({selectedWord: firstWord})
- },
- showError(text) {
- this.animateError(1)
- this.setData({errorShow: true,errorText: text})
- setTimeout(() => {
- this.animateError(0)
- }, 2000)
- setTimeout(() => {
- this.setData({errorShow: false})
- }, 3000)
- },
- animateError(opacity) {
- let animation = wx.createAnimation({
- duration: 1000,
- timingFunction: ‘ease’
- })
- animation.opacity(opacity).step()
- this.setData({
- animationError:animation.export()
- })
- }
- })
复制代码
|