<!-- @format -->

<template>
  <div>
    <ns-input
      v-if="!baseStyle"
      class="ns-input-area"
      :disabled="true"
      v-model:value="itemName"
      placeholder="请选择">
      <template #addonAfter>
        <a-button type="primary" class="ns-area" style="height: 32px" @click="showModal">{{
          buttonLabel
        }}</a-button>
        <!-- <ns-button type="primary" class="ns-area" style="height: 32px" @click="showModal"
          >{{ buttonLabel }}
        </ns-button> -->
      </template>
    </ns-input>
    <span v-else @click="showModal">{{ buttonLabel }}</span>
    <ns-modal
      width="1000px"
      v-if="visible"
      v-model:visible="visible"
      :maskClosable="false"
      class="modal"
      wrapClassName="ns-modeBase"
      :title="title">
      <div class="ns-basic-modecontent">
        <!-- <h4 class="title">{{ title }}</h4> -->
        <ns-view-list-table :model="data" v-bind="tableConfig" :row-selection="rowSelection" />
      </div>
      <template #footer>
        <a-button key="back" @click="handleCancel">取消</a-button>
        <a-button
          key="submit"
          :style="{ borderColor: !ischeck ? '#dfe3e9' : '' }"
          :disabled="!ischeck"
          type="primary"
          @click="handleOk"
          >确定</a-button
        >
      </template>
    </ns-modal>
  </div>
</template>
<script lang="ts">
  import { defineComponent, reactive, ref, watch } from 'vue';
  export default defineComponent({
    name: 'NsInputModal',
    props: {
      baseStyle: {
        type: String,
        default: '',
      },
      title: {
        type: String,
        default: '',
      },
      defaultValue: {
        type: String,
        default: '',
      },
      showLabel: {
        type: String,
      },
      buttonLabel: {
        type: String,
        default: '选择',
      },
      rebackInfo: {
        type: Array,
        default: () => [],
      },
      tableConfig: {
        type: Object,
        default: () => ({}),
      },
      reName: {
        type: Array,
        default: () => [],
      },
      data: {
        type: Object,
        default: () => ({}),
      },
      formModel: {
        type: Object,
        default: () => ({}),
      },
    },
    emits: ['change', 'getItem'],
    setup(props) {
      // eslint-disable-next-line vue/no-setup-props-destructure
      const { showLabel, rebackInfo, tableConfig, data, reName } = props;
      const visible = ref(false);
      const itemName = ref('');
      const showModal = () => {
        visible.value = true;
      };
      const selectItem = ref({});
      const ischeck = ref(false);
      const handleCancel = () => {
        visible.value = false;
      };
      watch(
        () => props.defaultValue,
        (e: any) => {
          itemName.value = e;
        },
      );

      return {
        visible,
        showModal,
        // eslint-disable-next-line vue/no-dupe-keys
        showLabel,
        // eslint-disable-next-line vue/no-dupe-keys
        rebackInfo,
        // eslint-disable-next-line vue/no-dupe-keys
        data,
        // eslint-disable-next-line vue/no-dupe-keys
        tableConfig,
        // eslint-disable-next-line vue/no-dupe-keys
        reName,
        selectItem,
        ischeck,
        itemName,
        handleCancel,
        rowSelection: {
          type: 'radio',
          onSelect: (record: T, selected: Boolean) => {
            ischeck.value = true;
            selectItem.value = record;
          },
        },
      };
    },
    methods: {
      handleOk() {
        if (this.reName.length === 0) {
          this.itemName = this.selectItem[this.showLabel];
          if (this.rebackInfo.length === 0) {
            this.$emit('change', this.selectItem);
            this.$emit('getItem', this.selectItem);
          } else {
            if (this.rebackInfo.length === 1) {
              this.$emit('change', this.selectItem[this.rebackInfo[0]]);
              this.$emit('getItem', this.selectItem[this.rebackInfo[0]]);
            } else {
              let info = {};
              this.rebackInfo.forEach((item) => {
                info[item] = this.selectItem[item];
              });
              this.$emit('change', info);
              this.$emit('getItem', info);
            }
          }
        } else {
          if (this.reName.length === this.rebackInfo.length && this.reName.length > 0) {
            if (this.rebackInfo.length === 1) {
              let info = {};
              info[this.reName[0]] = this.selectItem[this.rebackInfo[0]];
              this.$emit('change', info);
              this.$emit('getItem', info);
            } else {
              let info = {};
              this.rebackInfo.forEach((item, index) => {
                info[this.reName[index]] = this.selectItem[item];
              });
              this.$emit('change', info);
              this.$emit('getItem', info);
            }
          }
        }
        this.visible = false;
        // this.$emit('ceshi', 'qaq');
        //this.$emit('change', this.itemName);
      },
    },
  });
</script>
<style lang="less" scoped>
  .ns-area:hover,
  // :focus {
  //   color: white !important;
  // }
  .ns-area {
    color: white;
  }
  :deep(.ant-input) {
    border-right: 0;
  }
  :deep(.ns-area) {
    border: 0;
  }
  .title {
    font-size: 14px;
    font-weight: bold;
  }

  :deep(.ns-line) {
    display: none;
  }
  :deep(.ant-modal-content) {
    max-width: 900px;
  }
  :deep(.ns-form-item) {
    width: 250px;
  }
  :deep(.ant-input-group-addon) {
    padding: 0 !important;
    border: 0px solid #dcdfe2 !important;
    height: 30px !important;
  }
  :deep(.ant-btn) {
    height: 30px !important;
  }
  // :deep(.ns-table-main) {
  //   padding: 0 !important;
  // }
  :deep(.ant-input-disabled) {
    color: #172e3d !important;
  }
  :deep(.ns-table-header){
    padding-left:24px;
  }
  //  :deep(.ns-table .ns-table-search) {
  //   border-bottom: none !important;
  // }
</style>