index.vue 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. <template>
  2. <!-- 搜索工作栏 -->
  3. <ContentWrap>
  4. <el-form
  5. class="-mb-15px"
  6. :model="queryParams"
  7. ref="queryFormRef"
  8. :inline="true"
  9. label-width="100px"
  10. >
  11. <el-form-item label="物资柜" prop="loanFromId">
  12. <el-select
  13. v-model="queryParams.loanFromId"
  14. placeholder="请选择物资柜"
  15. clearable
  16. class="!w-230px"
  17. >
  18. <el-option
  19. v-for="dict in cabinets"
  20. :key="dict.value"
  21. :label="dict.label"
  22. :value="dict.value"
  23. />
  24. </el-select>
  25. </el-form-item>
  26. <el-form-item label="状态" prop="status">
  27. <el-select
  28. v-model="queryParams.status"
  29. placeholder="请选择状态"
  30. clearable
  31. class="!w-230px"
  32. >
  33. <el-option
  34. v-for="dict in getIntDictOptions(DICT_TYPE.MATERIAL_EXCEPTION_STATUS)"
  35. :key="dict.value"
  36. :label="dict.label"
  37. :value="dict.value"
  38. />
  39. </el-select>
  40. </el-form-item>
  41. <el-form-item label="异常发生时间">
  42. <el-date-picker
  43. v-model="createTime"
  44. type="datetimerange"
  45. value-format="YYYY-MM-DD HH:mm:ss"
  46. :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
  47. range-separator="-"
  48. start-placeholder="开始日期"
  49. end-placeholder="结束日期"
  50. @clear="handleClearTime(createTime)"
  51. class="!w-290px"
  52. />
  53. </el-form-item>
  54. <el-form-item label="异常解除时间">
  55. <el-date-picker
  56. v-model="handleTime"
  57. type="datetimerange"
  58. value-format="YYYY-MM-DD HH:mm:ss"
  59. :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
  60. range-separator="-"
  61. start-placeholder="开始日期"
  62. end-placeholder="结束日期"
  63. @clear="handleClearTime2(handleTime)"
  64. class="!w-290px"
  65. />
  66. </el-form-item>
  67. <el-form-item>
  68. <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
  69. <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
  70. </el-form-item>
  71. </el-form>
  72. </ContentWrap>
  73. <!-- 列表 -->
  74. <ContentWrap>
  75. <el-table
  76. v-loading="loading"
  77. :data="exceptionList"
  78. >
  79. <el-table-column label="编号" align="center" prop="id" />
  80. <el-table-column label="物资柜" align="center" prop="exceptionCategoryName" />
  81. <el-table-column label="状态" align="center" prop="status">
  82. <template #default="scope">
  83. <dict-tag :type="DICT_TYPE.MATERIAL_EXCEPTION_STATUS" :value="scope.row.status" />
  84. </template>
  85. </el-table-column>
  86. <el-table-column label="异常发生时间" align="center" prop="raiseTime" />
  87. <el-table-column label="异常解除时间" align="center" prop="handleTime" />
  88. </el-table>
  89. <Pagination
  90. v-model:total="total"
  91. v-model:page="queryParams.pageNo"
  92. v-model:limit="queryParams.pageSize"
  93. @pagination="getList"
  94. />
  95. </ContentWrap>
  96. </template>
  97. <script lang="ts" setup>
  98. import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
  99. import { dateFormatter,getDateRange } from '@/utils/formatTime'
  100. import * as doorExceptionApi from '@/api/material/doorException'
  101. import * as CabinetApi from '@/api/material/information'
  102. import {doorExceptionPage} from "@/api/material/doorException";
  103. defineOptions({ name: 'MaterialDoorException' })
  104. const message = useMessage() // 消息弹窗
  105. const { t } = useI18n() // 国际化
  106. const loading = ref(true) // 列表的加载中
  107. const total = ref(0) // 列表的总页数
  108. const exceptionList = ref([]) // 列表的数据
  109. const cabinets = ref([]) // 物资柜选项
  110. const createTime = ref<[Date, Date] | null>(null) // 异常发生时间
  111. const handleTime = ref<[Date, Date] | null>(null) // 异常解除时间
  112. // 日期快捷选项
  113. // const dateShortcuts = [
  114. // {
  115. // text: '最近一周',
  116. // value: () => {
  117. // const end = new Date()
  118. // const start = new Date()
  119. // start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
  120. // return [start, end]
  121. // }
  122. // },
  123. // {
  124. // text: '最近一个月',
  125. // value: () => {
  126. // const end = new Date()
  127. // const start = new Date()
  128. // start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
  129. // return [start, end]
  130. // }
  131. // },
  132. // {
  133. // text: '最近三个月',
  134. // value: () => {
  135. // const end = new Date()
  136. // const start = new Date()
  137. // start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)
  138. // return [start, end]
  139. // }
  140. // }
  141. // ]
  142. // 查询参数
  143. const queryParams = reactive({
  144. pageNo: 1,
  145. pageSize: 10,
  146. exceptionType: '1',
  147. loanFromId: undefined,
  148. status: undefined,
  149. startRaiseTime: undefined,
  150. endRaiseTime: undefined,
  151. startHandleTime: undefined,
  152. endHandleTime: undefined
  153. })
  154. const queryFormRef = ref() // 搜索的表单
  155. /** 查询异常列表 */
  156. const getList = async () => {
  157. loading.value = true
  158. try {
  159. // 处理时间范围
  160. if (Array.isArray(createTime.value) && createTime.value?.length == 2) {
  161. const [startTime, endTime] = getDateRange(createTime.value[0], createTime.value[1])
  162. queryParams.startRaiseTime = startTime
  163. queryParams.endRaiseTime = endTime
  164. }
  165. if (Array.isArray(handleTime.value) && handleTime.value?.length == 2) {
  166. const [startTime, endTime] = getDateRange(handleTime.value[0], handleTime.value[1])
  167. queryParams.startHandleTime = startTime
  168. queryParams.endHandleTime = endTime
  169. }
  170. const data = await doorExceptionApi.doorExceptionPage(queryParams)
  171. exceptionList.value = data.list
  172. total.value = data.total
  173. } finally {
  174. loading.value = false
  175. }
  176. }
  177. /** 查询物资柜列表 */
  178. const getCabinetList = async () => {
  179. const data = await CabinetApi.getMaterialsCabinets({ pageNo: 1, pageSize: -1 })
  180. if (data?.list) {
  181. cabinets.value = data.list.map(item => ({
  182. value: item.id,
  183. label: item.cabinetName
  184. }))
  185. }
  186. }
  187. /** 搜索按钮操作 */
  188. const handleQuery = () => {
  189. queryParams.pageNo = 1
  190. getList()
  191. }
  192. /** 重置按钮操作 */
  193. const resetQuery = () => {
  194. createTime.value = null
  195. handleTime.value = null
  196. queryParams.startRaiseTime = undefined
  197. queryParams.endRaiseTime = undefined
  198. queryParams.startHandleTime = undefined
  199. queryParams.endHandleTime = undefined
  200. queryFormRef.value?.resetFields()
  201. handleQuery()
  202. }
  203. /** 清空时间范围 */
  204. const handleClearTime = (value: [Date, Date] | null) => {
  205. if (!value) {
  206. queryParams.startRaiseTime = undefined
  207. queryParams.endRaiseTime = undefined
  208. }
  209. }
  210. /** 清空处理时间范围 */
  211. const handleClearTime2 = (value: [Date, Date] | null) => {
  212. if (!value) {
  213. queryParams.startHandleTime = undefined
  214. queryParams.endHandleTime = undefined
  215. }
  216. }
  217. /** 初始化 */
  218. onMounted(async () => {
  219. await getList()
  220. await getCabinetList()
  221. })
  222. </script>