Newer
Older
dxCard-admin / src / views / monitor / datalog / DataLogCompareModal.vue
YFJ on 23 Sep 7 KB 项目推送
<!--用户选择框-->
<template>
  <div>
    <BasicModal v-bind="$attrs" @register="register" title="数据对比" width="50%" destroyOnClose :showOkBtn="false">
      <a-row :gutter="6" v-if="dataVersionList" style="margin-left: 2px">
        <span style="margin-top: 5px; margin-right: 3px; margin-left: 4px">版本对比:</span>
        <a-select placeholder="版本号" @change="handleChange1" v-model:value="params.dataId1">
          <a-select-option v-for="(log, logindex) in dataVersionList" :key="log.value" :value="log.value">
            {{ log.text }}
          </a-select-option>
        </a-select>

        <a-select placeholder="版本号" @change="handleChange2" style="padding-left: 10px" v-model:value="params.dataId2">
          <a-select-option v-for="(log, logindex) in dataVersionList" :key="log.value" :value="log.value">
            {{ log.text }}
          </a-select-option>
        </a-select>
      </a-row>
      <BasicTable
        :columns="columns"
        v-bind="getBindValue"
        :rowClassName="setDataCss"
        :striped="false"
        :showIndexColumn="false"
        :pagination="false"
        :canResize="false"
        :bordered="true"
        :dataSource="dataSource"
        :searchInfo="searchInfo"
        v-if="isUpdate"
      >
        <template #dataVersionTitle1="{ record }"> <Icon icon="icon-park-outline:grinning-face" /> 版本:{{ dataVersion1Num }} </template>
        <template #dataVersionTitle2="{ record }"> <Icon icon="icon-park-outline:grinning-face" /> 版本:{{ dataVersion2Num }} </template>
        <template #avatarslot="{ record }">
          <div class="anty-img-wrap" v-if="record.dataVersion1 != record.dataVersion2">
            <Icon icon="mdi:arrow-right-bold" style="color: red"></Icon>
          </div>
        </template>
      </BasicTable>
    </BasicModal>
  </div>
</template>
<script lang="ts">
  import { defineComponent, unref, ref, reactive, watch } from 'vue';
  import { BasicModal, useModalInner } from '/@/components/Modal';
  import { queryCompareList, queryDataVerList } from './datalog.api';
  import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
  import { useAttrs } from '/@/hooks/core/useAttrs';
  import { selectProps } from '/@/components/Form/src/jeecg/props/props';
  import { useMessage } from '/@/hooks/web/useMessage';

  export default defineComponent({
    name: 'DataLogCompareModal',
    components: {
      //此处需要异步加载BasicTable
      BasicModal,
      BasicTable: createAsyncComponent(() => import('/@/components/Table/src/BasicTable.vue'), { loading: true }),
    },
    props: {
      ...selectProps,
    },
    emits: ['register', 'btnOk'],
    setup(props, { emit, refs }) {
      const { createMessage } = useMessage();
      const attrs = useAttrs();
      const getBindValue = Object.assign({}, unref(props), unref(attrs));
      const dataSource = ref([]);
      const dataVersion1Num = ref('');
      const dataVersion2Num = ref('');
      const isUpdate = ref(true);
      const searchInfo = {};
      const dataId1 = ref('');
      const dataId2 = ref('');
      const dataId = ref('');
      const dataTable1 = ref('');
      const dataID3 = ref('');
      const dataTable = ref('');
      const confirmLoading = ref(false);
      const dataVersionList = ref([]);
      let params = reactive({ dataId1: '', dataId2: '' });
      let dataLog = reactive({});
      const [register, { setModalProps, closeModal }] = useModalInner(async (data) => {
        isUpdate.value = !!data?.isUpdate;
        if (unref(isUpdate)) {
          let checkedRows = data.selectedRows;
          dataTable.value = checkedRows[0].dataTable;
          dataId.value = checkedRows[0].dataId;
          dataId1.value = checkedRows[0].id;
          dataId2.value = checkedRows[1].id;
          params.dataId1 = dataId1.value;
          params.dataId2 = dataId2.value;
          await initDataVersionList();
          await initTableData();
        }
      });

      //定义表格列
      const columns = [
        {
          title: '字段名',
          dataIndex: 'code',
          width: 20,
          align: 'left',
        },
        {
          dataIndex: 'dataVersion1',
          align: 'left',
          width: 60,
          slots: { title: 'dataVersionTitle1' },
        },
        {
          title: '',
          dataIndex: 'imgshow',
          align: 'center',
          slots: { customRender: 'avatarslot' },
          width: 5,
        },
        {
          align: 'left',
          dataIndex: 'dataVersion2',
          width: 60,
          filters: [],
          filterMultiple: false,
          slots: { title: 'dataVersionTitle2' },
        },
      ];
      async function initTableData() {
        console.info('params', params);
        queryCompareList(unref(params)).then((res) => {
          console.info('test', res);
          dataVersion1Num.value = res[0].dataVersion;
          dataVersion2Num.value = res[1].dataVersion;
          let json1 = JSON.parse(res[0].dataContent);
          let json2 = JSON.parse(res[1].dataContent);
          let data = [];
          for (var item1 in json1) {
            for (var item2 in json2) {
              if (item1 == item2) {
                data.push({
                  code: item1,
                  imgshow: '',
                  dataVersion1: json1[item1],
                  dataVersion2: json2[item2],
                });
              }
            }
          }
          dataSource.value = data;
        });
      }
      function handleChange1(value) {
        if (params.dataId2 == value) {
          createMessage.warning('相同版本号不能比较');
          return;
        }
        params.dataId1 = value;
        initTableData();
      }
      function handleChange2(value) {
        if (params.dataId1 == value) {
          createMessage.warning('相同版本号不能比较');
          return;
        }
        params.dataId2 = value;
        initTableData();
      }
      function setDataCss(record) {
        let className = 'trcolor';
        const dataVersion1 = record.dataVersion1;
        const dataVersion2 = record.dataVersion2;
        if (dataVersion1 != dataVersion2) {
          return className;
        }
      }
      async function initDataVersionList() {
        queryDataVerList({ dataTable: dataTable.value, dataId: dataId.value }).then((res) => {
          dataVersionList.value = res.map((value, key, arr) => {
            let item = {};
            item['text'] = value['dataVersion'];
            item['value'] = value['id'];
            return item;
          });
        });
      }

      return {
        //config,
        searchInfo,
        dataSource,
        setDataCss,
        isUpdate,
        dataVersionList,
        dataVersion1Num,
        dataVersion2Num,
        queryCompareList,
        initDataVersionList,
        register,
        handleChange1,
        handleChange2,
        params,
        getBindValue,
        columns,
      };
    },
  });
</script>
<style scoped>
  .anty-img-wrap {
    height: 25px;
    position: relative;
  }

  .anty-img-wrap > img {
    max-height: 100%;
  }

  .marginCss {
    margin-top: 20px;
  }
</style>