widget.qw 1.0.83 → 1.0.85

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 (108) hide show
  1. package/.env.development +10 -10
  2. package/.env.production +8 -8
  3. package/README.md +75 -75
  4. package/build/style.css +521 -471
  5. package/build/widget.qw.es.js +253 -84
  6. package/build/widget.qw.umd.js +252 -83
  7. package/index.html +17 -17
  8. package/package.json +47 -47
  9. package/src/App.vue +26 -26
  10. package/src/api/index.js +173 -165
  11. package/src/components/AuditBar.vue +396 -396
  12. package/src/components/BillCard.vue +164 -164
  13. package/src/components/CascaderPicker.vue +132 -132
  14. package/src/components/CascaderPop.vue +375 -371
  15. package/src/components/CheckGroup.vue +113 -113
  16. package/src/components/DatetimeDropdown.vue +62 -0
  17. package/src/components/{DatetimePicker/index.vue → DatetimePicker.vue} +124 -124
  18. package/src/components/DayDropdown.vue +56 -56
  19. package/src/components/FilePicker.vue +169 -169
  20. package/src/components/HeadBar.vue +130 -0
  21. package/src/components/Input.vue +80 -80
  22. package/src/components/MonthDropdown.vue +51 -51
  23. package/src/components/MultiPicker.vue +123 -123
  24. package/src/components/ObjsEditor.vue +334 -334
  25. package/src/components/SecretNotify.js +5 -5
  26. package/src/components/Sheet.vue +92 -92
  27. package/src/components/SingleApiPicker.vue +108 -108
  28. package/src/components/SinglePicker.vue +102 -102
  29. package/src/components/SingleUserSelector.vue +425 -425
  30. package/src/components/Switch.vue +64 -64
  31. package/src/components/TreePicker.vue +113 -113
  32. package/src/components/UserPicker.vue +106 -106
  33. package/src/components/UserProfile.vue +129 -129
  34. package/src/components/UsersPicker.vue +118 -118
  35. package/src/components/YearDropdown.vue +59 -59
  36. package/src/components/data_selector.vue +303 -303
  37. package/src/components/image_picker.vue +123 -123
  38. package/src/components/images_picker.vue +195 -195
  39. package/src/components/index.js +172 -162
  40. package/src/components/mult_list_selector.vue +155 -155
  41. package/src/components/subdepartment_selector.vue +481 -481
  42. package/src/components/user_selector.vue +639 -639
  43. package/src/components/widget/DataPop.vue +95 -95
  44. package/src/components/{DatetimePicker → widget}/DatetimePop.vue +342 -342
  45. package/src/components/widget/TreePop.vue +88 -88
  46. package/src/components/widget/UserPop.vue +347 -347
  47. package/src/main.js +117 -117
  48. package/src/router/index.ts +183 -173
  49. package/src/util/array_util.js +32 -32
  50. package/src/util/auth_util.js +72 -72
  51. package/src/util/bool_util.js +5 -5
  52. package/src/util/bus.js +1 -1
  53. package/src/util/cache_util.js +18 -18
  54. package/src/util/errer_code.js +6 -6
  55. package/src/util/eval_util.js +19 -19
  56. package/src/util/icon_util.js +36 -36
  57. package/src/util/image_util.js +27 -27
  58. package/src/util/index.js +57 -57
  59. package/src/util/num_util.js +70 -70
  60. package/src/util/obj_util.js +28 -28
  61. package/src/util/request.js +73 -73
  62. package/src/util/request_json.js +71 -71
  63. package/src/util/request_json_mute.js +65 -65
  64. package/src/util/request_upload.js +79 -79
  65. package/src/util/route_util.js +31 -31
  66. package/src/util/str_util.js +143 -143
  67. package/src/util/time_util.js +406 -406
  68. package/src/util/toast_util.js +24 -24
  69. package/src/util/tree_util.js +153 -153
  70. package/src/util/uuid_util.js +9 -9
  71. package/src/util/validate.js +182 -182
  72. package/src/util/vue_filter.js +223 -223
  73. package/src/views/auditbar/index.vue +78 -78
  74. package/src/views/billcard/index.vue +48 -48
  75. package/src/views/cascaderpicker/index.vue +0 -0
  76. package/src/views/cascaderpicker/userpicker.vue +183 -0
  77. package/src/views/cascaderpop/index.vue +90 -90
  78. package/src/views/checkgroup/index.vue +35 -35
  79. package/src/views/dataSelector/index.vue +48 -48
  80. package/src/views/datetimedropdown/index.vue +34 -0
  81. package/src/views/datetimepicker/index.vue +34 -34
  82. package/src/views/daydropdown/index.vue +31 -31
  83. package/src/views/filepicker/index.vue +32 -32
  84. package/src/views/headbar/index.vue +28 -0
  85. package/src/views/home/index.vue +0 -0
  86. package/src/views/imagepicker/index.vue +31 -31
  87. package/src/views/imagespicker/index.vue +37 -37
  88. package/src/views/input/index.vue +35 -35
  89. package/src/views/monthdropdown/index.vue +31 -31
  90. package/src/views/multListSelector/index.vue +61 -61
  91. package/src/views/multipicker/index.vue +36 -36
  92. package/src/views/objseditor/index.vue +277 -277
  93. package/src/views/productSelector/index.vue +35 -35
  94. package/src/views/projectpicker/index.vue +41 -41
  95. package/src/views/secretnotify/index.vue +27 -27
  96. package/src/views/sheet/index.vue +45 -45
  97. package/src/views/singlepicker/index.vue +35 -35
  98. package/src/views/subdepartmentSelector/index.vue +40 -40
  99. package/src/views/switch/index.vue +34 -34
  100. package/src/views/treepicker/index.vue +41 -41
  101. package/src/views/userSelector/index.vue +54 -54
  102. package/src/views/userSelectorNew/index.vue +45 -45
  103. package/src/views/userpicker/index.vue +43 -43
  104. package/src/views/userprofile/index.vue +30 -30
  105. package/src/views/userspicker/index.vue +43 -43
  106. package/src/views/yeardropdown/index.vue +32 -32
  107. package/src/vm/index.js +1 -1
  108. package/vite.config.ts +122 -122
@@ -1,35 +1,35 @@
1
- <template>
2
- <div class="page">
3
- <WidgetQwDatetimePicker
4
- v-model="data.date"
5
- label="时间"
6
- :auth="data.auth" />
7
- </div>
8
- </template>
9
-
10
- <script setup>
11
- import { onMounted, reactive, watch } from "vue";
12
-
13
- const data = reactive({
14
- auth:'disabled',
15
- date:'2025-01-01 01:02:03'
16
- })
17
-
18
- watch(()=>data.codes,(newVal,oldVal)=>{
19
- console.log(newVal,oldVal)
20
- })
21
- </script>
22
-
23
- <style lang="scss" scoped>
24
- .page {
25
- height: 100vh;
26
- background: #fff;
27
- text-align: center;
28
- background-size: cover;
29
- display: flex;
30
- flex-direction: column;
31
- justify-content: flex-start;
32
- padding: 80px 15px 0 15px;
33
- box-sizing: border-box;
34
- }
1
+ <template>
2
+ <div class="page">
3
+ <WidgetQwDatetimePicker
4
+ v-model="data.date"
5
+ label="时间"
6
+ :auth="data.auth" />
7
+ </div>
8
+ </template>
9
+
10
+ <script setup>
11
+ import { onMounted, reactive, watch } from "vue";
12
+
13
+ const data = reactive({
14
+ auth:'disabled',
15
+ date:'2025-01-01 01:02:03'
16
+ })
17
+
18
+ watch(()=>data.codes,(newVal,oldVal)=>{
19
+ console.log(newVal,oldVal)
20
+ })
21
+ </script>
22
+
23
+ <style lang="scss" scoped>
24
+ .page {
25
+ height: 100vh;
26
+ background: #fff;
27
+ text-align: center;
28
+ background-size: cover;
29
+ display: flex;
30
+ flex-direction: column;
31
+ justify-content: flex-start;
32
+ padding: 80px 15px 0 15px;
33
+ box-sizing: border-box;
34
+ }
35
35
  </style>
@@ -1,31 +1,31 @@
1
- <template>
2
- <div class="page">
3
- <van-dropdown-menu>
4
- <widget-qw-day-dropdown v-model="formData.day" year="2025" month="2" />
5
- </van-dropdown-menu>
6
- </div>
7
- </template>
8
-
9
- <script setup>
10
- import { reactive, onMounted } from "vue";
11
- const formData = reactive({
12
- day: 0
13
- })
14
-
15
- onMounted(() => {
16
- })
17
- </script>
18
-
19
- <style lang="scss" scoped>
20
- .page {
21
- height: 100vh;
22
- background: #fff;
23
- text-align: center;
24
- background-size: cover;
25
- display: flex;
26
- flex-direction: column;
27
- justify-content: flex-start;
28
- padding: 80px 15px 0 15px;
29
- box-sizing: border-box;
30
- }
31
- </style>
1
+ <template>
2
+ <div class="page">
3
+ <van-dropdown-menu>
4
+ <widget-qw-day-dropdown v-model="formData.day" year="2025" month="2" />
5
+ </van-dropdown-menu>
6
+ </div>
7
+ </template>
8
+
9
+ <script setup>
10
+ import { reactive, onMounted } from "vue";
11
+ const formData = reactive({
12
+ day: 0
13
+ })
14
+
15
+ onMounted(() => {
16
+ })
17
+ </script>
18
+
19
+ <style lang="scss" scoped>
20
+ .page {
21
+ height: 100vh;
22
+ background: #fff;
23
+ text-align: center;
24
+ background-size: cover;
25
+ display: flex;
26
+ flex-direction: column;
27
+ justify-content: flex-start;
28
+ padding: 80px 15px 0 15px;
29
+ box-sizing: border-box;
30
+ }
31
+ </style>
@@ -1,33 +1,33 @@
1
- <template>
2
- <div class="page">
3
- <widget-qw-file-picker label="文件" multiple v-model="data.urls" :auth="data.auth" accept=".jpg,.png" />
4
- </div>
5
- </template>
6
-
7
- <script setup>
8
- import { onMounted, reactive, watch } from "vue";
9
-
10
- const data = reactive({
11
- auth:'require',
12
- // url: 'http://www.zjpsjdsb.online/static/QxI3PBaT.pdf'
13
- urls: ['http://www.zjpsjdsb.online/static/gxm6QYXR.png','http://www.zjpsjdsb.online/static/gxm6QYXR.png']
14
- })
15
-
16
- watch(()=>data.url,(newVal,oldVal)=>{
17
- console.log(newVal,oldVal)
18
- })
19
- </script>
20
-
21
- <style lang="scss" scoped>
22
- .page {
23
- height: 100vh;
24
- background: #fff;
25
- text-align: center;
26
- background-size: cover;
27
- display: flex;
28
- flex-direction: column;
29
- justify-content: flex-start;
30
- padding: 80px 15px 0 15px;
31
- box-sizing: border-box;
32
- }
1
+ <template>
2
+ <div class="page">
3
+ <widget-qw-file-picker label="文件" multiple v-model="data.urls" :auth="data.auth" accept=".jpg,.png" />
4
+ </div>
5
+ </template>
6
+
7
+ <script setup>
8
+ import { onMounted, reactive, watch } from "vue";
9
+
10
+ const data = reactive({
11
+ auth:'require',
12
+ // url: 'http://www.zjpsjdsb.online/static/QxI3PBaT.pdf'
13
+ urls: ['http://www.zjpsjdsb.online/static/gxm6QYXR.png','http://www.zjpsjdsb.online/static/gxm6QYXR.png']
14
+ })
15
+
16
+ watch(()=>data.url,(newVal,oldVal)=>{
17
+ console.log(newVal,oldVal)
18
+ })
19
+ </script>
20
+
21
+ <style lang="scss" scoped>
22
+ .page {
23
+ height: 100vh;
24
+ background: #fff;
25
+ text-align: center;
26
+ background-size: cover;
27
+ display: flex;
28
+ flex-direction: column;
29
+ justify-content: flex-start;
30
+ padding: 80px 15px 0 15px;
31
+ box-sizing: border-box;
32
+ }
33
33
  </style>
@@ -0,0 +1,28 @@
1
+ <template>
2
+ <div class="page">
3
+ <widget-qw-head-bar title="页面1" />
4
+ </div>
5
+ </template>
6
+
7
+ <script setup>
8
+ import QueryString from "qs";
9
+ import { ref, onMounted, reactive, watch } from "vue";
10
+
11
+
12
+ onMounted(() => {
13
+ })
14
+ </script>
15
+
16
+ <style lang="scss" scoped>
17
+ .page {
18
+ height: 100vh;
19
+ background: #fff;
20
+ text-align: center;
21
+ background-size: cover;
22
+ display: flex;
23
+ flex-direction: column;
24
+ justify-content: flex-start;
25
+ padding: 80px 15px 0 15px;
26
+ box-sizing: border-box;
27
+ }
28
+ </style>
Binary file
@@ -1,32 +1,32 @@
1
- <template>
2
- <div class="page">
3
- <widget-qw-image-picker label="图片" v-model="data.url" :auth="data.auth" />
4
- </div>
5
- </template>
6
-
7
- <script setup>
8
- import { onMounted, reactive, watch } from "vue";
9
-
10
- const data = reactive({
11
- auth:'require',
12
- url: ''
13
- })
14
-
15
- watch(()=>data.url,(newVal,oldVal)=>{
16
- console.log(newVal,oldVal)
17
- })
18
- </script>
19
-
20
- <style lang="scss" scoped>
21
- .page {
22
- height: 100vh;
23
- background: #fff;
24
- text-align: center;
25
- background-size: cover;
26
- display: flex;
27
- flex-direction: column;
28
- justify-content: flex-start;
29
- padding: 80px 15px 0 15px;
30
- box-sizing: border-box;
31
- }
1
+ <template>
2
+ <div class="page">
3
+ <widget-qw-image-picker label="图片" v-model="data.url" :auth="data.auth" />
4
+ </div>
5
+ </template>
6
+
7
+ <script setup>
8
+ import { onMounted, reactive, watch } from "vue";
9
+
10
+ const data = reactive({
11
+ auth:'require',
12
+ url: ''
13
+ })
14
+
15
+ watch(()=>data.url,(newVal,oldVal)=>{
16
+ console.log(newVal,oldVal)
17
+ })
18
+ </script>
19
+
20
+ <style lang="scss" scoped>
21
+ .page {
22
+ height: 100vh;
23
+ background: #fff;
24
+ text-align: center;
25
+ background-size: cover;
26
+ display: flex;
27
+ flex-direction: column;
28
+ justify-content: flex-start;
29
+ padding: 80px 15px 0 15px;
30
+ box-sizing: border-box;
31
+ }
32
32
  </style>
@@ -1,38 +1,38 @@
1
- <template>
2
- <div class="page">
3
- <widget-qw-images-picker label="图片列表" v-model="data.urls" :auth="data.auth" maxPreview=1 />
4
- </div>
5
- </template>
6
-
7
- <script setup>
8
- import { onMounted, reactive, watch } from "vue";
9
-
10
- const data = reactive({
11
- auth:'readonly',
12
- urls: []
13
- })
14
-
15
- watch(()=>data.url,(newVal,oldVal)=>{
16
- console.log(newVal,oldVal)
17
- })
18
-
19
- onMounted(()=>{
20
- setTimeout(()=>{
21
- data.auth = 'require'
22
- },3000)
23
- })
24
- </script>
25
-
26
- <style lang="scss" scoped>
27
- .page {
28
- height: 100vh;
29
- background: #fff;
30
- text-align: center;
31
- background-size: cover;
32
- display: flex;
33
- flex-direction: column;
34
- justify-content: flex-start;
35
- padding: 80px 15px 0 15px;
36
- box-sizing: border-box;
37
- }
1
+ <template>
2
+ <div class="page">
3
+ <widget-qw-images-picker label="图片列表" v-model="data.urls" :auth="data.auth" maxPreview=1 />
4
+ </div>
5
+ </template>
6
+
7
+ <script setup>
8
+ import { onMounted, reactive, watch } from "vue";
9
+
10
+ const data = reactive({
11
+ auth:'require',
12
+ urls: []
13
+ })
14
+
15
+ watch(()=>data.url,(newVal,oldVal)=>{
16
+ console.log(newVal,oldVal)
17
+ })
18
+
19
+ onMounted(()=>{
20
+ setTimeout(()=>{
21
+ data.auth = 'require'
22
+ },3000)
23
+ })
24
+ </script>
25
+
26
+ <style lang="scss" scoped>
27
+ .page {
28
+ height: 100vh;
29
+ background: #fff;
30
+ text-align: center;
31
+ background-size: cover;
32
+ display: flex;
33
+ flex-direction: column;
34
+ justify-content: flex-start;
35
+ padding: 80px 15px 0 15px;
36
+ box-sizing: border-box;
37
+ }
38
38
  </style>
@@ -1,36 +1,36 @@
1
- <template>
2
- <div class="page">
3
- <widget-qw-input label="单号" v-model.number="data.text"
4
- :auth="data.auth" :type="data.type" :rows="data.rows" :autosize="data.autosize" />
5
- </div>
6
- </template>
7
-
8
- <script setup>
9
- import { onMounted, reactive, watch } from "vue";
10
-
11
- const data = reactive({
12
- auth:'require',
13
- text: -9,
14
- type: 'number',
15
- rows: 1,
16
- autosize: true
17
- })
18
-
19
- watch(()=>data.text,(newVal,oldVal)=>{
20
- console.log(newVal,oldVal)
21
- })
22
- </script>
23
-
24
- <style lang="scss" scoped>
25
- .page {
26
- height: 100vh;
27
- background: #fff;
28
- text-align: center;
29
- background-size: cover;
30
- display: flex;
31
- flex-direction: column;
32
- justify-content: flex-start;
33
- padding: 80px 15px 0 15px;
34
- box-sizing: border-box;
35
- }
1
+ <template>
2
+ <div class="page">
3
+ <widget-qw-input label="单号" v-model.number="data.text"
4
+ :auth="data.auth" :type="data.type" :rows="data.rows" :autosize="data.autosize" />
5
+ </div>
6
+ </template>
7
+
8
+ <script setup>
9
+ import { onMounted, reactive, watch } from "vue";
10
+
11
+ const data = reactive({
12
+ auth:'require',
13
+ text: -9,
14
+ type: 'number',
15
+ rows: 1,
16
+ autosize: true
17
+ })
18
+
19
+ watch(()=>data.text,(newVal,oldVal)=>{
20
+ console.log(newVal,oldVal)
21
+ })
22
+ </script>
23
+
24
+ <style lang="scss" scoped>
25
+ .page {
26
+ height: 100vh;
27
+ background: #fff;
28
+ text-align: center;
29
+ background-size: cover;
30
+ display: flex;
31
+ flex-direction: column;
32
+ justify-content: flex-start;
33
+ padding: 80px 15px 0 15px;
34
+ box-sizing: border-box;
35
+ }
36
36
  </style>
@@ -1,31 +1,31 @@
1
- <template>
2
- <div class="page">
3
- <van-dropdown-menu>
4
- <widget-qw-month-dropdown v-model="formData.month" />
5
- </van-dropdown-menu>
6
- </div>
7
- </template>
8
-
9
- <script setup>
10
- import { reactive, onMounted } from "vue";
11
- const formData = reactive({
12
- month: 0
13
- })
14
-
15
- onMounted(() => {
16
- })
17
- </script>
18
-
19
- <style lang="scss" scoped>
20
- .page {
21
- height: 100vh;
22
- background: #fff;
23
- text-align: center;
24
- background-size: cover;
25
- display: flex;
26
- flex-direction: column;
27
- justify-content: flex-start;
28
- padding: 80px 15px 0 15px;
29
- box-sizing: border-box;
30
- }
31
- </style>
1
+ <template>
2
+ <div class="page">
3
+ <van-dropdown-menu>
4
+ <widget-qw-month-dropdown v-model="formData.month" />
5
+ </van-dropdown-menu>
6
+ </div>
7
+ </template>
8
+
9
+ <script setup>
10
+ import { reactive, onMounted } from "vue";
11
+ const formData = reactive({
12
+ month: 0
13
+ })
14
+
15
+ onMounted(() => {
16
+ })
17
+ </script>
18
+
19
+ <style lang="scss" scoped>
20
+ .page {
21
+ height: 100vh;
22
+ background: #fff;
23
+ text-align: center;
24
+ background-size: cover;
25
+ display: flex;
26
+ flex-direction: column;
27
+ justify-content: flex-start;
28
+ padding: 80px 15px 0 15px;
29
+ box-sizing: border-box;
30
+ }
31
+ </style>
@@ -1,61 +1,61 @@
1
- <template>
2
- <div class="page">
3
- <widget-qw-mult-list-selector
4
- v-model="formData.safetyConfirmations"
5
- :options="safetyConfirmationOptions"
6
- :tips="'根据现场实际情况勾选条目'"
7
- :disabled="false"
8
- />
9
- </div>
10
- </template>
11
-
12
- <script setup>
13
- import { ref, onMounted, reactive, watch } from "vue";
14
-
15
- const formData = ref({
16
- safetyConfirmations: [],
17
- });
18
-
19
- // 数据选项
20
- const safetyConfirmationOptions = ref([
21
- { value: "1", label: "1、已对本次作业人员及监护人员进行安全交底" },
22
- {
23
- value: "2",
24
- label: "2、提供并保持足够的照明和通风设备,保持有效连续通风和照明",
25
- },
26
- {
27
- value: "3",
28
- label: "3、确保通向该有限空间的管道系统封闭/上锁/挂牌,其操作系统不可用",
29
- },
30
- {
31
- value: "4",
32
- label:
33
- "4、有限空间作业人员及监护人员已配备应急手电。进入有限空间的照明电源电压不得超过36V,特别狭小、潮湿的有限空间高使用12V以下手电筒照明,灯罩完整,所有电源线无破损",
34
- },
35
- {
36
- value: "5",
37
- label: "5、进入有限空间作业人员已配备数量不少于一台的气体检测报警仪",
38
- },
39
- {
40
- value: "6",
41
- label:
42
- "6、产品下水后,进入有通海阀、门、盖、箱等的舱室,确保其不能异常开启,防止江水(海水)灌入",
43
- },
44
- { value: "7", label: "7、进入有限空间的气体胶管应完好有效,无漏气点" },
45
- { value: "8", label: "8、其他安全措施" },
46
- ]);
47
- </script>
48
-
49
- <style lang="scss" scoped>
50
- .page {
51
- height: 100vh;
52
- background: #fff;
53
- text-align: center;
54
- background-size: cover;
55
- display: flex;
56
- flex-direction: column;
57
- justify-content: flex-start;
58
- padding: 80px 15px 0 15px;
59
- box-sizing: border-box;
60
- }
61
- </style>
1
+ <template>
2
+ <div class="page">
3
+ <widget-qw-mult-list-selector
4
+ v-model="formData.safetyConfirmations"
5
+ :options="safetyConfirmationOptions"
6
+ :tips="'根据现场实际情况勾选条目'"
7
+ :disabled="false"
8
+ />
9
+ </div>
10
+ </template>
11
+
12
+ <script setup>
13
+ import { ref, onMounted, reactive, watch } from "vue";
14
+
15
+ const formData = ref({
16
+ safetyConfirmations: [],
17
+ });
18
+
19
+ // 数据选项
20
+ const safetyConfirmationOptions = ref([
21
+ { value: "1", label: "1、已对本次作业人员及监护人员进行安全交底" },
22
+ {
23
+ value: "2",
24
+ label: "2、提供并保持足够的照明和通风设备,保持有效连续通风和照明",
25
+ },
26
+ {
27
+ value: "3",
28
+ label: "3、确保通向该有限空间的管道系统封闭/上锁/挂牌,其操作系统不可用",
29
+ },
30
+ {
31
+ value: "4",
32
+ label:
33
+ "4、有限空间作业人员及监护人员已配备应急手电。进入有限空间的照明电源电压不得超过36V,特别狭小、潮湿的有限空间高使用12V以下手电筒照明,灯罩完整,所有电源线无破损",
34
+ },
35
+ {
36
+ value: "5",
37
+ label: "5、进入有限空间作业人员已配备数量不少于一台的气体检测报警仪",
38
+ },
39
+ {
40
+ value: "6",
41
+ label:
42
+ "6、产品下水后,进入有通海阀、门、盖、箱等的舱室,确保其不能异常开启,防止江水(海水)灌入",
43
+ },
44
+ { value: "7", label: "7、进入有限空间的气体胶管应完好有效,无漏气点" },
45
+ { value: "8", label: "8、其他安全措施" },
46
+ ]);
47
+ </script>
48
+
49
+ <style lang="scss" scoped>
50
+ .page {
51
+ height: 100vh;
52
+ background: #fff;
53
+ text-align: center;
54
+ background-size: cover;
55
+ display: flex;
56
+ flex-direction: column;
57
+ justify-content: flex-start;
58
+ padding: 80px 15px 0 15px;
59
+ box-sizing: border-box;
60
+ }
61
+ </style>