people-manage.vue 3.87 KB
<script setup>
import { deleteViewPeople, viewPeopleList } from "./api/index.js";
import { ElMessageBox, ElMessage } from "element-plus";
import { languageFormat } from "./utils/language.js";
import { useStorage } from "@vueuse/core/index";
const language = useStorage("language", 0);

const audience = reactive({
  data: [],
  fetchData() {
    viewPeopleList().then((res) => {
      audience.data = res.data;
    });
  },

  deletePeople(id) {
    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(() => {
        deleteViewPeople({ id }).then(() => {
          audience.fetchData();
          ElMessage({
            type: "success",
            message: languageFormat(
              language.value,
              "操作成功",
              "Operate successfully"
            ),
          });
        });
      })
      .catch(() => {});
  },
});

audience.fetchData();
</script>

<template>
  <div class="container">
    <div class="title">
      <div
        class="add_btn"
        @click="$router.push({ path: '/seat/add_watch_people' })"
      >
        {{ languageFormat(language, "新增", "Add") }}
      </div>
      {{ languageFormat(language, "观影人管理", "Viewers") }}
    </div>
    <div class="content">
      <div class="people_box">
        <div
          v-for="(it, index) in audience.data"
          :key="index"
          class="people_item"
        >
          <div class="name">{{ it.name }}</div>
          <div class="idcard">
            {{ languageFormat(language, "身份证", "Identity Card") }}{{
              it.idCard
            }}
          </div>
          <div class="btn" @click="audience.deletePeople(it.id)">
            {{ languageFormat(language, "删除", "delete") }}
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

<style scoped lang="scss">
div {
  box-sizing: border-box;
}
.container {
  padding: 20px 0;
  width: 1200px;
  margin: 0 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;
        }
      }
    }
  }
}
</style>