cnhis-design-vue 0.3.2-beta → 0.3.5-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 (82) 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 +97 -64
  4. package/es/button-print/index.css +1 -0
  5. package/es/button-print/index.js +8806 -11
  6. package/es/drag-layout/index.css +2 -1
  7. package/es/drag-layout/index.js +33 -58
  8. package/es/grid/index.css +2 -1
  9. package/es/grid/index.js +3 -4
  10. package/es/index.css +2 -1
  11. package/es/index.js +9467 -664
  12. package/package.json +5 -2
  13. package/packages/big-table/index.ts +17 -0
  14. package/packages/big-table/src/BigTable.vue +2514 -0
  15. package/packages/big-table/src/assets/iconfont/iconfont.less +21 -0
  16. package/packages/big-table/src/assets/iconfont/iconfont.ttf +0 -0
  17. package/packages/big-table/src/assets/img/failure.png +0 -0
  18. package/packages/big-table/src/assets/img/icon-asc.png +0 -0
  19. package/packages/big-table/src/assets/img/icon-desc.png +0 -0
  20. package/packages/big-table/src/assets/img/no-permission.png +0 -0
  21. package/packages/big-table/src/assets/img/nodata.png +0 -0
  22. package/packages/big-table/src/assets/img/notfound.png +0 -0
  23. package/packages/big-table/src/assets/img/qr.png +0 -0
  24. package/packages/big-table/src/assets/img/video_default_cover.png +0 -0
  25. package/packages/big-table/src/assets/img/xb_big.png +0 -0
  26. package/packages/big-table/src/assets/img/xb_small.png +0 -0
  27. package/packages/big-table/src/assets/style/table-base.less +275 -0
  28. package/packages/big-table/src/assets/style/table-global.less +167 -0
  29. package/packages/big-table/src/bigTableEmits.ts +46 -0
  30. package/packages/big-table/src/bigTableProps.ts +125 -0
  31. package/packages/big-table/src/bigTableState.ts +62 -0
  32. package/packages/big-table/src/components/NoData.vue +90 -0
  33. package/packages/big-table/src/components/SvgIcon.vue +49 -0
  34. package/packages/big-table/src/components/TextOverTooltip.vue +110 -0
  35. package/packages/big-table/src/components/edit-form/EditForm.vue +426 -0
  36. package/packages/big-table/src/components/edit-form/edit-component/edit-date-picker/edit-date-picker.vue +66 -0
  37. package/packages/big-table/src/components/edit-form/edit-component/edit-digital/edit-digital.vue +60 -0
  38. package/packages/big-table/src/components/edit-form/edit-component/edit-input/edit-input.vue +38 -0
  39. package/packages/big-table/src/components/edit-form/edit-component/edit-input-password/edit-input-password.vue +89 -0
  40. package/packages/big-table/src/components/edit-form/edit-component/edit-month-picker/edit-month-picker.vue +38 -0
  41. package/packages/big-table/src/components/edit-form/edit-component/edit-search/edit-search.vue +63 -0
  42. package/packages/big-table/src/components/edit-form/edit-component/edit-search-more/edit-search-more.vue +69 -0
  43. package/packages/big-table/src/components/edit-form/edit-component/edit-select/edit-select.vue +51 -0
  44. package/packages/big-table/src/components/edit-form/edit-component/edit-select-multiple/edit-select-multiple.vue +60 -0
  45. package/packages/big-table/src/components/edit-form/edit-component/edit-textarea/edit-textarea.vue +34 -0
  46. package/packages/big-table/src/components/edit-form/edit-component/edit-time-picker/edit-time-picker.vue +42 -0
  47. package/packages/big-table/src/components/edit-form/edit-component/editFormProps.ts +91 -0
  48. package/packages/big-table/src/components/edit-form/edit-component/register-com.ts +18 -0
  49. package/packages/big-table/src/components/edit-form/hooks/useConfigData.ts +79 -0
  50. package/packages/big-table/src/components/edit-form/hooks/useDateType.ts +184 -0
  51. package/packages/big-table/src/components/edit-form/hooks/useFormCommon.ts +373 -0
  52. package/packages/big-table/src/components/edit-form/hooks/useItemDefault.ts +638 -0
  53. package/packages/big-table/src/components/edit-form/hooks/useSearch.ts +910 -0
  54. package/packages/big-table/src/components/edit-form/hooks/useValidateRules.ts +387 -0
  55. package/packages/big-table/src/components/edit-form/interface.ts +53 -0
  56. package/packages/big-table/src/components/edit-form/types.ts +3 -0
  57. package/packages/big-table/src/components/edit-form/utils.ts +247 -0
  58. package/packages/big-table/src/hooks/useBatchEditing.ts +574 -0
  59. package/packages/big-table/src/hooks/useFormat.ts +612 -0
  60. package/packages/big-table/src/hooks/useNestTable.ts +109 -0
  61. package/packages/big-table/src/hooks/useTableParse.ts +169 -0
  62. package/packages/big-table/src/utils.ts +705 -0
  63. package/packages/button-print/index.ts +15 -0
  64. package/packages/button-print/src/ButtonPrint.vue +697 -0
  65. package/packages/button-print/src/components/IdentityVerification.vue +149 -0
  66. package/packages/button-print/src/interfaces.ts +19 -0
  67. package/packages/button-print/src/utils/crypto.js +25 -0
  68. package/packages/button-print/src/utils/print.es.min.js +1 -0
  69. package/packages/drag-layout/index.ts +15 -0
  70. package/packages/drag-layout/src/DragFormLeftItem.vue +131 -0
  71. package/packages/drag-layout/src/DragFormRightItem.vue +277 -0
  72. package/packages/drag-layout/src/DragLayout.vue +712 -0
  73. package/packages/grid/index.ts +17 -0
  74. package/packages/grid/src/Grid.tsx +22 -0
  75. package/packages/grid/src/hooks.ts +168 -0
  76. package/packages/index.ts +36 -0
  77. package/src/component/svg/index.vue +49 -0
  78. package/src/core/create.ts +5 -0
  79. package/src/global/variable.ts +2 -0
  80. package/src/utils/clickoutside.ts +80 -0
  81. package/src/utils/crypto.js +25 -0
  82. package/src/utils/vexutils.ts +811 -0
@@ -0,0 +1,426 @@
1
+ <template>
2
+ <div class="editForm-page">
3
+ <NForm ref="editForm" :model="state.editForm" :rules="state.editRules">
4
+ <NFormItem
5
+ v-for="(item, index) in state.editForm.formFieldList"
6
+ :key="index"
7
+ label=""
8
+ :path="`formFieldList.${index}.useFormValue`"
9
+ :rule="handleGetRules(item)"
10
+ :class="'editeForm-item-' + item.html_type"
11
+ >
12
+ <component
13
+ v-if="item.isShowComponent"
14
+ :key="item.RandomId"
15
+ v-bind:is="item.com_name"
16
+ :class="item.html_type"
17
+ :ref="item.html_type + item.val_key"
18
+ :item="item"
19
+ :defaultValue="state.defaultValue"
20
+ v-bind="$attrs"
21
+ :form="editForm"
22
+ @valueOnChange="getValueChange"
23
+ />
24
+ </NFormItem>
25
+ </NForm>
26
+ </div>
27
+ </template>
28
+ <script lang="ts">
29
+ import registerCom from './edit-component/register-com';
30
+ export default {
31
+ name: 'EditForm',
32
+ mixins: [registerCom]
33
+ }
34
+ </script>
35
+ <script setup lang="ts">
36
+ import { ref, reactive, provide, computed, watch } from 'vue'
37
+ import { NGrid, NGridItem, NFormItemGi, NButton, NModal, NForm, NFormItem, NInput, NSelect, NCheckbox, NInputNumber } from 'naive-ui'
38
+ import type { FormRules, FormInst } from 'naive-ui'
39
+ import { useMessage } from 'naive-ui'
40
+ import type { defaultFormProp, FieldListProp } from './interface'
41
+ import useConfigData from './hooks/useConfigData'
42
+ import { useFormCommon } from "./hooks/useFormCommon"
43
+ import { useValidateRules } from './hooks/useValidateRules'
44
+ import { handleSysParams, handlerGetDateType } from './utils'
45
+ import vexutils from '@/utils/vexutils';
46
+
47
+ interface EditFormProps {
48
+ defaultForm: defaultFormProp
49
+ isPure: boolean
50
+ cacheUniqueKey?: any
51
+ banRequest?: boolean
52
+ propsDelSetting?: boolean
53
+ propsFormBtn?: boolean
54
+ parentConfig?: any
55
+ configuration?: any
56
+ isOpenShortcut?: boolean
57
+ formPrimaryKey: number | string
58
+ styleSetting?: any
59
+ }
60
+
61
+ (window as any).$message = useMessage()
62
+
63
+ const props = withDefaults(defineProps<EditFormProps>(), {
64
+ cacheUniqueKey: {},
65
+ banRequest: false,
66
+ propsDelSetting: false,
67
+ propsFormBtn: false,
68
+ parentConfig: {},
69
+ configuration: {},
70
+ isOpenShortcut: true
71
+ })
72
+
73
+ const emit = defineEmits(['banSubmit', 'handleSubmit'])
74
+
75
+ const state = reactive({
76
+ defaultValue: {},
77
+ editForm: {
78
+ formFieldList: [] as any[]
79
+ },
80
+ editRules: {},
81
+ formFieldList: [],
82
+ theUniqueKeyListObj: {},
83
+ formType: {} as null | any,
84
+ defaultFieldList: [] as any[],
85
+ dbParams: {},
86
+ searchObj: {}, // 存下来搜索框数据
87
+ searchAddObj: {},
88
+ multipleSelected: {}, // 已选的多选值
89
+ formFieldObj: {}, // 表单数据
90
+ selectedDefValueObj: {},
91
+ fieldTypeList: [] as any[]
92
+ })
93
+ const editForm = ref<FormInst | null>(null)
94
+
95
+ const userInfo = computed(() => {
96
+ const { userInfo } = props.configuration || {};
97
+ return userInfo || {};
98
+ })
99
+ const showLable = computed(() => !props.isPure)
100
+
101
+ const { RandomId, handleGetdef}: any = useFormCommon(props, state, userInfo.value);
102
+ const { handleGetRules } = useValidateRules()
103
+
104
+ provide('state', state)
105
+ provide('userInfo', userInfo)
106
+
107
+ // 方法
108
+ // 默认值转换
109
+ const handleConvertData = (target: any) => {
110
+ let transmitParams: any = {};
111
+ let transmitKeys = Object.keys(target || {});
112
+ if (transmitKeys && transmitKeys.length) {
113
+ transmitKeys.forEach(v => {
114
+ if (typeof target[v] == 'object') {
115
+ transmitParams[v] = JSON.stringify(target[v]);
116
+ } else {
117
+ transmitParams[v] = target[v];
118
+ }
119
+ if (vexutils.isString(target[v])) {
120
+ if (target[v] && target[v].includes('###{')) {
121
+ let temp = JSON.parse(target[v].replace('###', ''));
122
+ transmitParams[v] = temp.value;
123
+ }
124
+ }
125
+ });
126
+ }
127
+
128
+ return transmitParams;
129
+ }
130
+ const handleGetformType = (list: any[]) => {
131
+ state.theUniqueKeyListObj = {};
132
+ let myformType: any = {};
133
+ let mySearchObj: any = {};
134
+ let searchAddObj: any = {};
135
+ state.formType = null;
136
+
137
+ let fieldObj = Object.create(null);
138
+ let defaList = Object.keys(state.defaultValue);
139
+
140
+ list?.forEach(item => {
141
+ myformType[item.val_key] = item;
142
+ let curKey = `${item.val_key}_${item.name}`;
143
+ let NOWORDBOOK = item.wordbook && (item?.wordbook?.type || '') != 'WORDBOOK';
144
+ item.selectOptions = [];
145
+ item.popoverVisible = false;
146
+ item.otherval = '';
147
+ item.otherFlag = false;
148
+ if (item.html_type == 'SEARCH') {
149
+ mySearchObj[curKey] = [];
150
+ searchAddObj[curKey] = false;
151
+ if (defaList.includes(item.name)) {
152
+ mySearchObj[curKey] = [
153
+ {
154
+ [item.wordbook.value_key]: state.defaultValue[item.name]
155
+ }
156
+ ];
157
+ }
158
+ } else if (item.html_type == 'SEARCH_MORE') {
159
+ mySearchObj[curKey] = [];
160
+ searchAddObj[curKey] = false;
161
+ if (!(state.multipleSelected as any)[curKey]) {
162
+ state.multipleSelected[curKey] = []
163
+ }
164
+ } else {
165
+ const { validate } = item;
166
+ let n = state.defaultValue[item.name] || item.default_val;
167
+ // // 身份证
168
+ // if (n && validate && validate.obj_type == 'id_card') {
169
+ // setTimeout(() => {
170
+ // this.handlerSetIdCarInfo(item, true);
171
+ // }, 300);
172
+ // }
173
+ }
174
+ if (item.val_key) {
175
+ fieldObj[item.val_key] = {
176
+ ...item
177
+ };
178
+ }
179
+ });
180
+ state.formType = myformType;
181
+ state.searchObj = mySearchObj;
182
+ state.searchAddObj = searchAddObj;
183
+ state.formFieldObj = fieldObj;
184
+ }
185
+ const getSelecteddefValueObj = () => {
186
+ let obj = {
187
+ multipleSelected: {
188
+ ...state.multipleSelected
189
+ }
190
+ };
191
+ state.selectedDefValueObj = obj
192
+ }
193
+ const hanlderInitFieldList = (fieldList: any[] = []) => {
194
+ if (!fieldList.length) return;
195
+ handleGetformType(fieldList);
196
+ getSelecteddefValueObj();
197
+
198
+ let fieldTypeList = [];
199
+ for (let index = 0; index < fieldList.length; index++) {
200
+ const element: any = fieldList[index];
201
+ element.isPure = props.isPure;
202
+ // 获取组件名称
203
+ let randomId = RandomId();
204
+ let com_name = useConfigData.getComName(element);
205
+ // console.log(element.name, com_name, element.html_type);
206
+ element['com_name'] = com_name
207
+ element['RandomId'] = randomId
208
+ let useFormValue = handleGetdef(element);
209
+ // console.log(useFormValue, "---useFormValue");
210
+ element['useFormValue'] = useFormValue
211
+ element['isVisible'] = false
212
+ // 如果中台设置(mid_is_edit)有值那就去中台的,没有取后台(is_edit)的;
213
+ let mid_is_edit = [0, 1, '0', '1'].includes(element.mid_is_edit) ? element.mid_is_edit : element.is_edit;
214
+ element.is_edit = mid_is_edit;
215
+
216
+ if (element.html_type.includes('CHECKBOX')) {
217
+ element['indeterminate'] = false
218
+ element['checkAll'] = false
219
+ }
220
+
221
+ // 兼容处理,
222
+ if (element.html_type.includes('CHECKBOX') || element.html_type.includes('RADIO')) {
223
+ let imgFlag = element?.option?.some((v: any) => v.imageBase64);
224
+ element.is_contain_images = imgFlag ? 1 : 0;
225
+ }
226
+
227
+ fieldTypeList.push({
228
+ columnName: element.val_key,
229
+ fieldType: 'TEXT'
230
+ });
231
+ element['isShowComponent'] = true
232
+ }
233
+
234
+ state.defaultFieldList = fieldList;
235
+ state.fieldTypeList = fieldTypeList;
236
+ state.editForm.formFieldList = fieldList
237
+ }
238
+ const initForm = (m: defaultFormProp = {}) => {
239
+ let { defaultCombinationForm = {}, fieldList = [] } = m;
240
+ let tempForm = {};
241
+ if (Object.keys(defaultCombinationForm).length) {
242
+ tempForm = { ...defaultCombinationForm };
243
+ }
244
+ let transmitParams = handleConvertData(tempForm);
245
+ state.defaultValue = { ...transmitParams };
246
+ // console.log(this.defaultValue, "---defaultValue");
247
+ hanlderInitFieldList(fieldList);
248
+
249
+ }
250
+ // 设置身份证的信息
251
+ const handlerSetIdCarInfo = (data = {}, init = false) => {}
252
+ const hanldegetUniqueKey = (id: string) => {
253
+ return props.cacheUniqueKey && props.cacheUniqueKey[id];
254
+ }
255
+ const getValueChange = (v: any, i:any) => {
256
+ // SEARCH_CASCADE SEARCH_MORE LABEL
257
+ let cacheKey = `${i.val_key}_${i.name}`;
258
+ if (i.html_type == 'SEARCH_MORE') {
259
+ state.multipleSelected[cacheKey] = [...v]
260
+ }
261
+ getSelecteddefValueObj();
262
+ }
263
+ const getObjs = (str: string): string => {
264
+ /**
265
+ * 处理:{type: "jsonb", value: ""}
266
+ * */
267
+ let resObj = null;
268
+ if (vexutils.isJSON(str)) {
269
+ resObj = JSON.parse(str);
270
+ if (resObj.type === 'jsonb') {
271
+ resObj = resObj.value;
272
+ if (resObj.includes('jsonb')) {
273
+ resObj = getObjs(resObj);
274
+ }
275
+ return resObj;
276
+ } else {
277
+ return str;
278
+ }
279
+ } else {
280
+ return str;
281
+ }
282
+ }
283
+ const handleGetSearMoreSubmit = (item: any, formdata: any) => {
284
+ const { formType, multipleSelected } = state;
285
+ const curItem = formType[item];
286
+ const defaultVal = JSON.stringify({ objs: [], objStr: '' });
287
+ let valueList: any[] = [];
288
+ let showList: any[] = [];
289
+ let keyName = `${curItem.val_key}_${curItem.name}`;
290
+ if (!curItem.wordbook) return defaultVal;
291
+ let value_key = curItem.wordbook.value_key;
292
+ let render_key = curItem.wordbook.render_key || [];
293
+ let defVal = state.defaultValue[curItem.name] || curItem.default_val;
294
+ // 修改时没有改变值,直接提交回填的值;
295
+ if (curItem.isOnchange !== '00' && defVal) {
296
+ defVal = curItem.filtration_val || handleSysParams(defVal, { defaultValue: state.defaultValue, userInfo: userInfo.value, dbParams: state.dbParams });
297
+ defVal = getObjs(defVal);
298
+ return defVal || defaultVal;
299
+ }
300
+ const targetList = JSON.parse(JSON.stringify(multipleSelected[keyName] || []));
301
+ if (Array.isArray(formdata[item]) && formdata[item].length) {
302
+ formdata[item].forEach((ele: any) => {
303
+ targetList.forEach((v: any) => {
304
+ let [curValue_key] = typeof ele.key === 'string' ? ele.key.split('-') : [''];
305
+ if (`${v[value_key]}-${v['myUniqueKey']}` == ele.key || curValue_key == v[value_key]) {
306
+ // 删除 前端添加的关联信息
307
+ delete v.setting;
308
+ delete v.showLabel;
309
+ // v.myUniqueLabel != "theUniqueKey"
310
+
311
+ if (v['myUniqueKey'] && v.myUniqueLabel) {
312
+ var item = {
313
+ [v.myUniqueLabel]: v['myUniqueKey'],
314
+ [value_key]: v[value_key]
315
+ };
316
+ render_key.forEach((k: string) => {
317
+ item[k] = v[k];
318
+ });
319
+ valueList.push(item);
320
+ } else {
321
+ let { myUniqueKey, myUniqueLabel, ...rest } = v;
322
+ valueList.push(rest);
323
+ }
324
+ showList.push(v[value_key]);
325
+ }
326
+ });
327
+ });
328
+ }
329
+ return JSON.stringify({
330
+ objs: valueList,
331
+ objStr: showList.join(',')
332
+ });
333
+ }
334
+ const handleFormatSubmit = (copy: any) => {
335
+ // Moment 对象不能用 JSON 方式复制
336
+ // let formdata = JSON.parse(JSON.stringify(copy));
337
+ let formdata = vexutils.clone(copy, true);
338
+
339
+ // 表格数据格式化符合接口
340
+ Object.keys(formdata).forEach(item => {
341
+ switch (state.formType[item]?.html_type) {
342
+ case 'INPUT':
343
+ case 'TEXTAREA':
344
+ if (state.formType[item]?.delete_before_after_spaces == 1) {
345
+ formdata[item] = vexutils.handleClearStrBlank(formdata[item]);
346
+ }
347
+ break;
348
+ case 'DIGITAL':
349
+ case 'SELECT':
350
+ case 'RADIO':
351
+ case 'RADIO_BLOCK':
352
+ break;
353
+ case 'SEARCH':
354
+ formdata[item] = typeof formdata[item] === 'string' ? formdata[item].split('>>>')[0] : formdata[item] && formdata[item].label && formdata[item].label.trim();
355
+ break;
356
+ case 'SEARCH_MORE':
357
+ formdata[item] = handleGetSearMoreSubmit(item, formdata);
358
+ break;
359
+ case 'CHECKBOX':
360
+ case 'CHECKBOX_BLOCK':
361
+ formdata[item] = Array.isArray(formdata[item]) ? formdata[item].join(',') : formdata[item];
362
+ break;
363
+ case 'DATETIME-INPUT':
364
+ case 'DATE-INPUT':
365
+ case 'TIME-INPUT':
366
+ case 'DATE':
367
+ if (typeof formdata[item] == 'string') {
368
+ formdata[item] = formdata[item] || null;
369
+ } else {
370
+ formdata[item] = formdata[item] ? formdata[item].format(handlerGetDateType(state.formType[item])) : null;
371
+ }
372
+ break;
373
+ default:
374
+ break;
375
+ }
376
+ });
377
+ return formdata;
378
+ }
379
+ const handleSubmitForm = () => {
380
+ editForm.value?.validate((errors) => {
381
+ if (errors) {
382
+ emit('banSubmit', {
383
+ rowKey: props.formPrimaryKey
384
+ });
385
+ let message = (errors[0] as any).message || ''
386
+ message && (window as any).$message.error(message);
387
+ } else {
388
+ let submData = {};
389
+ state.editForm.formFieldList.forEach(item => {
390
+ submData[item.val_key] = item.useFormValue;
391
+ });
392
+ submData = handleFormatSubmit(submData);
393
+ if (submData) {
394
+ submData = JSON.parse(JSON.stringify(submData));
395
+ }
396
+ let formObj = {
397
+ rowKey: props.formPrimaryKey,
398
+ formData: submData
399
+ };
400
+ emit('handleSubmit', formObj);
401
+ }
402
+ })
403
+ }
404
+
405
+ watch(() => props.defaultForm,
406
+ (val: any) => {
407
+ if (!val || !Object.keys(val).length) return;
408
+ // 行编辑 formmat 触发多次 深拷贝 避免引用地址
409
+ let tempVal = JSON.parse(JSON.stringify(val));
410
+ initForm(tempVal);
411
+ },
412
+ { deep: true, immediate: true }
413
+ )
414
+
415
+ defineExpose({
416
+ handleSubmitForm
417
+ })
418
+ </script>
419
+ <style lang="less" scoped>
420
+ .editForm-page {
421
+ height: 100%;
422
+ width: 100%;
423
+ display: flex;
424
+ align-items: center;
425
+ }
426
+ </style>
@@ -0,0 +1,66 @@
1
+ <template>
2
+ <NDatePicker
3
+ class="edit-date-picker"
4
+ type="datetime"
5
+ v-model:value="item.useFormValue"
6
+ ref="dataPickerRef"
7
+ :placeholder="item.placeholder || ''"
8
+ :disabled="item.is_edit == 0"
9
+ :is-date-disabled="(current: number) => disabledDatePicker(current, item)"
10
+ :is-time-disabled="(current: number) => disabledTimePicker(current, item)"
11
+ :actions="handlerGetDateType(item) !== 'yyyy-MM-dd HH:mm:ss' ? ['clear', 'now', 'confirm'] : ['clear', 'confirm']"
12
+ :clearable="item.is_empty == 0"
13
+ :time-picker-props="{ disabled: timeIsDisabled, format: timeIsFormat }"
14
+ :format="handlerGetDateType(item)"
15
+ />
16
+ </template>
17
+
18
+ <script lang="ts">
19
+ import { defineComponent, ref } from 'vue'
20
+ import { NDatePicker } from 'naive-ui'
21
+ import editFormProps from '../editFormProps'
22
+ import { handlerGetDateType } from '../../utils'
23
+ import { useItemDefault } from '../../hooks/useItemDefault'
24
+ import { useDateType } from '../../hooks/useDateType'
25
+
26
+
27
+ export default defineComponent({
28
+ name: 'editDatePicker',
29
+ components: {
30
+ NDatePicker
31
+ },
32
+ props: {
33
+ ...editFormProps
34
+ },
35
+ emits: ['hanldeFromBlur'],
36
+ setup (props, { attrs, slots, emit }) {
37
+ const { open } = useItemDefault(props, emit)
38
+ // const { disabledDatePicker, disabledTimePicker } = useDateType(open)
39
+ let timeIsDisabled = ref(false)
40
+ let timeIsFormat = ref('HH:mm:ss')
41
+
42
+ const setTimePickerProps = () => {
43
+ let type = handlerGetDateType(props.item);
44
+ let flag = type.includes('HH');
45
+ let [, timeType] = type.split(' ');
46
+ timeType = typeof timeType === 'string' ? timeType.trim() : '';
47
+ if (flag) {
48
+ if (/(Y)|(M)|(D)/g.test(timeType) || !timeType) {
49
+ // return { format: 'HH:mm:ss' };
50
+ } else {
51
+ timeIsFormat.value = timeType
52
+ }
53
+ timeIsDisabled.value = true
54
+ }
55
+ }
56
+ setTimePickerProps()
57
+
58
+ return {
59
+ timeIsDisabled,
60
+ timeIsFormat,
61
+ handlerGetDateType,
62
+ ...useDateType(open)
63
+ }
64
+ }
65
+ })
66
+ </script>
@@ -0,0 +1,60 @@
1
+ <template>
2
+ <div class="ant-input-group">
3
+ <NInputGroup>
4
+ <NInputGroupLabel>{{item.before}}</NInputGroupLabel>
5
+ <NInputNumber
6
+ v-model:value="item.useFormValue"
7
+ :ref="'a-input-number-' + item.val_key"
8
+ :disabled="item.is_edit == 0"
9
+ :placeholder="item.placeholder || ''"
10
+ :clearable="item.is_empty == 0"
11
+ >
12
+ <template #suffix>
13
+ <span v-if="item.suffix" class="digital-suffix">
14
+ {{ item.suffix }}
15
+ </span>
16
+ </template>
17
+ </NInputNumber>
18
+ <NInputGroupLabel>{{item.suffix}}</NInputGroupLabel>
19
+ </NInputGroup>
20
+ </div>
21
+ </template>
22
+
23
+ <script lang="ts">
24
+ import { defineComponent, ref } from 'vue'
25
+ import { NInputNumber, NInputGroup, NInputGroupLabel } from 'naive-ui'
26
+ import editFormProps from '../editFormProps'
27
+
28
+ export default defineComponent({
29
+ name: 'editDigital',
30
+ components: {
31
+ NInputNumber,
32
+ NInputGroup,
33
+ NInputGroupLabel
34
+ },
35
+ props: {
36
+ ...editFormProps
37
+ },
38
+ setup (props, { attrs, slots, emit }) {
39
+
40
+ }
41
+ })
42
+ </script>
43
+
44
+ <style lang="less" scoped>
45
+ .digital-suffix {
46
+ display: inline-block;
47
+ height: 32px;
48
+ line-height: 32px;
49
+ padding: 0 11px;
50
+ font-weight: 400;
51
+ font-size: 14px;
52
+ text-align: center;
53
+ color: rgba(0, 0, 0, 0.65);
54
+ background-color: #fafafa;
55
+ border: 1px solid #d9d9d9;
56
+ border-radius: 4px;
57
+ box-sizing: border-box;
58
+ vertical-align: top;
59
+ }
60
+ </style>
@@ -0,0 +1,38 @@
1
+ <template>
2
+ <NInputGroup>
3
+ <NInputGroupLabel>{{item.before}}</NInputGroupLabel>
4
+ <NInput
5
+ v-model:value="item.useFormValue"
6
+ :ref="`input-${item.val_key}`"
7
+ autocomplete="off"
8
+ :disabled="item.is_edit == 0"
9
+ :clearable="item.is_empty == 0"
10
+ :placeholder="item.placeholder || ''"
11
+ :maxlength="item.validate && item.validate.max_length ? +item.validate.max_length : 300"
12
+ >
13
+ </NInput>
14
+ <NInputGroupLabel>{{item.suffix}}</NInputGroupLabel>
15
+ </NInputGroup>
16
+ </template>
17
+
18
+ <script lang="ts">
19
+ import { defineComponent, ref } from 'vue'
20
+ import { NInput, NInputGroup, NInputGroupLabel } from 'naive-ui'
21
+ import editFormProps from '../editFormProps'
22
+
23
+ export default defineComponent({
24
+ name: 'editInput',
25
+ components: {
26
+ NInput,
27
+ NInputGroup,
28
+ NInputGroupLabel
29
+ },
30
+ props: {
31
+ ...editFormProps
32
+ },
33
+ setup (props, { attrs, slots, emit }) {
34
+
35
+ }
36
+ })
37
+ </script>
38
+ <style lang="less" scoped></style>
@@ -0,0 +1,89 @@
1
+ <template>
2
+ <div
3
+ :class="{
4
+ 'is-show-psw': !isReadOnly
5
+ }"
6
+ >
7
+ <NInputGroup>
8
+ <NInputGroupLabel>{{item.before}}</NInputGroupLabel>
9
+ <NInput
10
+ :ref="`input-password-${item.val_key}`"
11
+ :type="inputType"
12
+ v-model:value="item.useFormValue"
13
+ autocomplete="off"
14
+ autocorrect="off"
15
+ autocapitalize="off"
16
+ spellcheck="false"
17
+ :disabled="item.is_edit == 0"
18
+ :clearable="item.is_empty == 0"
19
+ :placeholder="item.placeholder || ''"
20
+ :maxlength="item.validate && item.validate.max_length ? +item.validate.max_length : 300"
21
+ >
22
+ <template #suffix>
23
+ <svg-icon @click="handleTogglePsw" :icon-class="isReadOnly ? 'chakan' : 'anniuyincang'" style="font-size: 1em;" :style="{ color: isReadOnly ? styleSetting.themeColor : undefined }" />
24
+ </template>
25
+ </NInput>
26
+ <NInputGroupLabel>{{item.suffix}}</NInputGroupLabel>
27
+ </NInputGroup>
28
+ </div>
29
+ </template>
30
+
31
+ <script lang="ts">
32
+ import { defineComponent, ref } from 'vue'
33
+ import { NInput, NInputGroup, NInputGroupLabel } from 'naive-ui'
34
+ import SvgIcon from '@/component/svg/index.vue';
35
+ import editFormProps from '../editFormProps'
36
+
37
+ type InputType = 'text' | 'password' | 'textarea'
38
+
39
+ export default defineComponent({
40
+ name: 'editInputPassword',
41
+ components: {
42
+ NInput,
43
+ NInputGroup,
44
+ NInputGroupLabel,
45
+ SvgIcon
46
+ },
47
+ props: {
48
+ ...editFormProps
49
+ },
50
+ setup (props, { attrs, slots, emit }) {
51
+ let inputType = ref('text' as InputType)
52
+ let isReadOnly = ref(false)
53
+
54
+ const handleTogglePsw = () => {
55
+ isReadOnly.value = !isReadOnly.value
56
+ }
57
+
58
+ return {
59
+ inputType,
60
+ isReadOnly,
61
+ handleTogglePsw
62
+ }
63
+ }
64
+ })
65
+ </script>
66
+ <style lang="less" scoped>
67
+ .is-show-psw {
68
+ &:deep(.n-input) {
69
+ font-family: text-security-disc;
70
+ -webkit-text-security: disc;
71
+ text-security: disc; /*使用指定形状代替文字显示 circle圆圈 disc 圆形 square 正方形*/
72
+ ime-mode: disabled;
73
+ }
74
+ ::-webkit-input-placeholder {
75
+ /* WebKit browsers */
76
+ font-family: 'Avenir', Helvetica, Arial, sans-serif;
77
+ }
78
+
79
+ ::-moz-placeholder {
80
+ /* Mozilla Firefox 19+ */
81
+ font-family: 'Avenir', Helvetica, Arial, sans-serif;
82
+ }
83
+
84
+ :-ms-input-placeholder {
85
+ /* Internet Explorer 10+ */
86
+ font-family: 'Avenir', Helvetica, Arial, sans-serif;
87
+ }
88
+ }
89
+ </style>