cnhis-design-vue 0.3.3-beta → 0.3.6-beta

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 (81) hide show
  1. package/env.d.ts +2 -0
  2. package/es/big-table/index.css +1 -0
  3. package/es/big-table/index.js +116 -74
  4. package/es/button-print/index.css +1 -0
  5. package/es/drag-layout/index.css +2 -1
  6. package/es/drag-layout/index.js +33 -58
  7. package/es/grid/index.css +2 -1
  8. package/es/grid/index.js +2 -3
  9. package/es/index.css +2 -1
  10. package/es/index.js +152 -135
  11. package/package.json +5 -2
  12. package/packages/big-table/index.ts +17 -0
  13. package/packages/big-table/src/BigTable.vue +2511 -0
  14. package/packages/big-table/src/assets/iconfont/iconfont.less +21 -0
  15. package/packages/big-table/src/assets/iconfont/iconfont.ttf +0 -0
  16. package/packages/big-table/src/assets/img/failure.png +0 -0
  17. package/packages/big-table/src/assets/img/icon-asc.png +0 -0
  18. package/packages/big-table/src/assets/img/icon-desc.png +0 -0
  19. package/packages/big-table/src/assets/img/no-permission.png +0 -0
  20. package/packages/big-table/src/assets/img/nodata.png +0 -0
  21. package/packages/big-table/src/assets/img/notfound.png +0 -0
  22. package/packages/big-table/src/assets/img/qr.png +0 -0
  23. package/packages/big-table/src/assets/img/video_default_cover.png +0 -0
  24. package/packages/big-table/src/assets/img/xb_big.png +0 -0
  25. package/packages/big-table/src/assets/img/xb_small.png +0 -0
  26. package/packages/big-table/src/assets/style/table-base.less +275 -0
  27. package/packages/big-table/src/assets/style/table-global.less +167 -0
  28. package/packages/big-table/src/bigTableEmits.ts +46 -0
  29. package/packages/big-table/src/bigTableProps.ts +125 -0
  30. package/packages/big-table/src/bigTableState.ts +62 -0
  31. package/packages/big-table/src/components/NoData.vue +90 -0
  32. package/packages/big-table/src/components/SvgIcon.vue +49 -0
  33. package/packages/big-table/src/components/TextOverTooltip.vue +110 -0
  34. package/packages/big-table/src/components/edit-form/EditForm.vue +426 -0
  35. package/packages/big-table/src/components/edit-form/edit-component/edit-date-picker/edit-date-picker.vue +66 -0
  36. package/packages/big-table/src/components/edit-form/edit-component/edit-digital/edit-digital.vue +60 -0
  37. package/packages/big-table/src/components/edit-form/edit-component/edit-input/edit-input.vue +38 -0
  38. package/packages/big-table/src/components/edit-form/edit-component/edit-input-password/edit-input-password.vue +89 -0
  39. package/packages/big-table/src/components/edit-form/edit-component/edit-month-picker/edit-month-picker.vue +38 -0
  40. package/packages/big-table/src/components/edit-form/edit-component/edit-search/edit-search.vue +63 -0
  41. package/packages/big-table/src/components/edit-form/edit-component/edit-search-more/edit-search-more.vue +69 -0
  42. package/packages/big-table/src/components/edit-form/edit-component/edit-select/edit-select.vue +51 -0
  43. package/packages/big-table/src/components/edit-form/edit-component/edit-select-multiple/edit-select-multiple.vue +60 -0
  44. package/packages/big-table/src/components/edit-form/edit-component/edit-textarea/edit-textarea.vue +34 -0
  45. package/packages/big-table/src/components/edit-form/edit-component/edit-time-picker/edit-time-picker.vue +42 -0
  46. package/packages/big-table/src/components/edit-form/edit-component/editFormProps.ts +91 -0
  47. package/packages/big-table/src/components/edit-form/edit-component/register-com.ts +18 -0
  48. package/packages/big-table/src/components/edit-form/hooks/useConfigData.ts +79 -0
  49. package/packages/big-table/src/components/edit-form/hooks/useDateType.ts +184 -0
  50. package/packages/big-table/src/components/edit-form/hooks/useFormCommon.ts +373 -0
  51. package/packages/big-table/src/components/edit-form/hooks/useItemDefault.ts +638 -0
  52. package/packages/big-table/src/components/edit-form/hooks/useSearch.ts +910 -0
  53. package/packages/big-table/src/components/edit-form/hooks/useValidateRules.ts +387 -0
  54. package/packages/big-table/src/components/edit-form/interface.ts +53 -0
  55. package/packages/big-table/src/components/edit-form/types.ts +3 -0
  56. package/packages/big-table/src/components/edit-form/utils.ts +247 -0
  57. package/packages/big-table/src/hooks/useBatchEditing.ts +574 -0
  58. package/packages/big-table/src/hooks/useFormat.ts +612 -0
  59. package/packages/big-table/src/hooks/useNestTable.ts +109 -0
  60. package/packages/big-table/src/hooks/useTableParse.ts +169 -0
  61. package/packages/big-table/src/utils.ts +705 -0
  62. package/packages/button-print/index.ts +15 -0
  63. package/packages/button-print/src/ButtonPrint.vue +697 -0
  64. package/packages/button-print/src/components/IdentityVerification.vue +149 -0
  65. package/packages/button-print/src/interfaces.ts +19 -0
  66. package/packages/button-print/src/utils/crypto.js +25 -0
  67. package/packages/button-print/src/utils/print.es.min.js +1 -0
  68. package/packages/drag-layout/index.ts +15 -0
  69. package/packages/drag-layout/src/DragFormLeftItem.vue +131 -0
  70. package/packages/drag-layout/src/DragFormRightItem.vue +277 -0
  71. package/packages/drag-layout/src/DragLayout.vue +712 -0
  72. package/packages/grid/index.ts +17 -0
  73. package/packages/grid/src/Grid.tsx +22 -0
  74. package/packages/grid/src/hooks.ts +168 -0
  75. package/packages/index.ts +36 -0
  76. package/src/component/svg/index.vue +49 -0
  77. package/src/core/create.ts +5 -0
  78. package/src/global/variable.ts +2 -0
  79. package/src/utils/clickoutside.ts +80 -0
  80. package/src/utils/crypto.js +25 -0
  81. package/src/utils/vexutils.ts +811 -0
@@ -0,0 +1,712 @@
1
+ <template>
2
+ <div class="drag-layout-container" ref="dragLayoutContainer">
3
+ <div class="border-box"></div>
4
+ <!-- 左边 -->
5
+ <div class="text-area" ref="textArea">
6
+ <div class="info-header">备选字段</div>
7
+ <draggable
8
+ class="min-height text-draggable"
9
+ itemKey="val_key"
10
+ v-model="state.hideFields"
11
+ group="formitem"
12
+ :animation="300"
13
+ ref="textDraggable"
14
+ @add="leftDragAdd"
15
+ >
16
+ <template #item="{ element }" tag="li">
17
+ <li>
18
+ <slot name="leftItem" :itemData="element">
19
+ <DragFormLeftItem :element="element" />
20
+ </slot>
21
+ </li>
22
+ </template>
23
+ </draggable>
24
+ </div>
25
+ <!-- 右边 -->
26
+ <div class="form-area">
27
+ <div class="info-header">
28
+ <NButton class="add-divider" dashed size="small" @click="handlerAddBranchLine"
29
+ >新建分行符</NButton
30
+ >
31
+ <NButton class="add-divider" dashed size="small" @click="handlerAddLine">新建分线栏</NButton>
32
+ </div>
33
+ <draggable
34
+ class="min-height draggable-content"
35
+ itemKey="val_key"
36
+ v-model="state.showFields"
37
+ :move="handleDragRemove"
38
+ group="formitem"
39
+ :animation="300"
40
+ filter=".undraggable"
41
+ >
42
+ <template #item="{ element, index }">
43
+ <div
44
+ :style="{
45
+ width: `${(element.elem_width || 12) * 2 / 24 * 100}%`,
46
+ display: element.elem_width && element.elem_width < 12 ? 'inline-block': 'block'
47
+ }"
48
+ :class="{
49
+ 'combination-col': element.html_type === 'COMBINATION'
50
+ }"
51
+ >
52
+ <slot name="rightItem" :itemData="element">
53
+ <DragFormRightItem
54
+ :element="element"
55
+ :index="index"
56
+ @handleEdit="handleEdit"
57
+ @handleDelete="handleDelete"
58
+ />
59
+ </slot>
60
+ </div>
61
+ </template>
62
+ </draggable>
63
+ </div>
64
+
65
+ <!-- 弹窗 -->
66
+ <NModal
67
+ preset="dialog"
68
+ title="字段属性"
69
+ positive-text="确认"
70
+ negative-text="取消"
71
+ :show-icon="false"
72
+ :zIndex="2001"
73
+ v-model:show="state.modalVisible"
74
+ @positive-click="handleOk"
75
+ v-if="state.modalVisible"
76
+ >
77
+ <NForm ref="formRef" :model="state.modalFormData" :rules="rules" label-placement="left" label-width="auto">
78
+ <NGrid>
79
+ <!-- 名称 -->
80
+ <NFormItemGi
81
+ v-if="!is_text"
82
+ :span="18"
83
+ label="名称"
84
+ >
85
+ <NInput
86
+ placeholder="名称"
87
+ v-model:value="state.modalFormData.name"
88
+ />
89
+ </NFormItemGi>
90
+ <template v-if="!isPageLayout">
91
+ <!-- 默认值 -->
92
+ <NFormItemGi
93
+ v-if="!is_text"
94
+ :span="18"
95
+ label="默认值"
96
+ >
97
+ <NInput
98
+ placeholder="默认值"
99
+ v-model:value="state.modalFormData.default_val"
100
+ />
101
+ </NFormItemGi>
102
+ </template>
103
+
104
+ <!-- 宽度 -->
105
+ <NFormItemGi
106
+ v-if="!hideModalWidth"
107
+ :span="18"
108
+ label="宽度"
109
+ >
110
+ <NSelect
111
+ :options="state.widthOptions"
112
+ v-model:value="state.modalFormData.elem_width"
113
+ >
114
+ </NSelect>
115
+ </NFormItemGi>
116
+
117
+ <!-- 高度 -->
118
+ <NFormItemGi
119
+ v-if="isPageLayout && !hideModalWidth"
120
+ :span="18"
121
+ label="高度(行)"
122
+ >
123
+ <NInput
124
+ placeholder="高度(行)"
125
+ v-model:value="state.modalFormData.line_height"
126
+ />
127
+ </NFormItemGi>
128
+ <template v-if="!is_text">
129
+ <!-- 说明文本 -->
130
+ <NFormItemGi
131
+ v-if="!isPageLayout"
132
+ :span="18"
133
+ label="说明文本"
134
+ >
135
+ <NInput
136
+ placeholder="说明文本"
137
+ v-model:value="state.modalFormData.placeholder"
138
+ />
139
+ </NFormItemGi>
140
+
141
+ <NFormItemGi
142
+ v-if="state.modalFormData.html_type != 'PAGE_LAYOUT'"
143
+ :span="18"
144
+ :label="'问号提示'"
145
+ >
146
+ <NInput
147
+ :maxLength="200"
148
+ placeholder="请输入问号提示"
149
+ v-model:value="state.modalFormData.remark"
150
+ />
151
+ </NFormItemGi>
152
+ </template>
153
+
154
+ <template
155
+ v-if="
156
+ state.modalFormData.is_fast_reply_field != 1 &&
157
+ (state.modalFormData.html_type == 'TEXTAREA' || state.modalFormData.html_type == 'INPUT')
158
+ "
159
+ >
160
+ <!-- 快速输入 -->
161
+ <NFormItemGi
162
+ :span="18"
163
+ label="快速输入"
164
+ >
165
+ <NCheckbox :checked="state.modalFormData.is_fast_reply" @on-update:checked="checkOnChange"></NCheckbox>
166
+ </NFormItemGi>
167
+ <!-- 回复分类 -->
168
+ <NFormItemGi
169
+ v-if="state.modalFormData.is_fast_reply"
170
+ :span="18"
171
+ :label="'短语分类'"
172
+ path="reply_category"
173
+ >
174
+ <NSelect
175
+ multiple
176
+ v-model:value="state.modalFormData.reply_category"
177
+ filterable
178
+ :filter="vexutils.filterOption"
179
+ placeholder="分类名称"
180
+ @update:value="changeCategofy"
181
+ :options="state.publicReply"
182
+ >
183
+ </NSelect>
184
+ </NFormItemGi>
185
+ <!-- 部分隐藏 -->
186
+ <NFormItemGi
187
+ v-show="state.modalFormData.is_edit == 0"
188
+ label="部分隐藏"
189
+ :span="18"
190
+ >
191
+ <NInputNumber
192
+ placeholder="请输入"
193
+ v-model:value="state.modalFormData.hideExpression"
194
+ />
195
+ </NFormItemGi>
196
+ </template>
197
+
198
+ <!-- 动态文本值 -->
199
+ <NFormItemGi v-if="is_text" :label="'文本内容(支持FreeMarker)'">
200
+ <NInput
201
+ placeholder="请输入动态文本内容"
202
+ type="textarea"
203
+ v-model:value="state.modalFormData.default_val"
204
+ />
205
+ </NFormItemGi>
206
+ </NGrid>
207
+ </NForm>
208
+ </NModal>
209
+
210
+ <NModal
211
+ preset="dialog"
212
+ :title="state.lineAddTitle"
213
+ positive-text="确认"
214
+ negative-text="取消"
215
+ :show-icon="false"
216
+ :zIndex="2001"
217
+ v-model:show="state.visibleLineAdd"
218
+ @negative-click="handleCancel"
219
+ @positive-click="handleOkLineAdd"
220
+ >
221
+ <div>
222
+ <label class="new-name">名称</label>
223
+ <NInput class="view-model-input new-name-input" v-model:value="state.itemTitleNameAdd" />
224
+ </div>
225
+ <div v-show="state.lineType != 'LINE_BREAKS'">
226
+ <input
227
+ class="name-new-change"
228
+ @change="onChangeAdd($event, 'is_show')"
229
+ type="checkbox"
230
+ v-model="state.isAddChecked"
231
+ />
232
+ 默认展开
233
+ <br />
234
+ <input
235
+ class="name-new-change"
236
+ @change="onChangeAdd($event, 'is_not_fold')"
237
+ type="checkbox"
238
+ v-model="state.is_not_foldChecked"
239
+ />
240
+ 不可折叠
241
+ <!-- {{ $t("1.9.69") }} -->
242
+ </div>
243
+ </NModal>
244
+ </div>
245
+ </template>
246
+
247
+ <script lang="ts">
248
+ import create from '@/core/create';
249
+ export default create({
250
+ name: "DragLayout"
251
+ })
252
+ </script>
253
+
254
+ <script setup lang="ts">
255
+ import { ref, reactive, computed, watch, onMounted, nextTick } from 'vue'
256
+ import { NGrid, NGridItem, NFormItemGi, NButton, NModal, NForm, NFormItem, NInput, NSelect, NCheckbox, NInputNumber, FormRules, FormInst } from 'naive-ui'
257
+ import draggable from "vuedraggable";
258
+ import DragFormLeftItem from "./DragFormLeftItem.vue";
259
+ import DragFormRightItem from "./DragFormRightItem.vue";
260
+ import vexutils from '@/utils/vexutils';
261
+
262
+ const dragLayoutContainer: any = ref(null)
263
+ const textArea: any = ref(null)
264
+ const formRef = ref<FormInst | null>(null)
265
+
266
+ const state: any = reactive({
267
+ modalVisible: false,
268
+ visibleLineAdd: false,
269
+
270
+ modalFormData: {
271
+ name: '', // 名称
272
+ elem_width: '12', // 宽度
273
+ reply_category: [], // 快速回复分类
274
+ is_fast_reply: false, // 快速输入
275
+ html_type: '', // 类型
276
+ is_edit: 1, // 是否可编辑
277
+ hideExpression: '', // 部分隐藏
278
+ remark: '', // 字段说明
279
+ default_val: '', // 默认值
280
+ placeholder: '', // 字段提示语
281
+ publicReply: [], // 分类数据
282
+ is_fast_reply_field: 0 // 快速回复开启
283
+ },
284
+ publicReply: [],
285
+
286
+ itemTitleNameAdd: '',
287
+ is_show: 0,
288
+ is_not_fold: 0,
289
+ isAddChecked: false,
290
+ is_not_foldChecked: false,
291
+
292
+ handleLIne: 'add',
293
+ lineType: "LINEBAR",
294
+
295
+ showFields: [],
296
+ hideFields: [],
297
+ curIndex: undefined,
298
+ editModalType: 'edit',
299
+
300
+ lineAddTitle: '新建分线栏',
301
+ widthOptions: [
302
+ {
303
+ label: "整行",
304
+ value: '12',
305
+ class: 'dragForm-select-drop'
306
+ },
307
+ {
308
+ label: "半行",
309
+ value: '6',
310
+ class: 'dragForm-select-drop'
311
+ },
312
+ {
313
+ label: '5/6',
314
+ value: '10',
315
+ class: 'dragForm-select-drop'
316
+ },
317
+ {
318
+ label: '2/3',
319
+ value: '8',
320
+ class: 'dragForm-select-drop'
321
+ },
322
+ {
323
+ label: '1/3',
324
+ value: '4',
325
+ class: 'dragForm-select-drop'
326
+ },
327
+ {
328
+ label: '3/4',
329
+ value: '9',
330
+ class: 'dragForm-select-drop'
331
+ },
332
+ {
333
+ label: '1/4',
334
+ value: '3',
335
+ class: 'dragForm-select-drop'
336
+ }
337
+ ]
338
+ })
339
+
340
+ const rules: FormRules = {
341
+ reply_category: [
342
+ {
343
+ required: state.modalFormData.is_fast_reply,
344
+ trigger: ['blur', 'change'],
345
+ message: '请输入'
346
+ }
347
+ ]
348
+ }
349
+
350
+ const props = withDefaults(defineProps<{
351
+ leftList?: any[]
352
+ rightList?: any[]
353
+ getpublicReplyList?: Function
354
+ }>(), {
355
+ leftList: () => [],
356
+ rightList: () => [],
357
+ getpublicReplyList: () => Promise.resolve([])
358
+ })
359
+
360
+ const emit = defineEmits(['updateConfig']);
361
+
362
+ const isPageLayout = computed(() => state.modalFormData.html_type === "PAGE_LAYOUT" || state.modalFormData.html_type === "COMBINATION")
363
+ const is_text = computed(() => state.modalFormData.html_type === "TEXT")
364
+ const hideModalWidth = computed(() => state.modalFormData.html_type === "COMBINATION")
365
+ const lineTypeList = computed(() => ["LINEBAR", "LINE_BREAKS"])
366
+
367
+ /** line 类型 */
368
+ const isLineType = (t: any) => {
369
+ return lineTypeList.value.includes(t);
370
+ }
371
+ // 快速回复
372
+ const handleReqQieckReplyData = async () => {
373
+ // this.axios
374
+ // .get("/fastReply/getList/all")
375
+ // .then(({ data }) => {
376
+ // if (data.result === "SUCCESS") {
377
+ // this.publicReply = data.map?.organizationReply || [];
378
+ // } else {
379
+ // this.publicReply = [];
380
+ // }
381
+ // })
382
+ // .catch(err => {
383
+ // this.publicReply = [];
384
+ // console.log(err);
385
+ // });
386
+ try {
387
+ let res = await props.getpublicReplyList();
388
+ state.publicReply = Array.isArray(res) ? res : [];
389
+ } catch (error) {
390
+ console.log(error);
391
+ }
392
+ }
393
+ const handleEdit = (data: any, i: any, type = "edit") => {
394
+ state.currentIndex = i;
395
+ state.editModalType = type;
396
+ if (isLineType(data.html_type)) {
397
+ state.handleLIne = "edit";
398
+ state.visibleLineAdd = true;
399
+ state.itemTitleNameAdd = data.name || "分行符";
400
+ state.is_show = data.is_show;
401
+ state.is_not_fold = data.is_not_fold;
402
+ state.isAddChecked = data.is_show == 1;
403
+ state.is_not_foldChecked = data.is_not_fold == 1;
404
+ return;
405
+ }
406
+ const keyList = [
407
+ "name",
408
+ "elem_width",
409
+ "reply_category",
410
+ "html_type",
411
+ "is_edit",
412
+ "remark",
413
+ "default_val",
414
+ "line_height",
415
+ "is_fast_reply_field",
416
+ "placeholder"
417
+ ];
418
+ keyList.forEach(v => {
419
+ if (v === "reply_category") {
420
+ if (data[v] && vexutils.isJSON(data[v])) {
421
+ state.modalFormData[v] = JSON.parse(data[v]) || [];
422
+ } else {
423
+ state.modalFormData[v] = (data[v] && [data[v]]) || [];
424
+ }
425
+ } else {
426
+ state.modalFormData[v] = data[v] || undefined;
427
+ }
428
+ });
429
+ if (!state.publicReply?.length && data["is_fast_reply_field"] != 1) {
430
+ handleReqQieckReplyData();
431
+ }
432
+
433
+ // 其他处理
434
+ state.modalFormData.is_fast_reply = data.is_fast_reply == 1;
435
+ state.modalFormData.hideExpression = 0;
436
+
437
+ state.modalVisible = true;
438
+ }
439
+
440
+ const changeCategofy = (value: any) => {
441
+ console.log(value);
442
+ }
443
+
444
+ const handleOk = (e: any) => {
445
+ // e.preventDefault();
446
+ formRef.value?.validate((errors) => {
447
+ if (errors) return;
448
+ if (state.editModalType == "edit") {
449
+ state.showFields[state.currentIndex].is_fast_reply = state.modalFormData.is_fast_reply ? 1 : 0;
450
+ // 直接赋值,不需要转换的属性
451
+ let keys = [
452
+ "name",
453
+ "elem_width",
454
+ "reply_category",
455
+ "remark",
456
+ "hideExpression",
457
+ "default_val",
458
+ "line_height",
459
+ "placeholder"
460
+ ];
461
+ keys.forEach(k => {
462
+ state.showFields[state.currentIndex][k] = state.modalFormData[k];
463
+ });
464
+ } else {
465
+ state.showFields[state.currentIndex].reply_category = state.modalFormData.reply_category;
466
+ }
467
+
468
+ state.modalVisible = false;
469
+ })
470
+ }
471
+ const handleDelete = (data: any, i: any) => {
472
+ let deleItem = state.showFields.splice(i, 1);
473
+ // 没有 val_key 的分线栏是中台创建的可以删除,后台创建的移到备选字段
474
+ if (isLineType(data.html_type) && !data.val_key) {
475
+ return;
476
+ }
477
+ state.hideFields.push(...deleItem);
478
+ }
479
+ const getParams = () => {
480
+ return {
481
+ showFields: state.showFields,
482
+ hideFields: state.hideFields
483
+ };
484
+ }
485
+ const addItemShowLine = () => {
486
+ state.visibleLineAdd = true;
487
+ state.itemTitleNameAdd = "";
488
+ state.is_show = 1;
489
+ state.is_not_fold = 0;
490
+ state.isAddChecked = true;
491
+ state.is_not_foldChecked = false;
492
+ if (state.lineType === "LINEBAR") {
493
+ state.lineAddTitle = '新建分线栏';
494
+ } else if (state.lineType === "LINE_BREAKS") {
495
+ state.lineAddTitle = "新建分行符";
496
+ }
497
+ }
498
+ const handlerAddLine = () => {
499
+ state.handleLIne = "add";
500
+ state.lineType = "LINEBAR";
501
+ addItemShowLine();
502
+ }
503
+ // 新增分行符
504
+ const handlerAddBranchLine = () => {
505
+ state.handleLIne = "add";
506
+ state.lineType = "LINE_BREAKS";
507
+ addItemShowLine();
508
+ state.is_show = 1;
509
+ }
510
+ const onChangeAdd = (e: any, key: string) => {
511
+ if (e.target.checked == true) {
512
+ state[key] = 1;
513
+ } else {
514
+ state[key] = 0;
515
+ }
516
+ }
517
+ const handleCancel = () => {
518
+ state.visibleLine = false;
519
+ state.visibleLineAdd = false;
520
+ }
521
+ const handleOkLineAdd = () => {
522
+ let isL = state.lineType === "LINEBAR";
523
+ let lineDefaultName = isL ? "分线栏" : "分行符";
524
+
525
+ if (state.handleLIne === "edit") {
526
+ let curItem = state.showFields[state.currentIndex];
527
+ state.lineType = curItem.html_type;
528
+ curItem.is_show = state.is_show;
529
+ if (isL) {
530
+ curItem.is_not_fold = state.is_not_fold;
531
+ }
532
+ curItem['name'] = state.itemTitleNameAdd || lineDefaultName;
533
+ } else {
534
+ // 新建 name
535
+ state.showFields.push({
536
+ html_type: state.lineType || "LINEBAR",
537
+ is_show: state.is_show,
538
+ is_not_fold: isL ? state.is_not_fold : undefined,
539
+ name: state.itemTitleNameAdd || lineDefaultName
540
+ });
541
+ }
542
+ handleCancel();
543
+ }
544
+ const leftDragAdd = (e: any) => {
545
+ let { newIndex, oldIndex } = e;
546
+ if (oldIndex > -1 && oldIndex > -1) {
547
+ let curItem = state.hideFields[newIndex];
548
+ if (curItem.is_system_fields == 0) {
549
+ state.hideFields.splice(newIndex, 1);
550
+ state.showFields.splice(oldIndex, 0, curItem);
551
+ }
552
+ }
553
+ }
554
+ const handleDragRemove = (e: any) => {
555
+ console.log('handleDragRemove', e)
556
+ let { draggedContext = {}, to } = e;
557
+ let movedItem = draggedContext.element || {};
558
+ let className = to.className || "";
559
+
560
+ if (movedItem.is_drag && movedItem.is_drag == 0 && className.includes("text-draggable")) {
561
+ return false;
562
+ }
563
+ }
564
+ const checkOnChange = (e: any) => {
565
+ state.modalFormData.is_fast_reply = e.target.checked;
566
+ }
567
+ const visibleChange = (e: any) => {
568
+ // console.log("e", e);
569
+ }
570
+ /**
571
+ * 更新配置
572
+ */
573
+ const updateConfig = () => {
574
+ clearTimeout(state.updateTime);
575
+ state.updateTime = setTimeout(() => {
576
+ emit("updateConfig", {
577
+ leftList: state.hideFields,
578
+ rightList: state.showFields
579
+ });
580
+ }, 100);
581
+ }
582
+ // const getI18nText = (i: any, d: any) => {
583
+ // if (Array.isArray(i)) {
584
+ // return $t ? $t.apply(this, i) : d;
585
+ // }
586
+ // return $t ? $t(i) : d;
587
+ // }
588
+ // 设置数据
589
+ const handleSetData = (config: any = {}) => {
590
+ if (Array.isArray(config.rightList)) {
591
+ state.showFields = config.rightList;
592
+ }
593
+
594
+ if (Array.isArray(config.leftList)) {
595
+ state.hideFields = config.leftList;
596
+ }
597
+ }
598
+ const mountedInit = () => {
599
+ const { rightList, leftList } = props;
600
+ let checkList = (v: any) => Array.isArray(v) && v.length > 0;
601
+ if (checkList(props.rightList) || checkList(props.leftList)) {
602
+ handleSetData({ rightList, leftList });
603
+ }
604
+ }
605
+
606
+ onMounted(() => {
607
+ mountedInit()
608
+ nextTick(() => {
609
+ textArea.value.style.height = dragLayoutContainer.value.clientHeight + 'px';
610
+ })
611
+ })
612
+
613
+ watch(
614
+ [state.showFields, state.hideFields],
615
+ ([showFields, hideFields]: any) => {
616
+ updateConfig()
617
+ },
618
+ { deep: true }
619
+ )
620
+ </script>
621
+ <style lang="less" scoped>
622
+ .drag-layout-container {
623
+ width: 100%;
624
+ height: 100%;
625
+ flex: 1;
626
+ overflow: hidden;
627
+ overflow-y: auto;
628
+ position: relative;
629
+ display: flex;
630
+ justify-content: flex-start;
631
+ border: 1px solid #d2d9e8;
632
+ text-align: left;
633
+ .min-height {
634
+ height: calc(100% - 60px);
635
+ overflow: hidden;
636
+ overflow-y: auto;
637
+ li {
638
+ list-style: none;
639
+ }
640
+ }
641
+
642
+ .border-box {
643
+ position: absolute;
644
+ top: 0;
645
+ left: 30%;
646
+ border-left: 1px solid #d2d9e8;
647
+ height: 100%;
648
+ }
649
+
650
+ .text-area {
651
+ width: 30%;
652
+ height: 100%;
653
+ overflow-y: auto;
654
+ padding: 0 !important;
655
+
656
+ .info-header {
657
+ display: flex;
658
+ height: 50px;
659
+ line-height: 50px;
660
+ padding: 0 10px;
661
+ margin-bottom: 10px;
662
+ color: #2e2e2e;
663
+ font-size: 18px;
664
+ font-weight: bold;
665
+ background: #e6eaef;
666
+ }
667
+
668
+ .text-draggable {
669
+ display: flex;
670
+ flex-wrap: wrap;
671
+ justify-content: space-between;
672
+ align-items: flex-start;
673
+ padding: 0 12px 12px;
674
+ box-sizing: border-box;
675
+ align-content: flex-start;
676
+ li {
677
+ width: 49%;
678
+ text-align: center;
679
+ }
680
+ }
681
+ }
682
+
683
+ .form-area {
684
+ position: relative;
685
+ width: 70%;
686
+ height: 100%;
687
+ overflow-y: auto;
688
+ padding: 4px;
689
+ box-sizing: border-box;
690
+ &::-webkit-scrollbar {
691
+ width: 5px;
692
+ }
693
+ .info-header {
694
+ height: 50px;
695
+ margin-bottom: 10px;
696
+ background: unset;
697
+
698
+ display: flex;
699
+ justify-content: flex-end;
700
+ align-items: center;
701
+ }
702
+ .combination-col {
703
+ border: 1px solid #cdc5d3;
704
+ margin-bottom: 10px;
705
+ }
706
+ }
707
+ }
708
+
709
+ .dragForm-select-drop {
710
+ z-index: 2001;
711
+ }
712
+ </style>