mirror of https://github.com/halo-dev/halo-admin
Change some method name.
parent
3b33a34db3
commit
7618dbc08c
|
@ -223,6 +223,10 @@ export const constantRouterMap = [
|
||||||
path: '/login',
|
path: '/login',
|
||||||
component: () => import('@/views/user/Login')
|
component: () => import('@/views/user/Login')
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: '/install',
|
||||||
|
component: () => import('@/views/system/Installation')
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: '/404',
|
path: '/404',
|
||||||
component: () => import(/* webpackChunkName: "fail" */ '@/views/exception/404')
|
component: () => import(/* webpackChunkName: "fail" */ '@/views/exception/404')
|
||||||
|
|
|
@ -60,7 +60,7 @@
|
||||||
>查询</a-button>
|
>查询</a-button>
|
||||||
<a-button
|
<a-button
|
||||||
style="margin-left: 8px;"
|
style="margin-left: 8px;"
|
||||||
@click="resetParam"
|
@click="handleResetParam"
|
||||||
>重置</a-button>
|
>重置</a-button>
|
||||||
</span>
|
</span>
|
||||||
</a-col>
|
</a-col>
|
||||||
|
@ -71,7 +71,7 @@
|
||||||
<a-button
|
<a-button
|
||||||
type="primary"
|
type="primary"
|
||||||
icon="plus"
|
icon="plus"
|
||||||
@click="showUploadModal"
|
@click="handleShowUploadModal"
|
||||||
>上传</a-button>
|
>上传</a-button>
|
||||||
</div>
|
</div>
|
||||||
</a-card>
|
</a-card>
|
||||||
|
@ -90,7 +90,7 @@
|
||||||
<a-card
|
<a-card
|
||||||
:bodyStyle="{ padding: 0 }"
|
:bodyStyle="{ padding: 0 }"
|
||||||
hoverable
|
hoverable
|
||||||
@click="showDetailDrawer(item)"
|
@click="handleShowDetailDrawer(item)"
|
||||||
>
|
>
|
||||||
<div class="attach-thumb">
|
<div class="attach-thumb">
|
||||||
<img :src="item.thumbPath">
|
<img :src="item.thumbPath">
|
||||||
|
@ -215,11 +215,11 @@ export default {
|
||||||
this.mediaTypes = response.data.data
|
this.mediaTypes = response.data.data
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
showDetailDrawer(attachment) {
|
handleShowDetailDrawer(attachment) {
|
||||||
this.selectAttachment = attachment
|
this.selectAttachment = attachment
|
||||||
this.drawerVisiable = true
|
this.drawerVisiable = true
|
||||||
},
|
},
|
||||||
showUploadModal() {
|
handleShowUploadModal() {
|
||||||
this.uploadVisible = true
|
this.uploadVisible = true
|
||||||
},
|
},
|
||||||
handleUploadSuccess() {
|
handleUploadSuccess() {
|
||||||
|
@ -232,7 +232,7 @@ export default {
|
||||||
this.pagination.size = size
|
this.pagination.size = size
|
||||||
this.loadAttachments()
|
this.loadAttachments()
|
||||||
},
|
},
|
||||||
resetParam() {
|
handleResetParam() {
|
||||||
this.queryParam.keyword = null
|
this.queryParam.keyword = null
|
||||||
this.queryParam.mediaType = null
|
this.queryParam.mediaType = null
|
||||||
this.queryParam.attachmentType = null
|
this.queryParam.attachmentType = null
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
>
|
>
|
||||||
<a-input
|
<a-input
|
||||||
v-model="attachment.name"
|
v-model="attachment.name"
|
||||||
@blur="updateAttachment"
|
@blur="doUpdateAttachment"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
<template
|
<template
|
||||||
|
@ -94,7 +94,7 @@
|
||||||
<a href="javascript:void(0);">
|
<a href="javascript:void(0);">
|
||||||
<a-icon
|
<a-icon
|
||||||
type="copy"
|
type="copy"
|
||||||
@click="doCopyNormalLink"
|
@click="handleCopyNormalLink"
|
||||||
/>
|
/>
|
||||||
</a>
|
</a>
|
||||||
</span>
|
</span>
|
||||||
|
@ -108,7 +108,7 @@
|
||||||
<a href="javascript:void(0);">
|
<a href="javascript:void(0);">
|
||||||
<a-icon
|
<a-icon
|
||||||
type="copy"
|
type="copy"
|
||||||
@click="doCopyMarkdownLink"
|
@click="handleCopyMarkdownLink"
|
||||||
/>
|
/>
|
||||||
</a>
|
</a>
|
||||||
</span>
|
</span>
|
||||||
|
@ -134,7 +134,7 @@
|
||||||
</a-popconfirm>
|
</a-popconfirm>
|
||||||
<a-popconfirm
|
<a-popconfirm
|
||||||
title="你确定要删除该附件?"
|
title="你确定要删除该附件?"
|
||||||
@confirm="deleteAttachment"
|
@confirm="handleDeleteAttachment"
|
||||||
okText="确定"
|
okText="确定"
|
||||||
cancelText="取消"
|
cancelText="取消"
|
||||||
>
|
>
|
||||||
|
@ -198,7 +198,7 @@ export default {
|
||||||
this.detailLoading = false
|
this.detailLoading = false
|
||||||
}, 500)
|
}, 500)
|
||||||
},
|
},
|
||||||
deleteAttachment() {
|
handleDeleteAttachment() {
|
||||||
attachmentApi.delete(this.attachment.id).then(response => {
|
attachmentApi.delete(this.attachment.id).then(response => {
|
||||||
this.$message.success('删除成功!')
|
this.$message.success('删除成功!')
|
||||||
this.$emit('delete', this.attachment)
|
this.$emit('delete', this.attachment)
|
||||||
|
@ -208,14 +208,14 @@ export default {
|
||||||
handleEditName() {
|
handleEditName() {
|
||||||
this.editable = !this.editable
|
this.editable = !this.editable
|
||||||
},
|
},
|
||||||
updateAttachment() {
|
doUpdateAttachment() {
|
||||||
attachmentApi.update(this.attachment.id, this.attachment).then(response => {
|
attachmentApi.update(this.attachment.id, this.attachment).then(response => {
|
||||||
this.$log.debug('Updated attachment', response.data.data)
|
this.$log.debug('Updated attachment', response.data.data)
|
||||||
this.$message.success('附件修改成功')
|
this.$message.success('附件修改成功')
|
||||||
})
|
})
|
||||||
this.editable = false
|
this.editable = false
|
||||||
},
|
},
|
||||||
doCopyNormalLink() {
|
handleCopyNormalLink() {
|
||||||
const text = `${this.attachment.path}`
|
const text = `${this.attachment.path}`
|
||||||
this.$copyText(text)
|
this.$copyText(text)
|
||||||
.then(message => {
|
.then(message => {
|
||||||
|
@ -227,7 +227,7 @@ export default {
|
||||||
this.$message.error('复制失败')
|
this.$message.error('复制失败')
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
doCopyMarkdownLink() {
|
handleCopyMarkdownLink() {
|
||||||
const text = `![${this.attachment.name}](${this.attachment.path})`
|
const text = `![${this.attachment.name}](${this.attachment.path})`
|
||||||
this.$copyText(text)
|
this.$copyText(text)
|
||||||
.then(message => {
|
.then(message => {
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
class="attach-item"
|
class="attach-item"
|
||||||
v-for="(item, index) in formattedDatas"
|
v-for="(item, index) in formattedDatas"
|
||||||
:key="index"
|
:key="index"
|
||||||
@click="showDetailDrawer(item)"
|
@click="handleShowDetailDrawer(item)"
|
||||||
>
|
>
|
||||||
<img :src="item.thumbPath">
|
<img :src="item.thumbPath">
|
||||||
</div>
|
</div>
|
||||||
|
@ -59,7 +59,7 @@
|
||||||
<a-divider />
|
<a-divider />
|
||||||
<div class="bottom-control">
|
<div class="bottom-control">
|
||||||
<a-button
|
<a-button
|
||||||
@click="showUploadModal"
|
@click="handleShowUploadModal"
|
||||||
type="primary"
|
type="primary"
|
||||||
>上传附件</a-button>
|
>上传附件</a-button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -158,10 +158,10 @@ export default {
|
||||||
this.skeletonLoading = false
|
this.skeletonLoading = false
|
||||||
}, 500)
|
}, 500)
|
||||||
},
|
},
|
||||||
showUploadModal() {
|
handleShowUploadModal() {
|
||||||
this.uploadVisible = true
|
this.uploadVisible = true
|
||||||
},
|
},
|
||||||
showDetailDrawer(attachment) {
|
handleShowDetailDrawer(attachment) {
|
||||||
this.selectedAttachment = attachment
|
this.selectedAttachment = attachment
|
||||||
this.$log.debug('Show detail of', attachment)
|
this.$log.debug('Show detail of', attachment)
|
||||||
this.detailVisiable = true
|
this.detailVisiable = true
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
class="attach-item"
|
class="attach-item"
|
||||||
v-for="(item, index) in attachments"
|
v-for="(item, index) in attachments"
|
||||||
:key="index"
|
:key="index"
|
||||||
@click="selectAttachment(item)"
|
@click="handleSelectAttachment(item)"
|
||||||
>
|
>
|
||||||
<img :src="item.thumbPath">
|
<img :src="item.thumbPath">
|
||||||
</div>
|
</div>
|
||||||
|
@ -50,7 +50,7 @@
|
||||||
<a-divider />
|
<a-divider />
|
||||||
<div class="bottom-control">
|
<div class="bottom-control">
|
||||||
<a-button
|
<a-button
|
||||||
@click="showUploadModal"
|
@click="handleShowUploadModal"
|
||||||
type="primary"
|
type="primary"
|
||||||
>上传附件</a-button>
|
>上传附件</a-button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -132,7 +132,7 @@ export default {
|
||||||
this.skeletonLoading = false
|
this.skeletonLoading = false
|
||||||
}, 500)
|
}, 500)
|
||||||
},
|
},
|
||||||
showUploadModal() {
|
handleShowUploadModal() {
|
||||||
this.uploadVisible = true
|
this.uploadVisible = true
|
||||||
},
|
},
|
||||||
loadAttachments() {
|
loadAttachments() {
|
||||||
|
@ -143,7 +143,7 @@ export default {
|
||||||
this.pagination.total = response.data.data.total
|
this.pagination.total = response.data.data.total
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
selectAttachment(item) {
|
handleSelectAttachment(item) {
|
||||||
this.$emit('listenToSelect', item)
|
this.$emit('listenToSelect', item)
|
||||||
},
|
},
|
||||||
handlePaginationChange(page, pageSize) {
|
handlePaginationChange(page, pageSize) {
|
||||||
|
|
|
@ -41,7 +41,7 @@
|
||||||
>查询</a-button>
|
>查询</a-button>
|
||||||
<a-button
|
<a-button
|
||||||
style="margin-left: 8px;"
|
style="margin-left: 8px;"
|
||||||
@click="resetParam"
|
@click="handleResetParam"
|
||||||
>重置</a-button>
|
>重置</a-button>
|
||||||
</span>
|
</span>
|
||||||
</a-col>
|
</a-col>
|
||||||
|
@ -93,12 +93,12 @@
|
||||||
>
|
>
|
||||||
<a
|
<a
|
||||||
href="javascript:;"
|
href="javascript:;"
|
||||||
@click="editComment(record.id)"
|
@click="handleEditComment(record.id)"
|
||||||
>通过</a>
|
>通过</a>
|
||||||
<a-divider type="vertical" />
|
<a-divider type="vertical" />
|
||||||
<a
|
<a
|
||||||
href="javascript:;"
|
href="javascript:;"
|
||||||
@click="deleteComment(record.id)"
|
@click="handleDeleteComment(record.id)"
|
||||||
>删除</a>
|
>删除</a>
|
||||||
</span>
|
</span>
|
||||||
</a-table>
|
</a-table>
|
||||||
|
@ -108,8 +108,8 @@
|
||||||
:total="pagination.total"
|
:total="pagination.total"
|
||||||
:pageSizeOptions="['1', '2', '5', '10', '20', '50', '100']"
|
:pageSizeOptions="['1', '2', '5', '10', '20', '50', '100']"
|
||||||
showSizeChanger
|
showSizeChanger
|
||||||
@showSizeChange="onPaginationChange"
|
@showSizeChange="handlePaginationChange"
|
||||||
@change="onPaginationChange"
|
@change="handlePaginationChange"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -203,19 +203,19 @@ export default {
|
||||||
this.commentsLoading = false
|
this.commentsLoading = false
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
editComment(id) {
|
handleEditComment(id) {
|
||||||
this.$message.success('编辑')
|
this.$message.success('编辑')
|
||||||
},
|
},
|
||||||
deleteComment(id) {
|
handleDeleteComment(id) {
|
||||||
this.$message.success('删除')
|
this.$message.success('删除')
|
||||||
},
|
},
|
||||||
onPaginationChange(page, pageSize) {
|
handlePaginationChange(page, pageSize) {
|
||||||
this.$log.debug(`Current: ${page}, PageSize: ${pageSize}`)
|
this.$log.debug(`Current: ${page}, PageSize: ${pageSize}`)
|
||||||
this.pagination.current = page
|
this.pagination.current = page
|
||||||
this.pagination.pageSize = pageSize
|
this.pagination.pageSize = pageSize
|
||||||
this.loadComments()
|
this.loadComments()
|
||||||
},
|
},
|
||||||
resetParam() {
|
handleResetParam() {
|
||||||
this.queryParam.keyword = null
|
this.queryParam.keyword = null
|
||||||
this.queryParam.status = null
|
this.queryParam.status = null
|
||||||
this.loadComments()
|
this.loadComments()
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
<a-card title="Anatole 主题">
|
<a-card title="Anatole 主题">
|
||||||
<theme-file
|
<theme-file
|
||||||
:files="files"
|
:files="files"
|
||||||
@listenToSelect="catchSelectFile"
|
@listenToSelect="handleSelectFile"
|
||||||
/>
|
/>
|
||||||
</a-card>
|
</a-card>
|
||||||
</a-col>
|
</a-col>
|
||||||
|
@ -85,7 +85,7 @@ export default {
|
||||||
this.files = response.data.data
|
this.files = response.data.data
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
catchSelectFile(file) {
|
handleSelectFile(file) {
|
||||||
const _this = this
|
const _this = this
|
||||||
if (!file.editable) {
|
if (!file.editable) {
|
||||||
this.$message.info('该文件不支持修改')
|
this.$message.info('该文件不支持修改')
|
||||||
|
|
|
@ -58,7 +58,7 @@
|
||||||
<a-popconfirm
|
<a-popconfirm
|
||||||
v-if="!item.activated"
|
v-if="!item.activated"
|
||||||
:title="'确定删除【' + item.name + '】主题?'"
|
:title="'确定删除【' + item.name + '】主题?'"
|
||||||
@confirm="deleteTheme(item.id)"
|
@confirm="handleDeleteTheme(item.id)"
|
||||||
okText="确定"
|
okText="确定"
|
||||||
cancelText="取消"
|
cancelText="取消"
|
||||||
>
|
>
|
||||||
|
@ -193,7 +193,7 @@
|
||||||
<a-form-item>
|
<a-form-item>
|
||||||
<a-button
|
<a-button
|
||||||
type="primary"
|
type="primary"
|
||||||
@click="saveSettings"
|
@click="handleSaveSettings"
|
||||||
>保存</a-button>
|
>保存</a-button>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-form>
|
</a-form>
|
||||||
|
@ -210,7 +210,7 @@
|
||||||
shape="circle"
|
shape="circle"
|
||||||
icon="plus"
|
icon="plus"
|
||||||
size="large"
|
size="large"
|
||||||
@click="showUploadModal"
|
@click="handleShowUploadModal"
|
||||||
></a-button>
|
></a-button>
|
||||||
</div>
|
</div>
|
||||||
<a-modal
|
<a-modal
|
||||||
|
@ -320,13 +320,13 @@ export default {
|
||||||
this.loadThemes()
|
this.loadThemes()
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
deleteTheme(key) {
|
handleDeleteTheme(key) {
|
||||||
themeApi.delete(key).then(response => {
|
themeApi.delete(key).then(response => {
|
||||||
this.$message.success('删除成功!')
|
this.$message.success('删除成功!')
|
||||||
this.loadThemes()
|
this.loadThemes()
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
saveSettings() {
|
handleSaveSettings() {
|
||||||
themeApi.saveSettings(this.themeProperty.id, this.themeSettings).then(response => {
|
themeApi.saveSettings(this.themeProperty.id, this.themeSettings).then(response => {
|
||||||
this.$message.success('保存成功!')
|
this.$message.success('保存成功!')
|
||||||
})
|
})
|
||||||
|
@ -342,7 +342,7 @@ export default {
|
||||||
this.themeConfiguration = null
|
this.themeConfiguration = null
|
||||||
this.themeProperty = null
|
this.themeProperty = null
|
||||||
},
|
},
|
||||||
showUploadModal() {
|
handleShowUploadModal() {
|
||||||
this.uploadVisible = true
|
this.uploadVisible = true
|
||||||
},
|
},
|
||||||
handleChange(info) {
|
handleChange(info) {
|
||||||
|
|
|
@ -42,7 +42,7 @@
|
||||||
<a-form-item>
|
<a-form-item>
|
||||||
<a-button
|
<a-button
|
||||||
type="primary"
|
type="primary"
|
||||||
@click="createCategory"
|
@click="handleCreateCategory"
|
||||||
>保存</a-button>
|
>保存</a-button>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-form>
|
</a-form>
|
||||||
|
@ -77,12 +77,12 @@
|
||||||
>
|
>
|
||||||
<a
|
<a
|
||||||
href="javascript:;"
|
href="javascript:;"
|
||||||
@click="editCategory(record.id)"
|
@click="handleEditCategory(record.id)"
|
||||||
>编辑</a>
|
>编辑</a>
|
||||||
<a-divider type="vertical" />
|
<a-divider type="vertical" />
|
||||||
<a-popconfirm
|
<a-popconfirm
|
||||||
:title="'你确定要删除【' + record.name + '】分类?'"
|
:title="'你确定要删除【' + record.name + '】分类?'"
|
||||||
@confirm="deleteCategory(record.id)"
|
@confirm="handleDeleteCategory(record.id)"
|
||||||
okText="确定"
|
okText="确定"
|
||||||
cancelText="取消"
|
cancelText="取消"
|
||||||
>
|
>
|
||||||
|
@ -149,17 +149,17 @@ export default {
|
||||||
this.categories = response.data.data
|
this.categories = response.data.data
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
createCategory() {
|
handleCreateCategory() {
|
||||||
categoryApi.create(this.categoryToCreate).then(response => {
|
categoryApi.create(this.categoryToCreate).then(response => {
|
||||||
this.$message.success('添加成功!')
|
this.$message.success('添加成功!')
|
||||||
this.loadCategories()
|
this.loadCategories()
|
||||||
this.categoryToCreate = {}
|
this.categoryToCreate = {}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
editCategory(id) {
|
handleEditCategory(id) {
|
||||||
this.$message.success('编辑' + id)
|
this.$message.success('编辑' + id)
|
||||||
},
|
},
|
||||||
deleteCategory(id) {
|
handleDeleteCategory(id) {
|
||||||
categoryApi.delete(id).then(response => {
|
categoryApi.delete(id).then(response => {
|
||||||
this.$message.success('删除成功!')
|
this.$message.success('删除成功!')
|
||||||
this.loadCategories()
|
this.loadCategories()
|
||||||
|
|
|
@ -123,7 +123,7 @@
|
||||||
<img
|
<img
|
||||||
class="img"
|
class="img"
|
||||||
:src="postToStage.thumbnail || 'https://os.alipayobjects.com/rmsportal/mgesTPFxodmIwpi.png'"
|
:src="postToStage.thumbnail || 'https://os.alipayobjects.com/rmsportal/mgesTPFxodmIwpi.png'"
|
||||||
@click="showThumbDrawer"
|
@click="handleShowThumbDrawer"
|
||||||
>
|
>
|
||||||
<a-button
|
<a-button
|
||||||
class="post-thum-remove"
|
class="post-thum-remove"
|
||||||
|
@ -137,7 +137,7 @@
|
||||||
</div>
|
</div>
|
||||||
<AttachmentSelectDrawer
|
<AttachmentSelectDrawer
|
||||||
v-model="thumDrawerVisible"
|
v-model="thumDrawerVisible"
|
||||||
@listenToSelect="selectPostThumb"
|
@listenToSelect="handleSelectPostThumb"
|
||||||
:drawerWidth="460"
|
:drawerWidth="460"
|
||||||
/>
|
/>
|
||||||
<a-divider />
|
<a-divider />
|
||||||
|
@ -160,11 +160,11 @@
|
||||||
<footer-tool-bar :style="{ width: isSideMenu() && isDesktop() ? `calc(100% - ${sidebarOpened ? 256 : 80}px)` : '100%'}">
|
<footer-tool-bar :style="{ width: isSideMenu() && isDesktop() ? `calc(100% - ${sidebarOpened ? 256 : 80}px)` : '100%'}">
|
||||||
<a-button
|
<a-button
|
||||||
type="primary"
|
type="primary"
|
||||||
@click="showDrawer"
|
@click="handleShowDrawer"
|
||||||
>发布</a-button>
|
>发布</a-button>
|
||||||
<a-button
|
<a-button
|
||||||
type="dashed"
|
type="dashed"
|
||||||
@click="showAttachDrawer"
|
@click="handleShowAttachDrawer"
|
||||||
style="margin-left: 8px;"
|
style="margin-left: 8px;"
|
||||||
>附件库</a-button>
|
>附件库</a-button>
|
||||||
</footer-tool-bar>
|
</footer-tool-bar>
|
||||||
|
@ -275,13 +275,13 @@ export default {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
showDrawer() {
|
handleShowDrawer() {
|
||||||
this.visible = true
|
this.visible = true
|
||||||
},
|
},
|
||||||
showAttachDrawer() {
|
handleShowAttachDrawer() {
|
||||||
this.attachmentDrawerVisible = true
|
this.attachmentDrawerVisible = true
|
||||||
},
|
},
|
||||||
showThumbDrawer() {
|
handleShowThumbDrawer() {
|
||||||
this.thumDrawerVisible = true
|
this.thumDrawerVisible = true
|
||||||
},
|
},
|
||||||
toggleCategoryForm() {
|
toggleCategoryForm() {
|
||||||
|
@ -307,7 +307,7 @@ export default {
|
||||||
onClose() {
|
onClose() {
|
||||||
this.visible = false
|
this.visible = false
|
||||||
},
|
},
|
||||||
selectPostThumb(data) {
|
handleSelectPostThumb(data) {
|
||||||
this.postToStage.thumbnail = data.path
|
this.postToStage.thumbnail = data.path
|
||||||
this.thumDrawerVisible = false
|
this.thumDrawerVisible = false
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,7 +57,7 @@
|
||||||
>查询</a-button>
|
>查询</a-button>
|
||||||
<a-button
|
<a-button
|
||||||
style="margin-left: 8px;"
|
style="margin-left: 8px;"
|
||||||
@click="resetParam"
|
@click="handleResetParam"
|
||||||
>重置</a-button>
|
>重置</a-button>
|
||||||
</span>
|
</span>
|
||||||
</a-col>
|
</a-col>
|
||||||
|
@ -140,12 +140,12 @@
|
||||||
>
|
>
|
||||||
<a
|
<a
|
||||||
href="javascript:;"
|
href="javascript:;"
|
||||||
@click="onEditClick(post)"
|
@click="handleEditClick(post)"
|
||||||
v-if="post.status === 'PUBLISHED' || post.status === 'DRAFT'"
|
v-if="post.status === 'PUBLISHED' || post.status === 'DRAFT'"
|
||||||
>编辑</a>
|
>编辑</a>
|
||||||
<a-popconfirm
|
<a-popconfirm
|
||||||
:title="'你确定要发布【' + post.title + '】文章?'"
|
:title="'你确定要发布【' + post.title + '】文章?'"
|
||||||
@confirm="onEditStatusClick(post.id,'PUBLISHED')"
|
@confirm="handleEditStatusClick(post.id,'PUBLISHED')"
|
||||||
okText="确定"
|
okText="确定"
|
||||||
cancelText="取消"
|
cancelText="取消"
|
||||||
v-else-if="post.status === 'RECYCLE'"
|
v-else-if="post.status === 'RECYCLE'"
|
||||||
|
@ -157,7 +157,7 @@
|
||||||
|
|
||||||
<a-popconfirm
|
<a-popconfirm
|
||||||
:title="'你确定要将【' + post.title + '】文章移到回收站?'"
|
:title="'你确定要将【' + post.title + '】文章移到回收站?'"
|
||||||
@confirm="onEditStatusClick(post.id,'RECYCLE')"
|
@confirm="handleEditStatusClick(post.id,'RECYCLE')"
|
||||||
okText="确定"
|
okText="确定"
|
||||||
cancelText="取消"
|
cancelText="取消"
|
||||||
v-if="post.status === 'PUBLISHED' || post.status === 'DRAFT'"
|
v-if="post.status === 'PUBLISHED' || post.status === 'DRAFT'"
|
||||||
|
@ -167,7 +167,7 @@
|
||||||
|
|
||||||
<a-popconfirm
|
<a-popconfirm
|
||||||
:title="'你确定要永久删除【' + post.title + '】文章?'"
|
:title="'你确定要永久删除【' + post.title + '】文章?'"
|
||||||
@confirm="onDeleteClick(post.id)"
|
@confirm="handleDeleteClick(post.id)"
|
||||||
okText="确定"
|
okText="确定"
|
||||||
cancelText="取消"
|
cancelText="取消"
|
||||||
v-else-if="post.status === 'RECYCLE'"
|
v-else-if="post.status === 'RECYCLE'"
|
||||||
|
@ -182,8 +182,8 @@
|
||||||
:total="pagination.total"
|
:total="pagination.total"
|
||||||
:pageSizeOptions="['1', '2', '5', '10', '20', '50', '100']"
|
:pageSizeOptions="['1', '2', '5', '10', '20', '50', '100']"
|
||||||
showSizeChanger
|
showSizeChanger
|
||||||
@showSizeChange="onPaginationChange"
|
@showSizeChange="handlePaginationChange"
|
||||||
@change="onPaginationChange"
|
@change="handlePaginationChange"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -292,12 +292,9 @@ export default {
|
||||||
this.categories = response.data.data
|
this.categories = response.data.data
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
onEditClick(post) {
|
handleEditClick(post) {
|
||||||
this.$router.push({ name: 'PostEdit', query: { postId: post.id } })
|
this.$router.push({ name: 'PostEdit', query: { postId: post.id } })
|
||||||
},
|
},
|
||||||
deletePost(id) {
|
|
||||||
this.$message.success('删除')
|
|
||||||
},
|
|
||||||
onSelectionChange(selectedRowKeys) {
|
onSelectionChange(selectedRowKeys) {
|
||||||
this.$log.debug(`SelectedRowKeys: ${selectedRowKeys}`)
|
this.$log.debug(`SelectedRowKeys: ${selectedRowKeys}`)
|
||||||
},
|
},
|
||||||
|
@ -309,25 +306,25 @@ export default {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onPaginationChange(page, pageSize) {
|
handlePaginationChange(page, pageSize) {
|
||||||
this.$log.debug(`Current: ${page}, PageSize: ${pageSize}`)
|
this.$log.debug(`Current: ${page}, PageSize: ${pageSize}`)
|
||||||
this.pagination.current = page
|
this.pagination.current = page
|
||||||
this.pagination.pageSize = pageSize
|
this.pagination.pageSize = pageSize
|
||||||
this.loadPosts()
|
this.loadPosts()
|
||||||
},
|
},
|
||||||
resetParam() {
|
handleResetParam() {
|
||||||
this.queryParam.keyword = null
|
this.queryParam.keyword = null
|
||||||
this.queryParam.categoryId = null
|
this.queryParam.categoryId = null
|
||||||
this.queryParam.status = null
|
this.queryParam.status = null
|
||||||
this.loadPosts()
|
this.loadPosts()
|
||||||
},
|
},
|
||||||
onEditStatusClick(postId, status) {
|
handleEditStatusClick(postId, status) {
|
||||||
postApi.updateStatus(postId, status).then(response => {
|
postApi.updateStatus(postId, status).then(response => {
|
||||||
this.$message.success('操作成功!')
|
this.$message.success('操作成功!')
|
||||||
this.loadPosts()
|
this.loadPosts()
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
onDeleteClick(postId) {
|
handleDeleteClick(postId) {
|
||||||
postApi.delete(postId).then(response => {
|
postApi.delete(postId).then(response => {
|
||||||
this.$message.success('删除成功!')
|
this.$message.success('删除成功!')
|
||||||
this.loadPosts()
|
this.loadPosts()
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
<a-form-item>
|
<a-form-item>
|
||||||
<a-button
|
<a-button
|
||||||
type="primary"
|
type="primary"
|
||||||
@click="createTag"
|
@click="handleCreateTag"
|
||||||
>保存</a-button>
|
>保存</a-button>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-form>
|
</a-form>
|
||||||
|
@ -51,7 +51,7 @@
|
||||||
</template>
|
</template>
|
||||||
<a-tag
|
<a-tag
|
||||||
closable
|
closable
|
||||||
@close="deleteTag(tag.id)"
|
@close="handleDeleteTag(tag.id)"
|
||||||
color="blue"
|
color="blue"
|
||||||
>{{ tag.name }}</a-tag>
|
>{{ tag.name }}</a-tag>
|
||||||
</a-tooltip>
|
</a-tooltip>
|
||||||
|
@ -81,17 +81,17 @@ export default {
|
||||||
this.tags = response.data.data
|
this.tags = response.data.data
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
createTag() {
|
handleCreateTag() {
|
||||||
tagApi.create(this.tagToCreate).then(response => {
|
tagApi.create(this.tagToCreate).then(response => {
|
||||||
this.loadTags()
|
this.loadTags()
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
updateTag(tagId) {
|
handleUpdateTag(tagId) {
|
||||||
tagApi.update(tagId, this.tagToUpdate).then(response => {
|
tagApi.update(tagId, this.tagToUpdate).then(response => {
|
||||||
this.loadTags()
|
this.loadTags()
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
deleteTag(tagId) {
|
handleDeleteTag(tagId) {
|
||||||
tagApi.delete(tagId).then(response => {
|
tagApi.delete(tagId).then(response => {
|
||||||
this.$message.success('删除成功!')
|
this.$message.success('删除成功!')
|
||||||
this.loadTags()
|
this.loadTags()
|
||||||
|
|
|
@ -87,7 +87,7 @@
|
||||||
<img
|
<img
|
||||||
class="img"
|
class="img"
|
||||||
:src="sheetToStage.thumbnail || 'https://os.alipayobjects.com/rmsportal/mgesTPFxodmIwpi.png'"
|
:src="sheetToStage.thumbnail || 'https://os.alipayobjects.com/rmsportal/mgesTPFxodmIwpi.png'"
|
||||||
@click="showThumbDrawer"
|
@click="handleShowThumbDrawer"
|
||||||
>
|
>
|
||||||
<a-button
|
<a-button
|
||||||
class="sheet-thum-remove"
|
class="sheet-thum-remove"
|
||||||
|
@ -101,7 +101,7 @@
|
||||||
</div>
|
</div>
|
||||||
<AttachmentSelectDrawer
|
<AttachmentSelectDrawer
|
||||||
v-model="thumDrawerVisible"
|
v-model="thumDrawerVisible"
|
||||||
@listenToSelect="selectSheetThumb"
|
@listenToSelect="handleSelectSheetThumb"
|
||||||
:drawerWidth="460"
|
:drawerWidth="460"
|
||||||
/>
|
/>
|
||||||
<div class="bottom-control">
|
<div class="bottom-control">
|
||||||
|
@ -121,12 +121,12 @@
|
||||||
<footer-tool-bar :style="{ width: isSideMenu() && isDesktop() ? `calc(100% - ${sidebarOpened ? 256 : 80}px)` : '100%'}">
|
<footer-tool-bar :style="{ width: isSideMenu() && isDesktop() ? `calc(100% - ${sidebarOpened ? 256 : 80}px)` : '100%'}">
|
||||||
<a-button
|
<a-button
|
||||||
type="primary"
|
type="primary"
|
||||||
@click="showDrawer"
|
@click="handleShowDrawer"
|
||||||
>发布</a-button>
|
>发布</a-button>
|
||||||
<a-button
|
<a-button
|
||||||
type="dashed"
|
type="dashed"
|
||||||
style="margin-left: 8px;"
|
style="margin-left: 8px;"
|
||||||
@click="showAttachDrawer"
|
@click="handleShowAttachDrawer"
|
||||||
>附件库</a-button>
|
>附件库</a-button>
|
||||||
</footer-tool-bar>
|
</footer-tool-bar>
|
||||||
</div>
|
</div>
|
||||||
|
@ -195,13 +195,13 @@ export default {
|
||||||
this.customTpls = response.data.data
|
this.customTpls = response.data.data
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
showAttachDrawer() {
|
handleShowAttachDrawer() {
|
||||||
this.attachmentDrawerVisible = true
|
this.attachmentDrawerVisible = true
|
||||||
},
|
},
|
||||||
showThumbDrawer() {
|
handleShowThumbDrawer() {
|
||||||
this.thumDrawerVisible = true
|
this.thumDrawerVisible = true
|
||||||
},
|
},
|
||||||
showDrawer() {
|
handleShowDrawer() {
|
||||||
this.visible = true
|
this.visible = true
|
||||||
},
|
},
|
||||||
handlePublishClick() {
|
handlePublishClick() {
|
||||||
|
@ -232,7 +232,7 @@ export default {
|
||||||
onClose() {
|
onClose() {
|
||||||
this.visible = false
|
this.visible = false
|
||||||
},
|
},
|
||||||
selectSheetThumb(data) {
|
handleSelectSheetThumb(data) {
|
||||||
this.sheetToStage.thumbnail = data.path
|
this.sheetToStage.thumbnail = data.path
|
||||||
this.thumDrawerVisible = false
|
this.thumDrawerVisible = false
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,7 +67,7 @@
|
||||||
<a-divider type="vertical" />
|
<a-divider type="vertical" />
|
||||||
<a
|
<a
|
||||||
href="javascript:;"
|
href="javascript:;"
|
||||||
@click="viewPage(record.id)"
|
@click="handleViewPage(record.id)"
|
||||||
>查看</a>
|
>查看</a>
|
||||||
</span>
|
</span>
|
||||||
</a-table>
|
</a-table>
|
||||||
|
@ -101,13 +101,13 @@
|
||||||
>
|
>
|
||||||
<a
|
<a
|
||||||
href="javascript:;"
|
href="javascript:;"
|
||||||
@click="onEditClick(sheet)"
|
@click="handleEditClick(sheet)"
|
||||||
v-if="sheet.status === 'PUBLISHED' || sheet.status === 'DRAFT'"
|
v-if="sheet.status === 'PUBLISHED' || sheet.status === 'DRAFT'"
|
||||||
>编辑</a>
|
>编辑</a>
|
||||||
|
|
||||||
<a-popconfirm
|
<a-popconfirm
|
||||||
:title="'你确定要发布【' + sheet.title + '】?'"
|
:title="'你确定要发布【' + sheet.title + '】?'"
|
||||||
@confirm="onEditStatusClick(sheet.id,'PUBLISHED')"
|
@confirm="handleEditStatusClick(sheet.id,'PUBLISHED')"
|
||||||
okText="确定"
|
okText="确定"
|
||||||
cancelText="取消"
|
cancelText="取消"
|
||||||
v-else-if="sheet.status === 'RECYCLE'"
|
v-else-if="sheet.status === 'RECYCLE'"
|
||||||
|
@ -121,7 +121,7 @@
|
||||||
|
|
||||||
<a-popconfirm
|
<a-popconfirm
|
||||||
:title="'你确定要将【' + sheet.title + '】页面移到回收站?'"
|
:title="'你确定要将【' + sheet.title + '】页面移到回收站?'"
|
||||||
@confirm="onEditStatusClick(sheet.id,'RECYCLE')"
|
@confirm="handleEditStatusClick(sheet.id,'RECYCLE')"
|
||||||
okText="确定"
|
okText="确定"
|
||||||
cancelText="取消"
|
cancelText="取消"
|
||||||
v-if="sheet.status === 'PUBLISHED' || sheet.status === 'DRAFT'"
|
v-if="sheet.status === 'PUBLISHED' || sheet.status === 'DRAFT'"
|
||||||
|
@ -133,7 +133,7 @@
|
||||||
|
|
||||||
<a-popconfirm
|
<a-popconfirm
|
||||||
:title="'你确定要永久删除【' + sheet.title + '】页面?'"
|
:title="'你确定要永久删除【' + sheet.title + '】页面?'"
|
||||||
@confirm="onDeleteClick(sheet.id)"
|
@confirm="handleDeleteClick(sheet.id)"
|
||||||
okText="确定"
|
okText="确定"
|
||||||
cancelText="取消"
|
cancelText="取消"
|
||||||
v-else-if="sheet.status === 'RECYCLE'"
|
v-else-if="sheet.status === 'RECYCLE'"
|
||||||
|
@ -247,22 +247,22 @@ export default {
|
||||||
this.sheets = response.data.data.content
|
this.sheets = response.data.data.content
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
onEditClick(sheet) {
|
handleEditClick(sheet) {
|
||||||
this.$router.push({ name: 'SheetEdit', query: { sheetId: sheet.id } })
|
this.$router.push({ name: 'SheetEdit', query: { sheetId: sheet.id } })
|
||||||
},
|
},
|
||||||
onEditStatusClick(sheetId, status) {
|
handleEditStatusClick(sheetId, status) {
|
||||||
sheetApi.updateStatus(sheetId, status).then(response => {
|
sheetApi.updateStatus(sheetId, status).then(response => {
|
||||||
this.$message.success('操作成功!')
|
this.$message.success('操作成功!')
|
||||||
this.loadSheets()
|
this.loadSheets()
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
onDeleteClick(sheetId) {
|
handleDeleteClick(sheetId) {
|
||||||
sheetApi.delete(sheetId).then(response => {
|
sheetApi.delete(sheetId).then(response => {
|
||||||
this.$message.success('删除成功!')
|
this.$message.success('删除成功!')
|
||||||
this.loadSheets()
|
this.loadSheets()
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
viewPage(id) {
|
handleViewPage(id) {
|
||||||
this.$message.success('查看' + id)
|
this.$message.success('查看' + id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
安装向导
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
</style>
|
|
@ -52,7 +52,7 @@
|
||||||
<a-form-item>
|
<a-form-item>
|
||||||
<a-button
|
<a-button
|
||||||
type="primary"
|
type="primary"
|
||||||
@click="saveOptions"
|
@click="handleSaveOptions"
|
||||||
>保存</a-button>
|
>保存</a-button>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-form>
|
</a-form>
|
||||||
|
@ -113,7 +113,7 @@
|
||||||
<a-form-item>
|
<a-form-item>
|
||||||
<a-button
|
<a-button
|
||||||
type="primary"
|
type="primary"
|
||||||
@click="saveOptions"
|
@click="handleSaveOptions"
|
||||||
>保存</a-button>
|
>保存</a-button>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-form>
|
</a-form>
|
||||||
|
@ -156,7 +156,7 @@
|
||||||
<a-form-item>
|
<a-form-item>
|
||||||
<a-button
|
<a-button
|
||||||
type="primary"
|
type="primary"
|
||||||
@click="saveOptions"
|
@click="handleSaveOptions"
|
||||||
>保存</a-button>
|
>保存</a-button>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-form>
|
</a-form>
|
||||||
|
@ -277,7 +277,7 @@
|
||||||
<a-form-item>
|
<a-form-item>
|
||||||
<a-button
|
<a-button
|
||||||
type="primary"
|
type="primary"
|
||||||
@click="saveOptions"
|
@click="handleSaveOptions"
|
||||||
>保存</a-button>
|
>保存</a-button>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-form>
|
</a-form>
|
||||||
|
@ -445,7 +445,7 @@
|
||||||
<a-form-item>
|
<a-form-item>
|
||||||
<a-button
|
<a-button
|
||||||
type="primary"
|
type="primary"
|
||||||
@click="saveOptions"
|
@click="handleSaveOptions"
|
||||||
>保存</a-button>
|
>保存</a-button>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-form>
|
</a-form>
|
||||||
|
@ -518,7 +518,7 @@
|
||||||
<a-form-item>
|
<a-form-item>
|
||||||
<a-button
|
<a-button
|
||||||
type="primary"
|
type="primary"
|
||||||
@click="saveOptions"
|
@click="handleSaveOptions"
|
||||||
>保存</a-button>
|
>保存</a-button>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-form>
|
</a-form>
|
||||||
|
@ -593,7 +593,7 @@
|
||||||
<a-form-item>
|
<a-form-item>
|
||||||
<a-button
|
<a-button
|
||||||
type="primary"
|
type="primary"
|
||||||
@click="saveOptions"
|
@click="handleSaveOptions"
|
||||||
>保存</a-button>
|
>保存</a-button>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-form>
|
</a-form>
|
||||||
|
@ -630,7 +630,7 @@ export default {
|
||||||
this.options = response.data.data
|
this.options = response.data.data
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
saveOptions() {
|
handleSaveOptions() {
|
||||||
optionApi.save(this.options).then(response => {
|
optionApi.save(this.options).then(response => {
|
||||||
this.loadOptions()
|
this.loadOptions()
|
||||||
this.$message.success('保存成功!')
|
this.$message.success('保存成功!')
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
<div class="avatar">
|
<div class="avatar">
|
||||||
<img
|
<img
|
||||||
:src="user.avatar || 'https://gravatar.loli.net/avatar/?s=256&d=mm'"
|
:src="user.avatar || 'https://gravatar.loli.net/avatar/?s=256&d=mm'"
|
||||||
@click="showAttachDrawer"
|
@click="handleShowAttachDrawer"
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
</a-tooltip>
|
</a-tooltip>
|
||||||
|
@ -97,7 +97,7 @@
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
<a-form-item>
|
<a-form-item>
|
||||||
<a-button
|
<a-button
|
||||||
@click="updateProfile"
|
@click="handleUpdateProfile"
|
||||||
type="primary"
|
type="primary"
|
||||||
>保存</a-button>
|
>保存</a-button>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
|
@ -129,7 +129,7 @@
|
||||||
<a-form-item>
|
<a-form-item>
|
||||||
<a-button
|
<a-button
|
||||||
:disabled="passwordUpdateButtonDisabled"
|
:disabled="passwordUpdateButtonDisabled"
|
||||||
@click="updatePassword"
|
@click="handleUpdatePassword"
|
||||||
type="primary"
|
type="primary"
|
||||||
>确认更改</a-button>
|
>确认更改</a-button>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
|
@ -143,7 +143,7 @@
|
||||||
|
|
||||||
<AttachmentSelectDrawer
|
<AttachmentSelectDrawer
|
||||||
v-model="attachmentDrawerVisible"
|
v-model="attachmentDrawerVisible"
|
||||||
@listenToSelect="selectAvatar"
|
@listenToSelect="handleSelectAvatar"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -181,7 +181,7 @@ export default {
|
||||||
this.getCounts()
|
this.getCounts()
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
showAttachDrawer() {
|
handleShowAttachDrawer() {
|
||||||
this.attachmentDrawerVisible = true
|
this.attachmentDrawerVisible = true
|
||||||
},
|
},
|
||||||
loadUser() {
|
loadUser() {
|
||||||
|
@ -196,7 +196,7 @@ export default {
|
||||||
this.countsLoading = false
|
this.countsLoading = false
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
updatePassword() {
|
handleUpdatePassword() {
|
||||||
// Check confirm password
|
// Check confirm password
|
||||||
if (this.passwordParam.newPassword !== this.passwordParam.confirmPassword) {
|
if (this.passwordParam.newPassword !== this.passwordParam.confirmPassword) {
|
||||||
this.$message.error('确认密码和新密码不匹配!')
|
this.$message.error('确认密码和新密码不匹配!')
|
||||||
|
@ -205,13 +205,13 @@ export default {
|
||||||
|
|
||||||
userApi.updatePassword(this.passwordParam.oldPassword, this.passwordParam.newPassword).then(response => {})
|
userApi.updatePassword(this.passwordParam.oldPassword, this.passwordParam.newPassword).then(response => {})
|
||||||
},
|
},
|
||||||
updateProfile() {
|
handleUpdateProfile() {
|
||||||
userApi.updateProfile(this.user).then(response => {
|
userApi.updateProfile(this.user).then(response => {
|
||||||
this.user = response.data.data
|
this.user = response.data.data
|
||||||
this.$message.success('资料更新成功!')
|
this.$message.success('资料更新成功!')
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
selectAvatar(data) {
|
handleSelectAvatar(data) {
|
||||||
this.user.avatar = data.path
|
this.user.avatar = data.path
|
||||||
this.attachmentDrawerVisible = false
|
this.attachmentDrawerVisible = false
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue