SchemeB.vue 4.34 KB
<template>
  <div class="flex flex-col h-full bg-gray-50">
    <!-- Header -->
    <div class="flex justify-between items-center px-5 py-5 bg-white rounded-t-xl">
      <span class="text-lg font-normal text-gray-900">保险计划书申请</span>
      <IconFont name="close" size="16" color="#9CA3AF" @click="close" />
    </div>

    <!-- Scrollable Content -->
    <div class="flex-1 overflow-y-auto p-4">
      <div class="bg-white rounded-xl p-5 shadow-sm">
        <!-- 币种 -->
        <div class="flex justify-between items-start mb-5">
          <span class="text-sm text-gray-600 mt-1.5">币种</span>
          <div class="bg-blue-50 rounded-md px-3 py-1.5">
            <span class="text-sm text-blue-600">美元保单</span>
          </div>
        </div>

        <!-- 计划 -->
        <div class="flex justify-between items-start mb-5">
          <span class="text-sm text-gray-600 mt-1.5">计划</span>
          <div class="bg-blue-50 rounded-md px-3 py-1.5">
            <span class="text-sm text-blue-600">基础情景</span>
          </div>
        </div>

        <!-- 附加计划 -->
        <div class="mb-5">
          <span class="text-base text-gray-900">附加计划</span>
        </div>

        <!-- 性别 -->
        <div class="text-sm text-gray-600 mb-2">性别</div>
        <nut-radio-group v-model="form.gender" direction="horizontal" class="mb-4">
          <nut-radio label="female" class="mr-8">女</nut-radio>
          <nut-radio label="male">男</nut-radio>
        </nut-radio-group>

        <!-- 年龄 -->
        <div class="text-sm text-gray-600 mb-2">年龄</div>
        <div class="border border-gray-200 rounded-lg mb-4 overflow-hidden">
          <nut-input
            v-model="form.age"
            type="digit"
            placeholder="请输入年龄"
            class="!p-0 !bg-transparent !text-sm !text-gray-900"
            :border="false"
          />
        </div>

        <!-- 保险期间 -->
        <div class="flex justify-between items-start mb-5">
          <span class="text-sm text-gray-600 mt-1.5">保险期间</span>
          <div class="bg-blue-50 rounded-md px-3 py-1.5">
            <span class="text-sm text-blue-600">终身</span>
          </div>
        </div>

        <!-- 交费期间 -->
        <div class="text-sm text-gray-600 mb-3">交费期间</div>
        <nut-radio-group v-model="form.paymentPeriod" direction="horizontal" class="mb-4">
          <nut-radio
            v-for="period in paymentPeriods"
            :key="period"
            :label="period"
            class="mr-6"
          >
            {{ period }}
          </nut-radio>
        </nut-radio-group>

        <!-- 年交保费 -->
        <div class="text-sm text-gray-600 mb-2">年交保费</div>
        <div class="border border-gray-200 rounded-lg mb-4 flex items-center overflow-hidden">
          <nut-input
            v-model="form.premium"
            type="digit"
            placeholder="请输入保费"
            class="!p-0 !bg-transparent flex-1 !text-sm !text-gray-900"
            :border="false"
          />
          <span class="text-sm text-gray-500 shrink-0 ml-2 mr-5">美元</span>
        </div>
      </div>
    </div>

    <!-- Footer Buttons -->
    <div class="p-4 pt-2 pb-8 flex justify-between gap-4 bg-gray-50">
      <div class="flex-1 py-3 text-center border border-blue-600 text-blue-600 rounded-lg text-base bg-white"
        @click="close">
        取消
      </div>
      <div class="flex-1 py-3 text-center bg-blue-600 text-white rounded-lg text-base" @click="submit">
        提交申请
      </div>
    </div>
  </div>
</template>

<script setup>
/**
 * @description 录入计划书 - 方案B 内容组件
 * @emits close - 关闭弹窗事件
 * @emits submit - 提交事件,携带表单数据
 */
import { reactive, defineEmits } from 'vue';

const emit = defineEmits(['close', 'submit']);

const form = reactive({
  currency: '美元保单',
  plan: '基础情景',
  gender: 'female',
  age: '30',
  insurancePeriod: '终身',
  paymentPeriod: '10年交',
  premium: '100000',
});

const paymentPeriods = ['10年交', '3年交', '5年交', '2年交'];

const close = () => {
  emit('close');
};

const submit = () => {
  console.log('SchemeB Submit:', form);
  emit('submit', form);
};
</script>

<style lang="less" scoped>
:deep(.nut-input) {
  padding: 0;
  background: transparent;
  border-radius: inherit;
}
</style>