index.js 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809
  1. // nova-tourism/components/dev-route/index.js
  2. let Parse = getApp().Parse;
  3. const company = getApp().globalData.company
  4. const uid = Parse.User.current()?.id
  5. const req = require('../../../utils/request')
  6. Component({
  7. //字段编辑对象示例:
  8. // edit_field_map: {
  9. // isRecom:{
  10. // isHide:true,//是否隐藏 - 此项非DevRouter编辑
  11. // disabled: true,//禁止编辑
  12. // required: true,//必填项
  13. // default:true,//默认值
  14. // },
  15. // },
  16. /**
  17. * 组件的属性列表
  18. */
  19. properties: {
  20. rid: null, //devRouter的id
  21. object_id: null, //编辑的objcetId
  22. edit_field_map: null, //字段编辑对象
  23. is_btn: null, //是否显示提交按钮(save当前对象)
  24. },
  25. /**
  26. * 组件的初始数据
  27. */
  28. data: {
  29. color: '#46a9a4', //主题色
  30. text_color: 'black', //文字颜色
  31. editMap: {},
  32. editFields: [], //编辑对象列表
  33. isShowPointer: false, //指针弹框
  34. pointerList: [], //指针列表
  35. pointer_val: null, //搜索指针的关键字
  36. fieldIndex: null, //当前操作的编辑对象index
  37. timeout: null, //指针搜索框计时器
  38. is_btn: null, //是否显示提交按钮(save当前对象)
  39. queryParamsData: null, //当前编辑的对象(不存在则 new)
  40. },
  41. lifetimes: {
  42. detached: function () {},
  43. attached: async function () {
  44. console.log(`
  45. //字段编辑对象示例:
  46. // edit_field_map: {
  47. // isRecom:{
  48. // isHide:true,//是否隐藏 - 此项非DevRouter编辑
  49. // disabled: true,//禁止编辑
  50. // required: true,//必填项
  51. // default:true,//默认值
  52. // },
  53. // },
  54. `)
  55. this.getToken()
  56. setTimeout(() => {
  57. this.refersh()
  58. }, 800);
  59. },
  60. },
  61. /**
  62. * 组件的方法列表
  63. */
  64. methods: {
  65. async refersh() {
  66. let {
  67. is_btn
  68. } = this.properties
  69. this.setData({
  70. is_btn
  71. })
  72. await this.getDevRoute()
  73. this.getDataItem()
  74. },
  75. /**获取devRoute */
  76. async getDevRoute() {
  77. let {
  78. rid,
  79. edit_field_map
  80. } = this.properties
  81. console.log(edit_field_map)
  82. let query = new Parse.Query('DevRoute')
  83. let d = await query.get(rid)
  84. let devRoute = d?.toJSON()
  85. console.log(devRoute)
  86. let editMap = {}
  87. let editFieldsList = []
  88. for (let i in devRoute?.editFields) {
  89. let item = devRoute?.editFields[i]
  90. if (edit_field_map && item.key in edit_field_map) { //如果当前字段存在于父组件传递的默认编辑字段之内
  91. if (('isHide' in edit_field_map[item.key]) && edit_field_map[item.key]['isHide']) {} else { //排除isHide为true的字段,其他字段使用父组件默认编辑
  92. for (let map_key in edit_field_map[item.key]) {
  93. devRoute.editFields[i][map_key] = edit_field_map[item.key][map_key]
  94. }
  95. editFieldsList.push(devRoute.editFields[i])
  96. editMap[item.key] = {
  97. type: item.type,
  98. val: item.default || null
  99. }
  100. }
  101. } else {
  102. editFieldsList.push(devRoute.editFields[i])
  103. editMap[item.key] = {
  104. type: item.type,
  105. val: item.default || null
  106. }
  107. }
  108. }
  109. console.log(editFieldsList)
  110. this.setData({
  111. devRoute,
  112. className: d?.get('pageUrl')?.split('/')?.pop(),
  113. editFields: editFieldsList,
  114. editMap
  115. })
  116. },
  117. /**获取数据*/
  118. async getDataItem() {
  119. let {
  120. object_id
  121. } = this.properties
  122. if (!object_id) return
  123. let {
  124. className,
  125. editMap,
  126. editFields
  127. } = this.data
  128. let pointerKeys = editFields.filter(item => item.type == 'Pointer' || item.view == 'pointer-array')?.map(item => item.key)
  129. let query = new Parse.Query(className)
  130. for (let i in pointerKeys) {
  131. query.include(pointerKeys[i])
  132. }
  133. let d = await query.get(object_id)
  134. if (!d?.id) return
  135. let dataItem = d?.toJSON()
  136. for (let i in editFields) {
  137. let item = editFields[i]
  138. if (item.view == 'edit-image') {
  139. if (item.type == 'String') { //单张图片
  140. editMap[item.key].val = dataItem[item.key] ? [{
  141. url: dataItem[item.key]
  142. }] : item.default || null
  143. }
  144. if (item.type == 'Array') { //数组图片
  145. if (dataItem[item.key] && dataItem[item.key]?.length > 0) {
  146. editMap[item.key].val = dataItem[item.key]?.map(item => {
  147. return {
  148. url: item
  149. }
  150. })
  151. } else {
  152. editMap[item.key].val = item.default || []
  153. }
  154. }
  155. } else {
  156. if (item.type == 'Pointer') { //指针类型
  157. let text = dataItem[item.key]?.storeName || dataItem[item.key]?.title || dataItem[item.key]?.name || dataItem[item.key]?.orderNum || dataItem[item.key]?.mobile
  158. editMap[item.key].text = text
  159. } else if (item.type == 'Array' && item.view == 'pointer-array') { //数组指针
  160. let text = []
  161. for (let x in dataItem[item.key]) {
  162. let xtem = dataItem[item.key][x]
  163. text.push(xtem?.storeName || xtem?.title || xtem?.name || xtem?.orderNum || xtem?.mobile)
  164. editMap[item.key].text = text
  165. }
  166. }
  167. editMap[item.key].val = dataItem[item.key] || item.default || null
  168. }
  169. }
  170. this.setData({
  171. dataItem,
  172. editMap,
  173. queryParamsData: d
  174. })
  175. },
  176. /** 获取token 上传图片所需*/
  177. async getToken() {
  178. let res = await Parse.Cloud.run('qiniu_uptoken', {
  179. company: company
  180. })
  181. this.setData({
  182. uploadURL: res.zoneUrl,
  183. domain: res.domain,
  184. uptokenURL: res.uptoken,
  185. })
  186. },
  187. /** textarea改变 - String类型*/
  188. changeTextarea(e) {
  189. let {
  190. editMap
  191. } = this.data
  192. console.log(e)
  193. let {
  194. key
  195. } = e.currentTarget.dataset
  196. let {
  197. value
  198. } = e.detail
  199. editMap[key].val = value
  200. this.setData({
  201. editMap
  202. })
  203. },
  204. /**上传单张图片 - String类型 */
  205. changeFile(e) {
  206. console.log(e)
  207. let {
  208. editMap
  209. } = this.data
  210. let {
  211. key
  212. } = e.currentTarget.dataset
  213. console.log(e.detail[0])
  214. editMap[key].val = e.detail
  215. this.setData({
  216. editMap
  217. })
  218. },
  219. /**单选框改变 - String类型 */
  220. radioChange(e) {
  221. console.log(e)
  222. let {
  223. editMap
  224. } = this.data
  225. let {
  226. key
  227. } = e.currentTarget.dataset
  228. editMap[key].val = e.detail
  229. this.setData({
  230. editMap
  231. })
  232. },
  233. /** 数字输入框改变 - Number类型*/
  234. changeNumber(e) {
  235. let {
  236. editMap
  237. } = this.data
  238. console.log(e)
  239. let {
  240. key
  241. } = e.currentTarget.dataset
  242. let {
  243. value
  244. } = e.detail
  245. editMap[key].val = value
  246. this.setData({
  247. editMap
  248. })
  249. },
  250. /**开关改变 */
  251. switchChange(e) {
  252. let {
  253. editMap
  254. } = this.data
  255. console.log(e)
  256. let {
  257. key
  258. } = e.currentTarget.dataset
  259. editMap[key].val = e.detail
  260. this.setData({
  261. editMap
  262. })
  263. },
  264. /**上传多张图片 - Array类型 */
  265. changeFile_array(e) {
  266. console.log(e)
  267. let {
  268. editMap
  269. } = this.data
  270. let {
  271. key
  272. } = e.currentTarget.dataset
  273. editMap[key].val = e.detail
  274. this.setData({
  275. editMap
  276. })
  277. },
  278. /**添加文本 - Array类型 */
  279. addTextarea(e) {
  280. console.log(e)
  281. let {
  282. editMap
  283. } = this.data
  284. let {
  285. key
  286. } = e.currentTarget.dataset
  287. editMap[key].val = [...(editMap[key].val || []), e.detail.value]
  288. this.setData({
  289. editMap
  290. })
  291. },
  292. /**删除文本 - Array类型 */
  293. delTextarea(e) {
  294. console.log(e)
  295. let {
  296. editMap
  297. } = this.data
  298. let {
  299. key,
  300. index
  301. } = e.currentTarget.dataset
  302. editMap[key].val?.splice(index, 1)
  303. this.setData({
  304. editMap
  305. })
  306. },
  307. /**指针弹框-开 */
  308. async openPointer(e) {
  309. let {
  310. editFields
  311. } = this.data
  312. let {
  313. index
  314. } = e.currentTarget.dataset
  315. if (editFields[index].disabled) {
  316. wx.showToast({
  317. title: `无法编辑${editFields[index].name}`,
  318. icon: 'none'
  319. })
  320. return
  321. }
  322. this.setData({
  323. fieldIndex: index,
  324. pointerList: [],
  325. pointer_val: '',
  326. isShowPointer: true
  327. })
  328. this.getPointerItem()
  329. },
  330. /**指针弹框-关 */
  331. closePointer() {
  332. this.setData({
  333. isShowPointer: false
  334. })
  335. },
  336. /**选中指针 */
  337. checkPointer(e) {
  338. let {
  339. editFields, //编辑对象列表
  340. pointerList, //指针列表
  341. fieldIndex, //当前操作的编辑对象index
  342. editMap,
  343. } = this.data
  344. let {
  345. index
  346. } = e.currentTarget.dataset
  347. let editField = editFields[fieldIndex]
  348. let p_item = pointerList[index]
  349. console.log(pointerList)
  350. pointerList = pointerList?.map((item, i) => {
  351. if (i == index) {
  352. item['dev_router_check'] = true
  353. } else {
  354. item['dev_router_check'] = false
  355. }
  356. return item
  357. })
  358. editMap[editField.key].val = {
  359. className: editField?.targetClass,
  360. __type: 'Pointer',
  361. objectId: p_item?.objectId
  362. }
  363. editMap[editField.key].text = p_item.storeName || p_item.name || p_item.title || p_item.orderNum || p_item.mobile
  364. this.setData({
  365. editMap,
  366. pointerList
  367. })
  368. this.closePointer()
  369. },
  370. /**选中指针 - Array */
  371. checkPointer_Array(e) {
  372. let {
  373. editFields, //编辑对象列表
  374. pointerList, //指针列表
  375. fieldIndex, //当前操作的编辑对象index
  376. editMap,
  377. } = this.data
  378. let {
  379. index
  380. } = e.currentTarget.dataset
  381. let editField = editFields[fieldIndex]
  382. let p_item = pointerList[index]
  383. console.log(editField, p_item)
  384. pointerList[index]['dev_router_check'] = !(pointerList[index]['dev_router_check'] || false)
  385. let checkList = pointerList?.filter(item => item.dev_router_check) || []
  386. editMap[editField.key].val = checkList.map(p_item => {
  387. return {
  388. className: editField?.targetClass,
  389. __type: 'Pointer',
  390. objectId: p_item?.objectId
  391. }
  392. })
  393. editMap[editField.key].text = checkList.map(p_item => {
  394. return p_item.storeName || p_item.name || p_item.title || p_item.orderNum || p_item.mobile
  395. })
  396. console.log(editMap)
  397. this.setData({
  398. editMap,
  399. pointerList
  400. })
  401. },
  402. /**删除数组指针 */
  403. delPointer(e) {
  404. console.log(e)
  405. let {
  406. editMap
  407. } = this.data
  408. let {
  409. key,
  410. index
  411. } = e.currentTarget.dataset
  412. editMap[key].text?.splice(index, 1)
  413. editMap[key].val?.splice(index, 1)
  414. this.setData({
  415. editMap
  416. })
  417. },
  418. /**指针搜索框变化 */
  419. async valChange(e) {
  420. await this.setData({
  421. pointer_val: e.detail || ''
  422. })
  423. let {
  424. timeout
  425. } = this.data
  426. clearTimeout(timeout)
  427. timeout = setTimeout(async () => {
  428. await this.setData({
  429. pointerList: [],
  430. })
  431. this.getPointerItem()
  432. }, 1000);
  433. this.setData({
  434. timeout
  435. })
  436. },
  437. /** 查询指针*/
  438. async getPointerItem() {
  439. let {
  440. editMap,
  441. pointer_val,
  442. pointerList,
  443. fieldIndex,
  444. editFields
  445. } = this.data
  446. let editField = editFields[fieldIndex]
  447. let sql = `SELECT DISTINCT(column_name) FROM information_schema.columns
  448. WHERE table_name = '${editField.targetClass}'`
  449. let columnList = await req.customSQL(sql)
  450. let where = {
  451. "$or": []
  452. }
  453. if (editField?.queryParams?.where?.type) {
  454. where = JSON.parse(JSON.stringify(editField?.queryParams?.where || {})) || {}
  455. } else {
  456. where = {}
  457. }
  458. console.log(where)
  459. for (let i in columnList) {
  460. let item = columnList[i]
  461. if (item.column_name == 'company') where['company'] = {
  462. "$eq": company
  463. }
  464. if (item.column_name == 'isDeleted') where['isDeleted'] = {
  465. "$ne": true
  466. }
  467. if (pointer_val) {
  468. if (item.column_name == 'name') where['$or'] = [...(where['$or'] || []), {
  469. "name": {
  470. "$regex": `${pointer_val}`
  471. }
  472. }]
  473. if (item.column_name == 'title') where['$or'] = [...(where['$or'] || []), {
  474. "title": {
  475. "$regex": `${pointer_val}`
  476. }
  477. }]
  478. if (item.column_name == 'mobile') where['$or'] = [...(where['$or'] || []), {
  479. "mobile": {
  480. "$regex": `${pointer_val}`
  481. }
  482. }]
  483. if (item.column_name == 'orderNum') where['$or'] = [...(where['$or'] || []), {
  484. "orderNum": {
  485. "$regex": `${pointer_val}`
  486. }
  487. }]
  488. if (item.column_name == 'storeName') where['$or'] = [...(where['$or'] || []), {
  489. "storeName": {
  490. "$regex": `${pointer_val}`
  491. }
  492. }]
  493. }
  494. }
  495. console.log(where)
  496. let queryParams = {
  497. where,
  498. limit: 20,
  499. skip: pointerList?.length || 0
  500. }
  501. let query = new Parse.Query.fromJSON(editField?.targetClass, queryParams)
  502. query.descending('createdAt')
  503. let d = await query.find()
  504. if (!d?.length) {
  505. wx.showToast({
  506. title: '没有更多了',
  507. icon: 'none'
  508. })
  509. return
  510. }
  511. editMap[editField.key].text
  512. let list = d?.map(item => {
  513. let obj = item.toJSON()
  514. if (editMap[editField.key]?.text && editMap[editField.key]?.text?.length > 0) {
  515. if (editField.type == 'Array') {
  516. let x = editMap[editField.key].val.findIndex(val_item => val_item.objectId == obj.objectId)
  517. if (x != -1) {
  518. obj.dev_router_check = true
  519. }
  520. } else {
  521. if (editMap[editField.key].val.objectId == obj.objectId) {
  522. obj.dev_router_check = true
  523. }
  524. }
  525. }
  526. return obj
  527. })
  528. this.setData({
  529. pointerList: [...(pointerList || []), ...(list || [])]
  530. })
  531. },
  532. /**选择位置 */
  533. chooseGeoPoint(e) {
  534. let {
  535. editMap
  536. } = this.data
  537. let {
  538. key
  539. } = e.currentTarget.dataset
  540. let that = this
  541. wx.chooseLocation({
  542. latitude: 0,
  543. longitude: 0,
  544. success: (res) => {
  545. console.log(res)
  546. editMap[key].val = {
  547. __type: 'GeoPoint',
  548. latitude: res.latitude || 0,
  549. longitude: res.longitude || 0
  550. }
  551. editMap[key].text = (res.address || '') + (res.name || '')
  552. that.setData({
  553. editMap
  554. })
  555. }
  556. })
  557. },
  558. /** textarea改变 - Object类型内属性值改变 */
  559. changeJsonTextarea(e) {
  560. let {
  561. editMap
  562. } = this.data
  563. console.log(e)
  564. let {
  565. key,
  566. json_key
  567. } = e.currentTarget.dataset
  568. let {
  569. value
  570. } = e.detail
  571. let obj = editMap[key].val||{}
  572. obj[json_key] = value
  573. editMap[key].val=obj
  574. this.setData({
  575. editMap
  576. })
  577. },
  578. //#region Object类型 规格specMap编辑 ================================================
  579. /**添加属性 - specMap字段 */
  580. addKey_ShopGoods_specMap(e) {
  581. console.log(e)
  582. let {
  583. editMap
  584. } = this.data
  585. let {
  586. key
  587. } = e.currentTarget.dataset
  588. let text = e.detail.value
  589. let obj = {
  590. value: null,
  591. price: null,
  592. vipPrice: null,
  593. }
  594. if (!editMap[key].val?.specList || editMap[key].val?.specList?.length <= 0) editMap[key].val = {
  595. specList: []
  596. }
  597. editMap[key].val['specList'] = [...(editMap[key]?.val?.specList || []), text]
  598. editMap[key].val[text] = [...(editMap[key]?.val[text] || []), obj]
  599. this.setData({
  600. editMap
  601. })
  602. },
  603. /**删除属性 - specMap字段 */
  604. delKey_ShopGoods_specMap(e) {
  605. console.log(e)
  606. let {
  607. editMap
  608. } = this.data
  609. let {
  610. key,
  611. spec_index
  612. } = e.currentTarget.dataset
  613. console.log(key, spec_index)
  614. let text = editMap[key].val.specList[spec_index]
  615. console.log(text)
  616. delete editMap[key].val[text]
  617. editMap[key].val.specList.splice(spec_index, 1)
  618. this.setData({
  619. editMap
  620. })
  621. },
  622. /**设置specMap-value */
  623. setValue(e) {
  624. console.log(e)
  625. let {
  626. editMap
  627. } = this.data
  628. let {
  629. key,
  630. spec,
  631. spec_map_index
  632. } = e.currentTarget.dataset
  633. editMap[key].val[spec][spec_map_index].value = e.detail.value
  634. this.setData({
  635. editMap
  636. })
  637. },
  638. /**设置specMap-price */
  639. setPrice(e) {
  640. console.log(e)
  641. let {
  642. editMap
  643. } = this.data
  644. let {
  645. key,
  646. spec,
  647. spec_map_index
  648. } = e.currentTarget.dataset
  649. editMap[key].val[spec][spec_map_index].price = parseFloat(e.detail.value || 0)
  650. this.setData({
  651. editMap
  652. })
  653. },
  654. /**设置specMap-vipPrice */
  655. setVipPrice(e) {
  656. console.log(e)
  657. let {
  658. editMap
  659. } = this.data
  660. let {
  661. key,
  662. spec,
  663. spec_map_index
  664. } = e.currentTarget.dataset
  665. editMap[key].val[spec][spec_map_index].vipPrice = parseFloat(e.detail.value || 0)
  666. this.setData({
  667. editMap
  668. })
  669. },
  670. /**添加specMap里面key内的item */
  671. addSpecMap(e) {
  672. console.log(e)
  673. let {
  674. editMap
  675. } = this.data
  676. let {
  677. key,
  678. spec
  679. } = e.currentTarget.dataset
  680. let obj = {
  681. value: null,
  682. price: null,
  683. vipPrice: null,
  684. }
  685. editMap[key].val[spec] = [...(editMap[key].val[spec] || []), obj]
  686. this.setData({
  687. editMap
  688. })
  689. },
  690. /**删除specMap里面key内的item */
  691. delSpecMapItem(e) {
  692. console.log(e)
  693. let {
  694. editMap
  695. } = this.data
  696. let {
  697. key,
  698. spec,
  699. spec_map_index
  700. } = e.currentTarget.dataset
  701. editMap[key].val[spec].splice(spec_map_index, 1)
  702. this.setData({
  703. editMap
  704. })
  705. },
  706. //#endregion ShopGoods表specMap字段编辑 end ================================================
  707. /**提交 */
  708. async submit() {
  709. let {
  710. editMap,
  711. queryParamsData,
  712. className,
  713. editFields
  714. } = this.data
  715. console.log(editMap)
  716. let editMapParse = {}
  717. if (!queryParamsData?.id) {
  718. let NewClass = Parse.Object.extend(className)
  719. queryParamsData = new NewClass()
  720. queryParamsData.set('company', {
  721. className: 'Company',
  722. __type: 'Pointer',
  723. objectId: company
  724. })
  725. }
  726. for (let i in editFields) {
  727. let item = editFields[i]
  728. if (item.required && ((!editMap[item.key].val) || editMap[item.key].val?.length <= 0)) {
  729. wx.showToast({
  730. title: `${item.name} 为必填项,请补充`,
  731. icon: 'none'
  732. })
  733. return
  734. }
  735. if ((!editMap[item.key].val) || editMap[item.key].val?.length <= 0) continue
  736. if (item.type == 'Number') {
  737. editMapParse[item.key] = parseFloat(editMap[item.key].val)
  738. }
  739. else if(item.type == 'Pointer'){
  740. editMapParse[item.key] = {__type:'Pointer',className:item?.targetClass,objectId:editMap[item.key].val?.objectId}
  741. }
  742. else if (item.type == 'String' && item.view == 'edit-image') {
  743. editMapParse[item.key] = editMap[item.key].val[0]?.url
  744. } else if (item.type == 'Array') {
  745. if (item.view == 'edit-image') {
  746. editMapParse[item.key] = editMap[item.key].val?.map(val_item => val_item.url)
  747. } else if (item.view == 'pointer-array') {
  748. editMapParse[item.key] = editMap[item.key].val?.map(val_item => {
  749. return {
  750. __type: 'Pointer',
  751. className: item.targetClass,
  752. objectId: val_item.objectId
  753. }
  754. })
  755. }
  756. }
  757. console.log(item.key, editMapParse[item.key] || editMap[item.key].val)
  758. queryParamsData.set(item.key, editMapParse[item.key] || editMap[item.key].val)
  759. }
  760. console.log(editMap)
  761. console.log(queryParamsData)
  762. await queryParamsData.save()
  763. setTimeout(() => {
  764. wx.navigateBack({
  765. delta: 1
  766. })
  767. }, 1000);
  768. },
  769. /** 复制*/
  770. copyStr(e) {
  771. let {
  772. str
  773. } = e.currentTarget.dataset
  774. if (str) {
  775. wx.setClipboardData({
  776. data: str,
  777. success: () => {
  778. wx.showToast({
  779. title: '复制成功',
  780. icon: 'success',
  781. });
  782. },
  783. fail: (err) => {
  784. console.error('复制失败:', err);
  785. wx.showToast({
  786. title: '复制失败',
  787. icon: 'none',
  788. duration: 2000
  789. });
  790. }
  791. });
  792. } else {
  793. wx.showToast({
  794. title: '文本为空',
  795. icon: 'none',
  796. duration: 2000
  797. });
  798. }
  799. },
  800. }
  801. })