index.vue 7.6 KB

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