1.单提示函数(应用场景只想用户点击确认执行的时候)

function showModal(cont,flag,fn){wx.showModal({title: '提示',content: cont,showCancel:flag,success(res) {if (res.confirm) {} else if (res.cancel) {}},complete(){fn()wx.hideLoading()}
})
}  fn.showModal('单确定执行',false,()=>{});

// 2.post请求方式

function _post(url, data, success, fail) {wx.request({url: http + url,header: {'content-type': 'application/x-www-form-urlencoded',},method: 'POST',data: data,success (res) {wx.hideLoading();wx.stopPullDownRefresh();console.log(res.data)if(!res.data.status && res.data.status!=0){//后台没有数据返回执行return;}else if(res.data.status == 600){//后台状态返回执行return}else if(res.data.status == 12){return}success(res);},fail (res) {fail(res);}});
}

fn._post(‘xxx/xx/xx’,{data:data},res=>{},res=>{})

// 3.基础用户信息的获取

function baseLogin(fn){wx.login({success (res) {var code = res.code;wx.getUserInfo({success(res) {var encryptedData = res.encryptedData;var iv = res.iv;fn(encryptedData,code,iv)//这里获取到的数据可以去和后台换用户的资料 unionid/用户基本信息之类的},fail (res) {wx.reLaunch({url: '/pages/index/NearbyMerchants/nearShopList/wsq/wsq'})},})}})
}

// 4.获取自定义data-值

// 获取data-index 属性
function dataIndex(e){var a = e.currentTarget.dataset.index;var b = e.currentTarget.dataset.id;var d = e.currentTarget.dataset.type;var e = e.currentTarget.dataset.name;var c= [a,b,d,e];return c
}

let index = fn.dataIndex(e)[0]

// 5.图片上传的封装处理

function upImgAllSuccssAll(res,formData,success,url){var upImgBoxArr=res.tempFilePaths;var imgarr = [];for(var j in upImgBoxArr){if(res.tempFiles[j].size>2097152){http.showModal('有图片已超过2MB,您可以选择压缩图片以后重新上传',false,()=>{})continue;}var turnsImgUrl = wx.uploadFile({url: http+url,filePath: upImgBoxArr[j],name: 'fileData',//这里根据自己的实际情况改herder:{'content-type':'multipart/form-data;'},formData:formData,success: (resp) => {success(resp)},});}
}

fn.upImgAllSuccssAll(图片选择完成后的res,需要往后台传递的参数,成功后执行的方法,上传图片的路径)

// 6.检测左右滑动的封装方法

function moveFn(e,touchDotY,touchDot,time,fn,fn1,flag){let touchMove = e.touches[0].pageX;let touchMoveY = e.touches[0].pageY;// 检测是否点击以后上下滑动//清空时间数据if(Number(touchDotY)-Number(touchMoveY)>15 || Number(touchDotY)-Number(touchMoveY)<-15){time=0;return;}//向左滑动if(touchMove - touchDot <= -60 && !flag && time>=2) {fn()}//向右滑动if (touchMove - touchDot >= 60 && !flag && time>=2) {fn1()}
}

// 滑动一般都是三个事件的,下面是使用方法

// 初始点击touchstartFoot(e){var that = this;this.data.touchDot = e.touches[0].pageX;this.data.touchDotY = e.touches[0].pageY;this.data.interval = setInterval(function(){that.data.time+=1;},40);},// 结束点击touchendFoot(e){clearInterval(this.data.interval);this.data.time = 0;this.data.done = false;},// 移动删除delMove(e){var that = this;let touchDotY = this.data.touchDotY;let touchDot = this.data.touchDot;let time = this.data.time;let delstyle = that.data.delstyle;var index = http.dataIndex(e)[0];http.moveFn(e,touchDotY,touchDot,time,()=>{console.log('左滑动')},()=>{console.log('右滑动')},this.data.done)},

// 7.input内容获取

// 获取input框里面所有的数据
function inputArr(arr,e){var index = dataIndex(e)[0];var a = arr;var b = e.detail.value;a[index] = b;return a
}

fn.inputArr(存放input内容的数组,输入input的时候的e值{里面需包含当前输入的index用于定位})

// 8.支付的封装

// 支付的封装
function payFn(data,fn,fn2){var payT = data.jsApiParameters;wx.requestPayment({'timeStamp': payT.timeStamp,'nonceStr': payT.nonceStr,'package': payT.package,'signType': 'MD5','paySign': payT.paySign,'success'(res){fn(res)},'fail'(res){fn2(res)}})
}

// 9.数字隐私处理

// 数字隐私处理
const passStrat = num => {var newTel = []for(let i = 0;i<num.length;i++){let aa = num.substring(i,i+1);if(i>=3 && i<=7){aa = '*'}newTel.push(aa);}var newTelS = newTel.join("");return newTelS
}

// 10.倒计时

// 直接输出倒计时封装
const dayTime = bb => {var bb = bbvar day = parseInt(bb/86400);var time = parseInt((bb-(day*86400))/3600);var min =  parseInt((bb-(time*3600+day*86400))/60)var sinTime = time*3600+min*60+day*86400var sinTimeb;var sin1 =  parseInt((bb-sinTime))var thisTime = addEge(day)+"天"+addEge(time)+":"+addEge(min)+":"+addEge(sin1);bb<=0?thisTime = "0天00:00:00":thisTimereturn thisTime
}
const addEge = a => {return a<10?a = "0"+a:a = a
}
// 输出数组倒计时封装
const dayTimeArr = bb => {var bb = bbvar day = parseInt(bb/86400);var time = parseInt((bb-(day*86400))/3600);var min =  parseInt((bb-(time*3600+day*86400))/60)var sinTime = time*3600+min*60+day*86400var sinTimeb;var sin1 =  parseInt((bb-sinTime))var timeArr = [addEge(day),addEge(time),addEge(min),addEge(sin1)];if(bb<=0){timeArr = ["00","00","00","00"];}return timeArr
}

// 11.检测当前机型的长宽(部分安卓机匹配不准确,还是推荐使用节点匹配)

// 检测当前机型的长宽
const nowPhoneWH =()=>{var a = []var res = wx.getSystemInfoSync()a[0] = res.windowWidth;a[1] = res.windowHeight;return a
}

// 12.至少十八岁的事件选择输出

const formatTime18 = date => {const year = Number(date.getFullYear())-18const month = date.getMonth() + 1const day = date.getDate()return [year, month, day].map(formatNumber).join('-')
}

// tab切换

 clickType: function (e) {console.log(e)var that = this;var index = e.currentTarget.dataset.id;var idxImage = e.currentTarget.dataset.image;console.log(index);that.setData({curIndex: index,idxImage: idxImage,})that.proList(index);},inputVal: function (e) {console.log(e)var that = this;var value = e.detail.value;that.setData({val: value,})},/*** 生命周期函数--监听页面加载*/onLoad: function (options) {console.log(options)var that = this;that.setData({curIndex: options.id})that.getDrugType() },//  获取药品分类名称
getDrugType: function(){var that = this;wx.request({url: hostUrl + '/v1/Kquery/?table=drug_type',data: {},success: function (res) {console.log(res);var proList = res.data.data;that.setData({proList: proList,idxImage: proList[0].mainimg,})if (!that.data.curIndex){console.log('000')that.setData({curIndex: proList[0].id,})}console.log(that.data.curIndex)that.proList(that.data.curIndex);}})
},//  获取药品分类下的药品列表
proList: function(did){//console.log(did)var that = this;wx.request({url: hostUrl + '/v1/Kquery/',data: {'table': 'drug','where': { 'did': that.data.curIndex },},success: function (res) {console.log(res);var goodList = res.data.data;that.setData({goodList: goodList,})console.log(goodList)}})
}

//移除

deleteList(e) {
var that = this;
const index = e.currentTarget.dataset.index;
let carts = wx.getStorageSync(‘carts_list’) || [];
wx.showModal({
title: ‘提示’,
content: ‘是否要删除这个课程包’,
cancelColor: ‘#999999’,
confirmColor: ‘#2facff’,
success: function (res) {
if (res.confirm) {
console.log(‘用户点击确定’)
carts.splice(index, 1);
that.setData({
carts: carts
})

      //设置购物车商品信息缓存数据wx.setStorage({key: 'carts_list',data: carts,success: function (res) {console.log(res)},})} else if (res.cancel) {console.log('用户点击取消')}}
})//判断全选与非全选
var j = 0
for (var i = 0; i < carts.length; i++) {if (carts[i].selected) {j++;}if (j == carts.length) {this.setData({selectAllStatus: true,});} else {this.setData({selectAllStatus: false,});}
}
that.totalPrice()}

//单选
singleChose(e) {
var that = this;
const index = e.currentTarget.dataset.index;
let carts = that.data.carts;
const selected = carts[index].selected;
if (selected) {
carts[index].selected = false;
} else {
carts[index].selected = true;
}

//判断全选与非全选
var j = 0
for (var i = 0; i < carts.length; i++) {if (carts[i].selected) {j++;}if (j == carts.length) {this.setData({selectAllStatus: true,});} else {this.setData({selectAllStatus: false,});}
}
that.totalPrice() }

//全选
allChose() {
var that = this;
let selectAllStatus = that.data.selectAllStatus;
selectAllStatus = !selectAllStatus;
let carts = that.data.carts;

for (let i = 0; i < carts.length; i++) {carts[i].selected = selectAllStatus;
}
that.setData({selectAllStatus: selectAllStatus,carts: carts
});
console.log(that.data.carts)
that.totalPrice();

},

//计算价格
totalPrice() {
var that = this;
let carts = that.data.carts;
let total = 0;

for (let i = 0; i < carts.length; i++) {if (carts[i].selected) {total += Number(carts[i].price);}
}
that.setData({carts: carts,totalPrice: total.toFixed(2)
}); }

//结算
account: function (e) {
let carts = this.data.carts;
let payLists = [];
var j = 0

for (var i = 0; i < carts.length; i++) {if (carts[i].selected) {j++;payLists.push(carts[i])}
}
if (j == 0) {wx.showModal({title: '提示',content: '请选择需要结算的课程',showCancel: false,confirmColor:'#2facff',success: function (res) {if (res.confirm) {}}})
} else {//设置订单结算商品信息缓存数据wx.setStorage({key: 'pay_list',data: payLists,success: function (res) {wx.navigateTo({ url: '/pages/order-pay/order-pay' })},})console.log(payLists)
}}

onLoad: function(options) {
var that = this;
var carts = wx.getStorageSync(‘carts_list’) || [];
console.log(carts)
that.setData({
loadingHidden: true,
carts: carts
})
},
selectAllStatus: false, //底部全选

// 列表选中
checkboxChange: function (e) {
console.log(e.detail.value)
const index = e.currentTarget.dataset.index;
let recordLists = this.data.recordLists;
const checked = recordLists[index].checked;
recordLists[index].checked = !checked;
this.setData({
recordLists: recordLists
});

//判断全选与非全选
var j = 0
for (var i = 0; i < recordLists.length; i++) {if (recordLists[i].checked) {j++;}if (j == recordLists.length) {this.setData({selectAllStatus: true,});} else {this.setData({selectAllStatus: false,});}
}}

// 底部全选
checkAll: function (e) {
console.log(e.detail.value)
let selectAllStatus = this.data.selectAllStatus;
selectAllStatus = !selectAllStatus;
let recordLists = this.data.recordLists;

for (let i = 0; i < recordLists.length; i++) {recordLists[i].checked = selectAllStatus;
}
this.setData({selectAllStatus: selectAllStatus,recordLists: recordLists
});}

// 底部删除
delete: function () {
var that = this;
let recordLists = this.data.recordLists;
let selectAllStatus = this.data.selectAllStatus;

var j = 0
for (var i = 0; i < recordLists.length; i++) {if (recordLists[i].checked) {j++;}
}
if (j == 0) {wx.showToast({title: '请选择需要删除的课程',icon: 'none',duration: 1000})
} else {wx.showModal({title: '提示',content: '是否确认删除选中的课程',confirmColor: '#2facff',success: function (res) {if (res.confirm) {console.log('用户点击确定')for (var h = recordLists.length - 1; h >= 0; h--) {if (recordLists[h].checked) {recordLists.splice(h, 1);}}that.setData({recordLists: recordLists})console.log(recordLists)} else if (res.cancel) {console.log('用户点击取消')}}})
}}

data: {
autoplay: true,
interval: 2000,
duration: 500,
banner: [],
com_info: ‘’, //公司简介
adv_lists: [],
},

//获取公司简介数据
getInfo() {
var that = this;
wx.request({
url: hostUrl + ‘/v1/Kquery’,
data: {
‘table’: ‘about’,
},

  success: function (res) {var data = res.data;console.log(res.data)var arr1 = res.data.data;that.setData({arr1: arr1,com_info: arr1[5], com_text: arr1[7], com_advan: arr1[2], })console.log(that.data.com_info)console.log(that.data.com_advan)}
})}

//获取轮播图数据
carousel: function () {

var that = this;
wx.request({url: hostUrl + '/v1/Kquery/?table=window_banner',data: {},success: function (res) {console.log(res);var banner = res.data.data;var arr = [];  //筛选公司简介的轮播图for (var i = 0; i < banner.length; i++) {if (banner[i].w_id == 5) {arr.push(banner[i])}}console.log(arr)that.setData({banner: arr,})console.log(banner)}
})

}

//打开评论框
openEvaluate() {
//console.log(“打开评论框”)

var that = this;
that.setData({isEvaluate: true
})

},

//提交评论
sendEvaluate(e) {

var that = this;
console.log(e.detail.value.textarea)
var content = e.detail.value.textarea;
if (content) {that.closeEvaluate();
} else {wx.showToast({title: '评论不能为空',icon: 'none',duration: 2000})
}

}

//关闭评论框
closeEvaluate() {

var that = this;
that.setData({isEvaluate: false
})

},

//播放视频
playVideo() {

var that = this;
if(that.data.details.isFree){that.setData({isPlay: true,})
}else{wx.showModal({title: '提示',content: '是否使用体验卡',cancelColor: '#999999',confirmColor: '#2facff',success: function (res) {if (res.confirm) {console.log('用户点击确定')that.setData({isPlay: true,})} else if (res.cancel) {console.log('用户点击取消')}}})
}

},

//关闭视频播放
closeVideo() {

var that = this;
that.setData({isPlay: false,
})

},

//加入购物车
addCart() {

var that = this;
var arr = wx.getStorageSync('carts_list') || [];
var carts_goods = [{"pid": that.data.details.pid,"mainImg": that.data.details.mainImg,"name": that.data.details.name,"price": that.data.details.price,"useTime": '一年有效',"selected": false,
}, ];
if (arr.length > 0) {// 遍历购物车数组  for (var j in arr) {//购物车已存在该课程if (arr[j].pid == that.data.details.pid) {console.log("该课程已加入加入购物车了")wx.showToast({title: '该课程已加入购物车了',icon: 'none',duration: 2000})return true}}//遍历过程中未找到相同课程arr.push(carts_goods[0]);wx.setStorage({key: 'carts_list',data: arr,success: function(res) {console.log(res)wx.showToast({title: '加入购物车',icon: 'success',duration: 2000})},})
} else { //购物车为空时wx.setStorage({key: 'carts_list',data: carts_goods,success: function(res) {console.log(res)wx.showToast({title: '加入购物车',icon: 'success',duration: 2000})},})
}

},

//收藏
collect(){

var that = this;
var details = that.data.details;
details.isCollect = true;
that.setData({details:details
})

},

//直接购买
buy() {

var that = this;
var pay_goods = [{"pid": that.data.details.pid,"mainImg": that.data.details.mainImg,"name": that.data.details.name,"price": that.data.details.price,"useTime": '一年有效',"selected": false,
},];
//设置订单结算商品信息缓存数据
wx.setStorage({key: 'pay_list',data: pay_goods,success: function (res) {wx.navigateTo({ url: '/pages/order-pay/order-pay' })},
})

},

onLoad: function(options) {
console.log(options)

var that = this;
var nowPid = options.pid;
var details = that.data.details;
details.pid = nowPid;
details.name = nowPid + details.name;
if (nowPid == '003' || nowPid == '004' || nowPid == '009' || nowPid == '010'){details.isFree = true;
}
that.setData({loadingHidden: true,details:details,
})

},

// 修改头像
change: function () {

var that = this;
var avatarUrl = this.data.avatarUrl;
wx.chooseImage({count: 1, // 默认9sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有sourceType: ['camera', 'album'], // 可以指定来源是相册还是相机,默认二者都有success(res) {//  获取裁剪图片资源后,给data添加src属性及其值console.log(res.tempFilePaths)avatarUrl = res.tempFilePaths[0];that.setData({ loadingHidden: false })wx.uploadFile({url: basehostUrl + '/wx-upload/upphoto',filePath: res.tempFilePaths[0],name: 'upphoto',formData: {'user': uid},success: function (res) {var data = res.data;console.log(data);that.setData({ loadingHidden: true })if (data == 1) {wx.showModal({title: '提示',content: '头像更换成功',showCancel: false,success: function (res) { }})} else {wx.showModal({title: '提示',content: '头像更换失败',showCancel: false,success: function (res) { }})}}})that.setData({avatarUrl: avatarUrl})}
})

},

//发送短信验证码
sendCode() {
var that = this;
that.setData({
sendCode: true,
time: 60,
})

//倒计时
var timer1 = setInterval(function() {if (that.data.time > 0) {var time = that.data.time - 1that.setData({time: time,})} else {that.setData({sendCode: false,time: 60,})clearInterval(timer1);}
}, 1000)

},

//提交
submit(e) {

var that      = this;
var myreg     = /^[1][3,4,5,7,8,9][0-9]{9}$/;
var info      = e.detail.value;
var tel       = info.tel;
var code      = info.code;
var password  = info.password;
var password2 = info.password2;
if (!myreg.test(tel)) {wx.showToast({title: '请输入合法的手机号',icon: 'none',duration: 2000})
} else if (code.length != 6) {wx.showToast({title: '请输入六位数验证码',icon: 'none',duration: 2000})
} else if (password == '') {wx.showToast({title: '请输入密码',icon: 'none',duration: 2000})
} else if (password.length < 6) {wx.showToast({title: '请输入至少六位数密码',icon: 'none',duration: 2000})
} else if (password != password2) {wx.showToast({title: '两次密码不一样',icon: 'none',duration: 2000})
} else {wx.redirectTo({url: `../login/login`})
}

},

//选择身份
choseIdentity(e) {
console.log(‘picker发送选择改变,携带值为’, e.detail.value)
this.setData({
index: e.detail.value,
})
},

//表单验证
submit(e) {
console.log(e.detail.value)

var that     = this;
var myreg    = /^[1][3,4,5,7,8,9][0-9]{9}$/;
var info     = e.detail.value;
var tel      = info.tel;
var name     = info.name;
var sex      = info.sex;
var identity = info.identity;
var area     = info.area;
if(identity != 2){var school    = info.school;var classname = info.classname;
}
if (!myreg.test(tel)) {wx.showToast({title: '请输入合法的手机号',icon: 'none',duration: 2000})
} else if (name == '') {wx.showToast({title: '请输入姓名',icon: 'none',duration: 2000})
} else if (identity== '') {wx.showToast({title: '请选择身份',icon: 'none',duration: 2000})
} else if (identity != 2) {if(school == ''){wx.showToast({title: '请输入学校',icon: 'none',duration: 2000})}else if(classname == ''){wx.showToast({title: '请输入班级',icon: 'none',duration: 2000})}else{that.finalSubmit()}}  else {that.finalSubmit()
}

},

//获取元素自适应后的实际宽度
getEleWidth: function (w) {

var real = 0;
try {var res = wx.getSystemInfoSync().windowWidth;var scale = (750 / 2) / (w / 2);  //以宽度750px设计稿做宽度的自适应// console.log(scale);real = Math.floor(res / scale);return real;
} catch (e) {return false;// Do something when catch error
}

},

initEleWidth: function () {

var delBtnWidth = this.getEleWidth(this.data.delBtnWidth);
this.setData({delBtnWidth: delBtnWidth
});

},
toDetailsTap: function (e) {

wx.navigateTo({url: "/pages/goods-details/index?id=" + e.currentTarget.dataset.id
})

},
onLoad: function () {

var that = this;
if (app.globalData.iphone == true) { that.setData({ iphone: 'iphone' }) }
wx.request({url: app.globalData.urls + '/config/get-value',data: {key: 'shopcart'},success: function (res) {if (res.data.code == 0) {var kb = res.data.data.value;var kbarr = kb.split(',');that.setData({sales: res.data.data});var sales = [];for (var i = 0; i < kbarr.length; i++) {wx.request({url: app.globalData.urls + '/shop/goods/detail',data: {id: kbarr[i]},success: function (res) {if (res.data.code == 0) {sales.push(res.data.data.basicInfo);}that.setData({sales: sales});}})}}}
})that.initEleWidth();
that.onShow();

},
onShow: function () {

var that = this;
wx.getStorage({key: 'shopCarInfo',success: function (res) {if (res.data) {that.data.shopCarInfo = res.dataif (res.data.shopNum > 0) {wx.setTabBarBadge({index: 2,text: '' + res.data.shopNum + ''})} else {wx.removeTabBarBadge({index: 2,})}} else {wx.removeTabBarBadge({index: 2,})}}
})
wx.request({url: app.globalData.urls + '/order/statistics',data: { token: app.globalData.token },success: function (res) {if (res.data.code == 0) {if (res.data.data.count_id_no_pay > 0) {wx.setTabBarBadge({index: 3,text: '' + res.data.data.count_id_no_pay + ''})} else {wx.removeTabBarBadge({index: 3,})}}}
})
var shopList = [];
// 获取购物车数据
var shopCarInfoMem = wx.getStorageSync('shopCarInfo');
if (shopCarInfoMem && shopCarInfoMem.shopList) {shopList = shopCarInfoMem.shopList
}
that.data.goodsList.list = shopList;
that.setGoodsList(that.getSaveHide(), that.totalPrice(), that.allSelect(), that.noSelect(), shopList);

},
toIndexPage: function () {

wx.switchTab({url: "/pages/index/index"
});

},

touchS: function (e) {

if (e.touches.length == 1) {this.setData({startX: e.touches[0].clientX});
}

},
touchM: function (e) {

var index = e.currentTarget.dataset.index;
if (e.touches.length == 1) {var moveX = e.touches[0].clientX;var disX = this.data.startX - moveX;var delBtnWidth = this.data.delBtnWidth;var left = "";if (disX == 0 || disX < 0) {//如果移动距离小于等于0,container位置不变left = "margin-left:0px";} else if (disX > 0) {//移动距离大于0,container left值等于手指移动距离left = "margin-left:-" + disX + "px";if (disX >= delBtnWidth) {left = "left:-" + delBtnWidth + "px";}}var list = this.data.goodsList.list;if (index != "" && index != null) {list[parseInt(index)].left = left;this.setGoodsList(this.getSaveHide(), this.totalPrice(), this.allSelect(), this.noSelect(), list);}
}

},

touchE: function (e) {

var index = e.currentTarget.dataset.index;
if (e.changedTouches.length == 1) {var endX = e.changedTouches[0].clientX;var disX = this.data.startX - endX;var delBtnWidth = this.data.delBtnWidth;//如果距离小于删除按钮的1/2,不显示删除按钮var left = disX > delBtnWidth / 2 ? "margin-left:-" + delBtnWidth + "px" : "margin-left:0px";var list = this.data.goodsList.list;if (index !== "" && index != null) {list[parseInt(index)].left = left;this.setGoodsList(this.getSaveHide(), this.totalPrice(), this.allSelect(), this.noSelect(), list);}
}

},
delItem: function (e) {

var index = e.currentTarget.dataset.index;
var list = this.data.goodsList.list;
list.splice(index, 1);
this.setGoodsList(this.getSaveHide(), this.totalPrice(), this.allSelect(), this.noSelect(), list);

},
selectTap: function (e) {

var index = e.currentTarget.dataset.index;
var list = this.data.goodsList.list;
if (index !== "" && index != null) {list[parseInt(index)].active = !list[parseInt(index)].active;this.setGoodsList(this.getSaveHide(), this.totalPrice(), this.allSelect(), this.noSelect(), list);
}

},
totalPrice: function () {

var list = this.data.goodsList.list;
var total = 0;
for (var i = 0; i < list.length; i++) {var curItem = list[i];if (curItem.active) {total += parseFloat(curItem.price) * curItem.number;}
}
total = parseFloat(total.toFixed(2));//js浮点计算bug,取两位小数精度
return total;

},
allSelect: function () {

var list = this.data.goodsList.list;
var allSelect = false;
for (var i = 0; i < list.length; i++) {var curItem = list[i];if (curItem.active) {allSelect = true;} else {allSelect = false;break;}
}
return allSelect;

},
noSelect: function () {

var list = this.data.goodsList.list;
var noSelect = 0;
for (var i = 0; i < list.length; i++) {var curItem = list[i];if (!curItem.active) {noSelect++;}
}
if (noSelect == list.length) {return true;
} else {return false;
}

},
setGoodsList: function (saveHidden, total, allSelect, noSelect, list) {

this.setData({goodsList: {saveHidden: saveHidden,totalPrice: total,allSelect: allSelect,noSelect: noSelect,list: list}
});
var shopCarInfo = {};
var tempNumber = 0;
shopCarInfo.shopList = list;
for (var i = 0; i < list.length; i++) {tempNumber = tempNumber + list[i].number
}
shopCarInfo.shopNum = tempNumber;
wx.setStorage({key: "shopCarInfo",data: shopCarInfo
})

},
bindAllSelect: function () {

var currentAllSelect = this.data.goodsList.allSelect;
var list = this.data.goodsList.list;
if (currentAllSelect) {for (var i = 0; i < list.length; i++) {var curItem = list[i];curItem.active = false;}
} else {for (var i = 0; i < list.length; i++) {var curItem = list[i];curItem.active = true;}
}this.setGoodsList(this.getSaveHide(), this.totalPrice(), !currentAllSelect, this.noSelect(), list);

},
jiaBtnTap: function (e) {

var index = e.currentTarget.dataset.index;
var list = this.data.goodsList.list;
if (index !== "" && index != null) {if (list[parseInt(index)].number < 10) {list[parseInt(index)].number++;this.setGoodsList(this.getSaveHide(), this.totalPrice(), this.allSelect(), this.noSelect(), list);}
}

},
jianBtnTap: function (e) {

var index = e.currentTarget.dataset.index;
var list = this.data.goodsList.list;
if (index !== "" && index != null) {if (list[parseInt(index)].number > 1) {list[parseInt(index)].number--;this.setGoodsList(this.getSaveHide(), this.totalPrice(), this.allSelect(), this.noSelect(), list);}
}

},
editTap: function () {

var list = this.data.goodsList.list;
for (var i = 0; i < list.length; i++) {var curItem = list[i];curItem.active = false;
}
this.setGoodsList(!this.getSaveHide(), this.totalPrice(), this.allSelect(), this.noSelect(), list);

},
saveTap: function () {

var list = this.data.goodsList.list;
for (var i = 0; i < list.length; i++) {var curItem = list[i];curItem.active = true;
}
this.setGoodsList(!this.getSaveHide(), this.totalPrice(), this.allSelect(), this.noSelect(), list);

},
getSaveHide: function () {

var saveHidden = this.data.goodsList.saveHidden;
return saveHidden;

},
deleteSelected: function () {

var list = this.data.goodsList.list;
/*for(let i = 0 ; i < list.length ; i++){let curItem = list[i];if(curItem.active){list.splice(i,1);}}*/
// above codes that remove elements in a for statement may change the length of list dynamically
list = list.filter(function (curGoods) {return !curGoods.active;
});
this.setGoodsList(this.getSaveHide(), this.totalPrice(), this.allSelect(), this.noSelect(), list);

},
toPayOrder: function () {

wx.showLoading();
var that = this;
if (this.data.goodsList.noSelect) {wx.hideLoading();return;
}
// 重新计算价格,判断库存
var shopList = [];
var shopCarInfoMem = wx.getStorageSync('shopCarInfo');
if (shopCarInfoMem && shopCarInfoMem.shopList) {// shopList = shopCarInfoMem.shopListshopList = shopCarInfoMem.shopList.filter(entity => {return entity.active;});
}
if (shopList.length == 0) {wx.hideLoading();return;
}
var isFail = false;
var doneNumber = 0;
var needDoneNUmber = shopList.length;
for (let i = 0; i < shopList.length; i++) {if (isFail) {wx.hideLoading();return;}let carShopBean = shopList[i];// 获取价格和库存if (!carShopBean.propertyChildIds || carShopBean.propertyChildIds == "") {wx.request({url: app.globalData.urls + '/shop/goods/detail',data: {id: carShopBean.goodsId},success: function (res) {doneNumber++;if (res.data.data.properties) {wx.showModal({title: '提示',content: res.data.data.basicInfo.name + ' 商品已失效,请重新购买',showCancel: false})isFail = true;wx.hideLoading();return;}if (res.data.data.basicInfo.stores < carShopBean.number) {wx.showModal({title: '提示',content: res.data.data.basicInfo.name + ' 库存不足,请重新购买',showCancel: false})isFail = true;wx.hideLoading();return;}if (res.data.data.basicInfo.minPrice != carShopBean.price) {wx.showModal({title: '提示',content: res.data.data.basicInfo.name + ' 价格有调整,请重新购买',showCancel: false})isFail = true;wx.hideLoading();return;}if (needDoneNUmber == doneNumber) {that.navigateToPayOrder();}}})} else {wx.request({url: app.globalData.urls + '/shop/goods/price',data: {goodsId: carShopBean.goodsId,propertyChildIds: carShopBean.propertyChildIds},success: function (res) {doneNumber++;if (res.data.data.stores < carShopBean.number) {wx.showModal({title: '提示',content: carShopBean.name + ' 库存不足,请重新购买',showCancel: false})isFail = true;wx.hideLoading();return;}if (res.data.data.price != carShopBean.price) {wx.showModal({title: '提示',content: carShopBean.name + ' 价格有调整,请重新购买',showCancel: false})isFail = true;wx.hideLoading();return;}if (needDoneNUmber == doneNumber) {that.navigateToPayOrder();}}})}}

},
navigateToPayOrder: function () {

wx.hideLoading();
wx.navigateTo({url: "/pages/to-pay-order/index"
})

}

})

statusTap: function (e) {

var obj = e;
var count = 0;
for (var key in obj) {count++;
}
if (count == 0) {var curType = 0;
} else {var curType = e.currentTarget.dataset.index;
}
this.data.currentType = curType
this.setData({currentType: curType
});
this.onShow();

},
orderDetail: function (e) {

var orderId = e.currentTarget.dataset.id;
wx.navigateTo({url: "/pages/order-details/index?id=" + orderId
})

},
cancelOrderTap: function (e) {

var that = this;
var orderId = e.currentTarget.dataset.id;
wx.showModal({title: '确定要取消该订单吗?',content: '',success: function (res) {if (res.confirm) {wx.showLoading();wx.request({url: app.siteInfo.url + app.siteInfo.subDomain + '/order/close',data: {token: app.globalData.token,orderId: orderId},success: (res) => {wx.hideLoading();if (res.data.code == 0) {that.onShow();}}})}}
})

},
toPayTap: function (e) {

var that = this;
var orderId = e.currentTarget.dataset.id;
var money = e.currentTarget.dataset.money;
wx.request({url: app.siteInfo.url + app.siteInfo.subDomain + '/user/amount',data: {token: app.globalData.token},success: function (res) {if (res.data.code == 0) {// res.data.data.balancemoney = money - res.data.data.balance;if (money <= 0) {// 直接使用余额支付wx.request({url: app.siteInfo.url + app.siteInfo.subDomain + '/order/pay',method: 'POST',header: {'content-type': 'application/x-www-form-urlencoded'},data: {token: app.globalData.token,orderId: orderId},success: function (res2) {wx.reLaunch({url: "/pages/my/index"});}})} else {wxpay.wxpay(app, money, orderId, "/pages/my/index");}} else {wx.showModal({title: '错误',content: '无法获取用户资金信息',showCancel: false})}}
})

},
onLoad: function (e) {

var that = this;
if (e.share) {that.setData({ share: e.share });
}
if (app.globalData.iphone == true) { that.setData({ iphone: 'iphone' }) }
var currentType = e.currentType;
this.data.currentType = currentType;
if (currentType) {that.setData({currentType: currentType});
}
that.statusTap(e);

},

getOrderStatistics: function () {

var that = this;
wx.request({url: app.siteInfo.url + app.siteInfo.subDomain + '/order/statistics',data: { token: app.globalData.token },success: (res) => {wx.hideLoading();if (res.data.code == 0) {var tabClass = that.data.tabClass;if (res.data.data.count_id_no_pay > 0) {tabClass[0] = "red-dot"} else {tabClass[0] = ""}if (res.data.data.count_id_no_transfer > 0) {tabClass[1] = "red-dot"} else {tabClass[1] = ""}if (res.data.data.count_id_no_confirm > 0) {tabClass[2] = "red-dot"} else {tabClass[2] = ""}if (res.data.data.count_id_no_reputation > 0) {tabClass[3] = "red-dot"} else {tabClass[3] = ""}if (res.data.data.count_id_success > 0) {//tabClass[4] = "red-dot"} else {//tabClass[4] = ""}that.setData({tabClass: tabClass,});}}
})

},
onShow: function (e) {

// 获取订单列表
wx.showLoading();
var that = this;
var postData = {token: app.globalData.token
};
postData.status = that.data.currentType;
this.getOrderStatistics();
wx.request({url: app.siteInfo.url + app.siteInfo.subDomain + '/order/list',data: postData,success: (res) => {wx.hideLoading();if (res.data.code == 0) {that.setData({orderList: res.data.data.orderList,logisticsMap: res.data.data.logisticsMap,goodsMap: res.data.data.goodsMap});} else {this.setData({orderList: null,logisticsMap: {},goodsMap: {}});}}
})

//事件处理函数
swiperchange: function(e) {
//console.log(e.detail.current)

   this.setData({  swiperCurrent: e.detail.current
})

},
onShow: function () {

var that = this;
setTimeout(function () {if (app.globalData.usinfo == 0) {that.setData({wxlogin: false})wx.hideTabBar();}
}, 1000)

},
onLoad: function (e) {

if (e.inviter_id) {wx.setStorage({key: 'inviter_id_' + e.id,data: e.inviter_id})
}
var that = this;
if (e.share) { that.setData({ share: e.share }); }
if (app.globalData.iphone == true) { that.setData({ iphone: 'iphone' }) }
//首页顶部Logo
wx.request({url: app.globalData.urls + '/banner/list',data: {type: 'toplogo'},success: function (res) {if (res.data.code == 0) {that.setData({toplogo: res.data.data[0].picUrl,topname: wx.getStorageSync('mallName')});}}
})
// 获取购物车数据
wx.getStorage({key: 'shopCarInfo',success: function(res) {that.setData({shopCarInfo:res.data,shopNum:res.data.shopNum});}
})
//获取砍价信息
wx.request({url: app.globalData.urls + '/shop/goods/kanjia/list',success: function (res) {if (res.data.code == 0) {for (var i = 0; i < res.data.data.result.length; i++) {if (res.data.data.result[i].goodsId == e.id){that.setData({kanjiagoods: res.data.data.result[i]});}}}}
})
//获取商品详情
wx.request({url: app.globalData.urls +'/shop/goods/detail',data: {id: e.id},success: function(res) {var selectSizeTemp = "";if (res.data.data.properties) {for(var i=0;i<res.data.data.properties.length;i++){selectSizeTemp = selectSizeTemp + " " + res.data.data.properties[i].name;}that.setData({hasMoreSelect:true,selectSize:that.data.selectSize + selectSizeTemp,selectSizePrice:res.data.data.basicInfo.minPrice,});}that.data.goodsDetail = res.data.data;if (res.data.data.basicInfo.videoId) {that.getVideoSrc(res.data.data.basicInfo.videoId);}that.setData({goodsDetail:res.data.data,selectSizePrice:res.data.data.basicInfo.minPrice,buyNumMax:res.data.data.basicInfo.stores,buyNumber:(res.data.data.basicInfo.stores>0) ? 1: 0});WxParse.wxParse('article', 'html', res.data.data.content, that, 5);//this.getfav(res.data.data.goodsDetail.basicInfo.name)}
})
this.reputation(e.id);
this.getKanjiaInfo(e.id);

},
goShopCar: function () {

wx.reLaunch({url: "/pages/shop-cart/index"
});

},
toAddShopCar: function () {

this.setData({shopType: "addShopCar"
})
this.bindGuiGeTap();

},
tobuy: function () {

this.setData({shopType: "tobuy"
});
this.bindGuiGeTap();
/*    if (this.data.goodsDetail.properties && !this.data.canSubmit) {this.bindGuiGeTap();return;}if(this.data.buyNumber < 1){wx.showModal({title: '提示',content: '暂时缺货哦~',showCancel:false})return;}this.addShopCar();this.goShopCar();*/

},

  • 加入购物车
    */
    addShopCar:function(){
    if (this.data.goodsDetail.properties && !this.data.canSubmit) {
    if (!this.data.canSubmit){
    wx.showModal({
    title: ‘提示’,
    content: ‘请选择商品规格!’,
    showCancel: false
    })
    }
    this.bindGuiGeTap();
    return;
    }
    if(this.data.buyNumber < 1){
    wx.showModal({
    title: ‘提示’,
    content: ‘购买数量不能为0!’,
    showCancel:false
    })
    return;
    }
    //组建购物车
    var shopCarInfo = this.bulidShopCarInfo();

    this.setData({
    shopCarInfo:shopCarInfo,
    shopNum:shopCarInfo.shopNum
    });

    // 写入本地存储
    wx.setStorage({
    key:“shopCarInfo”,
    data:shopCarInfo
    })
    this.closePopupTap();
    wx.showToast({
    title: ‘加入购物车成功’,
    icon: ‘success’,
    duration: 2000
    })
    //console.log(shopCarInfo);

    //shopCarInfo = {shopNum:12,shopList:[]}
    },
    /**

    • 立即购买
      */
      buyNow:function(){
      if (this.data.goodsDetail.properties && !this.data.canSubmit) {
      if (!this.data.canSubmit) {
      wx.showModal({
      title: ‘提示’,
      content: ‘请选择商品规格!’,
      showCancel: false
      })
      }
      this.bindGuiGeTap();
      wx.showModal({
      title: ‘提示’,
      content: ‘请先选择规格尺寸哦~’,
      showCancel:false
      })
      return;
      }
      if(this.data.buyNumber < 1){
      wx.showModal({
      title: ‘提示’,
      content: ‘购买数量不能为0!’,
      showCancel:false
      })
      return;
      }
      //组建立即购买信息
      var buyNowInfo = this.buliduBuyNowInfo();
      // 写入本地存储
      wx.setStorage({
      key:“buyNowInfo”,
      data:buyNowInfo
      })
      this.closePopupTap();

    wx.navigateTo({
    url: “/pages/to-pay-order/index?orderType=buyNow”
    })
    },
    /**

  • 组建购物车信息
    */
    bulidShopCarInfo: function () {
    // 加入购物车

var shopCarMap = {};
shopCarMap.goodsId = this.data.goodsDetail.basicInfo.id;
shopCarMap.pic = this.data.goodsDetail.basicInfo.pic;
shopCarMap.name = this.data.goodsDetail.basicInfo.name;
// shopCarMap.label=this.data.goodsDetail.basicInfo.id; 规格尺寸
shopCarMap.propertyChildIds = this.data.propertyChildIds;
shopCarMap.label = this.data.propertyChildNames;
shopCarMap.price = this.data.selectSizePrice;
shopCarMap.left = "";
shopCarMap.active = true;
shopCarMap.number = this.data.buyNumber;
shopCarMap.logisticsType = this.data.goodsDetail.basicInfo.logisticsId;
shopCarMap.logistics = this.data.goodsDetail.logistics;
shopCarMap.weight = this.data.goodsDetail.basicInfo.weight;var shopCarInfo = this.data.shopCarInfo;
if (!shopCarInfo.shopNum) {shopCarInfo.shopNum = 0;
}
if (!shopCarInfo.shopList) {shopCarInfo.shopList = [];
}
var hasSameGoodsIndex = -1;
for (var i = 0; i < shopCarInfo.shopList.length; i++) {var tmpShopCarMap = shopCarInfo.shopList[i];if (tmpShopCarMap.goodsId == shopCarMap.goodsId && tmpShopCarMap.propertyChildIds == shopCarMap.propertyChildIds) {hasSameGoodsIndex = i;shopCarMap.number = shopCarMap.number + tmpShopCarMap.number;break;}
}shopCarInfo.shopNum = shopCarInfo.shopNum + this.data.buyNumber;if (hasSameGoodsIndex > -1) {shopCarInfo.shopList.splice(hasSameGoodsIndex, 1, shopCarMap);
} else {shopCarInfo.shopList.push(shopCarMap);
}
return shopCarInfo;

},
/**

  • 组建立即购买信息
    */
    buliduBuyNowInfo: function () {
var shopCarMap = {};
shopCarMap.goodsId = this.data.goodsDetail.basicInfo.id;
shopCarMap.pic = this.data.goodsDetail.basicInfo.pic;
shopCarMap.name = this.data.goodsDetail.basicInfo.name;
// shopCarMap.label=this.data.goodsDetail.basicInfo.id; 规格尺寸
shopCarMap.propertyChildIds = this.data.propertyChildIds;
shopCarMap.label = this.data.propertyChildNames;
shopCarMap.price = this.data.selectSizePrice;
shopCarMap.left = "";
shopCarMap.active = true;
shopCarMap.number = this.data.buyNumber;
shopCarMap.logisticsType = this.data.goodsDetail.basicInfo.logisticsId;
shopCarMap.logistics = this.data.goodsDetail.logistics;
shopCarMap.weight = this.data.goodsDetail.basicInfo.weight;var buyNowInfo = {};
if (!buyNowInfo.shopNum) {buyNowInfo.shopNum = 0;
}
if (!buyNowInfo.shopList) {buyNowInfo.shopList = [];
}
/*    var hasSameGoodsIndex = -1;for (var i = 0; i < toBuyInfo.shopList.length; i++) {var tmpShopCarMap = toBuyInfo.shopList[i];if (tmpShopCarMap.goodsId == shopCarMap.goodsId && tmpShopCarMap.propertyChildIds == shopCarMap.propertyChildIds) {hasSameGoodsIndex = i;shopCarMap.number = shopCarMap.number + tmpShopCarMap.number;break;}}toBuyInfo.shopNum = toBuyInfo.shopNum + this.data.buyNumber;if (hasSameGoodsIndex > -1) {toBuyInfo.shopList.splice(hasSameGoodsIndex, 1, shopCarMap);} else {toBuyInfo.shopList.push(shopCarMap);}*/buyNowInfo.shopList.push(shopCarMap);
return buyNowInfo;

},
onShareAppMessage: function () {
return {

  title: this.data.goodsDetail.basicInfo.name,path: '/pages/kanjia-goods/index?id=' + this.data.goodsDetail.basicInfo.id + '&share=1',success: function (res) {// 转发成功},fail: function (res) {// 转发失败}
}

},
reputation: function (goodsId) {

var that = this;
wx.request({url: app.globalData.urls + '/shop/goods/reputation',data: {goodsId: goodsId},success: function (res) {if (res.data.code == 0) {//console.log(res.data.data);that.setData({reputation: res.data.data});}}
})

},
getVideoSrc: function (videoId) {

var that = this;
wx.request({url: app.globalData.urls + '/media/video/detail',data: {videoId: videoId},success: function (res) {if (res.data.code == 0) {that.setData({videoMp4Src: res.data.data.fdMp4});}}
})

},
gohome: function () {

wx.switchTab({url: "/pages/index/index"
})

},
getKanjiaInfo: function (gid) {

var that = this;
if (!app.globalData.kanjiaList || app.globalData.kanjiaList.length == 0) {that.setData({curGoodsKanjia: undefined});return;
}
let curGoodsKanjia = app.globalData.kanjiaList.find(ele => {return ele.goodsId == gid
});
if (curGoodsKanjia) {that.setData({curGoodsKanjia: curGoodsKanjia});
} else {that.setData({curGoodsKanjia: undefined});
}

},
goKanjia: function () {

var that = this;
if (!that.data.curGoodsKanjia) {return;
}
wx.request({url: app.globalData.urls + '/shop/goods/kanjia/join',data: {kjid: that.data.curGoodsKanjia.id,token: app.globalData.token},success: function (res) {if (res.data.code == 0) {wx.navigateTo({url: "/pages/kanjia/index?kjId=" + res.data.data.kjId + "&joiner=" + res.data.data.uid + "&id=" + res.data.data.goodsId})} else {wx.showModal({title: '错误',content: res.data.msg,showCancel: false})}}
})

},
tabFun: function (e) {

var _datasetId = e.target.dataset.id;
var _obj = {};
_obj.curHdIndex = _datasetId;
_obj.curBdIndex = _datasetId;
this.setData({tabArr: _obj
});

},
userlogin: function (e) {

var that = this;
var iv = e.detail.iv;
var encryptedData = e.detail.encryptedData;
wx.login({success: function (wxs) {wx.request({url: app.globalData.urls + '/user/wxapp/register/complex',data: {code: wxs.code,encryptedData: encryptedData,iv: iv},success: function (res) {if (res.data.code != 0) {wx.showModal({title: '温馨提示',content: '需要您的授权,才能正常使用哦~',showCancel: false,success: function (res) { }})} else {that.setData({ wxlogin: true })app.login();wx.showToast({title: '授权成功',duration: 2000})app.globalData.usinfo = 1;}}})}
})

},
})

// 获取首页轮播图
carousel: function () {

var that = this;
wx.request({url: hostUrl + '/v1/Kquery/?table=window_banner',data: { 'where': { 'w_id': 12 } },success: function (res) {//console.log(res);var banner = res.data.data;that.setData({banner: banner,})}
})

},

小程序---365笔记第5天---常用方法相关推荐

  1. 小程序---365笔记第11天---微信小程序登录接入

    接入前的准备工作参考文档:微信小程序登录接入 (必做) 登录逻辑:小程序登录逻辑梳理 使用插件参考文档:https://developers.weixin.qq.com/miniprogram/dev ...

  2. 微信小程序---365笔记第48天---上一题,下一题

    1.上一题,下一题; 2.点击所在行,也可选中radio或者check-box data:{dataList:[],n:0,num:1},onLoad: function(options) {this ...

  3. 微信小程序--365笔记第32天---数组排序,距离最近

    1.实现的是数组的排序,以距离排序,将距离最近的显示在上面; 2.可以应用到其他数组排序,都是可以用的: wxml: <view><view>原数组</view>& ...

  4. 微信小程序开发-笔记

    一.开发文件结构 1.根目录下有三个文件:app.js,app.json和app.wxss.一个小程序项目必须有的三个描述App的文件.这三个文件是应用程序级别的文件.这3个文件的意义: 表1.1  ...

  5. 一个C#程序员学习微信小程序的笔记

    一个C#程序员学习微信小程序的笔记 客户端打开小程序的时候,就将代码包下载到本地进行解析,首先找到了根目录的 app.json ,知道了小程序的所有页面. 在这个Index页面就是我们的首页,客户端在 ...

  6. 小程序 pagescrollto_微信小程序学习笔记(三)-- 首页及详情页开发

    一.常用组件 在上一个章节中讲解了封装请求数据的模块,在此处请求轮播图的数据 1.首页轮播图数据的请求以及渲染 1.1 轮播图数据的请求 pages/home/home.js import 2 使用组 ...

  7. 云开发(微信-小程序)笔记(十四)---- 收藏,点赞(上)

    云开发(微信-小程序)笔记(十三)---- 注册登陆 1.简介 点赞,收藏等都是程序的最简单的功能,在现实的应用中也很常见.这里我就来给大家介绍一下小程序的这个功能. 图标下载地址 先去网站上http ...

  8. 微信小程序开发笔记,你收藏了吗?

    ** 微信小程序开发笔记,你收藏了吗? ** 最近在开发微信小程序,把自己在项目中经常遇到的知识点记录下来,以便下次开发的时候查看. 开发小程序开发工具推荐vscode写代码,微信开发工具用于查看效果 ...

  9. 微信小程序开发笔记 进阶篇④——getPhoneNumber 获取用户手机号码(小程序云)

    文章目录 一.前言 二.前端代码wxml 三.前端代码js 四.云函数 五.程序流程 一.前言 微信小程序开发笔记--导读 大部分微信小程序开发者都会有这样的需求:获取小程序用户的手机号码. 但是,因 ...

最新文章

  1. pku acm 2248 addtion chians 解题报告
  2. STM32开发 -- 系统软复位
  3. php根据位置获取经纬度(百度地图)
  4. SVN之如何解决从一个svn路径下载项目快速提交到其它svn路径
  5. 读取Excel任务列表并显示在Outlook日历上
  6. AOP 面向切面编程、拦截器
  7. 创业反思三:只喜欢我干活,拒不听建议,出了问题还找我
  8. JWT、OAuth 2.0、session 用户授权实战
  9. 微信小程序 生成跳转体验版url,可直接跳转到体验版小程序(可通过此方法测试模板消息)
  10. 复杂性研究面临的难题
  11. deamon(守护进程)的实现
  12. 数字孪生技术下的智慧医院再添新功能,室内地图导航让你“医”路畅通
  13. axios拦截,api统一管理
  14. 最快的扫雷记录,初级只需要0.49秒,一眨眼就结束的操作!
  15. PowerBi - TopN+帕累托
  16. Delphi下spcomm的安装,win7系统,delphi7和delphi2010.
  17. php startwith endwith
  18. 笨nanana教你Swing开发入门(亲自码字,通俗易懂,正在完善得更好)
  19. 刚入行软件测试,去大公司好还是小公司好?
  20. 一份标准的STM32工程模板都需要哪些文件?(B站江科大自化协)

热门文章

  1. 大数据计算框架及引擎介绍
  2. java jvm垃圾回收算法_深入理解JVM虚拟机2:JVM垃圾回收基本原理和算法
  3. OO,OO以后,及其极限
  4. 制作html版圣诞礼物,10个圣诞礼物制作灵感 创意圣诞卡片手工制作
  5. IT业的《大腕》经典台词
  6. 深度解析SQL和NoSQL数据库,掌握主流数据库【两万字解析】
  7. 一个承载无数悲痛的网站
  8. 支持图灵架构和安培架构的TensorFlow Python库
  9. 关于pytorch官网教程中的What is torch.nn really?(三)
  10. MSP430 5xx/6xx Watchdog看门狗编程实例