collection.vue 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. <template>
  2. <div>
  3. <el-card class="list-query" shadow="hover">
  4. <el-form inline label-width="80px">
  5. <el-form-item :label="T('Owner')">
  6. <el-select v-model="listQuery.user_id" clearable>
  7. <el-option
  8. v-for="item in allUsers"
  9. :key="item.id"
  10. :label="item.username"
  11. :value="item.id"
  12. ></el-option>
  13. </el-select>
  14. </el-form-item>
  15. <el-form-item>
  16. <el-button type="primary" @click="handlerQuery">{{ T('Filter') }}</el-button>
  17. <el-button type="danger" @click="toAdd">{{ T('Add') }}</el-button>
  18. </el-form-item>
  19. </el-form>
  20. </el-card>
  21. <el-card class="list-body" shadow="hover">
  22. <el-table :data="listRes.list" v-loading="listRes.loading" border>
  23. <el-table-column prop="id" label="id" align="center"/>
  24. <el-table-column prop="user_id" :label="T('Owner')" align="center">
  25. <template #default="{row}">
  26. <span v-if="row.user_id"> <el-tag>{{ allUsers?.find(u => u.id === row.user_id)?.username }}</el-tag> </span>
  27. </template>
  28. </el-table-column>
  29. <el-table-column prop="name" :label="T('AddressBook')" align="center"/>
  30. <el-table-column prop="created_at" :label="T('CreatedAt')" align="center"/>
  31. <!-- <el-table-column prop="updated_at" label="更新时间" align="center"/>-->
  32. <el-table-column :label="T('Actions')" align="center" class-name="table-actions" width="600" fixed="right">
  33. <template #default="{row}">
  34. <el-button type="primary" @click="showRules(row)">{{ T('ShareRules') }}</el-button>
  35. <el-button @click="toEdit(row)">{{ T('Edit') }}</el-button>
  36. <el-button type="danger" @click="del(row)">{{ T('Delete') }}</el-button>
  37. </template>
  38. </el-table-column>
  39. </el-table>
  40. </el-card>
  41. <el-card class="list-page" shadow="hover">
  42. <el-pagination background
  43. layout="prev, pager, next, sizes, jumper"
  44. :page-sizes="[10,20,50,100]"
  45. v-model:page-size="listQuery.page_size"
  46. v-model:current-page="listQuery.page"
  47. :total="listRes.total">
  48. </el-pagination>
  49. </el-card>
  50. <el-dialog v-model="formVisible" width="800" :title="!formData.id?T('Create') :T('Update') ">
  51. <el-form class="dialog-form" ref="form" :model="formData" label-width="120px">
  52. <el-form-item :label="T('Owner')" prop="user_id" required>
  53. <el-select v-model="formData.user_id">
  54. <el-option
  55. v-for="item in allUsers"
  56. :key="item.id"
  57. :label="item.username"
  58. :value="item.id"
  59. ></el-option>
  60. </el-select>
  61. </el-form-item>
  62. <el-form-item :label="T('Name')" prop="name" required>
  63. <el-input v-model="formData.name"></el-input>
  64. </el-form-item>
  65. <el-form-item>
  66. <el-button @click="formVisible = false">{{ T('Cancel') }}</el-button>
  67. <el-button @click="submit" type="primary">{{ T('Submit') }}</el-button>
  68. </el-form-item>
  69. </el-form>
  70. </el-dialog>
  71. <el-dialog v-model="rulesVisible" :title="T('ShareRules')" destroy-on-close top="5vh" width="80%">
  72. <Rule :collection="clickRow" :is_my="0"></Rule>
  73. </el-dialog>
  74. </div>
  75. </template>
  76. <script setup>
  77. import { T } from '@/utils/i18n'
  78. import { ref } from 'vue'
  79. import { useRepositories } from '@/views/address_book/collection'
  80. import { onActivated, onMounted, watch } from 'vue'
  81. import Rule from '@/views/address_book/rule.vue'
  82. import { loadAllUsers } from '@/global'
  83. const { allUsers, getAllUsers } = loadAllUsers()
  84. getAllUsers()
  85. const {
  86. listRes,
  87. listQuery,
  88. getList,
  89. handlerQuery,
  90. del,
  91. formVisible,
  92. formData,
  93. toEdit,
  94. toAdd,
  95. submit,
  96. } = useRepositories()
  97. listQuery.is_my = 0
  98. onMounted(getList)
  99. onActivated(getList)
  100. watch(() => listQuery.page, getList)
  101. watch(() => listQuery.page_size, handlerQuery)
  102. const clickRow = ref({})
  103. const rulesVisible = ref(false)
  104. const showRules = (row) => {
  105. clickRow.value = row
  106. rulesVisible.value = true
  107. console.log('showRules')
  108. }
  109. </script>
  110. <style scoped lang="scss">
  111. </style>