锦水居民端小程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

437 lines
12 KiB

// subpages/heart/pages/groupBuyPublish/groupBuyPublish.js
import { $wuxActionSheet } from "../../../../dist/index"
import { getTimestamp } from '../../../../utils/common'
const api = require("../../utils/api")
const config = require("../../../../utils/config")
Page({
/**
* 页面的初始数据
*/
data: {
dialogVisible: false, //提示框
showPicker: false, //是否显示底部时间选择器插件
dataForm: {
id: '', //主键 更新时携带
groupBuyTitle: '', //标题
groupBuyContent: '', //内容
groupBuyEndTime: '', //截止时间
groupBuyMobile: '', //手机
groupBuyPriceNumber: [
{
groupBuyNumber: '',
groupBuyPrice: ''
}
], //groupBuyNumber, groupBuyPrice 团购价格人数(最多五条)
groupBuyImg: [], //团购图片(最多三张)
},
violationsCount: 0, //内容审核计数
isConReview: false, //内容审核标志
lock: false, //锁定发布按钮状态,防止连击
uploadImageList: [],
imageId: 0,
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
this.setData({
'dataForm.id': options.id || ''
})
if (options.id) {
this.initDataForm()
}
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
// onShareAppMessage: function () {
// }
onInputGroupBuyTitle (e) {
this.setData({
'dataForm.groupBuyTitle': e.detail.value
})
},
onInputGroupBuyNumber (e) {
let index = e.currentTarget.dataset.index
this.data.dataForm.groupBuyPriceNumber[index].groupBuyNumber = parseInt(e.detail.value)
this.setData({
'dataForm.groupBuyPriceNumber': this.data.dataForm.groupBuyPriceNumber
})
},
onInputGroupBuyPrice (e) {
let index = e.currentTarget.dataset.index
if (/^(\d?)+(\.\d{0,2})?$/.test(e.detail.value)) {
this.data.dataForm.groupBuyPriceNumber[index].groupBuyPrice = e.detail.value;
} else {
this.data.dataForm.groupBuyPriceNumber[index].groupBuyPrice = e.detail.value.substring(0, e.detail.value.length - 1);
}
this.setData({
'dataForm.groupBuyPriceNumber': this.data.dataForm.groupBuyPriceNumber
})
},
onInputGroupBuyMobile (e) {
this.setData({
'dataForm.groupBuyMobile': e.detail.value
})
},
onInputContent (e) {
this.setData({
'dataForm.groupBuyContent': e.detail.value
})
},
addPriceItem () {
this.data.dataForm.groupBuyPriceNumber.push({groupBuyNumber:'',groupBuyPrice:''})
this.setData({
'dataForm.groupBuyPriceNumber': this.data.dataForm.groupBuyPriceNumber
})
},
minusPriceItem (e) {
let index = e.currentTarget.dataset.index
this.data.dataForm.groupBuyPriceNumber.splice(index, 1)
this.setData({
'dataForm.groupBuyPriceNumber': this.data.dataForm.groupBuyPriceNumber
})
},
pickerCancel () {
console.log('取消日期选择')
this.setData({
showPicker: false,
'dataForm.groupBuyEndTime': ''
})
},
pickerConfirm (e) {
console.log('选择日期', e.detail.time)
if (e.detail.time < getTimestamp()) {
this.showToast("截止时间应该大于当前时间")
} else {
this.setData({
showPicker: false,
'dataForm.groupBuyEndTime': e.detail.time
})
}
},
//日期选择插件显示入口
selectTime (e) {
this.data.showPicker = !this.data.showPicker
this.setData({
showPicker: this.data.showPicker,
'dataForm.groupBuyEndTime': this.data.dataForm.groupBuyEndTime || getTimestamp()
})
},
//发布
submitApply () {
if (this.data.lock) {
return false
}
if (!this.data.dataForm.groupBuyTitle) {
this.showToast("请填标题")
return false
}
if (this.data.dataForm.groupBuyTitle.length>50) {
this.showToast("标题限制在50字以内")
return false
}
if (!this.data.dataForm.groupBuyEndTime) {
this.showToast("请填写截止时间")
return false
}
if (!this.data.dataForm.groupBuyContent) {
this.showToast("请填写团购内容")
return false
}
if (this.data.dataForm.groupBuyContent.length>500) {
this.showToast("团购内容限制在500字以内")
return false
}
if (!this.data.dataForm.groupBuyPriceNumber[0].groupBuyNumber || !this.data.dataForm.groupBuyPriceNumber[0].groupBuyPrice) {
this.showToast("至少填写一条价格说明")
return false
}
if (!this.data.dataForm.groupBuyMobile) {
this.showToast("请填写联系电话")
return false
}
if (this.data.dataForm.groupBuyMobile.length>20) {
this.showToast("联系电话限制在20字以内")
return false
}
wx.showLoading({
title: "发布中",
})
const imagesList = []
if (this.data.uploadImageList.length > 0) {
const isUploadDown = this.data.uploadImageList.some(item => !item.uploaded)
if (isUploadDown) {
wx.showToast({
title: "请等待图片上传完成",
icon: "none",
duration: 1000
})
return false
}
}
if (this.data.uploadImageList.length > 0) {
this.data.uploadImageList.forEach(item => {
imagesList.push(item.ossUrl)
})
}
this.data.dataForm.groupBuyPriceNumber.forEach(item => {
item.groupBuyPrice = parseFloat(item.groupBuyPrice)
})
this.setData({
lock: true
})
const para = { ...this.data.dataForm }
para.isConReview = this.data.isConReview
para.groupBuyImg = imagesList
console.log('submit', para)
let that = this
api.groupBuyUpdate(para).then(res => {
this.setData({
lock: false
})
if(res.code == 0) {
wx.hideLoading()
this.setData({
dialogVisible: !this.data.dialogVisible,
'dataForm.groupBuyTitle': '',
violationsCount: 0,
isConReview: false
})
} else if (res.code == 533) {
wx.hideLoading()
this.data.violationsCount++
console.log(this.data.violationsCount)
if (this.data.violationsCount == 1){
wx.showToast({
title: res.msg,
icon: "none",
duration: 2000
})
} else if (this.data.violationsCount == 2) {
wx.hideLoading()
wx.showModal({
title: '提示',
content: '您提交的内容再次被判定为违规,您确定是否要提交?',
success (res) {
if (res.confirm) {
console.log('用户点击确定')
that.data.isConReview = true
that.submitApply()
} else if (res.cancel) {
console.log('用户点击取消')
that.setData({
violationsCount: 0,
isConReview: false
})
}
}
})
}
}
}).catch(err => {
console.log('err',err)
wx.hideLoading()
this.setData({
lock: false
})
})
},
initDataForm () {
wx.showLoading({
title: '加载中...'
})
api.getGroupBuyDetail(this.data.dataForm.id).then(res => {
wx.hideLoading()
res.data.groupBuyImg.forEach( (item, index) => {
let ob = {
imageId: index,
ossUrl: item,
imgUrl: item,
uploaded: true
}
this.data.uploadImageList.push(ob)
})
this.setData({
dataForm: res.data,
uploadImageList: this.data.uploadImageList
})
console.log(this.data.uploadImageList)
})
},
//简化提示
showToast (title) {
wx.showToast({
title: title,
icon: "none",
duration: 2000
})
},
// 关闭弹框
closeDialog () {
wx.navigateBack({
delta: 1
})
},
// 弹框确定按钮
confirmDialog () {
wx.navigateBack({
delta: 1
})
},
// 删除选中的图片
deleteImage (e) {
const index = this.data.uploadImageList.findIndex(item => item.imageId === e.currentTarget.dataset.imageid)
if (index > -1) {
this.data.uploadImageList.splice(index, 1)
this.setData({
uploadImageList: this.data.uploadImageList
})
}
},
// 选择图片 上传弹窗 - 上传图片方式 - 选择图片 - 上传图片 - 回调赋值
chooseImage () {
const _this = this
$wuxActionSheet().showSheet({
buttons: [
{ text: "拍照" },
{ text: "从相册中获取" },
],
className: "dialog-class",
buttonClicked (index) {
if (index === 0) {
wx.chooseImage({
count: 1,
sizeType: ["original", "compressed"],
sourceType: ["camera"],
success (res) {
const uploadImageList = [..._this.data.uploadImageList]
uploadImageList.push({
uploaded: false,
ossUrl: "",
imgUrl: res.tempFilePaths[0],
imageId: ++_this.data.imageId
})
_this.setData({
uploadImageList
})
wx.uploadFile({
url: `${config.BASEURL()}group/topic/upload`,
filePath: res.tempFilePaths[0],
name: "file",
header: {
"Content-type": "multipart/form-data"
},
success (fileRes){
uploadImageList[uploadImageList.length - 1].uploaded = true
uploadImageList[uploadImageList.length - 1].ossUrl = JSON.parse(fileRes.data).data
_this.setData({
uploadImageList
})
}
})
}
})
} else if (index === 1) {
wx.chooseImage({
count: 3 - _this.data.uploadImageList.length,
sizeType: ["original", "compressed"],
sourceType: ["album"],
success (res) {
const uploadImageList = []
const endIndex = _this.data.uploadImageList.length
res.tempFilePaths.forEach(item => {
uploadImageList.push({
uploaded: false,
ossUrl: "",
imgUrl: item,
imageId: ++_this.data.imageId
})
})
_this.setData({
uploadImageList: [..._this.data.uploadImageList,...uploadImageList]
})
uploadImageList.forEach((item, index) => {
return (function (index) {
wx.uploadFile({
url: `${config.BASEURL()}group/topic/upload`,
filePath: res.tempFilePaths[index],
name: "file",
header: {
"Content-type": "multipart/form-data"
},
success (fileRes){
uploadImageList[index].uploaded = true
uploadImageList[index].ossUrl = JSON.parse(fileRes.data).data
_this.data.uploadImageList = _this.data.uploadImageList.slice(0, endIndex)
_this.setData({
uploadImageList: [..._this.data.uploadImageList, ...uploadImageList]
})
}
})
})(index)
})
}
})
}
return true
},
cancelText: "取消",
cancel () {},
destructiveButtonClicked () {},
})
},
})