list.vue 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <template>
  2. <div class="system-edit-dic-container">
  3. <el-dialog v-model="isShowDialog" :show-close="false" width="75%" :fullscreen="dialogFullScreen">
  4. <template #header="{ close, titleId, titleClass }">
  5. <div class="my-header">
  6. <h4 :id="titleId" :class="titleClass">数据记录</h4>
  7. <div>
  8. <i class="iconfont " :class="!dialogFullScreen ? 'icon-fullscreen' : 'icon-tuichuquanping'" @click="quanping" style="font-size: 22px;cursor: pointer;"></i>
  9. <i class="el-icon" @click="close" style="font-size: 22px;cursor: pointer; margin-left: 10px; position: relative; top: 3px;"><svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" data-v-029747aa=""><path fill="currentColor" d="M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z"></path></svg></i>
  10. </div>
  11. </div>
  12. </template>
  13. <el-table :data="tableData.data" style="width: 100%">
  14. <el-table-column v-for="(item, index) in jData" :key="item" :label="item" :prop="item" show-overflow-tooltip align="center" style="min-width:200px">
  15. <template #header>
  16. <div >
  17. {{item}}
  18. </div>
  19. <div >
  20. <span v-if="item=='created_at'">时间</span>
  21. {{titleData[item]}}
  22. </div>
  23. </template>
  24. </el-table-column>
  25. </el-table>
  26. <pagination
  27. v-show="tableData.total > 0"
  28. :total="tableData.total"
  29. v-model:page="tableData.param.pageNum"
  30. v-model:limit="tableData.param.pageSize"
  31. @pagination="typeList"
  32. />
  33. </el-dialog>
  34. </div>
  35. </template>
  36. <script lang="ts">
  37. import { reactive, toRefs, defineComponent, ref, unref } from 'vue';
  38. import { Close } from '@element-plus/icons-vue';
  39. import api from '/@/api/datahub';
  40. import { ElMessage } from 'element-plus';
  41. interface DicState {
  42. isShowDialog: boolean;
  43. }
  44. // 定义接口来定义对象的类型
  45. interface TableDataRow {
  46. id: number;
  47. name: string;
  48. key: string;
  49. createBy: string;
  50. }
  51. interface TableDataState {
  52. ids: number[];
  53. tableData: {
  54. data: Array<TableDataRow>;
  55. total: number;
  56. loading: boolean;
  57. param: {
  58. pageNum: number;
  59. pageSize: number;
  60. id: number;
  61. };
  62. };
  63. }
  64. export default defineComponent({
  65. name: 'deviceEditPro',
  66. setup(prop, { emit }) {
  67. const formRef = ref<HTMLElement | null>(null);
  68. const state = reactive<DicState>({
  69. isShowDialog: false,
  70. dialogFullScreen: false,
  71. titleData:{},
  72. jsonsData: [],
  73. jData: [],
  74. tableData: {
  75. data: [],
  76. total: 0,
  77. loading: false,
  78. param: {
  79. pageNum: 1,
  80. pageSize: 10,
  81. sourceId: 0,
  82. },
  83. },
  84. });
  85. // 打开弹窗
  86. const openDialog = (row: RuleFormState | null) => {
  87. resetForm();
  88. if (row) {
  89. console.log(row);
  90. state.tableData.param.sourceId = row.sourceId;
  91. typeList();
  92. }
  93. state.isShowDialog = true;
  94. };
  95. const typeList = () => {
  96. console.log(state.tableData.param);
  97. api.common.getdata(state.tableData.param).then((res: any) => {
  98. const jsonData = JSON.parse(res.data);
  99. state.tableData.data = jsonData;
  100. state.jData = Object.keys(jsonData[0]);
  101. console.log(jsonData);
  102. state.jData.forEach((item, index) => {
  103. state.jsonsData[index] = jsonData[item];
  104. });
  105. state.tableData.total = res.Total;
  106. //state.ruleForm = res.data.dictType
  107. });
  108. api.node.getList(state.tableData.param).then((res: any) => {
  109. res.list.forEach((item, index) => {
  110. state.titleData[item.key] = item.name;
  111. });
  112. });
  113. };
  114. const resetForm = () => {
  115. state.jsonsData = [];
  116. state.jData = [];
  117. state.tableData= {
  118. data: [],
  119. total: 0,
  120. loading: false,
  121. param: {
  122. pageNum: 1,
  123. pageSize: 10,
  124. },
  125. }
  126. };
  127. // 关闭弹窗
  128. const closeDialog = () => {
  129. state.isShowDialog = false;
  130. };
  131. const quanping=()=>{
  132. state.dialogFullScreen = state.dialogFullScreen?false:true;
  133. }
  134. // 取消
  135. const onCancel = () => {
  136. closeDialog();
  137. };
  138. return {
  139. Close,
  140. quanping,
  141. typeList,
  142. openDialog,
  143. closeDialog,
  144. onCancel,
  145. formRef,
  146. ...toRefs(state),
  147. };
  148. },
  149. });
  150. </script>
  151. <style scoped>
  152. .my-header {
  153. display: flex;
  154. flex-direction: row;
  155. justify-content: space-between;
  156. }
  157. </style>