Add-citizen.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. <template>
  2. <el-dialog v-model="state.dialogVisible" draggable title="选择市民" @close="close" destroy-on-close append-to-body>
  3. <el-form :model="state.queryParams" ref="ruleFormRef" inline @submit.native.prevent>
  4. <el-form-item label="市民姓名" prop="PhoneNumber">
  5. <el-input v-model="state.queryParams.PhoneNumber" placeholder="请输入市民姓名" clearable @keyup.enter="handleQuery" />
  6. </el-form-item>
  7. <el-form-item label="联系电话" prop="Label">
  8. <el-input v-model="state.queryParams.Label" placeholder="请输入市民联系电话" clearable @keyup.enter="handleQuery" />
  9. </el-form-item>
  10. <el-form-item>
  11. <el-button type="primary" @click="handleQuery" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
  12. <el-button @click="resetQuery(ruleFormRef)" class="default-button"> <SvgIcon name="ele-Refresh" class="mr5" />重置 </el-button>
  13. </el-form-item>
  14. </el-form>
  15. <ProTable
  16. ref="proTableRef"
  17. :columns="columns"
  18. :data="state.tableData"
  19. :loading="state.loading"
  20. :total="state.total"
  21. v-model:page-index="state.queryParams.PageIndex"
  22. v-model:page-size="state.queryParams.PageSize"
  23. :tool-button="false"
  24. @updateTable="queryList"
  25. >
  26. </ProTable>
  27. <template #footer>
  28. <span class="dialog-footer">
  29. <el-button @click="closeDialog" class="default-button">取 消</el-button>
  30. <el-button type="primary" @click="onSubmit" :loading="loading" :disabled="!canChoose">确 定</el-button>
  31. </span>
  32. </template>
  33. </el-dialog>
  34. </template>
  35. <script setup lang="tsx">
  36. import { computed, nextTick, onMounted, reactive, ref } from "vue";
  37. import { ElButton, ElInput, ElMessage, FormInstance } from 'element-plus';
  38. import { citizenList } from '@/api/auxiliary/citizen';
  39. // 定义子组件向父组件传值/事件
  40. const emit = defineEmits(['selectCitizen']);
  41. // 定义变量内容
  42. const state = reactive<any>({
  43. dialogVisible: false,
  44. queryParams: {
  45. // 查询参数
  46. PageIndex: 1,
  47. PageSize: 10,
  48. PhoneNumber: null,
  49. Label: null,
  50. },
  51. tableData: [],
  52. });
  53. const ruleFormRef = ref<RefType>(null); // 表单ref
  54. /** 搜索按钮操作 */
  55. const handleQuery = () => {
  56. state.queryParams.PageIndex = 1;
  57. queryList();
  58. };
  59. // 获取列表
  60. const queryList = () => {
  61. /*state.loading = true;
  62. citizenList(state.queryParams)
  63. .then((res) => {
  64. state.loading = false;
  65. state.tableData = res.result.items ?? [];
  66. state.total = res.result.total ?? 0;
  67. })
  68. .finally(() => {
  69. state.loading = false;
  70. });*/
  71. };
  72. // 重置表单
  73. const resetQuery = (formEl: FormInstance | undefined) => {
  74. if (!formEl) return;
  75. formEl.resetFields();
  76. queryList();
  77. };
  78. const proTableRef = ref<RefType>(); // 表格ref
  79. const canChoose = computed(() => {
  80. return proTableRef.value?.selectedList.length;
  81. });
  82. // 表格配置项
  83. const columns = ref<any[]>([
  84. { type: 'selection', fixed: 'left', width: 55, align: 'center' },
  85. { prop: 'name', label: '市民姓名' },
  86. { prop: 'phoneNumber', label: '联系电话' },
  87. ]);
  88. let loading = ref<Boolean>(false); // 加载状态
  89. // 打开弹窗
  90. const openDialog = async () => {
  91. try {
  92. state.dialogVisible = true;
  93. } catch (error) {
  94. console.log(error);
  95. }
  96. };
  97. // 关闭弹窗
  98. const closeDialog = () => {
  99. state.dialogVisible = false;
  100. };
  101. const close = () => {
  102. ruleFormRef.value?.resetFields();
  103. ruleFormRef.value?.resetFields();
  104. };
  105. // 新增
  106. const onSubmit = () => {
  107. emit('selectCitizen', proTableRef.value?.selectedList);
  108. closeDialog()
  109. };
  110. onMounted(()=>{
  111. queryList();
  112. })
  113. // 暴露变量
  114. defineExpose({
  115. openDialog,
  116. closeDialog,
  117. });
  118. </script>