@kyfe/fms-vue2-components 0.0.2 → 0.0.4

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 (154) hide show
  1. package/dist/assets/css/fms-ks-clamp-text.css +1 -0
  2. package/dist/assets/css/fms-ks-components.css +1 -0
  3. package/dist/assets/css/fms-ks-popover.css +1 -0
  4. package/dist/assets/css/fms-ks-search-tips-new.css +1 -0
  5. package/dist/assets/css/fms-ks-search-tips.css +1 -0
  6. package/dist/assets/css/fms-ks-select-box.css +1 -0
  7. package/dist/assets/css/fms-ks-select.css +1 -0
  8. package/dist/date-picker-bottom.17e75dc0.js +45 -0
  9. package/dist/date-picker-dropdown.1d8e9f00.js +34 -0
  10. package/dist/date-picker-right.b939e886.js +23 -0
  11. package/dist/date-picker-top.c38046f7.js +23 -0
  12. package/dist/date-range-select.647edaf6.js +69 -0
  13. package/dist/date-select.96eb3a9d.js +60 -0
  14. package/dist/date-week-month.169b98bc.js +57 -0
  15. package/dist/datetime-popup/index.js +411 -0
  16. package/dist/filter.c93f4ddb.js +45 -0
  17. package/dist/fms-copy-box/index.js +1 -1
  18. package/dist/fms-ks-block-title/index.js +38 -0
  19. package/dist/fms-ks-block-title/style.css +1 -0
  20. package/dist/fms-ks-clamp-text/index.js +9 -0
  21. package/dist/fms-ks-clamp-text.24eb5e8d.js +53 -0
  22. package/dist/fms-ks-components/index.js +9 -0
  23. package/dist/fms-ks-components.a5d9329b.js +4392 -0
  24. package/dist/fms-ks-decrypt/index.js +2 -2
  25. package/dist/fms-ks-decrypt.2f88e659.js +312 -0
  26. package/dist/fms-ks-file-upload/index.js +32 -31
  27. package/dist/fms-ks-file-upload/style.css +1 -1
  28. package/dist/fms-ks-form-grid/index.js +101 -0
  29. package/dist/fms-ks-form-grid/style.css +1 -0
  30. package/dist/fms-ks-more-lines/index.js +31 -0
  31. package/dist/fms-ks-more-lines/style.css +1 -0
  32. package/dist/fms-ks-page-popup/index.js +68 -0
  33. package/dist/fms-ks-page-popup/style.css +1 -0
  34. package/dist/fms-ks-picker/index.js +9 -0
  35. package/dist/fms-ks-picker.766b55f9.js +61 -0
  36. package/dist/fms-ks-popover/index.js +9 -0
  37. package/dist/fms-ks-popover.55ab4b82.js +95 -0
  38. package/dist/fms-ks-search-tips/index.js +9 -0
  39. package/dist/fms-ks-search-tips-new/index.js +9 -0
  40. package/dist/fms-ks-search-tips-new.7d08f710.js +125 -0
  41. package/dist/fms-ks-search-tips.d36859c3.js +142 -0
  42. package/dist/fms-ks-select/index.js +9 -0
  43. package/dist/fms-ks-select-box/index.js +9 -0
  44. package/dist/fms-ks-select-box.a00f0f08.js +43 -0
  45. package/dist/fms-ks-select.59416fd8.js +157 -0
  46. package/dist/fms-ks-warn-drawer/index.js +37 -0
  47. package/dist/fms-ks-warn-drawer/style.css +1 -0
  48. package/dist/fms-scroll-list/index.js +3 -1
  49. package/dist/index.js +30 -30
  50. package/dist/mixin.f4bc60f0.js +59 -0
  51. package/dist/month-range-select.374653da.js +97 -0
  52. package/dist/month-select.30ae7335.js +71 -0
  53. package/dist/oa-datetime-picker-new/style.css +1 -0
  54. package/dist/quarter-select.b6256880.js +73 -0
  55. package/dist/utils.159fba19.js +64 -0
  56. package/dist/week-select.27efca5c.js +70 -0
  57. package/package.json +31 -31
  58. package/src/assets/images/attachment/icon_default.svg +23 -0
  59. package/src/assets/images/attachment/icon_default_new.png +0 -0
  60. package/src/assets/images/attachment/icon_excel.svg +20 -0
  61. package/src/assets/images/attachment/icon_excel_new.png +0 -0
  62. package/src/assets/images/attachment/icon_file.png +0 -0
  63. package/src/assets/images/attachment/icon_pdf_new.png +0 -0
  64. package/src/assets/images/attachment/icon_ppt.svg +20 -0
  65. package/src/assets/images/attachment/icon_ppt_new.png +0 -0
  66. package/src/assets/images/attachment/icon_preview_file.png +0 -0
  67. package/src/assets/images/attachment/icon_txt.png +0 -0
  68. package/src/assets/images/attachment/icon_word.svg +19 -0
  69. package/src/assets/images/attachment/icon_word_new.png +0 -0
  70. package/src/assets/images/attachment/icon_xmind.png +0 -0
  71. package/src/assets/images/icon-arrow.png +0 -0
  72. package/src/assets/images/icon-forewarning.svg +1 -0
  73. package/src/components/date-picker/index.vue +205 -0
  74. package/src/components/datetime-picker-general/index.vue +161 -0
  75. package/src/components/datetime-popup/date-picker.js +217 -0
  76. package/src/components/datetime-popup/index.js +37 -0
  77. package/src/components/datetime-popup/index.vue +111 -0
  78. package/src/components/datetime-popup/mixin.js +125 -0
  79. package/src/components/datetime-popup/time-picker.js +102 -0
  80. package/src/components/datetime-popup/utils.js +124 -0
  81. package/src/components/datetime-popup//347/244/272/344/276/213/345/233/276.png +0 -0
  82. package/src/components/decrypt/README.md +0 -0
  83. package/src/components/decrypt/index.vue +73 -0
  84. package/src/components/fms-ks-block-title/fms-ks-block-title.vue +75 -0
  85. package/src/components/fms-ks-block-title/index.js +7 -0
  86. package/src/components/fms-ks-block-title//346/240/207/351/242/230.md +0 -0
  87. package/src/components/fms-ks-clamp-text/fms-ks-clamp-text.vue +66 -0
  88. package/src/components/fms-ks-clamp-text/images/icon-clamp.png +0 -0
  89. package/src/components/fms-ks-clamp-text/index.js +7 -0
  90. package/src/components/fms-ks-clamp-text//346/226/207/346/234/254/346/224/266/350/265/267/345/261/225/345/274/200.md +0 -0
  91. package/src/components/fms-ks-components/fms-ks-components.vue +699 -0
  92. package/src/components/fms-ks-components/index.js +7 -0
  93. package/src/components/fms-ks-components/money-directive.js +73 -0
  94. package/src/components/fms-ks-components//350/241/250/345/215/225/351/205/215/347/275/256/347/273/204/344/273/266/350/257/264/346/230/216.md +10 -0
  95. package/src/components/fms-ks-file-upload/fms-ks-file-upload.vue +8 -1
  96. package/src/components/fms-ks-form-grid/fields-conversion.js +107 -0
  97. package/src/components/fms-ks-form-grid/fms-ks-form-grid.vue +127 -0
  98. package/src/components/fms-ks-form-grid/index.js +7 -0
  99. package/src/components/fms-ks-more-lines/fms-ks-more-lines.vue +108 -0
  100. package/src/components/fms-ks-more-lines/index.js +7 -0
  101. package/src/components/fms-ks-more-lines//346/233/264/345/244/232.md +0 -0
  102. package/src/components/fms-ks-page-popup/fms-ks-page-popup.vue +153 -0
  103. package/src/components/fms-ks-page-popup/index.js +7 -0
  104. package/src/components/fms-ks-page-popup//345/274/271/345/207/272/345/261/202.md +0 -0
  105. package/src/components/fms-ks-picker/fms-ks-picker.vue +67 -0
  106. package/src/components/fms-ks-picker/index.js +7 -0
  107. package/src/components/fms-ks-picker//351/200/211/346/213/251/345/274/271/345/207/272/345/261/202.md +0 -0
  108. package/src/components/fms-ks-popover/click-outside.js +68 -0
  109. package/src/components/fms-ks-popover/fms-ks-popover.vue +89 -0
  110. package/src/components/fms-ks-popover/index.js +7 -0
  111. package/src/components/fms-ks-popover//345/274/271/345/207/272/345/261/202.md +0 -0
  112. package/src/components/fms-ks-search-tips/fms-ks-search-tips.vue +296 -0
  113. package/src/components/fms-ks-search-tips/index.js +7 -0
  114. package/src/components/fms-ks-search-tips//350/277/234/347/250/213/346/220/234/347/264/242.md +118 -0
  115. package/src/components/fms-ks-search-tips-new/fms-ks-search-tips-new.vue +242 -0
  116. package/src/components/fms-ks-search-tips-new/index.js +7 -0
  117. package/src/components/fms-ks-search-tips-new/style.less +137 -0
  118. package/src/components/fms-ks-search-tips-new//350/277/234/347/250/213/346/220/234/347/264/242-/346/226/260.md +118 -0
  119. package/src/components/fms-ks-select/fms-ks-select.vue +421 -0
  120. package/src/components/fms-ks-select/index.js +7 -0
  121. package/src/components/fms-ks-select//351/200/211/346/213/251/346/241/206.md +0 -0
  122. package/src/components/fms-ks-select-box/fms-ks-select-box.vue +84 -0
  123. package/src/components/fms-ks-select-box/index.js +7 -0
  124. package/src/components/fms-ks-select-box//344/270/215/351/234/200/350/246/201popup/347/232/204select.md +0 -0
  125. package/src/components/fms-ks-warn-drawer/fms-ks-warn-drawer.vue +111 -0
  126. package/src/components/fms-ks-warn-drawer/index.js +7 -0
  127. package/src/components/fms-ks-warn-drawer//351/242/204/350/255/246/346/217/220/347/244/272.md +0 -0
  128. package/src/components/ks-decrypt/README.md +140 -0
  129. package/src/components/ks-decrypt/index.vue +155 -0
  130. package/src/components/ks-popover/index.vue +483 -0
  131. package/src/components/ks-popover/mixin.js +28 -0
  132. package/src/components/ks-popover/utils.js +60 -0
  133. package/src/components/oa-datetime-picker/index.vue +169 -0
  134. package/src/components/oa-datetime-picker-new/components/date-picker/README.md +21 -0
  135. package/src/components/oa-datetime-picker-new/components/date-picker/date-picker-bottom.vue +121 -0
  136. package/src/components/oa-datetime-picker-new/components/date-picker/date-picker-dropdown.vue +78 -0
  137. package/src/components/oa-datetime-picker-new/components/date-picker/date-picker-right.vue +86 -0
  138. package/src/components/oa-datetime-picker-new/components/date-picker/date-picker-top.vue +82 -0
  139. package/src/components/oa-datetime-picker-new/components/date-picker/date-picker.js +12 -0
  140. package/src/components/oa-datetime-picker-new/components/date-picker/date-range-select.vue +106 -0
  141. package/src/components/oa-datetime-picker-new/components/date-picker/date-select.vue +66 -0
  142. package/src/components/oa-datetime-picker-new/components/date-picker/date-week-month.vue +131 -0
  143. package/src/components/oa-datetime-picker-new/components/date-picker/index.js +39 -0
  144. package/src/components/oa-datetime-picker-new/components/date-picker/mixin.js +85 -0
  145. package/src/components/oa-datetime-picker-new/components/date-picker/month-range-select.vue +127 -0
  146. package/src/components/oa-datetime-picker-new/components/date-picker/month-select.vue +87 -0
  147. package/src/components/oa-datetime-picker-new/components/date-picker/quarter-select.vue +95 -0
  148. package/src/components/oa-datetime-picker-new/components/date-picker/style.less +117 -0
  149. package/src/components/oa-datetime-picker-new/components/date-picker/utils.js +109 -0
  150. package/src/components/oa-datetime-picker-new/components/date-picker/week-select.vue +100 -0
  151. package/src/components/oa-datetime-picker-new/index.vue +212 -0
  152. package/src/index.js +8 -2
  153. package/vite.config.js +12 -1
  154. package/dist/fms-ks-decrypt.bcc12f44.js +0 -335
@@ -0,0 +1,699 @@
1
+ <!--
2
+ * @Description: 渲染组件:根据配置生成对应的组件
3
+ -->
4
+ <template>
5
+ <div class="fms-component"
6
+ :class="[`fms-component_${col.key}`, getClass()]"
7
+ :style="bindProps().style">
8
+ <template v-if="col.component === 'van-field'">
9
+ <!-- 普通输入框:可以编辑-->
10
+ <van-field v-on="listeners"
11
+ :class="col.class"
12
+ v-bind="bindProps()"
13
+ @input="formatter"
14
+ :value="filter()">
15
+ <span class="flex-center"
16
+ slot="label">
17
+ <slot :name="col.slotLabel"
18
+ :col="col"
19
+ :model="model"
20
+ :index="i"
21
+ v-if="col.slotLabel"></slot>
22
+ <span v-else>{{col.label}}</span>
23
+ </span>
24
+ <span slot="button">
25
+ <slot :name="col.slotButton"
26
+ :col="col"
27
+ :model="model"
28
+ :index="i"
29
+ v-if="col.slotButton"></slot>
30
+ </span>
31
+ </van-field>
32
+ </template>
33
+ <template v-else-if="col.component === 'money'">
34
+ <van-field v-on="listeners"
35
+ type="number"
36
+ v-bind="bindProps()"
37
+ @input="formatter"
38
+ :value="filter()">
39
+ <span style="vertical-align: middle;"
40
+ slot="label">
41
+ <slot :name="col.slotLabel"
42
+ :col="col"
43
+ :model="model"
44
+ :index="i"
45
+ v-if="col.slotLabel"></slot>
46
+ <span v-else>{{col.label}}</span>
47
+ </span>
48
+ </van-field>
49
+ </template>
50
+ <template v-else-if="col.component === 'date'">
51
+ <!-- 日期选择组件-旧 -->
52
+ <datetime-picker v-on="listeners"
53
+ v-bind="bindProps()"
54
+ @input="formatter"
55
+ :value="filter()" />
56
+ </template>
57
+ <template v-else-if="col.component === 'date-minuteX'">
58
+ <!-- 新选择框,新ui样式-->
59
+ <datetime-picker-general v-on="listeners"
60
+ v-bind="bindProps()"
61
+ @confirm="formatter"
62
+ :value="filter()" />
63
+ </template>
64
+ <template v-else-if="col.component === 'date-new'">
65
+ <!-- 日期选择组件-新(日历格式,但是只支持部分场景,没有旧的使用场景多) -->
66
+ <oa-datetime-picker-new v-on="listeners"
67
+ v-bind="bindProps()"
68
+ @input="formatter"
69
+ :value="filter()">
70
+ <template #label>
71
+ <slot :name="col.slotLabel"
72
+ :col="col"
73
+ :model="model"
74
+ :index="i"
75
+ v-if="col.slotLabel"></slot>
76
+ <span v-else>{{col.label}}</span>
77
+ </template>
78
+ </oa-datetime-picker-new>
79
+ </template>
80
+ <template v-else-if="col.component === 'select'">
81
+ <!-- 下拉选择组件,支持多选和单选 -->
82
+ <fms-select :value="filter()"
83
+ v-bind="bindProps()"
84
+ @input="formatter"
85
+ v-on="listeners" />
86
+ </template>
87
+ <template v-else-if="col.component === 'picker'">
88
+ <!-- 下拉选择组件,支持多选和单选 -->
89
+ <fms-picker :value="filter()"
90
+ v-bind="bindProps()"
91
+ @input="formatter"
92
+ v-on="listeners" />
93
+ </template>
94
+ <template v-else-if="col.component === 'select-box'">
95
+ <!-- 直接在页面选择的选择组件 -->
96
+ <fms-select-box :value="filter()"
97
+ v-bind="bindProps()"
98
+ @input="formatter"
99
+ v-on="listeners">
100
+ <template #label>
101
+ <slot :name="col.slotLabel"
102
+ :col="col"
103
+ :model="model"
104
+ :index="i"
105
+ v-if="col.slotLabel"></slot>
106
+ <span v-else>{{col.label}}</span>
107
+ </template>
108
+ </fms-select-box>
109
+ </template>
110
+ <template v-else-if="col.component === 'van-cell'">
111
+ <!-- 显示状态,不能编辑(适用于form界面) -->
112
+ <van-cell v-bind="bindProps()"
113
+ :value="filter()"
114
+ value-class="fms-van-cell">
115
+ <span slot="title">
116
+ <slot :name="col.slotLabel"
117
+ :col="col"
118
+ :model="model"
119
+ :index="i"
120
+ v-if="col.slotLabel"></slot>
121
+ <span v-else>{{col.title || col.label}}</span>
122
+ </span>
123
+ <span v-if="col.isDecrypt"
124
+ class="value"
125
+ :class="{ link: col.isAllApply }"
126
+ v-on="listeners"
127
+ v-bind="bindProps()">
128
+ <decrypt :model="model"
129
+ :decryptKey="col.key"
130
+ :label="col.label"
131
+ :value="filter()"
132
+ @click="handlerClick"
133
+ style="word-break: break-all"></decrypt>
134
+ </span>
135
+ </van-cell>
136
+ </template>
137
+ <template v-else-if="col.component === 'list-item'">
138
+ <!-- 另一种显示状态,不能编辑:适用于明细页面 -->
139
+ <div class="list-item"
140
+ :style="col.style ? { ...col.style } : {}">
141
+ <span class="label"
142
+ :style="col.labelStyle ? { ...col.labelStyle } : {}">{{col.label}}
143
+ </span>
144
+ <span class="value list-item-value"
145
+ :class="{ link: col.isAllApply || col.func, 'one-line': col.oneLine }"
146
+ v-on="listeners"
147
+ v-bind="bindProps()">
148
+ <ks-popover v-if="isShowPopover()"
149
+ v-model="col.showPopover"
150
+ theme="light"
151
+ trigger="click"
152
+ placement="top">
153
+ <div v-if="isShowPopover()"
154
+ class="popover-text"
155
+ style="padding: 8px; font-size: 14px; color: #333333;">
156
+ {{ bindShowPopoverText() }}
157
+ </div>
158
+ <template #reference>
159
+ <decrypt :model="model"
160
+ :decryptKey="col.key"
161
+ :label="col.label"
162
+ :value="filter()"
163
+ ref="decryptRef"
164
+ @click="handlerClick"
165
+ style="word-break: break-all"></decrypt>
166
+ </template>
167
+ </ks-popover>
168
+ <template v-else>
169
+ <decrypt :model="model"
170
+ :decryptKey="col.key"
171
+ :label="col.label"
172
+ :value="filter()"
173
+ ref="decryptRef"
174
+ @click="handlerClick"
175
+ style="word-break: break-all"></decrypt>
176
+ </template>
177
+ </span>
178
+ <div class="clipboard-wrap"
179
+ @click="pasteFn"
180
+ v-if="col.clipboard">
181
+ <img class="icon-clipboard"
182
+ src="@/assets/images/copy-icon.png">
183
+ </div>
184
+ </div>
185
+ </template>
186
+ <template v-else-if="col.component === 'search-tips'">
187
+ <fms-search-tips :value="filter()"
188
+ v-bind="bindProps()"
189
+ @input="formatter"
190
+ v-on="listeners">
191
+ <span slot="label">
192
+ <slot :name="col.slotLabel"
193
+ :col="col"
194
+ :model="model"
195
+ :index="i"
196
+ v-if="col.slotLabel"></slot>
197
+ <span v-else>{{col.label}}</span>
198
+ </span>
199
+ </fms-search-tips>
200
+ </template>
201
+ <template v-else-if="col.component === 'search-tips-new'">
202
+ <FmsSearchTipsNew :value="filter()"
203
+ v-bind="bindProps()"
204
+ @input="formatter"
205
+ v-on="listeners">
206
+ <span slot="label">
207
+ <slot :name="col.slotLabel"
208
+ :col="col"
209
+ :model="model"
210
+ :index="i"
211
+ v-if="col.slotLabel"></slot>
212
+ <span v-else>{{col.label}}</span>
213
+ </span>
214
+ </FmsSearchTipsNew>
215
+ </template>
216
+ <template v-else-if="col.component === 'user'">
217
+ <van-field v-bind="bindProps()"
218
+ :value="filter()"
219
+ value-class="fms-van-cell"
220
+ right-icon="arrow"
221
+ @clear="clearUser"
222
+ @click="showEmployee = true">
223
+ <span slot="label">
224
+ <slot :name="col.slotLabel"
225
+ :col="col"
226
+ :model="model"
227
+ :index="i"
228
+ v-if="col.slotLabel"></slot>
229
+ <span v-else>{{col.label}}</span>
230
+ </span>
231
+ </van-field>
232
+ </template>
233
+ <template v-else-if="col.component === 'org'">
234
+ <van-field v-bind="bindProps()"
235
+ :value="filter()"
236
+ value-class="fms-van-cell"
237
+ right-icon="arrow"
238
+ @click="showOrg = true"
239
+ readonly>
240
+ <span slot="label">
241
+ <slot :name="col.slotLabel" :col="col" :model="model" :index="i" v-if="col.slotLabel"></slot>
242
+ <span v-else>{{col.label}}</span>
243
+ </span>
244
+ </van-field>
245
+ </template>
246
+ <template v-else-if="col.component === 'KsDecrypt'">
247
+ <div class="list-item">
248
+ <span class="label">
249
+ <slot :name="col.slotLabel"
250
+ :col="col"
251
+ :model="model"
252
+ :index="i"
253
+ v-if="col.slotLabel"></slot>
254
+ <span v-else>{{col.label}}</span>
255
+ </span>
256
+ <span class="value decrypt-value">
257
+ <KsDecrypt :value="filter()"
258
+ v-bind="bindProps()"
259
+ @decryptData="onDecryptData"
260
+ v-if="!decryptValue"></KsDecrypt>
261
+ <span v-else>{{decryptValue}}</span>
262
+ </span>
263
+ </div>
264
+ </template>
265
+ <template v-else-if="col.component === 'fmsClampText'">
266
+ <div class="list-item"
267
+ :style="col.style ? { ...col.style } : {}">
268
+ <span class="label"
269
+ :style="col.labelStyle ? { ...col.labelStyle } : {}">{{col.label}}
270
+ </span>
271
+ <span class="value decrypt-value">
272
+ <fmsClampText :value="filter()"
273
+ v-bind="bindProps()"></fmsClampText>
274
+ </span>
275
+ </div>
276
+ </template>
277
+ <template v-else>
278
+ <component :is="col.component"
279
+ :value="filter()"
280
+ v-bind="bindProps()"
281
+ @input="formatter"
282
+ v-on="listeners">
283
+ <span slot="label">
284
+ <slot :name="col.slotLabel"
285
+ :col="col"
286
+ :model="model"
287
+ :index="i"
288
+ v-if="col.slotLabel"></slot>
289
+ <span v-else>{{col.label}}</span>
290
+ </span>
291
+ </component>
292
+ </template>
293
+ </div>
294
+ </template>
295
+ <script>
296
+ import { get, set } from 'lodash'
297
+ import * as filter from '@kyfe/fms-utils/filter'
298
+ import { isDecryptFieldPlus } from '@kyfe/fms-utils/decrypt'
299
+ import money from './money-directive'
300
+ import decrypt from '../decrypt/index.vue'
301
+ import DatePicker from '../date-picker/index.vue'
302
+ import DatetimePicker from '../oa-datetime-picker/index.vue'
303
+ import OaDatetimePickerNew from '../oa-datetime-picker-new/index.vue'
304
+ import DatetimePickerGeneral from "../datetime-picker-general/index.vue";
305
+ import KsDecrypt from '../ks-decrypt/index.vue'
306
+ import FmsSelect from '../fms-ks-select/fms-ks-select.vue'
307
+ import FmsPicker from '../fms-ks-picker/fms-ks-picker.vue'
308
+ import FmsSelectBox from '../fms-ks-select-box/fms-ks-select-box.vue'
309
+ import FmsSearchTips from '../fms-ks-search-tips/fms-ks-search-tips.vue'
310
+ import FmsSearchTipsNew from '../fms-ks-search-tips-new/fms-ks-search-tips-new.vue'
311
+ import FmsClampText from '../fms-ks-clamp-text/fms-ks-clamp-text.vue'
312
+
313
+ export default {
314
+ name: 'FmsKsComponents',
315
+ components: {
316
+ KsDecrypt,
317
+ decrypt,
318
+ DatePicker,
319
+ DatetimePicker,
320
+ OaDatetimePickerNew,
321
+ DatetimePickerGeneral,
322
+ FmsSelect,
323
+ FmsPicker,
324
+ FmsSelectBox,
325
+ FmsSearchTips,
326
+ FmsSearchTipsNew,
327
+ FmsClampText
328
+ },
329
+ directives: {
330
+ money
331
+ },
332
+ props: {
333
+ col: Object,
334
+ model: Object
335
+ },
336
+ data () {
337
+ return {
338
+ showEmployee: false,
339
+ showPopover: false,
340
+ showOrg: false,
341
+ decryptValue: '',
342
+ selectedOrg: {},
343
+ defaultOrgCheckedKeys: [],
344
+ }
345
+ },
346
+ computed: {
347
+ listeners () {
348
+ if (!this.col.component || this.col.component === 'van-cell') {
349
+ return {}
350
+ } else {
351
+ const _listeners = this.col.componentListeners || this.col.listeners || {}
352
+ return this.bindListeners(_listeners)
353
+ }
354
+ },
355
+ orgOption () {
356
+ const opt = get(this, 'col.componentProps.orgOption') || {}
357
+ return opt
358
+ }
359
+ },
360
+ methods: {
361
+ getClass () {
362
+ if (typeof this.col.class === 'function') {
363
+ return this.col.class()
364
+ }
365
+ return this.col.class
366
+ },
367
+ handlerClick () {
368
+ if (this.col.isAllApply && this.model[this.col.key]) {
369
+ this.$router.push(`/detail/${this.model[this.col.key]}?isFromAllApply=1`)
370
+ }
371
+ if (this.col.func && typeof this.col.func === 'function') {
372
+ this.col.func(this.model[this.col.key], this.col, this.model)
373
+ }
374
+ },
375
+ // 将['10']或'10'转为其在数据字典中对应的label,如果为数组,转为逗号隔开的串
376
+ lookup (val, list) {
377
+ // val 不能为 null 和 undefined 和 空字符串,可以为0
378
+ // console.log('val111', val, list)
379
+ if (list && (list.length > 0) && (val === 0 || val)) {
380
+ if (Array.isArray(val)) {
381
+ // 如果是多选,传进来是数组
382
+ const existList = list.filter(e => val.includes(String(e.code)) || val.includes(Number(e.code)))
383
+ const codeList = existList.map(item => item.text)
384
+ return codeList.join(',')
385
+ } else {
386
+ let { text } = list.find(x => String(x.code) === String(val)) || {}
387
+ return text || val
388
+ }
389
+ }
390
+ },
391
+ confirm (list) {
392
+ if (this.col.component === 'user') {
393
+ // 人员搜索选择事件
394
+ this.listeners
395
+ const { select } = this.listeners || {}
396
+ select && select(list[0])
397
+ }
398
+ },
399
+ clearUser () {
400
+ if (this.col.component === 'user') {
401
+ // 人员搜索选择事件
402
+ this.listeners
403
+ const { clear } = this.listeners || {}
404
+ clear && clear()
405
+ }
406
+ },
407
+ bindListeners (listeners) {
408
+ const _listeners = {}
409
+ Object.keys(listeners).forEach(key => {
410
+ _listeners[key] = listeners[key].bind(this)
411
+ })
412
+ return _listeners
413
+ },
414
+ bindProps () {
415
+ let props = {}
416
+ // componentProps中支持修改当前组件样式
417
+ let style = get(this.col, 'componentProps.style')
418
+ if (style) {
419
+ if (style instanceof Function) {
420
+ props.style = style()
421
+ } else {
422
+ props.style = style
423
+ }
424
+ }
425
+ const { label, lookupCode, componentProps = {}, component, required, headerTips, headerTipsIconStyle, key } = this.col
426
+
427
+ // 默认input靠右
428
+ props.inputAlign = 'right'
429
+ props.label = label
430
+
431
+ // 如果是van-field组件,把label赋值到title上
432
+ if (component === 'van-cell') {
433
+ props.title = label
434
+ props.label = ''
435
+ }
436
+
437
+ // 如果有数据字典
438
+ if (lookupCode) {
439
+ const lookupCodeMap = get(this, '$store.getters.lookUpOptions' , {})
440
+ // 把[{lable: '其他', value: '20'}] 转为 [{text: '其他', code: '20'}]格式
441
+ let columns = []
442
+ if (lookupCodeMap[lookupCode]) {
443
+ columns = lookupCodeMap[lookupCode].map(item => {
444
+ return {
445
+ text: item.label,
446
+ code: item.value
447
+ }
448
+ })
449
+ }
450
+ props.columns = columns
451
+ props.isLink = true
452
+ }
453
+
454
+ // 处理必填
455
+ let isRequired = required
456
+ if (typeof required === 'function') {
457
+ isRequired = required()
458
+ }
459
+ if (isRequired) {
460
+ props.required = true
461
+ const _message = componentProps.errorTip || componentProps.placeholder || `请选择`
462
+ // 之前不知道为什么这里要直接通过isRequired写死一个rules,导致配置的rules不生效
463
+ // 这里增加判断,避免覆盖用户自定义的rules
464
+ if (!componentProps.rules) {
465
+ props.rules = [{ required: true, message: _message }] // 必须写这个,校验时文字才会变红
466
+ }
467
+ }
468
+ // 解密组件处理
469
+ if (['KsDecrypt'].includes(component)) {
470
+ props.formData = this.model
471
+ props.fieldName = key
472
+ props.fieldNameStr = label
473
+ props.menuCode = {
474
+ moduleCode: 'OA',
475
+ moduleName: 'OA申请详情页'
476
+ }
477
+ props.isField = true
478
+ }
479
+
480
+ // 处理headertips,后续统一写在col.headerTips中
481
+ // 这里需要兼容部分历史写法,fms-select组件的提示信息写在了componentProps.tipText中
482
+ props.headerTips = headerTips || componentProps.tipText
483
+ props.headerTipsIconStyle = headerTipsIconStyle || componentProps.headerTipsIconStyle
484
+ // 这里需要兼容后续fms-select组件的提示信息写在col.headerTips中,实际fms-select组件内部使用的是tipText
485
+ props.tipText = headerTips
486
+
487
+ props = {
488
+ ...props,
489
+ ...componentProps
490
+ }
491
+ // 下拉选项的columns支持方法返回结果
492
+ if (typeof props.columns === 'function') {
493
+ props.columns = props.columns()
494
+ }
495
+ if (typeof props.disabled === 'function') {
496
+ props.disabled = props.disabled()
497
+ }
498
+ if (Array.isArray(props.columns)) {
499
+ props.isLink = true
500
+ }
501
+ if (component === 'date-minuteX') {
502
+ if (!props.minDate) {
503
+ // 类型为date-minuteX的,如果没有设置最小日期,默认最小是10年前, 根据月-日 周会存在重复的可能
504
+ let currentYear = new Date().getFullYear()
505
+ props.minDate = new Date(currentYear - 1, 0, 1)
506
+ }
507
+ }
508
+ if (Object.keys(props).includes('disabled')) {
509
+ // 如果props里包含disabled属性,且值为true,且isLink为true时,则设置isLink为false
510
+ if (props.disabled && props.isLink) {
511
+ props.isLink = false
512
+ }
513
+ }
514
+ // van-cell组件不需要展示箭头
515
+ if (component === 'van-cell') {
516
+ props.isLink = false
517
+ }
518
+ return props
519
+ },
520
+ filter () {
521
+ // select组件的处理
522
+ const { key, lookupCode, component, componentProps } = this.col
523
+ const value = get(this.model, key)
524
+ let columns = get(componentProps, 'columns')
525
+ if (lookupCode || Array.isArray(columns)) {
526
+ let list = get(this, `$store.getters.lookUpOptions.${lookupCode}`) || []
527
+ list = list.map(x => {
528
+ x.text = x.label
529
+ x.code = x.value
530
+ return x
531
+ })
532
+ return this.lookup(value, Array.isArray(columns) ? columns : list)
533
+ }
534
+ // 如果是van-field或list-item或van-cell,需要处理filter
535
+ if (value && ['van-field', 'list-item', 'van-cell'].includes(component) && this.col.filter && typeof this.col.filter === 'string') {
536
+ return filter[this.col.filter](String(value))
537
+ }
538
+ if (this.col.formatter) {
539
+ return this.col.formatter(value, this.model)
540
+ }
541
+ if (typeof this.col.filter === 'function') {
542
+ return this.col.filter(value, this.model)
543
+ }
544
+ return value
545
+ },
546
+ formatter (value) {
547
+ // TODO:这里需要加一个节流,输入停止后再处理
548
+ const { trim, number, formatter, key, component, componentProps = {} } = this.col
549
+ if (trim && typeof value !== 'object') {
550
+ value = trim(value)
551
+ }
552
+ if (number) {
553
+ value = Number(value)
554
+ }
555
+ if (component === 'ks-field-money' && value) {
556
+ value = Decimal(value).toFixed(componentProps.decimal || 2, Decimal.ROUND_DOWN)
557
+ }
558
+ const _value = formatter ? formatter(value, this) : value
559
+ set(this.model, key, _value)
560
+ // this.$emit('input', _value)
561
+ },
562
+ onDecryptData (val) {
563
+ this.decryptValue = val
564
+ },
565
+ pasteFn () {
566
+ window.ks.callFunc({ method: "paste", params: { str: this.bindClipboardValue() } }).then(() => {
567
+ vant.Toast("复制成功")
568
+ })
569
+ },
570
+ bindClipboardValue () {
571
+ if (this.col.clipboardValue) {
572
+ if (typeof this.col.clipboardValue === 'function') {
573
+ return this.col.clipboardValue(this.filter())
574
+ } else {
575
+ return this.col.clipboardValue
576
+ }
577
+ }
578
+ return this.filter()
579
+ },
580
+ isShowPopover () {
581
+ const isDecryptField = isDecryptFieldPlus(this.col.key, this.model)
582
+ // 加密状态的字段不展示Popover,否则会和解密点击事件重合
583
+ return this.col.showPopoverText && !isDecryptField
584
+ },
585
+ bindShowPopoverText () {
586
+ if (this.col.showPopoverText) {
587
+ if (typeof this.col.showPopoverText === 'function') {
588
+ return this.col.showPopoverText(this.filter())
589
+ } else {
590
+ return this.col.showPopoverText
591
+ }
592
+ } else {
593
+ return ''
594
+ }
595
+ },
596
+ }
597
+ }
598
+ </script>
599
+ <style lang="less" scoped>
600
+ .fms-component {
601
+ .list-item {
602
+ display: flex;
603
+ // justify-content: space-between;
604
+ line-height: 20px;
605
+ margin-bottom: 10px;
606
+ padding: 0 16px;
607
+ font-size: 14px;
608
+ .label {
609
+ color: #858793;
610
+ width: 96px;
611
+ // word-break: break-all;
612
+ // display: flex;
613
+ // align-items: center;
614
+ // flex-shrink: 0;
615
+ overflow-wrap: break-word;
616
+ }
617
+ .value {
618
+ color: #000;
619
+ flex: 1;
620
+ &.link {
621
+ color: #8b60f0;
622
+ }
623
+ &.one-line {
624
+ white-space: nowrap;
625
+ overflow: hidden;
626
+ text-overflow: ellipsis;
627
+ /deep/ .van-popover__wrapper {
628
+ display: flex;
629
+ }
630
+ .flow-fms-decrypt {
631
+ text-overflow: ellipsis;
632
+ white-space: nowrap;
633
+ overflow: hidden;
634
+ }
635
+ }
636
+ }
637
+ .clipboard-wrap {
638
+ padding-left: 2px;
639
+ line-height: 1;
640
+ margin-top: 2px;
641
+ }
642
+ .icon-clipboard {
643
+ width: 14px;
644
+ height: 14px;
645
+ margin-right: -4px;
646
+ }
647
+ }
648
+ .flex-center {
649
+ display: inline-flex;
650
+ align-items: center;
651
+ }
652
+ /deep/ .van-cell {
653
+ overflow: visible;
654
+ padding: 11px 16px;
655
+ &::after {
656
+ position: absolute;
657
+ box-sizing: border-box;
658
+ content: " ";
659
+ pointer-events: none;
660
+ right: 16px;
661
+ bottom: 0;
662
+ left: 16px;
663
+ border-bottom: 1px solid #ebedf0;
664
+ -webkit-transform: scaleY(0.5);
665
+ transform: scaleY(0.5);
666
+ }
667
+ .van-cell__label {
668
+ margin: 0;
669
+ }
670
+ }
671
+ .fms-van-cell {
672
+ flex: 1.5;
673
+ }
674
+ /deep/ .flow-fms-components-popover {
675
+ // display: inline-flex;
676
+ display: inline-block;
677
+ align-items: center;
678
+ margin-left: 2px;
679
+ .van-icon {
680
+ vertical-align: middle;
681
+ }
682
+ .van-popup {
683
+ max-height: max-content;
684
+ .van-popover__arrow {
685
+ left: 23%;
686
+ }
687
+ }
688
+ }
689
+ .decrypt-value .kts-decrypt {
690
+ /deep/ .van-field {
691
+ height: 20px !important;
692
+ &::after,
693
+ .van-field__label {
694
+ display: none;
695
+ }
696
+ }
697
+ }
698
+ }
699
+ </style>