diff --git a/ruoyi-ui/src/api/oa/salary.js b/ruoyi-ui/src/api/oa/salary.js
index e5a6200..dabc2be 100644
--- a/ruoyi-ui/src/api/oa/salary.js
+++ b/ruoyi-ui/src/api/oa/salary.js
@@ -29,4 +29,85 @@ export function uploadOssFile(data) {
'Content-Type': 'multipart/form-data'
}
})
+}
+
+export function getCalcHistory({ payTime }) {
+ return request({
+ url: '/oa/salary/list-staff',
+ method: 'get',
+ params: {
+ payTime
+ }
+ })
+}
+
+export function getWorkersCalcHistory({ payTime }) {
+ return request({
+ url: 'oa/salary/list-worker',
+ method: 'get',
+ params: {
+ payTime
+ }
+ })
+}
+
+export function getSalaryItemDetail(salaryId) {
+ return request({
+ url: '/oa/salaryItem/list',
+ method: 'get',
+ params: {
+ salaryId
+ }
+ })
+}
+
+export function deleteSalaryItem(id) {
+ return request({
+ url: `/oa/salaryItem/${id}`,
+ method: 'delete'
+ })
+}
+
+export function createSalaryItem(data) {
+ return request({
+ url: '/oa/salaryItem',
+ method: 'post',
+ data
+ })
+}
+
+/**
+ * 处理日期字符串
+ * @param {*} input
+ * @returns
+ */
+export function convertToDateString(input) {
+ // 验证输入格式
+ if (!/^\d{6}$/.test(input)) {
+ throw new Error("Invalid input format. Expected YYYYMM");
+ }
+
+ const year = input.substring(0, 4);
+ const month = input.substring(4, 6);
+
+ // 验证月份有效性
+ const monthNum = parseInt(month, 10);
+ if (monthNum < 1 || monthNum > 12) {
+ throw new Error("Invalid month value");
+ }
+
+ // 创建日期对象
+ const date = new Date(year, monthNum - 1, 1);
+
+ // 处理无效日期(如2025-02-30)
+ if (isNaN(date.getTime())) {
+ throw new Error("Invalid date combination");
+ }
+
+ // 格式化输出
+ return [
+ date.getFullYear(),
+ (date.getMonth() + 1).toString().padStart(2, "0"),
+ "01"
+ ].join("-");
}
\ No newline at end of file
diff --git a/ruoyi-ui/src/views/oa/peoples/date/components/SalaryForm.vue b/ruoyi-ui/src/views/oa/peoples/date/components/SalaryForm.vue
new file mode 100644
index 0000000..1b5da2f
--- /dev/null
+++ b/ruoyi-ui/src/views/oa/peoples/date/components/SalaryForm.vue
@@ -0,0 +1,72 @@
+
+