|
@@ -31,6 +31,13 @@
|
|
|
@click="proSyncbtn"
|
|
|
>项目数据同步
|
|
|
</el-button>
|
|
|
+ <el-button
|
|
|
+ size="medium"
|
|
|
+ style="margin-right: 10px"
|
|
|
+ icon="el-icon-s-data"
|
|
|
+ @click="SyncbtnProGress"
|
|
|
+ >同步进度
|
|
|
+ </el-button>
|
|
|
<el-button
|
|
|
size="medium"
|
|
|
icon="el-icon-s-grid"
|
|
@@ -2491,35 +2498,71 @@
|
|
|
</span>
|
|
|
</el-dialog>
|
|
|
<!-- 同步队列 -->
|
|
|
- <el-dialog
|
|
|
- title="同步队列"
|
|
|
- :visible.sync="syncListDialog"
|
|
|
- width="30%"
|
|
|
- append-to-body
|
|
|
- :close-on-click-modal="false"
|
|
|
- @close="closeSyncListTag"
|
|
|
- >
|
|
|
- <div class="content-box" v-loading="refreshLoading||refreshLoading1">
|
|
|
- <el-image
|
|
|
- style="width: 100px; height: 100px"
|
|
|
- :src="require('@/assets/loader.svg')"
|
|
|
- fit="contain"></el-image>
|
|
|
- <div class="mt-14">同步中</div>
|
|
|
- <div class="mt-14">
|
|
|
- 同步数量{{ syncListData.nodeNum }} 剩余数量{{ syncListData.nodeNumEnd }}
|
|
|
- </div>
|
|
|
- <div class="mt-14">
|
|
|
- <el-button type="primary" @click="syncListDialog=false">好的,我已知晓</el-button>
|
|
|
- </div>
|
|
|
- <div class="mt-14">
|
|
|
- <el-link type="primary" @click="refreshData" v-loading="refreshLoading" v-if="!isAdd">刷新数据</el-link>
|
|
|
- <el-link type="primary" @click="refreshData1" v-loading="refreshLoading1" v-else>刷新数据</el-link>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- </el-dialog>
|
|
|
+ <el-dialog
|
|
|
+ title="同步队列"
|
|
|
+ :visible.sync="syncListDialog"
|
|
|
+ width="30%"
|
|
|
+ append-to-body
|
|
|
+ :close-on-click-modal="false"
|
|
|
+ @close="closeSyncListTag"
|
|
|
+ custom-class="sync-queue-dialog"
|
|
|
+ >
|
|
|
+ <!-- 有同步任务时显示 -->
|
|
|
+ <div v-if="syncListData && syncListData.length > 0" class="sync-list">
|
|
|
+ <div
|
|
|
+ v-for="(item, index) in syncListData"
|
|
|
+ :key="index"
|
|
|
+ class="sync-item"
|
|
|
+ >
|
|
|
+ <!-- 同步方信息和状态 -->
|
|
|
+ <div class="sync-header">
|
|
|
+ <span class="sync-party">{{ item.party }}</span>
|
|
|
+ <span class="sync-status">{{ item.status }}</span>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 进度条 -->
|
|
|
+ <div class="progress-container">
|
|
|
+ <el-progress
|
|
|
+ :percentage="item.progress"
|
|
|
+ stroke-width="6"
|
|
|
+ stroke-linecap="round"
|
|
|
+ ></el-progress>
|
|
|
+ <span class="progress-text">{{ item.progress }}%</span>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 统计数据 -->
|
|
|
+ <div class="sync-stats">
|
|
|
+ <div class="stat-item">
|
|
|
+ <span class="stat-label">已同步</span>
|
|
|
+ <span class="stat-value synced">{{ item.synced }}</span>
|
|
|
+ </div>
|
|
|
+ <div class="stat-item">
|
|
|
+ <span class="stat-label">剩余</span>
|
|
|
+ <span class="stat-value remaining">{{ item.remaining }}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 无同步任务时显示 -->
|
|
|
+ <div v-else class="no-data">
|
|
|
+ <div class="no-data-icon">
|
|
|
+ <i class="el-icon-information"></i>
|
|
|
+ </div>
|
|
|
+ <div class="no-data-text">暂无同步任务...</div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 底部按钮 -->
|
|
|
+ <div slot="footer" class="dialog-footer">
|
|
|
+ <el-button
|
|
|
+ type="primary"
|
|
|
+ @click="syncListDialog = false"
|
|
|
+ class="confirm-btn"
|
|
|
+ >
|
|
|
+ 好的,我已知晓
|
|
|
+ </el-button>
|
|
|
+ </div>
|
|
|
+ </el-dialog>
|
|
|
<!-- 同步表单其他配置 -->
|
|
|
<el-dialog
|
|
|
title="同步表单其他配置"
|
|
@@ -3543,6 +3586,9 @@ export default {
|
|
|
|
|
|
if(this.isNodeType){
|
|
|
this.tableListByTypeLoad=true
|
|
|
+ if(!this.curTreeData){
|
|
|
+ return
|
|
|
+ }
|
|
|
getGroupNodeTables(
|
|
|
|
|
|
{
|
|
@@ -6476,7 +6522,12 @@ async saveLinkTab() {
|
|
|
this.handleEditFormula(0, row)
|
|
|
}
|
|
|
|
|
|
- }
|
|
|
+ },
|
|
|
+ //同步进度按钮
|
|
|
+ SyncbtnProGress(){
|
|
|
+ this.syncListDialog=true
|
|
|
+
|
|
|
+ },
|
|
|
},
|
|
|
watch: {
|
|
|
"GLExcelFrom.search"(val) {
|
|
@@ -6793,3 +6844,139 @@ async saveLinkTab() {
|
|
|
|
|
|
}
|
|
|
</style>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+.noData{
|
|
|
+ text-align: center;
|
|
|
+
|
|
|
+
|
|
|
+}
|
|
|
+.circle-btn{
|
|
|
+ border-radius: 200px;
|
|
|
+}
|
|
|
+</style>
|
|
|
+
|
|
|
+<style scoped>
|
|
|
+.sync-queue-dialog {
|
|
|
+ .el-dialog__header {
|
|
|
+ padding: 18px 20px;
|
|
|
+ border-bottom: 1px solid #eee;
|
|
|
+ }
|
|
|
+
|
|
|
+ .el-dialog__title {
|
|
|
+ font-size: 16px;
|
|
|
+ font-weight: 500;
|
|
|
+ }
|
|
|
+
|
|
|
+ .el-dialog__body {
|
|
|
+ padding: 20px;
|
|
|
+ max-height: 400px;
|
|
|
+ overflow-y: auto;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.sync-list {
|
|
|
+ .sync-item {
|
|
|
+ padding: 15px 0;
|
|
|
+ border-bottom: 1px dashed #eee;
|
|
|
+
|
|
|
+ &:last-child {
|
|
|
+ border-bottom: none;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .sync-header {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ margin-bottom: 10px;
|
|
|
+ font-size: 14px;
|
|
|
+
|
|
|
+ .sync-party {
|
|
|
+ color: #333;
|
|
|
+ font-weight: 500;
|
|
|
+ }
|
|
|
+
|
|
|
+ .sync-status {
|
|
|
+ color: #666;
|
|
|
+ font-size: 13px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .progress-container {
|
|
|
+ position: relative;
|
|
|
+ margin-bottom: 12px;
|
|
|
+
|
|
|
+ .progress-text {
|
|
|
+ position: absolute;
|
|
|
+ right: 0;
|
|
|
+ top: -5px;
|
|
|
+ font-size: 12px;
|
|
|
+ color: #666;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .sync-stats {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ padding: 0 5px;
|
|
|
+
|
|
|
+ .stat-item {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ align-items: center;
|
|
|
+ width: 45%;
|
|
|
+ padding: 8px 0;
|
|
|
+ border-radius: 4px;
|
|
|
+ background-color: #f5f7fa;
|
|
|
+
|
|
|
+ .stat-label {
|
|
|
+ font-size: 12px;
|
|
|
+ color: #999;
|
|
|
+ margin-bottom: 5px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .stat-value {
|
|
|
+ font-size: 16px;
|
|
|
+ font-weight: 500;
|
|
|
+ }
|
|
|
+
|
|
|
+ .synced {
|
|
|
+ color: #42b983; /* Element UI success color */
|
|
|
+ }
|
|
|
+
|
|
|
+ .remaining {
|
|
|
+ color: #e6a23c; /* Element UI warning color */
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.no-data {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ padding: 30px 0;
|
|
|
+
|
|
|
+ .no-data-icon {
|
|
|
+ font-size: 48px;
|
|
|
+ color: #c0c4cc;
|
|
|
+ margin-bottom: 15px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .no-data-text {
|
|
|
+ font-size: 14px;
|
|
|
+ color: #666;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.dialog-footer {
|
|
|
+ text-align: center;
|
|
|
+ padding: 15px 20px;
|
|
|
+ border-top: 1px solid #eee;
|
|
|
+
|
|
|
+ .confirm-btn {
|
|
|
+ width: 160px;
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|