index.vue 7.76 KB
<script setup lang="ts">
import { reactive, ref, onMounted } from "vue";
import { userList, userPwd, userStatus } from "@/api/user/user";
import { parseTime } from "@/utils/tool";
// import * as store from "@/pinia";
import { useLoginStore } from '@/pinia/login';
import Pagination from "@/components/Pagination/index.vue";
import { ElMessageBox, ElMessage } from "element-plus";
interface Form {
  page: number;
  pageSize: number;
  userName?: string;
  cellphone?: string;
}
interface Params {
  total: number;
  query: Form;
}
interface Data {
  loading: boolean;
  list: any[] | null;
  params: Params;
}
let data = reactive({
  list: [],
  loading: false,
  params: {
    total: 0,
    query: {
      page: 1,
      pageSize: 10,
      userName: "",
      cellphone: "",
    },
  },
});
let asyncData = reactive({
  userInfo: null,
  userType: null,
});
/**
 * 列表
 */
const getList = async () => {
  data.loading = true;
  try {
    const res = await userList(data.params.query);
    data.list = res?.data?.data?.list;
    data.params.total = res?.data?.data?.total;
  } catch (e) {
    console.log(e);
  } finally {
    data.loading = false;
  }
};
/**
 * 删除
 * @param {object} obj 要删除的数据对象
 */
const handleDelete = (obj: any, type: string) => {
  ElMessageBox.confirm(`确认${type? '初始化密码': '删除'}吗?`, "警告", {
    confirmButtonText: "确认",
    cancelButtonText: "取消",
    type: "warning",
  })
    .then(async () => {
      try {
        let res
        if(type) {
          handleUpdate(obj, type)
        } else {
          handleUpdate(obj, 'delete')
        }
      } catch (e) {
        console.log(e);
      }
    })
    .catch(() => {
      console.log("取消");
    });
};
/**
 * 修改
 * @param {object} obj 一条数据对象
 * @param {string} type 修改操作的类型,pwd修改密码,status修改状态,delete删除
 */
const handleUpdate = async (obj: any, type: string) => {
  try {
    let res;
    if (type === "status") {
      res = await userStatus({
        userId: obj.id,
        status: obj.status ? 0 : 1,
      });
    } else if (type === "pwd") {
      res = await userPwd({
        userId: obj.id,
      });
    } else if (type === 'delete') {
      res = await userStatus({
        userId: obj.id,
        status: 2
      })
    }
    if (res?.data) {
      ElMessage({
        type: "success",
        message: "操作成功",
      });
      getList();
    } else {
      ElMessage({
        type: "error",
        message: "操作失败",
      });
    }
  } catch (e) {
    console.log(e);
  }
};
/**
 * 状态值
 * @enum {number}
 */
enum statusEnum {
  "禁用" = 0,
  "启用",
}
onMounted(() => {
  // asyncData.userInfo = store.family.loginStore().id;
  // asyncData.userType = store.family.loginStore().organizationType;
  asyncData.userInfo = useLoginStore()?.getId;
  asyncData.userType = useLoginStore()?.organizationType;
  getList();
});
</script>

<template>
  <div class="page-container">
    <h1>用户列表</h1>
    <el-row style="padding-bottom: 20px">
      <el-form :inline="true" label-width="70px" @submit.native.prevent>
        <el-form-item label="用户名">
          <el-input
            v-model.trim="data.params.query.userName"
            placeholder="请填写用户名"
            maxlength="15"
            @change="getList"
          />
        </el-form-item>
        <el-form-item label="手机号">
          <el-input
            v-model.trim="data.params.query.cellphone"
            placeholder="请填写用户手机号"
            maxlength="15"
            @change="getList"
          />
        </el-form-item>
        <el-form-item>
          <el-button type="primary" @click="getList">查询</el-button>
          <el-button type="primary">
            <router-link to="/user/edit">新增用户</router-link>
          </el-button>
        </el-form-item>
      </el-form>
    </el-row>
    <el-table
      :data="data.list"
      style="width: 100%"
      border
      v-loading="data.loading"
      align="center"
      element-loading-text="拼命加载中"
    >
      <el-table-column prop="id" label="ID" align="center"></el-table-column>
      <el-table-column prop="userName" label="用户名" align="center">
      </el-table-column>
      <el-table-column prop="cellphone" label="手机号" align="center">
      </el-table-column>
      <el-table-column prop="roleList" label="角色" align="center">
        <template #default="scope">
          {{ scope.row.roleList.map((i) => i.roleName).join(",") }}
        </template>
      </el-table-column>
      <el-table-column prop="createTime" label="注册时间" align="center">
        <template #default="scope">
          {{ parseTime(new Date(scope.row.createTime).getTime()) }}
        </template>
      </el-table-column>
      <el-table-column prop="status" label="状态" align="center">
        <template #default="scope">
          {{ statusEnum[scope.row.status] }}
        </template>
      </el-table-column>
      <el-table-column label="操作" align="center">
        <template #default="scope">
          <template v-if="~~asyncData.userInfo === 1">
            <!-- 超管可以做所有操作 -->
            <el-button type="text"
              ><router-link :to="{ path: '/user/edit', query: scope.row }"
                >编辑</router-link
              ></el-button
            >
            <el-button type="text" @click="handleUpdate(scope.row, 'status')">{{
              scope.row.status ? "禁用" : "启用"
            }}</el-button>
            <el-button type="text" @click="handleDelete(scope.row, 'pwd')"
              >初始密码</el-button
            >
            <el-button type="text"
              ><router-link
                :to="{ path: '/user/role', query: { id: scope.row.id } }"
                >角色</router-link
              ></el-button
            >
            <el-button type="text" @click="handleDelete(scope.row)"
              >删除</el-button
            >
          </template>
          <template
            v-else-if="
              [
                'PROPERTY_ADMIN',
                'BUSINESS_ADMIN',
                'PUBLIC_BENEFIT_ADMIN',
              ].includes(scope.row.roleList.map((i) => i.code).join(','))
            "
          >
            <!-- 商务管理员 物业管理员 公益管理员 -->
            <template v-if="~~scope.row.id === ~~asyncData.userInfo">
              <!-- 当前登录的人是三种管理员只能初始自己的密码, -->
              <el-button type="text" @click="handleDelete(scope.row, 'pwd')"
                >初始密码</el-button
              >
            </template>
          </template>
          <template v-else>
            <!-- 不是超管,不是三种管理员,随意操作 -->
            <el-button type="text"
              ><router-link :to="{ path: '/user/edit', query: scope.row }"
                >编辑</router-link
              ></el-button
            >
            <el-button type="text" @click="handleUpdate(scope.row, 'status')">{{
              scope.row.status ? "禁用" : "启用"
            }}</el-button>
            <el-button type="text" @click="handleDelete(scope.row, 'pwd')"
              >初始密码</el-button
            >
            <el-button type="text"
              ><router-link
                :to="{ path: '/user/role', query: { id: scope.row.id } }"
                >角色</router-link
              ></el-button
            >
            <el-button type="text" @click="handleDelete(scope.row)"
              >删除</el-button
            >
          </template>
        </template>
      </el-table-column>
    </el-table>
    <Pagination
      :total="data.params.total"
      v-model:currentPage="data.params.query.page"
      v-model:pageSize="data.params.query.pageSize"
      @pageChange="getList"
    ></Pagination>
  </div>
</template>