|
@@ -0,0 +1,339 @@
|
|
|
+<script setup>
|
|
|
+import { Search, Plus } from '@element-plus/icons-vue'
|
|
|
+import EditPdf from './components/EditPdf.vue'
|
|
|
+import { apiReportPdf } from '@/api/report'
|
|
|
+import { dayjs, ElMessage, ElMessageBox } from 'element-plus'
|
|
|
+
|
|
|
+const filterState = reactive({
|
|
|
+ keyword: '',
|
|
|
+ classifyIds: '',
|
|
|
+ status: '',
|
|
|
+ publishTime: [],
|
|
|
+ updateTime: [],
|
|
|
+ sortType:'',
|
|
|
+ sortVal:''
|
|
|
+})
|
|
|
+
|
|
|
+const tableColOpt = [
|
|
|
+ {
|
|
|
+ label: '报告标题',
|
|
|
+ key: 'Title'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '类型',
|
|
|
+ key: 'ClassifyNameFirst'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '作者',
|
|
|
+ key: 'Author'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '摘要',
|
|
|
+ key: 'Abstract'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '状态',
|
|
|
+ key: 'State',
|
|
|
+ width: '100px'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '发布时间',
|
|
|
+ key: 'PublishTime',
|
|
|
+ sort: true,
|
|
|
+ width: '200px'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '更新时间',
|
|
|
+ key: 'ModifyTime',
|
|
|
+ sort: true,
|
|
|
+ width: '200px'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '期数',
|
|
|
+ key: 'Stage',
|
|
|
+ width: '100px'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: 'PV/UV',
|
|
|
+ key: 'Pv',
|
|
|
+ headerTips: 'pv:报告被打开的次数,每次打开都计算一次<br> uv:访问报告的人数,每篇报告同一个人访问只计算一次'
|
|
|
+ }
|
|
|
+]
|
|
|
+function getTitleTime(e) {
|
|
|
+ if (e.PublishTime) {
|
|
|
+ return dayjs(e.PublishTime).format('MMDD')
|
|
|
+ }
|
|
|
+ return dayjs(e.ModifyTime).format('MMDD')
|
|
|
+}
|
|
|
+
|
|
|
+const userList = ref([])
|
|
|
+const page = ref(1)
|
|
|
+const pageSize = ref(10)
|
|
|
+const tableLoading = ref(false)
|
|
|
+const totals = ref(0)
|
|
|
+async function getReportList() {
|
|
|
+ tableLoading.value = true
|
|
|
+ const res = await apiReportPdf.reportPdfList({
|
|
|
+ PageSize: pageSize.value,
|
|
|
+ CurrentIndex: page.value,
|
|
|
+ ClassifyIds:filterState.classifyIds ? filterState.classifyIds.join(',') : '',
|
|
|
+ State:filterState.status,
|
|
|
+ PublishStartDate:filterState.publishTime ? filterState.publishTime[0] : '',
|
|
|
+ PublishEndDate:filterState.publishTime ? filterState.publishTime[1] : '',
|
|
|
+ ModifyStartDate:filterState.updateTime ? filterState.updateTime[0] : '',
|
|
|
+ ModifyEndDate:filterState.updateTime ? filterState.updateTime[1] : '',
|
|
|
+ KeyWord:filterState.keyword,
|
|
|
+ SortParam:filterState.sortType,
|
|
|
+ SortType:filterState.sortVal
|
|
|
+ })
|
|
|
+ tableLoading.value = false
|
|
|
+ if (res.Ret === 200) {
|
|
|
+ userList.value = res.Data.List || []
|
|
|
+ totals.value = res.Data.Paging.Totals
|
|
|
+ }
|
|
|
+}
|
|
|
+getReportList()
|
|
|
+function handlePageChange(e) {
|
|
|
+ page.value = e
|
|
|
+ getReportList()
|
|
|
+}
|
|
|
+function handleTableSort(e) {
|
|
|
+ // console.log(e);
|
|
|
+ const { order, prop } = e//order:"descending",prop: "RegisterTime"
|
|
|
+ filterState.sortType = prop
|
|
|
+ if (!order) {
|
|
|
+ filterState.sortVal = ''
|
|
|
+ } else {
|
|
|
+ filterState.sortVal = order === 'descending' ? 'desc' : 'asc'
|
|
|
+ }
|
|
|
+
|
|
|
+ handleFilterList()
|
|
|
+}
|
|
|
+function handleFilterList() {
|
|
|
+ page.value = 1
|
|
|
+ getReportList()
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+const showEdit = ref(false)
|
|
|
+const editData = ref(null)
|
|
|
+function handleEditPdf(e){
|
|
|
+ editData.value=e
|
|
|
+ showEdit.value=true
|
|
|
+}
|
|
|
+
|
|
|
+async function handleReportCancelPublish(e){
|
|
|
+ await ElMessageBox.confirm('是否确认撤销改报告','提示')
|
|
|
+ const res=await apiReportPdf.reportPdfCancelPubllish({
|
|
|
+ ReportPdfId:e.ReportPdfId
|
|
|
+ })
|
|
|
+ if(res.Ret===200){
|
|
|
+ ElMessage.success('撤销成功')
|
|
|
+ handleFilterList()
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+async function handleReportPublish(e){
|
|
|
+ const res=await apiReportPdf.reportPdfPubllish({
|
|
|
+ ReportPdfId:e.ReportPdfId
|
|
|
+ })
|
|
|
+ if(res.Ret===200){
|
|
|
+ ElMessage.success('发布成功')
|
|
|
+ handleFilterList()
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+async function handleReportDelete(e){
|
|
|
+ await ElMessageBox.confirm('报告删除后无法恢复,确认删除吗?','提示')
|
|
|
+ const res=await apiReportPdf.reportPdfDelete({
|
|
|
+ ReportPdfId:e.ReportPdfId
|
|
|
+ })
|
|
|
+ if(res.Ret===200){
|
|
|
+ ElMessage.success('删除成功')
|
|
|
+ handleFilterList()
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+</script>
|
|
|
+
|
|
|
+<template>
|
|
|
+ <div class="report-pdf-list-page">
|
|
|
+ <div>
|
|
|
+ <el-button v-permission="'reportPdf:add'" type="primary" :icon="Plus" @click="showEdit = true;editData=null"
|
|
|
+ >上传报告</el-button
|
|
|
+ >
|
|
|
+ <el-input
|
|
|
+ placeholder="报告标题/创建人"
|
|
|
+ v-model="filterState.keyword"
|
|
|
+ :prefix-icon="Search"
|
|
|
+ clearable
|
|
|
+ style="max-width: 359px; float: right"
|
|
|
+ @input="handleFilterList"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ <div class="flex filter-wrap">
|
|
|
+ <select-report-classify
|
|
|
+ v-model="filterState.classifyIds"
|
|
|
+ clearable
|
|
|
+ :props="{
|
|
|
+ emitPath: false,
|
|
|
+ multiple: true,
|
|
|
+ }"
|
|
|
+ @change="handleFilterList"
|
|
|
+ />
|
|
|
+ <el-select
|
|
|
+ placeholder="状态"
|
|
|
+ v-model="filterState.status"
|
|
|
+ style="width: 165px"
|
|
|
+ clearable
|
|
|
+ @change="handleFilterList"
|
|
|
+ >
|
|
|
+ <el-option label="已发布" :value="1"></el-option>
|
|
|
+ <el-option label="未发布" :value="2"></el-option>
|
|
|
+ </el-select>
|
|
|
+
|
|
|
+ <div style="width: 235px">
|
|
|
+ <el-date-picker
|
|
|
+ style="width: 235px"
|
|
|
+ v-model="filterState.publishTime"
|
|
|
+ type="daterange"
|
|
|
+ range-separator="至"
|
|
|
+ start-placeholder="发布时间"
|
|
|
+ end-placeholder="发布时间"
|
|
|
+ clearable
|
|
|
+ value-format="YYYY-MM-DD"
|
|
|
+ @change="handleFilterList"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ <div style="width: 235px">
|
|
|
+ <el-date-picker
|
|
|
+ style="width: 235px"
|
|
|
+ v-model="filterState.updateTime"
|
|
|
+ type="daterange"
|
|
|
+ range-separator="至"
|
|
|
+ start-placeholder="更新时间"
|
|
|
+ end-placeholder="更新时间"
|
|
|
+ value-format="YYYY-MM-DD"
|
|
|
+ clearable
|
|
|
+ @change="handleFilterList"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="list-wrap" style="margin-top: 20px">
|
|
|
+ <el-table
|
|
|
+ :data="userList"
|
|
|
+ border
|
|
|
+ stripe
|
|
|
+ highlight-current-row
|
|
|
+ element-loading-text="数据加载中..."
|
|
|
+ v-loading="tableLoading"
|
|
|
+ @sort-change="handleTableSort"
|
|
|
+ >
|
|
|
+ <el-table-column
|
|
|
+ v-for="column in tableColOpt"
|
|
|
+ :key="column.key"
|
|
|
+ :prop="column.key"
|
|
|
+ :label="column.label"
|
|
|
+ :sortable="column.sort ? 'custom' : false"
|
|
|
+ :width="column.width"
|
|
|
+ >
|
|
|
+ <template v-if="column.headerTips" #header>
|
|
|
+ <span>{{ column.label }}</span>
|
|
|
+ <el-tooltip
|
|
|
+ class="box-item"
|
|
|
+ effect="dark"
|
|
|
+ raw-content
|
|
|
+ :content="column.headerTips"
|
|
|
+ placement="top"
|
|
|
+ >
|
|
|
+ <el-icon style="position: relative; top: 2px"
|
|
|
+ ><i-ep-QuestionFilled
|
|
|
+ /></el-icon>
|
|
|
+ </el-tooltip>
|
|
|
+ </template>
|
|
|
+ <template #default="{ row }">
|
|
|
+ <span v-if="column.key === 'Title'"
|
|
|
+ >{{ row.Title }}({{ getTitleTime(row) }})</span
|
|
|
+ >
|
|
|
+ <span v-else-if="column.key === 'ClassifyNameFirst'"
|
|
|
+ >{{ row.ClassifyNameFirst }} / {{ row.ClassifyNameSecond }}</span
|
|
|
+ >
|
|
|
+ <span v-else-if="column.key === 'State'">{{
|
|
|
+ row.State === 1 ? "已发布" : "未发布"
|
|
|
+ }}</span>
|
|
|
+ <span v-else-if="column.key === 'PublishTime'">{{
|
|
|
+ formatTime(row.PublishTime)
|
|
|
+ }}</span>
|
|
|
+ <span v-else-if="column.key === 'ModifyTime'">{{
|
|
|
+ formatTime(row.ModifyTime)
|
|
|
+ }}</span>
|
|
|
+ <span v-else-if="column.key === 'Stage'">第{{ row.Stage }}期</span>
|
|
|
+ <span v-else-if="column.key === 'Pv'"
|
|
|
+ >{{ row.Pv }} / {{ row.Uv }}</span
|
|
|
+ >
|
|
|
+ <span v-else>{{ row[column.key] }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="操作" width="160">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <el-button
|
|
|
+ v-permission="'reportPdf:edit'"
|
|
|
+ type="primary"
|
|
|
+ link
|
|
|
+ @click="handleEditPdf(row)"
|
|
|
+ >编辑</el-button
|
|
|
+ >
|
|
|
+ <el-button
|
|
|
+ v-permission="'reportPdf:publishCancel'"
|
|
|
+ type="primary"
|
|
|
+ link
|
|
|
+ v-if="row.State===1"
|
|
|
+ @click="handleReportCancelPublish(row)"
|
|
|
+ >撤销</el-button
|
|
|
+ >
|
|
|
+ <el-button
|
|
|
+ v-permission="'reportPdf:publish'"
|
|
|
+ type="primary"
|
|
|
+ link
|
|
|
+ v-if="row.State===2"
|
|
|
+ @click="handleReportPublish(row)"
|
|
|
+ >发布</el-button
|
|
|
+ >
|
|
|
+ <el-button
|
|
|
+ v-permission="'rtPdf:delete'"
|
|
|
+ type="danger"
|
|
|
+ link
|
|
|
+ v-if="row.State===2"
|
|
|
+ @click="handleReportDelete(row)"
|
|
|
+ >删除</el-button
|
|
|
+ >
|
|
|
+
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ <el-pagination
|
|
|
+ background
|
|
|
+ layout="total,prev,pager,next,jumper"
|
|
|
+ :current-page="page"
|
|
|
+ :page-size="pageSize"
|
|
|
+ :total="totals"
|
|
|
+ @current-change="handlePageChange"
|
|
|
+ style="margin-top: 30px; justify-content: flex-end"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <EditPdf v-model:show="showEdit" :defaultData="editData" />
|
|
|
+</template>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+.report-pdf-list-page {
|
|
|
+ width: 100%;
|
|
|
+ overflow: hidden;
|
|
|
+ .filter-wrap {
|
|
|
+ margin-top: 10px;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ gap: 10px;
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|