@idooel/components 0.0.0 → 0.0.1-beta.10

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 (57) hide show
  1. package/dist/@idooel/components.esm.css +123 -0
  2. package/dist/@idooel/components.esm.js +5446 -0
  3. package/dist/@idooel/components.umd.css +117 -0
  4. package/dist/@idooel/components.umd.js +4307 -654
  5. package/package.json +9 -4
  6. package/packages/alert/index.js +5 -0
  7. package/packages/alert/src/index.vue +46 -0
  8. package/packages/batch-export/index.js +5 -0
  9. package/packages/batch-export/src/index.vue +107 -0
  10. package/packages/button/src/index.vue +32 -2
  11. package/packages/checkbox/index.js +5 -0
  12. package/packages/checkbox/src/index.vue +44 -0
  13. package/packages/composite-components/attachment/index.js +0 -0
  14. package/packages/composite-components/attachment/src/index.vue +15 -0
  15. package/packages/composite-components/button-group/src/index.vue +5 -6
  16. package/packages/composite-components/modal-import/index.js +5 -0
  17. package/packages/composite-components/modal-import/src/index.vue +28 -0
  18. package/packages/composite-components/search-area/src/index.vue +124 -27
  19. package/packages/date-range/index.js +5 -0
  20. package/packages/date-range/src/index.vue +42 -0
  21. package/packages/form/index.js +5 -0
  22. package/packages/form/src/index.vue +149 -0
  23. package/packages/form-group-model/index.js +5 -0
  24. package/packages/form-group-model/src/index.vue +206 -0
  25. package/packages/form-model/index.js +5 -0
  26. package/packages/form-model/src/index.vue +148 -0
  27. package/packages/icon/index.js +5 -0
  28. package/packages/icon/src/index.vue +32 -0
  29. package/packages/index.js +36 -4
  30. package/packages/input/src/index.vue +9 -1
  31. package/packages/input-number/index.js +5 -0
  32. package/packages/input-number/src/index.vue +24 -0
  33. package/packages/modal/index.js +5 -0
  34. package/packages/modal/src/index.vue +142 -0
  35. package/packages/radio/index.js +5 -0
  36. package/packages/radio/src/index.vue +48 -0
  37. package/packages/select/src/index.vue +40 -1
  38. package/packages/select-entity/index.js +5 -0
  39. package/packages/select-entity/src/index.vue +114 -0
  40. package/packages/step-model/index.js +5 -0
  41. package/packages/step-model/src/index.vue +38 -0
  42. package/packages/table/src/action.vue +89 -2
  43. package/packages/table/src/index.vue +70 -1
  44. package/packages/textarea/index.js +5 -0
  45. package/packages/textarea/src/index.vue +53 -0
  46. package/packages/theme/form.scss +22 -0
  47. package/packages/theme/index.scss +28 -0
  48. package/packages/theme/variables.scss +56 -0
  49. package/packages/tpl/src/index.vue +21 -4
  50. package/packages/tree/src/index.vue +9 -4
  51. package/packages/tree-table-model/src/index.vue +72 -47
  52. package/packages/upload/index.js +5 -0
  53. package/packages/upload/src/index.vue +349 -0
  54. package/packages/utils/index.js +10 -0
  55. package/scripts/rollup.config.js +5 -11
  56. package/scripts/rollup.esm.config.js +12 -0
  57. package/scripts/rollup.umd.config.js +4 -4
@@ -0,0 +1,22 @@
1
+ .has-error {
2
+ .ele-upload__wrapper {
3
+ .ele-upload__inner {
4
+ border-color: $error-06;
5
+ .ele-upload__area {
6
+ .ele-upload__area--icon {
7
+ .anticon-cloud-upload {
8
+ color: $error-06;
9
+ }
10
+ }
11
+ .ele-upload__area--text {
12
+ .ele-upload__message {
13
+ color: $error-06;
14
+ }
15
+ .ele-upload__ext {
16
+ color: $error-03;
17
+ }
18
+ }
19
+ }
20
+ }
21
+ }
22
+ }
@@ -0,0 +1,28 @@
1
+ @import 'variables.scss';
2
+ @import 'form.scss';
3
+
4
+ $primary: $primary-06;
5
+
6
+ :root {
7
+ --idooel-primary-color: #{$primary};
8
+ --idoole-black-02: #{$black-02};
9
+ --idoole-black-06: #{$black-06};
10
+ --idoole-black-07: #{$black-07};
11
+ --idoole-black-008: #{$black-08};
12
+ //Table
13
+ --idooel-border-width: 2;
14
+ --idooel-border-color: #53a8ff;
15
+ --idooel-column-border-width: 1;
16
+ --idooel-column-border-color: #d9ecff;
17
+
18
+ //Form
19
+ --idooel-form-title-border-color: #{$black-04};
20
+ --idooel-form-upload-bg-color: #{$black-01};
21
+ --idooel-form-upload-border-hover-color: #{$primary-05};
22
+ --idooel-form-border-radius: #{$border-radius-base}px;
23
+ --idooel-form-border-err-color: #{$error-06};
24
+
25
+ //Link
26
+ --idooel-link-06: #{$link-06};
27
+ --idooel-link-03: #{$link-03};
28
+ }
@@ -0,0 +1,56 @@
1
+ $primary-01: #E6F7FF !default;
2
+ $primary-02: #BAE7FF !default;
3
+ $primary-03: #91D5FF !default;
4
+ $primary-04: #69C0FF !default;
5
+ $primary-05: #40A9FF !default;
6
+ $primary-06: #1890FF !default;
7
+ $primary-07: #096DD9 !default;
8
+ $primary-08: #0050B3 !default;
9
+ $primary-09: #003A8C !default;
10
+ $primary-10: #002766 !default;
11
+
12
+ $link-01: #E6F7FF;
13
+ $link-03: #91D5FF;
14
+ $link-05: #40A9FF;
15
+ $link-06: #1890FF;
16
+ $link-07: #096DD9;
17
+
18
+ $error-01: #FFF1F0;
19
+ $error-03: #FFA39E;
20
+ $error-05: #FF4D4F;
21
+ $error-06: #F5222D;
22
+ $error-07: #CF1322;
23
+
24
+ $warning-01: #FFFBE6;
25
+ $warning-03: #FFE58F;
26
+ $warning-05: #FFC53D;
27
+ $warning-06: #FAAD14;
28
+ $warning-07: #D48806;
29
+
30
+ $success-01: #F6FFED;
31
+ $success-03: #B7EB8F;
32
+ $success-05: #73D13D;
33
+ $success-06: #52C41A;
34
+ $success-07: #389E0D;
35
+
36
+ //White
37
+ $black-01: rgba(0, 0, 0, 0.02);
38
+ $black-02: rgba(0, 0, 0, 0.04);
39
+ $black-03: rgba(0, 0, 0, 0.08);
40
+ $black-04: rgba(0, 0, 0, 0.16);
41
+ $black-05: rgba(0, 0, 0, 0.24);
42
+ $black-06: rgba(0, 0, 0, 0.44);
43
+ $black-07: rgba(0, 0, 0, 0.64);
44
+ $black-08: rgba(0, 0, 0, 0.88);
45
+
46
+ //Black
47
+ $white-01: rgba(255, 255, 255, 0.04);
48
+ $white-02: rgba(255, 255, 255, 0.08);
49
+ $white-03: rgba(255, 255, 255, 0.16);
50
+ $white-04: rgba(255, 255, 255, 0.24);
51
+ $white-05: rgba(255, 255, 255, 0.44);
52
+ $white-06: rgba(255, 255, 255, 0.64);
53
+ $white-07: rgba(255, 255, 255, 0.88);
54
+ $white-08: #fff;
55
+
56
+ $border-radius-base: 2;
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <component
3
- v-if="modelName"
3
+ v-if="modelNameValidator.existed"
4
4
  :is="modelName"
5
5
  :ref="genModelRef"
6
6
  v-bind="$attrs"
@@ -9,12 +9,16 @@
9
9
  <slot :name="name" v-bind="data"></slot>
10
10
  </template>
11
11
  </component>
12
- <div v-else>未正确配置模版</div>
12
+ <div v-else v-html="modelNameValidator.message"></div>
13
13
  </template>
14
14
 
15
15
  <script>
16
16
  import EleTreeTableModel from '../../tree-table-model/src/index.vue'
17
+ import EleFormGroupModel from '../../form-group-model/src/index.vue'
18
+ import EleFormModel from '../../form-model/src/index.vue'
19
+ import EleStepModel from '../../step-model/src/index.vue'
17
20
  import { v4 as uuidv4 } from 'uuid'
21
+ import { models } from '../../index.js'
18
22
  export default {
19
23
  name: 'ele-tpl',
20
24
  props: {
@@ -23,9 +27,19 @@ export default {
23
27
  }
24
28
  },
25
29
  components: {
26
- [EleTreeTableModel.name]: EleTreeTableModel
30
+ [EleTreeTableModel.name]: EleTreeTableModel,
31
+ [EleFormGroupModel.name]: EleFormGroupModel,
32
+ [EleStepModel.name]: EleStepModel,
33
+ [EleFormModel.name]: EleFormModel
27
34
  },
28
35
  computed: {
36
+ modelNameValidator () {
37
+ const target = models.find(model => model.name === this.modelName)
38
+ return {
39
+ existed: !!target,
40
+ message: !!target ? '' : `Model <span style="color:red;">${this.modelName}</span> not found`
41
+ }
42
+ },
29
43
  genModelRef () {
30
44
  return uuidv4()
31
45
  }
@@ -36,4 +50,7 @@ export default {
36
50
  }
37
51
  }
38
52
  }
39
- </script>
53
+ </script>
54
+ <style lang="scss">
55
+ @import '../../theme/index.scss';
56
+ </style>
@@ -88,10 +88,15 @@ export default {
88
88
  <style lang="scss" scoped>
89
89
  .g-tree__wrapper {
90
90
  overflow: hidden;
91
- ::v-deep .ant-tree-node-content-wrapper {
92
- text-overflow: ellipsis;
93
- overflow: hidden;
94
- white-space: nowrap;
91
+ ::v-deep .ant-tree {
92
+ .ant-tree-node-content-wrapper {
93
+ text-overflow: ellipsis;
94
+ overflow: hidden;
95
+ white-space: nowrap;
96
+ }
97
+ .ant-tree-node-selected {
98
+ color: #fff;
99
+ }
95
100
  }
96
101
  }
97
102
  </style>
@@ -1,29 +1,35 @@
1
1
  <template>
2
- <section class="model__tree-table">
3
- <section :ref="modelTreeWrapper" class="model__tree--wrapper">
4
- <ele-tree
5
- :tree-data="treeData"
6
- :defaultExpandedKeys="defaultExpandedKeys"
7
- :defaultSelectedKeys="defaultSelectedKeys"
8
- @select="selectTreeNode"
9
- :replace-fields="treeMeta.replaceFields || replaceFields">
10
- </ele-tree>
2
+ <section class="ele model__tree-table">
3
+ <section class="model__tree-table--container" v-if="showTree">
4
+ <div class="model__tree--title"></div>
5
+ <section :ref="modelTreeWrapper" class="model__tree--wrapper">
6
+ <ele-tree
7
+ :tree-data="treeData"
8
+ :defaultExpandedKeys="defaultExpandedKeys"
9
+ :defaultSelectedKeys="defaultSelectedKeys"
10
+ @select="selectTreeNode"
11
+ :replace-fields="treeMeta.replaceFields || replaceFields">
12
+ </ele-tree>
13
+ </section>
11
14
  </section>
12
- <section :ref="modelTableWrapper" class="model__table--wrapper">
13
- <ele-search-area :ref="searchArea" @search="onSearch" :data-source="searchMeta.elements"></ele-search-area>
14
- <ele-button-group :ref="buttonGroup" @click="handleClickButtonGroup" style="margin-top: 16px" :data-source="getButtonGroupElements"></ele-button-group>
15
- <ele-table
16
- v-on="$listeners"
17
- :loading="loading"
18
- :columns="columns"
19
- :total="total"
20
- :actions="actions"
21
- :pageSize="pageSize"
22
- :pageSizeOptions="pageSizeOptions"
23
- :data-source="tableData"
24
- @change-page="onChangePage"
25
- style="margin-top: 8px;"
26
- ></ele-table>
15
+ <section class="model__table--container">
16
+ <div class="model__table--title"></div>
17
+ <section :ref="modelTableWrapper" class="model__table--wrapper">
18
+ <ele-search-area :ref="searchArea" @search="onSearch" :data-source="searchMeta.elements"></ele-search-area>
19
+ <ele-button-group v-on="$listeners" :ref="buttonGroup" @click="handleClickButtonGroup" style="margin-top: 16px" :data-source="getButtonGroupElements"></ele-button-group>
20
+ <ele-table
21
+ v-on="$listeners"
22
+ :loading="loading"
23
+ :columns="columns"
24
+ :total="total"
25
+ :actions="actions"
26
+ :pageSize="pageSize"
27
+ :pageSizeOptions="pageSizeOptions"
28
+ :data-source="tableData"
29
+ @change-page="onChangePage"
30
+ style="margin-top: 8px;"
31
+ ></ele-table>
32
+ </section>
27
33
  </section>
28
34
  </section>
29
35
  </template>
@@ -61,6 +67,12 @@ export default {
61
67
  default: () => ({})
62
68
  }
63
69
  },
70
+ provide () {
71
+ return {
72
+ requestTreeData: this.requestTreeData,
73
+ requestTableData: this.requestTableData
74
+ }
75
+ },
64
76
  data () {
65
77
  return {
66
78
  treeData: [],
@@ -81,6 +93,9 @@ export default {
81
93
  }
82
94
  },
83
95
  computed: {
96
+ showTree () {
97
+ return !!Object.keys(this.treeMeta).length
98
+ },
84
99
  buttonGroup () {
85
100
  return uuidv4()
86
101
  },
@@ -160,13 +175,15 @@ export default {
160
175
  }
161
176
  },
162
177
  async created () {
163
- this.treeData = await this.requestTreeData()
164
- const [defaultTreeNode = {}] = this.treeData
165
- this.defaultExpandedKeys = [defaultTreeNode[this.replaceFields.key]]
166
- this.defaultSelectedKeys = [defaultTreeNode[this.replaceFields.key]]
178
+ if (this.showTree) {
179
+ this.treeData = await this.requestTreeData()
180
+ const [defaultTreeNode = {}] = this.treeData
181
+ this.defaultExpandedKeys = [defaultTreeNode[this.replaceFields.key]]
182
+ this.defaultSelectedKeys = [defaultTreeNode[this.replaceFields.key]]
183
+ this.currentTreeNodeData = defaultTreeNode
184
+ }
167
185
  const { fieldMap } = this.tableMeta
168
- this.currentTreeNodeData = defaultTreeNode
169
- this.tableData = await this.requestTableData(this.execTableFieldMap(fieldMap, defaultTreeNode))
186
+ this.tableData = await this.requestTableData(this.execTableFieldMap(fieldMap, this.currentTreeNodeData))
170
187
  },
171
188
  methods: {
172
189
  handleClickButtonGroup (props) {
@@ -268,23 +285,31 @@ export default {
268
285
  </script>
269
286
 
270
287
  <style lang="scss" scoped>
271
- .model__tree-table {
272
- background: transparent;
273
- display: flex;
274
- flex-direction: row;
275
- width: 100%;
276
- .model__tree--wrapper {
277
- width: 240px;
278
- background: #fff;
279
- flex-shrink: 0;
280
- padding: 16px;
281
- box-sizing: border-box;
282
- margin-right: 16px;
283
- overflow-y: auto;
284
- }
285
- .model__table--wrapper {
286
- min-width: 0;
287
- background: #fff;
288
+ .ele {
289
+ &.model__tree-table {
290
+ background: transparent;
291
+ display: flex;
292
+ flex-direction: row;
293
+ width: 100%;
294
+ .model__tree-table--container {
295
+ .model__tree--wrapper {
296
+ width: 240px;
297
+ background: #fff;
298
+ flex-shrink: 0;
299
+ padding: 16px;
300
+ box-sizing: border-box;
301
+ margin-right: 16px;
302
+ overflow-y: auto;
303
+ }
304
+ }
305
+ .model__table--container {
306
+ width: 100%;
307
+ min-width: 0;
308
+ background: #fff;
309
+ .model__table--wrapper {
310
+ background: #fff;
311
+ }
312
+ }
288
313
  }
289
314
  }
290
315
  </style>
@@ -0,0 +1,5 @@
1
+ import EleUpload from './src/index.vue'
2
+
3
+ EleUpload.install = Vue => Vue.component(EleUpload.name, EleUpload)
4
+
5
+ export default EleUpload
@@ -0,0 +1,349 @@
1
+ <template>
2
+ <div class="ele-upload__wrapper">
3
+ <FileUpload
4
+ class="ele-upload__inner"
5
+ v-show="isShowUploadContainer"
6
+ v-model="files"
7
+ :ref="uploadRef"
8
+ :drop="drop"
9
+ :chunk-enabled="chunkEnabled"
10
+ :chunk="chunkConfig"
11
+ :accept="accept"
12
+ :size="fileSizeLimit"
13
+ :post-action="postAction"
14
+ :multiple="multiple"
15
+ :maximum="getMaximum"
16
+ @input-file="onWatchInputFiles"
17
+ @input="onWatchFiles"
18
+ style="width: 100%;">
19
+ <section class="ele-upload__area">
20
+ <div class="ele-upload__area--icon">
21
+ <ele-icon type="cloud-upload"></ele-icon>
22
+ </div>
23
+ <div class="ele-upload__area--text">
24
+ <div class="ele-upload__message">单击或拖动文件到该区域以上传</div>
25
+ <div class="ele-upload__ext">文件小于{{ size }}M</div>
26
+ </div>
27
+ </section>
28
+ </FileUpload>
29
+ <section class="ele-files__wrapper">
30
+ <div class="ele-file__item" v-for="(file, idx) in files" :key="idx">
31
+ <div class="ele-file__suffix--icon">
32
+ <ele-icon type="icon-doc"></ele-icon>
33
+ </div>
34
+ <div class="ele-file__name">
35
+ <div class="ele-file__inner" @click="handleClickDownload(file)">{{ file.name }}</div>
36
+ <div v-if="!file.success" class="ele-uplpad__progress">
37
+ <a-progress :strokeWidth="2" :percent="Number(file.progress)" size="small" />
38
+ </div>
39
+ </div>
40
+ <div class="ele-file__delete" v-if="file.success || file.error">
41
+ <span class="ele-file__size">{{ (file.size / byteConversion).toFixed(2) }}M</span>
42
+ <span class="ele-file__delete--icon" @click="handleClickDelete(file)">
43
+ <ele-icon type="delete"></ele-icon>
44
+ </span>
45
+ </div>
46
+ </div>
47
+ </section>
48
+ </div>
49
+ </template>
50
+
51
+ <script>
52
+ import FileUpload from 'vue-upload-component'
53
+ import { v4 as uuidv4 } from 'uuid'
54
+ import { route, net } from '@idooel/shared'
55
+ import EleIcon from '../../icon/src/index.vue'
56
+ export default {
57
+ name: 'ele-upload',
58
+ components: {
59
+ FileUpload,
60
+ EleIcon
61
+ },
62
+ model: {
63
+ prop: 'value',
64
+ event: 'change'
65
+ },
66
+ props: {
67
+ url: {
68
+ type: String,
69
+ default: '/zuul/api-file/workbench/file'
70
+ },
71
+ size: {
72
+ type: Number,
73
+ default: 100
74
+ },
75
+ accept: {
76
+ type: String
77
+ },
78
+ maximum: {
79
+ type: Number,
80
+ default: 10
81
+ },
82
+ multiple: {
83
+ type: Boolean,
84
+ default: false
85
+ },
86
+ drop: {
87
+ type: Boolean,
88
+ default: true
89
+ },
90
+ value: {
91
+ type: [String, Array]
92
+ },
93
+ querys: {
94
+ type: Object,
95
+ default: () => ({
96
+ _csrf: 'c81f993f-f044-45bb-b3af-2977d335042d',
97
+ _t: new Date().valueOf()
98
+ })
99
+ },
100
+ headers: {
101
+ type: Object,
102
+ default: () => ({})
103
+ },
104
+ byteConversion: {
105
+ type: Number,
106
+ default: 1024 * 1024
107
+ },
108
+ chunkEnabled: {
109
+ type: Boolean,
110
+ default: true
111
+ }
112
+ },
113
+ data() {
114
+ return {
115
+ files: [],
116
+ saveToServerAsyncPageTimer: null
117
+ }
118
+ },
119
+ computed: {
120
+ getPayloads () {
121
+ return {
122
+ override: false
123
+ }
124
+ },
125
+ chunkConfig () {
126
+ const ret = route.toQueryString(this.querys)
127
+ return {
128
+ action: `${window.prefixPath}/zuul/api-file/workbench/file/temp/chunk/vue`,
129
+ headers: {
130
+ 'X-XSRF-TOKEN': localStorage.getItem('token')
131
+ },
132
+ minSize: 3 * this.byteConversion,
133
+ maxActive: 3,
134
+ maxRetries: 5,
135
+ startBody: {
136
+ override: true,
137
+ path: '/cw'
138
+ },
139
+ uploadBody: {
140
+ override: true,
141
+ path: '/cw'
142
+ },
143
+ finishBody: {
144
+ override: true,
145
+ path: '/cw'
146
+ }
147
+ }
148
+ },
149
+ isFileUploadSuccessed () {
150
+ return this.files.every(file => file.success)
151
+ },
152
+ isShowUploadContainer () {
153
+ if (this.multiple) {
154
+ if (this.isFileUploadSuccessed && this.files.length >= this.maximum) {
155
+ return false
156
+ } else {
157
+ return true
158
+ }
159
+ } else {
160
+ if (this.isFileUploadSuccessed && this.files.length >= 1) {
161
+ return false
162
+ } else {
163
+ return true
164
+ }
165
+ }
166
+ },
167
+ getMaximum () {
168
+ return this.multiple ? this.maximum : 1
169
+ },
170
+ fileSizeLimit () {
171
+ return this.size * this.byteConversion
172
+ },
173
+ postAction () {
174
+ const ret = route.toQueryString(this.querys)
175
+ return `${window.prefixPath}${this.url}?${ret}`
176
+ },
177
+ uploadRef () {
178
+ return uuidv4()
179
+ },
180
+ fileSuffixIcon () {
181
+ return {
182
+ 'doc': { name: 'icon-doc' },
183
+ }
184
+ },
185
+ fileIds () {
186
+ const fileIds = this.files.map(file => {
187
+ return file.response.data.fileID
188
+ })
189
+ return this.multiple ? fileIds : fileIds[0]
190
+ }
191
+ },
192
+ methods: {
193
+ handleClickDownload (file) {
194
+ console.log('download file', file)
195
+ },
196
+ handleClickDelete (file) {
197
+ this.$refs[this.uploadRef].remove(file)
198
+ this.$emit('change', this.fileIds)
199
+ },
200
+ onWatchFiles (files) {
201
+ this.files = files
202
+ if (this.isFileUploadSuccessed) {
203
+ this.$emit('change', this.fileIds)
204
+ }
205
+ },
206
+ async saveToServerAsyncPage (payloads = {}) {
207
+ net.post('zuul/api-file/workbench/file/temp/saveToServerAsyncPage', payloads, {
208
+ headers: {
209
+ 'Content-Type': 'multipart/form-data'
210
+ }
211
+ }).then(resp =>{
212
+ const { data } = resp
213
+ if (data !== 'saveToServerAsyncPage') {
214
+ clearInterval(this.saveToServerAsyncPageTimer)
215
+ }
216
+ })
217
+ // const ret = await net.post({
218
+ // url: 'zuul/api-file/workbench/file/temp/saveToServerAsyncPage',
219
+ // method: 'POST',
220
+ // data: { ...payloads }
221
+ // }).then(resp => {
222
+ // const { data: { data, code, message } } = resp
223
+ // if (code !== '2000') {
224
+ // this.$Message.error(message)
225
+ // return
226
+ // }
227
+ // if (data !== 'saveToServerAsyncPage') {
228
+ // clearInterval(timer)
229
+ // const { fileID, size } = data
230
+ // this.$emit('on-success', { ...data, fileId: fileID })
231
+ // this.$Message.success('同步成功')
232
+ // return { fileId: fileID, size }
233
+ // }
234
+ // })
235
+ // return ret
236
+ },
237
+ onWatchInputFiles (newFile, oldFile) {
238
+ if (newFile && !oldFile) {
239
+ // add file
240
+ console.log('add', newFile)
241
+ }
242
+ if (newFile && oldFile) {
243
+ // update file
244
+ console.log('update', newFile)
245
+ const { success, active, chunk, response } = newFile
246
+ if (chunk && success && !active) {
247
+ console.log('chunk end')
248
+ const { data: { file, type } } = response
249
+ const payloads = {
250
+ filePath: file.match(/\/cw(.*)/)[0],
251
+ asyncID: uuidv4(),
252
+ isDeleteOrigin: false,
253
+ toImage: type === 'pdf' ? true : false,
254
+ unzip: type === 'zip' ? true : false,
255
+ _csrf: localStorage.getItem('token')
256
+ }
257
+ this.saveToServerAsyncPageTimer = setInterval(() => {
258
+ this.saveToServerAsyncPage(payloads)
259
+ }, 2000)
260
+ }
261
+ }
262
+ if (!newFile && oldFile) {
263
+ // delete file
264
+ console.log('delete')
265
+ }
266
+ if (Boolean(newFile) !== Boolean(oldFile) || oldFile.error !== newFile.error) {
267
+ if (!this.$refs[this.uploadRef].active) {
268
+ this.$refs[this.uploadRef].active = true
269
+ }
270
+ }
271
+ }
272
+ }
273
+ }
274
+ </script>
275
+
276
+ <style lang="scss" scoped>
277
+ ::v-deep .ele-upload__inner {
278
+ opacity: 1 !important;
279
+ cursor: pointer;
280
+ border: 1px dashed var(--idooel-form-title-border-color);
281
+ background: var(--idooel-form-upload-bg-color) !important;
282
+ &:hover {
283
+ border-color: var(--idooel-form-upload-border-hover-color);
284
+ }
285
+ border-radius: var(--idooel-form-border-radius);
286
+ }
287
+ .ele-upload__wrapper {
288
+ width: 100%;
289
+ .ele-upload__area {
290
+ padding: 16px;
291
+ width: 100%;
292
+ height: 80px;
293
+ display: flex;
294
+ flex-direction: row;
295
+ .ele-upload__area--icon {
296
+ .anticon-cloud-upload {
297
+ font-size: 48px;
298
+ color: var(--idooel-primary-color);
299
+ }
300
+ }
301
+ .ele-upload__area--text {
302
+ margin-left: 16px;
303
+ .ele-upload__message {
304
+ font-size: 16px;
305
+ color: var(--idoole-black-008);
306
+ text-align: left;
307
+ }
308
+ .ele-upload__ext {
309
+ text-align: left;
310
+ font-size: 14px;
311
+ color: var(--idoole-black-06);
312
+ }
313
+ }
314
+ }
315
+ .ele-files__wrapper {
316
+ .ele-file__item {
317
+ width: 100%;
318
+ margin-top: 8px;
319
+ padding: 8px 12px;
320
+ border-radius: var(--idooel-form-border-radius);
321
+ background: var(--idooel-form-upload-bg-color);
322
+ display: flex;
323
+ flex-direction: row;
324
+ align-items: center;
325
+ .ele-file__suffix--icon {}
326
+ .ele-file__name {
327
+ flex: 1;
328
+ text-align: left;
329
+ white-space: nowrap;
330
+ overflow: hidden;
331
+ font-size: 14px;
332
+ margin-left: 8px;
333
+ cursor: pointer;
334
+ .ele-file__inner {
335
+ overflow: hidden;
336
+ text-overflow: ellipsis;
337
+ }
338
+ }
339
+ .ele-file__delete {
340
+ margin-left: 8px;
341
+ .ele-file__delete--icon {
342
+ margin-left: 8px;
343
+ cursor: pointer;
344
+ }
345
+ }
346
+ }
347
+ }
348
+ }
349
+ </style>