|
@@ -0,0 +1,370 @@
|
|
|
+const Parse = getApp().Parse;
|
|
|
+const app = getApp();
|
|
|
+const company = getApp().globalData.company;
|
|
|
+let navigationBarHeight = getApp().globalData.statusBarHeight + 44;
|
|
|
+const qiniuUploader = require("../../../../../../utils/qiniuUploader");
|
|
|
+Page({
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 页面的初始数据
|
|
|
+ */
|
|
|
+ data: {
|
|
|
+ pageType: 'add',
|
|
|
+ routeId: '0ePMS1OGU7',
|
|
|
+ roomId: null,
|
|
|
+ storeId: null,
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生命周期函数--监听页面加载
|
|
|
+ */
|
|
|
+ onLoad: function (options) {
|
|
|
+ let {roomId,storeId} = options
|
|
|
+ if(!storeId && !roomId){
|
|
|
+ wx.navigateTo({
|
|
|
+ url: `/nova-tourism/pages/index/index`
|
|
|
+ })
|
|
|
+ }
|
|
|
+ if(!storeId && roomId){
|
|
|
+ let pageType = 'edit'
|
|
|
+ this.setData({
|
|
|
+ roomId,
|
|
|
+ storeId,
|
|
|
+ pageType
|
|
|
+ })
|
|
|
+ }else {
|
|
|
+ this.setData({
|
|
|
+ roomId,
|
|
|
+ storeId
|
|
|
+ })
|
|
|
+ }
|
|
|
+ this.initData()
|
|
|
+
|
|
|
+
|
|
|
+ },
|
|
|
+ async initData(){
|
|
|
+ let store;
|
|
|
+ let room;
|
|
|
+ let formData;
|
|
|
+ let route = await this.getRoute()
|
|
|
+ if(this.data.pageType == 'add'){
|
|
|
+ store = await this.getStore()
|
|
|
+ }else if(this.data.pageType == 'edit') {
|
|
|
+ room = await this.getRoom()
|
|
|
+ }
|
|
|
+ if(!store && !room){
|
|
|
+ wx.showToast({
|
|
|
+ title: '该店铺/房型不存在',
|
|
|
+ icon:'none'
|
|
|
+ })
|
|
|
+ setTimeout(()=>{
|
|
|
+ wx.navigateTo({
|
|
|
+ url: `/nova-tourism/pages/my/merchant/room-manage/room-edit/index`
|
|
|
+ })
|
|
|
+ },1000)
|
|
|
+ }
|
|
|
+ this.setData({
|
|
|
+ store,
|
|
|
+ route,
|
|
|
+ room,
|
|
|
+ })
|
|
|
+ formData = route['editFields'].reduce((obj, cur, index) => {
|
|
|
+ // obj[cur["key"]] = cur;
|
|
|
+ switch (cur["type"]) {
|
|
|
+ case 'String':
|
|
|
+ obj[cur["key"]] = room?room[cur["key"]] : '';
|
|
|
+ break;
|
|
|
+ case 'Number':
|
|
|
+ obj[cur["key"]] = room?room[cur["key"]] : 0;
|
|
|
+ break;
|
|
|
+ case 'Boolean':
|
|
|
+ obj[cur["key"]] = room?room[cur["key"]] : false;
|
|
|
+ break;
|
|
|
+ case 'Array':
|
|
|
+ obj[cur["key"]] = room?room[cur["key"]] : [];
|
|
|
+ if(cur["view"] == 'edit-filemanager'){
|
|
|
+ obj[cur["key"]] = [];
|
|
|
+ if(room){
|
|
|
+ room[cur["key"]].forEach(item => {
|
|
|
+ obj[cur["key"]].push({"url":item})
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 'GeoPoint':
|
|
|
+ obj[cur["key"]] = room?room[cur["key"]] : null;
|
|
|
+ break;
|
|
|
+ case 'Pointer':
|
|
|
+ obj[cur["key"]] = room?room[cur["key"]] : null;
|
|
|
+
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ return obj;
|
|
|
+ }, {});
|
|
|
+ this.setData({
|
|
|
+ formData
|
|
|
+ })
|
|
|
+ // 富文本回显
|
|
|
+ if(this.data.room ){
|
|
|
+ this.data.route['editFields'].forEach(field =>{
|
|
|
+ if(field["view"] == 'editor-tinymce'){
|
|
|
+ this.selectComponent(`#editor${field["key"]}`).setHtml(room[field["key"]] || '');
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ // 获取七牛参数
|
|
|
+ this.getQiniuOption()
|
|
|
+
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 生命周期函数--监听页面初次渲染完成
|
|
|
+ */
|
|
|
+ onReady: function () {
|
|
|
+ },
|
|
|
+ async getQiniuOption(){
|
|
|
+ let uploadData = await this.getUptoken()
|
|
|
+ if (uploadData) {
|
|
|
+ this.setData({
|
|
|
+ uploadURL: uploadData.zoneUrl,
|
|
|
+ domain: uploadData.domain,
|
|
|
+ uptokenURL: uploadData.uptoken,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ },
|
|
|
+ getUptoken() {
|
|
|
+ return Parse.Cloud.run('qiniu_uptoken', { company: company })
|
|
|
+ },
|
|
|
+ async getStore(){
|
|
|
+ let Store = new Parse.Query('ShopStore')
|
|
|
+ let store = await Store.get(this.data.storeId)
|
|
|
+ if(store&&store.id){
|
|
|
+ store = store.toJSON()
|
|
|
+ return store;
|
|
|
+ }else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ async getRoom(){
|
|
|
+ let Room = new Parse.Query('ShopRoom')
|
|
|
+ let room = await Room.get(this.data.roomId)
|
|
|
+ if(room&&room.id){
|
|
|
+ room = room.toJSON()
|
|
|
+ return room;
|
|
|
+ }else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ async getRoute(){
|
|
|
+ let DevRoute = new Parse.Query('DevRoute')
|
|
|
+ let route = await DevRoute.get(this.data.routeId)
|
|
|
+ if(route&&route.id){
|
|
|
+ route = route.toJSON()
|
|
|
+ return route;
|
|
|
+ }else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ onChange(event){
|
|
|
+ let field = event.currentTarget.dataset.field;
|
|
|
+ let type = event.currentTarget.dataset.type;
|
|
|
+ let value = event.detail.value;
|
|
|
+ switch (type) {
|
|
|
+ case 'String':
|
|
|
+ this.data.formData[field] = value;
|
|
|
+ break;
|
|
|
+ case 'Number':
|
|
|
+ this.data.formData[field] = +value;
|
|
|
+ break;
|
|
|
+ case 'Boolean':
|
|
|
+ this.data.formData[field] = event.detail;
|
|
|
+ this.setData({
|
|
|
+ formData:this.data.formData
|
|
|
+ });
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ showTagEdit(event){
|
|
|
+ let field = event.currentTarget.dataset.field;
|
|
|
+ let name = event.currentTarget.dataset.name;
|
|
|
+ let that = this;
|
|
|
+ wx.showModal({
|
|
|
+ title: `添加${name}`,
|
|
|
+ content: ``,
|
|
|
+ editable:true,
|
|
|
+ success (res) {
|
|
|
+ if (res.confirm) {
|
|
|
+ that.data.formData[field].push(res.content)
|
|
|
+ that.setData({
|
|
|
+ formData: that.data.formData
|
|
|
+ })
|
|
|
+ console.log('用户点击确定')
|
|
|
+ } else if (res.cancel) {
|
|
|
+ console.log('用户点击取消')
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ tagClose(event){
|
|
|
+ let field = event.currentTarget.dataset.field;
|
|
|
+ let index = event.currentTarget.dataset.index;
|
|
|
+ this.data.formData[field].splice(index,1)
|
|
|
+ this.setData({
|
|
|
+ formData:this.data.formData
|
|
|
+ })
|
|
|
+ },
|
|
|
+ changeFile(event) {
|
|
|
+ let field = event.currentTarget.dataset.field;
|
|
|
+ let fileList = event.detail
|
|
|
+ fileList = fileList.map(file => file.url)
|
|
|
+ this.data.formData[field] = fileList;
|
|
|
+ },
|
|
|
+ chooseGeoPoint(event){
|
|
|
+ let field = event.currentTarget.dataset.field;
|
|
|
+ wx.chooseLocation({
|
|
|
+ latitude: 0,
|
|
|
+ longitude: 0,
|
|
|
+ success: (res)=>{
|
|
|
+ let {latitude,longitude,address,name} = res;
|
|
|
+ let locations = new Parse.GeoPoint(latitude,longitude)
|
|
|
+ this.data.formData[field] = locations
|
|
|
+ this.data.formData['address'] = address + name
|
|
|
+ // this.data.formData['address'] = address
|
|
|
+ this.setData({
|
|
|
+ formData:this.data.formData,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ getHtml(event){
|
|
|
+ let field = event.currentTarget.dataset.field;
|
|
|
+ let html = event.detail.content.html;
|
|
|
+ this.data.formData[field] = html;
|
|
|
+ },
|
|
|
+ insertImage(event){
|
|
|
+ let field = event.currentTarget.dataset.field;
|
|
|
+ let that = this;
|
|
|
+ wx.chooseImage({
|
|
|
+ count: 1,
|
|
|
+ success (res) {
|
|
|
+ // 本地测试图片插入
|
|
|
+ // this.selectComponent('#hf_editor').insertSrc(res.tempFilePaths[0]);
|
|
|
+ // that.selectComponent(`#editor${field}`).insertSrc(res.tempFilePaths[0])
|
|
|
+ let tempFilePaths = res.tempFilePaths[0];
|
|
|
+ qiniuUploader.upload(
|
|
|
+ tempFilePaths,
|
|
|
+ (res) => {
|
|
|
+ let img = res.imageURL;
|
|
|
+ that.selectComponent(`#editor${field}`).insertSrc(img); //调用组件insertSrc方法
|
|
|
+ },
|
|
|
+ (error) => {
|
|
|
+ console.log("error: " + error);
|
|
|
+ }, {
|
|
|
+ region: "SCN",
|
|
|
+ uploadURL: that.data.uploadURL,
|
|
|
+ domain: that.data.domain,
|
|
|
+ uptoken: that.data.uptokenURL,
|
|
|
+ }
|
|
|
+ );
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ async submit(){
|
|
|
+ let checked = await this.checkForm()
|
|
|
+ if(!checked){
|
|
|
+ return
|
|
|
+ }
|
|
|
+ let room = await this.setRoom()
|
|
|
+ console.log(room);
|
|
|
+ if(room&&room.id){
|
|
|
+ wx.showToast({
|
|
|
+ title: '操作成功',
|
|
|
+ icon:'none'
|
|
|
+ })
|
|
|
+ setTimeout(()=>{
|
|
|
+ wx.navigateTo({
|
|
|
+ url: `/nova-tourism/pages/my/merchant/room-manage/index`
|
|
|
+ })
|
|
|
+ },1000)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ async checkForm(){
|
|
|
+ let formData = this.data.formData;
|
|
|
+ let editFields = this.data.route.editFields;
|
|
|
+ for (let index = 0; index < editFields.length; index++) {
|
|
|
+ const field = editFields[index];
|
|
|
+ if(field.required && (!formData[field.key] || formData[field.key]== '' || formData[field.key]== []) ){
|
|
|
+ wx.showToast({
|
|
|
+ title: `请填写${field.name}`,
|
|
|
+ icon:'none'
|
|
|
+ })
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+ },
|
|
|
+ async setRoom(){
|
|
|
+ let ShopRoom = Parse.Object.extend("ShopRoom");
|
|
|
+ let Room = new ShopRoom()
|
|
|
+ Room.set(this.data.formData)
|
|
|
+ Room.set("shop",{
|
|
|
+ "__type":"Pointer",
|
|
|
+ "className":"ShopStore",
|
|
|
+ "objectId":this.data.storeId
|
|
|
+ })
|
|
|
+ Room.set("company",{
|
|
|
+ "__type":"Pointer",
|
|
|
+ "className":"Company",
|
|
|
+ "objectId":company
|
|
|
+ })
|
|
|
+ return await Room.save()
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生命周期函数--监听页面显示
|
|
|
+ */
|
|
|
+ onShow: function () {
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生命周期函数--监听页面隐藏
|
|
|
+ */
|
|
|
+ onHide: function () {
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生命周期函数--监听页面卸载
|
|
|
+ */
|
|
|
+ onUnload: function () {
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 页面相关事件处理函数--监听用户下拉动作
|
|
|
+ */
|
|
|
+ onPullDownRefresh: function () {
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 页面上拉触底事件的处理函数
|
|
|
+ */
|
|
|
+ onReachBottom: function () {
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 用户点击右上角分享
|
|
|
+ */
|
|
|
+ onShareAppMessage: function () {
|
|
|
+
|
|
|
+ }
|
|
|
+})
|