index.js 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. const _Http = getApp().globalData.http;
  2. import {
  3. fileList
  4. } from "../../utils/matchingFeilType";
  5. Component({
  6. properties: {
  7. files: {
  8. type: Object,
  9. value: {
  10. images: [],
  11. viewImages: [],
  12. videos: [],
  13. viewVideos: [],
  14. files: []
  15. },
  16. },
  17. delete: {
  18. type: Boolean
  19. },
  20. onDeteleFiles: {
  21. type: Function
  22. },
  23. padding: {
  24. type: String,
  25. value: '0 30rpx'
  26. },
  27. strict: {
  28. type: Boolean
  29. }
  30. },
  31. methods: {
  32. /* 预览媒体 */
  33. viewMedias(e) {
  34. const {
  35. index,
  36. type
  37. } = e.currentTarget.dataset;
  38. wx.previewMedia({
  39. current: index,
  40. sources: type == 'image' ? this.data.files.viewImages : this.data.files.viewVideos,
  41. })
  42. },
  43. /* 预览文档 */
  44. viewFlies(e) {
  45. const {
  46. item
  47. } = e.currentTarget.dataset;
  48. wx.showLoading({
  49. title: '加载中...',
  50. })
  51. wx.downloadFile({
  52. url: item.url,
  53. complete({
  54. statusCode,
  55. tempFilePath
  56. }) {
  57. if (statusCode != 200) return;
  58. wx.openDocument({
  59. filePath: tempFilePath,
  60. fileType: item.postfix,
  61. showMenu: true,
  62. complete({
  63. errMsg
  64. }) {
  65. wx.hideLoading();
  66. if (errMsg != "openDocument:ok") getApp().globalData.Language.showToast('打开失败')
  67. }
  68. })
  69. }
  70. })
  71. },
  72. /* 删除文件 */
  73. handleDeleteFile(e) {
  74. let that = this;
  75. if (this.data.strict) {
  76. wx.showModal({
  77. title: getApp().globalData.Language.getMapText('提示'),
  78. content: getApp().globalData.Language.getMapText('是否确定删除该附件'),
  79. cancelText: getApp().globalData.Language.getMapText('取消'),
  80. confirmText: getApp().globalData.Language.getMapText('确定'),
  81. complete: (res) => {
  82. if (res.confirm) start()
  83. }
  84. })
  85. } else {
  86. start()
  87. }
  88. function start() {
  89. let item = e.currentTarget.dataset.item || e.currentTarget.dataset.item;
  90. _Http.basic({
  91. "classname": "system.attachment.Attachment",
  92. "method": "deleteFileLink",
  93. "content": {
  94. "linksids": [item.linksid]
  95. }
  96. }).then(res => {
  97. if (res.code != '1') return wx.showToast({
  98. title: res.data,
  99. icon: "none"
  100. });
  101. let files = that.data.files;
  102. switch (item.fileType) {
  103. case "image":
  104. files.images = files.images.filter(v => v.url != item.url);
  105. files.viewImages = files.viewImages.filter(v => v.url != item.url);
  106. break;
  107. case "video":
  108. files.videos = files.videos.filter(v => v.url != item.url);
  109. files.viewVideos = files.viewVideos.filter(v => v.url != item.url);
  110. break;
  111. default:
  112. files.files = files.files.filter(v => v.attachmentid != item.attachmentid);
  113. break;
  114. };
  115. that.setData({
  116. files
  117. });
  118. that.triggerEvent("onDeteleFiles", that.getFiles())
  119. });
  120. }
  121. },
  122. /* 处理附件 */
  123. handleFiles(arr, init = false) {
  124. let files = init ? {
  125. images: [],
  126. viewImages: [],
  127. videos: [],
  128. viewVideos: [],
  129. files: []
  130. } : this.data.files,
  131. list = fileList(arr);
  132. list.forEach(v => {
  133. switch (v.fileType) {
  134. case "video":
  135. files.videos.push(v)
  136. files.viewVideos.push({
  137. url: v.url,
  138. type: "video",
  139. poster: v.subfiles[0].url
  140. })
  141. break;
  142. case "image":
  143. files.images.push(v)
  144. files.viewImages.push({
  145. url: v.url,
  146. type: "image"
  147. })
  148. break;
  149. default:
  150. files.files.push(v)
  151. break;
  152. }
  153. });
  154. this.setData({
  155. files
  156. })
  157. },
  158. /* 初始化数据 */
  159. initData() {
  160. this.setData({
  161. files: {
  162. images: [],
  163. viewImages: [],
  164. videos: [],
  165. viewVideos: [],
  166. files: []
  167. }
  168. })
  169. },
  170. /* 返回数据ID数组 用来换绑数据 */
  171. getFiles() {
  172. let data = {
  173. attachmentids: [],
  174. list: [],
  175. },
  176. files = this.data.files;
  177. files.files.forEach(v => {
  178. data.attachmentids.push(v.attachmentid);
  179. data.list.push(v);
  180. })
  181. files.images.forEach(v => {
  182. data.attachmentids.push(v.attachmentid);
  183. data.list.push(v);
  184. })
  185. files.videos.forEach(v => {
  186. data.attachmentids.push(v.attachmentid);
  187. data.list.push(v);
  188. });
  189. return data
  190. },
  191. deleteAll() {
  192. let linksids = this.getFiles().list.map(v => v.linksid);
  193. if (linksids.length) _Http.basic({
  194. "classname": "system.attachment.Attachment",
  195. "method": "deleteFileLink",
  196. "content": {
  197. linksids
  198. }
  199. }).then(res => {
  200. console.log("删除所有未保存附件", linksids, res)
  201. if (res.code != '1') return wx.showToast({
  202. title: res.data,
  203. icon: "none"
  204. });
  205. });
  206. }
  207. }
  208. })