cnhis-design-vue 3.0.1 → 3.0.2
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/CHANGELOG.md +12 -0
- package/es/big-table/index.css +1 -6
- package/es/big-table/index.js +5603 -36408
- package/es/button-print/index.css +17 -22
- package/es/button-print/index.js +4920 -18073
- package/es/drag-layout/index.css +17 -22
- package/es/drag-layout/index.js +75 -5733
- package/es/grid/index.css +58 -64
- package/es/grid/index.js +3 -30623
- package/es/index.css +1 -6
- package/es/index.js +267 -37863
- package/package.json +2 -6
- package/packages/big-table/src/BigTable.vue +30 -45
- package/packages/big-table/src/bigTableEmits.ts +2 -1
- package/packages/big-table/src/components/edit-form/edit-input.vue +27 -7
- package/packages/big-table/src/components/edit-form/edit-select.vue +1 -1
- package/packages/big-table/src/hooks/useBatchEditing.ts +123 -123
- package/packages/big-table/src/hooks/useEdit.ts +42 -23
- package/packages/button-print/src/ButtonPrint.vue +11 -144
- package/packages/button-print/src/components/IdentityVerification.vue +14 -43
- package/packages/grid/index.ts +3 -2
- package/packages/grid/src/Grid.tsx +4 -3
- package/packages/index.ts +5 -6
- package/packages/big-table/src/components/edit-form3/EditForm.vue +0 -426
- package/packages/big-table/src/components/edit-form3/edit-component/edit-date-picker/edit-date-picker.vue +0 -66
- package/packages/big-table/src/components/edit-form3/edit-component/edit-digital/edit-digital.vue +0 -60
- package/packages/big-table/src/components/edit-form3/edit-component/edit-input/edit-input.vue +0 -38
- package/packages/big-table/src/components/edit-form3/edit-component/edit-input-password/edit-input-password.vue +0 -89
- package/packages/big-table/src/components/edit-form3/edit-component/edit-month-picker/edit-month-picker.vue +0 -38
- package/packages/big-table/src/components/edit-form3/edit-component/edit-search/edit-search.vue +0 -63
- package/packages/big-table/src/components/edit-form3/edit-component/edit-search-more/edit-search-more.vue +0 -69
- package/packages/big-table/src/components/edit-form3/edit-component/edit-select/edit-select.vue +0 -51
- package/packages/big-table/src/components/edit-form3/edit-component/edit-select-multiple/edit-select-multiple.vue +0 -60
- package/packages/big-table/src/components/edit-form3/edit-component/edit-textarea/edit-textarea.vue +0 -34
- package/packages/big-table/src/components/edit-form3/edit-component/edit-time-picker/edit-time-picker.vue +0 -42
- package/packages/big-table/src/components/edit-form3/edit-component/editFormProps.ts +0 -91
- package/packages/big-table/src/components/edit-form3/edit-component/register-com.ts +0 -18
- package/packages/big-table/src/components/edit-form3/hooks/useConfigData.ts +0 -79
- package/packages/big-table/src/components/edit-form3/hooks/useDateType.ts +0 -184
- package/packages/big-table/src/components/edit-form3/hooks/useFormCommon.ts +0 -373
- package/packages/big-table/src/components/edit-form3/hooks/useItemDefault.ts +0 -638
- package/packages/big-table/src/components/edit-form3/hooks/useSearch.ts +0 -910
- package/packages/big-table/src/components/edit-form3/hooks/useValidateRules.ts +0 -387
- package/packages/big-table/src/components/edit-form3/interface.ts +0 -53
- package/packages/big-table/src/components/edit-form3/types.ts +0 -3
- package/packages/big-table/src/components/edit-form3/utils.ts +0 -247
- package/packages/big-table/src/components/svg/index.vue +0 -49
|
@@ -1,426 +0,0 @@
|
|
|
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>
|
|
@@ -1,66 +0,0 @@
|
|
|
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>
|
package/packages/big-table/src/components/edit-form3/edit-component/edit-digital/edit-digital.vue
DELETED
|
@@ -1,60 +0,0 @@
|
|
|
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>
|
package/packages/big-table/src/components/edit-form3/edit-component/edit-input/edit-input.vue
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
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>
|
|
@@ -1,89 +0,0 @@
|
|
|
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>
|