peopleManage.vue 8.25 KB
<template>
  <el-card class="container">
    <div class="title">
      <div class="add_btn" @click="addPeople">
        {{ languageFormat(language, "新增", "Add") }}
      </div>
      <span>
        {{ languageFormat(language, "观影人管理", "Viewers") }}
      </span>

      <span class="fr" style="cursor: pointer" @click="$router.go(-1)">
        {{ language == 0 ? '返回' : 'Back' }}
      </span>
    </div>
    <div class="content">
      <div class="people_box">
        <div v-for="(it, index) in personnelList" :key="index" class="people_item">
          <div class="name">{{ it.name }}</div>
          <div class="idcard">
            {{ languageFormat(language, "证件号", "ID number") }}{{ it.idCard }}
          </div>
          <div class="btn" @click="deletePeople(it.id)">
            {{ languageFormat(language, "删除", "delete") }}
          </div>
        </div>
      </div>
    </div>

    <el-dialog
      v-model="show"
      :title="language==0?'新增观影人':'New moviegoers'"
      center
      width="700"
    >
      <el-form
        ref="formRef" :model="form" :rules="rules" label-width="100px" size="large"
        style="margin: 80px"
      >
        <el-form-item :label="language==0?'姓名':'name'" prop="name" required>
          <el-input v-model="form.name" :placeholder="language==0?'请输入':'Please input'" />
        </el-form-item>
        <el-form-item :label="language==0?'证件类型':'ID Type'" prop="idcType" required>
          <el-select v-model="form.idcType" :placeholder="language==0?'请选择':'Please choose'">
            <el-option :label="language==0?'身份证':'Identity card'" value="0" />
            <el-option :label="language==0?'护照':'Passport'" value="1" />
            <el-option :label="language==0?'其他':'Other'" value="2" />
          </el-select>
        </el-form-item>
        <el-form-item :label="language==0?'证件号':'ID number'" prop="idCard" required>
          <el-input v-model="form.idCard" :placeholder="language==0?'请输入证件号':'Please enter the ID after ah'" />
        </el-form-item>
      </el-form>

      <span class="dialog-footer">
        <div style="text-align: center">
          <el-button class="can_pay" @click="show = false">{{ language == 0 ? '取 消' : 'cancel' }}</el-button>
          <el-button class="pay" type="primary" @click="submit">{{ language == 0 ? '确 定' : 'confirm' }}</el-button>
        </div>
      </span>
    </el-dialog>
  </el-card>

</template>


<script setup>
import { ref, computed } from 'vue'
import { aadCustomer, delCustomer, getMyFriends } from '@/apiPc/booking'
import { ElMessage, ElMessageBox } from 'element-plus'
import { languageFormat } from '@/viewsPc/seat/utils/language.js'
import useUserStore from '/@/store/modules/user'
import { useStorage } from '@vueuse/core/index'
import { triggerLanguage } from '@/utils/ruoyi'
import { useRoute } from 'vue-router'

const user = computed(() => useUserStore().user)
const useStore = useUserStore()
const language = useStorage('language', 0)
const route = useRoute()
const personnelList = ref([])
const show = ref(false)
const form = ref({})
const formRef = ref(null)
const rules = ref({
  name: [
    { required: true, message: triggerLanguage(language.value, '请输入姓名', 'Please input'), trigger: 'blur' }
  ],
  idCard: [
    {
      required: true,
      message: triggerLanguage(language.value, '请输入证件号', 'Please enter the ID after ah'),
      trigger: 'blur'
    }
  ],
  idcType: [
    { required: true, message: triggerLanguage(language.value, '请选择证件类型', 'Please choose'), trigger: 'blur' }
  ]
})

customerList()

async function customerList() {
  const res = await getMyFriends()
  personnelList.value = res.data
}

function addPeople() {
  show.value = true
  formRef.value?.resetFields()
}

function submit() {
  if (!user.value) {
    useStore().setVisitor()
    return
  }

  formRef.value.validate((valid) => {
    if (valid) {
      aadCustomer(form.value).then(res => {
        if (res.data == -100) {
          ElMessageBox.confirm(language.value == 0 ? '该观影人已存在' : 'The viewer already exists', language.value == 0 ? '提示' : 'Reminder', {
            confirmButtonText: language.value == 0 ? '确认' : 'confirm',
            cancelButtonText: language.value == 0 ? '取消' : 'cancel',
            type: 'warning',
            draggable: true
          })
        } else if (res.data == -101) {
          return ElMessageBox.confirm(language.value == 0 ? '该观影人实名认证未通过' : 'The real name authentication of the moviegoer failed', language.value == 0 ? '提示' : 'Reminder', {
            confirmButtonText: language.value == 0 ? '确认' : 'confirm',
            cancelButtonText: language.value == 0 ? '取消' : 'cancel',
            type: 'warning',
            draggable: true
          })
        } else {
          show.value = false
          customerList()
          ElMessage.success(language.value == 0 ? '添加成功' : 'successfully added')
        }
      })
    } else {
      return ElMessage.waiting(language.value == 0 ? '请完善信息' : 'Please complete the information')
    }
  })
}

async function deletePeople(v) {
  await ElMessageBox.confirm(
    languageFormat(language.value, '确认删除该观影人吗?', 'Are you sure to delete this viewer?'),
    languageFormat(language.value, '提示', 'Reminder'),
    {
      confirmButtonText: languageFormat(language.value, '确认', 'confirm'),
      cancelButtonText: languageFormat(language.value, '取消', 'cancel'),
      type: 'warning',
      draggable: true
    }
  )
    .then(async() => {
      const res = await delCustomer(v)
      if (res.code === 200) {
        ElMessage.success('删除成功')
        await customerList()
      }
    })
}
</script>


<style lang="scss" scoped>
div {
  box-sizing: border-box;
}

:deep(.el-dialog) {
  padding: 0;

  .el-dialog__header {
    height: 50px;
    line-height: 50px;
    background: linear-gradient(270deg, #493ceb 0%, #8623fc 100%);

    .el-dialog__title {
      color: #fff;
    }
  }
}

.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;
}

.container {
  //padding: 20px 0;
  //:deep(.el-card__body){
  //  padding: 0;
  //}
  width: 1200px;
  margin: 20px auto;

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

    .add_btn {
      position: absolute;
      left: 20px;
      top: 50%;
      transform: translateY(-50%);
      width: 68px;
      height: 24px;
      border-radius: 12px;
      border: 1px solid #ffffff;
      font-weight: 400;
      font-size: 12px;
      color: #ffffff;
      text-align: center;
      line-height: 24px;
      box-sizing: border-box;
      user-select: none;
      cursor: pointer;
    }
  }

  .content {
    min-height: 590px;
    background-color: #fff;
    box-shadow: 0px 0px 46px 0px rgba(1, 16, 64, 0.08);
    padding: 20px;

    .people_box {
      display: flex;
      flex-wrap: wrap;
      gap: 20px;

      .people_item {
        width: 275px;
        height: 137px;
        background: #ffffff;
        border: 1px solid #dcdfe6;
        padding: 16px;

        .name {
          font-weight: 600;
          font-size: 16px;
          color: #2d373f;
          line-height: 22px;
        }

        .idcard {
          font-size: 16px;
          color: #95a1a6;
          line-height: 22px;
          margin-top: 12px;
          margin-bottom: 17px;
        }

        .btn {
          width: 69px;
          height: 32px;
          background: #e7e6ff;
          font-weight: 400;
          font-size: 16px;
          color: #493ceb;
          line-height: 32px;
          text-align: center;
          cursor: pointer;
          user-select: none;
        }
      }
    }
  }
}

@media screen and (max-width: 768px) {
  .container {
    width: 100%;
  }
}
</style>