addDataConversionRuleModal.vue 3.52 KB
<template>
  <BasicModal width="40%" v-bind="$attrs" @register="registerModal" @ok="handleSubmit">
    <template #title>
      <span style="font-size: 23px; font-weight: lighter">新建规则</span>
    </template>
    <List>
      <Row :gutter="16">
        <template v-for="item in cardRuleList" :key="item.title">
          <Col :span="12">
            <ListItem>
              <Card :hoverable="true" class="sceneSelectionCard" @click="handleNewModal(item.type)">
                <div class="sceneSelectionTitle">
                  {{ item.title }}
                </div>
                <div class="sceneSelectionDescription">
                  {{ item.description }}
                </div>
              </Card>
            </ListItem>
          </Col>
        </template>
      </Row>
    </List>
  </BasicModal>
  <NewFieldRuleModal @register="registerNewFieldRuleModal" />
  <FieldNameMappingRuleModal @register="registerFieldNameMappingRuleModal" />
  <FieldTypeMappingRuleModal @register="registerFieldTypeMappingRuleModal" />
  <SingleTableFieldMappingRuleModal @register="registerSingleTableFieldMappingRuleModal" />
</template>
<script lang="ts" setup>
  import { onMounted } from 'vue';
  import Icon from '@/components/Icon/Icon.vue';
  import { BasicModal, useModal, useModalInner } from '@/components/Modal';
  import { cardRuleList } from './mock';
  import { Card, Row, Col, List, ListItem } from 'ant-design-vue';
  import NewFieldRuleModal from './newFieldRuleModal.vue';
  import FieldNameMappingRuleModal from './fieldNameMappingRuleModal.vue';
  import FieldTypeMappingRuleModal from './fieldTypeMappingRuleModal.vue';
  import SingleTableFieldMappingRuleModal from './singleTableFieldMappingRuleModal.vue';

  const emit = defineEmits(['register']);

  const [registerModal, { setModalProps, closeModal }] = useModalInner(async () => {});

  const [registerNewFieldRuleModal, { openModal: openNewFieldRuleModal }] = useModal();
  const [registerFieldNameMappingRuleModal, { openModal: openFieldNameMappingRuleModal }] = useModal();
  const [registerFieldTypeMappingRuleModal, { openModal: openFieldTypeMappingRuleModal }] = useModal();
  const [registerSingleTableFieldMappingRuleModal, { openModal: openSingleTableFieldMappingRuleModal }] = useModal();

  function handleNewModal(type) {
    console.log(type);
    switch (type) {
      case 'newFieldRule':
        console.log('Handling new field rule');
        openNewFieldRuleModal(true);
        break;
      case 'fieldNameMappingRule':
        console.log('Handling field name mapping rule');
        openFieldNameMappingRuleModal(true);
        break;
      case 'fieldTypeMappingRule':
        console.log('Handling field type mapping rule');
        openFieldTypeMappingRuleModal(true);
        break;
      case 'singleTableFieldMappingRule':
        console.log('Handling single table field mapping rule');
        openSingleTableFieldMappingRuleModal(true);
        break;
      default:
        console.log('Unknown rule type');
    }
  }

  function handleSubmit() {
    closeModal();
  }

  onMounted(() => {
    setModalProps({ canFullscreen: false, okText: '下一步' });
  });
</script>
<style lang="scss" scoped>
  .sceneSelectionCard {
    height: 170px;
    flex-direction: column;
  }

  .sceneSelectionIcon {
    font-size: 40px !important;
    margin-bottom: 16px;
  }

  .sceneSelectionTitle {
    font-size: 18px;
    font-weight: bold;
    margin-bottom: 8px;
  }

  .sceneSelectionDescription {
    font-size: 14px;
    color: #78787c;
    text-align: left;
    line-height: 1.2;
  }
</style>