index.vue 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. <template>
  2. <!-- 搜索 -->
  3. <ContentWrap>
  4. <el-form
  5. ref="queryFormRef"
  6. :model="queryParams"
  7. :inline="true"
  8. label-width="80px"
  9. class="-mb-15px"
  10. >
  11. <TenantSelect v-model="queryParams.tenantIds" placeholder="请选择院区" prop="tenantIds" />
  12. <el-form-item label="长者名称" prop="elderName" label-width="70px">
  13. <el-input v-model="queryParams.elderName" clearable class="!w-160px" />
  14. </el-form-item>
  15. <el-form-item label="楼栋名称" prop="buildName" label-width="70px">
  16. <el-input v-model="queryParams.buildName" clearable class="!w-160px" />
  17. </el-form-item>
  18. <el-form-item label="楼层名称" prop="floorName" label-width="70px">
  19. <el-input v-model="queryParams.floorName" clearable class="!w-160px" />
  20. </el-form-item>
  21. <el-form-item label="房间号" prop="roomNo" label-width="65px">
  22. <el-input v-model="queryParams.roomNo" clearable class="!w-160px" />
  23. </el-form-item>
  24. <el-form-item label="A/B套餐" prop="extraDishesOption" label-width="80px">
  25. <el-select v-model="queryParams.extraDishesOption" clearable class="!w-160px" placeholder="请选择">
  26. <el-option label="A套餐" value="A" />
  27. <el-option label="B套餐" value="B" />
  28. </el-select>
  29. </el-form-item>
  30. <el-form-item label="时间段" prop="orderFoodDateRange" label-width="80px">
  31. <TgDatePicker
  32. type="daterange"
  33. v-model="queryParams.orderFoodDateRange"
  34. class="!w-240px"
  35. start-placeholder="开始日期"
  36. end-placeholder="结束日期"
  37. />
  38. </el-form-item>
  39. <el-form-item>
  40. <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
  41. <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
  42. </el-form-item>
  43. </el-form>
  44. </ContentWrap>
  45. <!-- 列表 -->
  46. <ContentWrap>
  47. <div class="mb-12px flex items-center" v-hasPermi="['elderly:order-food:export']">
  48. <el-button class="ml-8px" type="success" plain @click="handleExport">
  49. <Icon icon="ep:download" class="mr-5px" /> 导出
  50. </el-button>
  51. </div>
  52. <Table2
  53. v-loading="loading"
  54. :data="list"
  55. :columns="elderFoodOrderColumns"
  56. :queryParams="queryParams"
  57. :opWidth="120"
  58. @del="handleDelete"
  59. />
  60. <Pagination
  61. :total="total"
  62. v-model:page="queryParams.pageNo"
  63. v-model:limit="queryParams.pageSize"
  64. @pagination="getList"
  65. />
  66. </ContentWrap>
  67. </template>
  68. <script lang="ts" setup>
  69. import { useUserStore } from '@/store/modules/user'
  70. import { getElderFoodOrderPage, exportElderFoodOrderExcel, deleteElderFoodOrder } from '@/api/system/foods'
  71. import download from '@/utils/download'
  72. defineOptions({ name: 'ElderFoodOrder' })
  73. const userStore = useUserStore()
  74. const message = useMessage()
  75. const { t } = useI18n()
  76. const loading = ref(false)
  77. const total = ref(0)
  78. const list = ref<any[]>([])
  79. const queryFormRef = ref()
  80. const queryParams = reactive<any>({
  81. pageNo: 1,
  82. pageSize: 10,
  83. tenantIds: userStore.orgTenantId,
  84. buildName:'',
  85. floorName:'',
  86. roomNo: '',
  87. elderName: '',
  88. extraDishesOption: undefined as string | undefined,
  89. orderFoodDateRange: [] as string[] | undefined,
  90. orderFoodStartDate: undefined as string | undefined,
  91. orderFoodEndDate: undefined as string | undefined
  92. })
  93. const elderFoodOrderColumns = reactive([
  94. { label: '长者姓名', field: 'elderName' },
  95. {
  96. label: '点餐日期',
  97. field: 'orderFoodDate',
  98. },
  99. { label: 'A/B套餐', field: 'extraDishesOption' },
  100. { label: '附加菜名', field: 'extraDishes' },
  101. ])
  102. const getParams = (isExport = false) => {
  103. const params: any = {
  104. ...queryParams,
  105. tenantIds: queryParams.tenantIds && queryParams.tenantIds.length ? queryParams.tenantIds : undefined
  106. }
  107. const dateRange = queryParams.orderFoodDateRange || []
  108. params.orderFoodStartDate = dateRange[0]
  109. params.orderFoodEndDate = dateRange[1]
  110. delete params.orderFoodDateRange
  111. if (isExport) {
  112. params.pageNo = 1
  113. params.pageSize = 99999
  114. }
  115. return params
  116. }
  117. const getList = async () => {
  118. loading.value = true
  119. try {
  120. const res = await getElderFoodOrderPage(getParams())
  121. const data = res || {}
  122. console.log("data",data)
  123. list.value = data?.list || []
  124. total.value = data?.total || 0
  125. } finally {
  126. loading.value = false
  127. }
  128. }
  129. const handleQuery = () => {
  130. queryParams.pageNo = 1
  131. getList()
  132. }
  133. const resetQuery = () => {
  134. queryFormRef.value?.resetFields()
  135. queryParams.tenantIds = userStore.orgTenantId
  136. handleQuery()
  137. }
  138. const handleExport = async () => {
  139. const data = await exportElderFoodOrderExcel(getParams(true))
  140. download.excel(data, `长者点餐统计_${Date.now()}.xls`)
  141. }
  142. const handleDelete = async (id: number) => {
  143. try {
  144. await message.delConfirm()
  145. await deleteElderFoodOrder(id)
  146. message.success(t('common.delSuccess'))
  147. await getList()
  148. } catch {}
  149. }
  150. onMounted(() => {
  151. getList()
  152. })
  153. </script>