damQualityAssess.vue 8.97 KB
<route lang="yaml">
    name: damQualityAssess
    </route>

<script lang="ts" setup name="damQualityAssess">
import { ref } from 'vue';
import { TableColumnWidth, commonPageConfig } from '@/utils/enum';
import {
  getQualityList,
  getQualityDamList,
  deleteQualityPlan,
  executePlan,
  downPlanSql
} from "@/api/modules/dataAssetQuality";
import useDataAssetStore from "@/store/modules/dataAsset";
import { download } from '@/utils/common';
import useUserStore from "@/store/modules/user";

const userStore = useUserStore()
const userData = JSON.parse(userStore.userData)
const assetStore = useDataAssetStore();
const { proxy } = getCurrentInstance() as any;
const router = useRouter();
const damListData = ref([]);
const serachFormRef = ref();
const searchItemList = ref([
  {
    type: 'select',
    label: '',
    field: 'damGuid',
    default: '',
    placeholder: '数据资产名称',
    options: damListData.value,
    props: {
      value: 'guid',
      label: 'damName'
    },
    filterable: true,
    clearable: true,
    required: true,
    visible: true
  }
])

/** 分页及搜索传参信息配置。 */
const page = ref({
  ...commonPageConfig,
  damGuid: ''
});

/** 方案表格配置信息。 */
const tableInfo = ref({
  id: 'quality-table',
  //  multiple: true,
  loading: false,
  nodeKey: 'guid',
  fields: [
    { label: "序号", type: "index", width: TableColumnWidth.INDEX, fixed: "left", align: "center" },
    {
      label: "数据资产名称", field: "damName", width: 160, fixed: "left", type: "text_btn", value: "damDetail", columClass: 'text_btn', click: (scope) => {
        router.push({
          name: "registerCatalogDetail",
          query: { guid: scope.row.damGuid },
        });
      }
    },
    { label: "所属企业", field: "tenantName", width: 240 },
    { label: "质量评分", field: "qualityScore", width: 120, align: 'right' },
    { label: "执行状态", field: "execState", width: TableColumnWidth.STATE, align: 'center', type: "tag" },
    { label: "执行时间", field: "lastExecTime", width: TableColumnWidth.DATETIME, },
    { label: "创建人", field: "createUserName", width: TableColumnWidth.USERNAME },
    { label: "修改人", field: "updateUserName", width: TableColumnWidth.USERNAME },
    { label: "修改时间", field: "updateTime", width: TableColumnWidth.DATETIME, },
  ],
  data: [],
  page: {
    type: "normal",
    rows: 0,
    ...page.value,
  },
  actionInfo: {
    label: "操作",
    type: "btn",
    isMore: true,
    width: 271,
    btns: (scope) => {
      const row = scope.row
      let btnsArr: any = [{
        label: "查看报告", value: "reportView", disabled: row.execState == 1 || row.isExecute || row.execState == 0, click: (scope) => {
          router.push({
            name: 'damAnalysisReport',
            query: {
              planGuid: row.guid,
              name: row.damName,
              reportExecGuid: row.reportExecGuid
            }
          });
        }
      }, {
        label: "查看结果", value: "resultView", disabled: row.execState == 1 || row.isExecute || row.execState == 0, click: (scope) => {
          router.push({
            name: 'damAssessDetail',
            query: {
              name: row.damName,
              planExecGuid: row.planExecGuid
            }
          });
        }
      }, {
        label: "编辑", value: "edit", disabled: row.execState == 1 || row.isExecute, click: (scope) => {
          router.push({
            name: 'damQualityPlan',
            query: {
              guid: row.guid,
              damName: row.damName
            }
          });
        }
      }];
      if (row.isExecute) {
        btnsArr.push({ label: "执行中", value: "execute", disabled: true });
      } else {
        btnsArr.push({
          label: "执行", value: "execute", disabled: row.execState == 1 || row.state == 0, click: (scope) => {
            row.isExecute = true
            executePlan({ planGuid: row.guid, reportGuid: row.reportGuid }).then((res: any) => {
              if (res.code == proxy.$passCode) {
                getTableData();
                proxy.$ElMessage.success('执行完成');
              } else {
                proxy.$ElMessage.error(res.msg);
              }
              row.isExecute = false
            }).catch(() => {
              row.isExecute = false
            })
          }
        });
      }
      btnsArr.push({
        label: "日志", value: "path_log", disabled: row.execState == 0, click: (scope) => {
          router.push({
            name: 'damQualityAssessLog',
            query: {
              guid: row.damGuid,
              name: row.damName,
              reportGuid: row.reportGuid
            }
          });
        }
      });
      btnsArr.push({
        label: "删除", value: "delete", disabled: row.execState == 1 || row.isExecute, click: (scope) => {
          if (scope.row.createUserId && userData.userGuid !== scope.row.createUserId) {
            proxy.$ElMessage.error('只有创建人才可以删除该资产质量评估');
            return;
          }
          proxy.$openMessageBox("确定要删除该资产质量评估吗?", () => {
            deleteQualityPlan([scope.row.guid]).then((res: any) => {
              if (res.code == proxy.$passCode) {
                page.value.curr = 1;
                /** 将当前查询到的删除了,清除。 */
                if (page.value.damGuid == row.damGuid) {
                  page.value.damGuid = '';
                  serachFormRef.value?.toolSearch?.formRef?.resetFields?.();
                  getTableData();
                } else {
                  getTableData();
                }
                proxy.$ElMessage.success('删除该资产质量评估成功');
              } else {
                proxy.$ElMessage.error(res.msg);
              }
            });
          }, () => {
            proxy.$ElMessage.info("已取消删除");
          })
        }
      });
      btnsArr.push({
        label: 'SQL下载', value: 'sqldown', disabled: row.execState == 1 || row.isExecute || row.execState == 0, click: (scope) => {
          downPlanSql(scope.row.guid).then((res: any) => {
            if (res && !res.msg) {
              download(res, `SQL-${scope.row.damName}.zip`, 'zip');
            } else {
              res?.msg && proxy.$ElMessage.error(res?.msg);
            }
          });
        }
      });
      return btnsArr
    }
  }
});

const toSearch = (val: any, clear: boolean = false) => {
  page.value.curr = 1;
  if (clear) {
    searchItemList.value.map(item => item.default = '')
    page.value.damGuid = '';
    getTableData(false);
    return;
  }
  page.value.damGuid = val.damGuid;
  getTableData(false);
};

/** 
 * 调用接口刷新获取方案表格数据 
 * @param refreshData 如果是刷新数据,需要更新查询列表。
*/
const getTableData = (refreshData = true) => {
  tableInfo.value.loading = true;
  getQualityList({
    pageIndex: page.value.curr, pageSize: page.value.limit,
    damGuid: page.value.damGuid
  }).then((res: any) => {
    tableInfo.value.loading = false;
    if (res === undefined) {
      return;
    }
    if (res.code == proxy.$passCode) {
      const data = res.data || {}
      tableInfo.value.data = data.records || []
      tableInfo.value.page.limit = data.pageSize
      tableInfo.value.page.curr = data.pageIndex
      tableInfo.value.page.rows = data.totalRows
    } else {
      proxy.$ElMessage.error(res.msg);
    }
  })
  if (refreshData) {
    getSearchQualityDamList();
  }
};

/** 监听处理分页事件。 */
const tablePageChange = (info) => {
  page.value.curr = Number(info.curr);
  page.value.limit = Number(info.limit);
  getTableData(false);
};

const handleCreate = () => {
  router.push({
    name: 'damQualityPlan'
  });
}

const getSearchQualityDamList = () => {
  getQualityDamList().then((res: any) => {
    if (res.code == proxy.$passCode) {
      const data = res.data || [];
      searchItemList.value[0].options = data;
    } else {
      proxy.$ElMessage.error(res.msg);
    }
  });
}

onBeforeMount(() => {
  if (!assetStore.qualityAssessRefresh) {
    getSearchQualityDamList();
  }
});

onActivated(() => {
  if (assetStore.qualityAssessRefresh) {
    page.value.curr = 1;
    getTableData();
    assetStore.setQualityAssessRefresh(false);
  }
})

</script>

<template>
  <div class="container_wrap">
    <div class="table_tool_wrap has_search">
      <Table_tools ref="serachFormRef" :searchItems="searchItemList" searchId="quality-search" @search="toSearch" />
      <div class="tools_btns">
        <el-button type="primary" @click="handleCreate">新建</el-button>
      </div>
    </div>
    <div class="table_panel_wrap">
      <Table :tableInfo="tableInfo" @tablePageChange="tablePageChange" />
    </div>
  </div>
</template>

<style lang="scss" scoped>
.table_tool_wrap {
  width: 100%;
  height: 84px !important;
  padding: 0 8px;

  :deep(.table-tools) {
    .el-select {
      width: 230px;
    }
  }

  .tools_btns {
    padding: 8px 0 0;
  }
}

.table_panel_wrap {
  width: 100%;
  height: calc(100% - 84px);
  padding: 8px 8px 0;
}
</style>