1946 lines
57 KiB
Vue
1946 lines
57 KiB
Vue
<template>
|
||
<div class="task-manage-page">
|
||
<div class="toolbar-container">
|
||
<div class="search-box">
|
||
<el-input
|
||
v-model="searchKeyword"
|
||
placeholder="请输入关键词进行搜索"
|
||
prefix-icon="el-icon-search"
|
||
clearable
|
||
size="small"
|
||
@keyup.enter.native="handleSearch"
|
||
></el-input>
|
||
<el-button
|
||
class="forest-btn search-btn"
|
||
size="small"
|
||
icon="el-icon-search"
|
||
@click="handleSearch"
|
||
>搜索</el-button>
|
||
</div>
|
||
<div class="toolbar-actions">
|
||
<el-button class="forest-btn" size="medium" icon="el-icon-download" @click="openBatchDownloadDialog">
|
||
批量数据下载
|
||
</el-button>
|
||
<el-button class="forest-btn ghost" size="medium" icon="el-icon-copy-document" @click="ExchangeData()">
|
||
任务数据复制
|
||
</el-button>
|
||
</div>
|
||
</div>
|
||
<el-table
|
||
id="tableStyle"
|
||
:data="filteredData"
|
||
:height="720"
|
||
stripe
|
||
border
|
||
highlight-current-row
|
||
header-cell-class-name="sinCl"
|
||
:default-sort = "{prop: 'date', order: 'descending'}"
|
||
>
|
||
<el-table-column
|
||
label="序号"
|
||
sortable
|
||
type="index"
|
||
min-width="80"
|
||
></el-table-column>
|
||
<el-table-column
|
||
prop="taskName"
|
||
label="任务名称"
|
||
sortable
|
||
min-width="80"
|
||
></el-table-column>
|
||
<el-table-column
|
||
prop="databaseName"
|
||
label="数据库名称"
|
||
sortable
|
||
min-width="95"
|
||
></el-table-column>
|
||
<el-table-column
|
||
prop="introduction"
|
||
label="任务备注"
|
||
sortable
|
||
min-width="120"
|
||
></el-table-column>
|
||
<el-table-column
|
||
prop="createTime"
|
||
label="创建时间"
|
||
sortable
|
||
min-width="100"
|
||
></el-table-column>
|
||
<el-table-column
|
||
prop="modifyTime"
|
||
label="修改时间"
|
||
sortable
|
||
min-width="100"
|
||
></el-table-column>
|
||
<el-table-column
|
||
prop="operator"
|
||
label="操作人员"
|
||
min-width="80"
|
||
></el-table-column>
|
||
<el-table-column width="305" fixed="right" label="操作">
|
||
<template slot-scope="scope">
|
||
<el-button
|
||
type="text"
|
||
size="small"
|
||
@click.native.prevent="UploadShpData(scope.row.id)"
|
||
>上传shp数据</el-button
|
||
>
|
||
<el-button
|
||
type="text"
|
||
size="small"
|
||
@click.native.prevent="UploadXlsxData(scope.row.id)"
|
||
>上传xlsx文件</el-button
|
||
>
|
||
|
||
<el-button
|
||
@click.native.prevent="download(scope.row.id)"
|
||
type="text"
|
||
size="small"
|
||
>下载数据</el-button
|
||
>
|
||
<el-button type="text" size="small" @click="getTaskTpk(scope.row.id)"
|
||
>TPK管理</el-button
|
||
>
|
||
</template>
|
||
</el-table-column>
|
||
</el-table>
|
||
<!-- 分页组件 -->
|
||
<div class="pagination-container">
|
||
<el-pagination
|
||
@size-change="handleSizeChange"
|
||
@current-change="handleCurrentChange"
|
||
:current-page="pageNum"
|
||
:page-sizes="[10, 20, 50, 100]"
|
||
:page-size="pageSize"
|
||
layout="total, sizes, prev, pager, next, jumper"
|
||
:total="total"
|
||
></el-pagination>
|
||
</div>
|
||
<el-card class="box-card" v-show="tpkCardV">
|
||
<div slot="header" class="clearfix">
|
||
<span style="float: left; padding: 3px 0; font-size: 16px"
|
||
>{{ tpkTask }} TPK管理</span
|
||
>
|
||
<el-button
|
||
style="float: right; padding: 10px 0; color: #9dbbe7"
|
||
type="text"
|
||
@click="tpkCardV = false"
|
||
>关闭</el-button
|
||
>
|
||
</div>
|
||
|
||
<el-upload
|
||
accept=".tpk"
|
||
class="upload-demo"
|
||
action="tpk"
|
||
ref="uploadtpkfile"
|
||
:auto-upload="false"
|
||
:limit="1"
|
||
:before-upload="beforeTpkUpload"
|
||
:on-change="uploadTPK"
|
||
>
|
||
<el-button size="small" id="buttonStyle" plain>上传TPK文件</el-button>
|
||
</el-upload>
|
||
<div v-for="item in tpkDatas" :key="item.id" class="text">
|
||
{{ item.filename }}
|
||
<el-button
|
||
style="color: #9dbbe7"
|
||
type="text"
|
||
@click="deleteTpk(item.id)"
|
||
>删除</el-button
|
||
>
|
||
</div>
|
||
<el-pagination
|
||
:page-size="1"
|
||
:pager-count="5"
|
||
layout="prev, pager, next"
|
||
:total="tpkTotalP"
|
||
@current-change="getTaskTpkP"
|
||
>
|
||
</el-pagination>
|
||
</el-card>
|
||
<el-dialog
|
||
v-dialogDrag
|
||
class="taskDialog"
|
||
title="上传shp数据"
|
||
:visible.sync="UploadDialogVisible1"
|
||
:close-on-click-modal="false"
|
||
>
|
||
<div style="text-align: left; margin-top: 20px">
|
||
<el-form ref="shpform" :model="shpform" label-width="80px">
|
||
<el-form-item label="shp文件" style="margin-bottom: 10px !important">
|
||
<el-upload
|
||
accept=".shp"
|
||
class="upload-demo"
|
||
action="shp"
|
||
ref="uploadshpfile"
|
||
:auto-upload="false"
|
||
:limit="1"
|
||
:before-upload="beforeShpUpload"
|
||
:on-change="getFile"
|
||
:on-remove="removeFile"
|
||
>
|
||
<el-button size="small" id="buttonStyle" plain
|
||
>选择文件</el-button
|
||
>
|
||
</el-upload>
|
||
</el-form-item>
|
||
<el-form-item label="shx文件" style="margin-bottom: 10px !important">
|
||
<el-upload
|
||
accept=".shx"
|
||
class="upload-demo"
|
||
action="shx"
|
||
ref="uploadshxfile"
|
||
:auto-upload="false"
|
||
:limit="1"
|
||
:before-upload="beforeShxUpload"
|
||
:on-change="getShxFile"
|
||
:on-remove="removeShxFile"
|
||
>
|
||
<el-button size="small" id="buttonStyle" plain
|
||
>选择文件</el-button
|
||
>
|
||
</el-upload>
|
||
</el-form-item>
|
||
<el-form-item label="dbf文件" style="margin-bottom: 10px !important">
|
||
<el-upload
|
||
accept=".dbf"
|
||
class="upload-demo"
|
||
action="dbf"
|
||
ref="uploaddbffile"
|
||
:auto-upload="false"
|
||
:limit="1"
|
||
:before-upload="beforeDbfUpload"
|
||
:on-change="getDbfFile"
|
||
:on-remove="removeDbfFile"
|
||
>
|
||
<el-button size="small" id="buttonStyle" plain
|
||
>选择文件</el-button
|
||
>
|
||
</el-upload>
|
||
</el-form-item>
|
||
<el-form-item label="表">
|
||
<el-select
|
||
v-model="shpform.tableName"
|
||
style="width: 80%"
|
||
placeholder="请选择表"
|
||
clearable
|
||
>
|
||
<el-option
|
||
v-for="item in tableOptions"
|
||
:key="item.tableName"
|
||
:label="item.tableChineseName"
|
||
:value="item.tableName"
|
||
></el-option>
|
||
</el-select>
|
||
</el-form-item>
|
||
</el-form>
|
||
</div>
|
||
<el-button size="small" id="buttonStyle" @click="UploadShp1()"
|
||
>下一步</el-button
|
||
>
|
||
</el-dialog>
|
||
<el-dialog
|
||
v-dialogDrag
|
||
class="taskDialog"
|
||
title="上传shp数据"
|
||
:visible.sync="UploadDialogVisible2"
|
||
:close-on-click-modal="false"
|
||
>
|
||
<el-table
|
||
:data="shpData"
|
||
:height="340"
|
||
stripe
|
||
highlight-current-row
|
||
class="tb-edit"
|
||
style="width: 100%"
|
||
>
|
||
<el-table-column type="index" width="40"></el-table-column>
|
||
<el-table-column
|
||
prop="srcTableField"
|
||
label="源字段"
|
||
min-width="80"
|
||
></el-table-column>
|
||
<el-table-column prop="destTableField" label="目标字段" min-width="80">
|
||
<template slot-scope="scope">
|
||
<el-select
|
||
size="small"
|
||
v-model="scope.row.destTableField"
|
||
placeholder="请选择"
|
||
>
|
||
<el-option
|
||
v-for="item in destFieldsOptions"
|
||
:key="item"
|
||
:label="item"
|
||
:value="item"
|
||
></el-option>
|
||
</el-select>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column fixed="right" width="120">
|
||
<template slot-scope="scope">
|
||
<el-button
|
||
@click.native.prevent="deleteField(scope.$index)"
|
||
type="text"
|
||
size="small"
|
||
>删除</el-button
|
||
>
|
||
</template>
|
||
</el-table-column>
|
||
</el-table>
|
||
<el-button size="small" @click="backShp1()">上一步</el-button>
|
||
<el-button id="buttonS" size="small" @click="UploadShp2()"
|
||
>完成</el-button
|
||
>
|
||
</el-dialog>
|
||
<el-dialog
|
||
v-dialogDrag
|
||
class="taskDialog"
|
||
title="下载数据"
|
||
:visible.sync="DownloadDialogVisible"
|
||
:close-on-click-modal="false"
|
||
>
|
||
<div style="text-align: left; margin-top: 20px">
|
||
<el-form ref="shpform" :model="shpform" label-width="120px">
|
||
<el-form-item label="表">
|
||
<el-select
|
||
v-model="shpform.tableName"
|
||
style="width: 90%"
|
||
placeholder="请选择表"
|
||
clearable
|
||
>
|
||
<el-option
|
||
v-for="item in tableOptions"
|
||
:key="item.tableName"
|
||
:label="item.tableChineseName"
|
||
:value="item.tableName"
|
||
></el-option>
|
||
</el-select>
|
||
</el-form-item>
|
||
<el-form-item label="dbf属性表编码">
|
||
<el-select
|
||
v-model="shpform.codeType"
|
||
style="width: 90%"
|
||
placeholder="请选择编码方式"
|
||
clearable
|
||
>
|
||
<el-option
|
||
v-for="item in codeOptions"
|
||
:key="item.label"
|
||
:label="item.label"
|
||
:value="item.value"
|
||
></el-option>
|
||
</el-select>
|
||
</el-form-item>
|
||
</el-form>
|
||
<div style="text-align: center; margin-bottom: 10px">
|
||
ArcGIS:10-10.2版本默认dbf编码为gbk;10.2.1+的版本默认dbf编码为utf-8。
|
||
</div>
|
||
</div>
|
||
<el-button size="small" @click="DownloadData()">确定</el-button>
|
||
</el-dialog>
|
||
<el-dialog
|
||
v-dialogDrag
|
||
class="taskDialog"
|
||
title="上传xlsx文件"
|
||
:visible.sync="UploadDialogVisible3"
|
||
:close-on-click-modal="false"
|
||
>
|
||
<div style="text-align: left; margin-top: 20px">
|
||
<el-form ref="xlsxform" :model="xlsxform" label-width="80px">
|
||
<el-form-item label="xlsx文件">
|
||
<el-upload
|
||
accept=".xlsx, .xls"
|
||
class="upload-demo"
|
||
action="xlsx"
|
||
ref="uploadxlsxfile"
|
||
:auto-upload="false"
|
||
:limit="1"
|
||
:before-upload="beforeXlsxUpload"
|
||
:on-change="getFile"
|
||
:on-remove="removeFile"
|
||
>
|
||
<el-button size="small" type="primary" plain>选择文件</el-button>
|
||
</el-upload>
|
||
</el-form-item>
|
||
<el-form-item label="表">
|
||
<el-select
|
||
v-model="shpform.tableName"
|
||
style="width: 60%; margin-bottom: 10px"
|
||
placeholder="请选择表"
|
||
clearable
|
||
>
|
||
<el-option
|
||
v-for="item in tableOptions"
|
||
:key="item.tableName"
|
||
:label="item.tableChineseName"
|
||
:value="item.tableName"
|
||
></el-option>
|
||
</el-select>
|
||
</el-form-item>
|
||
</el-form>
|
||
</div>
|
||
<el-button size="small" @click="UploadShp3()">下一步</el-button>
|
||
</el-dialog>
|
||
<el-dialog
|
||
v-dialogDrag
|
||
class="taskDialog"
|
||
title="上传xlsx文件"
|
||
:visible.sync="UploadDialogVisible4"
|
||
:close-on-click-modal="false"
|
||
>
|
||
<el-table
|
||
:data="shpData"
|
||
:height="340"
|
||
stripe
|
||
highlight-current-row
|
||
class="tb-edit"
|
||
style="width: 100%"
|
||
>
|
||
<el-table-column type="index" width="40"></el-table-column>
|
||
<el-table-column
|
||
prop="srcTableField"
|
||
label="源字段"
|
||
min-width="80"
|
||
></el-table-column>
|
||
<el-table-column prop="destTableField" label="目标字段" min-width="80">
|
||
<template slot-scope="scope">
|
||
<el-select
|
||
size="small"
|
||
v-model="scope.row.destTableField"
|
||
placeholder="请选择"
|
||
>
|
||
<el-option
|
||
v-for="item in destFieldsOptions"
|
||
:key="item"
|
||
:label="item"
|
||
:value="item"
|
||
></el-option>
|
||
</el-select>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column fixed="right" width="120">
|
||
<template slot-scope="scope">
|
||
<el-button
|
||
@click.native.prevent="deleteField(scope.$index)"
|
||
type="text"
|
||
size="small"
|
||
>删除</el-button
|
||
>
|
||
</template>
|
||
</el-table-column>
|
||
</el-table>
|
||
<el-button size="small" @click="backShp2()">上一步</el-button>
|
||
<el-button type="primary" size="small" @click="UploadShp4()"
|
||
>完成</el-button
|
||
>
|
||
</el-dialog>
|
||
<!--复制任务数据-->
|
||
<el-dialog
|
||
v-dialogDrag
|
||
class="taskDialog"
|
||
title="任务数据复制"
|
||
:visible.sync="ExchangeDialogVisible1"
|
||
:close-on-click-modal="false"
|
||
>
|
||
<div style="text-align: left">
|
||
<el-form ref="exchangeform" :model="exchangeform" label-width="80px">
|
||
<el-form-item label="源任务" style="margin-top: 20px">
|
||
<el-select
|
||
v-model="exchangeform.srcTask"
|
||
style="width: 90%"
|
||
placeholder="请选择任务"
|
||
clearable
|
||
>
|
||
<el-option
|
||
v-for="item in srcTaskOptions"
|
||
:key="item.id"
|
||
:label="item.taskName"
|
||
:value="item.id"
|
||
></el-option>
|
||
</el-select>
|
||
</el-form-item>
|
||
<el-form-item label="目标任务">
|
||
<el-select
|
||
v-model="exchangeform.destTask"
|
||
style="width: 90%"
|
||
placeholder="请选择任务"
|
||
clearable
|
||
>
|
||
<el-option
|
||
v-for="item in destTaskOptions"
|
||
:key="item.id"
|
||
:label="item.taskName"
|
||
:value="item.id"
|
||
></el-option>
|
||
</el-select>
|
||
</el-form-item>
|
||
<el-form-item label="是否抽查">
|
||
<el-checkbox v-model="exchangeform.isSelective"></el-checkbox>
|
||
</el-form-item>
|
||
<el-form-item
|
||
label="抽查方式"
|
||
v-show="exchangeform.isSelective == true"
|
||
>
|
||
<el-select
|
||
v-model="exchangeType"
|
||
style="width: 90%"
|
||
placeholder="请选择抽查方式"
|
||
clearable
|
||
>
|
||
<el-option
|
||
v-for="item in exTypeOptions"
|
||
:key="item.value"
|
||
:label="item.label"
|
||
:value="item.value"
|
||
></el-option>
|
||
</el-select>
|
||
</el-form-item>
|
||
<!-- todo:添加where语句抽查输入框 -->
|
||
<el-form-item
|
||
label="抽查数量"
|
||
v-show="exchangeform.isSelective == true && exchangeType === 2"
|
||
>
|
||
<el-input
|
||
style="width: 90%"
|
||
v-model="exchangeform.selectDataNum"
|
||
></el-input>
|
||
</el-form-item>
|
||
<el-form-item
|
||
label="抽查比例"
|
||
v-show="exchangeform.isSelective == true && exchangeType === 1"
|
||
>
|
||
<el-input
|
||
style="width: 87%"
|
||
v-model="exchangeform.selectDataNum"
|
||
></el-input>
|
||
%
|
||
</el-form-item>
|
||
<el-form-item
|
||
label="抽查语句"
|
||
v-show="exchangeform.isSelective == true"
|
||
>
|
||
<el-input
|
||
style="width: 90%"
|
||
v-model="exchangeform.selectWhereClause"
|
||
></el-input>
|
||
</el-form-item>
|
||
</el-form>
|
||
</div>
|
||
<el-button size="small" id="buttonStyle" @click="exchangeData1()"
|
||
>下一步</el-button
|
||
>
|
||
</el-dialog>
|
||
<el-dialog
|
||
v-dialogDrag
|
||
class="taskDialog"
|
||
title="任务数据复制"
|
||
:visible.sync="ExchangeDialogVisible2"
|
||
:close-on-click-modal="false"
|
||
>
|
||
<div style="text-align: left">
|
||
<el-form
|
||
ref="exchangeform"
|
||
:model="exchangeformTable"
|
||
label-width="80px"
|
||
>
|
||
<el-form-item label="源表">
|
||
<el-select
|
||
v-model="exchangeformTable.srcTable"
|
||
style="width: 90%; margin-bottom: 10px"
|
||
placeholder="请选择表"
|
||
@change="changeTable()"
|
||
clearable
|
||
>
|
||
<el-option
|
||
v-for="item in tableOptions1"
|
||
:key="item.tableName"
|
||
:label="item.tableChineseName"
|
||
:value="item.tableName"
|
||
></el-option>
|
||
</el-select>
|
||
</el-form-item>
|
||
<el-form-item label="目标表">
|
||
<el-select
|
||
v-model="exchangeformTable.destTable"
|
||
style="width: 90%; margin-bottom: 10px"
|
||
placeholder="请选择表"
|
||
clearable
|
||
>
|
||
<el-option
|
||
v-for="item in tableOptions2"
|
||
:key="item.tableName"
|
||
:label="item.tableChineseName"
|
||
:value="item.tableName"
|
||
></el-option>
|
||
</el-select>
|
||
</el-form-item>
|
||
</el-form>
|
||
</div>
|
||
<el-button
|
||
size="small"
|
||
id="buttonStyle"
|
||
@click="
|
||
ExchangeDialogVisible1 = true;
|
||
ExchangeDialogVisible2 = false;
|
||
"
|
||
>上一步</el-button
|
||
>
|
||
<el-button id="buttonStyle" size="small" @click="exchangeData2()"
|
||
>下一步</el-button
|
||
>
|
||
</el-dialog>
|
||
<!-- 批量数据下载 -->
|
||
<el-dialog
|
||
v-dialogDrag
|
||
title="批量数据下载"
|
||
:visible.sync="batchDownloadDialogVisible"
|
||
:close-on-click-modal="false"
|
||
width="500px"
|
||
>
|
||
<!-- 全选 / 全不选 按钮 -->
|
||
<div style="margin-bottom: 10px; text-align: right;">
|
||
<el-button type="text" @click="selectAll">全选</el-button>
|
||
<el-button type="text" @click="clearAll">全不选</el-button>
|
||
</div>
|
||
|
||
<!-- 可滚动内容区域 -->
|
||
<div style="max-height: 600px; overflow-y: auto; padding-right: 10px;">
|
||
<el-checkbox-group v-model="batchDownloadSelectedTasks" style="width: 100%">
|
||
<el-checkbox
|
||
v-for="task in tasksData"
|
||
:key="task.id"
|
||
:label="task.id"
|
||
>
|
||
{{ task.taskName }}
|
||
</el-checkbox>
|
||
</el-checkbox-group>
|
||
</div>
|
||
|
||
<!-- 固定底部按钮 -->
|
||
<span slot="footer" class="dialog-footer">
|
||
<el-button size="small" @click="batchDownloadDialogVisible = false">取消</el-button>
|
||
<el-button type="primary" size="small" @click="batchDownload">下载</el-button>
|
||
</span>
|
||
</el-dialog>
|
||
|
||
<!-- -->
|
||
<el-dialog
|
||
v-dialogDrag
|
||
class="taskDialog"
|
||
title="任务数据复制"
|
||
:visible.sync="ExchangeDialogVisible3"
|
||
:close-on-click-modal="false"
|
||
>
|
||
<el-table
|
||
:data="shpData"
|
||
:height="340"
|
||
stripe
|
||
highlight-current-row
|
||
class="tb-edit"
|
||
style="width: 100%"
|
||
>
|
||
<el-table-column type="index" width="40"></el-table-column>
|
||
<el-table-column
|
||
prop="srcTableField"
|
||
label="源字段"
|
||
min-width="80"
|
||
></el-table-column>
|
||
<el-table-column prop="destTableField" label="目标字段" min-width="80">
|
||
<template slot-scope="scope">
|
||
<el-select
|
||
size="small"
|
||
v-model="scope.row.destTableField"
|
||
placeholder="请选择"
|
||
>
|
||
<el-option
|
||
v-for="item in destFieldsOptions"
|
||
:key="item"
|
||
:label="item"
|
||
:value="item"
|
||
></el-option>
|
||
</el-select>
|
||
</template>
|
||
</el-table-column>
|
||
<el-table-column fixed="right" width="120">
|
||
<template slot-scope="scope">
|
||
<el-button
|
||
@click.native.prevent="deleteField(scope.$index)"
|
||
type="text"
|
||
size="small"
|
||
>删除</el-button
|
||
>
|
||
</template>
|
||
</el-table-column>
|
||
</el-table>
|
||
<el-button
|
||
size="small"
|
||
@click="
|
||
ExchangeDialogVisible2 = true;
|
||
ExchangeDialogVisible3 = false;
|
||
"
|
||
>上一步</el-button
|
||
>
|
||
<el-button type="primary" size="small" @click="exchangeData3()"
|
||
>完成</el-button
|
||
>
|
||
</el-dialog>
|
||
</div>
|
||
</template>
|
||
<script>
|
||
import { ajax as request } from "@/request.js";
|
||
import axios from "axios";
|
||
export default {
|
||
data() {
|
||
return {
|
||
tasksData: [],
|
||
srcTaskOptions: [],
|
||
destTaskOptions: [],
|
||
UploadDialogVisible1: false,
|
||
UploadDialogVisible2: false,
|
||
tableOptions: [],
|
||
tableOptions1: [],
|
||
tableOptions2: [],
|
||
codeOptions: [
|
||
{ value: false, label: "gbk" },
|
||
{ value: true, label: "utf-8" },
|
||
],
|
||
shpform: {
|
||
tableName: "",
|
||
codeType: "",
|
||
},
|
||
xlsxform: {
|
||
tableName: "",
|
||
},
|
||
taskIndex: "",
|
||
fileList: [],
|
||
dbfList: [],
|
||
shxList: [],
|
||
shpData: [],
|
||
srcFieldsOptions: [],
|
||
destFieldsOptions: [],
|
||
DownloadDialogVisible: false,
|
||
UploadDialogVisible3: false,
|
||
UploadDialogVisible4: false,
|
||
ExchangeDialogVisible1: false,
|
||
ExchangeDialogVisible2: false,
|
||
ExchangeDialogVisible3: false,
|
||
exchangeform: {
|
||
srcTask: "",
|
||
destTask: "",
|
||
isSelective: false,
|
||
selectDataNum: "",
|
||
selectWhereClause: "",
|
||
},
|
||
exchangeformTable: {
|
||
srcTable: "",
|
||
destTable: "",
|
||
},
|
||
tablemapping: [],
|
||
exTypeOptions: [
|
||
{ label: "按比例抽查", value: 1 },
|
||
{ label: "按数量抽查", value: 2 },
|
||
],
|
||
exchangeType: "",
|
||
tpkTotalP: 100,
|
||
tpkTask: "",
|
||
tpkTaskId: "",
|
||
tpkCardV: false,
|
||
currentPage: "",
|
||
tpkDatas: [],
|
||
searchKeyword: "", // 搜索关键词
|
||
filteredData: [], // 过滤后的数据
|
||
batchDownloadDialogVisible: false, // 批量下载对话框显示
|
||
batchDownloadSelectedTasks: [], // 勾选的任务ID
|
||
// 分页相关属性
|
||
pageNum: 1,
|
||
pageSize: 10,
|
||
total: 0,
|
||
totalPages: 0
|
||
|
||
};
|
||
},
|
||
methods: {
|
||
selectAll() {
|
||
// 将所有任务 id 填入选中数组
|
||
this.batchDownloadSelectedTasks = this.tasksData.map(task => task.id);
|
||
},
|
||
clearAll() {
|
||
// 清空选中数组
|
||
this.batchDownloadSelectedTasks = [];
|
||
},
|
||
// 打开批量下载对话框
|
||
openBatchDownloadDialog() {
|
||
this.batchDownloadSelectedTasks = [];
|
||
this.batchDownloadDialogVisible = true;
|
||
},
|
||
|
||
// 批量下载
|
||
batchDownload() {
|
||
if (this.batchDownloadSelectedTasks.length === 0) {
|
||
this.$message.info("请先选择任务");
|
||
return;
|
||
}
|
||
|
||
// 关闭弹窗
|
||
this.batchDownloadDialogVisible = false;
|
||
|
||
// 构建下载链接
|
||
const taskIds = this.batchDownloadSelectedTasks.join(',');
|
||
const url = `/export/batchGdbExport?taskIds=${taskIds}`;
|
||
|
||
// 打开新窗口触发下载
|
||
window.open(url, "_blank");
|
||
|
||
this.$message.success("批量下载请求已发起");
|
||
},
|
||
// 搜索处理方法 - 搜索时重置到第一页并重新加载数据
|
||
handleSearch() {
|
||
this.pageNum = 1;
|
||
this.init();
|
||
},
|
||
// 分页大小改变处理
|
||
handleSizeChange(val) {
|
||
this.pageSize = val;
|
||
this.pageNum = 1;
|
||
this.init();
|
||
},
|
||
// 当前页改变处理
|
||
handleCurrentChange(val) {
|
||
this.pageNum = val;
|
||
this.init();
|
||
},
|
||
|
||
//读取数据库 初始化数据 - 使用分页接口获取数据
|
||
init() {
|
||
let that = this;
|
||
// 构建请求参数
|
||
const params = {
|
||
pageNum: that.pageNum,
|
||
pageSize: that.pageSize,
|
||
keyword: that.searchKeyword && that.searchKeyword.trim() ? that.searchKeyword.trim() : ''
|
||
};
|
||
|
||
request({
|
||
url: "/task/selectTaskHasCreatedPaginated",
|
||
method: "get",
|
||
params: params
|
||
}).then(function (response) {
|
||
if (response.data.success === true) {
|
||
const result = response.data.data;
|
||
|
||
// 从返回的数据结构中提取数据数组和分页信息
|
||
that.tasksData = result.data || [];
|
||
|
||
// 分页信息在 pageInfo 对象中
|
||
if (result.pageInfo) {
|
||
that.total = result.pageInfo.total || 0;
|
||
that.totalPages = result.pageInfo.totalPages || 0;
|
||
that.pageNum = result.pageInfo.pageNum || 1;
|
||
that.pageSize = result.pageInfo.pageSize || 10;
|
||
} else {
|
||
// 兼容旧格式(如果 pageInfo 不存在)
|
||
that.total = result.total || 0;
|
||
that.totalPages = result.totalPages || 0;
|
||
that.pageNum = result.pageNum || 1;
|
||
that.pageSize = result.pageSize || 10;
|
||
}
|
||
|
||
that.filteredData = [...that.tasksData];
|
||
that.srcTaskOptions = that.tasksData;
|
||
that.destTaskOptions = that.tasksData;
|
||
} else if (response.data.status === "401") {
|
||
that.$alert(response.data.message);
|
||
that.$router.push({ path: "/login" });
|
||
} else {
|
||
that.$message.error(response.data.message || "获取数据失败");
|
||
}
|
||
}).catch(function (error) {
|
||
console.error("获取数据失败:", error);
|
||
that.$message.error("获取数据失败,请稍后重试");
|
||
});
|
||
},
|
||
beforeTpkUpload(file) {
|
||
if (file.type != "tpk") {
|
||
this.$message.error("请上传shp格式数据!");
|
||
return false;
|
||
}
|
||
return true;
|
||
},
|
||
beforeShpUpload(file) {
|
||
if (file.type != "shp") {
|
||
this.$message.error("请上传shp格式数据!");
|
||
return false;
|
||
}
|
||
return true;
|
||
},
|
||
beforeShxUpload(file) {
|
||
if (file.type != "shx") {
|
||
this.$message.error("请上传shx格式数据!");
|
||
return false;
|
||
}
|
||
return true;
|
||
},
|
||
beforeDbfUpload(file) {
|
||
if (file.type != "dbf") {
|
||
this.$message.error("请上传dbf格式数据!");
|
||
return false;
|
||
}
|
||
return true;
|
||
},
|
||
beforeXlsxUpload(file) {
|
||
if (file.type != "xlsx" && file.type != "xls") {
|
||
this.$message.error("请上传xlsx/xls格式文件!");
|
||
return false;
|
||
}
|
||
return true;
|
||
},
|
||
getFile(file) {
|
||
this.fileList = [];
|
||
this.fileList.push(file.raw);
|
||
},
|
||
removeFile() {
|
||
this.fileList = [];
|
||
},
|
||
getShxFile(file) {
|
||
this.shxList = [];
|
||
this.shxList.push(file.raw);
|
||
},
|
||
removeShxFile() {
|
||
this.shxList = [];
|
||
},
|
||
getDbfFile(file) {
|
||
this.dbfList = [];
|
||
this.dbfList.push(file.raw);
|
||
},
|
||
removeDbfFile() {
|
||
this.dbfList = [];
|
||
},
|
||
ExchangeData() {
|
||
this.ExchangeDialogVisible1 = true;
|
||
this.exchangeform.srcTask = "";
|
||
this.exchangeform.destTask = "";
|
||
this.exchangeform.isSelective = false;
|
||
this.exchangeform.selectDataNum = "";
|
||
},
|
||
exchangeData1() {
|
||
if (this.exchangeform.srcTask == "" || this.exchangeform.destTask == "") {
|
||
this.$message.info("请先选择任务");
|
||
return;
|
||
}
|
||
if (this.exchangeform.srcTask == this.exchangeform.destTask) {
|
||
this.$message.error("源任务和目标任务重复");
|
||
return;
|
||
}
|
||
if (
|
||
this.exchangeform.selectDataNum == "" &&
|
||
this.exchangeform.isSelective &&
|
||
this.exchangeType === 2
|
||
) {
|
||
this.$message.info("请输入抽查数量,为1-9999之间的整数");
|
||
return;
|
||
}
|
||
if (
|
||
(this.exchangeform.selectDataNum < 1 ||
|
||
this.exchangeform.selectDataNum > 9999) &&
|
||
this.exchangeform.isSelective &&
|
||
this.exchangeType === 2
|
||
) {
|
||
this.$message.info("抽查数量为1-9999之间的整数");
|
||
return;
|
||
}
|
||
if (
|
||
(this.exchangeform.selectDataNum > 100 ||
|
||
this.exchangeform.selectDataNum < 1) &&
|
||
this.exchangeform.isSelective &&
|
||
this.exchangeType === 1
|
||
) {
|
||
this.$message.info("抽查比例不可小于1%或大于100%");
|
||
return;
|
||
}
|
||
this.ExchangeDialogVisible1 = false;
|
||
this.ExchangeDialogVisible2 = true;
|
||
this.exchangeformTable.srcTable = "";
|
||
this.exchangeformTable.destTable = "";
|
||
let that = this;
|
||
this.tablemapping = [];
|
||
that.tableOptions1 = [];
|
||
that.tableOptions2 = [];
|
||
// 请求任务列表
|
||
request({
|
||
url: "/import/getRootTablesName",
|
||
method: "post",
|
||
params: {
|
||
taskId: that.exchangeform.destTask,
|
||
},
|
||
}).then(function (response) {
|
||
if (response.data.success == true) {
|
||
that.tableOptions2 = response.data.data;
|
||
} else if (response.data.status == "401") {
|
||
that.$alert(response.data.message);
|
||
that.$router.push({ path: "/login" });
|
||
}
|
||
});
|
||
request({
|
||
url: "/import/getRootTablesName",
|
||
method: "post",
|
||
params: {
|
||
taskId: that.exchangeform.srcTask,
|
||
},
|
||
}).then(function (response) {
|
||
if (response.data.success == true) {
|
||
that.tableOptions1 = response.data.data;
|
||
} else if (response.data.status == "401") {
|
||
that.$alert(response.data.message);
|
||
that.$router.push({ path: "/login" });
|
||
}
|
||
});
|
||
|
||
request({
|
||
url: "/import/getTaskTableMapping",
|
||
method: "post",
|
||
params: {
|
||
srcTaskId: that.exchangeform.srcTask,
|
||
destTaskId: that.exchangeform.destTask,
|
||
},
|
||
}).then(function (response) {
|
||
if (response.data.success == true) {
|
||
that.tablemapping = response.data.data;
|
||
if (that.tablemapping.length > 0) {
|
||
that.exchangeformTable.srcTable = that.tablemapping[0].srcTable;
|
||
that.exchangeformTable.destTable = that.tablemapping[0].destTable;
|
||
}
|
||
} else if (response.data.status == "401") {
|
||
that.$alert(response.data.message);
|
||
that.$router.push({ path: "/login" });
|
||
}
|
||
});
|
||
},
|
||
changeTable() {
|
||
this.exchangeformTable.destTable = "";
|
||
if (this.tablemapping.length > 0) {
|
||
for (var i = 0; i < this.tablemapping.length; i++) {
|
||
if (
|
||
this.exchangeformTable.srcTable == this.tablemapping[0].srcTable
|
||
) {
|
||
this.exchangeformTable.destTable == this.tablemapping[0].destTable;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
},
|
||
uploadTPK(file) {
|
||
let fd = new FormData();
|
||
fd.append("image", file.raw);
|
||
fd.append("taskId", this.tpkTaskId);
|
||
let that = this;
|
||
axios({
|
||
url: "/api/image/new",
|
||
method: "post",
|
||
data: fd,
|
||
headers: {
|
||
"Content-Type": "multipart/form-data",
|
||
},
|
||
}).then(function (response) {
|
||
if (response.data.success == true) {
|
||
that.$message.success("tpk文件上传成功");
|
||
that.$refs.uploadtpkfile.clearFiles();
|
||
that.getTaskTpkP(that.currentPage);
|
||
} else {
|
||
that.$notify.error({
|
||
title: "提示",
|
||
message: response.data.message,
|
||
});
|
||
that.$refs.uploadtpkfile.clearFiles();
|
||
}
|
||
});
|
||
},
|
||
getTaskTpk(taskId) {
|
||
let row = this.tasksData.find(item => item.id === taskId);
|
||
if (!row) return;
|
||
|
||
this.tpkCardV = true;
|
||
this.tpkTask = row.taskName;
|
||
this.tpkTaskId = taskId;
|
||
let that = this;
|
||
request({
|
||
url: "/images",
|
||
method: "get",
|
||
params: {
|
||
taskId: taskId,
|
||
page: "1",
|
||
},
|
||
}).then(function (response) {
|
||
if (response.data.success == true) {
|
||
that.tpkDatas = response.data.data.data;
|
||
that.tpkTotalP = response.data.data.total;
|
||
} else {
|
||
that.tpkDatas = [];
|
||
that.tpkTotalP = 0;
|
||
}
|
||
});
|
||
},
|
||
//获取具体页tpk
|
||
getTaskTpkP(page1) {
|
||
this.currentPage = page1;
|
||
let that = this;
|
||
request({
|
||
url: "/images",
|
||
method: "get",
|
||
params: {
|
||
taskId: this.tpkTaskId,
|
||
page: page1,
|
||
},
|
||
}).then(function (response) {
|
||
if (response.data.success == true) {
|
||
that.tpkDatas = response.data.data.data;
|
||
that.tpkTotalP = response.data.data.total;
|
||
} else {
|
||
that.tpkDatas = [];
|
||
that.tpkTotalP = 0;
|
||
}
|
||
});
|
||
},
|
||
deleteTpk(id) {
|
||
let that = this;
|
||
request({
|
||
url: "/image/delete",
|
||
method: "get",
|
||
params: {
|
||
ids: id,
|
||
},
|
||
}).then(function (response) {
|
||
if (response.data.success == true) {
|
||
that.$message.success("成功删除tpk文件");
|
||
that.getTaskTpkP(that.currentPage);
|
||
} else if (response.data.status == "401") {
|
||
that.$alert(response.data.message);
|
||
that.$router.push({ path: "/login" });
|
||
}
|
||
});
|
||
},
|
||
exchangeData2() {
|
||
if (
|
||
this.exchangeformTable.srcTable == "" ||
|
||
this.exchangeformTable.destTable == ""
|
||
) {
|
||
this.$message.info("请先选择表");
|
||
return;
|
||
}
|
||
this.ExchangeDialogVisible2 = false;
|
||
this.ExchangeDialogVisible3 = true;
|
||
this.shpData = [];
|
||
this.destFieldsOptions = [];
|
||
|
||
let that = this;
|
||
request({
|
||
url: "/import/getTableFieldsName",
|
||
method: "post",
|
||
params: {
|
||
taskId: this.exchangeform.destTask,
|
||
tableName: this.exchangeformTable.destTable,
|
||
},
|
||
}).then(function (response) {
|
||
if (response.data.success == true) {
|
||
that.destFieldsOptions = response.data.data;
|
||
} else if (response.data.status == "401") {
|
||
that.$alert(response.data.message);
|
||
that.$router.push({ path: "/login" });
|
||
}
|
||
});
|
||
request({
|
||
url: "/import/getTaskTableFieldMapping",
|
||
method: "post",
|
||
params: {
|
||
srcTaskId: this.exchangeform.srcTask,
|
||
destTaskId: this.exchangeform.destTask,
|
||
srcTableName: this.exchangeformTable.srcTable,
|
||
destTableName: this.exchangeformTable.destTable,
|
||
},
|
||
}).then(function (response) {
|
||
if (response.data.success == true) {
|
||
that.shpData = response.data.data;
|
||
} else if (response.data.status == "401") {
|
||
that.$alert(response.data.message);
|
||
that.$router.push({ path: "/login" });
|
||
}
|
||
});
|
||
},
|
||
exchangeData3() {
|
||
for (var i = 0; i < this.shpData.length; i++) {
|
||
if (this.shpData[i].destTableField == "") {
|
||
this.$message.error("目标字段不可为空");
|
||
return;
|
||
}
|
||
}
|
||
for (var i = 0; i < this.shpData.length; i++) {
|
||
for (var j = 0; j < this.shpData.length; j++) {
|
||
if (
|
||
this.shpData[i].destTableField == this.shpData[j].destTableField &&
|
||
i !== j
|
||
) {
|
||
this.$message.error("目标字段不可重复");
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
let that = this;
|
||
if (!that.exchangeform.isSelective) {
|
||
that.exchangeform.selectDataNum = "0";
|
||
}
|
||
let mynumber = that.exchangeform.selectDataNum;
|
||
if (that.exchangeform.isSelective) {
|
||
if (that.exchangeType === 1) {
|
||
mynumber = mynumber + "%";
|
||
}
|
||
}
|
||
//todo:where语句抽查 添加接口
|
||
request({
|
||
url: "/import/taskTableDataMigration",
|
||
method: "post",
|
||
params: {
|
||
srcTaskId: this.exchangeform.srcTask,
|
||
destTaskId: this.exchangeform.destTask,
|
||
srcTableName: this.exchangeformTable.srcTable,
|
||
destTableName: this.exchangeformTable.destTable,
|
||
isSelective: that.exchangeform.isSelective,
|
||
selectDataNum: mynumber,
|
||
whereClause: that.exchangeformTable.selectWhereClause,
|
||
fieldMapping: JSON.stringify(that.shpData),
|
||
},
|
||
}).then(function (response) {
|
||
if (response.data.success == true) {
|
||
that.$message.success("数据上传成功");
|
||
that.ExchangeDialogVisible3 = false;
|
||
} else if (response.data.status == "401") {
|
||
that.$alert(response.data.message);
|
||
that.$router.push({ path: "/login" });
|
||
} else if (response.data.status == "400") {
|
||
that.$message.error(response.data.message);
|
||
}
|
||
});
|
||
},
|
||
UploadShpData(taskId) {
|
||
this.shpform.tableName = "";
|
||
this.fileList = [];
|
||
if (this.$refs.uploadshpfile) {
|
||
this.$refs.uploadshpfile.clearFiles();
|
||
}
|
||
if (this.$refs.uploadshxfile) {
|
||
this.$refs.uploadshxfile.clearFiles();
|
||
}
|
||
if (this.$refs.uploaddbffile) {
|
||
this.$refs.uploaddbffile.clearFiles();
|
||
}
|
||
this.UploadDialogVisible1 = true;
|
||
this.taskIndex = taskId; // 存储任务ID而不是索引
|
||
let that = this;
|
||
that.tableOptions = [];
|
||
// 请求任务列表
|
||
request({
|
||
url: "/import/getRootTablesName",
|
||
method: "post",
|
||
params: {
|
||
taskId: taskId,
|
||
},
|
||
}).then(function (response) {
|
||
if (response.data.success == true) {
|
||
that.tableOptions = response.data.data;
|
||
} else if (response.data.status == "401") {
|
||
that.$alert(response.data.message);
|
||
that.$router.push({ path: "/login" });
|
||
}
|
||
});
|
||
},
|
||
UploadXlsxData(taskId) {
|
||
this.shpform.tableName = "";
|
||
this.fileList = [];
|
||
if (this.$refs.uploadxlsxfile) {
|
||
this.$refs.uploadxlsxfile.clearFiles();
|
||
}
|
||
this.UploadDialogVisible3 = true;
|
||
this.taskIndex = taskId; // 存储任务ID而不是索引
|
||
let that = this;
|
||
that.tableOptions = [];
|
||
// 请求任务列表
|
||
request({
|
||
url: "/import/getTablesName",
|
||
method: "post",
|
||
params: {
|
||
taskId: taskId,
|
||
},
|
||
}).then(function (response) {
|
||
if (response.data.success == true) {
|
||
that.tableOptions = response.data.data;
|
||
} else if (response.data.status == "401") {
|
||
that.$alert(response.data.message);
|
||
that.$router.push({ path: "/login" });
|
||
}
|
||
});
|
||
},
|
||
UploadShp1() {
|
||
let fd = new FormData();
|
||
this.destFieldsOptions = [];
|
||
this.shpData = [];
|
||
if (!this.fileList[0]) {
|
||
this.$message.info("请先选择shp文件");
|
||
return;
|
||
} else {
|
||
fd.append("shp", this.fileList[0]);
|
||
}
|
||
if (!this.shxList[0]) {
|
||
this.$message.info("请先选择shx文件");
|
||
return;
|
||
} else {
|
||
fd.append("shx", this.shxList[0]);
|
||
}
|
||
if (!this.dbfList[0]) {
|
||
this.$message.info("请先选择dbf文件");
|
||
return;
|
||
} else {
|
||
fd.append("dbf", this.dbfList[0]);
|
||
}
|
||
if (!this.shpform.tableName) {
|
||
this.$message.info("请先选择表");
|
||
return;
|
||
}
|
||
fd.append("destTaskId", this.taskIndex); // 直接使用存储的任务ID
|
||
fd.append("destTableName", this.shpform.tableName);
|
||
let that = this;
|
||
request({
|
||
url: "/import/getTableFieldsName",
|
||
method: "post",
|
||
params: {
|
||
taskId: this.taskIndex, // 直接使用存储的任务ID
|
||
tableName: that.shpform.tableName,
|
||
},
|
||
}).then(function (response) {
|
||
if (response.data.success == true) {
|
||
that.destFieldsOptions = response.data.data;
|
||
} else if (response.data.status == "401") {
|
||
that.$alert(response.data.message);
|
||
that.$router.push({ path: "/login" });
|
||
}
|
||
});
|
||
axios({
|
||
url: "/api/import/getShpAndFieldMapping",
|
||
method: "post",
|
||
data: fd,
|
||
headers: {
|
||
"Content-Type": "multipart/form-data",
|
||
},
|
||
}).then(function (response) {
|
||
if (response.data.success == true) {
|
||
that.shpData = response.data.data;
|
||
that.UploadDialogVisible1 = false;
|
||
that.UploadDialogVisible2 = true;
|
||
} else {
|
||
if (response.data.status == 400) {
|
||
that.$notify.error({
|
||
title: "提示",
|
||
message: response.data.message,
|
||
});
|
||
} else {
|
||
that.$notify.error({
|
||
title: "提示",
|
||
message: "上传出错",
|
||
});
|
||
}
|
||
}
|
||
});
|
||
},
|
||
UploadShp2() {
|
||
for (var i = 0; i < this.shpData.length; i++) {
|
||
if (this.shpData[i].destTableField == "") {
|
||
this.$message.error("目标字段不可为空");
|
||
return;
|
||
}
|
||
}
|
||
for (var i = 0; i < this.shpData.length; i++) {
|
||
for (var j = 0; j < this.shpData.length; j++) {
|
||
if (
|
||
this.shpData[i].destTableField == this.shpData[j].destTableField &&
|
||
i !== j
|
||
) {
|
||
this.$message.error("目标字段不可重复");
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
let fd = new FormData();
|
||
fd.append("destTaskId", this.taskIndex); // 直接使用存储的任务ID
|
||
fd.append("destTableName", this.shpform.tableName);
|
||
fd.append("fieldMapping", JSON.stringify(this.shpData));
|
||
|
||
fd.append("shp", this.fileList[0]);
|
||
|
||
fd.append("shx", this.shxList[0]);
|
||
|
||
fd.append("dbf", this.dbfList[0]);
|
||
|
||
let that = this;
|
||
axios({
|
||
url: "/api/import/shpDataMigration",
|
||
method: "post",
|
||
data: fd,
|
||
headers: {
|
||
"Content-Type": "multipart/form-data",
|
||
},
|
||
}).then(function (response) {
|
||
if (response.data.success == true) {
|
||
that.$message.success("数据上传成功");
|
||
that.UploadDialogVisible2 = false;
|
||
} else {
|
||
if (response.data.status == 400) {
|
||
that.$notify.error({
|
||
title: "提示",
|
||
message: response.data.message,
|
||
});
|
||
} else {
|
||
that.$notify.error({
|
||
title: "提示",
|
||
message: "上传出错",
|
||
});
|
||
}
|
||
}
|
||
});
|
||
},
|
||
backShp1() {
|
||
this.UploadDialogVisible1 = true;
|
||
this.UploadDialogVisible2 = false;
|
||
},
|
||
backShp2() {
|
||
this.UploadDialogVisible3 = true;
|
||
this.UploadDialogVisible4 = false;
|
||
},
|
||
deleteField(index) {
|
||
this.shpData.splice(index, 1);
|
||
},
|
||
UploadShp3() {
|
||
this.destFieldsOptions = [];
|
||
this.shpData = [];
|
||
let fd = new FormData();
|
||
if (!this.fileList[0]) {
|
||
this.$message.info("请先选择文件");
|
||
return;
|
||
} else {
|
||
fd.append("file", this.fileList[0]);
|
||
}
|
||
if (!this.shpform.tableName) {
|
||
this.$message.info("请先选择表");
|
||
return;
|
||
}
|
||
fd.append("destTaskId", this.taskIndex); // 直接使用存储的任务ID
|
||
fd.append("destTableName", this.shpform.tableName);
|
||
let that = this;
|
||
request({
|
||
url: "/import/getTableFieldsName",
|
||
method: "post",
|
||
params: {
|
||
taskId: this.taskIndex, // 直接使用存储的任务ID
|
||
tableName: that.shpform.tableName,
|
||
},
|
||
}).then(function (response) {
|
||
if (response.data.success == true) {
|
||
that.destFieldsOptions = response.data.data;
|
||
} else if (response.data.status == "401") {
|
||
that.$alert(response.data.message);
|
||
that.$router.push({ path: "/login" });
|
||
}
|
||
});
|
||
axios({
|
||
url: "/api/import/getFileAndFieldMapping",
|
||
method: "post",
|
||
data: fd,
|
||
headers: {
|
||
"Content-Type": "multipart/form-data",
|
||
},
|
||
}).then(function (response) {
|
||
if (response.data.success == true) {
|
||
that.shpData = response.data.data;
|
||
that.UploadDialogVisible3 = false;
|
||
that.UploadDialogVisible4 = true;
|
||
} else {
|
||
if (response.data.status == 400) {
|
||
that.$notify.error({
|
||
title: "提示",
|
||
message: response.data.message,
|
||
});
|
||
} else {
|
||
that.$notify.error({
|
||
title: "提示",
|
||
message: "上传出错",
|
||
});
|
||
}
|
||
}
|
||
});
|
||
},
|
||
UploadShp4() {
|
||
for (var i = 0; i < this.shpData.length; i++) {
|
||
if (this.shpData[i].destTableField == "") {
|
||
this.$message.error("目标字段不可为空");
|
||
return;
|
||
}
|
||
}
|
||
for (var i = 0; i < this.shpData.length; i++) {
|
||
for (var j = 0; j < this.shpData.length; j++) {
|
||
if (
|
||
this.shpData[i].destTableField == this.shpData[j].destTableField &&
|
||
i !== j
|
||
) {
|
||
this.$message.error("目标字段不可重复");
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
let fd = new FormData();
|
||
fd.append("destTaskId", this.taskIndex); // 直接使用存储的任务ID
|
||
fd.append("destTableName", this.shpform.tableName);
|
||
fd.append("fieldMapping", JSON.stringify(this.shpData));
|
||
fd.append("file", this.fileList[0]);
|
||
let that = this;
|
||
axios({
|
||
url: "/api/import/fileDataMigration",
|
||
method: "post",
|
||
data: fd,
|
||
headers: {
|
||
"Content-Type": "multipart/form-data",
|
||
},
|
||
}).then(function (response) {
|
||
if (response.data.success == true) {
|
||
that.$message.success("任务数据复制成功");
|
||
that.UploadDialogVisible4 = false;
|
||
} else {
|
||
if (response.data.status == 400) {
|
||
that.$notify.error({
|
||
title: "提示",
|
||
message: response.data.message,
|
||
});
|
||
} else {
|
||
that.$notify.error({
|
||
title: "提示",
|
||
message: "上传出错",
|
||
});
|
||
}
|
||
}
|
||
});
|
||
},
|
||
Download(taskId) {
|
||
this.DownloadDialogVisible = false;
|
||
this.shpform.tableName = "";
|
||
this.taskIndex = taskId; // 存储任务ID而不是索引
|
||
let that = this;
|
||
that.tableOptions = [];
|
||
// 请求任务列表
|
||
request({
|
||
url: "/import/getTablesName",
|
||
method: "post",
|
||
params: {
|
||
taskId: taskId,
|
||
},
|
||
}).then(function (response) {
|
||
if (response.data.success == true) {
|
||
that.tableOptions = response.data.data;
|
||
} else if (response.data.status == "401") {
|
||
that.$alert(response.data.message);
|
||
that.$router.push({ path: "/login" });
|
||
}
|
||
});
|
||
},
|
||
// DownloadData() {
|
||
// let that = this;
|
||
// if (this.shpform.tableName == "") {
|
||
// this.$message.info("请先选择表");
|
||
// return;
|
||
// }
|
||
// this.download(
|
||
// this.taskIndex, // 直接使用存储的任务ID
|
||
// this.shpform.tableName,
|
||
// this.shpform.codeType
|
||
// );
|
||
// },
|
||
download(taskId, tableName, codeType) {
|
||
let that = this;
|
||
request({
|
||
url: "/export/taskGdbExport",
|
||
method: "post",
|
||
params: {
|
||
taskId: this.taskIndex, // 直接使用存储的任务ID
|
||
tableName: that.shpform.tableName,
|
||
isHighVersion: that.shpform.codeType,
|
||
},
|
||
}).then(function (response) {
|
||
if (response.data.message != "数据为空") {
|
||
var exportURL =
|
||
"/export/taskGdbExport?taskId=" +
|
||
taskId;
|
||
window.open(exportURL, "_blank");
|
||
that.DownloadDialogVisible = false;
|
||
} else {
|
||
that.$message.info("数据为空!");
|
||
}
|
||
});
|
||
},
|
||
},
|
||
mounted() {
|
||
this.init();
|
||
},
|
||
watch: {
|
||
exchangeform: {
|
||
handler() {
|
||
if (this.exchangeform.isSelective) {
|
||
let reg = /\D/;
|
||
if (reg.test(this.exchangeform.selectDataNum)) {
|
||
if (this.exchangeform.selectDataNum != "")
|
||
this.$message.info("只可输入整数");
|
||
}
|
||
this.exchangeform.selectDataNum = this.exchangeform.selectDataNum
|
||
.toString()
|
||
.replace(/\D/, "");
|
||
}
|
||
},
|
||
deep: true,
|
||
},
|
||
},
|
||
};
|
||
</script>
|
||
<style lang="scss" scoped>
|
||
.task-manage-page {
|
||
padding: 24px 28px 40px;
|
||
background: linear-gradient(135deg, #edf7ef 0%, #fdfefe 100%);
|
||
min-height: calc(100vh - 120px);
|
||
box-sizing: border-box;
|
||
border-radius: 20px;
|
||
box-shadow: 0 14px 32px rgba(76, 175, 80, 0.12);
|
||
border: 1px solid rgba(129, 199, 132, 0.25);
|
||
}
|
||
|
||
.toolbar-container {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
margin-bottom: 20px;
|
||
}
|
||
|
||
.search-box {
|
||
flex: 0 0 auto;
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 12px;
|
||
width: 450px;
|
||
}
|
||
|
||
:deep(.search-box .el-input) {
|
||
flex: 1;
|
||
}
|
||
|
||
.search-btn {
|
||
flex-shrink: 0;
|
||
padding: 0 20px;
|
||
min-width: 80px;
|
||
}
|
||
|
||
.toolbar-actions {
|
||
display: flex;
|
||
gap: 16px;
|
||
flex: 0 0 auto;
|
||
}
|
||
|
||
.forest-btn {
|
||
background: linear-gradient(135deg, #4caf50 0%, #2e7d32 100%);
|
||
border: none;
|
||
color: #fff;
|
||
border-radius: 12px;
|
||
padding: 0 26px;
|
||
min-height: 38px;
|
||
font-weight: 600;
|
||
letter-spacing: 0.5px;
|
||
font-size: 15px;
|
||
box-shadow: 0 8px 18px rgba(76, 175, 80, 0.35);
|
||
}
|
||
|
||
.forest-btn.ghost {
|
||
background: rgba(255, 255, 255, 0.95);
|
||
color: #2e7d32;
|
||
border: 1px solid #66bb6a;
|
||
box-shadow: 0 5px 14px rgba(76, 175, 80, 0.2);
|
||
}
|
||
|
||
.forest-btn:hover {
|
||
filter: brightness(1.05);
|
||
}
|
||
|
||
.pagination-container {
|
||
display: flex;
|
||
justify-content: flex-end;
|
||
margin-top: 20px;
|
||
padding: 16px 0;
|
||
}
|
||
|
||
#tableStyle {
|
||
margin-bottom: 30px;
|
||
background: rgba(255, 255, 255, 0.92);
|
||
border-radius: 16px;
|
||
overflow: hidden;
|
||
border: 1px solid rgba(129, 199, 132, 0.3);
|
||
box-shadow: 0 14px 28px rgba(76, 175, 80, 0.12);
|
||
}
|
||
|
||
:deep(#tableStyle .el-table__header-wrapper th) {
|
||
background: linear-gradient(90deg, #e0f0e2, #f2fbf3) !important;
|
||
color: #1b5e20 !important;
|
||
font-weight: 600 !important;
|
||
border-bottom: 1px solid rgba(129, 199, 132, 0.35) !important;
|
||
font-size: 14px !important;
|
||
font-family: "Microsoft YaHei", "PingFang SC", "Helvetica Neue", Arial, sans-serif !important;
|
||
}
|
||
|
||
:deep(#tableStyle .el-table__body-wrapper td) {
|
||
color: #2e4b31;
|
||
border-bottom: 1px solid rgba(76, 175, 80, 0.08);
|
||
}
|
||
|
||
:deep(#tableStyle .el-table__body tr:hover > td) {
|
||
background: rgba(129, 199, 132, 0.15) !important;
|
||
color: #1b5e20;
|
||
}
|
||
|
||
:deep(#tableStyle .el-table__row--striped td) {
|
||
background: rgba(233, 247, 235, 0.65);
|
||
}
|
||
|
||
:deep(#tableStyle .el-table__row.current-row > td) {
|
||
background: rgba(76, 175, 80, 0.18) !important;
|
||
color: #1b5e20;
|
||
}
|
||
|
||
:deep(#tableStyle .el-table__body tr) {
|
||
transition: transform 0.15s ease, box-shadow 0.15s ease;
|
||
}
|
||
|
||
:deep(#tableStyle .el-table__body tr:hover) {
|
||
transform: translateY(-1px);
|
||
box-shadow: inset 0 2px 0 rgba(76, 175, 80, 0.15);
|
||
}
|
||
|
||
:deep(#tableStyle .el-button--text) {
|
||
color: #2e7d32;
|
||
font-weight: 500;
|
||
padding: 6px 12px;
|
||
border-radius: 8px;
|
||
transition: all 0.3s ease;
|
||
}
|
||
|
||
:deep(#tableStyle .el-button--text:hover) {
|
||
color: #1b5e20;
|
||
background: rgba(129, 199, 132, 0.2);
|
||
transform: translateY(-1px);
|
||
}
|
||
|
||
>>> .el-pagination button {
|
||
background-color: #E8F5E9 !important;
|
||
color: #2E7D32 !important;
|
||
}
|
||
|
||
>>> .el-pager li {
|
||
background: #E8F5E9 !important;
|
||
color: #2E7D32 !important;
|
||
}
|
||
|
||
.text {
|
||
font-size: 17px;
|
||
text-align: left;
|
||
color: #2e7d32;
|
||
}
|
||
|
||
.clearfix:before,
|
||
.clearfix:after {
|
||
display: table;
|
||
content: "";
|
||
}
|
||
.clearfix:after {
|
||
clear: both;
|
||
}
|
||
|
||
.box-card {
|
||
width: 480px;
|
||
position: absolute;
|
||
margin: auto;
|
||
top: 80px;
|
||
right: 0;
|
||
left: 0;
|
||
z-index: 999;
|
||
border-radius: 16px;
|
||
border: 1px solid rgba(129, 199, 132, 0.3);
|
||
box-shadow: 0 12px 28px rgba(76, 175, 80, 0.15);
|
||
}
|
||
|
||
:deep(.box-card .el-card__header) {
|
||
background: linear-gradient(90deg, #e0f0e2, #f2fbf3);
|
||
color: #1b5e20;
|
||
border-bottom: 1px solid rgba(129, 199, 132, 0.25);
|
||
border-radius: 16px 16px 0 0;
|
||
}
|
||
|
||
.taskDialog :deep(.el-dialog) {
|
||
border-radius: 18px;
|
||
border: 1px solid rgba(129, 199, 132, 0.35);
|
||
box-shadow: 0 12px 30px rgba(76, 175, 80, 0.18);
|
||
}
|
||
|
||
.taskDialog :deep(.el-dialog__header) {
|
||
background: linear-gradient(135deg, #4caf50, #2e7d32);
|
||
color: #fff;
|
||
border-radius: 18px 18px 0 0;
|
||
}
|
||
|
||
.taskDialog :deep(.el-form-item__label) {
|
||
color: #1b5e20;
|
||
font-weight: 600;
|
||
}
|
||
|
||
.taskDialog :deep(.el-button--primary) {
|
||
background-color: #4caf50 !important;
|
||
border-color: #4caf50 !important;
|
||
}
|
||
|
||
.taskDialog :deep(.el-button--primary:hover) {
|
||
background-color: #66bb6a !important;
|
||
border-color: #66bb6a !important;
|
||
}
|
||
</style>
|
||
|
||
<style>
|
||
/* 全局表格样式覆盖 - 确保主题样式生效 */
|
||
#tableStyle.el-table {
|
||
border: 1px solid rgba(129, 199, 132, 0.3) !important;
|
||
border-radius: 16px !important;
|
||
overflow: hidden !important;
|
||
}
|
||
|
||
#tableStyle.el-table.el-table--border {
|
||
border: 1px solid rgba(129, 199, 132, 0.3) !important;
|
||
}
|
||
|
||
#tableStyle.el-table.el-table--border::after,
|
||
#tableStyle.el-table.el-table--border::before {
|
||
background-color: rgba(129, 199, 132, 0.3) !important;
|
||
}
|
||
|
||
#tableStyle.el-table.el-table--border th {
|
||
border-right: 1px solid rgba(129, 199, 132, 0.25) !important;
|
||
}
|
||
|
||
#tableStyle.el-table.el-table--border th:last-child {
|
||
border-right: none !important;
|
||
}
|
||
|
||
#tableStyle.el-table.el-table--border td {
|
||
border-right: 1px solid rgba(76, 175, 80, 0.08) !important;
|
||
}
|
||
|
||
#tableStyle.el-table.el-table--border td:last-child {
|
||
border-right: none !important;
|
||
}
|
||
|
||
#tableStyle.el-table.el-table--striped .el-table__body tr.el-table__row--striped td {
|
||
background: rgba(233, 247, 235, 0.65) !important;
|
||
}
|
||
|
||
#tableStyle.el-table.el-table--striped .el-table__body tr.el-table__row--striped:hover td {
|
||
background: rgba(200, 230, 201, 0.5) !important;
|
||
}
|
||
|
||
/* 表头样式全局覆盖 */
|
||
#tableStyle.el-table .el-table__header-wrapper th {
|
||
background: linear-gradient(90deg, #e0f0e2, #f2fbf3) !important;
|
||
color: #1b5e20 !important;
|
||
font-weight: 600 !important;
|
||
border-bottom: 1px solid rgba(129, 199, 132, 0.35) !important;
|
||
font-size: 14px !important;
|
||
font-family: "Microsoft YaHei", "PingFang SC", "Helvetica Neue", Arial, sans-serif !important;
|
||
padding: 12px 0 !important;
|
||
text-align: center !important;
|
||
}
|
||
|
||
#tableStyle.el-table .el-table__header-wrapper thead th {
|
||
background: linear-gradient(90deg, #e0f0e2, #f2fbf3) !important;
|
||
color: #1b5e20 !important;
|
||
}
|
||
|
||
#tableStyle.el-table .el-table__header th {
|
||
background: linear-gradient(90deg, #e0f0e2, #f2fbf3) !important;
|
||
color: #1b5e20 !important;
|
||
font-weight: 600 !important;
|
||
border-bottom: 1px solid rgba(129, 199, 132, 0.35) !important;
|
||
}
|
||
|
||
#tableStyle.el-table .el-table__header th .cell {
|
||
color: #1b5e20 !important;
|
||
font-weight: 600 !important;
|
||
font-family: "Microsoft YaHei", "PingFang SC", "Helvetica Neue", Arial, sans-serif !important;
|
||
}
|
||
|
||
/* 覆盖自定义表头类名 sinCl */
|
||
#tableStyle.el-table .el-table__header th.sinCl {
|
||
background: linear-gradient(90deg, #e0f0e2, #f2fbf3) !important;
|
||
color: #1b5e20 !important;
|
||
font-weight: 600 !important;
|
||
border-bottom: 1px solid rgba(129, 199, 132, 0.35) !important;
|
||
font-size: 14px !important;
|
||
font-family: "Microsoft YaHei", "PingFang SC", "Helvetica Neue", Arial, sans-serif !important;
|
||
}
|
||
|
||
#tableStyle.el-table .el-table__header th.sinCl .cell {
|
||
color: #1b5e20 !important;
|
||
font-weight: 600 !important;
|
||
}
|
||
|
||
/* 滚动条全局样式 */
|
||
#tableStyle.el-table.el-table--scrollable-x .el-table__body-wrapper {
|
||
scrollbar-width: thin !important;
|
||
scrollbar-color: rgba(76, 175, 80, 0.4) rgba(232, 245, 233, 0.5) !important;
|
||
}
|
||
|
||
#tableStyle.el-table.el-table--scrollable-x .el-table__body-wrapper::-webkit-scrollbar {
|
||
height: 8px !important;
|
||
}
|
||
|
||
#tableStyle.el-table.el-table--scrollable-x .el-table__body-wrapper::-webkit-scrollbar-track {
|
||
background: rgba(232, 245, 233, 0.5) !important;
|
||
border-radius: 4px !important;
|
||
}
|
||
|
||
#tableStyle.el-table.el-table--scrollable-x .el-table__body-wrapper::-webkit-scrollbar-thumb {
|
||
background: linear-gradient(90deg, #81c784, #66bb6a) !important;
|
||
border-radius: 4px !important;
|
||
}
|
||
|
||
#tableStyle.el-table.el-table--scrollable-x .el-table__body-wrapper::-webkit-scrollbar-thumb:hover {
|
||
background: linear-gradient(90deg, #66bb6a, #4caf50) !important;
|
||
}
|
||
|
||
#tableStyle.el-table.el-table--scrollable-y .el-table__body-wrapper {
|
||
scrollbar-width: thin !important;
|
||
scrollbar-color: rgba(76, 175, 80, 0.4) rgba(232, 245, 233, 0.5) !important;
|
||
}
|
||
|
||
#tableStyle.el-table.el-table--scrollable-y .el-table__body-wrapper::-webkit-scrollbar {
|
||
width: 8px !important;
|
||
}
|
||
|
||
#tableStyle.el-table.el-table--scrollable-y .el-table__body-wrapper::-webkit-scrollbar-track {
|
||
background: rgba(232, 245, 233, 0.5) !important;
|
||
border-radius: 4px !important;
|
||
}
|
||
|
||
#tableStyle.el-table.el-table--scrollable-y .el-table__body-wrapper::-webkit-scrollbar-thumb {
|
||
background: linear-gradient(180deg, #81c784, #66bb6a) !important;
|
||
border-radius: 4px !important;
|
||
}
|
||
|
||
#tableStyle.el-table.el-table--scrollable-y .el-table__body-wrapper::-webkit-scrollbar-thumb:hover {
|
||
background: linear-gradient(180deg, #66bb6a, #4caf50) !important;
|
||
}
|
||
</style>
|