index.vue 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  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-240px"
  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="materialsName">
  27. <el-input
  28. v-model="queryParams.materialsName"
  29. placeholder="请输入物资名称"
  30. clearable
  31. @keyup.enter="handleQuery"
  32. class="!w-240px"
  33. />
  34. </el-form-item>
  35. <el-form-item label="归还人" prop="restitutionUserName">
  36. <el-input
  37. v-model="queryParams.restitutionUserName"
  38. placeholder="请输入归还人"
  39. clearable
  40. @keyup.enter="handleQuery"
  41. class="!w-240px"
  42. />
  43. </el-form-item>
  44. <el-form-item label="状态" prop="status">
  45. <el-select
  46. v-model="queryParams.status"
  47. placeholder="请选择状态"
  48. clearable
  49. class="!w-240px"
  50. >
  51. <el-option
  52. v-for="dict in getIntDictOptions(DICT_TYPE.MATERIAL_EXCEPTION_STATUS)"
  53. :key="dict.value"
  54. :label="dict.label"
  55. :value="dict.value"
  56. />
  57. </el-select>
  58. </el-form-item>
  59. <el-form-item label="异常发生时间">
  60. <el-date-picker
  61. v-model="createTime"
  62. type="datetimerange"
  63. value-format="YYYY-MM-DD HH:mm:ss"
  64. :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
  65. range-separator="-"
  66. start-placeholder="开始日期"
  67. end-placeholder="结束日期"
  68. />
  69. </el-form-item>
  70. <el-form-item label="异常解除时间">
  71. <el-date-picker
  72. v-model="handleTime"
  73. type="datetimerange"
  74. value-format="YYYY-MM-DD HH:mm:ss"
  75. :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
  76. range-separator="-"
  77. start-placeholder="开始日期"
  78. end-placeholder="结束日期"
  79. />
  80. </el-form-item>
  81. <el-form-item>
  82. <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
  83. <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
  84. </el-form-item>
  85. </el-form>
  86. </ContentWrap>
  87. <!-- 列表 -->
  88. <ContentWrap>
  89. <el-table
  90. v-loading="loading"
  91. :data="exceptionList"
  92. >
  93. <el-table-column label="编号" align="center" prop="misplaceId" />
  94. <el-table-column label="物资柜" align="center" prop="loanFromName" />
  95. <el-table-column label="物资名称" align="center" prop="materialsName" />
  96. <el-table-column label="归还柜" align="center" prop="restitutionToName" />
  97. <el-table-column label="归还人" align="center" prop="restitutionUserName" />
  98. <el-table-column label="状态" align="center" prop="status">
  99. <template #default="scope">
  100. <dict-tag :type="DICT_TYPE.MATERIAL_EXCEPTION_STATUS" :value="scope.row.status" />
  101. </template>
  102. </el-table-column>
  103. <el-table-column label="异常发生时间" align="center" prop="occurTime" :formatter="dateFormatter" />
  104. <el-table-column label="异常解除时间" align="center" prop="handleTime" :formatter="dateFormatter" />
  105. </el-table>
  106. <Pagination
  107. v-model:total="total"
  108. v-model:page="queryParams.pageNo"
  109. v-model:limit="queryParams.pageSize"
  110. @pagination="getList"
  111. />
  112. </ContentWrap>
  113. </template>
  114. <script lang="ts" setup>
  115. import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
  116. import { dateFormatter } from '@/utils/formatTime'
  117. import * as ExceptionApi from '@/api/material/exception'
  118. import * as CabinetApi from '@/api/material/information'
  119. import {returnExceptionPage} from "@/api/material/exception";
  120. defineOptions({ name: 'MaterialException' })
  121. const message = useMessage() // 消息弹窗
  122. const { t } = useI18n() // 国际化
  123. const loading = ref(true) // 列表的加载中
  124. const total = ref(0) // 列表的总页数
  125. const exceptionList = ref([]) // 列表的数据
  126. const cabinets = ref([]) // 物资柜选项
  127. const createTime = ref<[Date, Date] | null>(null) // 异常发生时间
  128. const handleTime = ref<[Date, Date] | null>(null) // 异常解除时间
  129. // 查询参数
  130. const queryParams = reactive({
  131. pageNo: 1,
  132. pageSize: 10,
  133. exceptionType: '0',
  134. loanFromId: undefined,
  135. materialsName: undefined,
  136. restitutionUserName: undefined,
  137. status: undefined,
  138. startTime: undefined,
  139. endTime: undefined,
  140. handleStartTime: undefined,
  141. handleEndTime: undefined
  142. })
  143. const queryFormRef = ref() // 搜索的表单
  144. /** 查询异常列表 */
  145. const getList = async () => {
  146. loading.value = true
  147. try {
  148. // 处理时间范围
  149. if (createTime.value?.length === 2) {
  150. queryParams.startTime = dateFormatter(createTime.value[0])
  151. queryParams.endTime = dateFormatter(createTime.value[1])
  152. }
  153. if (handleTime.value?.length === 2) {
  154. queryParams.handleStartTime = dateFormatter(handleTime.value[0])
  155. queryParams.handleEndTime = dateFormatter(handleTime.value[1])
  156. }
  157. const data = await ExceptionApi.returnExceptionPage(queryParams)
  158. exceptionList.value = data.list
  159. total.value = data.total
  160. } finally {
  161. loading.value = false
  162. }
  163. }
  164. /** 查询物资柜列表 */
  165. const getCabinetList = async () => {
  166. const data = await CabinetApi.getMaterialsCabinets({ pageNo: 1, pageSize: -1 })
  167. if (data?.list) {
  168. cabinets.value = data.list.map(item => ({
  169. value: item.id,
  170. label: item.cabinetName
  171. }))
  172. }
  173. }
  174. /** 搜索按钮操作 */
  175. const handleQuery = () => {
  176. queryParams.pageNo = 1
  177. getList()
  178. }
  179. /** 重置按钮操作 */
  180. const resetQuery = () => {
  181. createTime.value = null
  182. handleTime.value = null
  183. queryFormRef.value?.resetFields()
  184. handleQuery()
  185. }
  186. // /** 清空时间范围 */
  187. // const handleClearTime = (value: [Date, Date] | null) => {
  188. // if (!value) {
  189. // queryParams.startTime = undefined
  190. // queryParams.endTime = undefined
  191. // }
  192. // }
  193. //
  194. // /** 清空处理时间范围 */
  195. // const handleClearTime2 = (value: [Date, Date] | null) => {
  196. // if (!value) {
  197. // queryParams.handleStartTime = undefined
  198. // queryParams.handleEndTime = undefined
  199. // }
  200. // }
  201. /** 初始化 */
  202. onMounted(async () => {
  203. await getList()
  204. await getCabinetList()
  205. })
  206. </script>