“7195e077c46bfc538709e6169c81e599ffdb08f6”上不存在“...native/sun/git@gitcode.net:openanolis/dragonwell8_jdk.git”

Auto Commit

上级 84b0f49a
...@@ -4,9 +4,11 @@ import Author from './Author.vue' ...@@ -4,9 +4,11 @@ import Author from './Author.vue'
import { tableColumns } from './const' import { tableColumns } from './const'
import { getRemoteCsdnGrade } from '../service/csdnApi' import { getRemoteCsdnGrade } from '../service/csdnApi'
import { onMounted, reactive, onUnmounted } from 'vue'; import { onMounted, reactive, onUnmounted } from 'vue';
import { exportExcel } from './writeExcel'
const state = reactive({ const state = reactive({
title:'csdn用户根据id快速查分数改文章', title: 'csdn用户根据id快速查分数改文章',
loading: false, loading: false,
exportLoading: false,
searchValue: localStorage.getItem('csdnUid') || '', searchValue: localStorage.getItem('csdnUid') || '',
firstChart: null, firstChart: null,
columns: tableColumns, columns: tableColumns,
...@@ -152,8 +154,8 @@ function initFirstData() { ...@@ -152,8 +154,8 @@ function initFirstData() {
show: true, show: true,
position: 'middle', position: 'middle',
color: 'red', color: 'red',
lineHeight:35, lineHeight: 35,
backgroundColor:'rgba(255,255,255.7)', backgroundColor: 'rgba(255,255,255.7)',
formatter: (params) => { formatter: (params) => {
console.log('params markline', params) console.log('params markline', params)
return params.name + ":" + params.value return params.name + ":" + params.value
...@@ -184,6 +186,17 @@ function initFirstData() { ...@@ -184,6 +186,17 @@ function initFirstData() {
} }
}); });
const exportTableDataFunc = () => {
if (!state.dataSource || state.dataSource.length === 0) {
return window.alert('表格数据为空')
}
state.exportLoading = true
exportExcel(state.dataSource, '用户质量分').then(res => {
state.exportLoading = false
console.log('res', res)
})
}
onMounted(() => { onMounted(() => {
const storageUid = localStorage.getItem('csdnUid') const storageUid = localStorage.getItem('csdnUid')
console.log('window.localStorage', localStorage) console.log('window.localStorage', localStorage)
...@@ -215,6 +228,7 @@ function initFirstData() { ...@@ -215,6 +228,7 @@ function initFirstData() {
onSearch() onSearch()
} }
}) })
} }
</script> </script>
...@@ -231,8 +245,8 @@ function initFirstData() { ...@@ -231,8 +245,8 @@ function initFirstData() {
<div style="width:100px;line-height: 32px;">csdn用户id:</div><a-input-search v-model:value="state.searchValue" <div style="width:100px;line-height: 32px;">csdn用户id:</div><a-input-search v-model:value="state.searchValue"
:disabled="state.loading" placeholder="输入用户id(如 qq_38870145)" enter-button @search="onSearch" /> :disabled="state.loading" placeholder="输入用户id(如 qq_38870145)" enter-button @search="onSearch" />
</div> </div>
<a-button type="primary" @click="exportTableDataFunc" style="margin: 10px 0;" :loading="state.exportLoading">
<br> 导出 </a-button>
<div> <div>
<a-table :scroll="{ x: 800, y: 600 }" :columns="state.columns" :data-source="state.dataSource" <a-table :scroll="{ x: 800, y: 600 }" :columns="state.columns" :data-source="state.dataSource"
:loading="state.loading" :pagination="state.pagination" bordered style="border-bottom:1px solid #f0f0f0;"> :loading="state.loading" :pagination="state.pagination" bordered style="border-bottom:1px solid #f0f0f0;">
...@@ -242,11 +256,18 @@ function initFirstData() { ...@@ -242,11 +256,18 @@ function initFirstData() {
{{ record.url }} {{ record.url }}
</a> </a>
</template> </template>
<template v-if="column.key === 'option'"> <template v-else-if="column.key === 'score'">
<span>
<a-tag :color="record.score < 60 ? 'volcano' : record.score > 80 ? 'geekblue' : 'green'">
{{ record.score }}
</a-tag>
</span>
</template>
<template v-else-if="column.key === 'option'">
<a-tooltip placement="topLeft" :title="record.editUrl"> <a-tooltip placement="topLeft" :title="record.editUrl">
<a :href="record.editUrl" target="_blank"> <a :href="record.editUrl" target="_blank">
编辑文章 编辑文章
</a> </a>
</a-tooltip> </a-tooltip>
</template> </template>
</template> </template>
......
export const tableColumns= [ export const tableColumns= [
{ {
title: '序号',
dataIndex: 'index',
fixed: true
}, {
title: '文章名称', title: '文章名称',
dataIndex: 'title', dataIndex: 'title',
fixed: true fixed: true
...@@ -28,7 +24,7 @@ export const tableColumns= [ ...@@ -28,7 +24,7 @@ export const tableColumns= [
sorter: (a, b) => a.diggCount - b.diggCount, sorter: (a, b) => a.diggCount - b.diggCount,
},{ },{
title: '质量分', title: '质量分',
dataIndex: 'score', key: 'score',
sorter: (a, b) => a.score - b.score, sorter: (a, b) => a.score - b.score,
}, { }, {
title: '发文时间', title: '发文时间',
...@@ -39,6 +35,5 @@ export const tableColumns= [ ...@@ -39,6 +35,5 @@ export const tableColumns= [
dataIndex: 'message', dataIndex: 'message',
}, { }, {
title: '操作', title: '操作',
key: 'option', key: 'option'
fixed: true
}] }]
\ No newline at end of file
// 输出base64编码
const base64 = s => window.btoa(unescape(encodeURIComponent(s)));
const tableToExcel = async (jsonData) => {
return new Promise(resolve => {
try {
console.log('start', jsonData)
let str = '<tr>'
Object.keys(jsonData[0]).forEach(name => {
const tdStr = `<tr>${name}</td>`
str += tdStr
})
str += '</tr>'
for (let i = 0; i < jsonData.length; i++) {
str += '<tr>';
for (const key in jsonData[i]) {
// 增加\t为了不让表格显示科学计数法或者其他格式
str += `<td>${jsonData[i][key] + '\t'}</td>`;
}
str += '</tr>';
}
// Worksheet名
const worksheet = '用户质量分'
const uri = 'data:application/vnd.ms-excel;base64,';
// 下载的表格模板数据
const template = `<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns="http://www.w3.org/TR/REC-html40">
<head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet>
<x:Name>${worksheet}</x:Name>
<x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet>
</x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]-->
<meta charset='utf-8' />
</head><body><table>${str}</table></body></html>`;
console.log('str', str)
// 下载模板
window.location.href = uri + base64(template);
resolve(true)
}
catch (r) {
console.log(r, 'r')
resolve(false)
}
})
};
export async function exportExcel(tableData) {
return new Promise(async (resolve) => {
try {
await tableToExcel(tableData)
resolve(true)
}
catch (r) {
console.log(r, 'r')
resolve(false)
}
})
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册