@burh/nuxt-core 1.0.384 → 1.0.385

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.
@@ -47,6 +47,10 @@
47
47
  export default {
48
48
  name: 'dropzone-file-upload',
49
49
  props: {
50
+ haveErrorUpload:{
51
+ type: Boolean,
52
+ default: false
53
+ },
50
54
  options: {
51
55
  type: Object,
52
56
  default: () => ({})
@@ -118,6 +122,13 @@
118
122
  this.dropzone.removeAllFiles(true);
119
123
  }
120
124
  },
125
+ watch:{
126
+ haveErrorUpload(value){
127
+ if(value){
128
+ this.removeAllFiles();
129
+ }
130
+ }
131
+ },
121
132
  async mounted() {
122
133
  this.initDropzone()
123
134
  }
@@ -0,0 +1,138 @@
1
+ <template>
2
+ <div class="dropzone mb-3 dz-clickable"
3
+ :class="[multiple ? 'dropzone-multiple': 'dropzone-single']">
4
+ <div class="fallback">
5
+ <div class="custom-file">
6
+ <input type="file"
7
+ class="custom-file-input"
8
+ id="projectCoverUploads"
9
+ :multiple="multiple">
10
+ <label class="custom-file-label" for="projectCoverUploads">Choose file</label>
11
+ </div>
12
+ </div>
13
+ <div class="dz-preview dz-preview-single"
14
+ v-if="!multiple"
15
+ :class="previewClasses"
16
+ ref="previewSingle">
17
+ <div class="dz-preview-cover">
18
+ <img class="dz-preview-img" data-dz-thumbnail>
19
+ </div>
20
+ </div>
21
+ <ul v-else
22
+ class="dz-preview dz-preview-multiple list-group list-group-lg list-group-flush"
23
+ :class="previewClasses"
24
+ ref="previewMultiple">
25
+ <li class="list-group-item px-0">
26
+ <div class="row align-items-center">
27
+ <div class="col-auto">
28
+ <div class="avatar">
29
+ <img class="avatar-img rounded" data-dz-thumbnail>
30
+ </div>
31
+ </div>
32
+ <div class="col ml--3">
33
+ <h4 class="mb-1" data-dz-name>...</h4>
34
+ <p class="small text-muted mb-0" data-dz-size>...</p>
35
+ </div>
36
+ <div class="col-auto">
37
+ <button data-dz-remove="true" class="btn btn-danger btn-sm">
38
+ <i class="fas fa-trash"></i>
39
+ </button>
40
+ </div>
41
+ </div>
42
+ </li>
43
+ </ul>
44
+ </div>
45
+ </template>
46
+ <script>
47
+ export default {
48
+ name: 'dropzone-video-upload',
49
+ props: {
50
+ haveErrorUpload:{
51
+ type: Boolean,
52
+ default: false
53
+ },
54
+ options: {
55
+ type: Object,
56
+ default: () => ({})
57
+ },
58
+ value: [String, Object, Array],
59
+ url: {
60
+ type: String,
61
+ default: 'http://'
62
+ },
63
+ multiple: Boolean,
64
+ previewClasses: [String, Object, Array]
65
+ },
66
+ model: {
67
+ prop: 'value',
68
+ event: 'change'
69
+ },
70
+ data() {
71
+ return {
72
+ currentFile: null,
73
+ files: [],
74
+ showList: false,
75
+ }
76
+ },
77
+ methods: {
78
+ async initDropzone() {
79
+ let Dropzone = await import('dropzone')
80
+ Dropzone = Dropzone.default || Dropzone
81
+ Dropzone.autoDiscover = false
82
+ let preview = this.multiple ? this.$refs.previewMultiple : this.$refs.previewSingle;
83
+ let self = this
84
+ let finalOptions = {
85
+ ...this.options,
86
+ url: this.url,
87
+ thumbnailWidth: null,
88
+ thumbnailHeight: null,
89
+ previewsContainer: preview,
90
+ previewTemplate: preview.innerHTML,
91
+ maxFiles: (!this.multiple) ? 1 : null,
92
+ init: function () {
93
+ this.on("addedfile", function (file) {
94
+ if (!self.multiple && self.currentFile) {
95
+ // this.removeFile(this.currentFile);
96
+ }
97
+ self.currentFile = file;
98
+ })
99
+ }
100
+ }
101
+ this.dropzone = new Dropzone(this.$el, finalOptions)
102
+ preview.innerHTML = ''
103
+ let evtList = ['drop', 'dragstart', 'dragend', 'dragenter', 'dragover', 'addedfile', 'removedfile', 'thumbnail', 'error', 'processing', 'uploadprogress', 'sending', 'success', 'complete', 'canceled', 'maxfilesreached', 'maxfilesexceeded', 'processingmultiple', 'sendingmultiple', 'successmultiple', 'completemultiple', 'canceledmultiple', 'totaluploadprogress', 'reset', 'queuecomplete']
104
+ evtList.forEach(evt => {
105
+ this.dropzone.on(evt, (data, message) => {
106
+ this.$emit(evt, data, message);
107
+
108
+ if (evt === 'addedfile') {
109
+ this.files.push(data)
110
+ this.$emit('change', this.files);
111
+ } else if (evt === 'removedfile') {
112
+ let index = this.files.findIndex(f => f.upload.uuid === data.upload.uuid)
113
+ if (index !== -1) {
114
+ this.files.splice(index, 1);
115
+ }
116
+ this.$emit('change', this.files);
117
+ }
118
+ })
119
+ })
120
+ },
121
+ removeAllFiles() {
122
+ this.dropzone.removeAllFiles(true);
123
+ }
124
+ },
125
+ watch:{
126
+ haveErrorUpload(value){
127
+ if(value){
128
+ this.removeAllFiles();
129
+ }
130
+ }
131
+ },
132
+ async mounted() {
133
+ this.initDropzone()
134
+ }
135
+ }
136
+ </script>
137
+ <style>
138
+ </style>
@@ -1,243 +1,243 @@
1
- <template>
2
- <nuxt-link :to="`/recrutamento/vaga/${job.id}`" class="recruitment__card">
3
- <article>
4
- <header class="recruitment__card__header">
5
- <div class="recruitment__card__header__status">
6
- <job-status-dropdown
7
- :status="job.status"
8
- @select="handleChangeJobStatus"
9
- />
10
- </div>
11
- <div class="recruitment__card__header__actions">
12
- <el-tooltip placement="top" content="Anotações">
13
- <button
14
- class="action__item"
15
- @click.stop.prevent="$emit('notes-click')"
16
- >
17
- <i class="far fa-comment-alt"></i>
18
- </button>
19
- </el-tooltip>
20
-
21
- <el-tooltip placement="top" content="Compartilhar">
22
- <button
23
- class="action__item"
24
- @click.stop.prevent="$emit('share-click')"
25
- >
26
- <i class="fas fa-share-alt"></i>
27
- </button>
28
- </el-tooltip>
29
- </div>
30
- </header>
31
-
32
- <section class="recruitment__card__content">
33
- <span class="recruitment__card__content__date">Publicada {{fromNow(job.published_at)}}</span>
34
- <h2 class="recruitment__card__content__title">
35
- {{ job.title }}
36
- <el-tooltip v-if="job.handicapped" placement="top" content="PCD">
37
- <i class="fas fa-wheelchair pcd"></i>
38
- </el-tooltip>
39
- <el-tooltip v-if="job.is_private" placement="top" content="Privada">
40
- <i v-if="job.is_private" class="fas fa-lock pcd"></i>
41
- </el-tooltip>
42
-
43
- <el-tooltip v-if="job.is_internal" placement="top" content="Interna">
44
- <i v-if="job.is_internal" class="fas fa-building pcd"></i>
45
- </el-tooltip>
46
-
47
- <el-tooltip v-if="job.is_urgency" placement="top" content="Urgente">
48
- <i v-if="job.is_urgency" class="fas fa-clock pcd"></i>
49
- </el-tooltip>
50
- </h2>
51
- <span class="recruitment__card__content__id">{{ job.id }}</span>
52
-
53
- <div class="recruitment__card__info">
54
- <p class="recruitment__card__info__text"><span>{{ job.info.applieds }}</span>Inscritos</p>
55
- <p class="recruitment__card__info__text"><span>{{ job.info.positions }}</span>Posição</p>
56
- <p class="recruitment__card__info__text"><span>{{ job.info.hireds }}</span>Contratados</p>
57
- <p class="recruitment__card__info__text"><span>{{ job.info.reproveds }}</span>Reprovados</p>
58
- </div>
59
- </section>
60
-
61
- <footer class="recruitment__card__footer">
62
- <p class="recruitment__card__footer__title">EQUIPE RESPONSÁVEL</p>
63
- <div class="recruitment__card__footer__images">
64
- <el-tooltip
65
- v-for="user in job.team"
66
- :key="user.id"
67
- placement="top"
68
- :content="user.name"
69
- >
70
- <img
71
- :src="(user.avatar) ? user.avatar : getNameInitials(user.name, user.last_name)"
72
- :alt="user.name"
73
- >
74
- </el-tooltip>
75
- </div>
76
- </footer>
77
- </article>
78
- </nuxt-link>
79
- </template>
80
-
81
- <script>
82
- import moment from 'moment';
83
- import 'moment/locale/pt-br';
84
-
85
- import JobStatusDropdown from '@burh/nuxt-core/components/burh-ds/Dropdown/JobStatusDropdown.vue';
86
-
87
- export default {
88
- name: 'recruitment-card',
89
- components: {
90
- JobStatusDropdown
91
- },
92
- props: {
93
- job: {
94
- type: Object,
95
- default: () => []
96
- }
97
- },
98
- methods: {
99
- getNameInitials(name, last_name) {
100
- const avatarUrl = process.env.routes.avatar;
101
-
102
- let userAvatarName;
103
-
104
- if (name && last_name) {
105
- userAvatarName = `${name.toUpperCase().charAt(0)}${last_name.toUpperCase().charAt(0)}`;
106
- } else if (name && last_name === null) {
107
- userAvatarName = name;
108
- } else {
109
- userAvatarName = 'BURH';
110
- }
111
-
112
- return avatarUrl.replace(':size', '64x64').replace(':initials', userAvatarName);
113
- },
114
- fromNow(date, format = 'YYYYMMDD') {
115
- return moment(date, format).fromNow();
116
- },
117
- handleChangeJobStatus(id) {
118
- this.$emit('select', id);
119
- }
120
- }
121
- };
122
- </script>
123
-
124
- <style lang="scss" scoped>
125
- .recruitment__card {
126
- cursor: pointer;
127
- background: #fff;
128
- box-shadow: 0 3px 20px rgba(0, 0, 0, 0.08);
129
- padding: 20px;
130
- border-radius: 4px;
131
- border: none;
132
- text-align: initial;
133
- color: #1D364B;
134
- transition: transform 0.25s;
135
- &:focus {
136
- outline: none;
137
- transform: translateY(-5px);
138
- }
139
- &:hover {
140
- transform: translateY(-5px);
141
- }
142
-
143
- &__header {
144
- display: flex;
145
- align-items: center;
146
- justify-content: space-between;
147
- padding: 5px 0;
148
- &__actions {
149
- display: flex;
150
- align-items: center;
151
- .action__item {
152
- cursor: pointer;
153
- width: 42px;
154
- height: 42px;
155
- border-radius: 100px;
156
- transition: background 0.5s;
157
- display: flex;
158
- align-items: center;
159
- justify-content: center;
160
- background: transparent;
161
- border: 0;
162
- position: relative;
163
- &:not(:disabled):hover {
164
- background: rgba(0, 0, 0, 0.08);
165
- }
166
- &:focus {
167
- outline: none;
168
- background: rgba(0, 0, 0, 0.08);
169
- }
170
- &:not(:first-child) {
171
- margin-left: 5px;
172
- }
173
- i {
174
- color: #AEB6BE;
175
- }
176
- }
177
- }
178
- }
179
-
180
- &__content {
181
- &__date {
182
- font-size: 0.875rem;
183
- font-weight: 400;
184
- color: #AEB6BE;
185
- }
186
- &__title {
187
- font-size: 1.275rem;
188
- color: #1D364B;
189
- margin-bottom: 0;
190
- .pcd {
191
- color: #1F8CEB;
192
- margin-left: 5px;
193
- }
194
- }
195
- &__id {
196
- font-size: 0.875rem;
197
- font-weight: 600;
198
- color: #525F7F;
199
- }
200
- }
201
-
202
- &__info {
203
- padding: 20px 0;
204
- &__text {
205
- margin-bottom: 0;
206
- font-size: 1rem;
207
- font-weight: 500;
208
- span {
209
- margin-right: 5px;
210
- color: #1F8CEB;
211
- }
212
- }
213
- }
214
-
215
- &__footer {
216
- border-top: 1px solid #E9E9E9;
217
- padding-top: 10px;
218
- &__title {
219
- color: #525F7F;
220
- font-size: 0.875rem;
221
- font-weight: 600;
222
- margin-bottom: 0;
223
- }
224
- &__images {
225
- display: flex;
226
- align-items: center;
227
- user-select: none;
228
- img {
229
- $size: 32px;
230
- display: block;
231
- width: $size;
232
- height: $size;
233
- object-fit: cover;
234
- border-radius: 100px;
235
- border: 2px solid #fff;
236
- &:not(:first-child) {
237
- margin-left: -10px;
238
- }
239
- }
240
- }
241
- }
242
- }
243
- </style>
1
+ <template>
2
+ <nuxt-link :to="`/recrutamento/vaga/${job.id}`" class="recruitment__card">
3
+ <article>
4
+ <header class="recruitment__card__header">
5
+ <div class="recruitment__card__header__status">
6
+ <job-status-dropdown
7
+ :status="job.status"
8
+ @select="handleChangeJobStatus"
9
+ />
10
+ </div>
11
+ <div class="recruitment__card__header__actions">
12
+ <el-tooltip placement="top" content="Anotações">
13
+ <button
14
+ class="action__item"
15
+ @click.stop.prevent="$emit('notes-click')"
16
+ >
17
+ <i class="far fa-comment-alt"></i>
18
+ </button>
19
+ </el-tooltip>
20
+
21
+ <el-tooltip placement="top" content="Compartilhar">
22
+ <button
23
+ class="action__item"
24
+ @click.stop.prevent="$emit('share-click')"
25
+ >
26
+ <i class="fas fa-share-alt"></i>
27
+ </button>
28
+ </el-tooltip>
29
+ </div>
30
+ </header>
31
+
32
+ <section class="recruitment__card__content">
33
+ <span class="recruitment__card__content__date">Publicada {{fromNow(job.published_at)}}</span>
34
+ <h2 class="recruitment__card__content__title">
35
+ {{ job.title }}
36
+ <el-tooltip v-if="job.handicapped" placement="top" content="PCD">
37
+ <i class="fas fa-wheelchair pcd"></i>
38
+ </el-tooltip>
39
+ <el-tooltip v-if="job.is_private" placement="top" content="Privada">
40
+ <i v-if="job.is_private" class="fas fa-lock pcd"></i>
41
+ </el-tooltip>
42
+
43
+ <el-tooltip v-if="job.is_internal" placement="top" content="Interna">
44
+ <i v-if="job.is_internal" class="fas fa-building pcd"></i>
45
+ </el-tooltip>
46
+
47
+ <el-tooltip v-if="job.is_urgency" placement="top" content="Urgente">
48
+ <i v-if="job.is_urgency" class="fas fa-clock pcd"></i>
49
+ </el-tooltip>
50
+ </h2>
51
+ <span class="recruitment__card__content__id">{{ job.id }}</span>
52
+
53
+ <div class="recruitment__card__info">
54
+ <p class="recruitment__card__info__text"><span>{{ job.info.applieds }}</span>Inscritos</p>
55
+ <p class="recruitment__card__info__text"><span>{{ job.info.positions }}</span>Posição</p>
56
+ <p class="recruitment__card__info__text"><span>{{ job.info.hireds }}</span>Contratados</p>
57
+ <p class="recruitment__card__info__text"><span>{{ job.info.reproveds }}</span>Reprovados</p>
58
+ </div>
59
+ </section>
60
+
61
+ <footer class="recruitment__card__footer">
62
+ <p class="recruitment__card__footer__title">EQUIPE RESPONSÁVEL</p>
63
+ <div class="recruitment__card__footer__images">
64
+ <el-tooltip
65
+ v-for="user in job.team"
66
+ :key="user.id"
67
+ placement="top"
68
+ :content="user.name"
69
+ >
70
+ <img
71
+ :src="(user.avatar) ? user.avatar : getNameInitials(user.name, user.last_name)"
72
+ :alt="user.name"
73
+ >
74
+ </el-tooltip>
75
+ </div>
76
+ </footer>
77
+ </article>
78
+ </nuxt-link>
79
+ </template>
80
+
81
+ <script>
82
+ import moment from 'moment';
83
+ import 'moment/locale/pt-br';
84
+
85
+ import JobStatusDropdown from '@burh/nuxt-core/components/burh-ds/Dropdown/JobStatusDropdown.vue';
86
+
87
+ export default {
88
+ name: 'recruitment-card',
89
+ components: {
90
+ JobStatusDropdown
91
+ },
92
+ props: {
93
+ job: {
94
+ type: Object,
95
+ default: () => []
96
+ }
97
+ },
98
+ methods: {
99
+ getNameInitials(name, last_name) {
100
+ const avatarUrl = process.env.routes.avatar;
101
+
102
+ let userAvatarName;
103
+
104
+ if (name && last_name) {
105
+ userAvatarName = `${name.toUpperCase().charAt(0)}${last_name.toUpperCase().charAt(0)}`;
106
+ } else if (name && last_name === null) {
107
+ userAvatarName = name;
108
+ } else {
109
+ userAvatarName = 'BURH';
110
+ }
111
+
112
+ return avatarUrl.replace(':size', '64x64').replace(':initials', userAvatarName);
113
+ },
114
+ fromNow(date, format = 'YYYYMMDD') {
115
+ return moment(date, format).fromNow();
116
+ },
117
+ handleChangeJobStatus(id) {
118
+ this.$emit('select', id);
119
+ }
120
+ }
121
+ };
122
+ </script>
123
+
124
+ <style lang="scss" scoped>
125
+ .recruitment__card {
126
+ cursor: pointer;
127
+ background: #fff;
128
+ box-shadow: 0 3px 20px rgba(0, 0, 0, 0.08);
129
+ padding: 20px;
130
+ border-radius: 4px;
131
+ border: none;
132
+ text-align: initial;
133
+ color: #1D364B;
134
+ transition: transform 0.25s;
135
+ &:focus {
136
+ outline: none;
137
+ transform: translateY(-5px);
138
+ }
139
+ &:hover {
140
+ transform: translateY(-5px);
141
+ }
142
+
143
+ &__header {
144
+ display: flex;
145
+ align-items: center;
146
+ justify-content: space-between;
147
+ padding: 5px 0;
148
+ &__actions {
149
+ display: flex;
150
+ align-items: center;
151
+ .action__item {
152
+ cursor: pointer;
153
+ width: 42px;
154
+ height: 42px;
155
+ border-radius: 100px;
156
+ transition: background 0.5s;
157
+ display: flex;
158
+ align-items: center;
159
+ justify-content: center;
160
+ background: transparent;
161
+ border: 0;
162
+ position: relative;
163
+ &:not(:disabled):hover {
164
+ background: rgba(0, 0, 0, 0.08);
165
+ }
166
+ &:focus {
167
+ outline: none;
168
+ background: rgba(0, 0, 0, 0.08);
169
+ }
170
+ &:not(:first-child) {
171
+ margin-left: 5px;
172
+ }
173
+ i {
174
+ color: #AEB6BE;
175
+ }
176
+ }
177
+ }
178
+ }
179
+
180
+ &__content {
181
+ &__date {
182
+ font-size: 0.875rem;
183
+ font-weight: 400;
184
+ color: #AEB6BE;
185
+ }
186
+ &__title {
187
+ font-size: 1.275rem;
188
+ color: #1D364B;
189
+ margin-bottom: 0;
190
+ .pcd {
191
+ color: #1F8CEB;
192
+ margin-left: 5px;
193
+ }
194
+ }
195
+ &__id {
196
+ font-size: 0.875rem;
197
+ font-weight: 600;
198
+ color: #525F7F;
199
+ }
200
+ }
201
+
202
+ &__info {
203
+ padding: 20px 0;
204
+ &__text {
205
+ margin-bottom: 0;
206
+ font-size: 1rem;
207
+ font-weight: 500;
208
+ span {
209
+ margin-right: 5px;
210
+ color: #1F8CEB;
211
+ }
212
+ }
213
+ }
214
+
215
+ &__footer {
216
+ border-top: 1px solid #E9E9E9;
217
+ padding-top: 10px;
218
+ &__title {
219
+ color: #525F7F;
220
+ font-size: 0.875rem;
221
+ font-weight: 600;
222
+ margin-bottom: 0;
223
+ }
224
+ &__images {
225
+ display: flex;
226
+ align-items: center;
227
+ user-select: none;
228
+ img {
229
+ $size: 32px;
230
+ display: block;
231
+ width: $size;
232
+ height: $size;
233
+ object-fit: cover;
234
+ border-radius: 100px;
235
+ border: 2px solid #fff;
236
+ &:not(:first-child) {
237
+ margin-left: -10px;
238
+ }
239
+ }
240
+ }
241
+ }
242
+ }
243
+ </style>