取消报销资产事前批准强制(08-30-reimbursement-assets-prior-approval-correction)
这个提交包含在:
@@ -22,7 +22,6 @@ export type ItemEditorInitialValues = {
|
||||
expenseDate: string;
|
||||
amount: string;
|
||||
description: string;
|
||||
assetPriorApprovalBasis: string;
|
||||
};
|
||||
|
||||
export type ItemEditorSaveData = {
|
||||
@@ -30,7 +29,6 @@ export type ItemEditorSaveData = {
|
||||
expenseDate: string;
|
||||
amount: string;
|
||||
description: string;
|
||||
assetPriorApprovalBasis: string;
|
||||
};
|
||||
|
||||
export interface ReimbursementItemEditorProps {
|
||||
@@ -60,7 +58,6 @@ export function ReimbursementItemEditor({
|
||||
const [expenseDate, setExpenseDate] = useState(initialValues.expenseDate);
|
||||
const [amount, setAmount] = useState(initialValues.amount);
|
||||
const [description, setDescription] = useState(initialValues.description);
|
||||
const [assetPriorApprovalBasis, setAssetPriorApprovalBasis] = useState(initialValues.assetPriorApprovalBasis);
|
||||
|
||||
// Reset internal state when initialValues change (e.g. switching between create/edit)
|
||||
useEffect(() => {
|
||||
@@ -68,11 +65,9 @@ export function ReimbursementItemEditor({
|
||||
setExpenseDate(initialValues.expenseDate);
|
||||
setAmount(initialValues.amount);
|
||||
setDescription(initialValues.description);
|
||||
setAssetPriorApprovalBasis(initialValues.assetPriorApprovalBasis);
|
||||
}, [initialValues.expenseTypeId, initialValues.expenseDate, initialValues.amount, initialValues.description, initialValues.assetPriorApprovalBasis]);
|
||||
}, [initialValues.expenseTypeId, initialValues.expenseDate, initialValues.amount, initialValues.description]);
|
||||
|
||||
const selectedExpenseType = expenseTypes.find((item) => item.id === expenseTypeId) ?? null;
|
||||
const isAssetExpense = selectedExpenseType?.category === "assets";
|
||||
const numericAmount = Number(amount || 0);
|
||||
const shouldWarnOfficeEquipment =
|
||||
shouldShowOfficeElectronicsHint(selectedExpenseType?.code, numericAmount);
|
||||
@@ -102,7 +97,7 @@ export function ReimbursementItemEditor({
|
||||
const hasPositiveAmount = Number.isFinite(numericAmount) && numericAmount > 0;
|
||||
|
||||
const handleSave = () => {
|
||||
onSave({ expenseTypeId, expenseDate, amount, description, assetPriorApprovalBasis });
|
||||
onSave({ expenseTypeId, expenseDate, amount, description });
|
||||
};
|
||||
|
||||
return (
|
||||
@@ -185,28 +180,11 @@ export function ReimbursementItemEditor({
|
||||
) : null}
|
||||
{shouldWarnOfficeEquipment ? (
|
||||
<p className="text-xs text-amber-600">
|
||||
该金额通常应选择办公电子设备并填写事前批准依据。
|
||||
该金额通常应选择办公电子设备。
|
||||
</p>
|
||||
) : null}
|
||||
</div>
|
||||
|
||||
{isAssetExpense ? (
|
||||
<div className="space-y-1 md:col-span-4">
|
||||
<label className="text-xs text-zinc-600" htmlFor="assetPriorApprovalBasis">
|
||||
事前批准依据
|
||||
</label>
|
||||
<Textarea
|
||||
data-testid="reimbursement-item-asset-approval-basis"
|
||||
disabled={isPending}
|
||||
id="assetPriorApprovalBasis"
|
||||
onChange={(event) => setAssetPriorApprovalBasis(event.target.value)}
|
||||
placeholder="填写批准人、批准时间和简短依据"
|
||||
rows={2}
|
||||
value={assetPriorApprovalBasis}
|
||||
/>
|
||||
</div>
|
||||
) : null}
|
||||
|
||||
<div className="space-y-1 md:col-span-4">
|
||||
<label className="text-xs text-zinc-600" htmlFor="itemDescription">
|
||||
说明
|
||||
@@ -230,8 +208,7 @@ export function ReimbursementItemEditor({
|
||||
!expenseTypeId ||
|
||||
!expenseDate ||
|
||||
!amount.trim() ||
|
||||
!hasPositiveAmount ||
|
||||
(isAssetExpense && !assetPriorApprovalBasis.trim())
|
||||
!hasPositiveAmount
|
||||
}
|
||||
onClick={handleSave}
|
||||
type="button"
|
||||
|
||||
在新工单中引用
屏蔽一个用户