|
@@ -1,388 +1,204 @@
|
|
|
<template>
|
|
|
- <div class="page update_sql">
|
|
|
+ <div class="page page-develop">
|
|
|
+ <div class="header">
|
|
|
+ <div class="item" :class="{active:state.active===0}" @click="onTypeChange(0)">
|
|
|
+ 全部({{ state.totals.total }})
|
|
|
+ </div>
|
|
|
+ <div class="item" :class="{active:state.active===1}" @click="onTypeChange(1)">
|
|
|
+ 待审核({{ state.totals.apply }})
|
|
|
+ </div>
|
|
|
+ <div class="item" :class="{active:state.active===3}" @click="onTypeChange(3)">
|
|
|
+ 未通过({{ state.totals.fail }})
|
|
|
+ </div>
|
|
|
+ <div class="item" :class="{active:state.active===2}" @click="onTypeChange(2)">
|
|
|
+ 通过({{ state.totals.path }})
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
<div class="my-top">
|
|
|
- <el-form size="default" inline label-width="80px">
|
|
|
- <el-form-item label="备注名称">
|
|
|
- <el-input v-model="setting.params.remarkName" style="width: 160px" placeholder="请输入"></el-input>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="文件名称">
|
|
|
- <el-input v-model="setting.params.fileName" style="width: 160px" placeholder="请输入"></el-input>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="恢复状态">
|
|
|
- <el-select v-model="setting.params.restoreStatus" style="width: 160px">
|
|
|
- <el-option value="" label="全部"></el-option>
|
|
|
- <el-option :value="0" label="未恢复"></el-option>
|
|
|
- <el-option :value="1" label="已恢复"></el-option>
|
|
|
- </el-select>
|
|
|
+ <el-form class="inline-form" label-width="90px" inline size="default">
|
|
|
+ <el-form-item label="申请人">
|
|
|
+ <UserSelect ignore-tenant v-model="state.userId"></UserSelect>
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
- <el-button size="default" @click="getData">查询</el-button>
|
|
|
- <el-button size="default" @click="onReset" style="margin-right: 10px;">重置</el-button>
|
|
|
+ <el-button @click="getData" size="default" :loading="state.dataLoading">查询</el-button>
|
|
|
+ <el-button @click="onReset" size="default" :loading="state.dataLoading">重置</el-button>
|
|
|
<div style="flex: 1"></div>
|
|
|
- <el-button size="small" @click="setting.remarkShow = true" v-auth="'1823265087981531225'">
|
|
|
- <SvgIcon icon="selectAll"></SvgIcon>
|
|
|
- <span style="margin-left: 3px;">全量备份</span>
|
|
|
- </el-button>
|
|
|
- <el-button size="small" @click="getSqlList('open')" v-auth="'1823265107757674525'">
|
|
|
- <SvgIcon icon="backup2" :size="16"></SvgIcon>
|
|
|
- <span style="margin-left: 3px;">自定义备份</span>
|
|
|
+ <el-button type="primary" @click="applyBatch" size="default">
|
|
|
+ <SvgIcon icon="batch" style="margin-right: 3px;"></SvgIcon>
|
|
|
+ 批量审核
|
|
|
</el-button>
|
|
|
</div>
|
|
|
- <div style="height: calc(100% - 95px);overflow-y: auto">
|
|
|
- <el-table
|
|
|
- v-loading="setting.tableLoading" :data="setting.sqlData" :header-row-style="{ 'color': '#000', }"
|
|
|
- fit height="100%"
|
|
|
- >
|
|
|
- <el-table-column prop="remarks" label="备注" show-overflow-tooltip></el-table-column>
|
|
|
- <el-table-column prop="fileName" label="文件名称"></el-table-column>
|
|
|
- <el-table-column prop="backupTime" label="备份时间"></el-table-column>
|
|
|
- <el-table-column prop="createUserName" label="操作人"></el-table-column>
|
|
|
- <el-table-column label="恢复状态">
|
|
|
+ <div class="table-box">
|
|
|
+ <el-table :data="state.list" size="default" :header-row-style="{color:'#161616'}" height="100%">
|
|
|
+ <el-table-column label="" width="60px">
|
|
|
+ <template v-slot="{row}">
|
|
|
+ <el-checkbox v-model="row.select"></el-checkbox>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="所属用户" prop="tenantName"></el-table-column>
|
|
|
+ <el-table-column label="申请人" prop="userNickName"></el-table-column>
|
|
|
+ <el-table-column label="申请人账号" prop="userId"></el-table-column>
|
|
|
+ <el-table-column label="申请时间" prop="createTime"></el-table-column>
|
|
|
+ <el-table-column label="认证信息" prop="userAccount"></el-table-column>
|
|
|
+ <el-table-column label="审核状态">
|
|
|
<template v-slot="{row}">
|
|
|
- <div class="status-box" v-if="row.restoreStatus===0">
|
|
|
- <div class="point" style="background-color: #ff9b2a"></div>
|
|
|
- <span>未恢复</span>
|
|
|
+ <div class="status-box" v-if="row.status===3">
|
|
|
+ <div class="point" style="background-color: #bfbfbf"></div>
|
|
|
+ <span>未通过</span>
|
|
|
</div>
|
|
|
- <div class="status-box" v-if="row.restoreStatus===1">
|
|
|
+ <div class="status-box" v-if="row.status===2">
|
|
|
<div class="point" style="background-color: #18b633"></div>
|
|
|
- <span>已恢复</span>
|
|
|
+ <span>通过</span>
|
|
|
+ </div>
|
|
|
+ <div class="status-box" v-if="row.status===1">
|
|
|
+ <div class="point" style="background-color: #eb5a10"></div>
|
|
|
+ <span>待审核</span>
|
|
|
</div>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="数据来源" width="150">
|
|
|
- <template v-slot="scope">
|
|
|
- <span v-if="scope.row.dataSource == 0"> 备份</span>
|
|
|
- <span v-else>上传</span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="操作" width="120px">
|
|
|
- <template v-slot="scope">
|
|
|
- <el-button size="small" type="text" @click="downloadBackups(scope.row)"
|
|
|
- v-auth="'1823265230537535511'">
|
|
|
- 下载
|
|
|
- </el-button>
|
|
|
+ <el-table-column label="操作" align="center" width="160px">
|
|
|
+ <template v-slot="{row}">
|
|
|
+ <el-button type="text" @click="onApply(row)">审核</el-button>
|
|
|
+ <el-button type="text" @click="onShowRecord(row)">审核详情</el-button>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
|
</div>
|
|
|
- <!-- 分页 -->
|
|
|
<el-pagination
|
|
|
- background
|
|
|
- :current-page.sync="setting.page.current" :page-sizes="[10, 20, 30, 40]" @size-change="handleSizeChange"
|
|
|
- @current-change="handleCurrentChange" :page-size="setting.page.size"
|
|
|
- layout="total, sizes, prev, pager, next, jumper" :total="setting.page.total" class="my-page"
|
|
|
+ :current-page.sync="state.page.current" :page-size="state.page.size" :page-sizes="[10, 20, 30, 40]"
|
|
|
+ :total="state.page.total" @current-change="getData"
|
|
|
+ background layout="total, sizes, prev, pager, next, jumper" @size-change="onSizeChange" class="my-page"
|
|
|
></el-pagination>
|
|
|
- <el-dialog
|
|
|
- title="自定义备份" v-model="setting.dialogShow" width="800px" :close-on-click-modal="false"
|
|
|
- :close-on-press-escape="false" class="backup-dialog"
|
|
|
- >
|
|
|
- <el-form inline>
|
|
|
- <el-form-item label="表名称">
|
|
|
- <el-input v-model="setting.sqlName" placeholder="输入表名称查询" size="small">
|
|
|
- <template #append>
|
|
|
- <el-button :icon="Search" @click="getSqlList"/>
|
|
|
- </template>
|
|
|
- </el-input>
|
|
|
- </el-form-item>
|
|
|
- </el-form>
|
|
|
- <div style="height:calc(100% - 202px)">
|
|
|
- <el-table
|
|
|
- v-loading="setting.loading" :data="setting.tableData" height="100%" style="margin: 10px 0;"
|
|
|
- @selection-change="handleSelectionChange" size="small"
|
|
|
- >
|
|
|
- <el-table-column type="selection" width="55"></el-table-column>
|
|
|
- <el-table-column prop="tableName" label="表名"></el-table-column>
|
|
|
- <el-table-column prop="tableComment" label="表备注"></el-table-column>
|
|
|
- <el-table-column prop="dataMb" label="表大小"></el-table-column>
|
|
|
- <el-table-column prop="tableRows" label="表行数"></el-table-column>
|
|
|
- </el-table>
|
|
|
- </div>
|
|
|
- <el-form size="small" label-width="70px">
|
|
|
- <el-form-item label="备份方式" style="margin: 10px 0;">
|
|
|
- <el-radio-group v-model="setting.backupsForm.backupType">
|
|
|
- <el-radio :label="1">合并导出</el-radio>
|
|
|
- <el-radio :label="2">分表导出</el-radio>
|
|
|
+ <el-dialog v-model="state.showAudit" append-to-body width="500px" title="审核">
|
|
|
+ <el-form label-width="70px">
|
|
|
+ <el-form-item label="是否通过">
|
|
|
+ <el-radio-group v-model="state.auditForm.pass">
|
|
|
+ <el-radio :label="true">通过</el-radio>
|
|
|
+ <el-radio :label="false">驳回</el-radio>
|
|
|
</el-radio-group>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="备注" required>
|
|
|
- <el-input
|
|
|
- type="textarea" :rows="3" v-model="setting.backupsForm.remark" maxlength="120" show-word-limit
|
|
|
- ></el-input>
|
|
|
+ <el-form-item label="备注" required v-if="!state.auditForm.pass">
|
|
|
+ <el-input type="textarea" :rows="3" placeholder="请输入备注" v-model="state.auditForm.reason"></el-input>
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
<div class="dialog-btns">
|
|
|
- <el-button @click="clearVal">取 消</el-button>
|
|
|
- <el-button
|
|
|
- :disabled="setting.backupsForm.tableNames == '' || setting.backupsForm.remark == ''" type="primary"
|
|
|
- @click="handBackups"
|
|
|
- >
|
|
|
- 确 定
|
|
|
+ <el-button @click="state.showAudit=false" size="default">取消</el-button>
|
|
|
+ <el-button @click="onAuditConfirm" type="primary" size="default" :loading="state.saveAuditLoading">确定
|
|
|
</el-button>
|
|
|
</div>
|
|
|
</el-dialog>
|
|
|
- <el-dialog append-to-body v-model="setting.remarkShow" width="500px">
|
|
|
- <template #header>
|
|
|
- <span style="color: red">*</span>
|
|
|
- 备注
|
|
|
- </template>
|
|
|
- <el-input
|
|
|
- type="textarea" :rows="3" v-model="setting.backupsForm.remark" maxlength="120" show-word-limit
|
|
|
- ></el-input>
|
|
|
- <div class="dialog-btns">
|
|
|
- <el-button @click="setting.remarkShow = false">取 消</el-button>
|
|
|
- <el-button type="primary" :disabled="setting.backupsForm.remark == ''" @click="backupsAll">确 定</el-button>
|
|
|
- </div>
|
|
|
- </el-dialog>
|
|
|
- <el-dialog
|
|
|
- title="导入sql" v-model="setting.fileShow" width="70%" top="8vh" :close-on-click-modal="false"
|
|
|
- :close-on-press-escape="false" class="backup-upload-dialog"
|
|
|
- >
|
|
|
- <div style="display: flex;align-items: center;margin-bottom: 10px;">
|
|
|
- <el-upload
|
|
|
- accept="zip" action="*" :auto-upload="false" :on-change="addFile"
|
|
|
- :file-list="setting.fileList" v-auth="'1823265127781281880'"
|
|
|
- >
|
|
|
- <el-button type="primary">上传文件</el-button>
|
|
|
- </el-upload>
|
|
|
- <div style="margin-left: 20px;color: #777">只能上传zip文件</div>
|
|
|
- </div>
|
|
|
- <el-table :data="setting.fileData" :header-row-style="{ 'color': '#000', }" fit max-height="500" :border="true">
|
|
|
- <el-table-column prop="fileName" label="文件名称"></el-table-column>
|
|
|
- <el-table-column prop="backupTime" label="上传时间"></el-table-column>
|
|
|
- <el-table-column prop="remarks" label="备注" show-overflow-tooltip></el-table-column>
|
|
|
- <el-table-column label="数据来源" width="150">
|
|
|
- <template v-slot="scope">
|
|
|
- <span v-if="scope.row.dataSource == 0"> 备份</span>
|
|
|
- <span v-else>上传</span>
|
|
|
+ <el-dialog v-model="state.showAuditRecord" append-to-body width="600px" title="审核详情">
|
|
|
+ <el-table :data="state.auditRecord" max-height="500px">
|
|
|
+ <el-table-column label="时间" prop="createTime" width="160px"></el-table-column>
|
|
|
+ <el-table-column label="操作人" prop="createUserName"></el-table-column>
|
|
|
+ <el-table-column label="审核状态">
|
|
|
+ <template v-slot="{row}">
|
|
|
+ <div class="status-box" v-if="row.status===2">
|
|
|
+ <div class="point" style="background-color: #bfbfbf"></div>
|
|
|
+ <span>未通过</span>
|
|
|
+ </div>
|
|
|
+ <div class="status-box" v-if="row.status===1">
|
|
|
+ <div class="point" style="background-color: #18b633"></div>
|
|
|
+ <span>通过</span>
|
|
|
+ </div>
|
|
|
+ <div class="status-box" v-if="row.status===0">
|
|
|
+ <div class="point" style="background-color: #eb5a10"></div>
|
|
|
+ <span>待审核</span>
|
|
|
+ </div>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="操作" width="120px">
|
|
|
- <template v-slot="scope">
|
|
|
- <el-button size="small" type="text" @click="downloadBackups(scope.row)"
|
|
|
- v-auth="'1823265181954912325'">
|
|
|
- 下载
|
|
|
- </el-button>
|
|
|
+ <el-table-column label="备注">
|
|
|
+ <template v-slot="{row}">
|
|
|
+ <span>{{ row.remark }}</span>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
|
<div class="dialog-btns">
|
|
|
- <el-button @click="setting.fileShow = false">取 消</el-button>
|
|
|
- <el-button type="primary" @click="setting.fileShow = false" :disabled="!setting.fileData.length">确 定
|
|
|
- </el-button>
|
|
|
- </div>
|
|
|
- </el-dialog>
|
|
|
- <el-dialog
|
|
|
- title="执行sql" :show-close="false" v-model="setting.innerVisible"
|
|
|
- :close-on-click-modal="false" :close-on-press-escape="false" append-to-body
|
|
|
- >
|
|
|
- <div style="color: red;"> sql执行中,请勿关闭</div>
|
|
|
- <div style="margin: 20px 0; text-align: center;">
|
|
|
- <el-progress type="circle" :percentage="setting.progressNum"></el-progress>
|
|
|
- </div>
|
|
|
- <div style="text-align: center;">
|
|
|
- <i class="el-icon-loading" style="font-size: 30px;"></i>执行中...
|
|
|
+ <el-button @click="state.showAuditRecord=false" type="primary" size="default">确定</el-button>
|
|
|
</div>
|
|
|
</el-dialog>
|
|
|
</div>
|
|
|
</template>
|
|
|
-<script setup name="pageBackup">
|
|
|
-import {onMounted} from 'vue';
|
|
|
-import {backupsList, backups, sqlList, upload} from '@/api/backup';
|
|
|
-import {ElLoading, ElMessage,} from 'element-plus'
|
|
|
-import {Search} from "@element-plus/icons-vue";
|
|
|
-const setting = reactive({
|
|
|
- sqlData: [],
|
|
|
- date: [],
|
|
|
- sqlForm: {
|
|
|
- dataSource: 0, //数据源 0-备份 1-上传
|
|
|
- fileName: '', //文件名
|
|
|
- tenantId: '', //租户id
|
|
|
- },
|
|
|
- params: {remarkName: '', fileName: '', restoreStatus: ''},
|
|
|
- page: {current: 1, size: 10, total: 0,},
|
|
|
- backupsForm: { //手动备份
|
|
|
- backupType: 1, //1:合并导出,2:分表导出
|
|
|
- tableNames: "", //表名 多个用逗号隔开
|
|
|
- remark: "", //备注
|
|
|
- },
|
|
|
- sqlName: '', //sql名称
|
|
|
- dialogShow: false, //弹窗显示
|
|
|
- remarkShow: false, //弹窗显示
|
|
|
- fileShow: false, //文件弹窗显示
|
|
|
- tableData: [], //sql列表
|
|
|
- sqlTableData: [], //sql列表
|
|
|
- loading: true,
|
|
|
- tableLoading: true,
|
|
|
- fileList: [], //文件列表
|
|
|
- fileData: [], //上传文件列表
|
|
|
- isNext: 0, //下一步
|
|
|
- innerVisible: 0, //下一步
|
|
|
- progressNum: 0 //进度
|
|
|
-});
|
|
|
-
|
|
|
+<script setup>
|
|
|
+import {list, apply, applyRecord} from '@/api/develop'
|
|
|
+import UserSelect from "/@/components/UserSelect/index.vue";
|
|
|
+import SvgIcon from "/@/components/svgIcon/index.vue";
|
|
|
+import {ElMessage} from "element-plus";
|
|
|
+let state = reactive({
|
|
|
+ totals: {total: 0, apply: 0, fail: 0, path: 0,},
|
|
|
+ active: 0,
|
|
|
+ page: {total: 0, current: 1, size: 10},
|
|
|
+ list: [],
|
|
|
+ userId: '',
|
|
|
+ dataLoading: false,
|
|
|
+ showAudit: false,
|
|
|
+ auditForm: {},
|
|
|
+ saveAuditLoading: false,
|
|
|
+ showAuditRecord: false,
|
|
|
+ auditRecord: [],
|
|
|
+})
|
|
|
onMounted(() => {
|
|
|
- getData();
|
|
|
-});
|
|
|
-const onReset = () => {
|
|
|
- setting.params.remarkName = ''
|
|
|
- setting.params.fileName = ''
|
|
|
- setting.params.restoreStatus = ''
|
|
|
getData()
|
|
|
-}
|
|
|
-const getData = () => {
|
|
|
- setting.tableLoading = true;
|
|
|
- let {current, size} = setting.page
|
|
|
- let data = {current, size}
|
|
|
- let {remarkName, fileName, restoreStatus} = setting.params
|
|
|
- if (remarkName) data.remarks = remarkName
|
|
|
- if (fileName) data.fileName = fileName
|
|
|
- if (restoreStatus !== '') data.restoreStatus = restoreStatus
|
|
|
- // 获取备份列表
|
|
|
- backupsList(data).then(res => {
|
|
|
- setting.tableLoading = false;
|
|
|
- setting.sqlData = res.data?.records || [];
|
|
|
- setting.page.total = res.data.total;
|
|
|
- }).finally(() => {
|
|
|
- setting.tableLoading = false;
|
|
|
- })
|
|
|
-};
|
|
|
-// 全量备份
|
|
|
-const backupsAll = () => {
|
|
|
- const loading = ElLoading.service({
|
|
|
- lock: true,
|
|
|
- text: '数据备份中...',
|
|
|
- spinner: 'el-icon-loading',
|
|
|
- background: 'rgba(0, 0, 0, 0.7)',
|
|
|
- });
|
|
|
- backups({remark: setting.backupsForm.remark}).then(res => {
|
|
|
- ElMessage.success('备份成功');
|
|
|
- setting.remarkShow = false
|
|
|
- setting.backupsForm.remark = ''
|
|
|
- loading.close();
|
|
|
- getData()
|
|
|
- }).finally(() => {
|
|
|
- loading.close();
|
|
|
- })
|
|
|
-};
|
|
|
-// sql列表 getSqlList
|
|
|
-const getSqlList = (val) => {
|
|
|
- setting.loading = true;
|
|
|
- if (val == 'open') {
|
|
|
- setting.dialogShow = true
|
|
|
- sqlList({tableName: setting.sqlName}).then(res => {
|
|
|
- setting.loading = false;
|
|
|
- setting.tableData = res.data;
|
|
|
- setting.sqlTableData = JSON.parse(JSON.stringify(res.data));
|
|
|
- })
|
|
|
- } else {
|
|
|
- if (setting.sqlName == '') {
|
|
|
- setting.tableData = setting.sqlTableData
|
|
|
- setting.loading = false
|
|
|
- } else {
|
|
|
- setting.tableData = setting.sqlTableData.filter(item => {
|
|
|
- return item.tableName.indexOf(setting.sqlName) > -1 || item.tableComment.indexOf(setting.sqlName) > -1
|
|
|
- })
|
|
|
- setting.loading = false
|
|
|
- }
|
|
|
- }
|
|
|
-};
|
|
|
-// 手动备份 handBackups
|
|
|
-const handBackups = () => {
|
|
|
- const loading = ElLoading.service({
|
|
|
- lock: true,
|
|
|
- text: '数据备份中...',
|
|
|
- spinner: 'el-icon-loading',
|
|
|
- background: 'rgba(0, 0, 0, 0.7)',
|
|
|
- });
|
|
|
- backups(setting.backupsForm).then(res => {
|
|
|
- loading.close();
|
|
|
- ElMessage.success('备份成功');
|
|
|
- clearVal();
|
|
|
- getData()
|
|
|
- }).catch(err => {
|
|
|
- loading.close();
|
|
|
- ElMessage.error('备份失败');
|
|
|
- })
|
|
|
+})
|
|
|
+const applyBatch = () => {
|
|
|
|
|
|
-};
|
|
|
-// 下载备份
|
|
|
-const downloadBackups = (row) => {
|
|
|
- let {filePath, remarks} = row
|
|
|
- const a = document.createElement("a");
|
|
|
- a.href = filePath;
|
|
|
- a.download = remarks || 'download';
|
|
|
- // a.target = '_blank';
|
|
|
- document.body.appendChild(a);
|
|
|
- a.click();
|
|
|
- document.body.removeChild(a);
|
|
|
- ElMessage({type: 'success', message: '已开始下载'})
|
|
|
}
|
|
|
-const handleSelectionChange = (val) => {
|
|
|
- setting.backupsForm.tableNames = val.map(item => item.tableName).join(',')
|
|
|
+const onApply = row => {
|
|
|
+ state.auditForm = {id: row.id, pass: true, reason: '',}
|
|
|
+ state.showAudit = true
|
|
|
}
|
|
|
-// 关闭弹窗清空内容
|
|
|
-const clearVal = () => {
|
|
|
- setting.sqlName = '';
|
|
|
- setting.backupsForm = {
|
|
|
- backupType: 1, //1:合并导出,2:分表导出
|
|
|
- tableNames: "", //表名 多个用逗号隔开
|
|
|
- remark: "", //备注
|
|
|
+const onAuditConfirm = () => {
|
|
|
+ if (state.saveAuditLoading) return
|
|
|
+ if (!state.auditForm.pass && !state.auditForm.reason) {
|
|
|
+ return ElMessage({type: 'error', message: '请填写备注'})
|
|
|
}
|
|
|
- setting.dialogShow = false;
|
|
|
-}
|
|
|
-// 每页条数
|
|
|
-const handleSizeChange = (val) => {
|
|
|
- setting.page.current = 1;
|
|
|
- setting.page.size = val;
|
|
|
- getData();
|
|
|
+ state.saveAuditLoading = true
|
|
|
+ apply({...state.auditForm}).then(res => {
|
|
|
+ ElMessage({type: 'success', message: '已提交'})
|
|
|
+ state.showAudit = false
|
|
|
+ getData()
|
|
|
+ }).finally(() => state.saveAuditLoading = false)
|
|
|
}
|
|
|
-// 当前页
|
|
|
-const handleCurrentChange = (val) => {
|
|
|
- setting.page.current = val;
|
|
|
- getData();
|
|
|
+const onShowRecord = row => {
|
|
|
+ state.auditRecord = []
|
|
|
+ applyRecord({id: row.id}).then(res => {
|
|
|
+ state.auditRecord = res.data || []
|
|
|
+ state.showAuditRecord = true
|
|
|
+ })
|
|
|
}
|
|
|
-// 添加文件
|
|
|
-const addFile = (file, fileList) => {
|
|
|
- if (file.name.indexOf('.zip') == -1) {
|
|
|
- ElMessage.error('请上传sql文件');
|
|
|
- fileList.filter(item => {
|
|
|
- if (item.name === file.name) {
|
|
|
- fileList.splice(fileList.indexOf(item), 1)
|
|
|
- }
|
|
|
- })
|
|
|
- return false
|
|
|
- } else {
|
|
|
- setting.fileList = fileList
|
|
|
- uploadFile()
|
|
|
- }
|
|
|
+const onTypeChange = type => {
|
|
|
+ state.active = type
|
|
|
+ getData()
|
|
|
}
|
|
|
-// 上传文件
|
|
|
-const uploadFile = () => {
|
|
|
- const loading = ElLoading.service({
|
|
|
- lock: true,
|
|
|
- text: '文件上传中...',
|
|
|
- spinner: 'el-icon-loading',
|
|
|
- background: 'rgba(0, 0, 0, 0.7)',
|
|
|
- });
|
|
|
- const formData = new FormData();
|
|
|
- formData.append('file', setting.fileList[0].raw);
|
|
|
- upload(formData).then(res => {
|
|
|
- setting.fileList = [];
|
|
|
- ElMessage.success('上传成功');
|
|
|
- // }
|
|
|
- const fileForm = {...setting.sqlForm}
|
|
|
- // 获取备份列表
|
|
|
- fileForm.dataSource = 1
|
|
|
- fileForm.size = 999999
|
|
|
- fileForm.current = 1
|
|
|
- backupsList(fileForm).then(res => {
|
|
|
- setting.fileData = res.data?.records || [];
|
|
|
- })
|
|
|
+const getData = () => {
|
|
|
+ if (state.dataLoading) return
|
|
|
+ let {current, size} = state.page
|
|
|
+ let params = {current, size}
|
|
|
+ if (state.active) params.status = state.active
|
|
|
+ if (state.userId) params.userId = state.userId
|
|
|
+ state.dataLoading = true
|
|
|
+ list(params).then(res => {
|
|
|
+ let {records, total} = res.data
|
|
|
+ state.page.total = total
|
|
|
+ records.forEach(i => i.select = false)
|
|
|
+ state.list = records
|
|
|
}).finally(() => {
|
|
|
- loading.close();
|
|
|
+ state.dataLoading = false
|
|
|
})
|
|
|
}
|
|
|
+const onReset = () => {
|
|
|
+ state.page.current = 1
|
|
|
+ state.page.size = 10
|
|
|
+ state.userId = ''
|
|
|
+ state.active = 0
|
|
|
+ getData()
|
|
|
+}
|
|
|
+const onSizeChange = size => {
|
|
|
+ state.page.size = size
|
|
|
+ state.page.current = 1
|
|
|
+ getData()
|
|
|
+}
|
|
|
</script>
|
|
|
<style lang="scss">
|
|
|
-@import "./list.scss";
|
|
|
-</style>
|
|
|
+@import "./develop.scss";
|
|
|
+</style>
|