index.vue 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. <script setup>
  2. import {
  3. ref
  4. } from "vue";
  5. import {
  6. onLoad
  7. } from "@dcloudio/uni-app";
  8. import {
  9. getIntermediaryDetail,
  10. } from "@/api/work/intermediaryService.js";
  11. // 主要信息
  12. let pageData = ref({});
  13. const getDetail = id => {
  14. getIntermediaryDetail({
  15. id
  16. }).then(res => {
  17. pageData.value = res.data;
  18. conbineFileList(res.data.listFile)
  19. })
  20. }
  21. // 附件信息
  22. const conbineFileList = list => {
  23. // 照片附件
  24. listPhoto.value = list.filter(item => ['101', '102', '103', '104', '105'].includes(item.fileType));
  25. listPhotoPreview = listPhoto.value.map(item => item.fileId);
  26. // 视频附件
  27. listVideo.value = list.filter(item => ['202', '203'].includes(item.fileType));
  28. // 其他附件
  29. let exceptPhotoList = list.filter(item => !listPhoto.value.includes(item));
  30. uploadListFile.value = exceptPhotoList.filter(item => !listVideo.value.includes(item));
  31. }
  32. // 图片附件
  33. let listPhoto = ref([]);
  34. let listPhotoPreview = [];
  35. const showImage = index => {
  36. uni.previewImage({
  37. current: index,
  38. urls: listPhotoPreview,
  39. longPressActions: true,
  40. });
  41. }
  42. // 视频附件
  43. let listVideo = ref([]);
  44. //列表--文件
  45. let uploadListFile = ref([]);
  46. const showFile = url => {
  47. let downloadTask = uni.downloadFile({
  48. url,
  49. success: function(res) {
  50. isDownload.value = false;
  51. let filepathss = plus.io.convertLocalFileSystemURL(res.tempFilePath);
  52. setTimeout(
  53. () =>
  54. uni.openDocument({
  55. filePath: filepathss,
  56. showMenu: false,
  57. success: function() {},
  58. fail: function(failRes) {
  59. uni.showToast({
  60. title: '暂不支持此类型',
  61. duration: 2000,
  62. icon: "none",
  63. });
  64. }
  65. }),
  66. 1000
  67. );
  68. },
  69. fail: function(failRes) {
  70. isDownload.value = false;
  71. }
  72. });
  73. }
  74. let isDownload = ref(false); // 是否正在下载
  75. let downloadPrecent = ref(0); //下载进度
  76. onLoad(options => {
  77. getDetail(options.id);
  78. })
  79. </script>
  80. <template>
  81. <view class="container">
  82. <page-title>详情</page-title>
  83. <view class="cards-list">
  84. <view class="card only-card">
  85. <view class="card-item first-card-item">
  86. <view class="card-item-name">机构类型</view>
  87. <view class="card-item-content">{{pageData.typeName ?? "--"}}</view>
  88. </view>
  89. <view class="card-item">
  90. <view class="card-item-name">单位名称</view>
  91. <view class="card-item-content">{{pageData.title ?? "--"}}</view>
  92. </view>
  93. <view class="card-item">
  94. <view class="card-item-name">统一社会信用代码</view>
  95. <view class="card-item-content">{{pageData.groupCode ?? "--"}}</view>
  96. </view>
  97. <view class="card-item">
  98. <view class="card-item-name">单位地址</view>
  99. <view class="card-item-content">{{pageData.addr?? "--"}}</view>
  100. </view>
  101. <view class="card-item">
  102. <view class="card-item-name">法人姓名</view>
  103. <view class="card-item-content">{{pageData.legalName ?? "--"}}</view>
  104. </view>
  105. <view class="card-item">
  106. <view class="card-item-name">法人联系电话号码</view>
  107. <view class="card-item-content">{{pageData.legalPhone ?? "--"}}</view>
  108. </view>
  109. <view class="card-item">
  110. <view class="card-item-name">业务负责人姓名</view>
  111. <view class="card-item-content">{{pageData.businessOwner ?? "--"}}</view>
  112. </view>
  113. <view class="card-item">
  114. <view class="card-item-name">业务负责人职务</view>
  115. <view class="card-item-content">{{pageData.businessJob ?? "--"}}</view>
  116. </view>
  117. <view class="card-item">
  118. <view class="card-item-name">业务负责人电话</view>
  119. <view class="card-item-content">{{pageData.businessPhone ?? "--"}}</view>
  120. </view>
  121. <view class="card-item">
  122. <view class="card-item-name">该单位主要业务</view>
  123. </view>
  124. <view class="card-item">
  125. <view class="item-textarea">{{pageData.mainBusiness ?? "--"}}</view>
  126. </view>
  127. <view class="card-item">
  128. <view class="card-item-name">备注</view>
  129. </view>
  130. <view class="card-item">
  131. <view class="item-textarea">{{pageData.remark ?? "--"}}</view>
  132. </view>
  133. </view>
  134. <view class="card">
  135. <!-- 附件(照片) -->
  136. <view class="card-item">
  137. <view class="card-item-name">图片附件</view>
  138. <view class="card-item-content" v-if="listPhoto.length === 0">无</view>
  139. </view>
  140. <view class="card-item first-card-item photo-item">
  141. <image :src="item.fileId" v-for="(item,index) in listPhoto" :key="index" @click="showImage(index)"></image>
  142. </view>
  143. <!-- 附件(视频) -->
  144. <view class="card-item">
  145. <view class="card-item-name" style="min-width: 156rpx;">视频附件</view>
  146. <view class="card-item-content" v-if="listVideo.length === 0">无</view>
  147. </view>
  148. <view class="video-item">
  149. <video :src="item.fileId" v-for="(item,index) in listVideo" :key="index"></video>
  150. </view>
  151. <!-- 附件(文件) -->
  152. <view class="card-item">
  153. <view class="card-item-name" style="min-width: 156rpx;">其他附件</view>
  154. <view class="upload-file-area">
  155. <view class="upload-file-name" v-for="(item,index) in uploadListFile" :key="index"
  156. @click="showFile(item.fileId)">
  157. {{item.fileName}}
  158. </view>
  159. </view>
  160. </view>
  161. </view>
  162. <view class="gap-bottom"></view>
  163. <u-overlay :show="isDownload">
  164. <view class="download-box">
  165. <view class="loading-box">
  166. <view class="loading-icon">
  167. <u-loading-icon v-if="downloadPrecent !== '100'" size="40"></u-loading-icon>
  168. <u-icon v-else name="checkmark" size="40"></u-icon>
  169. </view>
  170. <view class="loading-text">附件下载中</view>
  171. <view class="loading-progress">
  172. <u-line-progress :percentage="downloadPrecent" activeColor="#1869F6"></u-line-progress>
  173. </view>
  174. </view>
  175. </view>
  176. </u-overlay>
  177. </view>
  178. </view>
  179. </template>
  180. <style lang="scss" scoped>
  181. .item-textarea {
  182. width: 100%;
  183. min-height: 150rpx;
  184. padding: 20rpx;
  185. box-sizing: border-box;
  186. background: #EAF0FA;
  187. border-radius: 20rpx;
  188. }
  189. .photo-item {
  190. display: flex;
  191. justify-content: flex-start;
  192. flex-wrap: wrap;
  193. margin-top: 20rpx;
  194. image {
  195. width: 160rpx;
  196. height: 160rpx;
  197. margin: 20rpx 40rpx 20rpx 0;
  198. }
  199. }
  200. .video-item {
  201. width: 480rpx;
  202. min-height: 270rpx;
  203. margin: 20rpx auto;
  204. video {
  205. width: 480rpx;
  206. height: 270rpx;
  207. }
  208. }
  209. .upload-file-area {
  210. min-height: 32rpx;
  211. }
  212. </style>