feat(contract): 新增合同内容管理功能

- 添加合同内容窗口控制器及相关视图模型
- 实现合同内容基础信息标签页
- 添加金额计算功能
- 完善合同内容相关字段绑定
- 优化合同内容界面布局
This commit is contained in:
2025-10-16 00:09:01 +08:00
parent d2e0dc4555
commit cf0a7e18ea
7 changed files with 445 additions and 32 deletions

View File

@@ -0,0 +1,148 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.DatePicker?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.TabPane?>
<?import javafx.scene.control.Tab?>
<BorderPane fx:id="root" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.ecep.contract.controller.contract.ContractItemWindowController">
<center>
<TabPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minWidth="150.0"
tabClosingPolicy="UNAVAILABLE" tabMaxWidth="100.0" tabMinWidth="40.0">
<tabs>
<Tab fx:id="baseInfoTab" text="基本信息">
<content>
<ScrollPane fitToWidth="true" pannable="true">
<VBox>
<GridPane hgap="10.0" vgap="10.0" VBox.vgrow="ALWAYS">
<columnConstraints>
<ColumnConstraints hgrow="NEVER" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="200.0" />
<ColumnConstraints hgrow="NEVER" minWidth="10.0" prefWidth="100.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="200.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="NEVER" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="NEVER" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="NEVER" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="NEVER" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="NEVER" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="NEVER" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="NEVER" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="NEVER" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="NEVER" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="NEVER" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="NEVER" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="NEVER" />
<RowConstraints minHeight="10.0" prefHeight="80.0" vgrow="ALWAYS" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="NEVER" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="NEVER" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="NEVER" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="NEVER" />
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="NEVER" />
</rowConstraints>
<!-- ID -->
<Label text="ID:" GridPane.rowIndex="0" GridPane.columnIndex="0" />
<Label fx:id="idLabel" text="-" GridPane.rowIndex="0" GridPane.columnIndex="1" />
<!-- 合同内容代码 -->
<Label text="内容代码:" GridPane.rowIndex="1" GridPane.columnIndex="0" />
<TextField fx:id="codeField" GridPane.rowIndex="1" GridPane.columnIndex="1" />
<!-- 合同内容标题 -->
<Label text="内容标题:" GridPane.rowIndex="2" GridPane.columnIndex="0" />
<TextField fx:id="titleField" GridPane.rowIndex="2" GridPane.columnIndex="1" GridPane.columnSpan="3" />
<!-- 规格 -->
<Label text="规格:" GridPane.rowIndex="3" GridPane.columnIndex="0" />
<TextField fx:id="specificationField" GridPane.rowIndex="3" GridPane.columnIndex="1" GridPane.columnSpan="3" />
<!-- 单位 -->
<Label text="单位:" GridPane.rowIndex="4" GridPane.columnIndex="0" />
<TextField fx:id="unitField" GridPane.rowIndex="4" GridPane.columnIndex="1" />
<!-- 存货 -->
<Label text="存货:" GridPane.rowIndex="5" GridPane.columnIndex="0" />
<HBox GridPane.rowIndex="5" GridPane.columnIndex="1" GridPane.columnSpan="3">
<TextField fx:id="inventoryField" editable="false" HBox.hgrow="ALWAYS" />
<Button fx:id="openInventoryBtn" mnemonicParsing="false" text="查看" onAction="#onOpenInventoryAction" />
</HBox>
<!-- 不含税单价 -->
<Label text="不含税单价:" GridPane.rowIndex="6" GridPane.columnIndex="0" />
<TextField fx:id="exclusiveTaxPriceField" GridPane.rowIndex="6" GridPane.columnIndex="1" />
<!-- 税率 -->
<Label text="税率(%):" GridPane.rowIndex="6" GridPane.columnIndex="2" />
<TextField fx:id="taxRateField" GridPane.rowIndex="6" GridPane.columnIndex="3" />
<!-- 含税单价 -->
<Label text="含税单价:" GridPane.rowIndex="7" GridPane.columnIndex="0" />
<TextField fx:id="taxPriceField" editable="false" GridPane.rowIndex="7" GridPane.columnIndex="1" />
<!-- 数量 -->
<Label text="数量:" GridPane.rowIndex="7" GridPane.columnIndex="2" />
<TextField fx:id="quantityField" GridPane.rowIndex="7" GridPane.columnIndex="3" />
<!-- 税额 -->
<Label text="税额:" GridPane.rowIndex="8" GridPane.columnIndex="0" />
<TextField fx:id="taxAmountField" editable="false" GridPane.rowIndex="8" GridPane.columnIndex="1" />
<!-- 不含税金额 -->
<Label text="不含税金额:" GridPane.rowIndex="8" GridPane.columnIndex="2" />
<TextField fx:id="exclusiveTaxAmountField" editable="false" GridPane.rowIndex="8" GridPane.columnIndex="3" />
<!-- 开始日期 -->
<Label text="开始日期:" GridPane.rowIndex="9" GridPane.columnIndex="0" />
<DatePicker fx:id="startDateField" GridPane.rowIndex="9" GridPane.columnIndex="1" />
<!-- 结束日期 -->
<Label text="结束日期:" GridPane.rowIndex="9" GridPane.columnIndex="2" />
<DatePicker fx:id="endDateField" GridPane.rowIndex="9" GridPane.columnIndex="3" />
<!-- 备注 -->
<Label text="备注:" GridPane.rowIndex="10" GridPane.columnIndex="0" />
<TextArea fx:id="remarkField" GridPane.rowIndex="10" GridPane.columnIndex="1" GridPane.columnSpan="3" />
<!-- 引用ID -->
<Label text="引用ID:" GridPane.rowIndex="11" GridPane.columnIndex="0" />
<TextField fx:id="refIdField" GridPane.rowIndex="11" GridPane.columnIndex="1" GridPane.columnSpan="3" />
<!-- 创建信息 -->
<Label text="创建日期:" GridPane.rowIndex="12" GridPane.columnIndex="0" />
<TextField fx:id="createDateLabel" editable="false" text="-" GridPane.rowIndex="12" GridPane.columnIndex="1" />
<Label text="创建人:" GridPane.rowIndex="13" GridPane.columnIndex="0" />
<TextField fx:id="creatorLabel" editable="false" text="-" GridPane.rowIndex="13" GridPane.columnIndex="1" />
<Label text="更新日期:" GridPane.rowIndex="14" GridPane.columnIndex="0" />
<TextField fx:id="updateDateLabel" editable="false" text="-" GridPane.rowIndex="14" GridPane.columnIndex="1" />
<Label text="更新人:" GridPane.rowIndex="15" GridPane.columnIndex="0" />
<TextField fx:id="updaterLabel" editable="false" text="-" GridPane.rowIndex="15" GridPane.columnIndex="1" />
</GridPane>
<HBox alignment="CENTER" spacing="20.0" VBox.vgrow="NEVER">
<Button mnemonicParsing="false" text="计算金额" onAction="#onCalculateAmountsAction" />
</HBox>
<padding>
<Insets bottom="20.0" left="20.0" right="20.0" top="20.0" />
</padding>
</VBox>
</ScrollPane>
</content>
</Tab>
</tabs>
</TabPane>
</center>
</BorderPane>