|
@@ -6,8 +6,8 @@
|
|
<div class="action-bar-container">
|
|
<div class="action-bar-container">
|
|
<el-space class="action-bar-item-container action-bar-action-left">
|
|
<el-space class="action-bar-item-container action-bar-action-left">
|
|
<el-button-group class="ml-4">
|
|
<el-button-group class="ml-4">
|
|
- <!-- <el-button type="primary" :icon="Refresh" @click="resetFilterAndRefreshTableList">刷新</el-button> -->
|
|
|
|
- <el-button type="primary" :icon="DocumentAdd" :loading="recordInfo.loading" @click="addRecord">新增记录</el-button>
|
|
|
|
|
|
+ <el-button type="success" :icon="DocumentAdd" :loading="recordInfo.loading" @click="addRecord">新增采集记录</el-button>
|
|
|
|
+ <el-button type="primary" :icon="Refresh" @click="resetFilterAndRefreshTableList">刷新</el-button>
|
|
</el-button-group>
|
|
</el-button-group>
|
|
</el-space>
|
|
</el-space>
|
|
<el-space class="action-bar-item-container action-bar-action-right"></el-space>
|
|
<el-space class="action-bar-item-container action-bar-action-right"></el-space>
|
|
@@ -28,16 +28,16 @@
|
|
<div class="highlight-main">{{scope.row.stateText}}</div>
|
|
<div class="highlight-main">{{scope.row.stateText}}</div>
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
- <el-table-column label="功能" width="200" align="center">
|
|
|
|
|
|
+ <el-table-column label="功能" width="220" align="center">
|
|
<template #default="scope">
|
|
<template #default="scope">
|
|
<el-tooltip content="列表页采集" placement="top">
|
|
<el-tooltip content="列表页采集" placement="top">
|
|
<el-button size="small" :class="{ active: scope.row._action_clicked_list_collect }" @click="tableEvents.handleListCollect(scope.$index, scope.row)">
|
|
<el-button size="small" :class="{ active: scope.row._action_clicked_list_collect }" @click="tableEvents.handleListCollect(scope.$index, scope.row)">
|
|
- <el-icon><Edit /></el-icon>
|
|
|
|
|
|
+ <el-icon><Help /></el-icon>
|
|
</el-button>
|
|
</el-button>
|
|
</el-tooltip>
|
|
</el-tooltip>
|
|
- <el-tooltip content="去重" placement="top">
|
|
|
|
|
|
+ <el-tooltip content="列表去重" placement="top">
|
|
<el-button size="small" :class="{ active: scope.row._action_clicked_duplicate_remove }" @click="tableEvents.handleDuplicateRemove(scope.$index, scope.row)">
|
|
<el-button size="small" :class="{ active: scope.row._action_clicked_duplicate_remove }" @click="tableEvents.handleDuplicateRemove(scope.$index, scope.row)">
|
|
- <el-icon><SetUp /></el-icon>
|
|
|
|
|
|
+ <el-icon><DocumentDelete /></el-icon>
|
|
</el-button>
|
|
</el-button>
|
|
</el-tooltip>
|
|
</el-tooltip>
|
|
<el-tooltip content="详情页采集" placement="top">
|
|
<el-tooltip content="详情页采集" placement="top">
|
|
@@ -47,24 +47,23 @@
|
|
</el-tooltip>
|
|
</el-tooltip>
|
|
<el-tooltip content="推送" placement="top">
|
|
<el-tooltip content="推送" placement="top">
|
|
<el-button size="small" :class="{ active: scope.row._action_clicked_pushed }" @click="tableEvents.handlePushed(scope.$index, scope.row)">
|
|
<el-button size="small" :class="{ active: scope.row._action_clicked_pushed }" @click="tableEvents.handlePushed(scope.$index, scope.row)">
|
|
- <el-icon><DocumentCopy /></el-icon>
|
|
|
|
|
|
+ <el-icon><Position /></el-icon>
|
|
</el-button>
|
|
</el-button>
|
|
</el-tooltip>
|
|
</el-tooltip>
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
- <el-table-column label="操作" width="150" align="center">
|
|
|
|
|
|
+ <el-table-column label="操作" width="120" align="center">
|
|
<template #default="scope">
|
|
<template #default="scope">
|
|
<el-tooltip content="清除记录" placement="top">
|
|
<el-tooltip content="清除记录" placement="top">
|
|
<el-button size="small" :class="{ active: scope.row._action_clicked_remove_history }" @click="tableEvents.handleRemoveHistory(scope.$index, scope.row)">
|
|
<el-button size="small" :class="{ active: scope.row._action_clicked_remove_history }" @click="tableEvents.handleRemoveHistory(scope.$index, scope.row)">
|
|
- <el-icon><DArrowLeft /></el-icon>
|
|
|
|
|
|
+ <el-icon><Delete /></el-icon>
|
|
</el-button>
|
|
</el-button>
|
|
</el-tooltip>
|
|
</el-tooltip>
|
|
|
|
|
|
<el-dropdown>
|
|
<el-dropdown>
|
|
- <el-button size="small">结果导出</el-button>
|
|
|
|
|
|
+ <el-button size="small">导出</el-button>
|
|
<template #dropdown>
|
|
<template #dropdown>
|
|
<el-dropdown-menu>
|
|
<el-dropdown-menu>
|
|
- <el-dropdown-item @click="handleExportEpub(scope.row)">导出EPUB格式文件</el-dropdown-item>
|
|
|
|
<el-dropdown-item @click="handleExportJson(scope.row)">导出JSON格式文件</el-dropdown-item>
|
|
<el-dropdown-item @click="handleExportJson(scope.row)">导出JSON格式文件</el-dropdown-item>
|
|
<el-dropdown-item @click="handleExportExcel(scope.row)">导出Excel格式文件</el-dropdown-item>
|
|
<el-dropdown-item @click="handleExportExcel(scope.row)">导出Excel格式文件</el-dropdown-item>
|
|
<!-- <el-dropdown-item>补录/上推至平台</el-dropdown-item> -->
|
|
<!-- <el-dropdown-item>补录/上推至平台</el-dropdown-item> -->
|
|
@@ -91,10 +90,10 @@
|
|
<el-radio :value="false">否</el-radio>
|
|
<el-radio :value="false">否</el-radio>
|
|
</el-radio-group>
|
|
</el-radio-group>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
- <el-form-item label="无头浏览器" label-width="100px">
|
|
|
|
|
|
+ <el-form-item label="浏览器" label-width="100px">
|
|
<el-radio-group v-model="recordInfo.form.headless">
|
|
<el-radio-group v-model="recordInfo.form.headless">
|
|
- <el-radio :value="true">是</el-radio>
|
|
|
|
- <el-radio :value="false">否</el-radio>
|
|
|
|
|
|
+ <el-radio :value="false">显示</el-radio>
|
|
|
|
+ <el-radio :value="true">无头</el-radio>
|
|
</el-radio-group>
|
|
</el-radio-group>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item label="显示图像" label-width="100px">
|
|
<el-form-item label="显示图像" label-width="100px">
|
|
@@ -119,7 +118,7 @@ import { ref, computed, reactive, watch } from 'vue'
|
|
import { useStore } from 'vuex';
|
|
import { useStore } from 'vuex';
|
|
import { ElMessage, ElMessageBox } from 'element-plus'
|
|
import { ElMessage, ElMessageBox } from 'element-plus'
|
|
import { ServerActionQlmAddRecord, QlmListDataDownload, QlmDetailDataDownload, ServerActionQlmRemoveRepeat, ServerActionQlmPushData, ServerActionQlmClearData } from "../../wailsjs/go/main/App"
|
|
import { ServerActionQlmAddRecord, QlmListDataDownload, QlmDetailDataDownload, ServerActionQlmRemoveRepeat, ServerActionQlmPushData, ServerActionQlmClearData } from "../../wailsjs/go/main/App"
|
|
-import { SelectSaveFilePath, ExportJsonFile, ExportEpubFile, ExportExcelFile } from "../../wailsjs/go/main/App"
|
|
|
|
|
|
+import { SelectSaveFilePath, QlmRunExportJsonFile, QlmRunExportExcelFile } from "../../wailsjs/go/main/App"
|
|
|
|
|
|
import Breadcrumb from "../components/Breadcrumb.vue"
|
|
import Breadcrumb from "../components/Breadcrumb.vue"
|
|
import { USER_ROLE_ADMIN, USER_ROLE_DEVELOPER, USER_ROLE_REVIEWER } from '../data/user'
|
|
import { USER_ROLE_ADMIN, USER_ROLE_DEVELOPER, USER_ROLE_REVIEWER } from '../data/user'
|
|
@@ -182,6 +181,11 @@ const recordInfo = reactive({
|
|
dialog: false,
|
|
dialog: false,
|
|
loading: false,
|
|
loading: false,
|
|
type: '', // list/detail
|
|
type: '', // list/detail
|
|
|
|
+ defaultForm: {
|
|
|
|
+ proxy: false,
|
|
|
|
+ headless: false,
|
|
|
|
+ image: true,
|
|
|
|
+ },
|
|
form: {
|
|
form: {
|
|
proxy: false,
|
|
proxy: false,
|
|
headless: false,
|
|
headless: false,
|
|
@@ -286,7 +290,7 @@ function refreshTableList() {
|
|
}
|
|
}
|
|
// 刷新列表(并重置选择器)
|
|
// 刷新列表(并重置选择器)
|
|
function resetFilterAndRefreshTableList() {
|
|
function resetFilterAndRefreshTableList() {
|
|
- resetFilterState()
|
|
|
|
|
|
+ // resetFilterState()
|
|
refreshTableList()
|
|
refreshTableList()
|
|
}
|
|
}
|
|
|
|
|
|
@@ -332,14 +336,14 @@ const addRecord = () => {
|
|
|
|
|
|
const getActionCommonParams = row => {
|
|
const getActionCommonParams = row => {
|
|
const param = {
|
|
const param = {
|
|
- id: row._id,
|
|
|
|
|
|
+ recordId: row._id,
|
|
state: row.state
|
|
state: row.state
|
|
}
|
|
}
|
|
const other = {
|
|
const other = {
|
|
- headless: row.headless,
|
|
|
|
- showImage: row.image,
|
|
|
|
- proxyServer: row.proxy,
|
|
|
|
- id: row._id,
|
|
|
|
|
|
+ headless: recordInfo.form.headless,
|
|
|
|
+ showImage: recordInfo.form.image,
|
|
|
|
+ proxyServer: recordInfo.form.proxy,
|
|
|
|
+ recordid: row._id,
|
|
}
|
|
}
|
|
return {
|
|
return {
|
|
param,
|
|
param,
|
|
@@ -364,9 +368,9 @@ const confirmDialog = (conf = {}) => {
|
|
|
|
|
|
const setRecordDialogState = (row) => {
|
|
const setRecordDialogState = (row) => {
|
|
Object.assign(recordInfo.form, {
|
|
Object.assign(recordInfo.form, {
|
|
- proxy: row.proxy || false,
|
|
|
|
- headless: row.headless || false,
|
|
|
|
- image: row.image || false,
|
|
|
|
|
|
+ proxy: recordInfo.defaultForm.proxy,
|
|
|
|
+ headless: recordInfo.defaultForm.headless,
|
|
|
|
+ image: recordInfo.defaultForm.image,
|
|
})
|
|
})
|
|
}
|
|
}
|
|
|
|
|
|
@@ -397,8 +401,10 @@ const tableEvents = {
|
|
type: 'success',
|
|
type: 'success',
|
|
duration: 3000,
|
|
duration: 3000,
|
|
})
|
|
})
|
|
|
|
+ recordInfo.dialog = false
|
|
getTableList()
|
|
getTableList()
|
|
} else {
|
|
} else {
|
|
|
|
+ recordInfo.dialog = false
|
|
return ElMessage({
|
|
return ElMessage({
|
|
message: r.msg || '操作失败',
|
|
message: r.msg || '操作失败',
|
|
type: 'error',
|
|
type: 'error',
|
|
@@ -470,8 +476,10 @@ const tableEvents = {
|
|
type: 'success',
|
|
type: 'success',
|
|
duration: 3000,
|
|
duration: 3000,
|
|
})
|
|
})
|
|
|
|
+ recordInfo.dialog = false
|
|
getTableList()
|
|
getTableList()
|
|
} else {
|
|
} else {
|
|
|
|
+ recordInfo.dialog = false
|
|
return ElMessage({
|
|
return ElMessage({
|
|
message: r.msg || '操作失败',
|
|
message: r.msg || '操作失败',
|
|
type: 'error',
|
|
type: 'error',
|
|
@@ -528,7 +536,7 @@ const tableEvents = {
|
|
success: () => {
|
|
success: () => {
|
|
loading.value = true
|
|
loading.value = true
|
|
const payload = {
|
|
const payload = {
|
|
- id: row._id,
|
|
|
|
|
|
+ recordid: row._id,
|
|
}
|
|
}
|
|
ServerActionQlmClearData(payload).then(r => {
|
|
ServerActionQlmClearData(payload).then(r => {
|
|
if (r.err === 1) {
|
|
if (r.err === 1) {
|
|
@@ -579,36 +587,6 @@ const tableActionDisabled = {
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
|
|
-//handleExportEpub导出文件
|
|
|
|
-const handleExportEpub = (row) => {
|
|
|
|
- ElMessageBox.prompt('请输入文件名称', '文件名', {
|
|
|
|
- confirmButtonText: '确定',
|
|
|
|
- cancelButtonText: '取消',
|
|
|
|
- }).then(({ value }) => {
|
|
|
|
- SelectSaveFilePath("", value,"epub").then(save2file => {
|
|
|
|
- if (save2file == "") {
|
|
|
|
- console.log("无效的文件存储路径", save2file)
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
- ExportEpubFile(value, save2file, row._id).then(d => {
|
|
|
|
- if (d.err === 1) {
|
|
|
|
- ElMessage({
|
|
|
|
- message: d.msg || `导出epub文件${save2file}完成!`,
|
|
|
|
- type: 'success',
|
|
|
|
- duration: 3000,
|
|
|
|
- });
|
|
|
|
- } else {
|
|
|
|
- ElMessage({
|
|
|
|
- message: d.msg || `导出epub文件${save2file}失败!`,
|
|
|
|
- type: 'error',
|
|
|
|
- duration: 3000,
|
|
|
|
- });
|
|
|
|
- }
|
|
|
|
- })
|
|
|
|
- })
|
|
|
|
- })
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
const handleExportJson = (row) => {
|
|
const handleExportJson = (row) => {
|
|
ElMessageBox.prompt('请输入文件名称', '文件名', {
|
|
ElMessageBox.prompt('请输入文件名称', '文件名', {
|
|
confirmButtonText: '确定',
|
|
confirmButtonText: '确定',
|
|
@@ -619,7 +597,7 @@ const handleExportJson = (row) => {
|
|
console.log("无效的文件存储路径", save2file)
|
|
console.log("无效的文件存储路径", save2file)
|
|
return
|
|
return
|
|
}
|
|
}
|
|
- ExportJsonFile(save2file, row._id).then(d => {
|
|
|
|
|
|
+ QlmRunExportJsonFile(save2file, row._id).then(d => {
|
|
if (d.err === 1) {
|
|
if (d.err === 1) {
|
|
ElMessage({
|
|
ElMessage({
|
|
message: d.msg || `导出excel文件${save2file}完成!`,
|
|
message: d.msg || `导出excel文件${save2file}完成!`,
|
|
@@ -648,7 +626,7 @@ const handleExportExcel = (row) => {
|
|
console.log("无效的文件存储路径", save2file)
|
|
console.log("无效的文件存储路径", save2file)
|
|
return
|
|
return
|
|
}
|
|
}
|
|
- ExportExcelFile(save2file, row._id).then(d => {
|
|
|
|
|
|
+ QlmRunExportExcelFile(save2file, row._id).then(d => {
|
|
if (d.err === 1) {
|
|
if (d.err === 1) {
|
|
ElMessage({
|
|
ElMessage({
|
|
message: d.msg || `导出excel文件${save2file}完成!`,
|
|
message: d.msg || `导出excel文件${save2file}完成!`,
|