index.vue 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. <template>
  2. <ContentWrap>
  3. <!-- 搜索工作栏 -->
  4. <el-form
  5. class="-mb-15px"
  6. :model="queryParams"
  7. ref="queryFormRef"
  8. :inline="true"
  9. label-width="68px"
  10. >
  11. <el-form-item label="照片组名称" prop="groupName" label-width="100px">
  12. <el-input
  13. v-model="queryParams.groupName"
  14. placeholder="请输入照片组名称"
  15. clearable
  16. @keyup.enter="handleQuery"
  17. class="!w-240px"
  18. />
  19. </el-form-item>
  20. <el-form-item label="照片组时间" prop="groupDate" label-width="100px">
  21. <el-date-picker
  22. v-model="queryParams.groupDate"
  23. value-format="YYYY-MM-DD HH:mm:ss"
  24. type="daterange"
  25. start-placeholder="开始日期"
  26. end-placeholder="结束日期"
  27. :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
  28. class="!w-220px"
  29. />
  30. </el-form-item>
  31. <el-form-item label="创建时间" prop="createTime">
  32. <el-date-picker
  33. v-model="queryParams.createTime"
  34. value-format="YYYY-MM-DD HH:mm:ss"
  35. type="daterange"
  36. start-placeholder="开始日期"
  37. end-placeholder="结束日期"
  38. :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
  39. class="!w-220px"
  40. />
  41. </el-form-item>
  42. <el-form-item>
  43. <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
  44. <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
  45. <el-button
  46. type="primary"
  47. plain
  48. @click="handleImport "
  49. v-hasPermi="['museums:photo-group:create']"
  50. >
  51. <Icon icon="ep:plus" class="mr-5px" /> 新增
  52. </el-button>
  53. <!-- <el-button-->
  54. <!-- type="warning"-->
  55. <!-- plain-->
  56. <!-- @click="handleImport"-->
  57. <!-- >-->
  58. <!-- <Icon icon="ep:upload" /> 批量导入图片-->
  59. <!-- </el-button>-->
  60. <el-button
  61. type="success"
  62. plain
  63. @click="handleExport"
  64. :loading="exportLoading"
  65. v-hasPermi="['museums:photo-group:export']"
  66. >
  67. <Icon icon="ep:download" class="mr-5px" /> 导出
  68. </el-button>
  69. </el-form-item>
  70. </el-form>
  71. </ContentWrap>
  72. <!-- 列表 -->
  73. <ContentWrap>
  74. <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
  75. <el-table-column label="序号" align="center" prop="id" width="100"/>
  76. <el-table-column label="照片组名称" align="center" prop="groupName" width="200"/>
  77. <el-table-column
  78. label="照片组时间"
  79. align="center"
  80. prop="groupDate"
  81. :formatter="dateFormatter"
  82. width="200"
  83. />
  84. <el-table-column label="照片组简介" align="center" prop="groupDescription" />
  85. <!-- <el-table-column-->
  86. <!-- label="创建时间"-->
  87. <!-- align="center"-->
  88. <!-- prop="createdAt"-->
  89. <!-- :formatter="dateFormatter"-->
  90. <!-- width="180px"-->
  91. <!-- />-->
  92. <el-table-column
  93. label="创建时间"
  94. align="center"
  95. prop="createTime"
  96. :formatter="dateFormatter"
  97. width="300"
  98. />
  99. <!-- <el-table-column label="照片组上传" align="center" prop="uploadPhotos" >-->
  100. <!-- <el-image-->
  101. <!-- style="width: 40px; height:40px"-->
  102. <!-- class="h-80px w-80px"-->
  103. <!-- lazy-->
  104. <!-- :src=""-->
  105. <!-- :preview-src-list="[]"-->
  106. <!-- preview-teleported-->
  107. <!-- fit="cover"-->
  108. <!-- />-->
  109. <!-- </el-table-column>-->
  110. <el-table-column label="操作" align="center" width="160" fixed="right">
  111. <template #default="scope">
  112. <el-button
  113. link
  114. @click="viewImageDetails(scope.row.id)"
  115. v-hasPermi="['museums:photos:query']"
  116. >查看</el-button>
  117. <el-button
  118. link
  119. type="primary"
  120. @click="openForm('update', scope.row.id)"
  121. >
  122. 编辑
  123. </el-button>
  124. <el-button
  125. link
  126. type="danger"
  127. @click="handleDelete(scope.row.id)"
  128. v-hasPermi="['museums:photo-group:delete']"
  129. >
  130. 删除
  131. </el-button>
  132. </template>
  133. </el-table-column>
  134. </el-table>
  135. <!-- 分页 -->
  136. <Pagination
  137. :total="total"
  138. v-model:page="queryParams.pageNo"
  139. v-model:limit="queryParams.pageSize"
  140. @pagination="getList"
  141. />
  142. </ContentWrap>
  143. <!-- 表单弹窗:添加/修改 -->
  144. <PhotoGroupForm ref="formRef" @success="getList" />
  145. <ImageImportForm ref="importFormRef" @success="getList" />
  146. </template>
  147. <script setup lang="ts">
  148. import { dateFormatter } from '@/utils/formatTime'
  149. import download from '@/utils/download'
  150. import { PhotoGroupApi, PhotoGroupVO } from '@/api/museums/photogroup'
  151. import PhotoGroupForm from './PhotoGroupForm.vue'
  152. import ImageImportForm from './ImageImportForm .vue'
  153. /** 博物馆照片组 列表 */
  154. defineOptions({ name: 'PhotoGroup' })
  155. const message = useMessage() // 消息弹窗
  156. const { t } = useI18n() // 国际化
  157. const loading = ref(true) // 列表的加载中
  158. const list = ref<PhotoGroupVO[]>([]) // 列表的数据
  159. const total = ref(0) // 列表的总页数
  160. const queryParams = reactive({
  161. pageNo: 1,
  162. pageSize: 10,
  163. groupName: undefined,
  164. groupDate: [],
  165. groupDescription: undefined,
  166. // createdAt: undefined,
  167. createdAt: [],
  168. createTime: [],
  169. uploadPhotos: undefined
  170. })
  171. const queryFormRef = ref() // 搜索的表单
  172. const exportLoading = ref(false) // 导出的加载中
  173. /** 查询列表 */
  174. const getList = async () => {
  175. loading.value = true
  176. try {
  177. const data = await PhotoGroupApi.getPhotoGroupPage(queryParams)
  178. console.log(data)
  179. list.value = data.list
  180. total.value = data.total
  181. } finally {
  182. loading.value = false
  183. }
  184. }
  185. /** 搜索按钮操作 */
  186. const handleQuery = () => {
  187. queryParams.pageNo = 1
  188. getList()
  189. }
  190. /** 重置按钮操作 */
  191. const resetQuery = () => {
  192. queryFormRef.value.resetFields()
  193. handleQuery()
  194. }
  195. /** 添加/修改操作 */
  196. const formRef = ref()
  197. const openForm = (type: string, id?: number) => {
  198. formRef.value.open(type, id)
  199. }
  200. /** 删除按钮操作 */
  201. const handleDelete = async (id: number) => {
  202. try {
  203. // 删除的二次确认
  204. await message.delConfirm()
  205. // 发起删除
  206. await PhotoGroupApi.deletePhotoGroup(id)
  207. message.success(t('common.delSuccess'))
  208. // 刷新列表
  209. await getList()
  210. } catch {}
  211. }
  212. /** 批量图片导入 */
  213. const importFormRef = ref()
  214. const handleImport = () => {
  215. importFormRef.value.open()
  216. }
  217. /** 导出按钮操作 */
  218. const handleExport = async () => {
  219. try {
  220. // 导出的二次确认
  221. await message.exportConfirm()
  222. // 发起导出
  223. exportLoading.value = true
  224. const data = await PhotoGroupApi.exportPhotoGroup(queryParams)
  225. download.excel(data, '博物馆照片组.xls')
  226. } catch {
  227. } finally {
  228. exportLoading.value = false
  229. }
  230. }
  231. /** 初始化 **/
  232. onMounted(() => {
  233. getList()
  234. })
  235. /** 查看页面 **/
  236. import { useRouter } from 'vue-router';
  237. const router = useRouter();
  238. const viewImageDetails=(groupId: number) => {
  239. router.push({
  240. name: 'ImageDetails',
  241. query: {
  242. groupId: groupId,
  243. }
  244. })
  245. }
  246. </script>