diff --git a/src/api/article_table.js b/src/api/article_table.js index 5f0d4595040d372fac45b09c283001cf3f818668..e56c58e33ce5d04a037ce3bf95ac471a8b3fda8d 100644 --- a/src/api/article_table.js +++ b/src/api/article_table.js @@ -1,48 +1,17 @@ import { fetch } from 'utils/fetch'; -import { param } from 'utils'; - -// export function calendarsList(query) { -// return fetch({ -// url: '/finfo/calendars?' + param(query), -// method: 'get' -// }); -// } export function fetchList(query) { return fetch({ url: '/article_table/list', - method: 'get' - }); -} - - -export function calendarCreate(data) { - return fetch({ - url: '/finfo/calendar/create', - method: 'post', - data - }); -} - -export function calendarDelete(id) { - return fetch({ - url: '/finfo/calendar/delete', - method: 'post', - data: { id } - }); -} - -export function calendarUpdate(data) { - return fetch({ - url: '/finfo/calendar/update', - method: 'post', - data + method: 'get', + params: query }); } -export function calcountriesList() { +export function fetchPv(pv) { return fetch({ - url: '/finfo/calcountries', - method: 'get' + url: '/article_table/pv', + method: 'get', + params: { pv } }); } diff --git a/src/mock/article_table.js b/src/mock/article_table.js index d82629b884cd02dfdc6b59d0504dc1fd95ce2cbe..1cd886e640704a089a88808ec8e107586838c25d 100644 --- a/src/mock/article_table.js +++ b/src/mock/article_table.js @@ -2,7 +2,7 @@ import Mock from 'mockjs'; const List = []; -const count = 50; +const count = 100; for (let i = 0; i < count; i++) { List.push(Mock.mock({ @@ -12,34 +12,36 @@ for (let i = 0; i < count; i++) { title: '@ctitle(10, 20)', forecast: '@float(0, 100, 2, 2)', importance: '@integer(1, 3)', - 'calendar_type|1': ['FD', 'FE', 'BI', 'VN'], - 'status|1': ['published', 'draft', 'deleted'] + 'type|1': ['FD', 'FE', 'BI', 'VN'], + 'status|1': ['published', 'draft', 'deleted'], + pageviews: '@integer(300, 5000)' })); } export default { - getList: config => - // let {page, sortWay, startTime, endTime, userName, age} = config.params; - // let mockUsers = _Users.filter(user => { - // if (startTime && user.date < startTime) return false; - // if (endTime && user.date > endTime) return false; - // if (userName && user.name !== userName) return false; - // if (age && user.age !== age) return false; - // return true; - // }); - // if (sortWay) { - // let {order, prop} = sortWay; - // mockUsers = mockUsers.sort((u1, u2) => order === 'ascending' ? u1[prop] - u2[prop] : u2[prop] - u1[prop]); - // } - // if (page === 0) page++; - // mockUsers = mockUsers.filter((u, index) => index < 20 * page && index >= 20 * (page - 1)); - new Promise(resolve => { - setTimeout(() => { - resolve([200, { - total: List.length, - items: List - }]); - }, 100); - }) - + getList: config => { + const { importance, type, title, page, limit } = config.params; + const mockList = List.filter(item => { + if (importance && item.importance !== importance) return false; + if (type && item.type !== type) return false; + if (title && item.title.indexOf(title) < 0) return false; + return true; + }); + const pageList = mockList.filter((item, index) => index < limit * page && index >= limit * (page - 1)); + return new Promise(resolve => { + setTimeout(() => { + resolve([200, { + total: mockList.length, + items: pageList + }]); + }, 100); + }) + }, + getPv: () => new Promise(resolve => { + setTimeout(() => { + resolve([200, { + pvData: [{ key: 'PC网站', pv: 1024 }, { key: 'mobile网站', pv: 1024 }, { key: 'ios', pv: 1024 }, { key: 'android', pv: 1024 }] + }]); + }, 100); + }) }; diff --git a/src/mock/index.js b/src/mock/index.js index 081c2757568ee66175aee98dc93dbdd6eff54d40..f1312f7bb4fd6dc57c967258de6dfd04d46fa2ca 100644 --- a/src/mock/index.js +++ b/src/mock/index.js @@ -19,6 +19,7 @@ mock.onGet('/article/list').reply(200, data); mock.onGet('/article_table/list').reply(article_tableAPI.getList); +mock.onGet('/article_table/pv').reply(article_tableAPI.getPv); diff --git a/src/views/example/table.vue b/src/views/example/table.vue index 197bb3833ebd0d9f5e2d274fc44798a789a15a9e..bf2889379d80d658119dfaad12c77f41a8c99b5f 100644 --- a/src/views/example/table.vue +++ b/src/views/example/table.vue @@ -4,16 +4,12 @@ <el-input @keyup.enter.native="handleFilter" style="width: 200px;" class="filter-item" placeholder="æ ‡é¢˜" v-model="listQuery.title"> </el-input> - <el-date-picker class="filter-item" v-model="time" type="daterange" align="left" placeholder="选择日期范围" :picker-options="pickerOptions" - @input="timeFilter" style="width: 210px"> - </el-date-picker> - <el-select clearable style="width: 90px" class="filter-item" v-model="listQuery.importance" placeholder="é‡è¦æ€§"> <el-option v-for="item in importanceOptions" :key="item" :label="item" :value="item"> </el-option> </el-select> - <el-select clearable class="filter-item" style="width: 130px" v-model="listQuery.calendar_type" placeholder="类型"> + <el-select clearable class="filter-item" style="width: 130px" v-model="listQuery.type" placeholder="类型"> <el-option v-for="item in calendarTypeOptions" :key="item.key" :label="item.display_name+'('+item.key+')'" :value="item.key"> </el-option> </el-select> @@ -40,7 +36,7 @@ <el-table-column min-width="300px" label="æ ‡é¢˜"> <template scope="scope"> <span class="link-type" @click="handleUpdate(scope.row)">{{scope.row.title}}</span> - <el-tag>{{scope.row.calendar_type | typeFilter}}</el-tag> + <el-tag>{{scope.row.type | typeFilter}}</el-tag> </template> </el-table-column> @@ -57,6 +53,12 @@ </template> </el-table-column> + <el-table-column align="center" label="阅读数" width="95"> + <template scope="scope"> + <span class="link-type" @click='handleFetchPv(scope.row.pageviews)'>{{scope.row.pageviews}}</span> + </template> + </el-table-column> + <el-table-column class-name="status-col" label="状æ€" width="90"> <template scope="scope"> <el-tag :type="scope.row.status | statusFilter">{{scope.row.status}}</el-tag> @@ -77,7 +79,7 @@ </el-table> <div v-show="!listLoading" class="pagination-container"> - <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="listQuery.cursor" :page-sizes="[10,20,30, 50]" + <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="listQuery.page" :page-sizes="[10,20,30, 50]" :page-size="listQuery.limit" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination> </div> @@ -85,7 +87,7 @@ <el-dialog :title="textMap[dialogStatus]" v-model="dialogFormVisible"> <el-form class="small-space" :model="temp" label-position="left" label-width="70px" style='width: 400px; margin-left:50px;'> <el-form-item label="类型"> - <el-select class="filter-item" v-model="temp.calendar_type" placeholder="请选择"> + <el-select class="filter-item" v-model="temp.type" placeholder="请选择"> <el-option v-for="item in calendarTypeOptions" :key="item.key" :label="item.display_name" :value="item.key"> </el-option> </el-select> @@ -122,12 +124,23 @@ <el-button v-else type="primary" @click="update">ç¡® 定</el-button> </div> </el-dialog> + + <el-dialog title="阅读数统计" v-model="dialogPvVisible" size="small"> + <el-table :data="pvData" border fit highlight-current-row style="width: 100%"> + <el-table-column prop="key" label="æ¸ é“"> </el-table-column> + <el-table-column prop="pv" label="pv"> </el-table-column> + </el-table> + <span slot="footer" class="dialog-footer"> + <el-button type="primary" @click="dialogPvVisible = false">ç¡® 定</el-button> + </span> + </el-dialog > + </div> </template> <script> - import { fetchList } from 'api/article_table'; - import { parseTime, objectMerge, pickerOptions } from 'utils'; + import { fetchList, fetchPv } from 'api/article_table'; + import { parseTime, objectMerge } from 'utils'; const calendarTypeOptions = [ { key: 'FD', display_name: 'ç»æµŽæ•°æ®' }, @@ -150,12 +163,11 @@ total: null, listLoading: true, listQuery: { - cursor: 1, + page: 1, limit: 20, - start: undefined, - end: undefined, importance: undefined, - title: undefined + title: undefined, + type: undefined }, temp: { id: undefined, @@ -163,10 +175,9 @@ remark: '', timestamp: 0, title: '', - calendar_type: '', + type: '', status: 'published' }, - time: '', // æ—¶é—´ç›é€‰é¡¹ importanceOptions: [1, 2, 3], calendarTypeOptions, statusOptions: ['published', 'draft', 'deleted'], @@ -176,9 +187,8 @@ update: '编辑', create: '创建' }, - pickerOptions: { - shortcuts: pickerOptions - } + dialogPvVisible: false, + pvData: [] } }, created() { @@ -201,7 +211,6 @@ getList() { this.listLoading = true; fetchList(this.listQuery).then(response => { - console.log(response) this.list = response.items; this.total = response.total; this.listLoading = false; @@ -215,7 +224,7 @@ this.getList(); }, handleCurrentChange(val) { - this.listQuery.cursor = val; + this.listQuery.page = val; this.getList(); }, timeFilter(time) { @@ -291,14 +300,20 @@ timestamp: 0, title: '', status: 'published', - calendar_type: '' + type: '' }; }, + handleFetchPv(pv) { + fetchPv(pv).then(response => { + this.pvData = response.pvData + this.dialogPvVisible = true + }) + }, handleDownload() { require.ensure([], () => { const { export_json_to_excel } = require('vendor/Export2Excel'); const tHeader = ['æ—¶é—´', '地区', '类型', 'æ ‡é¢˜', 'é‡è¦æ€§']; - const filterVal = ['timestamp', 'province', 'calendar_type', 'title', 'importance']; + const filterVal = ['timestamp', 'province', 'type', 'title', 'importance']; const data = this.formatJson(filterVal, this.list); export_json_to_excel(tHeader, data, 'tableæ•°æ®'); })