Create Gallery page.

pull/9/head
ruibaby 6 years ago
parent 9c5d072688
commit ae5ffd9d3a

@ -0,0 +1,23 @@
import service from '@/utils/service'
const baseUrl = '/api/admin/galleries'
const galleryApi = {}
galleryApi.query = params => {
return service({
url: baseUrl,
params: params,
method: 'get'
})
}
galleryApi.create = (gallery) => {
return service({
url: baseUrl,
data: gallery,
method: 'post'
})
}
export default galleryApi

@ -142,6 +142,7 @@
v-model="drawerVisiable" v-model="drawerVisiable"
v-if="selectAttachment" v-if="selectAttachment"
:attachment="selectAttachment" :attachment="selectAttachment"
:addToGallery="true"
@delete="handleDelete" @delete="handleDelete"
/> />
</page-view> </page-view>

@ -120,6 +120,18 @@
</a-row> </a-row>
<a-divider /> <a-divider />
<div class="bottom-control"> <div class="bottom-control">
<a-popconfirm
title="你确定要添加到图库?"
@confirm="handleAddToGallery"
okText="确定"
cancelText="取消"
v-if="addToGallery"
>
<a-button
type="dashed"
style="marginRight: 8px"
>添加到图库</a-button>
</a-popconfirm>
<a-popconfirm <a-popconfirm
title="你确定要删除该附件?" title="你确定要删除该附件?"
@confirm="deleteAttachment" @confirm="deleteAttachment"
@ -135,6 +147,7 @@
<script> <script>
import { mixin, mixinDevice } from '@/utils/mixin.js' import { mixin, mixinDevice } from '@/utils/mixin.js'
import attachmentApi from '@/api/attachment' import attachmentApi from '@/api/attachment'
import galleryApi from '@/api/gallery'
export default { export default {
name: 'AttachmentDetailDrawer', name: 'AttachmentDetailDrawer',
@ -142,7 +155,8 @@ export default {
data() { data() {
return { return {
detailLoading: true, detailLoading: true,
editable: false editable: false,
gallery: {}
} }
}, },
model: { model: {
@ -154,6 +168,11 @@ export default {
type: Object, type: Object,
required: true required: true
}, },
addToGallery: {
type: Boolean,
required: false,
default: false
},
visiable: { visiable: {
type: Boolean, type: Boolean,
required: false, required: false,
@ -220,6 +239,18 @@ export default {
this.$message.error('复制失败') this.$message.error('复制失败')
}) })
}, },
handleAddToGallery() {
this.gallery['name'] = this.attachment.name
this.gallery['thumbnail'] = this.attachment.thumbPath
this.gallery['url'] = this.attachment.path
this.gallery['description'] = ''
this.gallery['takeTime'] = ''
this.gallery['location'] = ''
this.gallery['team'] = ''
galleryApi.create(this.gallery).then(response => {
this.$message.success('添加成功!')
})
},
onClose() { onClose() {
this.$emit('close', false) this.$emit('close', false)
} }

@ -46,11 +46,6 @@
slot="action" slot="action"
slot-scope="text, record" slot-scope="text, record"
> >
<a
href="javascript:;"
@click="viewPage(record.id)"
>查看</a>
<a-divider type="vertical" />
<router-link <router-link
:to="{name:'LinkList'}" :to="{name:'LinkList'}"
v-if="record.id==1" v-if="record.id==1"
@ -69,6 +64,11 @@
> >
<a href="javascript:void(0);">编辑</a> <a href="javascript:void(0);">编辑</a>
</router-link> </router-link>
<a-divider type="vertical" />
<a
href="javascript:;"
@click="viewPage(record.id)"
>查看</a>
</span> </span>
</a-table> </a-table>
</a-tab-pane> </a-tab-pane>

@ -1,10 +1,262 @@
<template> <template>
<div class="page-header-index-wide">Link List</div> <div class="page-header-index-wide">
<a-row
:gutter="12"
type="flex"
align="middle"
>
<a-col
:span="24"
class="search-box"
>
<a-card :bordered="false">
<div class="table-page-search-wrapper">
<a-form layout="inline">
<a-row :gutter="48">
<a-col
:md="6"
:sm="24"
>
<a-form-item label="关键词">
<a-input v-model="queryParam.keyword" />
</a-form-item>
</a-col>
<a-col
:md="6"
:sm="24"
>
<a-form-item label="分组">
<a-select v-model="queryParam.attachmentType">
<a-select-option
v-for="item in Object.keys(attachmentType)"
:key="item"
:value="item"
>{{ attachmentType[item].text }}</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col
:md="6"
:sm="24"
>
<span class="table-page-search-submitButtons">
<a-button
type="primary"
@click="loadAttachments(true)"
>查询</a-button>
<a-button
style="margin-left: 8px;"
@click="resetParam"
>重置</a-button>
</span>
</a-col>
</a-row>
</a-form>
</div>
<div class="table-operator">
<a-button
type="primary"
icon="plus"
@click="showUploadModal"
>添加</a-button>
</div>
</a-card>
</a-col>
<a-col :span="24">
<a-list
:grid="{ gutter: 12, xs: 1, sm: 2, md: 4, lg: 6, xl: 6, xxl: 6 }"
:dataSource="galleries"
:loading="listLoading"
>
<a-list-item
slot="renderItem"
slot-scope="item, index"
:key="index"
>
<a-card
:bodyStyle="{ padding: 0 }"
hoverable
@click="showDetailDrawer(item)"
>
<div class="attach-thumb">
<img :src="item.thumbnail">
</div>
<a-card-meta>
<ellipsis
:length="isMobile()?36:18"
tooltip
slot="description"
>{{ item.name }}</ellipsis>
</a-card-meta>
</a-card>
</a-list-item>
</a-list>
</a-col>
</a-row>
<a-row
type="flex"
justify="end"
>
<a-pagination
:total="pagination.total"
:defaultPageSize="pagination.size"
:pageSizeOptions="['18', '36', '54','72','90','108']"
showSizeChanger
@change="handlePaginationChange"
@showSizeChange="handlePaginationChange"
/>
</a-row>
<AttachmentDetailDrawer
v-model="drawerVisiable"
v-if="selectAttachment"
:attachment="selectAttachment"
@delete="handleDelete"
/>
</div>
</template> </template>
<script> <script>
export default {} import { mixin, mixinDevice } from '@/utils/mixin.js'
import AttachmentDetailDrawer from '../../attachment/components/AttachmentDetailDrawer'
import attachmentApi from '@/api/attachment'
import galleryApi from '@/api/gallery'
export default {
components: {
AttachmentDetailDrawer
},
mixins: [mixin, mixinDevice],
data() {
return {
attachmentType: attachmentApi.type,
listLoading: true,
selectAttachment: {},
attachments: [],
galleries: [],
mediaTypes: [],
editable: false,
pagination: {
page: 1,
size: 18,
sort: null
},
queryParam: {
page: 0,
size: 18,
sort: null,
keyword: null,
mediaType: null,
attachmentType: null
},
drawerVisiable: false
}
},
computed: {
formattedDatas() {
return this.attachments.map(attachment => {
attachment.typeProperty = this.attachmentType[attachment.type]
return attachment
})
}
},
created() {
this.loadAttachments()
this.loadGalleries()
this.loadMediaTypes()
},
methods: {
loadAttachments(isSearch) {
this.queryParam.page = this.pagination.page - 1
this.queryParam.size = this.pagination.size
this.queryParam.sort = this.pagination.sort
if (isSearch) {
this.queryParam.page = 0
}
this.listLoading = true
attachmentApi.query(this.queryParam).then(response => {
this.attachments = response.data.data.content
this.pagination.total = response.data.data.total
this.listLoading = false
})
},
loadGalleries(isSearch) {
this.queryParam.page = this.pagination.page - 1
this.queryParam.size = this.pagination.size
this.queryParam.sort = this.pagination.sort
if (isSearch) {
this.queryParam.page = 0
}
this.listLoading = true
galleryApi.query(this.queryParam).then(response => {
this.galleries = response.data.data.content
this.pagination.total = response.data.data.total
this.listLoading = false
})
},
loadMediaTypes() {
attachmentApi.getMediaTypes().then(response => {
this.mediaTypes = response.data.data
})
},
showDetailDrawer(attachment) {
this.selectAttachment = attachment
this.drawerVisiable = true
},
showUploadModal() {
this.uploadVisible = true
},
handlePaginationChange(page, size) {
this.$log.debug(`Current: ${page}, PageSize: ${size}`)
this.pagination.page = page
this.pagination.size = size
this.loadAttachments()
},
resetParam() {
this.queryParam.keyword = null
this.queryParam.mediaType = null
this.queryParam.attachmentType = null
this.loadAttachments()
},
handleDelete(attachment) {
this.loadAttachments()
}
}
}
</script> </script>
<style scoped> <style lang="less" scoped>
.ant-divider-horizontal {
margin: 24px 0 12px 0;
}
.search-box {
padding-bottom: 12px;
}
.attach-thumb {
width: 100%;
margin: 0 auto;
position: relative;
padding-bottom: 56%;
overflow: hidden;
img {
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
}
}
.ant-card-meta {
padding: 0.8rem;
}
.attach-detail-img img {
width: 100%;
}
.table-operator {
margin-bottom: 0;
}
</style> </style>

Loading…
Cancel
Save