index.js 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  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: getApp().globalData.Language.getMapText('加载中...'),
  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") getApp().globalData.Language.showToast('打开失败')
  76. }
  77. })
  78. }
  79. })
  80. },
  81. /* 删除文件 */
  82. handleDeleteFile(e) {
  83. let that = this;
  84. if (this.data.strict) {
  85. wx.showModal({
  86. title: getApp().globalData.Language.getMapText('提示'),
  87. content: getApp().globalData.Language.getMapText('是否确定删除该附件'),
  88. cancelText: getApp().globalData.Language.getMapText('取消'),
  89. confirmText: getApp().globalData.Language.getMapText('确定'),
  90. complete: (res) => {
  91. if (res.confirm) start()
  92. }
  93. })
  94. } else {
  95. start()
  96. }
  97. function start() {
  98. let item = e.currentTarget.dataset.item || e.currentTarget.dataset.item;
  99. _Http.basic({
  100. "classname": "system.attachment.Attachment",
  101. "method": "deleteFileLink",
  102. "content": {
  103. "linksids": [item.linksid]
  104. }
  105. }).then(res => {
  106. if (res.code != '1') return wx.showToast({
  107. title: res.data,
  108. icon: "none"
  109. });
  110. let files = that.data.files;
  111. switch (item.fileType) {
  112. case "image":
  113. files.images = files.images.filter(v => v.url != item.url);
  114. files.viewImages = files.viewImages.filter(v => v.url != item.url);
  115. break;
  116. case "video":
  117. files.videos = files.videos.filter(v => v.url != item.url);
  118. files.viewVideos = files.viewVideos.filter(v => v.url != item.url);
  119. break;
  120. default:
  121. files.files = files.files.filter(v => v.attachmentid != item.attachmentid);
  122. break;
  123. };
  124. that.setData({
  125. files
  126. });
  127. that.triggerEvent("onDeteleFiles", that.getFiles())
  128. });
  129. }
  130. },
  131. /* 处理附件 */
  132. handleFiles(arr, init = false) {
  133. let files = init ? {
  134. images: [],
  135. viewImages: [],
  136. videos: [],
  137. viewVideos: [],
  138. files: []
  139. } : this.data.files,
  140. list = fileList(arr);
  141. list.forEach(v => {
  142. switch (v.fileType) {
  143. case "video":
  144. files.videos.push(v)
  145. files.viewVideos.push({
  146. url: v.url,
  147. type: "video",
  148. poster: v.subfiles[0].url
  149. })
  150. break;
  151. case "image":
  152. files.images.push(v)
  153. files.viewImages.push({
  154. url: v.url,
  155. type: "image"
  156. })
  157. break;
  158. default:
  159. files.files.push(v)
  160. break;
  161. }
  162. });
  163. this.setData({
  164. files
  165. })
  166. },
  167. /* 初始化数据 */
  168. initData() {
  169. this.setData({
  170. files: {
  171. images: [],
  172. viewImages: [],
  173. videos: [],
  174. viewVideos: [],
  175. files: []
  176. }
  177. })
  178. },
  179. /* 返回数据ID数组 用来换绑数据 */
  180. getFiles() {
  181. let data = {
  182. attachmentids: [],
  183. list: [],
  184. },
  185. files = this.data.files;
  186. files.files.forEach(v => {
  187. data.attachmentids.push(v.attachmentid);
  188. data.list.push(v);
  189. })
  190. files.images.forEach(v => {
  191. data.attachmentids.push(v.attachmentid);
  192. data.list.push(v);
  193. })
  194. files.videos.forEach(v => {
  195. data.attachmentids.push(v.attachmentid);
  196. data.list.push(v);
  197. });
  198. return data
  199. },
  200. deleteAll() {
  201. let linksids = this.getFiles().list.map(v => v.linksid);
  202. if (linksids.length) _Http.basic({
  203. "classname": "system.attachment.Attachment",
  204. "method": "deleteFileLink",
  205. "content": {
  206. linksids
  207. }
  208. }).then(res => {
  209. console.log("删除所有未保存附件", linksids, res)
  210. if (res.code != '1') return wx.showToast({
  211. title: res.data,
  212. icon: "none"
  213. });
  214. });
  215. }
  216. }
  217. })