@gonsin/gview 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/.browserslistrc +2 -0
  2. package/README.md +26 -0
  3. package/babel.config.js +5 -0
  4. package/gonsin-gview-1.0.1.tgz +0 -0
  5. package/package.json +29 -0
  6. package/postcss.config.js +5 -0
  7. package/public/css/theme/animate.min.css +7 -0
  8. package/public/css/theme/brownishTheme.css +10 -0
  9. package/public/css/theme/coffeeTheme.css +10 -0
  10. package/public/css/theme/cyanTheme.css +10 -0
  11. package/public/css/theme/defaultTheme.css +10 -0
  12. package/public/css/theme/greenTheme.css +16 -0
  13. package/public/css/theme/greyTheme.css +10 -0
  14. package/public/css/theme/orangeTheme.css +10 -0
  15. package/public/css/theme/purpleTheme.css +10 -0
  16. package/public/css/theme/skyblueTheme.css +10 -0
  17. package/public/favicon.ico +0 -0
  18. package/public/imgs/antOutline-border.png +0 -0
  19. package/public/imgs/bg.png +0 -0
  20. package/public/imgs/logo.png +0 -0
  21. package/public/imgs/menu.png +0 -0
  22. package/public/index.html +17 -0
  23. package/src/App.vue +143 -0
  24. package/src/api/api.js +28 -0
  25. package/src/api/index.js +31 -0
  26. package/src/api/request.js +210 -0
  27. package/src/assets/font/font.scss +12 -0
  28. package/src/assets/font/font_dev.scss +12 -0
  29. package/src/assets/font/icon.scss +179 -0
  30. package/src/assets/images/svg/color.svg +1 -0
  31. package/src/assets/logo.png +0 -0
  32. package/src/assets/scss/common.scss +338 -0
  33. package/src/assets/scss/themeColor.scss +35 -0
  34. package/src/components/MyDialog.vue +251 -0
  35. package/src/components/MyForm.vue +324 -0
  36. package/src/components/MyFormAutocomplete.vue +135 -0
  37. package/src/components/MyFormCascader.vue +107 -0
  38. package/src/components/MyFormCheckBox.vue +67 -0
  39. package/src/components/MyFormEditor.vue +85 -0
  40. package/src/components/MyFormInput.vue +68 -0
  41. package/src/components/MyFormLine.vue +49 -0
  42. package/src/components/MyFormRadio.vue +92 -0
  43. package/src/components/MyFormSelect.vue +122 -0
  44. package/src/components/MyFormSelectDate.vue +72 -0
  45. package/src/components/MyFormSelectDateTime.vue +82 -0
  46. package/src/components/MyFormSelectTime.vue +84 -0
  47. package/src/components/MyFormSwitch.vue +60 -0
  48. package/src/components/MyFormTag.vue +67 -0
  49. package/src/components/MyFormTree.vue +137 -0
  50. package/src/components/MyFormUploads.vue +91 -0
  51. package/src/components/MyHeader.vue +176 -0
  52. package/src/components/MyMenus.vue +150 -0
  53. package/src/components/MyPageHeader.vue +344 -0
  54. package/src/components/MyTab.vue +69 -0
  55. package/src/components/MyTable.vue +244 -0
  56. package/src/components/Templatess.vue +630 -0
  57. package/src/index.js +23 -0
  58. package/src/main.js +86 -0
  59. package/src/router.js +52 -0
  60. package/src/store/index.js +71 -0
  61. package/src/utils/common.js +96 -0
  62. package/src/utils/permission.js +36 -0
  63. package/src/views/GView.vue +185 -0
  64. package/src/views/Home.vue +26 -0
  65. package/src/views/Login.vue +249 -0
  66. package/src/websocket/test.js +140 -0
  67. package/src/websocket/websocket.js +141 -0
  68. package/src/websocket/websocket1.js +117 -0
  69. package/src/websocket/websocket2.js +128 -0
  70. package/vue.config.js +42 -0
@@ -0,0 +1,344 @@
1
+ <!--
2
+ * @Author: your name
3
+ * @Date: 2022-04-22 15:51:20
4
+ * @LastEditTime: 2022-11-22 16:56:33
5
+ * @LastEditors: lrm lrm@gonsin.cn
6
+ * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
7
+ * @FilePath: \client\src\components\MyPageHeader.vue
8
+ -->
9
+
10
+ <template>
11
+ <header class="wrapper_header header">
12
+ <div class="logo-title">
13
+ <!-- <span>{{ roomsName }}</span> -->
14
+ GView
15
+ </div>
16
+ <div id="icon" @click="collapseHandler">
17
+ <img
18
+ src="../.././public/imgs/menu.png"
19
+ alt
20
+ :class="Collapse ? 'img_rotate' : 'img_no_rotate'"
21
+ />
22
+ </div>
23
+ <div class="right">
24
+ <!-- <el-dropdown trigger="click">
25
+ <img
26
+ src="../assets/images/svg/color.svg"
27
+ width="20"
28
+ height="20"
29
+ alt=""
30
+ style="margin-right: 15px"
31
+ />
32
+ <el-dropdown-menu slot="dropdown">
33
+ <el-dropdown-item
34
+ v-for="(item, index) in themeList"
35
+ :key="index"
36
+ @click.native="handlePicker(item)"
37
+ >{{ item.name }}</el-dropdown-item
38
+ >
39
+ </el-dropdown-menu>
40
+ </el-dropdown> -->
41
+ <!-- <el-badge class="item">
42
+ <i
43
+ class="el-icon-message"
44
+ @click="$router.push({ path: '/showEmail' })"
45
+ ></i>
46
+ </el-badge> -->
47
+ <i id="user_icon" class="el-icon-user" @click="handelUser"></i>
48
+ <!-- vue过渡动画 -->
49
+ <transition name="slide-fade">
50
+ <ul class="user_ul" v-show="isShow === true">
51
+ <!-- <li @click="handleUserInfo">
52
+ <i class="el-icon-user"></i>
53
+ <span>用户信息</span>
54
+ </li> -->
55
+ <!-- <li @click="handleShare">
56
+ <i class="el-icon-share"></i>
57
+ <span>分享链接</span>
58
+ </li> -->
59
+ <!-- <li
60
+ @click="handleCopySystem"
61
+ v-if="user.admin"
62
+ v-loading.fullscreen.lock="fullscreenLoading"
63
+ >
64
+ <i class="el-icon-user"></i>
65
+ <span>备份系统</span>
66
+ </li> -->
67
+ <li @click="handleLogout">
68
+ <i class="el-icon-unlock"></i>
69
+ <span>退出登录</span>
70
+ </li>
71
+ </ul>
72
+ </transition>
73
+ </div>
74
+ </header>
75
+ </template>
76
+
77
+ <script>
78
+ import { mapState } from "vuex";
79
+ import { setLogin,closeWebsocket } from "../websocket/test";
80
+ export default {
81
+ props: {},
82
+ components: {},
83
+ computed: {
84
+ ...mapState({
85
+ Collapse: (state) => state.isCollapse,
86
+ // unreadMessagesTotal: (state) => state.unreadMessageTotal,
87
+ // roomsName: (state) => state.globalSystem.title,
88
+ }),
89
+ },
90
+ data() {
91
+ return {
92
+ fullscreenLoading: false, //全局loading
93
+ isShow: false,
94
+ // logoutURL: "/api/logout", // 登出
95
+ currentColor: localStorage.getItem("currentColor")
96
+ ? localStorage.getItem("currentColor")
97
+ : "defaultTheme",
98
+ themeList: [
99
+ {
100
+ label: "defaultTheme",
101
+ name: "默认",
102
+ },
103
+ {
104
+ label: "greenTheme",
105
+ name: "绿色",
106
+ },
107
+ {
108
+ label: "cyanTheme",
109
+ name: "青色",
110
+ },
111
+ {
112
+ label: "orangeTheme",
113
+ name: "橙色",
114
+ },
115
+ {
116
+ label: "coffeeTheme",
117
+ name: "咖啡",
118
+ },
119
+ {
120
+ label: "greyTheme",
121
+ name: "浅灰色",
122
+ },
123
+ {
124
+ label: "skyblueTheme",
125
+ name: "天蓝色",
126
+ },
127
+ {
128
+ label: "brownishTheme",
129
+ name: "酒红色",
130
+ },
131
+ {
132
+ label: "purpleTheme",
133
+ name: "紫色",
134
+ },
135
+ ],
136
+ user: JSON.parse(sessionStorage.getItem("user")),
137
+ };
138
+ },
139
+ mounted() {
140
+
141
+ },
142
+ methods: {
143
+ handleUserInfo() {},
144
+ // fullscreenLoading() {},
145
+ handleLogout() {
146
+ this.$confirm("您是否要退出登录?", "提示", {
147
+ confirmButtonText: "确定",
148
+ cancelButtonText: "取消",
149
+ type: "warning",
150
+ }).then(() => {
151
+ this.$message({
152
+ type: "success",
153
+ message: "退出登录",
154
+ });
155
+ sessionStorage.removeItem("user");
156
+ sessionStorage.removeItem("roomsInfo")
157
+ setLogin(false)
158
+ closeWebsocket()
159
+ this.$router.push({
160
+ path: "/login",
161
+ });
162
+ // this.getRequest(this.$url.logoutUrl).then(() => {
163
+ // this.$message({
164
+ // type: "success",
165
+ // message: "退出登录",
166
+ // });
167
+ // sessionStorage.removeItem("user");
168
+ // sessionStorage.removeItem("roomsInfo")
169
+
170
+ // this.$router.push({
171
+ // path: "/login",
172
+ // });
173
+ // // this.$store.state.websocket.close();
174
+ // });
175
+ });
176
+ },
177
+ collapseHandler() {
178
+ this.$store.commit("Collapse");
179
+
180
+ },
181
+ handelUser() {
182
+ this.isShow = !this.isShow;
183
+ },
184
+ /**
185
+ * @description: 颜色选择
186
+ * @param {type}
187
+ * @return:
188
+ */
189
+ handlePicker(item) {
190
+ localStorage.setItem("currentColor", item.label);
191
+ location.reload();
192
+ },
193
+ handleCopySystem() {},
194
+ },
195
+ };
196
+ </script>
197
+ <style lang="scss" scoped>
198
+ .wrapper_header {
199
+ width: 100%;
200
+ // height: 60px;
201
+ height: 60px;
202
+ background-color: #3e99f6;
203
+ box-sizing: border-box;
204
+ position: relative;
205
+ z-index: 1;
206
+ .logo-title {
207
+ width: 200px;
208
+ font-family: "微软雅黑";
209
+ font-size: 24px;
210
+ line-height: 60px;
211
+ color: #fff;
212
+ text-align: center;
213
+ overflow: hidden;
214
+ text-overflow: ellipsis;
215
+ white-space: nowrap;
216
+ }
217
+
218
+ #icon {
219
+ width: 20px;
220
+ height: 20px;
221
+ display: inline-block;
222
+ position: absolute;
223
+ top: 50%;
224
+ transform: translateY(-50%);
225
+ left: 200px;
226
+ cursor: pointer;
227
+
228
+ img {
229
+ width: 100%;
230
+ }
231
+
232
+ .img_rotate {
233
+ transform: rotate(90deg);
234
+ transition: all 0.3s;
235
+ }
236
+
237
+ .img_no_rotate {
238
+ transform: rotate(0);
239
+ transition: all 0.3s;
240
+ }
241
+ }
242
+
243
+ .right {
244
+ position: absolute;
245
+ top: 50%;
246
+ right: 30px;
247
+ transform: translateY(-50%);
248
+ height: 60px;
249
+ display: flex;
250
+ align-items: center;
251
+
252
+ i {
253
+ font-size: 20px;
254
+ color: #fff;
255
+ cursor: pointer;
256
+ }
257
+
258
+ #user_icon {
259
+ margin-left: 15px;
260
+ transition: all 0.3s;
261
+ position: relative;
262
+ }
263
+
264
+ .user_ul {
265
+ position: absolute;
266
+ width: 250px;
267
+ text-align: left;
268
+ background-color: #fff;
269
+ top: 30px;
270
+ right: -10px;
271
+ padding: 10px 15px;
272
+ box-sizing: border-box;
273
+ border-radius: 3px;
274
+ box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
275
+ li {
276
+ display: block;
277
+ width: 100%;
278
+ height: 40px;
279
+
280
+ i,
281
+ span {
282
+ line-height: 40px;
283
+ font-size: 14px;
284
+ color: #7a878e;
285
+ }
286
+
287
+ span {
288
+ margin-left: 15px;
289
+ font-size: 12px;
290
+ }
291
+ }
292
+
293
+ li:hover {
294
+ background-color: rgba(0, 0, 0, 0.05);
295
+ transition: all 0.3s;
296
+ cursor: pointer;
297
+ }
298
+ }
299
+
300
+ #user_icon:hover {
301
+ transition: all 0.3s;
302
+ color: #ccc;
303
+ }
304
+ }
305
+ }
306
+ </style>
307
+
308
+ <style lang="scss">
309
+ /** 拷贝的字体图标 */
310
+ // @font-face {
311
+ // font-family: "iconfont"; /* project id 1978833 */
312
+ // src: url("//at.alicdn.com/t/font_1978833_h88nwlpvtfr.eot");
313
+ // src: url("//at.alicdn.com/t/font_1978833_h88nwlpvtfr.eot?#iefix")
314
+ // format("embedded-opentype"),
315
+ // url("//at.alicdn.com/t/font_1978833_h88nwlpvtfr.woff2") format("woff2"),
316
+ // url("//at.alicdn.com/t/font_1978833_h88nwlpvtfr.woff") format("woff"),
317
+ // url("//at.alicdn.com/t/font_1978833_h88nwlpvtfr.ttf") format("truetype"),
318
+ // url("//at.alicdn.com/t/font_1978833_h88nwlpvtfr.svg#iconfont")
319
+ // format("svg");
320
+ // }
321
+ .iconfont {
322
+ margin-right: 10px;
323
+ font-family: "iconfont" !important;
324
+ line-height: 60px;
325
+ font-style: normal;
326
+ -webkit-font-smoothing: antialiased;
327
+ -webkit-text-stroke-width: 0.2px;
328
+ -moz-osx-font-smoothing: grayscale;
329
+ }
330
+
331
+ .slide-fade-enter-active {
332
+ transition: all 0.3s ease;
333
+ }
334
+
335
+ .slide-fade-leave-active {
336
+ transition: all 0.4s cubic-bezier(1, 0.5, 0.8, 1);
337
+ }
338
+
339
+ .slide-fade-enter,
340
+ .slide-fade-leave-to {
341
+ transform: translateX(10px);
342
+ opacity: 0;
343
+ }
344
+ </style>
@@ -0,0 +1,69 @@
1
+ <!--
2
+ * @Author: lrm lrm@gonsin.cn
3
+ * @Date: 2022-11-02 09:37:58
4
+ * @LastEditors: lrm lrm@gonsin.cn
5
+ * @LastEditTime: 2022-11-07 17:30:27
6
+ * @FilePath: \client\src\components\MyTab.vue
7
+ * @Description:
8
+ *
9
+ * Copyright (c) 2022 by lrm lrm@gonsin.cn, All Rights Reserved.
10
+ -->
11
+ <template>
12
+ <div class="my_tab" ref="my_tab">
13
+ <el-tabs v-model="currentTabTitle" type="border-card" @tab-click="handleClick">
14
+ <el-tab-pane v-for="tab in tabs"
15
+ :key="tab.title"
16
+ :label="tab.title"
17
+ :name="tab.title"
18
+ class="my_tab_item"
19
+ :lazy="true"
20
+ >
21
+ <templatess
22
+ :viewName="tab.title"
23
+ :board="tab.board"
24
+ ></templatess>
25
+ </el-tab-pane>
26
+ </el-tabs>
27
+ </div>
28
+ </template>
29
+
30
+ <script>
31
+
32
+ export default {
33
+ name: "myTab",
34
+ components: {
35
+ templatess: () => import('../components/Templatess.vue')
36
+ },
37
+ props: {
38
+ tabs: {
39
+ type: Array,
40
+ default: () => []
41
+ }
42
+ },
43
+ data() {
44
+ return {
45
+ currentTabTitle: this.tabs[0].title,
46
+ formData: {}, // 表单数据
47
+ dataList: [], // 表格数据
48
+ }
49
+ },
50
+ methods: {
51
+ handleClick(tab, event) {
52
+ // console.log(tab);
53
+ }
54
+ }
55
+ }
56
+ </script>
57
+
58
+ <style lang="scss" scoped>
59
+ .my_tab {
60
+ flex: 1;
61
+ position: relative;
62
+ margin-top: 20px;
63
+ margin-bottom: 20px;
64
+
65
+ .my_tab_item {
66
+ height: 100%;
67
+ }
68
+ }
69
+ </style>
@@ -0,0 +1,244 @@
1
+ <!--
2
+ * @Author: your name
3
+ * @Date: 2022-04-22 11:44:31
4
+ * @LastEditTime: 2022-11-28 15:13:40
5
+ * @LastEditors: lrm lrm@gonsin.cn
6
+ * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
7
+ * @FilePath: \client\src\components\MyTable.vue
8
+ -->
9
+ <template>
10
+ <div class="my_table" ref="my_table">
11
+ <div class="heads" ref="heads">
12
+ <el-table
13
+ :data="list"
14
+ style="width: 100%"
15
+ :height="tableHeight"
16
+ v-if="show"
17
+ ref="multipleTable"
18
+ @selection-change="handleSelectionChange"
19
+ >
20
+ <el-table-column type="selection" width="55"> </el-table-column>
21
+ <el-table-column
22
+ v-for="(column, idx) in data.columns"
23
+ :key="column.idx"
24
+ :index="idx"
25
+ :prop="column.keyName"
26
+ :label="column.name"
27
+ >
28
+ <template slot-scope="scope">
29
+ <div v-if="column.columnType == 'DATE'">
30
+ {{ returnDateValue(column, scope.row[column.keyName]) }}
31
+ </div>
32
+ <div v-else-if="column.columnType == 'BUTTONS'">
33
+ <el-button
34
+ type="text"
35
+ v-for="(btns, indexss) in column.buttons"
36
+ v-if="handleShowIf(scope.row, btns.showIf)"
37
+ :key="indexss"
38
+ @click="btnReturn(scope.row, btns)"
39
+ >{{ btns.name }}</el-button
40
+ >
41
+ </div>
42
+ <div v-else-if="column.columnType == 'IMAGE'">
43
+ <el-image
44
+ style="width: 80px; height: 80px"
45
+ :src="imageReturn(column, scope.row)"
46
+ :preview-src-list="[imageReturn(column, scope.row)]"
47
+ />
48
+ </div>
49
+ <div v-else-if="column.columnType == 'QR_CODE'">
50
+ <vue-qr :text="returnValue(column, scope.row)" :size="80" :margin="5" />
51
+ </div>
52
+ <div v-else-if="column.columnType == 'TEXT' || column.columnType == 'ENUMS'">
53
+ {{ returnValue(column, scope.row) }}
54
+ </div>
55
+ </template>
56
+ </el-table-column>
57
+ </el-table>
58
+ </div>
59
+
60
+ <div class="bottom" v-if="list.length !=0">
61
+ <el-pagination
62
+ @size-change="handleSizeChange"
63
+ @current-change="handleCurrentChange"
64
+ :current-page="pagination.page+1"
65
+ :page-sizes="[10, 20, 30, 50]"
66
+ :page-size="pagination.count"
67
+ layout="total, sizes, prev, pager, next, jumper"
68
+ :total="pagination.totalCount"
69
+ >
70
+ </el-pagination>
71
+ </div>
72
+ </div>
73
+ </template>
74
+
75
+ <script>
76
+ import moment from 'moment';
77
+ import Mustache from 'mustache'
78
+ import { vFun } from '../utils/common'
79
+ import VueQr from 'vue-qr'
80
+
81
+
82
+ export default {
83
+ name: "myTable",
84
+ props: {
85
+ data: {
86
+ type: Object,
87
+ },
88
+ list: {
89
+ type: Array,
90
+ },
91
+ propsPagination: {
92
+ type: Object,
93
+ },
94
+ },
95
+ components: { VueQr },
96
+ watch: {
97
+ propsPagination: {
98
+ handler: function (newModel, oldModel) {
99
+ // console.log('newModel',newModel)
100
+ // console.log(parseInt(newModel.page)+1)
101
+ this.pagination = newModel;
102
+ // this.pagination.page = parseInt(newModel.page)+1;
103
+ // this.pagination.totalCount = parseInt(newModel.totalCount);
104
+ // this.pagination.count = parseInt(newModel.count);
105
+ // this.pagination.page = parseInt(this.pagination.page)+1;
106
+ },
107
+ deep: true,
108
+ },
109
+ },
110
+ data() {
111
+ return {
112
+ tableHeight: "400",
113
+ show: false,
114
+ currentPage4: 1,
115
+ sum: 1,
116
+ pagination:{
117
+ page:0,
118
+ totalCount:0,
119
+ count:0,
120
+ },
121
+ item: {
122
+ }
123
+ };
124
+ },
125
+ mounted() {
126
+ // this.$nextTick(()=>{
127
+ // console.log( parseInt(window
128
+ // .getComputedStyle(this.$refs.heads)
129
+ // .height.replace("px", ""))-50)
130
+ // // this.tableHeight = 825;
131
+ // this.tableHeight = parseInt(window
132
+ // .getComputedStyle(this.$refs.heads)
133
+ // .height.replace("px", "")-50);
134
+ // this.show = true;
135
+ // })
136
+ // console.log( parseInt(window
137
+ // .getComputedStyle(this.$refs.heads)
138
+ // .height.replace("px", "")))
139
+ // this.tableHeight = 893;
140
+ // this.tableHeight = parseInt(
141
+ // window.getComputedStyle(this.$refs.heads).height.replace("px", "") -
142
+ // 50
143
+ // );
144
+ this.show = true;
145
+ },
146
+ methods: {
147
+ //返回列表的日期
148
+ returnDateValue(column, target){
149
+ return moment(target).format(column.format)
150
+ },
151
+ //返回列表的值
152
+ returnValue(column, row) {
153
+ if (column.enums == null || column.enums == '') {
154
+ if (column.value != "") {
155
+ let result = Mustache.render(column.value, { item: row })
156
+ return result
157
+ } else if (column.value == "") {
158
+ return row[column.keyName]
159
+ }
160
+ } else if (column.enums != null) {
161
+ let arr = column.enums;
162
+ let targetArr = arr.filter((element) => {
163
+ if (element.value == row[column.keyName].toString()) {
164
+ return element;
165
+ }
166
+ });
167
+ if (targetArr.length != 0) {
168
+ return targetArr[0].text;
169
+ } else {
170
+ return row[column.keyName];
171
+ }
172
+ }
173
+ },
174
+ imageReturn(column, row) {
175
+ if (column.columnType == 'QR_CODE') {
176
+ let result = Mustache.render(column.value, { item: row })
177
+ return result
178
+ } else {
179
+ return row[column.keyName]
180
+ }
181
+ },
182
+ //返回列表的操作
183
+ btnReturn(row, action) {
184
+ this.$emit("returnAction", row, action);
185
+ },
186
+ //返回有变化的选项
187
+ handleSelectionChange(e) {
188
+ this.$emit("returnSelect", e);
189
+ },
190
+ //列表的分页的每页数量
191
+ handleSizeChange(val) {
192
+ console.log(`每页 ${val} 条`);
193
+ let model = this.pagination;
194
+ model.count = val;
195
+ model.page = 0;
196
+ this.$emit("returnProps", model);
197
+ },
198
+ //列表分页的当前页面
199
+ handleCurrentChange(val) {
200
+ console.log(`当前页: ${val}`);
201
+ let model = this.pagination;
202
+ model.page = parseInt(val) - 1;
203
+ this.$emit("returnProps", model);
204
+ },
205
+ handleShowIf(row, showIf) {
206
+ const v = vFun
207
+ if (showIf != null && showIf != "1") {
208
+ let result, evalResult
209
+ try {
210
+ result = Mustache.render(showIf, { item: row })
211
+ evalResult = eval(result)
212
+ } catch (e) {
213
+ console.warn(e);
214
+ }
215
+ // return true
216
+ return eval(evalResult)
217
+ } else {
218
+ return true
219
+ }
220
+ }
221
+ },
222
+ };
223
+ </script>
224
+ <style lang="scss" scoped>
225
+ .my_table {
226
+ flex: 1;
227
+ position: relative;
228
+ margin-bottom: 50px;
229
+ // display: flex;
230
+ // flex-direction: column;
231
+ .heads {
232
+ height: 100%;
233
+ }
234
+ .bottom {
235
+ height: 32px;
236
+ position: fixed;
237
+ bottom: 9px;
238
+ right: 30px;
239
+ width: 100%;
240
+ // background:#ffffff;
241
+ text-align: right;
242
+ }
243
+ }
244
+ </style>