编写新的续写分摊次序的代码的方法,要求简洁但是完善,技术是最新的,不要出现找不到供应商或者过期的方法。假设分摊次序起初有默认的顺序,然后这个修改的数值的文本框,是那种右侧带有上下箭头的文本框,点击上箭头增加数值,点击下箭头减少数值。点击保存后,数据将保存至数据库,以便下次修改。分摊次序的类型为number,务必避免出现参数xxx隐式出现any元素。
// 移除未使用的导入
import type { ZHksxzApi } from '#/api/zhgl/zhgl_ksxz';
import { $t } from '#/locales';
//执行判别
export function zxpbOptions() {
return [
{ label: '否', value: '0' },
{ label: '是', value: '1' },
];
}
//开单判别
export function getStatusOptions() {
return [
{ label: '未开单', value: '0' },
{ label: '已开单', value: '1' },
];
}
export function useColumns(
onActionClick: (params: { code: string; row: ZHksxzApi.ZHksxz }) => void
) {
// 定义分摊对象的选项列表
const ftdxOptions = [
{ label: '对象A', value: 'A' },
{ label: '对象B', value: 'B' },
{ label: '对象C', value: 'C' },
{ label: '对象D', value: 'D' },
{ label: '对象E', value: 'E' },
];
return [
// {
// type: 'seq',
// title: '序号',
// width: 60,
// align: 'center',
// },
{
align: 'center',
field: 'id',
title: 'ID',
width: 100,
visible: false, // 默认隐藏,但保留在数据中
},
{
align: 'center',
field: 'dm',
title: '代码',
width: 110,
editRender: { name: 'input' },
},
{
align: 'left',
field: 'mc',
title: '名称',
width: 200,
editRender: { name: 'input' },
},
{
align: 'center',
field: 'hslb',
title: '核算类别',
width: 150,
editRender: { name: 'input'},
},
{
align: 'left',
field: 'zhlb',
title: '账户类别',
width: 150,
editRender: { name: 'input' },
},
{
align: 'center',
field: 'zxpb',
title: '执行判别',
width: 150,
formatter: ({ cellValue }: { cellValue: string }) => {
return String(cellValue) === '0' ? '否' : '是';
},
editRender: {
name: 'select',
options: [
{ label: '否', value: '0' },
{ label: '是', value: '1' }
]
}
},
{
align: 'center',
field: 'kdpb',
title: '开单判别',
width: 150,
formatter: ({ cellValue }: { cellValue: string }) => {
return String(cellValue) === '0' ? '未开单' : '已开单';
},
editRender: {
name: 'select',
options: [
{ label: '未开单', value: '0' },
{ label: '已开单', value: '1' }
]
}
},
{
align: 'center',
field: 'ftdx',
title: '分摊对象',
width: 180,
},
{
align: 'center',
field: 'ftcx',
title: '分摊次序',
width: 150,
},
];
}
以下为保存的相关代码:
/**
* 保存科室性质
* @param row
*/
async function onSave(row: ZHksxzApi.ZHksxz) {
try {
// 创建一个新对象,基于原始行数据
const editRow: any = { ...row };
// 获取表单值
if (!row.id) {
// 新增行的处理方式
// 获取dm和mc的输入框
const inputs = document.querySelectorAll('.vxe-body--row input.vxe-default-input');
if (inputs.length >= 2) {
// 假设第一个输入框是dm,第二个是mc
const dmValue = (inputs[0] as HTMLInputElement).value;
const mcValue = (inputs[1] as HTMLInputElement).value;
if (dmValue) {
editRow.dm = dmValue;
}
if (mcValue) {
editRow.mc = mcValue;
}
} else {
// 尝试获取所有可见的输入元素
const allInputs = Array.from(document.querySelectorAll('input.vxe-default-input'))
.filter(el => {
const rect = el.getBoundingClientRect();
return rect.width > 0 && rect.height > 0;
});
// 如果有两个输入元素,假设第一个是dm,第二个是mc
if (allInputs.length >= 2) {
const dmValue = (allInputs[0] as HTMLInputElement).value;
const mcValue = (allInputs[1] as HTMLInputElement).value;
if (dmValue) {
editRow.dm = dmValue;
}
if (mcValue) {
editRow.mc = mcValue;
}
} else if (allInputs.length === 1) {
// 如果只有一个输入元素,假设它是mc
const value = (allInputs[0] as HTMLInputElement).value;
if (value) {
editRow.mc = value;
}
}
}
// 确保xtxh字段存在
editRow.xtxh = currentSystemValue.value;
// 设置默认值
if (!editRow.zxpb) editRow.zxpb = 0;
if (!editRow.kdpb) editRow.kdpb = 0;
} else {
// 编辑现有行的处理方式
const allInputs = Array.from(document.querySelectorAll('input:not([type="hidden"]), select, textarea'))
.filter(el => {
const rect = el.getBoundingClientRect();
return rect.width > 0 && rect.height > 0;
});
// 遍历所有输入元素
allInputs.forEach((input: Element) => {
const name = input.getAttribute('name');
const value = (input as HTMLInputElement).value;
const field = input.getAttribute('data-field');
// 如果有name属性,使用它来更新数据
if (name) {
editRow[name] = value;
}
// 如果有data-field属性,也使用它来更新数据
if (field && field !== name) {
editRow[field] = value;
}
});
}
// 创建一个干净的数据对象
const cleanData: ZHksxzApi.ZHksxz= {};
Object.keys(editRow).forEach(key => {
if (!key.startsWith('_')) {
cleanData[key] = editRow[key];
}
});
// 确保xtxh字段存在
if (!cleanData.xtxh) {
cleanData.xtxh = currentSystemValue.value;
}
// ============ 新增的转换代码 ============
// 处理ftdx字段:如果是数组则转换为字符串
if (cleanData.ftdx && Array.isArray(cleanData.ftdx)) {
cleanData.ftdx = cleanData.ftdx.join(',');
}
// 准备保存数据
if (process.env.NODE_ENV === 'development') {
console.log('准备保存的数据:', cleanData);
}
// 保存数据
try {
let result;
if (row.id) {
// 编辑现有记录
result = await editZHksxz(cleanData);
message.success('修改成功');
} else {
// 新增记录
result = await addZHksxz(cleanData);
message.success('新增成功');
}
} catch (error: any) {
message.error(error.message || '保存失败');
return false;
}
// 从编辑行中移除
const index = editingRows.value.findIndex(r => r === row);
if (index !== -1) {
editingRows.value.splice(index, 1);
}
// 刷新表格数据
refreshGrid();
return true;
} catch (error: any) {
message.error(error?.message || '保存失败');
return false;
}
}
最新发布