index.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410
  1. const Parse = getApp().Parse;
  2. const app = getApp();
  3. const company = getApp().globalData.company;
  4. let navigationBarHeight = getApp().globalData.statusBarHeight + 44;
  5. const qiniuUploader = require("../../../../../../utils/qiniuUploader");
  6. Page({
  7. /**
  8. * 页面的初始数据
  9. */
  10. data: {
  11. pageType: 'add',
  12. routeId: 'm1D72HCXcL',
  13. roomId: null,
  14. storeId: null,
  15. oldimages:[],
  16. edit_field_map:{
  17. tags:{default:['提供早餐','免费wifi','禁烟','宠物友好']},
  18. service:{default:['冰箱','液晶电视机','免费停车位','暖气','牙具']},
  19. shop:{disabled:true,default:{className:'ShopStore',__type:'Pointer',objectId:''}}
  20. }
  21. },
  22. /**
  23. * 生命周期函数--监听页面加载
  24. */
  25. onLoad: function (options) {
  26. let {
  27. roomId,
  28. storeId
  29. } = options
  30. console.log(options);
  31. let store = wx.getStorageSync('store')
  32. let {edit_field_map}=this.data
  33. edit_field_map.shop.default = {className:'ShopStore',__type:'Pointer',objectId:store?.objectId}
  34. this.setData({edit_field_map})
  35. if (!storeId && !roomId) {
  36. wx.reLaunch({
  37. url: `/nova-tourism/pages/index/index`
  38. })
  39. return
  40. }
  41. if (!storeId && roomId) {
  42. let pageType = 'edit'
  43. this.setData({
  44. roomId,
  45. storeId: store.objectId,
  46. pageType
  47. })
  48. } else {
  49. this.setData({
  50. roomId,
  51. storeId
  52. })
  53. }
  54. // this.initData()
  55. },
  56. async initData() {
  57. let store;
  58. let room;
  59. let formData;
  60. let route = await this.getRoute()
  61. if (this.data.pageType == 'add') {
  62. store = await this.getStore()
  63. } else if (this.data.pageType == 'edit') {
  64. room = await this.getRoom()
  65. }
  66. if (!store && !room) {
  67. wx.showToast({
  68. title: '该店铺/房型不存在',
  69. icon: 'none'
  70. })
  71. setTimeout(() => {
  72. wx.navigateTo({
  73. url: `/nova-tourism/pages/my/merchant/room-manage/room-edit/index`
  74. })
  75. }, 1000)
  76. }
  77. this.setData({
  78. store,
  79. route,
  80. room,
  81. })
  82. formData = route['editFields'].reduce((obj, cur, index) => {
  83. // obj[cur["key"]] = cur;
  84. switch (cur["type"]) {
  85. case 'String':
  86. obj[cur["key"]] = room ? room[cur["key"]] : '';
  87. break;
  88. case 'Number':
  89. obj[cur["key"]] = room ? room[cur["key"]] : 0;
  90. break;
  91. case 'Boolean':
  92. obj[cur["key"]] = room ? room[cur["key"]] : false;
  93. break;
  94. case 'Array':
  95. obj[cur["key"]] = room ? room[cur["key"]] : [];
  96. if (cur["view"] == 'edit-filemanager') {
  97. obj[cur["key"]] = [];
  98. if (room) {
  99. room[cur["key"]].forEach(item => {
  100. obj[cur["key"]].push({
  101. "url": item
  102. })
  103. })
  104. }
  105. }
  106. break;
  107. case 'GeoPoint':
  108. obj[cur["key"]] = room ? room[cur["key"]] : null;
  109. break;
  110. case 'Pointer':
  111. obj[cur["key"]] = room ? room[cur["key"]] : null;
  112. break;
  113. default:
  114. break;
  115. }
  116. return obj;
  117. }, {});
  118. this.setData({
  119. formData
  120. })
  121. // 富文本回显
  122. if (this.data.room) {
  123. this.data.route['editFields'].forEach(field => {
  124. if (field["view"] == 'editor-tinymce') {
  125. // this.selectComponent(`#editor${field["key"]}`).setHtml(room[field["key"]] || '');
  126. }
  127. })
  128. }
  129. // 获取七牛参数
  130. this.getQiniuOption()
  131. },
  132. /**
  133. * 生命周期函数--监听页面初次渲染完成
  134. */
  135. onReady: function () {},
  136. async getQiniuOption() {
  137. let uploadData = await this.getUptoken()
  138. if (uploadData) {
  139. this.setData({
  140. uploadURL: uploadData.zoneUrl,
  141. domain: uploadData.domain,
  142. uptokenURL: uploadData.uptoken,
  143. })
  144. }
  145. },
  146. getUptoken() {
  147. return Parse.Cloud.run('qiniu_uptoken', {
  148. company: company
  149. })
  150. },
  151. async getStore() {
  152. let Store = new Parse.Query('ShopStore')
  153. let store = await Store.get(this.data.storeId)
  154. if (store && store.id) {
  155. store = store.toJSON()
  156. return store;
  157. } else {
  158. return false;
  159. }
  160. },
  161. async getRoom() {
  162. let Room = new Parse.Query('ShopRoom')
  163. let room = await Room.get(this.data.roomId)
  164. if (room && room.id) {
  165. room = room.toJSON()
  166. console.log('房间', room);
  167. return room;
  168. } else {
  169. return false;
  170. }
  171. },
  172. async getRoute() {
  173. let DevRoute = new Parse.Query('DevRoute')
  174. let route = await DevRoute.get(this.data.routeId)
  175. if (route && route.id) {
  176. route = route.toJSON()
  177. return route;
  178. } else {
  179. return false;
  180. }
  181. },
  182. onChange(event) {
  183. let field = event.currentTarget.dataset.field;
  184. let type = event.currentTarget.dataset.type;
  185. let value = event.detail.value;
  186. switch (type) {
  187. case 'String':
  188. this.data.formData[field] = value;
  189. break;
  190. case 'Number':
  191. this.data.formData[field] = +value;
  192. break;
  193. case 'Boolean':
  194. this.data.formData[field] = event.detail;
  195. this.setData({
  196. formData: this.data.formData
  197. });
  198. break;
  199. default:
  200. break;
  201. }
  202. },
  203. showTagEdit(event) {
  204. let field = event.currentTarget.dataset.field;
  205. let name = event.currentTarget.dataset.name;
  206. let that = this;
  207. wx.showModal({
  208. title: `添加${name}`,
  209. content: ``,
  210. editable: true,
  211. success(res) {
  212. if (res.confirm) {
  213. that.data.formData[field].push(res.content)
  214. that.setData({
  215. formData: that.data.formData
  216. })
  217. console.log('用户点击确定')
  218. } else if (res.cancel) {
  219. console.log('用户点击取消')
  220. }
  221. }
  222. })
  223. },
  224. tagClose(event) {
  225. let field = event.currentTarget.dataset.field;
  226. let index = event.currentTarget.dataset.index;
  227. this.data.formData[field].splice(index, 1)
  228. this.setData({
  229. formData: this.data.formData
  230. })
  231. },
  232. changeFile(event) {
  233. let field = event.currentTarget.dataset.field;
  234. let fileList = event.detail
  235. fileList = fileList.map(file => file.url)
  236. this.data.formData[field] = fileList;
  237. },
  238. chooseGeoPoint(event) {
  239. let field = event.currentTarget.dataset.field;
  240. wx.chooseLocation({
  241. latitude: 0,
  242. longitude: 0,
  243. success: (res) => {
  244. let {
  245. latitude,
  246. longitude,
  247. address,
  248. name
  249. } = res;
  250. let locations = new Parse.GeoPoint(latitude, longitude)
  251. this.data.formData[field] = locations
  252. this.data.formData['address'] = address + name
  253. // this.data.formData['address'] = address
  254. this.setData({
  255. formData: this.data.formData,
  256. })
  257. }
  258. })
  259. },
  260. // getHtml(event) {
  261. // let field = event.currentTarget.dataset.field;
  262. // let html = event.detail.content.html;
  263. // this.data.formData[field] = html;
  264. // },
  265. // insertImage(event) {
  266. // let field = event.currentTarget.dataset.field;
  267. // let that = this;
  268. // wx.chooseImage({
  269. // count: 1,
  270. // success(res) {
  271. // // 本地测试图片插入
  272. // // this.selectComponent('#hf_editor').insertSrc(res.tempFilePaths[0]);
  273. // // that.selectComponent(`#editor${field}`).insertSrc(res.tempFilePaths[0])
  274. // let tempFilePaths = res.tempFilePaths[0];
  275. // qiniuUploader.upload(
  276. // tempFilePaths,
  277. // (res) => {
  278. // let img = res.imageURL;
  279. // that.selectComponent(`#editor${field}`).insertSrc(img); //调用组件insertSrc方法
  280. // },
  281. // (error) => {
  282. // console.log("error: " + error);
  283. // }, {
  284. // region: "SCN",
  285. // uploadURL: that.data.uploadURL,
  286. // domain: that.data.domain,
  287. // uptoken: that.data.uptokenURL,
  288. // }
  289. // );
  290. // }
  291. // })
  292. // },
  293. async submit() {
  294. let checked = await this.checkForm()
  295. if (!checked) {
  296. return
  297. }
  298. //当没有更新图片时执行
  299. this.data.formData.images.forEach((img)=>{
  300. if(img.url){
  301. this.data.oldimages.push(img.url)
  302. }
  303. })
  304. if (this.data.oldimages.length != 0) {
  305. this.data.formData['images'] = this.data.oldimages; // 保持原有图片
  306. }
  307. let room = await this.setRoom()
  308. console.log(room);
  309. if (room && room.id) {
  310. wx.showToast({
  311. title: '操作成功',
  312. icon: 'none'
  313. })
  314. setTimeout(()=>{
  315. wx.navigateBack({
  316. delta: 1 // 返回上一页
  317. });
  318. },1000)
  319. }
  320. },
  321. async checkForm() {
  322. let formData = this.data.formData;
  323. let editFields = this.data.route.editFields;
  324. for (let index = 0; index < editFields.length; index++) {
  325. const field = editFields[index];
  326. if (field.required && (!formData[field.key] || formData[field.key] == '' || formData[field.key] == [])) {
  327. wx.showToast({
  328. title: `请填写${field.name}`,
  329. icon: 'none'
  330. })
  331. return false;
  332. }
  333. }
  334. return true;
  335. },
  336. async setRoom() {
  337. let Room
  338. if (this.data.roomId) {
  339. let ShopRoom1 = new Parse.Query('ShopRoom');
  340. ShopRoom1.equalTo('company', company);
  341. ShopRoom1.equalTo('objectId', this.data.roomId);
  342. Room = await ShopRoom1.first();
  343. } else {
  344. let ShopRoom = Parse.Object.extend("ShopRoom");
  345. Room = new ShopRoom()
  346. }
  347. Room.set('isEnabled',true)
  348. Room.set(this.data.formData)
  349. Room.set("shop", {
  350. "__type": "Pointer",
  351. "className": "ShopStore",
  352. "objectId": this.data.storeId
  353. })
  354. Room.set("company", {
  355. "__type": "Pointer",
  356. "className": "Company",
  357. "objectId": company
  358. })
  359. return await Room.save()
  360. },
  361. /**
  362. * 生命周期函数--监听页面显示
  363. */
  364. onShow: function () {
  365. },
  366. /**
  367. * 生命周期函数--监听页面隐藏
  368. */
  369. onHide: function () {
  370. },
  371. /**
  372. * 生命周期函数--监听页面卸载
  373. */
  374. onUnload: function () {
  375. },
  376. /**
  377. * 页面相关事件处理函数--监听用户下拉动作
  378. */
  379. onPullDownRefresh: function () {
  380. },
  381. /**
  382. * 页面上拉触底事件的处理函数
  383. */
  384. onReachBottom: function () {
  385. },
  386. /**
  387. * 用户点击右上角分享
  388. */
  389. onShareAppMessage: function () {
  390. }
  391. })