8
0

attach.vue 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. <template>
  2. <hc-new-card>
  3. <template #header>
  4. <div class="w-32">
  5. <el-select v-model="searchType" placeholder="选择搜索类型" filterable block>
  6. <el-option label="附件域名" value="domainUrl" />
  7. <el-option label="附件名称" value="name" />
  8. <el-option label="附件原名" value="originalName" />
  9. </el-select>
  10. </div>
  11. <div class="ml-2 w-60">
  12. <hc-search-input v-model="searchName" placeholder="请输入关键词" @search="searchClick" />
  13. </div>
  14. </template>
  15. <template #extra>
  16. <el-button hc-btn type="primary" @click="addUploadClick">
  17. <hc-icon name="upload" />
  18. <span>上传</span>
  19. </el-button>
  20. <el-button hc-btn type="danger" @click="delClick">
  21. <hc-icon name="delete-bin" />
  22. <span>删除</span>
  23. </el-button>
  24. </template>
  25. <hc-table
  26. :column="tableColumn" :datas="tableData" :loading="tableLoading"
  27. :is-index="false" is-new is-check :check-style="{ width: 29 }"
  28. @selection-change="tableCheckChange"
  29. >
  30. <template #attachSize="{ row }">{{ getRowFilterSize(row) }}</template>
  31. <template #action="{ row }">
  32. <el-link type="primary" :href="row.link">下载</el-link>
  33. <el-link v-del-com:[delRowClick]="row" type="danger">删除</el-link>
  34. </template>
  35. </hc-table>
  36. <template #action>
  37. <hc-pages :pages="searchForm" @change="pageChange" />
  38. </template>
  39. <!-- 上传文件 -->
  40. <hc-new-dialog v-model="isUploadShow" widths="460px" :footer="false" title="上传文件" @close="uploadClose">
  41. <hc-form-upload type="list" :src="uploadFileSrc" @upload="uploadItemUpload" @change="uploadItemChange" />
  42. </hc-new-dialog>
  43. <!-- 上传文件组件 -->
  44. <hc-upload-file ref="uploadFileRef" :options="uploadFileConfig" @success="uploadFileSuccess" @error="uploadFileError" />
  45. </hc-new-card>
  46. </template>
  47. <script setup>
  48. import { onActivated, ref } from 'vue'
  49. import { HcDelMsg, getHeader } from 'hc-vue3-ui'
  50. import { arrToId, filterSize, getArrValue } from 'js-fast-way'
  51. import mainApi from '~api/resource/attach'
  52. defineOptions({
  53. name: 'Attach',
  54. })
  55. //激活
  56. onActivated(() => {
  57. searchClick()
  58. })
  59. //搜索表单
  60. const searchType = ref('originalName')
  61. const searchName = ref('')
  62. const searchForm = ref({ current: 1, size: 30, total: 0 })
  63. //搜索
  64. const searchClick = () => {
  65. searchForm.value.current = 1
  66. getTableData()
  67. }
  68. //分页
  69. const pageChange = ({ current, size }) => {
  70. searchForm.value.current = current
  71. searchForm.value.size = size
  72. getTableData()
  73. }
  74. //表格数据
  75. const tableColumn = ref([
  76. { key: 'originalName', name: '原名', width: 240 },
  77. { key: 'extension', name: '拓展名', width: 80 },
  78. { key: 'attachSize', name: '大小', width: 100 },
  79. { key: 'link', name: '资源地址' },
  80. { key: 'updateTime', name: '上传日期', width: 160 },
  81. { key: 'action', name: '操作', width: 90, align: 'center' },
  82. ])
  83. //获取表格数据
  84. const tableLoading = ref(true)
  85. const tableData = ref([])
  86. const getTableData = async () => {
  87. tableData.value = []
  88. tableLoading.value = true
  89. const { error, code, data } = await mainApi.page({
  90. ...searchForm.value,
  91. total: null,
  92. })
  93. tableLoading.value = false
  94. if (!error && code === 200) {
  95. tableData.value = getArrValue(data['records'])
  96. searchForm.value.total = data['total']
  97. } else {
  98. tableData.value = []
  99. searchForm.value.total = 0
  100. }
  101. }
  102. //获取过滤后的大小
  103. const getRowFilterSize = ({ attachSize }) => {
  104. return attachSize ? filterSize(attachSize) : attachSize + 'B'
  105. }
  106. //表格被选择
  107. const tableCheckKeys = ref([])
  108. const tableCheckChange = (rows) => {
  109. tableCheckKeys.value = rows
  110. }
  111. //上传文件
  112. const uploadFileRef = ref(null)
  113. const uploadFileSrc = ref('')
  114. const uploadFileConfig = {
  115. url: '/api/blade-resource/oss/endpoint/put-file-attach',
  116. headers: getHeader(),
  117. accept: '*',
  118. accept_tip: '不限制',
  119. size: 1024,
  120. multiple: true,
  121. }
  122. //新增
  123. const isUploadShow = ref(false)
  124. const addUploadClick = () => {
  125. isUploadShow.value = true
  126. }
  127. const uploadItemUpload = () => {
  128. uploadFileRef.value?.selectFile()
  129. }
  130. const uploadItemChange = (src) => {
  131. uploadFileSrc.value = src
  132. }
  133. //文件上传成功
  134. const uploadFileSuccess = () => {
  135. window.$message.success('上传成功')
  136. getTableData()
  137. }
  138. //文件上传失败
  139. const uploadFileError = () => {
  140. window.$message.error('上传失败')
  141. }
  142. //关闭上传
  143. const uploadClose = () => {
  144. isUploadShow.value = false
  145. }
  146. //删除
  147. const delRowClick = async ({ item }, resolve)=> {
  148. const { code, msg } = await mainApi.del(item.id)
  149. if (code === 200) {
  150. resolve()
  151. window.$message.success('删除成功')
  152. getTableData().then()
  153. } else {
  154. resolve()
  155. window.$message.error(msg ?? '删除失败')
  156. }
  157. }
  158. //批量删除
  159. const delClick = () => {
  160. const rows = tableCheckKeys.value
  161. if (rows.length <= 0) {
  162. window.$message.warning('请选择要删除的数据')
  163. return false
  164. }
  165. //确认删除菜单
  166. HcDelMsg({}, async (instance, resolve) => {
  167. instance.confirmButtonLoading = true
  168. instance.confirmButtonText = '删除中...'
  169. //发起请求
  170. const ids = arrToId(rows)
  171. const { code, msg } = await mainApi.del(ids)
  172. //关闭弹窗的回调
  173. resolve()
  174. instance.confirmButtonLoading = false
  175. //处理结果
  176. if (code === 200) {
  177. window.$message.success('删除成功')
  178. getTableData().then()
  179. } else {
  180. window.$message.error(msg ?? '删除失败')
  181. }
  182. })
  183. }
  184. </script>