add-watch-people.vue 3.33 KB
<script setup>
import { ElMessage } from "element-plus";
import { addViewPeople } from "./api/index.js";

const router = useRouter();

const people = reactive({
  form: {
    name: "",
    idCard: "",
  },
  type: "身份证",
  onConfirm() {
    if (!people.form.name)
      return ElMessage({ type: "warning", message: "请输入姓名" });
    if (!people.form.idCard)
      return ElMessage({ type: "warning", message: "请输入证件号" });

    // 使用正则验证身份证号码格式
    const idCardRegex =
      /^[1-9]\d{5}(19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[\dXx]$/;
    if (!idCardRegex.test(people.form.idCard))
      return ElMessage({ type: "warning", message: "身份证号格式不正确" });

    addViewPeople(people.form).then((res) => {
      ElMessage({ type: "success", message: "操作成功" });
      router.go(-2);
    });
  },
});
</script>

<template>
  <div class="container">
    <div class="title">新增观影人</div>
    <div class="content">
      <div class="form-item">
        <div>
          <div class="label">姓名</div>
          <el-input
            v-model="people.form.name"
            style="width: 570px"
            placeholder="请输入姓名"
          />
        </div>
        <div>
          <div class="label">证件类型</div>
          <el-input
            v-model="people.type"
            style="width: 570px"
            placeholder="Please input"
            readonly
          />
        </div>
      </div>
      <div class="form-item">
        <div>
          <div class="label">身份证号</div>
          <el-input
            v-model="people.form.idCard"
            style="width: 570px"
            placeholder="请输入身份证号"
          />
        </div>
      </div>
    </div>

    <div class="footer">
      <div class="can_pay">取消</div>
      <div class="pay" @click="people.onConfirm()">确认</div>
    </div>
  </div>
</template>

<style scoped lang="scss">
div {
  box-sizing: border-box;
}
.container {
  padding: 20px 0;
  width: 1200px;
  margin: 0 auto;

  .title {
    padding: 11px;
    text-align: center;
    background: linear-gradient(270deg, #493ceb 0%, #8623fc 100%);
    font-size: 18px;
    color: #ffffff;
  }

  .content {
    padding: 46px 20px 24px;
    background-color: #fff;
    :deep(.el-input) {
      height: 48px;
      border-radius: 24px !important;
    }
    .form-item {
      display: flex;
      gap: 20px;
      margin-bottom: 36px;
      &:last-child {
        margin: 0;
      }
      .label {
        font-size: 18px;
        color: #333333;
        margin-bottom: 16px;
      }
    }
  }
  .footer {
    display: flex;
    justify-content: center;
    align-items: center;
    gap: 20px;
    height: 70px;
    background-color: #fff;
    margin-top: 12px;
    .pay {
      width: 200px;
      height: 40px;
      background: linear-gradient(270deg, #493ceb 0%, #8623fc 100%);
      border-radius: 20px;
      font-weight: 500;
      font-size: 16px;
      color: #ffffff;
      line-height: 40px;
      text-align: center;
      cursor: pointer;
    }
    .can_pay {
      width: 200px;
      height: 40px;
      background: #f6f6f6;
      border-radius: 20px;
      font-weight: 500;
      font-size: 16px;
      color: #999;
      line-height: 40px;
      text-align: center;
      box-sizing: border-box;
      cursor: pointer;
    }
  }
}
</style>