index.vue 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. <template>
  2. <div class="system-dic-container">
  3. <el-card shadow="hover">
  4. <div class="system-user-search mb15">
  5. <el-form :model="tableData.param" ref="queryRef" :inline="true" label-width="68px">
  6. <el-form-item label="区域" prop="area" style="width: 200px;">
  7. <el-select v-model="tableData.param.area" placeholder="区域" clearable size="default" style="width: 200px">
  8. <el-option v-for="item in areaOptions" :key="item" :label="item" :value="item" />
  9. </el-select>
  10. </el-form-item>
  11. <el-form-item label="管道序号" prop="name" style="width: 200px;">
  12. <el-select v-model="tableData.param.name" placeholder="管道序号" clearable size="default" style="width: 200px">
  13. <el-option v-for="item in nameOptions" :key="item" :label="item" :value="item" />
  14. </el-select>
  15. </el-form-item>
  16. <el-form-item label="输送单位" prop="company" style="width: 200px;">
  17. <el-select v-model="tableData.param.company" placeholder="输送单位" clearable size="default" style="width: 200px">
  18. <el-option v-for="item in companyOptions" :key="item" :label="item" :value="item" />
  19. </el-select>
  20. </el-form-item>
  21. <el-form-item label="创建时间" prop="dateRange">
  22. <el-date-picker v-model="tableData.param.dateRange" size="default" style="width: 240px" value-format="YYYY-MM-DD" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
  23. </el-form-item>
  24. <el-form-item label="类型" prop="types" style="width: 200px;">
  25. <el-select v-model="tableData.param.types" filterable clearable placeholder="请选择类型" style="width: 200px">
  26. <el-option v-for="dict in tree_types_2" :key="dict.value" :label="dict.label" :value="dict.value"> </el-option>
  27. </el-select>
  28. </el-form-item>
  29. <el-form-item>
  30. <el-button size="default" type="primary" class="ml10" @click="typeList">
  31. <el-icon>
  32. <ele-Search />
  33. </el-icon>
  34. 查询
  35. </el-button>
  36. <el-button size="default" @click="resetQuery(queryRef)">
  37. <el-icon>
  38. <ele-Refresh />
  39. </el-icon>
  40. 重置
  41. </el-button>
  42. </el-form-item>
  43. </el-form>
  44. </div>
  45. <el-table :data="tableData.data" style="width: 100%" @selection-change="handleSelectionChange" v-loading="tableData.loading">
  46. <el-table-column label="管道" prop="name" :show-overflow-tooltip="true" />
  47. <el-table-column label="区域名称" prop="area" :show-overflow-tooltip="true"/>
  48. <el-table-column label="用量(m³)" prop="value" :show-overflow-tooltip="true" />
  49. <el-table-column label="输送单位" prop="company" :show-overflow-tooltip="true" />
  50. <el-table-column label="类型" prop="types" :show-overflow-tooltip="true"/>
  51. <el-table-column label="输送时间" prop="datetime" align="center" width="180" ></el-table-column>
  52. </el-table>
  53. <pagination v-show="tableData.total>0" :total="tableData.total" v-model:page="tableData.param.pageNum" v-model:limit="tableData.param.pageSize" @pagination="typeList" />
  54. </el-card>
  55. </div>
  56. </template>
  57. <script lang="ts">
  58. import { toRefs, reactive, onMounted, ref, defineComponent, getCurrentInstance } from 'vue';
  59. import { ElMessageBox, ElMessage, FormInstance } from 'element-plus';
  60. import api from '/@/api/device';
  61. // 定义接口来定义对象的类型
  62. interface TableDataRow {
  63. id: number;
  64. name: string;
  65. key: string;
  66. status: number;
  67. desc: string;
  68. createBy: string;
  69. }
  70. interface TableDataState {
  71. ids: number[];
  72. tableData: {
  73. data: Array<TableDataRow>;
  74. total: number;
  75. loading: boolean;
  76. param: {
  77. pageNum: number;
  78. pageSize: number;
  79. name: string;
  80. area: string;
  81. company: string;
  82. types: string;
  83. dateRange: string[];
  84. };
  85. };
  86. nameOptions: string[];
  87. areaOptions: string[];
  88. companyOptions: string[];
  89. }
  90. export default defineComponent({
  91. name: 'deviceInstance',
  92. setup() {
  93. const { proxy } = getCurrentInstance() as any;
  94. const queryRef = ref();
  95. const state = reactive<TableDataState>({
  96. ids: [],
  97. tableData: {
  98. data: [],
  99. total: 0,
  100. loading: false,
  101. param: {
  102. pageNum: 1,
  103. pageSize: 10,
  104. name: '',
  105. area: '',
  106. company: '',
  107. types: '',
  108. dateRange: [],
  109. },
  110. },
  111. nameOptions: [],
  112. areaOptions: [],
  113. companyOptions: []
  114. });
  115. const { tree_types_2 } = proxy.useDict('tree_types_2');
  116. // 初始化表格数据
  117. const initTableData = () => {
  118. typeList();
  119. };
  120. const initParam = () => {
  121. api.tree.param(state.tableData.param).then((res: any) => {
  122. state.nameOptions = res.name || []
  123. state.areaOptions = res.area || []
  124. state.companyOptions = res.company || []
  125. })
  126. }
  127. const typeList = () => {
  128. state.tableData.loading = true;
  129. api.tree.record(state.tableData.param).then((res: any) => {
  130. state.tableData.data = res.list;
  131. state.tableData.total = res.total;
  132. }).finally(() => (state.tableData.loading = false));
  133. };
  134. // 页面加载时
  135. onMounted(() => {
  136. initTableData();
  137. initParam()
  138. });
  139. /** 重置按钮操作 */
  140. const resetQuery = (formEl: FormInstance | undefined) => {
  141. if (!formEl) return;
  142. formEl.resetFields();
  143. typeList();
  144. };
  145. // 多选框选中数据
  146. const handleSelectionChange = (selection: TableDataRow[]) => {
  147. state.ids = selection.map((item) => item.id);
  148. };
  149. const onActionStatus = (item: TableDataRow[]) => {
  150. if (item.status == 0) {
  151. api.instance.devdeploy({ id: item.id }).then((res: any) => {
  152. typeList();
  153. ElMessage.success(res.message || '操作成功');
  154. });
  155. } else {
  156. api.instance.devundeploy({ id: item.id }).then((res: any) => {
  157. typeList();
  158. ElMessage.success(res.message || '操作成功');
  159. });
  160. }
  161. }
  162. return {
  163. queryRef,
  164. onActionStatus,
  165. typeList,
  166. resetQuery,
  167. handleSelectionChange,
  168. tree_types_2,
  169. ...toRefs(state),
  170. };
  171. },
  172. });
  173. </script>