import { describe, expect, it } from 'vitest';
|
|
import { buildFormFieldMaskMap, syncColumnListFieldConfig } from '../fieldConfigSync';
|
|
function createInputField(vModel: string, extra: Recordable = {}) {
|
return {
|
__vModel__: vModel,
|
__config__: { jnpfKey: 'input', layout: 'colFormItem', label: vModel, labelI18nCode: '' },
|
useMask: false,
|
maskConfig: { filler: '*', maskType: 1 },
|
...extra,
|
};
|
}
|
|
function createColumn(prop: string, extra: Recordable = {}) {
|
return {
|
prop,
|
jnpfKey: 'input',
|
label: '手机号',
|
align: 'center',
|
fixed: 'left',
|
width: 180,
|
sortable: true,
|
noShow: false,
|
superQueryNoShow: true,
|
useContentFormat: false,
|
biz_log_enabled: true,
|
useMask: true,
|
maskConfig: { filler: '*', maskType: 1 },
|
...extra,
|
};
|
}
|
|
function createSearch(prop: string, extra: Recordable = {}) {
|
return {
|
prop,
|
jnpfKey: 'input',
|
label: '自定义查询标题',
|
labelI18nCode: 'query.customLabel',
|
searchType: 2,
|
searchMultiple: true,
|
sourceType: 4,
|
value: '@currUser',
|
isKeyword: true,
|
noShow: true,
|
...extra,
|
};
|
}
|
|
describe('syncColumnListFieldConfig', () => {
|
it('刷新列上残留的掩码配置,同时保留列表自身的属性', () => {
|
const columnData = { columnList: [createColumn('mobile')] };
|
const formData = { fields: [createInputField('mobile')] };
|
|
syncColumnListFieldConfig(columnData, formData);
|
|
const column = columnData.columnList[0]!;
|
expect(column.useMask).toBe(false);
|
expect(column.label).toBe('手机号');
|
expect(column.align).toBe('center');
|
expect(column.fixed).toBe('left');
|
expect(column.width).toBe(180);
|
expect(column.sortable).toBe(true);
|
expect(column.superQueryNoShow).toBe(true);
|
expect(column.biz_log_enabled).toBe(true);
|
});
|
|
it('同步开启掩码后的规则配置', () => {
|
const columnData = { columnList: [createColumn('idCard', { useMask: false, maskConfig: undefined })] };
|
const formData = { fields: [createInputField('idCard', { useMask: true, maskConfig: { filler: '#', maskType: 5 } })] };
|
|
syncColumnListFieldConfig(columnData, formData);
|
|
expect(columnData.columnList[0]!.useMask).toBe(true);
|
expect(columnData.columnList[0]!.maskConfig).toEqual({ filler: '#', maskType: 5 });
|
});
|
|
it('匹配子表字段列', () => {
|
const columnData = { columnList: [createColumn('table1-mobile')] };
|
const formData = {
|
fields: [
|
{
|
__vModel__: 'table1',
|
__config__: {
|
jnpfKey: 'table',
|
layout: 'colFormItem',
|
label: '明细',
|
labelI18nCode: '',
|
children: [createInputField('mobile')],
|
},
|
},
|
],
|
};
|
|
syncColumnListFieldConfig(columnData, formData);
|
|
expect(columnData.columnList[0]!.useMask).toBe(false);
|
});
|
|
it('表单里已不存在的字段对应的列保持原样', () => {
|
const columnData = { columnList: [createColumn('removed'), createColumn('mobile')] };
|
const formData = { fields: [createInputField('mobile')] };
|
|
syncColumnListFieldConfig(columnData, formData);
|
|
expect(columnData.columnList[0]!.useMask).toBe(true);
|
expect(columnData.columnList[1]!.useMask).toBe(false);
|
});
|
|
it('单端隐藏的字段同样刷新,避免另一端列表残留旧配置', () => {
|
const columnData = { columnList: [createColumn('mobile')] };
|
const formData = {
|
fields: [createInputField('mobile', { __config__: { jnpfKey: 'input', layout: 'colFormItem', label: 'mobile', visibility: ['app'] } })],
|
};
|
|
syncColumnListFieldConfig(columnData, formData);
|
|
expect(columnData.columnList[0]!.useMask).toBe(false);
|
});
|
|
it('没有表单字段时不做任何处理', () => {
|
const columnList = [createColumn('mobile')];
|
const columnData = { columnList };
|
|
syncColumnListFieldConfig(columnData, {});
|
|
expect(columnData.columnList).toBe(columnList);
|
expect(columnData.columnList[0]!.useMask).toBe(true);
|
});
|
|
it('控件类型改变时按新类型重置查询设置', () => {
|
const columnData = { columnList: [], searchList: [createSearch('createdAt')] };
|
const formData = {
|
fields: [
|
createInputField('createdAt', {
|
__config__: { jnpfKey: 'datePicker', layout: 'colFormItem', label: '创建时间', labelI18nCode: '' },
|
}),
|
],
|
};
|
|
syncColumnListFieldConfig(columnData, formData, 'pc');
|
|
expect(columnData.searchList[0]).toMatchObject({
|
prop: 'createdAt',
|
jnpfKey: 'datePicker',
|
label: '自定义查询标题',
|
labelI18nCode: 'query.customLabel',
|
searchType: 3,
|
searchMultiple: false,
|
sourceType: 2,
|
value: [],
|
isKeyword: true,
|
});
|
expect(columnData.searchList[0]).not.toHaveProperty('noShow');
|
});
|
|
it('控件类型未改变时保留已有查询设置', () => {
|
const columnData = { columnList: [], searchList: [createSearch('name')] };
|
const formData = { fields: [createInputField('name')] };
|
|
syncColumnListFieldConfig(columnData, formData, 'pc');
|
|
expect(columnData.searchList[0]).toMatchObject({
|
searchType: 2,
|
searchMultiple: true,
|
sourceType: 4,
|
value: '@currUser',
|
isKeyword: true,
|
noShow: true,
|
});
|
});
|
|
it('新类型不支持查询或在当前端不可见时移除查询字段', () => {
|
const columnData = {
|
columnList: [],
|
searchList: [createSearch('attachment'), createSearch('appOnly')],
|
};
|
const formData = {
|
fields: [
|
createInputField('attachment', {
|
__config__: { jnpfKey: 'uploadFile', layout: 'colFormItem', label: '附件', labelI18nCode: '' },
|
}),
|
createInputField('appOnly', {
|
__config__: { jnpfKey: 'input', layout: 'colFormItem', label: '仅移动端', labelI18nCode: '', visibility: ['app'] },
|
}),
|
],
|
};
|
|
syncColumnListFieldConfig(columnData, formData, 'pc');
|
|
expect(columnData.searchList).toEqual([]);
|
});
|
});
|
|
describe('buildFormFieldMaskMap', () => {
|
it('返回字段的掩码开关与规则', () => {
|
const map = buildFormFieldMaskMap({
|
fields: [createInputField('mobile', { useMask: true, maskConfig: { filler: '*', maskType: 3 } }), createInputField('remark')],
|
});
|
|
expect(map.get('mobile')).toEqual({ useMask: true, maskConfig: { filler: '*', maskType: 3 } });
|
expect(map.get('remark')?.useMask).toBe(false);
|
expect(map.has('unknown')).toBe(false);
|
});
|
|
it('表单配置为空时返回空映射', () => {
|
expect(buildFormFieldMaskMap(null).size).toBe(0);
|
expect(buildFormFieldMaskMap({ fields: [] }).size).toBe(0);
|
});
|
});
|