index.js 12 KB

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