15 files added
10 files modified
1 files copied
3 files renamed
New file |
| | |
| | | import { axios } from '@/utils/request' |
| | | |
| | | /** |
| | | * 查询文章评论 |
| | | * |
| | | * @author inleft |
| | | * @date 2022-03-01 14:00:53 |
| | | */ |
| | | export function blogArticleCommentPage (parameter) { |
| | | return axios({ |
| | | url: '/blogArticleComment/page', |
| | | method: 'get', |
| | | params: parameter |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * 文章评论列表 |
| | | * |
| | | * @author inleft |
| | | * @date 2022-03-01 14:00:53 |
| | | */ |
| | | export function blogArticleCommentList (parameter) { |
| | | return axios({ |
| | | url: '/blogArticleComment/list', |
| | | method: 'get', |
| | | params: parameter |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * 添加文章评论 |
| | | * |
| | | * @author inleft |
| | | * @date 2022-03-01 14:00:53 |
| | | */ |
| | | export function blogArticleCommentAdd (parameter) { |
| | | return axios({ |
| | | url: '/blogArticleComment/add', |
| | | method: 'post', |
| | | data: parameter |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * 编辑文章评论 |
| | | * |
| | | * @author inleft |
| | | * @date 2022-03-01 14:00:53 |
| | | */ |
| | | export function blogArticleCommentEdit (parameter) { |
| | | return axios({ |
| | | url: '/blogArticleComment/edit', |
| | | method: 'post', |
| | | data: parameter |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * 删除文章评论 |
| | | * |
| | | * @author inleft |
| | | * @date 2022-03-01 14:00:53 |
| | | */ |
| | | export function blogArticleCommentDelete (parameter) { |
| | | return axios({ |
| | | url: '/blogArticleComment/delete', |
| | | method: 'post', |
| | | data: parameter |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * 导出文章评论 |
| | | * |
| | | * @author inleft |
| | | * @date 2022-03-01 14:00:53 |
| | | */ |
| | | export function blogArticleCommentExport (parameter) { |
| | | return axios({ |
| | | url: '/blogArticleComment/export', |
| | | method: 'get', |
| | | params: parameter, |
| | | responseType: 'blob' |
| | | }) |
| | | } |
New file |
| | |
| | | <template> |
| | | <a-modal |
| | | title="新增文章评论" |
| | | :width="900" |
| | | :visible="visible" |
| | | :confirmLoading="confirmLoading" |
| | | @ok="handleSubmit" |
| | | @cancel="handleCancel" |
| | | > |
| | | <a-spin :spinning="confirmLoading"> |
| | | <a-form :form="form"> |
| | | <a-form-item |
| | | label="访客名称" |
| | | :labelCol="labelCol" |
| | | :wrapperCol="wrapperCol" |
| | | has-feedback |
| | | > |
| | | <a-input placeholder="请输入访客名称" v-decorator="['visitorNickName', {rules: [{required: true, message: '请输入访客名称!'}]}]" /> |
| | | </a-form-item> |
| | | <a-form-item |
| | | label="访客邮箱" |
| | | :labelCol="labelCol" |
| | | :wrapperCol="wrapperCol" |
| | | has-feedback |
| | | > |
| | | <a-input placeholder="请输入访客邮箱" v-decorator="['visitorEmail']" /> |
| | | </a-form-item> |
| | | <a-form-item |
| | | label="访客主页" |
| | | :labelCol="labelCol" |
| | | :wrapperCol="wrapperCol" |
| | | has-feedback |
| | | > |
| | | <a-input placeholder="请输入访客主页" v-decorator="['visitorHomePage']" /> |
| | | </a-form-item> |
| | | <a-form-item |
| | | label="留言内容(500字内)" |
| | | :labelCol="labelCol" |
| | | :wrapperCol="wrapperCol" |
| | | has-feedback |
| | | > |
| | | <a-textarea placeholder="请输入留言内容(500字内)" v-decorator="['commentContent']" :auto-size="{ minRows: 3, maxRows: 6 }"/> |
| | | </a-form-item> |
| | | <a-form-item |
| | | label="是否已审核 0:否 1:是" |
| | | :labelCol="labelCol" |
| | | :wrapperCol="wrapperCol" |
| | | > |
| | | <a-select style="width: 100%" placeholder="请选择是否已审核 0:否 1:是"> |
| | | <a-select-option v-for="(item,index) in isCheckData" :key="index" :value="item.code">{{ item.name }}</a-select-option> |
| | | </a-select> |
| | | </a-form-item> |
| | | <a-form-item |
| | | label="公开状态 1:公开 2:私密 3:密码授权" |
| | | :labelCol="labelCol" |
| | | :wrapperCol="wrapperCol" |
| | | > |
| | | <a-select style="width: 100%" placeholder="请选择公开状态 1:公开 2:私密 3:密码授权"> |
| | | <a-select-option v-for="(item,index) in authStatusData" :key="index" :value="item.code">{{ item.name }}</a-select-option> |
| | | </a-select> |
| | | </a-form-item> |
| | | <a-form-item |
| | | label="是否启用 0:否 1是" |
| | | :labelCol="labelCol" |
| | | :wrapperCol="wrapperCol" |
| | | > |
| | | <a-select style="width: 100%" placeholder="请选择是否启用 0:否 1是"> |
| | | <a-select-option v-for="(item,index) in isEnableData" :key="index" :value="item.code">{{ item.name }}</a-select-option> |
| | | </a-select> |
| | | </a-form-item> |
| | | </a-form> |
| | | </a-spin> |
| | | </a-modal> |
| | | </template> |
| | | |
| | | <script> |
| | | import { blogArticleCommentAdd } from '@/api/modular/main/blogarticlecomment/blogArticleCommentManage' |
| | | export default { |
| | | data () { |
| | | return { |
| | | labelCol: { |
| | | xs: { span: 24 }, |
| | | sm: { span: 5 } |
| | | }, |
| | | wrapperCol: { |
| | | xs: { span: 24 }, |
| | | sm: { span: 15 } |
| | | }, |
| | | isCheckData: [], |
| | | authStatusData: [], |
| | | isEnableData: [], |
| | | visible: false, |
| | | confirmLoading: false, |
| | | form: this.$form.createForm(this) |
| | | } |
| | | }, |
| | | methods: { |
| | | // 初始化方法 |
| | | add (record) { |
| | | this.visible = true |
| | | const commentTypeOption = this.$options |
| | | this.commentTypeData = commentTypeOption.filters['dictData']('blog_comment_type') |
| | | const isCheckOption = this.$options |
| | | this.isCheckData = isCheckOption.filters['dictData']('blog_yes_or_no') |
| | | const authStatusOption = this.$options |
| | | this.authStatusData = authStatusOption.filters['dictData']('blog_auth_status') |
| | | const isEnableOption = this.$options |
| | | this.isEnableData = isEnableOption.filters['dictData']('blog_yes_or_no') |
| | | }, |
| | | /** |
| | | * 提交表单 |
| | | */ |
| | | handleSubmit () { |
| | | const { form: { validateFields } } = this |
| | | this.confirmLoading = true |
| | | validateFields((errors, values) => { |
| | | if (!errors) { |
| | | for (const key in values) { |
| | | if (typeof (values[key]) === 'object' && values[key] != null) { |
| | | values[key] = JSON.stringify(values[key]) |
| | | } |
| | | } |
| | | blogArticleCommentAdd(values).then((res) => { |
| | | if (res.success) { |
| | | this.$message.success('新增成功') |
| | | this.confirmLoading = false |
| | | this.$emit('ok', values) |
| | | this.handleCancel() |
| | | } else { |
| | | this.$message.error('新增失败')// + res.message |
| | | } |
| | | }).finally((res) => { |
| | | this.confirmLoading = false |
| | | }) |
| | | } else { |
| | | this.confirmLoading = false |
| | | } |
| | | }) |
| | | }, |
| | | handleCancel () { |
| | | this.form.resetFields() |
| | | this.visible = false |
| | | } |
| | | } |
| | | } |
| | | </script> |
New file |
| | |
| | | <template> |
| | | <a-modal |
| | | title="编辑文章评论" |
| | | :width="900" |
| | | :visible="visible" |
| | | :confirmLoading="confirmLoading" |
| | | @ok="handleSubmit" |
| | | @cancel="handleCancel" |
| | | > |
| | | <a-spin :spinning="confirmLoading"> |
| | | <a-form :form="form"> |
| | | <a-form-item v-show="false"><a-input v-decorator="['id']" /></a-form-item> |
| | | <a-form-item |
| | | label="访客名称" |
| | | :labelCol="labelCol" |
| | | :wrapperCol="wrapperCol" |
| | | has-feedback |
| | | > |
| | | <a-input placeholder="请输入访客名称" v-decorator="['visitorNickName', {rules: [{required: true, message: '请输入访客名称!'}]}]" /> |
| | | </a-form-item> |
| | | <a-form-item |
| | | label="访客邮箱" |
| | | :labelCol="labelCol" |
| | | :wrapperCol="wrapperCol" |
| | | has-feedback |
| | | > |
| | | <a-input placeholder="请输入访客邮箱" v-decorator="['visitorEmail']" /> |
| | | </a-form-item> |
| | | <a-form-item |
| | | label="访客主页" |
| | | :labelCol="labelCol" |
| | | :wrapperCol="wrapperCol" |
| | | has-feedback |
| | | > |
| | | <a-input placeholder="请输入访客主页" v-decorator="['visitorHomePage']" /> |
| | | </a-form-item> |
| | | <a-form-item |
| | | label="留言内容" |
| | | :labelCol="labelCol" |
| | | :wrapperCol="wrapperCol" |
| | | has-feedback |
| | | > |
| | | <a-textarea placeholder="请输入留言内容" v-decorator="['commentContent']" :auto-size="{ minRows: 3, maxRows: 6 }"/> |
| | | </a-form-item> |
| | | <a-form-item |
| | | label="是否已审核" |
| | | :labelCol="labelCol" |
| | | :wrapperCol="wrapperCol" |
| | | > |
| | | <a-select style="width: 100%" placeholder="请选择是否已审核"> |
| | | <a-select-option v-for="(item,index) in isCheckData" :key="index" :value="item.code">{{ item.name }}</a-select-option> |
| | | </a-select> |
| | | </a-form-item> |
| | | <a-form-item |
| | | label="公开状态" |
| | | :labelCol="labelCol" |
| | | :wrapperCol="wrapperCol" |
| | | > |
| | | <a-select style="width: 100%" placeholder="请选择公开状态"> |
| | | <a-select-option v-for="(item,index) in authStatusData" :key="index" :value="item.code">{{ item.name }}</a-select-option> |
| | | </a-select> |
| | | </a-form-item> |
| | | <a-form-item |
| | | label="是否启用" |
| | | :labelCol="labelCol" |
| | | :wrapperCol="wrapperCol" |
| | | > |
| | | <a-select style="width: 100%" placeholder="请选择是否启用"> |
| | | <a-select-option v-for="(item,index) in isEnableData" :key="index" :value="item.code">{{ item.name }}</a-select-option> |
| | | </a-select> |
| | | </a-form-item> |
| | | </a-form> |
| | | </a-spin> |
| | | </a-modal> |
| | | </template> |
| | | |
| | | <script> |
| | | import { blogArticleCommentEdit } from '@/api/modular/main/blogarticlecomment/blogArticleCommentManage' |
| | | export default { |
| | | data () { |
| | | return { |
| | | labelCol: { |
| | | xs: { span: 24 }, |
| | | sm: { span: 5 } |
| | | }, |
| | | wrapperCol: { |
| | | xs: { span: 24 }, |
| | | sm: { span: 15 } |
| | | }, |
| | | isCheckData: [], |
| | | authStatusData: [], |
| | | isEnableData: [], |
| | | visible: false, |
| | | confirmLoading: false, |
| | | form: this.$form.createForm(this) |
| | | } |
| | | }, |
| | | methods: { |
| | | // 初始化方法 |
| | | edit (record) { |
| | | this.visible = true |
| | | const commentTypeOption = this.$options |
| | | this.commentTypeData = commentTypeOption.filters['dictData']('blog_comment_type') |
| | | const isCheckOption = this.$options |
| | | this.isCheckData = isCheckOption.filters['dictData']('blog_yes_or_no') |
| | | const authStatusOption = this.$options |
| | | this.authStatusData = authStatusOption.filters['dictData']('blog_auth_status') |
| | | const isEnableOption = this.$options |
| | | this.isEnableData = isEnableOption.filters['dictData']('blog_yes_or_no') |
| | | setTimeout(() => { |
| | | console.log(11); |
| | | this.form.setFieldsValue( |
| | | { |
| | | id: record.id, |
| | | visitorNickName: record.visitorNickName, |
| | | visitorEmail: record.visitorEmail, |
| | | visitorHomePage: record.visitorHomePage, |
| | | commentContent: record.commentContent, |
| | | isCheck: record.isCheck, |
| | | authStatus: record.authStatus, |
| | | isEnable: record.isEnable |
| | | } |
| | | ) |
| | | }, 100) |
| | | }, |
| | | handleSubmit () { |
| | | const { form: { validateFields } } = this |
| | | this.confirmLoading = true |
| | | validateFields((errors, values) => { |
| | | if (!errors) { |
| | | for (const key in values) { |
| | | if (typeof (values[key]) === 'object' && values[key] != null) { |
| | | values[key] = JSON.stringify(values[key]) |
| | | } |
| | | } |
| | | blogArticleCommentEdit(values).then((res) => { |
| | | if (res.success) { |
| | | this.$message.success('编辑成功') |
| | | this.confirmLoading = false |
| | | this.$emit('ok', values) |
| | | this.handleCancel() |
| | | } else { |
| | | this.$message.error('编辑失败')// + res.message |
| | | } |
| | | }).finally((res) => { |
| | | this.confirmLoading = false |
| | | }) |
| | | } else { |
| | | this.confirmLoading = false |
| | | } |
| | | }) |
| | | }, |
| | | handleCancel () { |
| | | this.form.resetFields() |
| | | this.visible = false |
| | | } |
| | | } |
| | | } |
| | | </script> |
New file |
| | |
| | | <template> |
| | | <div> |
| | | <a-card :bordered="false" :bodyStyle="tstyle"> |
| | | <div class="table-page-search-wrapper" v-if="hasPerm('blogArticleComment:page')"> |
| | | <a-form layout="inline"> |
| | | <a-row :gutter="48"> |
| | | <a-col :md="8" :sm="24"> |
| | | <a-form-item label="留言类型"> |
| | | <a-select style="width: 100%" v-model="queryParam.commentType" placeholder="请选择留言类型"> |
| | | <a-select-option v-for="(item,index) in commentTypeData" :key="index" :value="item.code">{{ item.name }}</a-select-option> |
| | | </a-select> |
| | | </a-form-item> |
| | | </a-col> |
| | | <a-col :md="8" :sm="24"> |
| | | <a-form-item label="文章id主键"> |
| | | <a-input v-model="queryParam.articleId" allow-clear placeholder="请输入文章id主键"/> |
| | | </a-form-item> |
| | | </a-col> |
| | | <template v-if="advanced"> |
| | | <a-col :md="8" :sm="24"> |
| | | <a-form-item label="访客id(随机字符)"> |
| | | <a-input v-model="queryParam.visitorId" allow-clear placeholder="请输入访客id(随机字符)"/> |
| | | </a-form-item> |
| | | </a-col> |
| | | <a-col :md="8" :sm="24"> |
| | | <a-form-item label="访客名称"> |
| | | <a-input v-model="queryParam.visitorNickName" allow-clear placeholder="请输入访客名称"/> |
| | | </a-form-item> |
| | | </a-col> |
| | | <a-col :md="8" :sm="24"> |
| | | <a-form-item label="访客邮箱"> |
| | | <a-input v-model="queryParam.visitorEmail" allow-clear placeholder="请输入访客邮箱"/> |
| | | </a-form-item> |
| | | </a-col> |
| | | <a-col :md="8" :sm="24"> |
| | | <a-form-item label="访客主页"> |
| | | <a-input v-model="queryParam.visitorHomePage" allow-clear placeholder="请输入访客主页"/> |
| | | </a-form-item> |
| | | </a-col> |
| | | <a-col :md="8" :sm="24"> |
| | | <a-form-item label="是否已审核"> |
| | | <a-select style="width: 100%" v-model="queryParam.isCheck" placeholder="请选择是否已审核"> |
| | | <a-select-option v-for="(item,index) in isCheckData" :key="index" :value="item.code">{{ item.name }}</a-select-option> |
| | | </a-select> |
| | | </a-form-item> |
| | | </a-col> |
| | | <a-col :md="8" :sm="24"> |
| | | <a-form-item label="公开状态"> |
| | | <a-select style="width: 100%" v-model="queryParam.authStatus" placeholder="请选择公开状态"> |
| | | <a-select-option v-for="(item,index) in authStatusData" :key="index" :value="item.code">{{ item.name }}</a-select-option> |
| | | </a-select> |
| | | </a-form-item> |
| | | </a-col> |
| | | <a-col :md="8" :sm="24"> |
| | | <a-form-item label="是否启用"> |
| | | <a-select style="width: 100%" v-model="queryParam.isEnable" placeholder="请选择是否启用"> |
| | | <a-select-option v-for="(item,index) in isEnableData" :key="index" :value="item.code">{{ item.name }}</a-select-option> |
| | | </a-select> |
| | | </a-form-item> |
| | | </a-col> |
| | | <a-col :md="8" :sm="24"> |
| | | <a-form-item label="创建时间"> |
| | | <a-date-picker style="width: 100%" placeholder="请选择创建时间" v-model="queryParam.createDateDate" @change="onChangecreateDate"/> |
| | | </a-form-item> |
| | | </a-col> |
| | | </template> |
| | | <a-col :md="8" :sm="24" > |
| | | <span class="table-page-search-submitButtons"> |
| | | <a-button type="primary" @click="$refs.table.refresh(true)" >查询</a-button> |
| | | <a-button style="margin-left: 8px" @click="() => queryParam = {}">重置</a-button> |
| | | <a @click="toggleAdvanced" style="margin-left: 8px"> |
| | | {{ advanced ? '收起' : '展开' }} |
| | | <a-icon :type="advanced ? 'up' : 'down'"/> |
| | | </a> |
| | | </span> |
| | | </a-col> |
| | | </a-row> |
| | | </a-form> |
| | | </div> |
| | | </a-card> |
| | | <a-card :bordered="false"> |
| | | <s-table |
| | | ref="table" |
| | | :columns="columns" |
| | | :data="loadData" |
| | | :alert="options.alert" |
| | | :rowKey="(record) => record.id" |
| | | :rowSelection="options.rowSelection" |
| | | > |
| | | <template class="table-operator" slot="operator" v-if="hasPerm('blogArticleComment:add')" > |
| | | <a-button type="primary" v-if="hasPerm('blogArticleComment:add')" icon="plus" @click="$refs.addForm.add()">新增文章评论</a-button> |
| | | <a-button type="danger" :disabled="selectedRowKeys.length < 1" v-if="hasPerm('blogArticleComment:delete')" @click="batchDelete"><a-icon type="delete"/>批量删除</a-button> |
| | | <x-down |
| | | v-if="hasPerm('blogArticleComment:export')" |
| | | ref="batchExport" |
| | | @batchExport="batchExport" |
| | | /> |
| | | </template> |
| | | <span slot="commentTypeScopedSlots" slot-scope="text"> |
| | | {{ 'blog_comment_type' | dictType(text) }} |
| | | </span> |
| | | <span slot="isCheckScopedSlots" slot-scope="text"> |
| | | {{ 'blog_yes_or_no' | dictType(text) }} |
| | | </span> |
| | | <span slot="authStatusScopedSlots" slot-scope="text"> |
| | | {{ 'blog_auth_status' | dictType(text) }} |
| | | </span> |
| | | <span slot="isEnableScopedSlots" slot-scope="text"> |
| | | {{ 'blog_yes_or_no' | dictType(text) }} |
| | | </span> |
| | | <span slot="action" slot-scope="text, record"> |
| | | <a v-if="hasPerm('blogArticleComment:edit')" @click="$refs.editForm.edit(record)">编辑</a> |
| | | <a-divider type="vertical" v-if="hasPerm('blogArticleComment:edit') & hasPerm('blogArticleComment:delete')"/> |
| | | <a-popconfirm v-if="hasPerm('blogArticleComment:delete')" placement="topRight" title="确认删除?" @confirm="() => singleDelete(record)"> |
| | | <a>删除</a> |
| | | </a-popconfirm> |
| | | </span> |
| | | </s-table> |
| | | <add-form ref="addForm" @ok="handleOk" /> |
| | | <edit-form ref="editForm" @ok="handleOk" /> |
| | | </a-card> |
| | | </div> |
| | | </template> |
| | | <script> |
| | | import { STable, XDown } from '@/components' |
| | | import moment from 'moment' |
| | | import { blogArticleCommentPage, blogArticleCommentDelete, blogArticleCommentExport } from '@/api/modular/main/blogarticlecomment/blogArticleCommentManage' |
| | | import addForm from './addForm.vue' |
| | | import editForm from './editForm.vue' |
| | | export default { |
| | | components: { |
| | | STable, |
| | | addForm, |
| | | editForm, |
| | | XDown |
| | | }, |
| | | data () { |
| | | return { |
| | | // 高级搜索 展开/关闭 |
| | | advanced: false, |
| | | // 查询参数 |
| | | queryParam: {}, |
| | | // 表头 |
| | | columns: [ |
| | | { |
| | | title: '留言类型', |
| | | align: 'center', |
| | | dataIndex: 'commentType', |
| | | scopedSlots: { customRender: 'commentTypeScopedSlots' } |
| | | }, |
| | | { |
| | | title: '文章id主键', |
| | | align: 'center', |
| | | dataIndex: 'articleId' |
| | | }, |
| | | { |
| | | title: '访客id(随机字符)', |
| | | align: 'center', |
| | | dataIndex: 'visitorId' |
| | | }, |
| | | { |
| | | title: '访客名称', |
| | | align: 'center', |
| | | dataIndex: 'visitorNickName' |
| | | }, |
| | | { |
| | | title: '访客邮箱', |
| | | align: 'center', |
| | | dataIndex: 'visitorEmail' |
| | | }, |
| | | { |
| | | title: '访客主页', |
| | | align: 'center', |
| | | dataIndex: 'visitorHomePage' |
| | | }, |
| | | { |
| | | title: '留言内容', |
| | | align: 'center', |
| | | dataIndex: 'commentContent' |
| | | }, |
| | | { |
| | | title: '是否已审核', |
| | | align: 'center', |
| | | dataIndex: 'isCheck', |
| | | scopedSlots: { customRender: 'isCheckScopedSlots' } |
| | | }, |
| | | { |
| | | title: '公开状态', |
| | | align: 'center', |
| | | dataIndex: 'authStatus', |
| | | scopedSlots: { customRender: 'authStatusScopedSlots' } |
| | | }, |
| | | { |
| | | title: '是否启用', |
| | | align: 'center', |
| | | dataIndex: 'isEnable', |
| | | scopedSlots: { customRender: 'isEnableScopedSlots' } |
| | | }, |
| | | { |
| | | title: '更新时间', |
| | | align: 'center', |
| | | dataIndex: 'updateDate' |
| | | }, |
| | | { |
| | | title: '创建时间', |
| | | align: 'center', |
| | | dataIndex: 'createDate' |
| | | } |
| | | ], |
| | | tstyle: { 'padding-bottom': '0px', 'margin-bottom': '10px' }, |
| | | // 加载数据方法 必须为 Promise 对象 |
| | | loadData: parameter => { |
| | | return blogArticleCommentPage(Object.assign(parameter, this.switchingDate())).then((res) => { |
| | | return res.data |
| | | }) |
| | | }, |
| | | commentTypeData: [], |
| | | isCheckData: [], |
| | | authStatusData: [], |
| | | isEnableData: [], |
| | | selectedRowKeys: [], |
| | | selectedRows: [], |
| | | options: { |
| | | alert: { show: true, clear: () => { this.selectedRowKeys = [] } }, |
| | | rowSelection: { |
| | | selectedRowKeys: this.selectedRowKeys, |
| | | onChange: this.onSelectChange |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | created () { |
| | | if (this.hasPerm('blogArticleComment:edit') || this.hasPerm('blogArticleComment:delete')) { |
| | | this.columns.push({ |
| | | title: '操作', |
| | | width: '150px', |
| | | dataIndex: 'action', |
| | | scopedSlots: { customRender: 'action' } |
| | | }) |
| | | } |
| | | const commentTypeOption = this.$options |
| | | this.commentTypeData = commentTypeOption.filters['dictData']('blog_comment_type') |
| | | const isCheckOption = this.$options |
| | | this.isCheckData = isCheckOption.filters['dictData']('blog_yes_or_no') |
| | | const authStatusOption = this.$options |
| | | this.authStatusData = authStatusOption.filters['dictData']('blog_auth_status') |
| | | const isEnableOption = this.$options |
| | | this.isEnableData = isEnableOption.filters['dictData']('blog_yes_or_no') |
| | | }, |
| | | methods: { |
| | | moment, |
| | | /** |
| | | * 查询参数组装 |
| | | */ |
| | | switchingDate () { |
| | | const queryParamcreateDate = this.queryParam.createDateDate |
| | | if (queryParamcreateDate != null) { |
| | | this.queryParam.createDate = moment(queryParamcreateDate).format('YYYY-MM-DD') |
| | | if (queryParamcreateDate.length < 1) { |
| | | delete this.queryParam.createDate |
| | | } |
| | | } |
| | | const obj = JSON.parse(JSON.stringify(this.queryParam)) |
| | | return obj |
| | | }, |
| | | /** |
| | | * 单个删除 |
| | | */ |
| | | singleDelete (record) { |
| | | const param = [{ 'id': record.id }] |
| | | this.blogArticleCommentDelete(param) |
| | | }, |
| | | /** |
| | | * 批量删除 |
| | | */ |
| | | batchDelete () { |
| | | const paramIds = this.selectedRowKeys.map((d) => { |
| | | return { 'id': d } |
| | | }) |
| | | this.blogArticleCommentDelete(paramIds) |
| | | }, |
| | | blogArticleCommentDelete (record) { |
| | | blogArticleCommentDelete(record).then((res) => { |
| | | if (res.success) { |
| | | this.$message.success('删除成功') |
| | | this.$refs.table.clearRefreshSelected() |
| | | } else { |
| | | this.$message.error('删除失败') // + res.message |
| | | } |
| | | }) |
| | | }, |
| | | toggleAdvanced () { |
| | | this.advanced = !this.advanced |
| | | }, |
| | | onChangecreateDate(date, dateString) { |
| | | this.createDateDateString = dateString |
| | | }, |
| | | /** |
| | | * 批量导出 |
| | | */ |
| | | batchExport () { |
| | | const paramIds = this.selectedRowKeys.map((d) => { |
| | | return { 'id': d } |
| | | }) |
| | | blogArticleCommentExport(paramIds).then((res) => { |
| | | this.$refs.batchExport.downloadfile(res) |
| | | }) |
| | | }, |
| | | handleOk () { |
| | | this.$refs.table.refresh() |
| | | }, |
| | | onSelectChange (selectedRowKeys, selectedRows) { |
| | | this.selectedRowKeys = selectedRowKeys |
| | | this.selectedRows = selectedRows |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | <style lang="less"> |
| | | .table-operator { |
| | | margin-bottom: 18px; |
| | | } |
| | | button { |
| | | margin-right: 8px; |
| | | } |
| | | </style> |
| | |
| | | package vip.xiaonuo.core.consts; |
| | | |
| | | public interface MyConstant { |
| | | Integer No = 0; |
| | | Integer Yes = 1; |
| | | Integer No = 1; |
| | | |
| | | interface AuthStatus { |
| | | int publicCode = 1; |
| | | int privateCode = 2; |
| | | int authCode = 3; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 留言类型 1:留言板 2:日志评论 |
| | | */ |
| | | interface CommentType { |
| | | int type_1 = 1; |
| | | int type_2 = 2; |
| | | } |
| | | } |
| | |
| | | import vip.xiaonuo.modular.blogarticle.entity.BlogArticle; |
| | | import vip.xiaonuo.modular.blogarticle.param.BlogArticleAddDto; |
| | | import vip.xiaonuo.modular.blogarticle.param.BlogArticleQueryDto; |
| | | import vip.xiaonuo.modular.blogarticle.param.BlogArticleVo; |
| | | import vip.xiaonuo.modular.blogarticle.entity.BlogArticleVo; |
| | | import vip.xiaonuo.modular.blogarticle.service.BlogArticleService; |
| | | import vip.xiaonuo.modular.blogarticletype.entity.BlogArticleType; |
| | | import vip.xiaonuo.modular.blogarticletype.service.BlogArticleTypeService; |
| | |
| | | throw new BlogException(BlogExceptionEnum.article_auth_error); |
| | | } |
| | | //授权码比对 |
| | | if (!SecureUtil.md5(find.getAuthPassword()).equals(queryDto.getAuthWord())) { |
| | | if (!find.getAuthPassword().equals(queryDto.getAuthWord())) { |
| | | throw new BlogException(BlogExceptionEnum.article_auth_pass_error); |
| | | } |
| | | } else if (find.getAuthStatus().equals(MyConstant.AuthStatus.privateCode)) { |
File was renamed from snowy-main/src/main/java/vip/xiaonuo/modular/blogarticle/param/BlogArticleVo.java |
| | |
| | | 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/xiaonuobase/snowy |
| | | 6.若您的项目无法满足以上几点,可申请商业授权,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip |
| | | */ |
| | | package vip.xiaonuo.modular.blogarticle.param; |
| | | package vip.xiaonuo.modular.blogarticle.entity; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import lombok.Data; |
| | |
| | | |
| | | </sql> |
| | | |
| | | <select id="searchList" resultType="vip.xiaonuo.modular.blogarticle.param.BlogArticleVo"> |
| | | <select id="searchList" resultType="vip.xiaonuo.modular.blogarticle.entity.BlogArticleVo"> |
| | | select |
| | | <include refid="Base_Column_List"/> |
| | | ,IFNULL("",CONCAT("/",f2.file_bucket,"/",f2.file_object_name)) as coverFileURL |
| | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import vip.xiaonuo.core.pojo.page.PageResult; |
| | | import vip.xiaonuo.modular.blogStatistics.vo.BlogArchiveDetailVo; |
| | | import vip.xiaonuo.modular.blogStatistics.vo.BlogArchiveVo; |
| | | import vip.xiaonuo.modular.blogarticle.entity.BlogArticle; |
| | | import vip.xiaonuo.modular.blogarticle.param.BlogArticleParam; |
| | | import vip.xiaonuo.modular.blogarticle.param.BlogArticleVo; |
| | | import vip.xiaonuo.modular.blogarticle.entity.BlogArticleVo; |
| | | |
| | | import java.util.List; |
| | | import java.util.Map; |
New file |
| | |
| | | /* |
| | | Copyright [2020] [https://www.xiaonuo.vip] |
| | | |
| | | Licensed under the Apache License, Version 2.0 (the "License"); |
| | | you may not use this file except in compliance with the License. |
| | | You may obtain a copy of the License at |
| | | |
| | | http://www.apache.org/licenses/LICENSE-2.0 |
| | | |
| | | Unless required by applicable law or agreed to in writing, software |
| | | distributed under the License is distributed on an "AS IS" BASIS, |
| | | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| | | See the License for the specific language governing permissions and |
| | | limitations under the License. |
| | | |
| | | Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: |
| | | |
| | | 1.请不要删除和修改根目录下的LICENSE文件。 |
| | | 2.请不要删除和修改Snowy源码头部的版权声明。 |
| | | 3.请保留源码和相关描述文件的项目出处,作者声明等。 |
| | | 4.分发源码时候,请注明软件出处 https://gitee.com/xiaonuobase/snowy |
| | | 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/xiaonuobase/snowy |
| | | 6.若您的项目无法满足以上几点,可申请商业授权,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip |
| | | */ |
| | | package vip.xiaonuo.modular.blogarticlecomment.controller; |
| | | |
| | | import vip.xiaonuo.core.annotion.BusinessLog; |
| | | import vip.xiaonuo.core.annotion.Permission; |
| | | import vip.xiaonuo.core.enums.LogAnnotionOpTypeEnum; |
| | | import vip.xiaonuo.core.pojo.response.ResponseData; |
| | | import vip.xiaonuo.core.pojo.response.SuccessResponseData; |
| | | import vip.xiaonuo.modular.blogarticlecomment.param.BlogArticleCommentParam; |
| | | import vip.xiaonuo.modular.blogarticlecomment.service.BlogArticleCommentService; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | import javax.annotation.Resource; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 文章评论控制器 |
| | | * |
| | | * @author inleft |
| | | * @date 2022-03-01 14:00:53 |
| | | */ |
| | | @RestController |
| | | public class BlogArticleCommentController { |
| | | |
| | | @Resource |
| | | private BlogArticleCommentService blogArticleCommentService; |
| | | |
| | | /** |
| | | * 查询文章评论 |
| | | * |
| | | * @author inleft |
| | | * @date 2022-03-01 14:00:53 |
| | | */ |
| | | @Permission |
| | | @GetMapping("/blogArticleComment/page") |
| | | @BusinessLog(title = "文章评论_查询", opType = LogAnnotionOpTypeEnum.QUERY) |
| | | public ResponseData page(BlogArticleCommentParam blogArticleCommentParam) { |
| | | return new SuccessResponseData(blogArticleCommentService.page(blogArticleCommentParam)); |
| | | } |
| | | |
| | | /** |
| | | * 添加文章评论 |
| | | * |
| | | * @author inleft |
| | | * @date 2022-03-01 14:00:53 |
| | | */ |
| | | @Permission |
| | | @PostMapping("/blogArticleComment/add") |
| | | @BusinessLog(title = "文章评论_增加", opType = LogAnnotionOpTypeEnum.ADD) |
| | | public ResponseData add(@RequestBody @Validated(BlogArticleCommentParam.add.class) BlogArticleCommentParam blogArticleCommentParam) { |
| | | blogArticleCommentService.add(blogArticleCommentParam); |
| | | return new SuccessResponseData(); |
| | | } |
| | | |
| | | /** |
| | | * 删除文章评论,可批量删除 |
| | | * |
| | | * @author inleft |
| | | * @date 2022-03-01 14:00:53 |
| | | */ |
| | | @Permission |
| | | @PostMapping("/blogArticleComment/delete") |
| | | @BusinessLog(title = "文章评论_删除", opType = LogAnnotionOpTypeEnum.DELETE) |
| | | public ResponseData delete(@RequestBody @Validated(BlogArticleCommentParam.delete.class) List<BlogArticleCommentParam> blogArticleCommentParamList) { |
| | | blogArticleCommentService.delete(blogArticleCommentParamList); |
| | | return new SuccessResponseData(); |
| | | } |
| | | |
| | | /** |
| | | * 编辑文章评论 |
| | | * |
| | | * @author inleft |
| | | * @date 2022-03-01 14:00:53 |
| | | */ |
| | | @Permission |
| | | @PostMapping("/blogArticleComment/edit") |
| | | @BusinessLog(title = "文章评论_编辑", opType = LogAnnotionOpTypeEnum.EDIT) |
| | | public ResponseData edit(@RequestBody @Validated(BlogArticleCommentParam.edit.class) BlogArticleCommentParam blogArticleCommentParam) { |
| | | blogArticleCommentService.edit(blogArticleCommentParam); |
| | | return new SuccessResponseData(); |
| | | } |
| | | |
| | | /** |
| | | * 查看文章评论 |
| | | * |
| | | * @author inleft |
| | | * @date 2022-03-01 14:00:53 |
| | | */ |
| | | @Permission |
| | | @GetMapping("/blogArticleComment/detail") |
| | | @BusinessLog(title = "文章评论_查看", opType = LogAnnotionOpTypeEnum.DETAIL) |
| | | public ResponseData detail(@Validated(BlogArticleCommentParam.detail.class) BlogArticleCommentParam blogArticleCommentParam) { |
| | | return new SuccessResponseData(blogArticleCommentService.detail(blogArticleCommentParam)); |
| | | } |
| | | |
| | | /** |
| | | * 文章评论列表 |
| | | * |
| | | * @author inleft |
| | | * @date 2022-03-01 14:00:53 |
| | | */ |
| | | @Permission |
| | | @GetMapping("/blogArticleComment/list") |
| | | @BusinessLog(title = "文章评论_列表", opType = LogAnnotionOpTypeEnum.QUERY) |
| | | public ResponseData list(BlogArticleCommentParam blogArticleCommentParam) { |
| | | return new SuccessResponseData(blogArticleCommentService.list(blogArticleCommentParam)); |
| | | } |
| | | |
| | | /** |
| | | * 导出系统用户 |
| | | * |
| | | * @author inleft |
| | | * @date 2022-03-01 14:00:53 |
| | | */ |
| | | @Permission |
| | | @GetMapping("/blogArticleComment/export") |
| | | @BusinessLog(title = "文章评论_导出", opType = LogAnnotionOpTypeEnum.EXPORT) |
| | | public void export(BlogArticleCommentParam blogArticleCommentParam) { |
| | | blogArticleCommentService.export(blogArticleCommentParam); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | /* |
| | | Copyright [2020] [https://www.xiaonuo.vip] |
| | | |
| | | Licensed under the Apache License, Version 2.0 (the "License"); |
| | | you may not use this file except in compliance with the License. |
| | | You may obtain a copy of the License at |
| | | |
| | | http://www.apache.org/licenses/LICENSE-2.0 |
| | | |
| | | Unless required by applicable law or agreed to in writing, software |
| | | distributed under the License is distributed on an "AS IS" BASIS, |
| | | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| | | See the License for the specific language governing permissions and |
| | | limitations under the License. |
| | | |
| | | Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: |
| | | |
| | | 1.请不要删除和修改根目录下的LICENSE文件。 |
| | | 2.请不要删除和修改Snowy源码头部的版权声明。 |
| | | 3.请保留源码和相关描述文件的项目出处,作者声明等。 |
| | | 4.分发源码时候,请注明软件出处 https://gitee.com/xiaonuobase/snowy |
| | | 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/xiaonuobase/snowy |
| | | 6.若您的项目无法满足以上几点,可申请商业授权,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip |
| | | */ |
| | | package vip.xiaonuo.modular.blogarticlecomment.controller; |
| | | |
| | | import cn.hutool.core.bean.BeanUtil; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.*; |
| | | import vip.xiaonuo.core.annotion.BusinessLog; |
| | | import vip.xiaonuo.core.consts.MyConstant; |
| | | import vip.xiaonuo.core.enums.LogAnnotionOpTypeEnum; |
| | | import vip.xiaonuo.core.exception.BlogException; |
| | | import vip.xiaonuo.core.pojo.response.ResponseData; |
| | | import vip.xiaonuo.core.pojo.response.SuccessResponseData; |
| | | import vip.xiaonuo.modular.blogarticle.service.BlogArticleService; |
| | | import vip.xiaonuo.modular.blogarticlecomment.entity.BlogArticleComment; |
| | | import vip.xiaonuo.modular.blogarticlecomment.entity.BlogCommentVo; |
| | | import vip.xiaonuo.modular.blogarticlecomment.param.BlogArticleCommentAddDto; |
| | | import vip.xiaonuo.modular.blogarticlecomment.param.BlogCommentQueryDto; |
| | | import vip.xiaonuo.modular.blogarticlecomment.service.BlogArticleCommentService; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * blog 留言/评论 控制器 (提供给外部blog系统查询) |
| | | * |
| | | * @author inleft |
| | | * @date 2022-02-09 18:20:22 |
| | | */ |
| | | @RestController |
| | | @RequestMapping("/outside") |
| | | public class BlogArticleCommentOutsideController { |
| | | |
| | | @Resource |
| | | private BlogArticleService blogArticleService; |
| | | |
| | | |
| | | @Resource |
| | | private BlogArticleCommentService blogArticleCommentService; |
| | | |
| | | |
| | | @PostMapping("/blogComment/add") |
| | | @BusinessLog(title = "外部blog系统_blog留言/评论_增加", opType = LogAnnotionOpTypeEnum.ADD) |
| | | public ResponseData add(@RequestBody @Validated(BlogArticleCommentAddDto.add.class) BlogArticleCommentAddDto addDto) { |
| | | if (addDto.getCommentType().equals(MyConstant.CommentType.type_2)) { |
| | | if (addDto.getArticleId() == null) { |
| | | throw new BlogException("评论类型为日志评论,日志id不能为空"); |
| | | } |
| | | if (blogArticleService.getById(addDto.getId()) == null) { |
| | | throw new BlogException("查询不到相关日志"); |
| | | } |
| | | } |
| | | BlogArticleComment insert = new BlogArticleComment(); |
| | | BeanUtil.copyProperties(addDto, insert); |
| | | insert.setIsCheck(MyConstant.No); |
| | | insert.setIsEnable(MyConstant.Yes); |
| | | insert.setIsReceiveCallback(addDto.getIsReceiveMail()); |
| | | |
| | | blogArticleCommentService.save(insert); |
| | | |
| | | return new SuccessResponseData(); |
| | | } |
| | | |
| | | |
| | | @GetMapping("/blogComment/queryBlogCommentList") |
| | | @BusinessLog(title = "外部blog系统_blog留言/评论_查询", opType = LogAnnotionOpTypeEnum.QUERY) |
| | | public ResponseData queryBlogCommentList(BlogCommentQueryDto queryDto) { |
| | | if (queryDto.getArticleId() != null && blogArticleService.getById(queryDto.getArticleId()) == null) { |
| | | throw new BlogException("查询不到相关日志"); |
| | | } |
| | | |
| | | Page queryPage = new Page<>(queryDto.getPageNo(), queryDto.getPageSize()); |
| | | |
| | | |
| | | List<BlogArticleComment> commentList = blogArticleCommentService.lambdaQuery() |
| | | .eq(queryDto.getArticleId() != null, BlogArticleComment::getArticleId, queryDto.getArticleId()) |
| | | .eq(BlogArticleComment::getCommentType, queryDto.getArticleId() == null ? MyConstant.CommentType.type_1 : MyConstant.CommentType.type_2) |
| | | .eq(BlogArticleComment::getIsEnable, MyConstant.Yes) |
| | | .eq(BlogArticleComment::getParentId,0) |
| | | .orderByDesc(BlogArticleComment::getCreateDate) |
| | | .page(queryPage).getRecords(); |
| | | |
| | | List<BlogCommentVo> res = commentList.stream().map(e -> { |
| | | BlogCommentVo vo = new BlogCommentVo(); |
| | | BeanUtil.copyProperties(e, vo); |
| | | |
| | | return vo; |
| | | } |
| | | ).collect(Collectors.toList()); |
| | | |
| | | queryPage.setRecords(res); |
| | | return new SuccessResponseData(queryPage); |
| | | } |
| | | } |
New file |
| | |
| | | /* |
| | | Copyright [2020] [https://www.xiaonuo.vip] |
| | | |
| | | Licensed under the Apache License, Version 2.0 (the "License"); |
| | | you may not use this file except in compliance with the License. |
| | | You may obtain a copy of the License at |
| | | |
| | | http://www.apache.org/licenses/LICENSE-2.0 |
| | | |
| | | Unless required by applicable law or agreed to in writing, software |
| | | distributed under the License is distributed on an "AS IS" BASIS, |
| | | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| | | See the License for the specific language governing permissions and |
| | | limitations under the License. |
| | | |
| | | Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: |
| | | |
| | | 1.请不要删除和修改根目录下的LICENSE文件。 |
| | | 2.请不要删除和修改Snowy源码头部的版权声明。 |
| | | 3.请保留源码和相关描述文件的项目出处,作者声明等。 |
| | | 4.分发源码时候,请注明软件出处 https://gitee.com/xiaonuobase/snowy |
| | | 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/xiaonuobase/snowy |
| | | 6.若您的项目无法满足以上几点,可申请商业授权,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip |
| | | */ |
| | | package vip.xiaonuo.modular.blogarticlecomment.entity; |
| | | |
| | | import cn.afterturn.easypoi.excel.annotation.Excel; |
| | | import com.baomidou.mybatisplus.annotation.*; |
| | | import lombok.Data; |
| | | |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * 文章评论 |
| | | * |
| | | * @author inleft |
| | | * @date 2022-03-01 14:00:53 |
| | | */ |
| | | @Data |
| | | @TableName("blog_article_comment") |
| | | public class BlogArticleComment { |
| | | |
| | | /** |
| | | * 自增id |
| | | */ |
| | | @TableId(type = IdType.ASSIGN_ID) |
| | | private Long id; |
| | | |
| | | /** |
| | | * 留言类型 1:留言板 2:日志评论 |
| | | */ |
| | | @Excel(name = "留言类型 1:留言板 2:日志评论") |
| | | private Integer commentType; |
| | | |
| | | /** |
| | | * 文章id主键 |
| | | */ |
| | | @Excel(name = "文章id主键") |
| | | private Long articleId; |
| | | |
| | | /** |
| | | * 访客id(随机字符) |
| | | */ |
| | | @Excel(name = "访客id(随机字符)") |
| | | private String visitorId; |
| | | |
| | | /** |
| | | * 访客名称 |
| | | */ |
| | | @Excel(name = "访客名称") |
| | | private String visitorNickName; |
| | | |
| | | /** |
| | | * 访客邮箱 |
| | | */ |
| | | @Excel(name = "访客邮箱") |
| | | private String visitorEmail; |
| | | |
| | | /** |
| | | * 访客主页 |
| | | */ |
| | | @Excel(name = "访客主页") |
| | | private String visitorHomePage; |
| | | |
| | | /** |
| | | * 回复id |
| | | */ |
| | | @Excel(name = "回复id") |
| | | private Long replyId; |
| | | |
| | | /** |
| | | * 父id (不为0则是子回复) |
| | | */ |
| | | @Excel(name = "父id (不为0则是子回复)") |
| | | private Long parentId; |
| | | |
| | | /** |
| | | * 留言内容(500字内) |
| | | */ |
| | | @Excel(name = "留言内容(500字内)") |
| | | private String commentContent; |
| | | |
| | | /** |
| | | * 是否已审核 0:否 1:是 |
| | | */ |
| | | @Excel(name = "是否已审核 0:否 1:是") |
| | | private Integer isCheck; |
| | | |
| | | /** |
| | | * 公开状态 1:公开 2:私密 3:密码授权 |
| | | */ |
| | | @Excel(name = "公开状态 1:公开 2:私密 3:密码授权") |
| | | private Integer authStatus; |
| | | |
| | | @Excel(name = "是否接收回信 0:否 1:是") |
| | | private Integer isReceiveCallback; |
| | | |
| | | /** |
| | | * 是否启用 0:否 1是 |
| | | */ |
| | | @Excel(name = "是否启用 0:否 1是") |
| | | private Integer isEnable; |
| | | |
| | | /** |
| | | * 更新时间 |
| | | */ |
| | | @Excel(name = "更新时间", databaseFormat = "yyyy-MM-dd HH:mm:ss", format = "yyyy-MM-dd", width = 20) |
| | | @TableField(fill = FieldFill.INSERT_UPDATE) |
| | | private Date updateDate; |
| | | |
| | | /** |
| | | * 创建时间 |
| | | */ |
| | | @Excel(name = "创建时间", databaseFormat = "yyyy-MM-dd HH:mm:ss", format = "yyyy-MM-dd", width = 20) |
| | | @TableField(fill = FieldFill.INSERT) |
| | | private Date createDate; |
| | | |
| | | } |
New file |
| | |
| | | package vip.xiaonuo.modular.blogarticlecomment.entity; |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import lombok.Data; |
| | | import lombok.experimental.Accessors; |
| | | |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | @Data |
| | | @Accessors(chain = true) |
| | | public class BlogCommentVo { |
| | | private Long id; |
| | | |
| | | private Long parentId; |
| | | |
| | | private Long replyId; |
| | | |
| | | private String visitorId; |
| | | |
| | | private String visitorNickName; |
| | | |
| | | private String visitorHomePage; |
| | | |
| | | private String commentContent; |
| | | |
| | | private String replyUserName; |
| | | |
| | | private String replyUserHomePage; |
| | | |
| | | @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") |
| | | private Date createDate; |
| | | |
| | | private List<BlogCommentVo> replyList; |
| | | |
| | | } |
New file |
| | |
| | | /* |
| | | Copyright [2020] [https://www.xiaonuo.vip] |
| | | |
| | | Licensed under the Apache License, Version 2.0 (the "License"); |
| | | you may not use this file except in compliance with the License. |
| | | You may obtain a copy of the License at |
| | | |
| | | http://www.apache.org/licenses/LICENSE-2.0 |
| | | |
| | | Unless required by applicable law or agreed to in writing, software |
| | | distributed under the License is distributed on an "AS IS" BASIS, |
| | | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| | | See the License for the specific language governing permissions and |
| | | limitations under the License. |
| | | |
| | | Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: |
| | | |
| | | 1.请不要删除和修改根目录下的LICENSE文件。 |
| | | 2.请不要删除和修改Snowy源码头部的版权声明。 |
| | | 3.请保留源码和相关描述文件的项目出处,作者声明等。 |
| | | 4.分发源码时候,请注明软件出处 https://gitee.com/xiaonuobase/snowy |
| | | 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/xiaonuobase/snowy |
| | | 6.若您的项目无法满足以上几点,可申请商业授权,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip |
| | | */ |
| | | package vip.xiaonuo.modular.blogarticlecomment.enums; |
| | | |
| | | import vip.xiaonuo.core.annotion.ExpEnumType; |
| | | import vip.xiaonuo.core.exception.enums.abs.AbstractBaseExceptionEnum; |
| | | import vip.xiaonuo.core.factory.ExpEnumCodeFactory; |
| | | import vip.xiaonuo.sys.core.consts.SysExpEnumConstant; |
| | | |
| | | /** |
| | | * 文章评论 |
| | | * |
| | | * @author inleft |
| | | * @date 2022-03-01 14:00:53 |
| | | */ |
| | | @ExpEnumType(module = SysExpEnumConstant.SNOWY_SYS_MODULE_EXP_CODE) |
| | | public enum BlogArticleCommentExceptionEnum implements AbstractBaseExceptionEnum { |
| | | |
| | | /** |
| | | * 数据不存在 |
| | | */ |
| | | NOT_EXIST(1, "此数据不存在"); |
| | | |
| | | private final Integer code; |
| | | |
| | | private final String message; |
| | | BlogArticleCommentExceptionEnum(Integer code, String message) { |
| | | this.code = code; |
| | | this.message = message; |
| | | } |
| | | |
| | | @Override |
| | | public Integer getCode() { |
| | | return ExpEnumCodeFactory.getExpEnumCode(this.getClass(), code); |
| | | } |
| | | |
| | | @Override |
| | | public String getMessage() { |
| | | return message; |
| | | } |
| | | |
| | | } |
copy from snowy-main/src/main/java/vip/xiaonuo/modular/blogfriendshiplink/param/BlogLinkVo.java
copy to snowy-main/src/main/java/vip/xiaonuo/modular/blogarticlecomment/mapper/BlogArticleCommentMapper.java
File was copied from snowy-main/src/main/java/vip/xiaonuo/modular/blogfriendshiplink/param/BlogLinkVo.java |
| | |
| | | 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/xiaonuobase/snowy |
| | | 6.若您的项目无法满足以上几点,可申请商业授权,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip |
| | | */ |
| | | package vip.xiaonuo.modular.blogfriendshiplink.param; |
| | | package vip.xiaonuo.modular.blogarticlecomment.mapper; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.util.List; |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import vip.xiaonuo.modular.blogarticlecomment.entity.BlogArticleComment; |
| | | |
| | | /** |
| | | * 友情链接参数类 |
| | | * 文章评论 |
| | | * |
| | | * @author inleft |
| | | * @date 2022-02-17 15:05:44 |
| | | * @date 2022-03-01 14:00:53 |
| | | */ |
| | | @Data |
| | | public class BlogLinkVo { |
| | | |
| | | private String groupName; |
| | | |
| | | |
| | | private List<BlogFriendshipLinkVo> linkVoList; |
| | | |
| | | public interface BlogArticleCommentMapper extends BaseMapper<BlogArticleComment> { |
| | | } |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| | | <mapper namespace="vip.xiaonuo.modular.blogarticlecomment.mapper.BlogArticleCommentMapper"> |
| | | |
| | | </mapper> |
New file |
| | |
| | | /* |
| | | Copyright [2020] [https://www.xiaonuo.vip] |
| | | |
| | | Licensed under the Apache License, Version 2.0 (the "License"); |
| | | you may not use this file except in compliance with the License. |
| | | You may obtain a copy of the License at |
| | | |
| | | http://www.apache.org/licenses/LICENSE-2.0 |
| | | |
| | | Unless required by applicable law or agreed to in writing, software |
| | | distributed under the License is distributed on an "AS IS" BASIS, |
| | | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| | | See the License for the specific language governing permissions and |
| | | limitations under the License. |
| | | |
| | | Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: |
| | | |
| | | 1.请不要删除和修改根目录下的LICENSE文件。 |
| | | 2.请不要删除和修改Snowy源码头部的版权声明。 |
| | | 3.请保留源码和相关描述文件的项目出处,作者声明等。 |
| | | 4.分发源码时候,请注明软件出处 https://gitee.com/xiaonuobase/snowy |
| | | 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/xiaonuobase/snowy |
| | | 6.若您的项目无法满足以上几点,可申请商业授权,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip |
| | | */ |
| | | package vip.xiaonuo.modular.blogarticlecomment.param; |
| | | |
| | | import lombok.Data; |
| | | import vip.xiaonuo.core.pojo.base.param.BaseParam; |
| | | |
| | | import javax.validation.constraints.*; |
| | | |
| | | /** |
| | | * 文章评论参数类 |
| | | * |
| | | * @author inleft |
| | | * @date 2022-03-01 14:00:53 |
| | | */ |
| | | @Data |
| | | public class BlogArticleCommentAddDto extends BaseParam { |
| | | |
| | | /** |
| | | * 自增id |
| | | */ |
| | | @NotNull(message = "自增id不能为空,请检查id参数", groups = {edit.class, delete.class, detail.class}) |
| | | private Long id; |
| | | |
| | | /** |
| | | * 留言类型 1:留言板 2:日志评论 |
| | | */ |
| | | @NotNull(message = "留言类型 1:留言板 2:日志评论不能为空,请检查commentType参数", groups = {add.class}) |
| | | private Integer commentType; |
| | | |
| | | /** |
| | | * 回复id |
| | | */ |
| | | private Long replyId; |
| | | |
| | | /** |
| | | * 父id (不为0则是子回复) |
| | | */ |
| | | private Long parentId; |
| | | |
| | | /** |
| | | * 文章id主键 |
| | | */ |
| | | private Long articleId; |
| | | |
| | | /** |
| | | * 访客id(随机字符) |
| | | */ |
| | | @NotBlank(message = "访客id(随机字符)不能为空,请检查visitorId参数", groups = {add.class}) |
| | | private String visitorId; |
| | | |
| | | /** |
| | | * 访客名称 |
| | | */ |
| | | @NotBlank(message = "访客名称不能为空,请检查visitorNickName参数", groups = {add.class, edit.class}) |
| | | private String visitorNickName; |
| | | |
| | | /** |
| | | * 访客邮箱 |
| | | */ |
| | | @Pattern(regexp = "^$|^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*\\.[a-zA-Z0-9]{2,6}$", message = "邮箱格式错误", groups = {add.class}) |
| | | private String visitorEmail; |
| | | |
| | | /** |
| | | * 访客主页 |
| | | */ |
| | | @Pattern(regexp = "^$|^((https|http)?:\\/\\/)[^\\s]+", message = "主页格式错误", groups = {add.class}) |
| | | private String visitorHomePage; |
| | | |
| | | /** |
| | | * 留言内容(500字内) |
| | | */ |
| | | @NotBlank(message = "留言内容不能为空", groups = {add.class}) |
| | | private String commentContent; |
| | | |
| | | /** |
| | | * 公开状态 1:公开 2:私密 3:密码授权 |
| | | */ |
| | | @Min(value = 1, message = "公开状态参数异常,请检查authStatus参数", groups = {add.class}) |
| | | @Max(value = 3, message = "公开状态参数异常,请检查authStatus参数", groups = {add.class}) |
| | | @NotNull(message = "公开状态不能为空,请检查authStatus参数", groups = {add.class}) |
| | | private Integer authStatus; |
| | | |
| | | /** |
| | | * 是否接收回信 |
| | | */ |
| | | @NotNull(message = "是否接收回信为空", groups = {add.class}) |
| | | private Integer isReceiveMail; |
| | | |
| | | } |
New file |
| | |
| | | /* |
| | | Copyright [2020] [https://www.xiaonuo.vip] |
| | | |
| | | Licensed under the Apache License, Version 2.0 (the "License"); |
| | | you may not use this file except in compliance with the License. |
| | | You may obtain a copy of the License at |
| | | |
| | | http://www.apache.org/licenses/LICENSE-2.0 |
| | | |
| | | Unless required by applicable law or agreed to in writing, software |
| | | distributed under the License is distributed on an "AS IS" BASIS, |
| | | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| | | See the License for the specific language governing permissions and |
| | | limitations under the License. |
| | | |
| | | Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: |
| | | |
| | | 1.请不要删除和修改根目录下的LICENSE文件。 |
| | | 2.请不要删除和修改Snowy源码头部的版权声明。 |
| | | 3.请保留源码和相关描述文件的项目出处,作者声明等。 |
| | | 4.分发源码时候,请注明软件出处 https://gitee.com/xiaonuobase/snowy |
| | | 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/xiaonuobase/snowy |
| | | 6.若您的项目无法满足以上几点,可申请商业授权,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip |
| | | */ |
| | | package vip.xiaonuo.modular.blogarticlecomment.param; |
| | | |
| | | import lombok.Data; |
| | | import vip.xiaonuo.core.pojo.base.param.BaseParam; |
| | | |
| | | import javax.validation.constraints.NotBlank; |
| | | import javax.validation.constraints.NotNull; |
| | | |
| | | /** |
| | | * 文章评论参数类 |
| | | * |
| | | * @author inleft |
| | | * @date 2022-03-01 14:00:53 |
| | | */ |
| | | @Data |
| | | public class BlogArticleCommentParam extends BaseParam { |
| | | |
| | | /** |
| | | * 自增id |
| | | */ |
| | | @NotNull(message = "自增id不能为空,请检查id参数", groups = {edit.class, delete.class, detail.class}) |
| | | private Long id; |
| | | |
| | | /** |
| | | * 留言类型 1:留言板 2:日志评论 |
| | | */ |
| | | @NotNull(message = "留言类型 1:留言板 2:日志评论不能为空,请检查commentType参数", groups = {add.class}) |
| | | private Integer commentType; |
| | | |
| | | /** |
| | | * 文章id主键 |
| | | */ |
| | | private Long articleId; |
| | | |
| | | /** |
| | | * 访客id(随机字符) |
| | | */ |
| | | @NotBlank(message = "访客id(随机字符)不能为空,请检查visitorId参数", groups = {add.class}) |
| | | private String visitorId; |
| | | |
| | | /** |
| | | * 访客名称 |
| | | */ |
| | | @NotBlank(message = "访客名称不能为空,请检查visitorNickName参数", groups = {add.class, edit.class}) |
| | | private String visitorNickName; |
| | | |
| | | /** |
| | | * 访客邮箱 |
| | | */ |
| | | private String visitorEmail; |
| | | |
| | | /** |
| | | * 访客主页 |
| | | */ |
| | | private String visitorHomePage; |
| | | |
| | | /** |
| | | * 回复id |
| | | */ |
| | | private Long replyId; |
| | | |
| | | /** |
| | | * 父id (不为0则是子回复) |
| | | */ |
| | | private Long parentId; |
| | | |
| | | /** |
| | | * 留言内容(500字内) |
| | | */ |
| | | private String commentContent; |
| | | |
| | | /** |
| | | * 是否已审核 0:否 1:是 |
| | | */ |
| | | private Integer isCheck; |
| | | |
| | | /** |
| | | * 公开状态 1:公开 2:私密 3:密码授权 |
| | | */ |
| | | private Integer authStatus; |
| | | |
| | | /** |
| | | * 是否启用 0:否 1是 |
| | | */ |
| | | private Integer isEnable; |
| | | |
| | | /** |
| | | * 更新时间 |
| | | */ |
| | | private String updateDate; |
| | | |
| | | /** |
| | | * 创建时间 |
| | | */ |
| | | private String createDate; |
| | | |
| | | } |
New file |
| | |
| | | package vip.xiaonuo.modular.blogarticlecomment.param; |
| | | |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import javax.validation.constraints.Min; |
| | | |
| | | @Data |
| | | public class BlogCommentQueryDto { |
| | | |
| | | @Min(1) |
| | | @ApiModelProperty(value = "pageSize", required = false, example = "10") |
| | | private Integer pageSize = 5; |
| | | |
| | | @Min(1) |
| | | @ApiModelProperty(value = "pageNo", required = true, example = "1") |
| | | private Integer pageNo = 1; |
| | | |
| | | |
| | | private Long articleId; |
| | | |
| | | } |
New file |
| | |
| | | /* |
| | | Copyright [2020] [https://www.xiaonuo.vip] |
| | | |
| | | Licensed under the Apache License, Version 2.0 (the "License"); |
| | | you may not use this file except in compliance with the License. |
| | | You may obtain a copy of the License at |
| | | |
| | | http://www.apache.org/licenses/LICENSE-2.0 |
| | | |
| | | Unless required by applicable law or agreed to in writing, software |
| | | distributed under the License is distributed on an "AS IS" BASIS, |
| | | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| | | See the License for the specific language governing permissions and |
| | | limitations under the License. |
| | | |
| | | Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: |
| | | |
| | | 1.请不要删除和修改根目录下的LICENSE文件。 |
| | | 2.请不要删除和修改Snowy源码头部的版权声明。 |
| | | 3.请保留源码和相关描述文件的项目出处,作者声明等。 |
| | | 4.分发源码时候,请注明软件出处 https://gitee.com/xiaonuobase/snowy |
| | | 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/xiaonuobase/snowy |
| | | 6.若您的项目无法满足以上几点,可申请商业授权,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip |
| | | */ |
| | | package vip.xiaonuo.modular.blogarticlecomment.service; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import vip.xiaonuo.core.pojo.page.PageResult; |
| | | import vip.xiaonuo.modular.blogarticlecomment.entity.BlogArticleComment; |
| | | import vip.xiaonuo.modular.blogarticlecomment.param.BlogArticleCommentParam; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 文章评论service接口 |
| | | * |
| | | * @author inleft |
| | | * @date 2022-03-01 14:00:53 |
| | | */ |
| | | public interface BlogArticleCommentService extends IService<BlogArticleComment> { |
| | | |
| | | /** |
| | | * 查询文章评论 |
| | | * |
| | | * @author inleft |
| | | * @date 2022-03-01 14:00:53 |
| | | */ |
| | | PageResult<BlogArticleComment> page(BlogArticleCommentParam blogArticleCommentParam); |
| | | |
| | | /** |
| | | * 文章评论列表 |
| | | * |
| | | * @author inleft |
| | | * @date 2022-03-01 14:00:53 |
| | | */ |
| | | List<BlogArticleComment> list(BlogArticleCommentParam blogArticleCommentParam); |
| | | |
| | | /** |
| | | * 添加文章评论 |
| | | * |
| | | * @author inleft |
| | | * @date 2022-03-01 14:00:53 |
| | | */ |
| | | void add(BlogArticleCommentParam blogArticleCommentParam); |
| | | |
| | | /** |
| | | * 删除文章评论 |
| | | * |
| | | * @author inleft |
| | | * @date 2022-03-01 14:00:53 |
| | | */ |
| | | void delete(List<BlogArticleCommentParam> blogArticleCommentParamList); |
| | | |
| | | /** |
| | | * 编辑文章评论 |
| | | * |
| | | * @author inleft |
| | | * @date 2022-03-01 14:00:53 |
| | | */ |
| | | void edit(BlogArticleCommentParam blogArticleCommentParam); |
| | | |
| | | /** |
| | | * 查看文章评论 |
| | | * |
| | | * @author inleft |
| | | * @date 2022-03-01 14:00:53 |
| | | */ |
| | | BlogArticleComment detail(BlogArticleCommentParam blogArticleCommentParam); |
| | | |
| | | /** |
| | | * 导出文章评论 |
| | | * |
| | | * @author inleft |
| | | * @date 2022-03-01 14:00:53 |
| | | */ |
| | | void export(BlogArticleCommentParam blogArticleCommentParam); |
| | | |
| | | } |
New file |
| | |
| | | /* |
| | | Copyright [2020] [https://www.xiaonuo.vip] |
| | | |
| | | Licensed under the Apache License, Version 2.0 (the "License"); |
| | | you may not use this file except in compliance with the License. |
| | | You may obtain a copy of the License at |
| | | |
| | | http://www.apache.org/licenses/LICENSE-2.0 |
| | | |
| | | Unless required by applicable law or agreed to in writing, software |
| | | distributed under the License is distributed on an "AS IS" BASIS, |
| | | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| | | See the License for the specific language governing permissions and |
| | | limitations under the License. |
| | | |
| | | Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: |
| | | |
| | | 1.请不要删除和修改根目录下的LICENSE文件。 |
| | | 2.请不要删除和修改Snowy源码头部的版权声明。 |
| | | 3.请保留源码和相关描述文件的项目出处,作者声明等。 |
| | | 4.分发源码时候,请注明软件出处 https://gitee.com/xiaonuobase/snowy |
| | | 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/xiaonuobase/snowy |
| | | 6.若您的项目无法满足以上几点,可申请商业授权,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip |
| | | */ |
| | | package vip.xiaonuo.modular.blogarticlecomment.service.impl; |
| | | |
| | | import cn.hutool.core.bean.BeanUtil; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import vip.xiaonuo.core.exception.ServiceException; |
| | | import vip.xiaonuo.core.factory.PageFactory; |
| | | import vip.xiaonuo.core.pojo.page.PageResult; |
| | | import vip.xiaonuo.core.util.PoiUtil; |
| | | import vip.xiaonuo.modular.blogarticlecomment.entity.BlogArticleComment; |
| | | import vip.xiaonuo.modular.blogarticlecomment.enums.BlogArticleCommentExceptionEnum; |
| | | import vip.xiaonuo.modular.blogarticlecomment.mapper.BlogArticleCommentMapper; |
| | | import vip.xiaonuo.modular.blogarticlecomment.param.BlogArticleCommentParam; |
| | | import vip.xiaonuo.modular.blogarticlecomment.service.BlogArticleCommentService; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 文章评论service接口实现类 |
| | | * |
| | | * @author inleft |
| | | * @date 2022-03-01 14:00:53 |
| | | */ |
| | | @Service |
| | | public class BlogArticleCommentServiceImpl extends ServiceImpl<BlogArticleCommentMapper, BlogArticleComment> implements BlogArticleCommentService { |
| | | |
| | | @Override |
| | | public PageResult<BlogArticleComment> page(BlogArticleCommentParam blogArticleCommentParam) { |
| | | QueryWrapper<BlogArticleComment> queryWrapper = new QueryWrapper<>(); |
| | | if (ObjectUtil.isNotNull(blogArticleCommentParam)) { |
| | | |
| | | // 根据留言类型 1:留言板 2:日志评论 查询 |
| | | if (ObjectUtil.isNotEmpty(blogArticleCommentParam.getCommentType())) { |
| | | queryWrapper.lambda().eq(BlogArticleComment::getCommentType, blogArticleCommentParam.getCommentType()); |
| | | } |
| | | // 根据文章id主键 查询 |
| | | if (ObjectUtil.isNotEmpty(blogArticleCommentParam.getArticleId())) { |
| | | queryWrapper.lambda().eq(BlogArticleComment::getArticleId, blogArticleCommentParam.getArticleId()); |
| | | } |
| | | // 根据访客id(随机字符) 查询 |
| | | if (ObjectUtil.isNotEmpty(blogArticleCommentParam.getVisitorId())) { |
| | | queryWrapper.lambda().eq(BlogArticleComment::getVisitorId, blogArticleCommentParam.getVisitorId()); |
| | | } |
| | | // 根据访客名称 查询 |
| | | if (ObjectUtil.isNotEmpty(blogArticleCommentParam.getVisitorNickName())) { |
| | | queryWrapper.lambda().like(BlogArticleComment::getVisitorNickName, blogArticleCommentParam.getVisitorNickName()); |
| | | } |
| | | // 根据访客邮箱 查询 |
| | | if (ObjectUtil.isNotEmpty(blogArticleCommentParam.getVisitorEmail())) { |
| | | queryWrapper.lambda().like(BlogArticleComment::getVisitorEmail, blogArticleCommentParam.getVisitorEmail()); |
| | | } |
| | | // 根据访客主页 查询 |
| | | if (ObjectUtil.isNotEmpty(blogArticleCommentParam.getVisitorHomePage())) { |
| | | queryWrapper.lambda().like(BlogArticleComment::getVisitorHomePage, blogArticleCommentParam.getVisitorHomePage()); |
| | | } |
| | | // 根据是否已审核 0:否 1:是 查询 |
| | | if (ObjectUtil.isNotEmpty(blogArticleCommentParam.getIsCheck())) { |
| | | queryWrapper.lambda().eq(BlogArticleComment::getIsCheck, blogArticleCommentParam.getIsCheck()); |
| | | } |
| | | // 根据公开状态 1:公开 2:私密 3:密码授权 查询 |
| | | if (ObjectUtil.isNotEmpty(blogArticleCommentParam.getAuthStatus())) { |
| | | queryWrapper.lambda().eq(BlogArticleComment::getAuthStatus, blogArticleCommentParam.getAuthStatus()); |
| | | } |
| | | // 根据是否启用 0:否 1是 查询 |
| | | if (ObjectUtil.isNotEmpty(blogArticleCommentParam.getIsEnable())) { |
| | | queryWrapper.lambda().eq(BlogArticleComment::getIsEnable, blogArticleCommentParam.getIsEnable()); |
| | | } |
| | | // 根据创建时间 查询 |
| | | if (ObjectUtil.isNotEmpty(blogArticleCommentParam.getCreateDate())) { |
| | | queryWrapper.lambda().gt(BlogArticleComment::getCreateDate, blogArticleCommentParam.getCreateDate()); |
| | | } |
| | | } |
| | | return new PageResult<>(this.page(PageFactory.defaultPage(), queryWrapper)); |
| | | } |
| | | |
| | | @Override |
| | | public List<BlogArticleComment> list(BlogArticleCommentParam blogArticleCommentParam) { |
| | | return this.list(); |
| | | } |
| | | |
| | | @Override |
| | | public void add(BlogArticleCommentParam blogArticleCommentParam) { |
| | | BlogArticleComment blogArticleComment = new BlogArticleComment(); |
| | | BeanUtil.copyProperties(blogArticleCommentParam, blogArticleComment); |
| | | this.save(blogArticleComment); |
| | | } |
| | | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @Override |
| | | public void delete(List<BlogArticleCommentParam> blogArticleCommentParamList) { |
| | | blogArticleCommentParamList.forEach(blogArticleCommentParam -> { |
| | | this.removeById(blogArticleCommentParam.getId()); |
| | | }); |
| | | } |
| | | |
| | | @Transactional(rollbackFor = Exception.class) |
| | | @Override |
| | | public void edit(BlogArticleCommentParam blogArticleCommentParam) { |
| | | BlogArticleComment blogArticleComment = this.queryBlogArticleComment(blogArticleCommentParam); |
| | | BeanUtil.copyProperties(blogArticleCommentParam, blogArticleComment); |
| | | this.updateById(blogArticleComment); |
| | | } |
| | | |
| | | @Override |
| | | public BlogArticleComment detail(BlogArticleCommentParam blogArticleCommentParam) { |
| | | return this.queryBlogArticleComment(blogArticleCommentParam); |
| | | } |
| | | |
| | | /** |
| | | * 获取文章评论 |
| | | * |
| | | * @author inleft |
| | | * @date 2022-03-01 14:00:53 |
| | | */ |
| | | private BlogArticleComment queryBlogArticleComment(BlogArticleCommentParam blogArticleCommentParam) { |
| | | BlogArticleComment blogArticleComment = this.getById(blogArticleCommentParam.getId()); |
| | | if (ObjectUtil.isNull(blogArticleComment)) { |
| | | throw new ServiceException(BlogArticleCommentExceptionEnum.NOT_EXIST); |
| | | } |
| | | return blogArticleComment; |
| | | } |
| | | |
| | | @Override |
| | | public void export(BlogArticleCommentParam blogArticleCommentParam) { |
| | | List<BlogArticleComment> list = this.list(blogArticleCommentParam); |
| | | PoiUtil.exportExcelWithStream("SnowyBlogArticleComment.xls", BlogArticleComment.class, list); |
| | | } |
| | | |
| | | } |
| | |
| | | import vip.xiaonuo.core.enums.LogAnnotionOpTypeEnum; |
| | | import vip.xiaonuo.core.pojo.response.ResponseData; |
| | | import vip.xiaonuo.core.pojo.response.SuccessResponseData; |
| | | import vip.xiaonuo.modular.blogarticletype.param.BlogArticleTypeVo; |
| | | import vip.xiaonuo.modular.blogarticletype.entity.BlogArticleTypeVo; |
| | | import vip.xiaonuo.modular.blogarticletype.service.BlogArticleTypeService; |
| | | |
| | | import javax.annotation.Resource; |
File was renamed from snowy-main/src/main/java/vip/xiaonuo/modular/blogarticletype/param/BlogArticleTypeVo.java |
| | |
| | | 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/xiaonuobase/snowy |
| | | 6.若您的项目无法满足以上几点,可申请商业授权,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip |
| | | */ |
| | | package vip.xiaonuo.modular.blogarticletype.param; |
| | | package vip.xiaonuo.modular.blogarticletype.entity; |
| | | |
| | | import lombok.Data; |
| | | |
| | |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import vip.xiaonuo.modular.blogarticletype.entity.BlogArticleType; |
| | | import vip.xiaonuo.modular.blogarticletype.param.BlogArticleTypeVo; |
| | | import vip.xiaonuo.modular.blogarticletype.entity.BlogArticleTypeVo; |
| | | |
| | | import java.util.List; |
| | | |
| | |
| | | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| | | <mapper namespace="vip.xiaonuo.modular.blogarticletype.mapper.BlogArticleTypeMapper"> |
| | | |
| | | <select id="listCount" resultType="vip.xiaonuo.modular.blogarticletype.param.BlogArticleTypeVo"> |
| | | <select id="listCount" resultType="vip.xiaonuo.modular.blogarticletype.entity.BlogArticleTypeVo"> |
| | | SELECT |
| | | t1.id, |
| | | t1.type_name AS typeName, |
| | |
| | | import vip.xiaonuo.core.pojo.page.PageResult; |
| | | import vip.xiaonuo.modular.blogarticletype.entity.BlogArticleType; |
| | | import vip.xiaonuo.modular.blogarticletype.param.BlogArticleTypeParam; |
| | | import vip.xiaonuo.modular.blogarticletype.param.BlogArticleTypeVo; |
| | | import vip.xiaonuo.modular.blogarticletype.entity.BlogArticleTypeVo; |
| | | |
| | | import java.util.List; |
| | | |
| | |
| | | import vip.xiaonuo.modular.blogarticletype.enums.BlogArticleTypeExceptionEnum; |
| | | import vip.xiaonuo.modular.blogarticletype.mapper.BlogArticleTypeMapper; |
| | | import vip.xiaonuo.modular.blogarticletype.param.BlogArticleTypeParam; |
| | | import vip.xiaonuo.modular.blogarticletype.param.BlogArticleTypeVo; |
| | | import vip.xiaonuo.modular.blogarticletype.entity.BlogArticleTypeVo; |
| | | import vip.xiaonuo.modular.blogarticletype.service.BlogArticleTypeService; |
| | | |
| | | import java.util.List; |
| | |
| | | import vip.xiaonuo.core.pojo.response.SuccessResponseData; |
| | | import vip.xiaonuo.modular.blogfriendshiplink.entity.BlogFriendshipLink; |
| | | import vip.xiaonuo.modular.blogfriendshiplink.param.BlogFriendshipLinkVo; |
| | | import vip.xiaonuo.modular.blogfriendshiplink.param.BlogLinkVo; |
| | | import vip.xiaonuo.modular.blogfriendshiplink.entity.BlogLinkVo; |
| | | import vip.xiaonuo.modular.blogfriendshiplink.service.BlogFriendshipLinkService; |
| | | import vip.xiaonuo.sys.modular.dict.param.SysDictTypeParam; |
| | | import vip.xiaonuo.sys.modular.dict.service.SysDictTypeService; |
File was renamed from snowy-main/src/main/java/vip/xiaonuo/modular/blogfriendshiplink/param/BlogLinkVo.java |
| | |
| | | 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/xiaonuobase/snowy |
| | | 6.若您的项目无法满足以上几点,可申请商业授权,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip |
| | | */ |
| | | package vip.xiaonuo.modular.blogfriendshiplink.param; |
| | | package vip.xiaonuo.modular.blogfriendshiplink.entity; |
| | | |
| | | import lombok.Data; |
| | | import vip.xiaonuo.modular.blogfriendshiplink.param.BlogFriendshipLinkVo; |
| | | |
| | | import java.util.List; |
| | | |