index.vue 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. <template>
  2. <div class="AdminCategoryIndex">
  3. <div class="add-new-action-row">
  4. <q-btn color="primary"
  5. label="ایجاد دسته بندی جدید"
  6. :to="{name: 'Admin.Category.Create'}" />
  7. </div>
  8. <entity-index v-if="mounted"
  9. ref="entityIndex"
  10. v-model:value="inputs"
  11. title="لیست دسته بندی ها"
  12. :api="api"
  13. :table="table"
  14. :table-keys="tableKeys"
  15. :show-search-button="false"
  16. :show-reload-button="false"
  17. :show-expand-button="false">
  18. <template v-slot:entity-index-table-cell="{inputData, showConfirmRemoveDialog}">
  19. <template v-if="inputData.col.name === 'number'">
  20. {{ inputData.rowNumber }}
  21. </template>
  22. <template v-else-if="inputData.col.name === 'action'">
  23. <div class="action-column-entity-index">
  24. <q-btn size="md"
  25. color="primary"
  26. label="جزییات"
  27. :to="{name: 'Admin.Category.Show', params: {id: inputData.props.row.id}}"
  28. class="q-mr-md" />
  29. <delete-btn @click="showConfirmRemoveDialog(inputData.props.row, 'id', getRemoveMessage(inputData.props.row))" />
  30. </div>
  31. </template>
  32. <template v-else>
  33. {{ inputData.col.value }}
  34. </template>
  35. </template>
  36. </entity-index>
  37. </div>
  38. </template>
  39. <script>
  40. import { shallowRef } from 'vue'
  41. import { EntityIndex } from 'quasar-crud'
  42. import ShamsiDate from 'src/assets/ShamsiDate.js'
  43. import { APIGateway } from 'src/api/APIGateway.js'
  44. import { FormBuilderAssist } from 'quasar-form-builder'
  45. import BtnControl from 'src/components/Control/btn.vue'
  46. import DeleteBtn from 'src/components/Control/DeleteBtn.vue'
  47. const BtnControlComp = shallowRef(BtnControl)
  48. export default {
  49. name: 'Admin.Category.Index',
  50. components: {
  51. EntityIndex,
  52. DeleteBtn
  53. },
  54. data () {
  55. return {
  56. mounted: false,
  57. inputs: [
  58. { type: 'input', name: 'search', value: null, label: 'جست و جو', col: 'col-md-2' },
  59. { type: BtnControlComp, name: 'btn', responseKey: 'btn', label: 'جستجو', atClick: () => {}, col: 'col-md-2' }
  60. ],
  61. api: APIGateway.unitCategory.APIAdresses.base,
  62. table: {
  63. columns: [
  64. {
  65. name: 'number',
  66. required: true,
  67. label: 'شماره',
  68. align: 'left',
  69. field: () => ''
  70. },
  71. {
  72. name: 'id',
  73. required: true,
  74. label: 'شناسه',
  75. align: 'left',
  76. field: row => row.id
  77. },
  78. {
  79. name: 'title',
  80. required: true,
  81. label: 'نام',
  82. align: 'left',
  83. field: row => row.title
  84. },
  85. {
  86. name: 'count',
  87. required: true,
  88. label: 'تعداد درس های دسته',
  89. align: 'left',
  90. field: (row) => row.units_count
  91. },
  92. {
  93. name: 'creation_time',
  94. required: true,
  95. label: 'تاریخ ایجاد',
  96. align: 'left',
  97. field: row => ShamsiDate.getDateTime(row.creation_time)
  98. },
  99. {
  100. name: 'last_modification_time',
  101. required: true,
  102. label: 'تاریخ آخرین تغییر',
  103. align: 'left',
  104. field: row => ShamsiDate.getDateTime(row.last_modification_time)
  105. },
  106. {
  107. name: 'action',
  108. required: true,
  109. label: 'عملیات',
  110. align: 'left',
  111. field: ''
  112. }
  113. ],
  114. data: []
  115. },
  116. tableKeys: {
  117. data: 'results',
  118. total: 'count',
  119. currentPage: 'current',
  120. perPage: 'per_page',
  121. pageKey: 'page'
  122. }
  123. }
  124. },
  125. mounted() {
  126. FormBuilderAssist.setAttributeByName(this.inputs, 'btn', 'atClick', this.search)
  127. this.mounted = true
  128. },
  129. methods: {
  130. search () {
  131. this.$refs.entityIndex.search()
  132. },
  133. getRemoveMessage (row) {
  134. return 'آیا از حذف ' + row.title + ' اطمینان دارید؟'
  135. }
  136. }
  137. }
  138. </script>
  139. <style lang="scss" scoped>
  140. .AdminCategoryIndex {
  141. .add-new-action-row {
  142. display: flex;
  143. flex-flow: row;
  144. align-items: center;
  145. justify-content: flex-end;
  146. margin-bottom: 22px;
  147. }
  148. .action-column-entity-index {
  149. display: flex;
  150. align-items: center;
  151. justify-content: flex-start;
  152. }
  153. }
  154. </style>