index.vue 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. <template>
  2. <div class="layout-pd">
  3. <el-row>
  4. <!--操作-->
  5. <el-col :xs="24" >
  6. <el-card class="mt8" shadow="hover" >
  7. <el-form :model="state.filter" :inline="true" @submit.stop.prevent class="fengexian">
  8. <el-form-item prop="name" style="width: 100%">
  9. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
  10. <el-form-item label="石油公司">
  11. <el-input v-model="state.filter.OilCompanyName" placeholder="单行输入" clearable></el-input>
  12. </el-form-item>
  13. </el-col>
  14. <el-col :xs="24" :sm="12" :md="8" :lg="8" :xl="6" class="mb20">
  15. <el-form-item label="安装时间">
  16. <el-date-picker
  17. v-model="state.dateRange"
  18. format="YYYY-MM-DD"
  19. value-format="YYYY-MM-DD"
  20. type="daterange"
  21. start-placeholder="开始时间"
  22. end-placeholder="结束时间"
  23. :clearable="false"
  24. ></el-date-picker>
  25. </el-form-item>
  26. </el-col>
  27. <!-- <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
  28. <el-form-item label="序列号">
  29. <el-input v-model="state.filter.SerialNumber" placeholder="单行输入" clearable></el-input>
  30. </el-form-item>
  31. </el-col>
  32. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
  33. <el-form-item label="绑定加油机厂商">
  34. <el-input v-model="state.filter.BindingDispenserManufacturer" placeholder="单行输入" clearable></el-input>
  35. </el-form-item>
  36. </el-col>
  37. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
  38. <el-form-item label="安全装置状态">
  39. <el-input v-model="state.filter.DeviceStatus" placeholder="单行输入" clearable></el-input>
  40. </el-form-item>
  41. </el-col>
  42. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
  43. <el-form-item label="选择时间">
  44. <el-date-picker
  45. v-model="state.filter.FixTime"
  46. type="datetimerange"
  47. value-format="YYYY-MM-DD HH:mm:ss"
  48. range-separator="To"
  49. start-placeholder="Start date"
  50. end-placeholder="End date"
  51. />
  52. </el-form-item>
  53. </el-col>
  54. <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
  55. <el-form-item label="选择时间">
  56. <el-date-picker
  57. v-model="state.filter.SoldTime"
  58. type="datetimerange"
  59. value-format="YYYY-MM-DD HH:mm:ss"
  60. range-separator="To"
  61. start-placeholder="Start date"
  62. end-placeholder="End date"
  63. />
  64. </el-form-item>
  65. </el-col> -->
  66. </el-form-item>
  67. </el-form>
  68. <hr>
  69. <div class="my-flex my-flex-start" >
  70. <el-button type="primary" icon="ele-CirclePlus" @click="onQuery"> 查询 </el-button>
  71. </div>
  72. </el-card>
  73. </el-col>
  74. <!--表格-->
  75. <el-col :xs="24" >
  76. <el-card style="height: 70vh" class="my-fill mt8" shadow="hover">
  77. <el-table
  78. ref="multipleTableRef"
  79. v-loading="state.loading"
  80. stripe
  81. :data="state.tableModel"
  82. row-key="id"
  83. style="width: 100%">
  84. <el-table-column
  85. v-for="column in state.dynamicColumns"
  86. :key="column.prop"
  87. :prop="column.prop"
  88. :label="column.label">
  89. <template #default="{ row }">
  90. <template v-if="column.prop === 'onlineStatus'">
  91. <StatusBox :status="row.onlineStatus" />
  92. </template>
  93. <template v-else-if="column.prop === 'deviceStatus'">
  94. <StatusBox :status="row.deviceStatus" />
  95. </template>
  96. <template v-else>
  97. {{ row[column.prop] }}
  98. </template>
  99. </template>
  100. </el-table-column>
  101. </el-table>
  102. <div class="my-flex my-flex-end" style="margin-top: 20px">
  103. <el-pagination
  104. v-model:currentPage="state.pageInput.CurrentPage"
  105. v-model:page-size="state.pageInput.PageSize"
  106. :total="state.total"
  107. :page-sizes="[10, 20, 50, 100]"
  108. small
  109. background
  110. @size-change="onSizeChange"
  111. @current-change="onCurrentChange"
  112. layout="total, sizes, prev, pager, next, jumper"
  113. />
  114. </div>
  115. </el-card>
  116. </el-col>
  117. </el-row>
  118. </div>
  119. </template>
  120. <script setup lang="ts">
  121. import {onBeforeMount, onMounted, reactive, ref, watch} from "vue";
  122. import eventBus from "/@/utils/mitt";
  123. import { PageInput,encodercontrolsDto } from "/@/api/admin/reportManagement/encodercontrols/encodercontrolsdto";
  124. import {Api} from "/@/api/admin/reportManagement/encodercontrols/encodercontrolsapi";
  125. import StatusBox from "/@/components/StatusBox.vue";
  126. /**数据对象*/
  127. const state = reactive({
  128. dateRange: [] as unknown as [string, string], // 用于存储日期范围
  129. /**加载显示 */
  130. loading: false,
  131. /**条件查询模块 */
  132. filter: {
  133. startDate:"",
  134. endDate:"",
  135. /**石油公司 */
  136. OilCompanyName: "",
  137. /**序列号 */
  138. SerialNumber: "",
  139. /**绑定加油机厂商 */
  140. BindingDispenserManufacturer: "",
  141. /**安全装置状态 */
  142. DeviceStatus: "",
  143. /**安装时间 */
  144. FixTime: "",
  145. // 在线状态
  146. onlineStatus:"",
  147. /**出厂时间 */
  148. SoldTime: "",},
  149. /**表格信息 */
  150. tableModel: [] as encodercontrolsDto,
  151. /**动态表头 */
  152. dynamicColumns: [
  153. { prop: 'oilCompanyName', label: '石油公司' },
  154. { prop: 'stationName', label: '加油站名称' },
  155. { prop: 'serialNumber', label: '编码器编号' },
  156. { prop: 'bindingDispenserManufacturer', label: '加油机厂商' },
  157. { prop: 'dispenserNumber', label: '油机号' },
  158. { prop: 'nozzleNumber', label: '油枪号' },
  159. { prop: 'deviceStatus', label: '编码器状态' },
  160. { prop: 'onlineStatus', label: '在线状态' },
  161. { prop: 'fixTime', label: '安装时间' },
  162. { prop: 'soldTime', label: '出厂时间' },],
  163. /**分页标识 */
  164. pageInput:{
  165. currentPage: 1,
  166. pageSize: 10,
  167. } as PageInput,
  168. /**分页总数 */
  169. total: 0,
  170. })
  171. onMounted(() => {
  172. init()
  173. eventBus.off('refreshView')
  174. eventBus.on('refreshView', async () => {
  175. await init()
  176. })
  177. console.log()
  178. })
  179. onBeforeMount(() => {
  180. eventBus.off('refreshView')
  181. })
  182. /**页条数变化*/
  183. const onSizeChange = () => {
  184. init()
  185. }
  186. /**页数变化*/
  187. const onCurrentChange = () =>{
  188. init()
  189. }
  190. /**
  191. * 监听变换
  192. */
  193. watch(
  194. () => state.dateRange,
  195. (newVal) => {
  196. if (newVal && newVal.length === 2) {
  197. state.filter.startDate = newVal[0]; // 开始时间
  198. state.filter.endDate = newVal[1]; // 结束时间
  199. } else {
  200. state.filter.startDate = "";
  201. state.filter.endDate = "";
  202. }
  203. }
  204. );
  205. /**条件查询 */
  206. const onQuery = () => {
  207. init()
  208. }
  209. /**初始化 */
  210. const init = async () => {
  211. state.loading = true;
  212. console.log("Request Payload:", { ...state.pageInput, Filter: state.filter });
  213. const res: any = await new Api().getList({ ...state.pageInput, Filter: state.filter });
  214. state.total = res?.data?.total ?? 0;
  215. state.tableModel = res?.data?.list ?? [];
  216. state.loading = false;
  217. };
  218. </script>
  219. <style scoped lang="scss">
  220. .fengexian{
  221. margin-bottom: -20px;
  222. }
  223. .my-flex{
  224. margin-top: 20px;
  225. }
  226. </style>