syntec3-0-ui-components-test 1.0.0

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 (99) hide show
  1. package/README.md +5 -0
  2. package/dist/S3_0UC_main.csv +4 -0
  3. package/dist/S3_0UC_sub.csv +2 -0
  4. package/dist/globalVariableS3_0UC.json +1 -0
  5. package/dist/style.css +1 -0
  6. package/dist/syntec3-0-ui-components.es.js +19518 -0
  7. package/dist/syntec3-0-ui-components.es.js.map +1 -0
  8. package/dist/syntec3-0-ui-components.umd.js +23 -0
  9. package/dist/syntec3-0-ui-components.umd.js.map +1 -0
  10. package/dist/vite.svg +1 -0
  11. package/dist/web.config +17 -0
  12. package/package.json +137 -0
  13. package/src/App.vue +31 -0
  14. package/src/assets/fonts/genYoGothicTW-normal.js +7 -0
  15. package/src/assets/image/defaultImage.png +0 -0
  16. package/src/assets/vue.svg +1 -0
  17. package/src/components/Layout/modules/fullPageGlobal.vue +113 -0
  18. package/src/components/Layout/modules/viewFile/config.js +65 -0
  19. package/src/components/Layout/modules/viewFile/createView.vue +1000 -0
  20. package/src/components/Layout/modules/viewFile/filterCriteria.vue +816 -0
  21. package/src/components/Layout/modules/viewFile/viewList.vue +291 -0
  22. package/src/components/Layout/modules/viewFile/viewManageTool.js +271 -0
  23. package/src/components/Layout/modules/viewFile/viewRecord.vue +472 -0
  24. package/src/components/Layout/modules/viewFile/viewTabs.vue +542 -0
  25. package/src/components/Layout/tools/GlobalDialog.vue +115 -0
  26. package/src/components/Pagination.vue +139 -0
  27. package/src/components/columnConfigNext.vue +273 -0
  28. package/src/components/customFilter/customFilter.vue +492 -0
  29. package/src/components/customFilter/filterCriteria.vue +769 -0
  30. package/src/components/customTable/components/headerOperation/index.vue +136 -0
  31. package/src/components/customTable/components/headerTabs/index.vue +171 -0
  32. package/src/components/customTable/components/tableContent/index.vue +440 -0
  33. package/src/components/customTable/index.vue +305 -0
  34. package/src/components/dialog.vue +85 -0
  35. package/src/components/pageContent.vue +48 -0
  36. package/src/components/popover.vue +402 -0
  37. package/src/configFiles/apiFile/baseApiList.json +11 -0
  38. package/src/configFiles/apiFile/coreApiList.json +24 -0
  39. package/src/configFiles/apiFile/mesApiList.json +4 -0
  40. package/src/configFiles/apiFile/mmsApiList.json +3 -0
  41. package/src/configFiles/errorCode.json +291 -0
  42. package/src/configFiles/version.js +2 -0
  43. package/src/i18n/lang/en-us.json +2060 -0
  44. package/src/i18n/lang/errorCodeTranslate.mjs +847 -0
  45. package/src/i18n/lang/zh-cn.json +2062 -0
  46. package/src/i18n/lang/zh-tw.json +2059 -0
  47. package/src/index.js +115 -0
  48. package/src/main.js +51 -0
  49. package/src/plugins/excel.js +88 -0
  50. package/src/router/index.js +41 -0
  51. package/src/scriptFiles/apiConfig/baseApis.js +10 -0
  52. package/src/scriptFiles/apiConfig/mesApis.js +10 -0
  53. package/src/scriptFiles/apiConfig/mmsApis.js +10 -0
  54. package/src/scriptFiles/apiConfig/privateCloudCoreApis.js +13 -0
  55. package/src/scriptFiles/apiConfig/serviceRoute.js +23 -0
  56. package/src/scriptFiles/apis/baseApiFunction.js +63 -0
  57. package/src/scriptFiles/apis/mesApiFunction.js +15 -0
  58. package/src/scriptFiles/apis/mmsApiFunction.js +9 -0
  59. package/src/scriptFiles/apis/privateCloudCoreApiFunction.js +101 -0
  60. package/src/scriptFiles/backendApiFunction.js +11 -0
  61. package/src/scriptFiles/checkApiErrorMechanism.js +137 -0
  62. package/src/scriptFiles/common/objectDataProcessing.js +65 -0
  63. package/src/scss/base/commom.scss +1068 -0
  64. package/src/scss/base/dialog.scss +45 -0
  65. package/src/scss/base/index.scss +3 -0
  66. package/src/scss/base/table.scss +28 -0
  67. package/src/store/index.js +25 -0
  68. package/src/store/module/langStore.js +116 -0
  69. package/src/style.css +52 -0
  70. package/src/utils/excel.js +86 -0
  71. package/src/utils/formula.js +69 -0
  72. package/src/utils/https.js +13 -0
  73. package/src/utils/i18n.js +42 -0
  74. package/src/utils/shiftSelect.js +164 -0
  75. package/src/utils/summation.js +77 -0
  76. package/src/utils/tableWidth.js +29 -0
  77. package/src/utils/toolFun.js +93 -0
  78. package/src/views/productionWorkOrder/components/columnConfig.vue +242 -0
  79. package/src/views/productionWorkOrder/components/docCustomFieldForm.vue +739 -0
  80. package/src/views/productionWorkOrder/components/filePreview.vue +148 -0
  81. package/src/views/productionWorkOrder/components/querySearch.vue +363 -0
  82. package/src/views/productionWorkOrder/configFiles/excelImportErrorCode.json +94 -0
  83. package/src/views/productionWorkOrder/configFiles/pdfDefaultConfig.js +933 -0
  84. package/src/views/productionWorkOrder/configFiles/planMakingScript.js +600 -0
  85. package/src/views/productionWorkOrder/configFiles/productionRelatedScript.js +368 -0
  86. package/src/views/productionWorkOrder/configFiles/rulse.js +23 -0
  87. package/src/views/productionWorkOrder/configFiles/status.js +50 -0
  88. package/src/views/productionWorkOrder/index.vue +2174 -0
  89. package/src/views/productionWorkOrder/productionFlowLabel/component/addCirculationLabel.vue +394 -0
  90. package/src/views/productionWorkOrder/productionFlowLabel/component/circulationLabelTable.vue +124 -0
  91. package/src/views/productionWorkOrder/productionFlowLabel/component/materialPartFilePreview.vue +167 -0
  92. package/src/views/productionWorkOrder/productionFlowLabel/component/workOrderInformation.vue +28 -0
  93. package/src/views/productionWorkOrder/productionFlowLabel/index.vue +604 -0
  94. package/src/views/production_work_order/components/priorityTooltip.vue +53 -0
  95. package/src/views/production_work_order/index.vue +1307 -0
  96. package/src/views/review_record/components/materialInfo.vue +50 -0
  97. package/src/views/review_record/components/rootCause.vue +42 -0
  98. package/src/views/review_record/components/workDetail.vue +115 -0
  99. package/src/views/review_record/index.vue +884 -0
@@ -0,0 +1,77 @@
1
+ import i18n from './i18n';
2
+
3
+ // 获取翻译
4
+ const t = i18n.global.t;
5
+ // 千分位
6
+ const thousandth = new Intl.NumberFormat('en-US', { maximumFractionDigits: 10 });
7
+
8
+ const summation = {
9
+ getSummaries(param, customFieldsList = [], fixedField = []){
10
+ const { columns, data } = param;
11
+ const sums = [t('sum')];
12
+ columns.forEach((column, index) => {
13
+ const dataField = customFieldsList.find(res=>{
14
+ // 后续通过后端的isSupportSummary 值来判断公式是否有合计
15
+ return Number(column.property) === res.docCustomId && (res.fieldTypeId === 2 || ( res.fieldTypeId === 9 && res.dmlDocCustomFormulaSettingsDTO.isSupportSummary ));
16
+
17
+ });
18
+ // 自定义字段
19
+ if ( dataField ) {
20
+ const summary = this.findWriteValueByDocCustomId(dataField.docCustomId, data);
21
+ sums[index] = summary.reduce((prev, curr, cindex) => {
22
+ const value = Number(curr);
23
+ if (!isNaN(value)) {
24
+ if( cindex === summary.length - 1 ){
25
+ return thousandth.format(prev + curr);
26
+ }else{
27
+ return prev + curr;
28
+ }
29
+
30
+ } else {
31
+ if( cindex === summary.length - 1 ){
32
+ return thousandth.format(prev);
33
+ }else{
34
+ return prev ;
35
+ }
36
+ }
37
+ }, 0);
38
+ }
39
+ // 固定字段
40
+ if( fixedField.includes(column.property) ){
41
+ const values = data.map((item) => Number(item[column.property]));
42
+ sums[index] = values.reduce((prev, curr, cindex) => {
43
+ const value = Number(curr);
44
+ if (!isNaN(value)) {
45
+ if( cindex === values.length - 1 ){
46
+ return thousandth.format(prev + curr);
47
+ }else{
48
+ return prev + curr;
49
+ }
50
+ } else {
51
+ if( cindex === values.length - 1 ){
52
+ return thousandth.format(prev);
53
+ }else{
54
+ return prev ;
55
+ }
56
+ }
57
+ }, 0);
58
+ }
59
+
60
+ });
61
+ return sums;
62
+ },
63
+ findWriteValueByDocCustomId(docCustomId, data){
64
+ const summary = [];
65
+ for (const item of data) {
66
+ if (item.docCustomFieldAndValues && item.docCustomFieldAndValues.length > 0) {
67
+ const found = item.docCustomFieldAndValues.find(adam => adam.docCustomId === docCustomId);
68
+ if (found) {
69
+ summary.push(Number(found.writeValue.replace(/,/g, '')));
70
+ }
71
+ }
72
+ }
73
+ return summary; // 未找到返回 null
74
+ },
75
+ };
76
+
77
+ export default summation;
@@ -0,0 +1,29 @@
1
+ const getTextWidth = (text) => {
2
+ const span = document.createElement('span');
3
+ span.style.visibility = 'hidden';
4
+ span.style.position = 'absolute';
5
+ span.style.top = '-9999px';
6
+ span.style.whiteSpace = 'nowrap';
7
+ span.style.fontSize = '16px';
8
+ span.innerText = text;
9
+ document.body.appendChild(span);
10
+ const width = span.offsetWidth + 16;
11
+ document.body.removeChild(span);
12
+ return width;
13
+ };
14
+ export function getColumnWidth(label, prop, tableData, minWidth = 80) {
15
+ //label表头名称
16
+ //prop对应的内容
17
+ //tableData表格数据
18
+ //minWidth最小宽度
19
+ const padding = 10; // 列内边距
20
+ let arr = tableData.map((item) => item[prop]);
21
+ arr.push(label); //拼接内容和表头数据
22
+ const contentWidths = arr.map((item) => {
23
+ const value = item ? String(item) : '';
24
+ const textWidth = getTextWidth(value);
25
+ return textWidth + padding > 300 ? 300 : textWidth + padding;
26
+ });
27
+ const maxWidth = Math.max(...contentWidths);
28
+ return Math.max(minWidth, maxWidth);
29
+ }
@@ -0,0 +1,93 @@
1
+ export default {
2
+ /**
3
+ * 转化拿到Excel单元格输入的日期值
4
+ * @param {*} numb 值
5
+ * @param {*} format 年月日分隔符
6
+ */
7
+ formatDateOfExcelIn: function (numb, format = '/') {
8
+ if (typeof numb !== 'number') {
9
+ return numb;
10
+ }
11
+ //参数numb是间隔天数,format是自定义的日期分隔符
12
+ //打印出来的结果是44563,表示1900年1月1日到当前日期的天数
13
+ const getDay = numb - 1;
14
+ const t = Math.round((getDay - Math.floor(getDay)) * 24 * 60 * 60);
15
+ //当导入的excel日期中包含了时分秒,t则表示小数点后面的时间
16
+ const time = new Date(1900, 0, getDay, 0, 0, t);
17
+ //getDay是从1900开始计算的,因此new Date()的第一个参数是1900
18
+ const year = time.getFullYear();
19
+ const month = time.getMonth() + 1;
20
+ const date = time.getDate();
21
+ const hours = time.getHours();
22
+ const minutes = time.getMinutes();
23
+ const seconds = time.getSeconds();
24
+ return year + format + (month < 10 ? '0' + month : month) + format + (date < 10 ? '0' + date : date) + ' ' + (hours < 10 ? '0' + hours : hours) + ':' + (minutes < 10 ? '0' + minutes : minutes) + ':' + (seconds < 10 ? '0' + seconds : seconds);
25
+ },
26
+ /**
27
+ * 测试log函数
28
+ * @param {*} val log内容
29
+ */
30
+ logFun: function (val) {
31
+ console.log('log inner is:', val);
32
+ },
33
+ /**
34
+ * 根据传入宽度字符串判断范围返回合适值
35
+ * @param {string} width 数字型宽度字符串
36
+ * @returns 返回最终宽度字符串
37
+ */
38
+ getTableColumnMinWidth: function (width = '120') {
39
+ let wid = width;
40
+ if (width.includes('px')) {
41
+ wid = width.replace('px', '');
42
+ }
43
+ if (Number(wid) <= 130) {
44
+ return '120';
45
+ }
46
+ if (Number(wid) > 130 && Number(wid) < 300) {
47
+ return wid;
48
+ }
49
+ return '300';
50
+ },
51
+
52
+ /**
53
+ * 动态展示表头宽度
54
+ * @param {*} param0
55
+ * @returns
56
+ */
57
+ tableHeadLength: function ({ column }) {
58
+ try {
59
+ let l = column.label?.length;
60
+ let f = 16;
61
+ let widthNum = f * (l + 2); //加上一个文字长度
62
+ if (widthNum <= 130) {
63
+ column.minWidth = 130;
64
+ } else if (widthNum > 130 && widthNum < 300) {
65
+ column.minWidth = widthNum;
66
+ } else {
67
+ column.minWidth = 300;
68
+ }
69
+ return ('div', { class: 'table-head', style: { width: '100%' } }, [column.label]);
70
+ } catch (error) {
71
+ console.log('error:', error);
72
+ }
73
+ },
74
+ /**
75
+ * 判断输入内容是否是url
76
+ * @param {*} url 输入值
77
+ * @returns
78
+ */
79
+ isValidURL: function (url) {
80
+ try {
81
+ // 使用URL对象进行初步校验
82
+ new URL(url);
83
+ return true;
84
+ } catch (_) {
85
+ // 使用正则表达式进行进一步校验
86
+ const urlPattern = /^(https?:\/\/)?(www\.)?[a-zA-Z0-9-.]+\.[a-zA-Z]{2,6}(\/[a-zA-Z0-9-._~:/?#@!$&'()*+,;=]*)?$/;
87
+ if (urlPattern.test(url)) {
88
+ return true;
89
+ }
90
+ return false;
91
+ }
92
+ },
93
+ };
@@ -0,0 +1,242 @@
1
+ <template>
2
+ <el-dropdown size="default" type="primary" :hide-on-click="false" trigger="click" style="margin-left: 15px">
3
+ <el-button type="primary" color="#125088">
4
+ {{ t('columnConfiguration') }}<el-icon class="el-icon--right"><arrow-down /></el-icon>
5
+ </el-button>
6
+ <template #dropdown>
7
+ <!-- filter 禁止拖拽 -->
8
+ <div style="display: flex">
9
+ <div>
10
+ <el-space v-if="parentLabel" direction="vertical">
11
+ <el-text tag="b">{{ parentLabel }}</el-text>
12
+ </el-space>
13
+ <!-- 父表头 -->
14
+ <el-dropdown-menu style="max-height: 400px">
15
+ <VueDraggable
16
+ ref="el"
17
+ v-model="parentDraggableItems"
18
+ :handle="handle"
19
+ filter=".disabled-color"
20
+ @end="parentSaveData"
21
+ @move="(evt) => onDragMove(evt, parentDraggableItems)"
22
+ >
23
+ <el-dropdown-item v-for="item in parentDraggableItems" :key="item.value" :command="item">
24
+ <v-icon
25
+ :class="['mdi mdi-drag dragindicator', dynamicClasses(item)]"
26
+ style="margin-right: 10px"
27
+ ></v-icon>
28
+ <el-checkbox
29
+ v-if="isParentCheckbox"
30
+ v-model="item.hideable"
31
+ :label="item.customizeFields ? item.text : $t(item.text)"
32
+ size="large"
33
+ :disabled="item.disabled"
34
+ @change="parentSaveData(item)"
35
+ />
36
+ <span v-else :class="dynamicClasses(item)" style="margin-right: 10px">{{
37
+ item.customizeFields ? item.text : $t(item.text)
38
+ }}</span>
39
+ <v-icon
40
+ v-if="!item.freeze"
41
+ class="mdi mdi-lock-open-variant"
42
+ style="margin-left: 10px"
43
+ @click="isFrozen(item, parentDraggableItems, 'parentSaveData')"
44
+ ></v-icon>
45
+ <v-icon
46
+ v-if="item.freeze"
47
+ class="mdi mdi-lock"
48
+ style="margin-left: 10px"
49
+ @click="isFrozen(item, parentDraggableItems, 'parentSaveData')"
50
+ ></v-icon>
51
+ </el-dropdown-item>
52
+ </VueDraggable>
53
+ </el-dropdown-menu>
54
+ </div>
55
+ <div v-if="isChild">
56
+ <el-space v-if="childLabel" direction="vertical">
57
+ <el-text tag="b">{{ childLabel }}</el-text>
58
+ </el-space>
59
+ <!-- 子表头 -->
60
+ <el-dropdown-menu style="max-height: 400px">
61
+ <VueDraggable
62
+ ref="el"
63
+ v-model="childDraggableItems"
64
+ :handle="handle"
65
+ filter=".disabled-color"
66
+ @end="childSaveData"
67
+ @move="(evt) => onDragMove(evt, childDraggableItems)"
68
+ >
69
+ <el-dropdown-item v-for="item in childDraggableItems" :key="item.value" :command="item">
70
+ <v-icon
71
+ :class="['mdi mdi-drag dragindicator', dynamicClasses(item)]"
72
+ style="margin-right: 10px"
73
+ ></v-icon>
74
+ <el-checkbox
75
+ v-if="isChildCheckbox"
76
+ v-model="item.hideable"
77
+ :label="item.customizeFields ? item.text : $t(item.text)"
78
+ size="large"
79
+ :disabled="item.disabled"
80
+ @change="childSaveData(item)"
81
+ />
82
+ <span v-else :class="dynamicClasses(item)" style="margin-right: 10px">{{
83
+ item.customizeFields ? item.text : $t(item.text)
84
+ }}</span>
85
+ <v-icon
86
+ v-if="!item.freeze"
87
+ class="mdi mdi-lock-open-variant"
88
+ style="margin-left: 10px"
89
+ @click="isFrozen(item, childDraggableItems, 'childSaveData')"
90
+ ></v-icon>
91
+ <v-icon
92
+ v-if="item.freeze"
93
+ class="mdi mdi-lock"
94
+ style="margin-left: 10px"
95
+ @click="isFrozen(item, childDraggableItems, 'childSaveData')"
96
+ ></v-icon>
97
+ </el-dropdown-item>
98
+ </VueDraggable>
99
+ </el-dropdown-menu>
100
+ </div>
101
+ </div>
102
+ </template>
103
+ </el-dropdown>
104
+ </template>
105
+
106
+ <script setup>
107
+ import { ref, watch } from 'vue';
108
+ import { VueDraggable } from 'vue-draggable-plus';
109
+ import { useI18n } from 'vue-i18n';
110
+ import { ElMessage } from 'element-plus';
111
+ const { t } = useI18n();
112
+ const props = defineProps({
113
+ parentItems: Array, // 父表头数据
114
+ isParentCheckbox: Boolean, // 父表头是否显示复选框
115
+ parentLabel: String, // 父表头名称
116
+ childLabel: String, // 子表头名称
117
+ childItems: Array, // 子表头数据
118
+ isChildCheckbox: Boolean, // 子表头是否显示复选框
119
+ isChild: Boolean, // 是否子表头列配置
120
+ });
121
+ const emit = defineEmits(['parentSaveData', 'childSaveData']);
122
+ const parentDraggableItems = ref([]);
123
+ const childDraggableItems = ref([]);
124
+ const handle = ref('.dragindicator');
125
+ watch(
126
+ () => props,
127
+ () => {
128
+ parentDraggableItems.value = props.parentItems;
129
+ childDraggableItems.value = props.childItems;
130
+ },
131
+ {
132
+ immediate: true,
133
+ deep: true,
134
+ },
135
+ );
136
+ function parentSaveData(val) {
137
+ const count = parentDraggableItems.value.filter((item) => item.hideable === true).length;
138
+ if (count < 6 && !val.hideable) {
139
+ val.hideable = true;
140
+ ElMessage.error('页面中栏位最少不得低于6列');
141
+ return;
142
+ }
143
+ emit('parentSaveData', parentDraggableItems.value);
144
+ }
145
+ function childSaveData(val) {
146
+ const count = childDraggableItems.value.filter((item) => item.hideable === true).length;
147
+ if (count < 6 && !val.hideable) {
148
+ val.hideable = true;
149
+ ElMessage.error('页面中栏位最少不得低于6列');
150
+ return;
151
+ }
152
+ emit('childSaveData', childDraggableItems.value);
153
+ }
154
+ function isFrozen(item, data, event) {
155
+ const frozenCount = data.filter((item) => item.freeze === true).length;
156
+
157
+ if (item.freeze) {
158
+ // 取消冻结逻辑
159
+ item.freeze = false;
160
+ item.fixed = false;
161
+ // 将取消冻结的栏位移动到未冻结栏位的第一位
162
+ const currentIndex = data.indexOf(item);
163
+ if (currentIndex !== -1) {
164
+ const [removed] = data.splice(currentIndex, 1);
165
+ const firstNonFrozenIndex = data.findIndex((i) => !i.freeze);
166
+ if (firstNonFrozenIndex !== -1) {
167
+ data.splice(firstNonFrozenIndex, 0, removed);
168
+ } else {
169
+ data.push(removed); // 如果没有未冻结栏位,则放到最后
170
+ }
171
+ }
172
+ } else {
173
+ // 冻结逻辑
174
+ if (frozenCount >= 4) {
175
+ ElMessage.error('最多可冻结4列数据');
176
+ return;
177
+ }
178
+ item.freeze = true;
179
+ item.fixed = true;
180
+
181
+ // 将冻结的栏位移动到最后一个冻结栏位之后
182
+ const currentIndex = data.indexOf(item);
183
+ if (currentIndex !== -1) {
184
+ const [removed] = data.splice(currentIndex, 1);
185
+ const lastFrozenIndex = data.findLastIndex((i) => i.freeze);
186
+ if (lastFrozenIndex !== -1) {
187
+ data.splice(lastFrozenIndex + 1, 0, removed);
188
+ } else {
189
+ data.unshift(removed); // 如果没有冻结栏位,则放到最前面
190
+ }
191
+ }
192
+ }
193
+
194
+ // 触发保存事件
195
+ emit(event, data);
196
+ }
197
+ function dynamicClasses(item) {
198
+ return item.freeze ? 'disabled-color' : '';
199
+ }
200
+ // 禁止未冻结列拖动到冻结列的上方或中间
201
+ function onDragMove(evt, val) {
202
+ // 获取拖拽项的索引
203
+ const draggedIndex = Array.from(evt.from.children).indexOf(evt.dragged);
204
+ const draggedItem = val[draggedIndex];
205
+
206
+ // 获取目标项的索引
207
+ let relatedIndex = Array.from(evt.to.children).indexOf(evt.related);
208
+ // willInsertAfter 为 true 时,目标索引要+1
209
+ if (evt.willInsertAfter && relatedIndex !== -1) {
210
+ relatedIndex += 1;
211
+ }
212
+ // 如果 related 为空,说明拖到最后
213
+ if (evt.related == null) {
214
+ relatedIndex = val.length;
215
+ }
216
+
217
+ const frozenCount = val.filter((item) => item.freeze).length;
218
+
219
+ // 未冻结列不能拖到冻结区(前frozenCount个)内部或前面
220
+ if (!draggedItem.freeze && relatedIndex < frozenCount) {
221
+ return false;
222
+ }
223
+ // 冻结列只能在冻结区内移动
224
+ if (draggedItem.freeze && relatedIndex >= frozenCount) {
225
+ return false;
226
+ }
227
+ return true;
228
+ }
229
+ </script>
230
+
231
+ <style lang="scss" scoped>
232
+ .disabled-color {
233
+ color: #ccc !important;
234
+ cursor: not-allowed !important;
235
+ }
236
+ :deep(.el-space--vertical) {
237
+ padding: 5px 0 0 16px;
238
+ position: relative;
239
+ top: 5px;
240
+ z-index: 9999;
241
+ }
242
+ </style>