changeAdmin.vue 3.99 KB
<script setup lang="ts">
import {
  reactive,
  onMounted,
  ref,
  getCurrentInstance,
  defineProps,
  defineEmits,
  watchEffect,
} from "vue";
import { getTableList } from "@/api/housekeeper/buildinMganager.ts";
import { addOrUpBuildingHouseKeeper } from "@/api/community/housekeeper.ts";
import Pagination from "@/components/Pagination/index.vue";

let instance: ComponentInternalInstance | null = getCurrentInstance(); //获取app实例
const multipleTableRef = ref<InstanceType<typeof ElTable>>();
// 声明props
const props = defineProps({
  buildingId: {
    type: Number,
    default: null,
  },
  originalIds: {
    type: Number,
    default: null,
  },
});

// 数据筛选
const searchData = reactive({
  condition: "",
  page: 1,
  pageSize: 10,
});
// 展示
const data = reactive({
  total: 0,
  tableList: [],
  loading: false,
  options: [
    { label: "选举", value: 0 },
    { label: "派驻", value: 1 },
  ],
  selectList: [],
});

/**
 * 列表查询
 */
const search = (): void => {
  data.loading = true;
  getTableList(searchData)
    .then((res) => {
      data.tableList = res.data.data.list;
      data.total = res.data.data.total;
      data.loading = false;
    })
    .catch((err) => {
      console.log(err);
      data.loading = false;
    });
};

const emit = defineEmits<{
  (e: "success"): void;
}>();
/**
 * 表格选择回调
 */
const handleSelectionChange = (val: Array) => {
  // console.log(val);
  data.selectList = val.map((val: any) => {
    return val.id;
  });
};

/**
 * 数据提交
 */
const submit = () => {
  if (data.selectList.length == 0) {
    instance?.proxy?.$message.error("请选择新的楼管");
  } else if (data.selectList.length > 1) {
    instance?.proxy?.$message.error("只能选择一个楼管");
  } else {
    instance?.proxy?.$messageBox
      .confirm("确认要进行此操作?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
      })
      .then(() => {
        addOrUpBuildingHouseKeeper({
          buildingId: props.buildingId,
          houseKeeperIds: data.selectList[0],
          originalIds: props.originalIds,
        }).then((res) => {
          multipleTableRef.value!.clearSelection();
          data.selectList = [];
          emit("success");
        });
      })
      .catch((err) => {});
  }
};
watchEffect(() => {
  if (props.buildingId) {
    search();
  }
});
// onMounted(() => {
//   search();
// });
</script>
<template>
  <div>
    <!-- 搜索 -->
    <el-form :inline="true" :model="searchData" >
      <el-form-item>
        <el-input
          style="width: 280px"
          placeholder="请输入姓名/手机号/身份证号"
          v-model="searchData.condition"
          clearable
        ></el-input>
      </el-form-item>
      <el-form-item
        ><el-button type="primary" @click="search"
          >查询</el-button
        ></el-form-item
      >
      <el-form-item
        ><el-button type="primary" @click="submit"
          >确认选择</el-button
        ></el-form-item
      >
    </el-form>

    <!-- 表格 -->
    <el-table
      border
      :data="data.tableList"
      @selection-change="handleSelectionChange"
      ref="multipleTableRef"
      v-loading="data.loading"
    >
      <el-table-column type="selection" width="55"/>
      <el-table-column label="姓名" prop="name"></el-table-column>
      <el-table-column label="手机号" prop="mobile"></el-table-column>
      <el-table-column label="身份证号" prop="idcard"></el-table-column>
      <el-table-column label="类型">
        <template #default="scope">
          <span>{{ scope.row.type == 0 ? "选举" : "派驻" }}</span></template
        >
      </el-table-column>
    </el-table>

    <!-- 分页 -->
    <Pagination
      v-if="data.total > 0"
      :total="data.total"
      v-model:currentPage="searchData.page"
      v-model:pageSize="searchData.pageSize"
      @pageChange="search"
    ></Pagination>
  </div>
</template>

<style scoped lang="scss">
 :deep(.has-gutter) {
  .el-checkbox {
    display: none;
  }
}
</style>