index.js 6.9 KB

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