@burh/nuxt-core 1.0.508 → 1.1.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.
@@ -36,6 +36,46 @@
36
36
  </template>
37
37
  </button>
38
38
  </div>
39
+ <!-- CV -->
40
+ <div class="about content-block mt-5 ml-3 mr-3" v-if="userData.user_curriculum && userData.user_curriculum.annex">
41
+ <h5 class="font-weight-bold">
42
+ Cadastro Simplificado
43
+ <el-tooltip
44
+ placement="top"
45
+ >
46
+ <div style="max-width: 300px" slot="content">
47
+ O cadastro simplificado é uma solução criada pela Burh para facilitar a candidatura em vagas sem que seja necessário o preenchimento completo do perfil do candidato, apenas a importação do currículo.
48
+ </div>
49
+
50
+ <span class="text-primary ml-2">
51
+ <i class="fas fa-info-circle"></i>
52
+ </span>
53
+ </el-tooltip>
54
+
55
+ <button
56
+ class="cv__box mt-2"
57
+ :disabled="isCvDownloading"
58
+ @click="() => !isCvDownloading && handleDownloadCv(userData.user_curriculum)"
59
+ >
60
+ <template v-if="!isCvDownloading">
61
+ <span>
62
+ <i class="fas fa-download"></i>
63
+ </span>
64
+
65
+ <span class="font-weight-bold">Baixar Currículo</span>
66
+ </template>
67
+
68
+ <template v-else>
69
+ <span>
70
+ <i class="fas fa-spinner spin"></i>
71
+ </span>
72
+
73
+ <span class="font-weight-bold">Baixando</span>
74
+ </template>
75
+ </button>
76
+ </h5>
77
+ </div>
78
+ <!-- CV -->
39
79
  <!-- SOBRE -->
40
80
  <div class="about content-block mt-5 ml-3 mr-3">
41
81
  <h5 class="font-weight-bold">Sobre</h5>
@@ -198,6 +238,8 @@ import getPrefixes from '~/util/getPrefixes.js';
198
238
  import { mask } from 'vue-the-mask';
199
239
  import { Dropdown, DropdownMenu, DropdownItem } from 'element-ui';
200
240
 
241
+ import swal from 'sweetalert2';
242
+
201
243
  export default {
202
244
  name: 'user-cv-middle',
203
245
  directives: { mask },
@@ -262,7 +304,8 @@ export default {
262
304
  isLocked: !this.companyHasProduct(
263
305
  this.$store.state.loja && this.$store.state.loja.showableProducts && this.$store.state.loja.showableProducts['INTERACAO_USUARIO'] || false
264
306
  ),
265
- unlockedButtons: ['share', 'moveTo']
307
+ unlockedButtons: ['share', 'moveTo'],
308
+ isCvDownloading: false
266
309
  };
267
310
  },
268
311
  mounted() {
@@ -296,6 +339,45 @@ export default {
296
339
  }
297
340
  },
298
341
  methods: {
342
+ showMessage(message, type = 'success') {
343
+ const Toast = swal.mixin({
344
+ toast: true,
345
+ position: 'top-end',
346
+ showConfirmButton: false,
347
+ timer: 3000,
348
+ });
349
+
350
+ return Toast.fire({
351
+ type: type,
352
+ title: message,
353
+ });
354
+ },
355
+ async handleDownloadCv(data) {
356
+ this.isCvDownloading = true;
357
+
358
+ const response = await this.$axios.get(data.annex, {
359
+ responseType: 'blob'
360
+ })
361
+ .then(res => URL.createObjectURL(res.data))
362
+ .catch(err => {
363
+ return {
364
+ error: true,
365
+ message: (err && err.response && err.response.data && err.response.data.message) || 'Falha ao baixar arquivo'
366
+ };
367
+ });
368
+
369
+ this.isCvDownloading = false;
370
+
371
+ if (response.error) {
372
+ this.showMessage(response.message, 'error');
373
+ return;
374
+ }
375
+
376
+ const link = document.createElement('a');
377
+ link.href = response;
378
+ link.download = `${data.user_id}.pdf`;
379
+ link.click();
380
+ },
299
381
  phoneMask(v) {
300
382
 
301
383
  let r = v.replace(/\D/g, '');
@@ -467,6 +549,46 @@ export default {
467
549
  <style lang="scss" scoped>
468
550
  @import '@burh/nuxt-core/assets/sass/burh-ds/variables/_colors.scss';
469
551
 
552
+ .cv__box {
553
+ cursor: pointer;
554
+ margin: 0;
555
+ border: 0;
556
+ width: 100%;
557
+ display: flex;
558
+ align-items: center;
559
+ justify-content: center;
560
+ gap: 1rem;
561
+ background: rgba(#5865f2, 0.2);
562
+ color: #5865F2;
563
+ font-size: 1rem;
564
+ padding: 1.25rem 1rem;
565
+ border-radius: 0.25rem;
566
+ transition: background-color 0.25s, color 0.25s;
567
+
568
+ &:hover:not(:disabled) {
569
+ background: rgba(#5865f2, 0.3);
570
+ }
571
+
572
+ &:disabled {
573
+ cursor: not-allowed !important;
574
+ background: #f5f5f5;
575
+ color: #c8c8c8;
576
+ }
577
+
578
+ @keyframes spinner {
579
+ from {
580
+ transform: rotate(0);
581
+ }
582
+ to {
583
+ transform: rotate(360deg);
584
+ }
585
+ }
586
+
587
+ .spin {
588
+ animation: spinner 0.75s infinite linear;
589
+ }
590
+ }
591
+
470
592
  /deep/ .dropdown__content {
471
593
  &, .title__content {
472
594
  width: 100%;
@@ -1,90 +1,90 @@
1
- <template>
2
- <div class="input__container__icon" :class="{ 'input__disabled': disabled || isLocked }" @click="isLocked && $emit('open-plan-modal')">
3
- <label for="search">
4
- <template v-if="!isLocked">
5
- <i class="fas fa-search"></i>
6
- </template>
7
- <template v-else>
8
- <i class="fas fa-lock"></i>
9
- </template>
10
- </label>
11
- <input type="text" name="search" id="search" :disabled="disabled || isLocked" :placeholder="placeholder" v-model="searchModel" @change="$emit('change')">
12
- </div>
13
- </template>
14
-
15
- <script>
16
- export default {
17
- name: 'search-input',
18
- props: {
19
- disabled: {
20
- type: Boolean,
21
- default: false
22
- },
23
- search: String,
24
- placeholder: {
25
- type: String,
26
- default: 'Busque por vaga'
27
- },
28
- isLocked: {
29
- type: Boolean,
30
- default: false
31
- },
32
- value: {
33
- type: String,
34
- default: ''
35
- }
36
- },
37
- computed: {
38
- searchModel: {
39
- get() {
40
- return this.value || this.search;
41
- },
42
- set(value) {
43
- this.$emit('search', value);
44
- this.$emit('input', value);
45
- }
46
- }
47
- },
48
- mounted() {
49
- this.searchModel = this.search;
50
- },
51
- };
52
- </script>
53
-
54
- <style lang="scss" scoped>
55
- .input__container__icon {
56
- position: relative;
57
- display: flex;
58
- align-items: center;
59
- border-radius: 100px;
60
- max-width: 270px;
61
- overflow: hidden;
62
- border: 1px solid #E9ECEF;
63
- input {
64
- background: transparent;
65
- border: 0;
66
- outline: none;
67
- padding: 5px 0;
68
- width: 100%;
69
- }
70
- label {
71
- margin: 0;
72
- display: block;
73
- }
74
- i {
75
- padding: 0 10px;
76
- color: #AEB6BE;
77
- }
78
- &.input__disabled {
79
- background-color: #E9ECEF;
80
- cursor: not-allowed !important;
81
- input {
82
- color: #AEB6BE !important;
83
- cursor: not-allowed !important;
84
- }
85
- label {
86
- cursor: not-allowed !important;
87
- }
88
- }
89
- }
90
- </style>
1
+ <template>
2
+ <div class="input__container__icon" :class="{ 'input__disabled': disabled || isLocked }" @click="isLocked && $emit('open-plan-modal')">
3
+ <label for="search">
4
+ <template v-if="!isLocked">
5
+ <i class="fas fa-search"></i>
6
+ </template>
7
+ <template v-else>
8
+ <i class="fas fa-lock"></i>
9
+ </template>
10
+ </label>
11
+ <input type="text" name="search" id="search" :disabled="disabled || isLocked" :placeholder="placeholder" v-model="searchModel" @change="$emit('change')">
12
+ </div>
13
+ </template>
14
+
15
+ <script>
16
+ export default {
17
+ name: 'search-input',
18
+ props: {
19
+ disabled: {
20
+ type: Boolean,
21
+ default: false
22
+ },
23
+ search: String,
24
+ placeholder: {
25
+ type: String,
26
+ default: 'Busque por vaga'
27
+ },
28
+ isLocked: {
29
+ type: Boolean,
30
+ default: false
31
+ },
32
+ value: {
33
+ type: String,
34
+ default: ''
35
+ }
36
+ },
37
+ computed: {
38
+ searchModel: {
39
+ get() {
40
+ return this.value || this.search;
41
+ },
42
+ set(value) {
43
+ this.$emit('search', value);
44
+ this.$emit('input', value);
45
+ }
46
+ }
47
+ },
48
+ mounted() {
49
+ this.searchModel = this.search;
50
+ },
51
+ };
52
+ </script>
53
+
54
+ <style lang="scss" scoped>
55
+ .input__container__icon {
56
+ position: relative;
57
+ display: flex;
58
+ align-items: center;
59
+ border-radius: 100px;
60
+ max-width: 270px;
61
+ overflow: hidden;
62
+ border: 1px solid #E9ECEF;
63
+ input {
64
+ background: transparent;
65
+ border: 0;
66
+ outline: none;
67
+ padding: 5px 0;
68
+ width: 100%;
69
+ }
70
+ label {
71
+ margin: 0;
72
+ display: block;
73
+ }
74
+ i {
75
+ padding: 0 10px;
76
+ color: #AEB6BE;
77
+ }
78
+ &.input__disabled {
79
+ background-color: #E9ECEF;
80
+ cursor: not-allowed !important;
81
+ input {
82
+ color: #AEB6BE !important;
83
+ cursor: not-allowed !important;
84
+ }
85
+ label {
86
+ cursor: not-allowed !important;
87
+ }
88
+ }
89
+ }
90
+ </style>
package/package.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "@burh/nuxt-core",
3
- "version": "1.0.508",
3
+ "version": "1.1.0",
4
4
  "description": "Design System and Components.",
5
5
  "author": "Burh",
6
+ "private": false,
6
7
  "scripts": {
7
8
  "dev": "nuxt",
8
9
  "build": "nuxt build",