w-table-vue 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.
- package/.editorconfig +9 -0
- package/.eslintignore +3 -0
- package/.eslintrc.js +55 -0
- package/.jsdoc +25 -0
- package/LICENSE +21 -0
- package/README.md +109 -0
- package/SECURITY.md +5 -0
- package/babel.config.js +16 -0
- package/dist/w-table-vue.umd.js +7 -0
- package/dist/w-table-vue.umd.js.map +1 -0
- package/docs/examples/app.html +63 -0
- package/docs/examples/app.umd.js +7 -0
- package/docs/examples/app.umd.js.map +1 -0
- package/docs/examples/w-table-edit_default.html +525 -0
- package/docs/examples/w-table-edit_editable.html +528 -0
- package/docs/examples/w-table-edit_editable_checkId.html +529 -0
- package/docs/examples/w-table-edit_editable_checkId_opt.modifyDataWhenSave_save(call cmp. method).html +544 -0
- package/docs/examples/w-table-edit_editable_checkId_successMsgFromAddRow_errorMsgFromAddRow.html +539 -0
- package/docs/examples/w-table-edit_editable_inforPaddingStyle_menuBackgroundColor.html +534 -0
- package/docs/examples/w-table-edit_editable_language_checkId_tooltipAddRow.html +540 -0
- package/docs/examples/w-table-edit_editable_language_textLabelDataName_textPlaceholderDataName.html +535 -0
- package/docs/examples/w-table-edit_editable_no enableInfor.html +529 -0
- package/docs/examples/w-table-edit_editable_no enableMenu.html +529 -0
- package/docs/examples/w-table-edit_editable_opt.beforeAddRow.html +528 -0
- package/docs/examples/w-table-edit_editable_opt.kpConvertKeysWhenUploadData.html +528 -0
- package/docs/examples/w-table-edit_editable_opt.optForUploadData.html +528 -0
- package/docs/examples/w-table-edit_editable_slot btns-right.html +552 -0
- package/docs/examples/w-table-edit_fixIds (fix id).html +529 -0
- package/docs/examples/w-table-edit_hideIds (hide mappingId).html +529 -0
- package/docs/examples/w-table-edit_name_description.html +527 -0
- package/docs/examples/w-table-edit_no enableInfor.html +528 -0
- package/docs/examples/w-table-edit_no enableMenu.html +528 -0
- package/docs/examples/w-table-edit_opt.kpHead.html +527 -0
- package/docs/examples/w-table-edit_removeIdsWhenDownload (remove id, mappingId, order, isActive).html +530 -0
- package/docs/examples/w-table-edit_slot btns-left.html +551 -0
- package/docs/examples/w-table-edit_slot btns-right.html +551 -0
- package/docs/examples/w-table-edit_slot infor (name_description).html +544 -0
- package/docs/examples/w-table-edit_sortColIds (sort by order).html +528 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.eot +0 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.ttf +0 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.woff +0 -0
- package/docs/fonts/Montserrat/Montserrat-Bold.woff2 +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.eot +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.ttf +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.woff +0 -0
- package/docs/fonts/Montserrat/Montserrat-Regular.woff2 +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.eot +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +978 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.ttf +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff2 +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.eot +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +1049 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.ttf +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff +0 -0
- package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff2 +0 -0
- package/docs/index.html +84 -0
- package/docs/module-WTableEdit.html +1486 -0
- package/docs/scripts/collapse.js +39 -0
- package/docs/scripts/commonNav.js +28 -0
- package/docs/scripts/linenumber.js +25 -0
- package/docs/scripts/nav.js +12 -0
- package/docs/scripts/polyfill.js +4 -0
- package/docs/scripts/prettify/Apache-License-2.0.txt +202 -0
- package/docs/scripts/prettify/lang-css.js +2 -0
- package/docs/scripts/prettify/prettify.js +28 -0
- package/docs/scripts/search.js +99 -0
- package/docs/styles/jsdoc.css +776 -0
- package/docs/styles/prettify.css +80 -0
- package/package.json +66 -0
- package/public/index.html +25 -0
- package/script.txt +24 -0
- package/src/App.vue +322 -0
- package/src/AppZoneWTableEdit.vue +740 -0
- package/src/components/WTableEdit.vue +1278 -0
- package/src/components/WTableVue.vue +12 -0
- package/src/components/demolink.vue +105 -0
- package/src/main.js +8 -0
- package/test/all.test.mjs +10 -0
- package/toolg/addVersion.mjs +4 -0
- package/toolg/cleanFolder.mjs +5 -0
- package/toolg/cvCasename.mjs +43 -0
- package/toolg/gDistApp.mjs +38 -0
- package/toolg/gDistRollupComps.mjs +23 -0
- package/toolg/gDocExams.mjs +47 -0
- package/toolg/gExtractHtml.mjs +268 -0
- package/toolg/gMergeComps.mjs +75 -0
- package/toolg/modifyReadme.mjs +4 -0
- package/vue.config.js +9 -0
|
@@ -0,0 +1,1278 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div
|
|
3
|
+
:changeParamsForInfor="changeParamsForInfor"
|
|
4
|
+
:changeParamsForTable="changeParamsForTable"
|
|
5
|
+
>
|
|
6
|
+
<template v-if="hasEffUseOpt">
|
|
7
|
+
|
|
8
|
+
<div
|
|
9
|
+
ref="menu"
|
|
10
|
+
v-domresize
|
|
11
|
+
@domresize="domresize"
|
|
12
|
+
>
|
|
13
|
+
|
|
14
|
+
<!-- 編輯模式 -->
|
|
15
|
+
<template v-if="editable">
|
|
16
|
+
|
|
17
|
+
<div
|
|
18
|
+
:style="`${useInforPadding}`"
|
|
19
|
+
v-if="enableInfor"
|
|
20
|
+
>
|
|
21
|
+
<table style="width:100%;">
|
|
22
|
+
<tbody>
|
|
23
|
+
<tr>
|
|
24
|
+
<td :style="`${hasEffLabelNameAndDesp?'padding-right:5px;':''} vertical-align:middle; opacity:0.8; font-size:0.8rem; white-space:nowrap;`">{{textLabelDataName}}</td>
|
|
25
|
+
<td style="width:100%; vertical-align:middle;">
|
|
26
|
+
<WText
|
|
27
|
+
style="width:100%;"
|
|
28
|
+
:placeholder="textPlaceholderDataName"
|
|
29
|
+
v-model="nameTrans"
|
|
30
|
+
></WText>
|
|
31
|
+
</td>
|
|
32
|
+
</tr>
|
|
33
|
+
<tr>
|
|
34
|
+
<td :style="`${hasEffLabelNameAndDesp?'padding-right:5px;':''} vertical-align:middle; opacity:0.8; font-size:0.8rem; white-space:nowrap;`">{{textLabelDataDescription}}</td>
|
|
35
|
+
<td style="width:100%; vertical-align:middle;">
|
|
36
|
+
<WText
|
|
37
|
+
style="width:100%;"
|
|
38
|
+
:placeholder="textPlaceholderDataDescription"
|
|
39
|
+
v-model="descriptionTrans"
|
|
40
|
+
></WText>
|
|
41
|
+
</td>
|
|
42
|
+
</tr>
|
|
43
|
+
</tbody>
|
|
44
|
+
</table>
|
|
45
|
+
</div>
|
|
46
|
+
|
|
47
|
+
<div
|
|
48
|
+
:style="`${useMenuPaddingStyle} background:${useMenuBackgroundColor};`"
|
|
49
|
+
v-if="enableMenu"
|
|
50
|
+
>
|
|
51
|
+
<div style="display:flex; align-items:center;">
|
|
52
|
+
|
|
53
|
+
<slot
|
|
54
|
+
name="btns-left"
|
|
55
|
+
:editable="editable"
|
|
56
|
+
></slot>
|
|
57
|
+
|
|
58
|
+
<WButtonCircle
|
|
59
|
+
style="margin:5px;"
|
|
60
|
+
:icon="mdiTextBoxPlusOutline"
|
|
61
|
+
:backgroundColor="'white'"
|
|
62
|
+
:backgroundColorHover="'white'"
|
|
63
|
+
:tooltip="tooltipAddRow"
|
|
64
|
+
@click="addRow"
|
|
65
|
+
></WButtonCircle>
|
|
66
|
+
|
|
67
|
+
<WButtonCircle
|
|
68
|
+
style="margin:5px;"
|
|
69
|
+
:icon="mdiDeleteForever"
|
|
70
|
+
:iconColor="'#f26'"
|
|
71
|
+
:backgroundColor="'white'"
|
|
72
|
+
:backgroundColorHover="'white'"
|
|
73
|
+
:tooltip="tooltipDeleteSelectedRows"
|
|
74
|
+
@click="removeRows"
|
|
75
|
+
v-if="rowsSelect.length>0"
|
|
76
|
+
></WButtonCircle>
|
|
77
|
+
|
|
78
|
+
<WButtonCircle
|
|
79
|
+
style="margin:5px;"
|
|
80
|
+
:icon="mdiDownload"
|
|
81
|
+
:backgroundColor="'white'"
|
|
82
|
+
:backgroundColorHover="'white'"
|
|
83
|
+
:tooltip="tooltipDownloadExcelFile"
|
|
84
|
+
@click="downloadData('raw')"
|
|
85
|
+
v-if="hasEffRows"
|
|
86
|
+
></WButtonCircle>
|
|
87
|
+
|
|
88
|
+
<WButtonCircle
|
|
89
|
+
style="margin:5px;"
|
|
90
|
+
:icon="mdiMonitorArrowDown"
|
|
91
|
+
:backgroundColor="'white'"
|
|
92
|
+
:backgroundColorHover="'white'"
|
|
93
|
+
:tooltip="tooltipDownloadExcelFileForDisplay"
|
|
94
|
+
@click="downloadData('display')"
|
|
95
|
+
v-if="isFilter && hasEffRows"
|
|
96
|
+
></WButtonCircle>
|
|
97
|
+
|
|
98
|
+
<WPopup
|
|
99
|
+
v-model="showPickUploadMode"
|
|
100
|
+
:labelContent="labelContentForUpload"
|
|
101
|
+
:cmpZIndex="cmpZIndex"
|
|
102
|
+
>
|
|
103
|
+
|
|
104
|
+
<template v-slot:trigger>
|
|
105
|
+
<WButtonCircle
|
|
106
|
+
style="margin:5px;"
|
|
107
|
+
:icon="mdiUpload"
|
|
108
|
+
:backgroundColor="'white'"
|
|
109
|
+
:backgroundColorHover="'white'"
|
|
110
|
+
:tooltip="tooltipUploadExcelFile"
|
|
111
|
+
@click="showPickUploadMode=true"
|
|
112
|
+
></WButtonCircle>
|
|
113
|
+
</template>
|
|
114
|
+
|
|
115
|
+
<template v-slot:content>
|
|
116
|
+
|
|
117
|
+
<div style="padding:10px; font-size:0.8rem; color:#666; background:#eee;">
|
|
118
|
+
{{uploadModeTitle}}
|
|
119
|
+
</div>
|
|
120
|
+
|
|
121
|
+
<div style="padding:15px;">
|
|
122
|
+
|
|
123
|
+
<WButtonChip
|
|
124
|
+
style="margin-right:15px;"
|
|
125
|
+
:text="kpUploadModeItems['replace']"
|
|
126
|
+
:backgroundColor="'white'"
|
|
127
|
+
:backgroundColorHover="'#f6f6f6'"
|
|
128
|
+
@click="showPickUploadMode=false;uploadData('replace')"
|
|
129
|
+
></WButtonChip>
|
|
130
|
+
|
|
131
|
+
<WButtonChip
|
|
132
|
+
_style="margin:5px;"
|
|
133
|
+
:text="kpUploadModeItems['append']"
|
|
134
|
+
:backgroundColor="'white'"
|
|
135
|
+
:backgroundColorHover="'#f6f6f6'"
|
|
136
|
+
@click="showPickUploadMode=false;uploadData('append')"
|
|
137
|
+
></WButtonChip>
|
|
138
|
+
|
|
139
|
+
</div>
|
|
140
|
+
|
|
141
|
+
</template>
|
|
142
|
+
|
|
143
|
+
</WPopup>
|
|
144
|
+
|
|
145
|
+
<slot
|
|
146
|
+
name="btns-right"
|
|
147
|
+
:editable="editable"
|
|
148
|
+
></slot>
|
|
149
|
+
|
|
150
|
+
</div>
|
|
151
|
+
</div>
|
|
152
|
+
|
|
153
|
+
</template>
|
|
154
|
+
|
|
155
|
+
<!-- 顯示模式 -->
|
|
156
|
+
<template v-else>
|
|
157
|
+
|
|
158
|
+
<div :style="`display:flex; align-items:center;`">
|
|
159
|
+
|
|
160
|
+
<div
|
|
161
|
+
:style="`${useMenuPaddingStyle} background:${useMenuBackgroundColor};`"
|
|
162
|
+
v-if="enableMenu"
|
|
163
|
+
>
|
|
164
|
+
<div style="display:flex; align-items:center;">
|
|
165
|
+
|
|
166
|
+
<slot
|
|
167
|
+
name="btns-left"
|
|
168
|
+
:editable="editable"
|
|
169
|
+
></slot>
|
|
170
|
+
|
|
171
|
+
<WButtonCircle
|
|
172
|
+
style="margin:5px;"
|
|
173
|
+
:icon="mdiDownload"
|
|
174
|
+
:tooltip="tooltipDownloadExcelFile"
|
|
175
|
+
:backgroundColor="'white'"
|
|
176
|
+
:backgroundColorHover="'white'"
|
|
177
|
+
@click="downloadData('raw')"
|
|
178
|
+
v-if="hasEffRows"
|
|
179
|
+
></WButtonCircle>
|
|
180
|
+
|
|
181
|
+
<WButtonCircle
|
|
182
|
+
style="margin:5px;"
|
|
183
|
+
:icon="mdiMonitorArrowDown"
|
|
184
|
+
:tooltip="tooltipDownloadExcelFileForDisplay"
|
|
185
|
+
:backgroundColor="'white'"
|
|
186
|
+
:backgroundColorHover="'white'"
|
|
187
|
+
@click="downloadData('display')"
|
|
188
|
+
v-if="isFilter && hasEffRows"
|
|
189
|
+
></WButtonCircle>
|
|
190
|
+
|
|
191
|
+
<slot
|
|
192
|
+
name="btns-right"
|
|
193
|
+
:editable="editable"
|
|
194
|
+
></slot>
|
|
195
|
+
|
|
196
|
+
</div>
|
|
197
|
+
</div>
|
|
198
|
+
|
|
199
|
+
<div
|
|
200
|
+
:style="`${useInforPadding}`"
|
|
201
|
+
v-if="enableInfor"
|
|
202
|
+
>
|
|
203
|
+
<slot
|
|
204
|
+
name="infor"
|
|
205
|
+
:infor="{name:nameTrans,description:descriptionTrans}"
|
|
206
|
+
>
|
|
207
|
+
|
|
208
|
+
<div :style="`display:inline-block; ${hasEffNameAndDesp?'margin-left:5px;':''}`">
|
|
209
|
+
<div style="font-size:1.0rem;">
|
|
210
|
+
{{nameTrans}}
|
|
211
|
+
</div>
|
|
212
|
+
<div style="font-size:0.8rem; opacity:0.8;">
|
|
213
|
+
{{descriptionTrans}}
|
|
214
|
+
</div>
|
|
215
|
+
</div>
|
|
216
|
+
|
|
217
|
+
</slot>
|
|
218
|
+
</div>
|
|
219
|
+
|
|
220
|
+
</div>
|
|
221
|
+
|
|
222
|
+
</template>
|
|
223
|
+
|
|
224
|
+
</div>
|
|
225
|
+
|
|
226
|
+
<WAggridVue
|
|
227
|
+
ref="cmp"
|
|
228
|
+
:height="tableHeight"
|
|
229
|
+
:opt="useOpt"
|
|
230
|
+
></WAggridVue>
|
|
231
|
+
|
|
232
|
+
</template>
|
|
233
|
+
</div>
|
|
234
|
+
</template>
|
|
235
|
+
|
|
236
|
+
<script>
|
|
237
|
+
import { mdiDownload, mdiMonitorArrowDown, mdiUpload, mdiDeleteForever, mdiTextBoxPlusOutline } from '@mdi/js/mdi.js'
|
|
238
|
+
import get from 'lodash-es/get.js'
|
|
239
|
+
import map from 'lodash-es/map.js'
|
|
240
|
+
import each from 'lodash-es/each.js'
|
|
241
|
+
import keys from 'lodash-es/keys.js'
|
|
242
|
+
import sortBy from 'lodash-es/sortBy.js'
|
|
243
|
+
import pull from 'lodash-es/pull.js'
|
|
244
|
+
import size from 'lodash-es/size.js'
|
|
245
|
+
import every from 'lodash-es/every.js'
|
|
246
|
+
import trim from 'lodash-es/trim.js'
|
|
247
|
+
import isEqual from 'lodash-es/isEqual.js'
|
|
248
|
+
import cloneDeep from 'lodash-es/cloneDeep.js'
|
|
249
|
+
import isarr from 'wsemi/src/isarr.mjs'
|
|
250
|
+
import isfun from 'wsemi/src/isfun.mjs'
|
|
251
|
+
import isestr from 'wsemi/src/isestr.mjs'
|
|
252
|
+
import isearr from 'wsemi/src/isearr.mjs'
|
|
253
|
+
import isbol from 'wsemi/src/isbol.mjs'
|
|
254
|
+
import isobj from 'wsemi/src/isobj.mjs'
|
|
255
|
+
import iseobj from 'wsemi/src/iseobj.mjs'
|
|
256
|
+
import arr2dt from 'wsemi/src/arr2dt.mjs'
|
|
257
|
+
import arrPullAt from 'wsemi/src/arrPullAt.mjs'
|
|
258
|
+
import ltdtmapping from 'wsemi/src/ltdtmapping.mjs'
|
|
259
|
+
import genID from 'wsemi/src/genID.mjs'
|
|
260
|
+
import WButtonCircle from 'w-component-vue/src/components/WButtonCircle.vue'
|
|
261
|
+
import WPopup from 'w-component-vue/src/components/WPopup.vue'
|
|
262
|
+
import WText from 'w-component-vue/src/components/WText.vue'
|
|
263
|
+
import WButtonChip from 'w-component-vue/src/components/WButtonChip.vue'
|
|
264
|
+
import domResize from 'w-component-vue/src/js/domResize.mjs'
|
|
265
|
+
import parseSpace from 'w-component-vue/src/js/parseSpace.mjs'
|
|
266
|
+
import convertColor from 'w-component-vue/src/js/convertColor.mjs'
|
|
267
|
+
import WAggridVue from 'w-aggrid-vue/src/components/WAggridVue.vue'
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* @vue-prop {String} [language='en'] 輸入指定語系字串,可選'en'、'zh-tw'、'zh-cn',可被opt.language複寫,預設為'en'
|
|
272
|
+
* @vue-prop {Boolean} [enableInfor=true] 輸入是否使用資訊區(資料名稱name與資料描述description)布林值,預設為true
|
|
273
|
+
* @vue-prop {String} [name=''] 輸入資料名稱字串,預設''
|
|
274
|
+
* @vue-prop {String} [description=''] 輸入資料描述字串,預設''
|
|
275
|
+
* @vue-prop {Object} [inforPaddingStyle={v:0,h:0}] 輸入資訊區(資料名稱name與資料描述description)內寬距離物件,可用鍵值為v、h、left、right、top、bottom,v代表同時設定top與bottom,h代表設定left與right,若有重複設定時後面鍵值會覆蓋前面,各鍵值為寬度數字,單位為px,預設{v:0,h:0}
|
|
276
|
+
* @vue-prop {Boolean} [enableMenu=true] 輸入是否使用選單按鈕區布林值,預設為true
|
|
277
|
+
* @vue-prop {Object} [menuPaddingStyle={v:3,h:3}] 輸入選單按鈕區內寬距離物件,可用鍵值為v、h、left、right、top、bottom,v代表同時設定top與bottom,h代表設定left與right,若有重複設定時後面鍵值會覆蓋前面,各鍵值為寬度數字,單位為px,預設{v:3,h:3}
|
|
278
|
+
* @vue-prop {String} [menuBackgroundColor='transparent'] 輸入選單按鈕區背景顏色字串,預設'transparent'
|
|
279
|
+
* @vue-prop {String|Array} [sortColIds=''] 輸入初始化時自動排序數據的欄位,為字串或陣列,若輸入陣列時則依照順序排序,故最末者代表最終排序。預設''
|
|
280
|
+
* @vue-prop {String|Array} [hideIds=''] 輸入欲隱藏欄位字串或陣列,可被opt.kpHeadHide複寫,預設''
|
|
281
|
+
* @vue-prop {String|Array} [fixIds=''] 輸入欲固定於左側欄位字串或陣列,可被opt.kpHeadFixLeft複寫,預設''
|
|
282
|
+
* @vue-prop {String} [checkId=''] 輸入欲使用核選方塊欄位字串,可被opt.kpHeadCheckBox複寫,預設''
|
|
283
|
+
* @vue-prop {String|Array} [removeIdsWhenDownload=''] 輸入下載Excel檔案時欲移除的欄位字串或陣列,預設''
|
|
284
|
+
* @vue-prop {Boolean} [funGetLtdtHookWhenDownload=null] 輸入下載Excel檔案時針對ltdt數據階段的攔截處理函數,預設為null
|
|
285
|
+
* @vue-prop {Boolean} [funGetMatHookWhenDownload=null] 輸入下載Excel檔案時針對mat數據階段的攔截處理函數,預設為null
|
|
286
|
+
* @vue-prop {Boolean} [enableHeadWhenDownload=false] 輸入下載Excel檔案時是否將欄位鍵值轉換成head布林值,此需提供opt.kpHead物件,預設為false
|
|
287
|
+
* @vue-prop {String} [fileNameWhenDownload='data.xlsx'] 輸入下載Excel檔案時儲存檔名稱字串,預設'data.xlsx'
|
|
288
|
+
* @vue-prop {String} [sheetNameWhenDownload='data'] 輸入下載Excel檔案時sheet名稱字串,預設'data'
|
|
289
|
+
* @vue-prop {Boolean} [editable=false] 輸入是否可編輯布林值,可被opt.defCellEditable複寫,預設為false
|
|
290
|
+
* @vue-prop {String} [textLabelDataName='Data name] 輸入數據名稱字串,預設'Data name'
|
|
291
|
+
* @vue-prop {String} [textPlaceholderDataName='Please enter data name'] 輸入數據名稱placeholder字串,預設'Please enter data name'
|
|
292
|
+
* @vue-prop {String} [textLabelDataDescription='Data description'] 輸入數據說明字串,預設'Data description'
|
|
293
|
+
* @vue-prop {String} [textPlaceholderDataDescription='Please enter data description'] 輸入數據說明placeholder字串,預設'Please enter data description'
|
|
294
|
+
* @vue-prop {String} [tooltipAddRow='add new row'] 輸入新增數據按鈕tooltip字串,預設'add new row'
|
|
295
|
+
* @vue-prop {String} [tooltipDeleteSelectedRows='delete selected rows'] 輸入刪除選擇數據按鈕tooltip字串,預設'delete selected rows'
|
|
296
|
+
* @vue-prop {String} [tooltipDownloadExcelFile='download data to Excel file'] 輸入下載數據成為Excel檔案按鈕tooltip字串,預設'download data to Excel file'
|
|
297
|
+
* @vue-prop {String} [tooltipDownloadExcelFileForDisplay='download filtered data to Excel file'] 輸入下載過濾後數據成為Excel檔案按鈕tooltip字串,預設'download filtered data to Excel file'
|
|
298
|
+
* @vue-prop {String} [tooltipUploadExcelFile='upload data to Excel file'] 輸入上傳Excel數據檔案按鈕tooltip字串,預設'upload data to Excel file'
|
|
299
|
+
* @vue-prop {String} [successMsgFromAddRow='add row successfully'] 輸入新增數據成功事件訊息字串,預設'add row successfully'
|
|
300
|
+
* @vue-prop {String} [errorMsgFromAddRow='can not add row'] 輸入無法新增數據事件訊息字串,預設'can not add row'
|
|
301
|
+
* @vue-prop {String} [errorMsgFromRemoveRow='can not remove selected rows'] 輸入移除數據失敗事件訊息字串,預設'can not remove selected rows'
|
|
302
|
+
* @vue-prop {String} [successMsgFromUploadData='upload data successfully'] 輸入上傳數據成功事件訊息字串,預設'upload data successfully'
|
|
303
|
+
* @vue-prop {String} [errorMsgFromUploadData='can not upload data'] 輸入無法上傳數據事件訊息字串,預設'can not upload data'
|
|
304
|
+
* @vue-prop {String} [errorMsgFromUploadEmptyData='no effective data'] 輸入上傳檔案中無有效數據事件訊息字串,預設'no effective data'
|
|
305
|
+
* @vue-prop {String} [successMsgFromDownloadData='download data successfully'] 輸入下載檔案成功事件訊息字串,預設'download data successfully'
|
|
306
|
+
* @vue-prop {String} [errorMsgFromDownloadData='can not download data'] 輸入無法下載檔案事件訊息字串,預設'can not download data'
|
|
307
|
+
* @vue-prop {String} [errorMsgFromNoName='no data name'] 輸入未輸入數據名稱事件訊息字串,預設'no data name'
|
|
308
|
+
* @vue-prop {String} [errorMsgFromNoData='no data'] 輸入未給予有效數據事件訊息字串,預設'no data'
|
|
309
|
+
* @vue-prop {String} [uploadModeTitle='Choose mode of upload:'] 輸入選擇上傳模式彈窗標題字串,預設'Choose mode of upload:'
|
|
310
|
+
* @vue-prop {String} [uploadModeTextForReplace='Replace'] 輸入取代上傳模式文字字串,預設'Replace'
|
|
311
|
+
* @vue-prop {String} [uploadModeTextForAppend='Append'] 輸入插入於最後上傳模式文字字串,預設'Append'
|
|
312
|
+
* @vue-prop {String} [labelContentForUpload=null] 輸入針對上傳模式之popup彈窗teleport至body內之內容div所給予之wtlp屬性值字串,供查找使用,預設null
|
|
313
|
+
* @vue-event {Array} save 指調用組件的method,無輸入,會回傳當前的name、description、rows所構成的物件
|
|
314
|
+
* @vue-event {String} success 當新增數據、上傳數據、下載數據成功時觸發,回傳對應成功訊息字串
|
|
315
|
+
* @vue-event {String} error 當新增數據、移除數據、上傳數據、下載數據失敗時觸發,回傳對應錯誤訊息字串
|
|
316
|
+
* @vue-slot {Object} infor 顯示模式下資訊區之渲染slot,slot props為{ infor },infor為{ name, description }
|
|
317
|
+
* @vue-slot {Object} btns-left 選單按鈕區最左側之插入slot,slot props為{ editable }
|
|
318
|
+
* @vue-slot {Object} btns-right 選單按鈕區最右側之插入slot,slot props為{ editable }
|
|
319
|
+
* @vue-prop {Object} [opt={}] 輸入w-aggrid-vue設定物件,預設{}
|
|
320
|
+
* @vue-prop {Array} opt.keys 輸入資料各欄位keys
|
|
321
|
+
* @vue-prop {Array} opt.rows 輸入資料列,各列為物件,內含各欄位keys之值,例[{},{},...,{}]
|
|
322
|
+
* @vue-prop {Object} [opt.kpHead={}] 輸入key對應head物件,預設各key值為本身key值
|
|
323
|
+
* @vue-prop {Object} [opt.kpHeadTooltip={}] 輸入key對應需tooltip的html字串物件,於各head處滑鼠移入時觸發,預設各key值為undefined
|
|
324
|
+
* @vue-prop {String} [opt.defHeadAlignH='center'] 輸入head預設之左右對齊字串,預設為'center'
|
|
325
|
+
* @vue-prop {Object} [opt.kpHeadAlignH={}] 輸入key對應head之左右對齊字串物件,預設各key值為defHeadAlignH
|
|
326
|
+
* @vue-prop {Boolean} [opt.defHeadSort=true] 輸入head預設之是否允許排序布林值,預設為true
|
|
327
|
+
* @vue-prop {Object} [opt.kpHeadSort={}] 輸入key對應head之是否允許排序物件,預設各key值為defHeadSort
|
|
328
|
+
* @vue-prop {Function|String} [opt.defHeadSortMethod=null] 輸入head預設之排序方式函數或字串,若需自行定義則給予函數,若需使用內建的自動轉型判斷方式則給予'auto'字串,預設為null
|
|
329
|
+
* @vue-prop {Object} [opt.kpHeadSortMethod={}] 輸入key對應head之排序方式函數或字串,若需自行定義則給予函數,若需使用內建的自動轉型判斷方式則給予'auto'字串,預設各key值為defHeadSortMethod
|
|
330
|
+
* @vue-prop {Object} [opt.kpHeadFixLeft={}] 輸入key對應head之是否固定於左側物件,預設各key值為false
|
|
331
|
+
* @vue-prop {Boolean} [opt.defHeadFilter=true] 輸入head預設之是否允許過濾布林值,預設為true
|
|
332
|
+
* @vue-prop {Object} [opt.kpHeadFilter={}] 輸入key對應head之是否允許過濾物件,預設各key值為defHeadFilter
|
|
333
|
+
* @vue-prop {String} [opt.defHeadFilterType='num'] 輸入head預設過濾器字串,可選'num'、'text'、'time'、'set',預設為'num'
|
|
334
|
+
* @vue-prop {Object} [opt.kpHeadFilterType={}] 輸入key對應head之過濾器物件,可使用'num'、'text'、'time'、'set',預設各key值為'num'
|
|
335
|
+
* @vue-prop {Object} [opt.kpHeadRender={}] 輸入key對應head之渲染函數物件,預設各key值為undefined
|
|
336
|
+
* @vue-prop {Boolean} [opt.defHeadDrag=true] 輸入head預設之是否允許拖曳布林值,預設為true
|
|
337
|
+
* @vue-prop {Object} [opt.kpHeadDrag={}] 輸入key對應head之是否允許拖曳物件,預設各key值為defHeadDrag
|
|
338
|
+
* @vue-prop {Object} [opt.kpHeadCheckBox={}] 輸入key對應head與key的各列是否使用核選方塊物件,預設各key值為false
|
|
339
|
+
* @vue-prop {Object} [opt.kpHeadFocusHighlight={}] 輸入key對應key的各列於獲得焦點時是否高亮顯示物件,預設各key值為true
|
|
340
|
+
* @vue-prop {Object} [opt.kpHeadHide={}] 輸入key對應head是否隱藏物件,預設各key值為false
|
|
341
|
+
* @vue-prop {Object} [opt.kpRowStyle={}] 輸入key對應row style之物件,可設定各key欄之函數,函數給予cell值需回傳之row style,預設各key值為undefined
|
|
342
|
+
* @vue-prop {Object} [opt.kpRowDrag={}] 輸入key對應col之是否能拖曳排序物件,預設各key值為false
|
|
343
|
+
* @vue-prop {Function} [opt.genRowsPinnTop=null] 輸入產生置頂rows函數,輸入為表內全部數據,預設為null
|
|
344
|
+
* @vue-prop {Function} [opt.genRowsPinnBottom=null] 輸入產生置底rows函數,輸入為表內全部數據,預設為null
|
|
345
|
+
* @vue-prop {Object} [opt.kpColStyle={}] 輸入key對應col style之物件,可設定各key欄之col style,預設各key值為undefined
|
|
346
|
+
* @vue-prop {Object} [opt.kpColSpan={}] 輸入key對應col span之物件,可設定各key欄之col span,預設各key值為undefined
|
|
347
|
+
* @vue-prop {Number} [opt.defHeadMinWidth=null] 輸入cell預設最小寬度數字,預設為null
|
|
348
|
+
* @vue-prop {Number} [opt.defHeadMaxWidth=null] 輸入cell預設最大寬度數字,預設為null
|
|
349
|
+
* @vue-prop {Object} [opt.kpHeadWidth={}] 輸入key對應cell之寬度物件,預設各key值為undefined
|
|
350
|
+
* @vue-prop {Object} [opt.kpCellRender={}] 輸入key對應cell之渲染函數物件,預設各key值為undefined
|
|
351
|
+
* @vue-prop {Object} [opt.kpCellTooltip={}] 輸入key對應cell之tooltip的html字串物件,於各cell處滑鼠移入時觸發,預設各key值為undefined
|
|
352
|
+
* @vue-prop {String} [opt.defCellAlignH='center'] 輸入cell預設之左右對齊字串,預設為'center'
|
|
353
|
+
* @vue-prop {Object} [opt.kpCellAlignH={}] 輸入key對應cell之左右對齊字串物件,預設各key值為defCellAlignH
|
|
354
|
+
* @vue-prop {Boolean} [opt.defCellEditable=false] 輸入cell預設之是否可編輯布林值,由組件editable複寫,預設為false
|
|
355
|
+
* @vue-prop {Object} [opt.kpCellEditable={}] 輸入key對應cell之是否可編輯物件,預設各key值為defCellEditable
|
|
356
|
+
* @vue-prop {Object} [opt.kpConvertKeysWhenUploadData={}] 輸入上傳Excel檔案時,當key轉會成對應新key值物件,預設{}
|
|
357
|
+
* @vue-prop {Function} [opt.rowsChange=function(){}] 輸入rows change之觸發事件,預設為function(){}
|
|
358
|
+
* @vue-prop {Function} [opt.rowClick=function(){}] 輸入row click之觸發事件,預設為function(){}
|
|
359
|
+
* @vue-prop {Function} [opt.rowDbClick=function(){}] 輸入row double click之觸發事件,預設為function(){}
|
|
360
|
+
* @vue-prop {Function} [opt.rowChange=function(){}] 輸入row change之觸發事件,預設為function(){}
|
|
361
|
+
* @vue-prop {Function} [opt.rowChecked=function(){}] 輸入row checked之觸發事件,需使用kpHeadCheckBox開啟指定key的head與對應rows使用checkbox,預設為function(){}
|
|
362
|
+
* @vue-prop {Function} [opt.rowMouseEnter=function(){}] 輸入row mouseenter之觸發事件,預設為function(){}
|
|
363
|
+
* @vue-prop {Function} [opt.rowMouseLeave=function(){}] 輸入row mouseleave之觸發事件,預設為function(){}
|
|
364
|
+
* @vue-prop {Function} [opt.cellClick=function(){}] 輸入cell click之觸發事件,預設為function(){}
|
|
365
|
+
* @vue-prop {Function} [opt.cellDbClick=function(){}] 輸入cell double click之觸發事件,預設為function(){}
|
|
366
|
+
* @vue-prop {Function} [opt.cellChange=function(){}] 輸入cell change之觸發事件,預設為function(){}
|
|
367
|
+
* @vue-prop {Function} [opt.cellMouseEnter=function(){}] 輸入cell mouseenter之觸發事件,預設為function(){}
|
|
368
|
+
* @vue-prop {Function} [opt.cellMouseLeave=function(){}] 輸入cell mouseleave之觸發事件,預設為function(){}
|
|
369
|
+
* @vue-prop {Function} [opt.filterChange=function(){}] 輸入filter change之觸發事件,預設為function(){}
|
|
370
|
+
* @vue-prop {Boolean} [opt.autoFitColumn=false] 輸入當表格尺寸變更時自動調整欄寬布林值,預設false
|
|
371
|
+
* @vue-prop {String} [opt.language='en'] 輸入指定語系字串,可選'en'、'zh-tw'、'zh-cn',預設同組件language
|
|
372
|
+
* @vue-prop {Function} [opt.beforeAddRow=undefined] 輸入編輯模式新增數據前之修改新列事件,輸入newRow,輸出newRow,預設為undefined
|
|
373
|
+
* @vue-prop {Object} [opt.optForUploadData={}] 輸入呼叫組件uploadData上傳檔案時用的設定物件,內部調用wsemi的getDataFromExcelFileU8Arr讀取Excel檔案,物件可給予鍵值:uploadMode代表上傳模式字串(可選'replace'、'append',預設由彈窗選擇),beforeUpload代表上傳前的處理數據函數,parseSheetInd代表提取Excel檔案的第幾個sheet整數(預設為0),optForUploadData預設{}
|
|
374
|
+
* @vue-prop {Function} [opt.modifyDataWhenSave=undefined] 輸入當儲存時修改儲存數據事件,輸入rows,輸出rows,預設為undefined
|
|
375
|
+
* @vue-prop {Boolean} [opt.checkNoDataWhenSave=false] 輸入當儲存時是否檢核無數據布林值,預設false
|
|
376
|
+
* @vue-prop {Number} [cmpZIndex=3000] 輸入彈窗使用z-index數字,供嵌於高z-index彈窗內時提高層級,預設3000
|
|
377
|
+
*/
|
|
378
|
+
export default {
|
|
379
|
+
directives: {
|
|
380
|
+
domresize: domResize(),
|
|
381
|
+
},
|
|
382
|
+
components: {
|
|
383
|
+
WButtonCircle,
|
|
384
|
+
WPopup,
|
|
385
|
+
WText,
|
|
386
|
+
WButtonChip,
|
|
387
|
+
WAggridVue,
|
|
388
|
+
},
|
|
389
|
+
props: {
|
|
390
|
+
language: {
|
|
391
|
+
type: String,
|
|
392
|
+
default: 'en',
|
|
393
|
+
},
|
|
394
|
+
enableInfor: {
|
|
395
|
+
type: Boolean,
|
|
396
|
+
default: true,
|
|
397
|
+
},
|
|
398
|
+
name: {
|
|
399
|
+
type: String,
|
|
400
|
+
default: '',
|
|
401
|
+
},
|
|
402
|
+
description: {
|
|
403
|
+
type: String,
|
|
404
|
+
default: '',
|
|
405
|
+
},
|
|
406
|
+
inforPaddingStyle: {
|
|
407
|
+
type: Object,
|
|
408
|
+
default: () => {
|
|
409
|
+
return {
|
|
410
|
+
v: 0,
|
|
411
|
+
h: 0,
|
|
412
|
+
}
|
|
413
|
+
},
|
|
414
|
+
},
|
|
415
|
+
enableMenu: {
|
|
416
|
+
type: Boolean,
|
|
417
|
+
default: true,
|
|
418
|
+
},
|
|
419
|
+
menuPaddingStyle: {
|
|
420
|
+
type: Object,
|
|
421
|
+
default: () => {
|
|
422
|
+
return {
|
|
423
|
+
v: 3,
|
|
424
|
+
h: 3,
|
|
425
|
+
}
|
|
426
|
+
},
|
|
427
|
+
},
|
|
428
|
+
menuBackgroundColor: {
|
|
429
|
+
type: String,
|
|
430
|
+
default: 'transparent',
|
|
431
|
+
},
|
|
432
|
+
sortColIds: {
|
|
433
|
+
type: [String, Array],
|
|
434
|
+
default: '',
|
|
435
|
+
// default: 'order',
|
|
436
|
+
},
|
|
437
|
+
hideIds: {
|
|
438
|
+
type: [String, Array],
|
|
439
|
+
default: '',
|
|
440
|
+
// default: () => [
|
|
441
|
+
// 'id',
|
|
442
|
+
// 'mappingId',
|
|
443
|
+
// 'order',
|
|
444
|
+
// 'isActive',
|
|
445
|
+
// ],
|
|
446
|
+
},
|
|
447
|
+
fixIds: {
|
|
448
|
+
type: [String, Array],
|
|
449
|
+
default: '',
|
|
450
|
+
},
|
|
451
|
+
checkId: {
|
|
452
|
+
type: String,
|
|
453
|
+
default: '',
|
|
454
|
+
},
|
|
455
|
+
removeIdsWhenDownload: {
|
|
456
|
+
type: [String, Array],
|
|
457
|
+
default: '',
|
|
458
|
+
// default: () => [
|
|
459
|
+
// 'id',
|
|
460
|
+
// 'mappingId',
|
|
461
|
+
// 'order',
|
|
462
|
+
// 'isActive',
|
|
463
|
+
// ],
|
|
464
|
+
},
|
|
465
|
+
funGetLtdtHookWhenDownload: {
|
|
466
|
+
type: Function,
|
|
467
|
+
default: null,
|
|
468
|
+
},
|
|
469
|
+
funGetMatHookWhenDownload: {
|
|
470
|
+
type: Function,
|
|
471
|
+
default: null,
|
|
472
|
+
},
|
|
473
|
+
enableHeadWhenDownload: {
|
|
474
|
+
type: Boolean,
|
|
475
|
+
default: false,
|
|
476
|
+
},
|
|
477
|
+
fileNameWhenDownload: {
|
|
478
|
+
type: String,
|
|
479
|
+
default: 'data.xlsx',
|
|
480
|
+
},
|
|
481
|
+
sheetNameWhenDownload: {
|
|
482
|
+
type: String,
|
|
483
|
+
default: 'data',
|
|
484
|
+
},
|
|
485
|
+
editable: {
|
|
486
|
+
type: Boolean,
|
|
487
|
+
default: false,
|
|
488
|
+
},
|
|
489
|
+
textLabelDataName: {
|
|
490
|
+
type: String,
|
|
491
|
+
default: 'Data name:', //數據名稱
|
|
492
|
+
},
|
|
493
|
+
textPlaceholderDataName: {
|
|
494
|
+
type: String,
|
|
495
|
+
default: 'Please enter data name', //請輸入數據名稱
|
|
496
|
+
},
|
|
497
|
+
textLabelDataDescription: {
|
|
498
|
+
type: String,
|
|
499
|
+
default: 'Data description:', //數據說明
|
|
500
|
+
},
|
|
501
|
+
textPlaceholderDataDescription: {
|
|
502
|
+
type: String,
|
|
503
|
+
default: 'Please enter data description', //請輸入數據說明
|
|
504
|
+
},
|
|
505
|
+
tooltipAddRow: {
|
|
506
|
+
type: String,
|
|
507
|
+
default: 'add new row', //新增數據
|
|
508
|
+
},
|
|
509
|
+
tooltipDeleteSelectedRows: {
|
|
510
|
+
type: String,
|
|
511
|
+
default: 'delete selected rows', //刪除選擇數據
|
|
512
|
+
},
|
|
513
|
+
tooltipDownloadExcelFile: {
|
|
514
|
+
type: String,
|
|
515
|
+
default: 'download data to Excel file', //下載數據成為Excel檔案
|
|
516
|
+
},
|
|
517
|
+
tooltipDownloadExcelFileForDisplay: {
|
|
518
|
+
type: String,
|
|
519
|
+
default: 'download filtered data to Excel file', //下載過濾後數據成為Excel檔案
|
|
520
|
+
},
|
|
521
|
+
tooltipUploadExcelFile: {
|
|
522
|
+
type: String,
|
|
523
|
+
default: 'upload data to Excel file', //上傳數據 Excel 檔案
|
|
524
|
+
},
|
|
525
|
+
successMsgFromAddRow: {
|
|
526
|
+
type: String,
|
|
527
|
+
default: 'add row successfully', //新增數據成功
|
|
528
|
+
},
|
|
529
|
+
errorMsgFromAddRow: {
|
|
530
|
+
type: String,
|
|
531
|
+
default: 'can not add row', //無法新增數據
|
|
532
|
+
},
|
|
533
|
+
errorMsgFromRemoveRow: {
|
|
534
|
+
type: String,
|
|
535
|
+
default: 'can not remove selected rows', //移除數據失敗
|
|
536
|
+
},
|
|
537
|
+
successMsgFromUploadData: {
|
|
538
|
+
type: String,
|
|
539
|
+
default: 'upload data successfully', //上傳數據成功
|
|
540
|
+
},
|
|
541
|
+
errorMsgFromUploadData: {
|
|
542
|
+
type: String,
|
|
543
|
+
default: 'can not upload data', //無法上傳數據
|
|
544
|
+
},
|
|
545
|
+
errorMsgFromUploadEmptyData: {
|
|
546
|
+
type: String,
|
|
547
|
+
default: 'no effective data', //上傳檔案中無有效數據
|
|
548
|
+
},
|
|
549
|
+
successMsgFromDownloadData: {
|
|
550
|
+
type: String,
|
|
551
|
+
default: 'download data successfully', //下載檔案成功
|
|
552
|
+
},
|
|
553
|
+
errorMsgFromDownloadData: {
|
|
554
|
+
type: String,
|
|
555
|
+
default: 'can not download data', //無法下載檔案
|
|
556
|
+
},
|
|
557
|
+
errorMsgFromNoName: {
|
|
558
|
+
type: String,
|
|
559
|
+
default: 'no data name', //未輸入數據名稱
|
|
560
|
+
},
|
|
561
|
+
errorMsgFromNoData: {
|
|
562
|
+
type: String,
|
|
563
|
+
default: 'no data', //未給予有效數據
|
|
564
|
+
},
|
|
565
|
+
uploadModeTitle: {
|
|
566
|
+
type: String,
|
|
567
|
+
default: 'Choose mode of upload:',
|
|
568
|
+
},
|
|
569
|
+
uploadModeTextForReplace: {
|
|
570
|
+
type: String,
|
|
571
|
+
default: 'Replace',
|
|
572
|
+
},
|
|
573
|
+
uploadModeTextForAppend: {
|
|
574
|
+
type: String,
|
|
575
|
+
default: 'Append',
|
|
576
|
+
},
|
|
577
|
+
labelContentForUpload: {
|
|
578
|
+
type: String,
|
|
579
|
+
default: null,
|
|
580
|
+
},
|
|
581
|
+
cmpZIndex: {
|
|
582
|
+
type: Number,
|
|
583
|
+
default: 3000,
|
|
584
|
+
},
|
|
585
|
+
opt: {
|
|
586
|
+
type: Object,
|
|
587
|
+
default: null,
|
|
588
|
+
},
|
|
589
|
+
},
|
|
590
|
+
data: function() {
|
|
591
|
+
return {
|
|
592
|
+
mdiDownload,
|
|
593
|
+
mdiMonitorArrowDown,
|
|
594
|
+
mdiUpload,
|
|
595
|
+
mdiDeleteForever,
|
|
596
|
+
mdiTextBoxPlusOutline,
|
|
597
|
+
|
|
598
|
+
tableHeight: 1, //ag-grid需先給予最小高度供顯示, resize才會驅動
|
|
599
|
+
|
|
600
|
+
showPickUploadMode: false,
|
|
601
|
+
|
|
602
|
+
paramsTemp: null,
|
|
603
|
+
|
|
604
|
+
nameTrans: '',
|
|
605
|
+
descriptionTrans: '',
|
|
606
|
+
rowsSelect: [],
|
|
607
|
+
useOpt: null,
|
|
608
|
+
|
|
609
|
+
nameTemp: '',
|
|
610
|
+
descriptionTemp: '',
|
|
611
|
+
rowsTemp: [],
|
|
612
|
+
|
|
613
|
+
isFilter: false,
|
|
614
|
+
|
|
615
|
+
}
|
|
616
|
+
},
|
|
617
|
+
computed: {
|
|
618
|
+
|
|
619
|
+
changeParamsForInfor: function() {
|
|
620
|
+
// console.log('computed changeParamsForInfor')
|
|
621
|
+
|
|
622
|
+
let vo = this
|
|
623
|
+
|
|
624
|
+
//for trigger
|
|
625
|
+
let name = vo.name
|
|
626
|
+
let description = vo.description
|
|
627
|
+
|
|
628
|
+
//save
|
|
629
|
+
vo.nameTrans = trim(vo.name)
|
|
630
|
+
vo.descriptionTrans = trim(vo.description)
|
|
631
|
+
|
|
632
|
+
//backup, 不能使用vo.nameTrans與vo.descriptionTemp備份, 會導致computed掛勾記憶體無法觸發事件變更
|
|
633
|
+
vo.nameTemp = trim(vo.name)
|
|
634
|
+
vo.descriptionTemp = trim(vo.description)
|
|
635
|
+
|
|
636
|
+
vo.___changeParamsForInfor___ = { name, description }
|
|
637
|
+
return ''
|
|
638
|
+
},
|
|
639
|
+
|
|
640
|
+
changeParamsForTable: function() {
|
|
641
|
+
//console.log('computed changeParamsForTable')
|
|
642
|
+
|
|
643
|
+
let vo = this
|
|
644
|
+
|
|
645
|
+
//for trigger, rows通常是undefined變更為有效數據, 此時會驅動
|
|
646
|
+
let rows = get(vo, 'opt.rows')
|
|
647
|
+
let hideIds = vo.hideIds
|
|
648
|
+
let fixIds = vo.fixIds
|
|
649
|
+
let checkId = vo.checkId
|
|
650
|
+
let editable = vo.editable
|
|
651
|
+
|
|
652
|
+
//paramsTemp
|
|
653
|
+
let paramsTemp = {
|
|
654
|
+
rows, hideIds, fixIds, checkId, editable
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
//check, changeParamsForTable掛在dom上, 可能因為dom變更而被觸發, 或因數據為物件(例如rows)可能被修改, 於dom變更時被視為有變而觸發, 故需添加偵測外部數據是否有變才呼叫genOpt
|
|
658
|
+
if (!isEqual(vo.paramsTemp, paramsTemp)) {
|
|
659
|
+
|
|
660
|
+
//genOpt
|
|
661
|
+
vo.genOpt()
|
|
662
|
+
|
|
663
|
+
//save
|
|
664
|
+
vo.paramsTemp = cloneDeep(paramsTemp)
|
|
665
|
+
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
return ''
|
|
669
|
+
},
|
|
670
|
+
|
|
671
|
+
kpUploadModeItems: function() {
|
|
672
|
+
//console.log('computed kpUploadModeItems')
|
|
673
|
+
|
|
674
|
+
let vo = this
|
|
675
|
+
|
|
676
|
+
//kp
|
|
677
|
+
let kp = {
|
|
678
|
+
replace: vo.uploadModeTextForReplace,
|
|
679
|
+
append: vo.uploadModeTextForAppend,
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
return kp
|
|
683
|
+
},
|
|
684
|
+
|
|
685
|
+
useKeys: function() {
|
|
686
|
+
//console.log('computed useKeys')
|
|
687
|
+
|
|
688
|
+
let vo = this
|
|
689
|
+
|
|
690
|
+
//ks
|
|
691
|
+
let ks = []
|
|
692
|
+
if (isearr(get(vo, 'opt.keys'))) {
|
|
693
|
+
ks = get(vo, 'opt.keys')
|
|
694
|
+
}
|
|
695
|
+
else if (isearr(get(vo, 'opt.rows'))) {
|
|
696
|
+
ks = keys(get(vo, 'rows.0', {}))
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
return ks
|
|
700
|
+
},
|
|
701
|
+
|
|
702
|
+
useKpHead: function() {
|
|
703
|
+
//console.log('computed useKpHead')
|
|
704
|
+
|
|
705
|
+
let vo = this
|
|
706
|
+
|
|
707
|
+
//kpHeads
|
|
708
|
+
let kpHeads
|
|
709
|
+
if (iseobj(get(vo, 'opt.kpHead'))) {
|
|
710
|
+
kpHeads = get(vo, 'opt.kpHead')
|
|
711
|
+
}
|
|
712
|
+
else {
|
|
713
|
+
kpHeads = {}
|
|
714
|
+
each(vo.useKeys, (k) => {
|
|
715
|
+
kpHeads[k] = k
|
|
716
|
+
})
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
return kpHeads
|
|
720
|
+
},
|
|
721
|
+
|
|
722
|
+
hasEffRows: function() {
|
|
723
|
+
//console.log('computed hasEffRows')
|
|
724
|
+
|
|
725
|
+
let vo = this
|
|
726
|
+
|
|
727
|
+
return size(get(vo, 'useOpt.rows', [])) > 0
|
|
728
|
+
},
|
|
729
|
+
|
|
730
|
+
hasEffUseOpt: function() {
|
|
731
|
+
//console.log('computed hasEffUseOpt')
|
|
732
|
+
|
|
733
|
+
let vo = this
|
|
734
|
+
|
|
735
|
+
return vo.useOpt !== null
|
|
736
|
+
},
|
|
737
|
+
|
|
738
|
+
hasEffNameAndDesp: function() {
|
|
739
|
+
//console.log('computed hasEffNameAndDesp')
|
|
740
|
+
|
|
741
|
+
let vo = this
|
|
742
|
+
|
|
743
|
+
return vo.nameTrans !== '' || vo.descriptionTrans !== ''
|
|
744
|
+
},
|
|
745
|
+
|
|
746
|
+
hasEffLabelNameAndDesp: function() {
|
|
747
|
+
//console.log('computed hasEffLabelNameAndDesp')
|
|
748
|
+
|
|
749
|
+
let vo = this
|
|
750
|
+
|
|
751
|
+
return vo.textLabelDataName !== '' || vo.textLabelDataDescription !== ''
|
|
752
|
+
},
|
|
753
|
+
|
|
754
|
+
useInforPadding: function() {
|
|
755
|
+
//console.log('computed useInforPadding')
|
|
756
|
+
|
|
757
|
+
let vo = this
|
|
758
|
+
|
|
759
|
+
//parseSpace
|
|
760
|
+
let cs = parseSpace(vo.inforPaddingStyle)
|
|
761
|
+
|
|
762
|
+
//padding
|
|
763
|
+
let padding = `padding:${cs};`
|
|
764
|
+
|
|
765
|
+
return padding
|
|
766
|
+
},
|
|
767
|
+
|
|
768
|
+
useMenuPaddingStyle: function() {
|
|
769
|
+
//console.log('computed useMenuPaddingStyle')
|
|
770
|
+
|
|
771
|
+
let vo = this
|
|
772
|
+
|
|
773
|
+
//parseSpace
|
|
774
|
+
let cs = parseSpace(vo.menuPaddingStyle)
|
|
775
|
+
|
|
776
|
+
//padding
|
|
777
|
+
let padding = `padding:${cs};`
|
|
778
|
+
|
|
779
|
+
return padding
|
|
780
|
+
},
|
|
781
|
+
|
|
782
|
+
useMenuBackgroundColor: function() {
|
|
783
|
+
//console.log('computed useMenuBackgroundColor')
|
|
784
|
+
|
|
785
|
+
let vo = this
|
|
786
|
+
|
|
787
|
+
return convertColor(vo.menuBackgroundColor)
|
|
788
|
+
},
|
|
789
|
+
|
|
790
|
+
},
|
|
791
|
+
methods: {
|
|
792
|
+
|
|
793
|
+
domresize: function(msg) {
|
|
794
|
+
// console.log('methods domresize', msg)
|
|
795
|
+
|
|
796
|
+
let vo = this
|
|
797
|
+
|
|
798
|
+
//tableHeight
|
|
799
|
+
let minHeight = 200
|
|
800
|
+
let tableHeight = 0
|
|
801
|
+
let panelHeight = get(vo, '$el.offsetHeight', 0)
|
|
802
|
+
let menuHeight = get(vo, '$refs.menu.offsetHeight')
|
|
803
|
+
if (panelHeight > 0 && menuHeight > 0) {
|
|
804
|
+
tableHeight = panelHeight - menuHeight
|
|
805
|
+
}
|
|
806
|
+
tableHeight = Math.max(tableHeight, minHeight)
|
|
807
|
+
vo.tableHeight = tableHeight
|
|
808
|
+
|
|
809
|
+
},
|
|
810
|
+
|
|
811
|
+
default: function() {
|
|
812
|
+
// console.log('methods default')
|
|
813
|
+
|
|
814
|
+
let vo = this
|
|
815
|
+
|
|
816
|
+
vo.tableHeight = 200
|
|
817
|
+
vo.rowsSelect = []
|
|
818
|
+
vo.useOpt = null
|
|
819
|
+
vo.rowsTemp = []
|
|
820
|
+
//不能清空nameTrans與descriptionTrans, 因default可能會被genOpt觸發, 而若是name與description變更在前, opt.rows變更在後, nameTrans與descriptionTrans被清空就無法顯示, 故得獨立出來分開處理
|
|
821
|
+
// vo.nameTrans = ''
|
|
822
|
+
// vo.descriptionTrans = ''
|
|
823
|
+
// vo.nameTemp = ''
|
|
824
|
+
// vo.descriptionTemp = ''
|
|
825
|
+
|
|
826
|
+
},
|
|
827
|
+
|
|
828
|
+
genOpt: function() {
|
|
829
|
+
// console.log('methods genOpt')
|
|
830
|
+
|
|
831
|
+
let vo = this
|
|
832
|
+
|
|
833
|
+
//check
|
|
834
|
+
if (size(vo.useKeys) === 0) {
|
|
835
|
+
vo.default()
|
|
836
|
+
return
|
|
837
|
+
}
|
|
838
|
+
|
|
839
|
+
//rows
|
|
840
|
+
let rows = null
|
|
841
|
+
if (isarr(get(vo, 'opt.rows'))) { //若有rows則使用
|
|
842
|
+
|
|
843
|
+
//rows
|
|
844
|
+
//w-aggrid-vue組件內採取會自動更新外部opt.rows
|
|
845
|
+
//但這邊組件用於專案, 需用cloneDeep斷開與外面記憶體共用問題, 於組件內改變數據才不會影響外面, 另computed有偵測rows故外面改變內部可自動更新
|
|
846
|
+
rows = cloneDeep(get(vo, 'opt.rows'))
|
|
847
|
+
|
|
848
|
+
}
|
|
849
|
+
else {
|
|
850
|
+
//若沒有rows則使用useKeys產生空數據
|
|
851
|
+
|
|
852
|
+
//rows
|
|
853
|
+
rows = [arr2dt(vo.useKeys)]
|
|
854
|
+
|
|
855
|
+
}
|
|
856
|
+
|
|
857
|
+
//sortColIds
|
|
858
|
+
if (isestr(vo.sortColIds)) {
|
|
859
|
+
try {
|
|
860
|
+
rows = sortBy(rows, vo.sortColIds)
|
|
861
|
+
}
|
|
862
|
+
catch (err) {
|
|
863
|
+
console.log(err)
|
|
864
|
+
}
|
|
865
|
+
}
|
|
866
|
+
else if (isearr(vo.sortColIds)) {
|
|
867
|
+
each(vo.sortColIds, (id) => {
|
|
868
|
+
try {
|
|
869
|
+
rows = sortBy(rows, id)
|
|
870
|
+
}
|
|
871
|
+
catch (err) {
|
|
872
|
+
console.log(err)
|
|
873
|
+
}
|
|
874
|
+
})
|
|
875
|
+
}
|
|
876
|
+
|
|
877
|
+
//backup
|
|
878
|
+
vo.rowsTemp = cloneDeep(rows)
|
|
879
|
+
|
|
880
|
+
//useOpt
|
|
881
|
+
let useOpt = {
|
|
882
|
+
|
|
883
|
+
defCellAlignH: 'center',
|
|
884
|
+
|
|
885
|
+
...vo.opt,
|
|
886
|
+
|
|
887
|
+
//由此組件複寫
|
|
888
|
+
language: vo.language,
|
|
889
|
+
rows,
|
|
890
|
+
keys: vo.useKeys,
|
|
891
|
+
defCellEditable: vo.editable,
|
|
892
|
+
kpHead: vo.useKpHead,
|
|
893
|
+
rowChecked: function(rs) {
|
|
894
|
+
// console.log('rowChecked rs', rs)
|
|
895
|
+
|
|
896
|
+
//save
|
|
897
|
+
vo.rowsSelect = rs
|
|
898
|
+
|
|
899
|
+
//call
|
|
900
|
+
if (isfun(get(vo.opt, 'rowChecked'))) {
|
|
901
|
+
vo.opt.rowChecked(rs)
|
|
902
|
+
}
|
|
903
|
+
|
|
904
|
+
},
|
|
905
|
+
filterChange: function(msg) {
|
|
906
|
+
// console.log('filterChange msg', msg)
|
|
907
|
+
|
|
908
|
+
//save
|
|
909
|
+
let isFilter = get(msg, 'isFilter', false)
|
|
910
|
+
vo.isFilter = isFilter
|
|
911
|
+
|
|
912
|
+
//call
|
|
913
|
+
if (isfun(get(vo.opt, 'filterChange'))) {
|
|
914
|
+
vo.opt.filterChange(msg)
|
|
915
|
+
}
|
|
916
|
+
|
|
917
|
+
},
|
|
918
|
+
// rowsChange: function(rs) { //暫時不需要額外處理rowsChange
|
|
919
|
+
// // console.log('rowsChange', rs)
|
|
920
|
+
|
|
921
|
+
// //call
|
|
922
|
+
// if (isfun(get(vo.opt, 'filterChange'))) {
|
|
923
|
+
// vo.opt.rowsChange(rs)
|
|
924
|
+
// }
|
|
925
|
+
|
|
926
|
+
// },
|
|
927
|
+
}
|
|
928
|
+
|
|
929
|
+
//hideIds
|
|
930
|
+
if (isestr(vo.hideIds)) {
|
|
931
|
+
useOpt.kpHeadHide = arr2dt([vo.hideIds], true)
|
|
932
|
+
}
|
|
933
|
+
else if (isearr(vo.hideIds)) {
|
|
934
|
+
useOpt.kpHeadHide = arr2dt(vo.hideIds, true)
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
//fixIds
|
|
938
|
+
if (isestr(vo.fixIds)) {
|
|
939
|
+
useOpt.kpHeadFixLeft = arr2dt([vo.fixIds], true)
|
|
940
|
+
}
|
|
941
|
+
else if (isearr(vo.fixIds)) {
|
|
942
|
+
useOpt.kpHeadFixLeft = arr2dt(vo.fixIds, true)
|
|
943
|
+
}
|
|
944
|
+
|
|
945
|
+
//checkId
|
|
946
|
+
if (vo.editable) {
|
|
947
|
+
if (isestr(vo.checkId)) {
|
|
948
|
+
useOpt.kpHeadCheckBox = arr2dt([vo.checkId], true)
|
|
949
|
+
}
|
|
950
|
+
}
|
|
951
|
+
|
|
952
|
+
//modify by opt
|
|
953
|
+
if (iseobj(vo.opt)) {
|
|
954
|
+
let optTemp = cloneDeep(vo.opt)
|
|
955
|
+
each(optTemp, (v, k) => {
|
|
956
|
+
if (k !== 'keys' && k !== 'rows' && k !== 'kpHead' && k !== 'editable') { //已於前面使用過就不複寫, 例如rows會被重排序一定不能被複寫回原數據
|
|
957
|
+
useOpt[k] = v
|
|
958
|
+
}
|
|
959
|
+
})
|
|
960
|
+
}
|
|
961
|
+
|
|
962
|
+
//save
|
|
963
|
+
vo.useOpt = useOpt
|
|
964
|
+
|
|
965
|
+
},
|
|
966
|
+
|
|
967
|
+
addRow: function() {
|
|
968
|
+
//console.log('methods addRow')
|
|
969
|
+
|
|
970
|
+
let vo = this
|
|
971
|
+
|
|
972
|
+
//check
|
|
973
|
+
if (size(vo.useKeys) === 0) {
|
|
974
|
+
vo.default()
|
|
975
|
+
vo.$emit('error', vo.errorMsgFromAddRow)
|
|
976
|
+
return
|
|
977
|
+
}
|
|
978
|
+
|
|
979
|
+
//newRow
|
|
980
|
+
let newRow = arr2dt(vo.useKeys)
|
|
981
|
+
// console.log('newRow(ori)', newRow)
|
|
982
|
+
|
|
983
|
+
//id
|
|
984
|
+
newRow.id = genID()
|
|
985
|
+
// console.log('newRow(add id)', newRow)
|
|
986
|
+
|
|
987
|
+
//beforeAddRow
|
|
988
|
+
if (isfun(get(vo, 'opt.beforeAddRow'))) {
|
|
989
|
+
newRow = vo.opt.beforeAddRow(newRow)
|
|
990
|
+
// console.log('newRow(beforeAddRow)', newRow)
|
|
991
|
+
}
|
|
992
|
+
|
|
993
|
+
try {
|
|
994
|
+
|
|
995
|
+
//cloneDeep, 記憶體須脫勾
|
|
996
|
+
let rows = cloneDeep(vo.useOpt.rows)
|
|
997
|
+
|
|
998
|
+
//push
|
|
999
|
+
rows.push(newRow)
|
|
1000
|
+
|
|
1001
|
+
//save
|
|
1002
|
+
vo.useOpt.rows = rows //儲存新rows才有辦法觸發ag-grid展示變更
|
|
1003
|
+
|
|
1004
|
+
//nextTick, 變更數據後頁面會先渲染, nextTick後才能調捲軸, 否則太快執行會被頁面渲染蓋掉
|
|
1005
|
+
vo.$nextTick(() => {
|
|
1006
|
+
|
|
1007
|
+
//getApi
|
|
1008
|
+
let getApi = get(vo, `$refs.cmp.getApi`)
|
|
1009
|
+
|
|
1010
|
+
//check
|
|
1011
|
+
if (isfun(getApi)) {
|
|
1012
|
+
|
|
1013
|
+
//ensureIndexVisible, scrollTo(index)
|
|
1014
|
+
let api = getApi()
|
|
1015
|
+
api.ensureIndexVisible(vo.useOpt.rows.length - 1, 'bottom') //捲到最下
|
|
1016
|
+
|
|
1017
|
+
}
|
|
1018
|
+
|
|
1019
|
+
})
|
|
1020
|
+
|
|
1021
|
+
vo.$emit('success', vo.successMsgFromAddRow)
|
|
1022
|
+
}
|
|
1023
|
+
catch (err) {
|
|
1024
|
+
console.log(err)
|
|
1025
|
+
vo.$emit('error', vo.errorMsgFromAddRow)
|
|
1026
|
+
}
|
|
1027
|
+
|
|
1028
|
+
},
|
|
1029
|
+
|
|
1030
|
+
removeRows: function() {
|
|
1031
|
+
// console.log('methods removeRows')
|
|
1032
|
+
|
|
1033
|
+
let vo = this
|
|
1034
|
+
|
|
1035
|
+
//rows
|
|
1036
|
+
let rows = get(vo, 'useOpt.rows', [])
|
|
1037
|
+
rows = cloneDeep(rows)
|
|
1038
|
+
|
|
1039
|
+
//check
|
|
1040
|
+
if (size(rows) === 0) {
|
|
1041
|
+
return
|
|
1042
|
+
}
|
|
1043
|
+
|
|
1044
|
+
//inds
|
|
1045
|
+
let inds = map(vo.rowsSelect, 'rowInd')
|
|
1046
|
+
|
|
1047
|
+
//check
|
|
1048
|
+
if (size(inds) === 0) {
|
|
1049
|
+
return
|
|
1050
|
+
}
|
|
1051
|
+
|
|
1052
|
+
//arrPullAt, 內部記憶體已脫勾
|
|
1053
|
+
rows = arrPullAt(rows, inds)
|
|
1054
|
+
|
|
1055
|
+
//save
|
|
1056
|
+
try {
|
|
1057
|
+
vo.useOpt.rows = rows
|
|
1058
|
+
}
|
|
1059
|
+
catch (err) {
|
|
1060
|
+
vo.$emit('error', vo.errorMsgFromRemoveRow)
|
|
1061
|
+
}
|
|
1062
|
+
|
|
1063
|
+
//reset rowsSelect
|
|
1064
|
+
vo.rowsSelect = []
|
|
1065
|
+
|
|
1066
|
+
},
|
|
1067
|
+
|
|
1068
|
+
downloadData: function(mode = 'raw') {
|
|
1069
|
+
//console.log('methods downloadData', mode)
|
|
1070
|
+
|
|
1071
|
+
let vo = this
|
|
1072
|
+
|
|
1073
|
+
try {
|
|
1074
|
+
|
|
1075
|
+
//keyFun
|
|
1076
|
+
let keyFun = ''
|
|
1077
|
+
if (mode === 'raw') {
|
|
1078
|
+
keyFun = 'downloadData'
|
|
1079
|
+
}
|
|
1080
|
+
else if (mode === 'display') {
|
|
1081
|
+
keyFun = 'downloadDisplayData'
|
|
1082
|
+
}
|
|
1083
|
+
else {
|
|
1084
|
+
throw new Error(`invlaid mode[${mode}]`)
|
|
1085
|
+
}
|
|
1086
|
+
|
|
1087
|
+
//fun
|
|
1088
|
+
let fun = get(vo, `$refs.cmp.${keyFun}`)
|
|
1089
|
+
|
|
1090
|
+
//check
|
|
1091
|
+
if (!isfun(fun)) {
|
|
1092
|
+
return
|
|
1093
|
+
}
|
|
1094
|
+
|
|
1095
|
+
//downloadData
|
|
1096
|
+
fun({
|
|
1097
|
+
funGetKeysHook: (keys) => {
|
|
1098
|
+
// console.log('funGetKeysHook', keys)
|
|
1099
|
+
if (isestr(vo.removeIdsWhenDownload)) {
|
|
1100
|
+
pull(keys, vo.removeIdsWhenDownload)
|
|
1101
|
+
}
|
|
1102
|
+
else if (isearr(vo.removeIdsWhenDownload)) {
|
|
1103
|
+
pull(keys, ...vo.removeIdsWhenDownload)
|
|
1104
|
+
}
|
|
1105
|
+
return keys
|
|
1106
|
+
},
|
|
1107
|
+
// funGetLtdtHook: function(ltdt) {
|
|
1108
|
+
// // console.log('funGetLtdtHook', ltdt)
|
|
1109
|
+
// return ltdt
|
|
1110
|
+
// },
|
|
1111
|
+
funGetLtdtHook: vo.funGetLtdtHookWhenDownload,
|
|
1112
|
+
// funGetMatHook: function(mat) {
|
|
1113
|
+
// // console.log('funGetMatHook', mat)
|
|
1114
|
+
// return mat
|
|
1115
|
+
// },
|
|
1116
|
+
funGetMatHook: vo.funGetMatHookWhenDownload,
|
|
1117
|
+
useHead: vo.enableHeadWhenDownload, //default: false
|
|
1118
|
+
fileName: vo.fileNameWhenDownload, //default: 'data.xlsx'
|
|
1119
|
+
sheetName: vo.sheetNameWhenDownload, //default: data
|
|
1120
|
+
})
|
|
1121
|
+
|
|
1122
|
+
vo.$emit('success', vo.successMsgFromDownloadData)
|
|
1123
|
+
}
|
|
1124
|
+
catch (err) {
|
|
1125
|
+
vo.$emit('error', vo.errorMsgFromDownloadData)
|
|
1126
|
+
}
|
|
1127
|
+
|
|
1128
|
+
},
|
|
1129
|
+
|
|
1130
|
+
uploadData: function(uploadModeSelect) {
|
|
1131
|
+
//console.log('methods uploadData', uploadModeSelect)
|
|
1132
|
+
|
|
1133
|
+
let vo = this
|
|
1134
|
+
|
|
1135
|
+
//fun
|
|
1136
|
+
let fun = get(vo, `$refs.cmp.uploadData`)
|
|
1137
|
+
|
|
1138
|
+
//check
|
|
1139
|
+
if (!isfun(fun)) {
|
|
1140
|
+
return
|
|
1141
|
+
}
|
|
1142
|
+
|
|
1143
|
+
//optForUploadData
|
|
1144
|
+
let optForUploadData = get(vo, 'opt.optForUploadData')
|
|
1145
|
+
if (!isobj(optForUploadData)) {
|
|
1146
|
+
optForUploadData = {}
|
|
1147
|
+
}
|
|
1148
|
+
|
|
1149
|
+
//uploadMode, 選擇上傳模式
|
|
1150
|
+
let uploadMode = get(optForUploadData, 'uploadMode')
|
|
1151
|
+
if (!isestr(uploadMode)) {
|
|
1152
|
+
optForUploadData.uploadMode = uploadModeSelect
|
|
1153
|
+
}
|
|
1154
|
+
|
|
1155
|
+
//beforeUpload, 自動去除無效數據
|
|
1156
|
+
let beforeUpload = get(optForUploadData, 'beforeUpload')
|
|
1157
|
+
if (!isfun(beforeUpload)) {
|
|
1158
|
+
optForUploadData.beforeUpload = (rows) => {
|
|
1159
|
+
// console.log('beforeUpload', rows)
|
|
1160
|
+
|
|
1161
|
+
//calc eff rows
|
|
1162
|
+
let rs = []
|
|
1163
|
+
each(rows, (row) => {
|
|
1164
|
+
let b = every(row, (v) => {
|
|
1165
|
+
return v === ''
|
|
1166
|
+
})
|
|
1167
|
+
if (!b) {
|
|
1168
|
+
rs.push(row)
|
|
1169
|
+
}
|
|
1170
|
+
})
|
|
1171
|
+
// console.log('rs', rs)
|
|
1172
|
+
|
|
1173
|
+
return rs
|
|
1174
|
+
}
|
|
1175
|
+
}
|
|
1176
|
+
// console.log('optForUploadData', optForUploadData)
|
|
1177
|
+
|
|
1178
|
+
//upload
|
|
1179
|
+
fun(optForUploadData)
|
|
1180
|
+
.then((rows) => {
|
|
1181
|
+
// console.log('upload then', rows)
|
|
1182
|
+
|
|
1183
|
+
//check
|
|
1184
|
+
if (size(rows) === 0) {
|
|
1185
|
+
vo.$emit('error', vo.errorMsgFromUploadEmptyData)
|
|
1186
|
+
}
|
|
1187
|
+
else {
|
|
1188
|
+
vo.$emit('success', vo.successMsgFromUploadData)
|
|
1189
|
+
}
|
|
1190
|
+
|
|
1191
|
+
//reset rowsSelect
|
|
1192
|
+
vo.rowsSelect = []
|
|
1193
|
+
|
|
1194
|
+
})
|
|
1195
|
+
.catch((err) => {
|
|
1196
|
+
console.log('catch', err)
|
|
1197
|
+
vo.$emit('error', vo.errorMsgFromUploadData)
|
|
1198
|
+
})
|
|
1199
|
+
|
|
1200
|
+
},
|
|
1201
|
+
|
|
1202
|
+
save: function() {
|
|
1203
|
+
//console.log('methods save')
|
|
1204
|
+
|
|
1205
|
+
let vo = this
|
|
1206
|
+
|
|
1207
|
+
function core() {
|
|
1208
|
+
|
|
1209
|
+
//save
|
|
1210
|
+
let name = trim(vo.nameTrans)
|
|
1211
|
+
let description = trim(vo.descriptionTrans)
|
|
1212
|
+
|
|
1213
|
+
//check
|
|
1214
|
+
if (!isestr(name)) {
|
|
1215
|
+
return { err: vo.errorMsgFromNoName }
|
|
1216
|
+
}
|
|
1217
|
+
|
|
1218
|
+
//rows
|
|
1219
|
+
let rows = get(vo, 'useOpt.rows', [])
|
|
1220
|
+
|
|
1221
|
+
//ltdtmapping
|
|
1222
|
+
rows = ltdtmapping(rows, vo.useKeys)
|
|
1223
|
+
|
|
1224
|
+
//update fields
|
|
1225
|
+
if (isfun(get(vo, 'opt.modifyDataWhenSave'))) {
|
|
1226
|
+
rows = vo.opt.modifyDataWhenSave(rows)
|
|
1227
|
+
// rows = map(rows, (v, k) => {
|
|
1228
|
+
// if (!isestr(v.id)) {
|
|
1229
|
+
// v.id = genID()
|
|
1230
|
+
// }
|
|
1231
|
+
// v.mappingId = vo.mappingId
|
|
1232
|
+
// v.order = k
|
|
1233
|
+
// v.isActive = 'y'
|
|
1234
|
+
// return v
|
|
1235
|
+
// })
|
|
1236
|
+
}
|
|
1237
|
+
|
|
1238
|
+
//check
|
|
1239
|
+
let checkNoDataWhenSave = get(vo, 'opt.checkNoDataWhenSave')
|
|
1240
|
+
if (!isbol(checkNoDataWhenSave)) {
|
|
1241
|
+
checkNoDataWhenSave = false
|
|
1242
|
+
}
|
|
1243
|
+
if (checkNoDataWhenSave && rows.length === 0) {
|
|
1244
|
+
return { err: vo.errorMsgFromNoData }
|
|
1245
|
+
}
|
|
1246
|
+
|
|
1247
|
+
//res
|
|
1248
|
+
let res = {
|
|
1249
|
+
name,
|
|
1250
|
+
nameTemp: vo.nameTrans,
|
|
1251
|
+
description,
|
|
1252
|
+
descriptionTemp: vo.descriptionTemp,
|
|
1253
|
+
rows: cloneDeep(rows),
|
|
1254
|
+
rowsTemp: cloneDeep(vo.rowsTemp),
|
|
1255
|
+
}
|
|
1256
|
+
// console.log('res', res)
|
|
1257
|
+
|
|
1258
|
+
return res
|
|
1259
|
+
}
|
|
1260
|
+
|
|
1261
|
+
//res
|
|
1262
|
+
let res
|
|
1263
|
+
try {
|
|
1264
|
+
res = core()
|
|
1265
|
+
}
|
|
1266
|
+
catch (err) {
|
|
1267
|
+
res = { err }
|
|
1268
|
+
}
|
|
1269
|
+
|
|
1270
|
+
return res
|
|
1271
|
+
},
|
|
1272
|
+
|
|
1273
|
+
}
|
|
1274
|
+
}
|
|
1275
|
+
</script>
|
|
1276
|
+
|
|
1277
|
+
<style scoped>
|
|
1278
|
+
</style>
|