index.js 11 KB

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