index.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <template>
  2. <div class="container">
  3. <div class="head-title">
  4. <span> {{ route.meta.title }} </span>
  5. <a-button type="primary" size="mini" @click="showAddForm">{{
  6. $t("form.Add")
  7. }}</a-button>
  8. </div>
  9. <find-head :list="findConfig" @onSearch="evSearch" />
  10. <a-table :scroll="{ x: '120%' }" :columns="columns" :data="tableData" >
  11. <template #id="{ record }">
  12. <a
  13. href="javascript:;"
  14. class="a-link"
  15. style="margin-right: 1rem"
  16. @click="evEdit(record)"
  17. >{{$t('form.Edit')}}</a
  18. >
  19. <a-popconfirm
  20. :content="$t('form.DeleteConfirm')"
  21. :ok-text="$t('form.Confirm')"
  22. :cancel-text="$t('form.Cancel')"
  23. @ok="evDelete(record.id)"
  24. >
  25. <a href="javascript:;" class="a-link">{{$t('form.Delete')}}</a>
  26. </a-popconfirm>
  27. </template>
  28. </a-table>
  29. <DictionaryForm
  30. v-model:visible="formVisible"
  31. :is-edit="isEdit"
  32. :edit-data="editData"
  33. @submit="handleSubmitDictionary"
  34. />
  35. </div>
  36. </template>
  37. <script setup>
  38. import { onMounted, reactive, computed, ref, watch } from "vue";
  39. import { useRoute } from "vue-router";
  40. import FindHead from "@/components/FindHead/index.vue"
  41. import { columns, findConfig } from "./config";
  42. import { getDictionaryList, getDictionaryById, addDictionary, updateDictionary } from "@/api/path/dictionary";
  43. import { getInitPagination } from "@/settings/pagination";
  44. import DictionaryForm from "./DictionaryForm.vue";
  45. const route = useRoute();
  46. const tableData = ref([]);
  47. const findData = ref({})
  48. const pagination = ref(getInitPagination)
  49. const formVisible = ref(false);
  50. const isEdit = ref(false);
  51. const editData = ref(null);
  52. const showAddForm = () => {
  53. isEdit.value = false;
  54. editData.value = null;
  55. formVisible.value = true;
  56. };
  57. const evSearch = (data) => {
  58. initTableData()
  59. console.log("evSearch", data);
  60. }
  61. const initTableData = async () => {
  62. const {data, total} = await getDictionaryList({
  63. size: pagination.value.pageSize,
  64. current: pagination.value.current,
  65. ...findData.value,
  66. })
  67. tableData.value = data.records
  68. findConfig[1].options = data.records.map(item => ({
  69. label: item.typeLabel,
  70. value: item.typeId,
  71. }))
  72. pagination.value.total = data.total
  73. }
  74. const evEdit = async (record) => {
  75. isEdit.value = true;
  76. // 模拟获取详细数据的 API 调用
  77. const detailData = await getDictionaryById(record.id);
  78. editData.value = detailData;
  79. formVisible.value = true;
  80. };
  81. const handleSubmitDictionary = async (formData) => {
  82. if (isEdit.value) {
  83. // 模拟更新 API 调用
  84. await updateDictionary(formData);
  85. console.log('Dictionary item updated:', formData);
  86. } else {
  87. // 模拟添加 API 调用
  88. await addDictionary(formData);
  89. console.log('New dictionary item added:', formData);
  90. }
  91. // 重新加载表格数据
  92. await initTableData();
  93. };
  94. onMounted(() => {
  95. initTableData()
  96. });
  97. </script>
  98. <style lang="less" scoped>
  99. .head-title {
  100. display: flex;
  101. justify-content: space-between;
  102. .fn-headTitleDiv();
  103. padding: 0.5rem 0;
  104. }
  105. </style>