浏览代码

fix(hr): 考勤申请时长按小时口径提交并同步审批表单展示,版本号升至V1.0.4.51

lihaiting 11 小时之前
父节点
当前提交
78181fa84f

+ 1 - 1
.hbuilderx/launch.json

@@ -27,7 +27,7 @@
             "type" : "uni-app:app-android"
         },
         {
-            "customPlaygroundType" : "device",
+            "customPlaygroundType" : "local",
             "openVueDevtools" : true,
             "playground" : "custom",
             "type" : "uni-app:app-ios"

+ 13 - 4
api/hr/attendanceApply.js

@@ -105,6 +105,15 @@ export function computeDurationMinutes(startDate, startTime, endDate, endTime) {
   return Math.max(MIN_DURATION_MINUTES, Math.floor((end.getTime() - start.getTime()) / 60000));
 }
 
+/**
+ * 时长(小时):接口按时长的小时值接收(如 9,而不是 540 分钟),
+ * 内部仍用 computeDurationMinutes 计算,提交前换算为小时,保留 2 位小数。
+ */
+function computeDurationHours(startDate, startTime, endDate, endTime) {
+  const minutes = computeDurationMinutes(startDate, startTime, endDate, endTime);
+  return Number((minutes / 60).toFixed(2));
+}
+
 /** 拆分接口时间值为 { date, time }(time 精确到分钟) */
 export function splitDateTime(value) {
   const text = String(value || "").replace("T", " ").trim();
@@ -180,7 +189,7 @@ export function buildAttendancePayload(form, type, userRaw, attachmentFileIds) {
         leaveType: LEAVE_TYPE_MAP[form.leaveType] || "OTHER",
         startTime: buildRangeTime(form.startDate, form.startTime || DEFAULT_START_TIME),
         endTime: buildRangeTime(form.endDate, form.endTime || DEFAULT_END_TIME),
-        durationMinutes: computeDurationMinutes(
+        durationMinutes: computeDurationHours(
           form.startDate,
           form.startTime || DEFAULT_START_TIME,
           form.endDate,
@@ -193,7 +202,7 @@ export function buildAttendancePayload(form, type, userRaw, attachmentFileIds) {
         overtimeType: "WORKDAY",
         startTime: buildRangeTime(form.startDate, form.startTime || "18:00"),
         endTime: buildRangeTime(form.endDate, form.endTime || "20:00"),
-        durationMinutes: computeDurationMinutes(
+        durationMinutes: computeDurationHours(
           form.startDate,
           form.startTime || "18:00",
           form.endDate,
@@ -205,7 +214,7 @@ export function buildAttendancePayload(form, type, userRaw, attachmentFileIds) {
       return Object.assign({}, base, {
         startTime: buildRangeTime(form.startDate, form.startTime || DEFAULT_START_TIME),
         endTime: buildRangeTime(form.endDate, form.endTime || DEFAULT_END_TIME),
-        durationMinutes: computeDurationMinutes(
+        durationMinutes: computeDurationHours(
           form.startDate,
           form.startTime || DEFAULT_START_TIME,
           form.endDate,
@@ -218,7 +227,7 @@ export function buildAttendancePayload(form, type, userRaw, attachmentFileIds) {
       return Object.assign({}, base, {
         startTime: buildRangeTime(form.startDate, form.startTime || DEFAULT_START_TIME),
         endTime: buildRangeTime(form.endDate, form.endTime || DEFAULT_END_TIME),
-        durationMinutes: computeDurationMinutes(
+        durationMinutes: computeDurationHours(
           form.startDate,
           form.startTime || DEFAULT_START_TIME,
           form.endDate,

+ 1 - 1
manifest.json

@@ -2,7 +2,7 @@
     "name" : "AiMill工业互联网平台",
     "appid" : "__UNI__45B3907",
     "description" : "",
-    "versionName" : "V1.0.4.50",
+    "versionName" : "V1.0.4.51",
     "versionCode" : "100",
     "transformPx" : false,
     "h5" : {

+ 4 - 7
pages/home/wt/components/hrLeaveApproval/taskForm.vue

@@ -108,13 +108,10 @@
 				return LEAVE_TYPE_LABELS[code] || code;
 			},
 			durationLabel() {
-				const minutes = Number(this.form.durationMinutes);
-				if (!minutes || isNaN(minutes) || minutes <= 0) return '';
-				const hours = Math.floor(minutes / 60);
-				const mins = minutes % 60;
-				if (!hours) return `${mins} 分钟`;
-				if (!mins) return `${hours} 小时`;
-				return `${hours} 小时 ${mins} 分钟`;
+				// durationMinutes 现按小时口径提交/存储(如 2 = 2 小时)
+				const hours = Number(this.form.durationMinutes);
+				if (!hours || isNaN(hours) || hours <= 0) return '';
+				return `${hours} 小时`;
 			},
 			attachmentIds() {
 				const raw = this.form.attachmentFileIds;

+ 4 - 7
pages/home/wt/components/hrOutingApproval/taskForm.vue

@@ -90,13 +90,10 @@
 				return this.form.userName || this.form.applicantName || '';
 			},
 			durationLabel() {
-				const minutes = Number(this.form.durationMinutes);
-				if (!minutes || isNaN(minutes) || minutes <= 0) return '';
-				const hours = Math.floor(minutes / 60);
-				const mins = minutes % 60;
-				if (!hours) return `${mins} 分钟`;
-				if (!mins) return `${hours} 小时`;
-				return `${hours} 小时 ${mins} 分钟`;
+				// durationMinutes 现按小时口径提交/存储(如 2 = 2 小时)
+				const hours = Number(this.form.durationMinutes);
+				if (!hours || isNaN(hours) || hours <= 0) return '';
+				return `${hours} 小时`;
 			},
 			attachmentIds() {
 				const raw = this.form.attachmentFileIds;

+ 4 - 7
pages/home/wt/components/hrOvertimeApproval/taskForm.vue

@@ -102,13 +102,10 @@
 				return OVERTIME_TYPE_LABELS[code] || code;
 			},
 			durationLabel() {
-				const minutes = Number(this.form.durationMinutes);
-				if (!minutes || isNaN(minutes) || minutes <= 0) return '';
-				const hours = Math.floor(minutes / 60);
-				const mins = minutes % 60;
-				if (!hours) return `${mins} 分钟`;
-				if (!mins) return `${hours} 小时`;
-				return `${hours} 小时 ${mins} 分钟`;
+				// durationMinutes 现按小时口径提交/存储(如 2 = 2 小时)
+				const hours = Number(this.form.durationMinutes);
+				if (!hours || isNaN(hours) || hours <= 0) return '';
+				return `${hours} 小时`;
 			},
 			attachmentIds() {
 				const raw = this.form.attachmentFileIds;

+ 4 - 7
pages/home/wt/components/hrTripApproval/taskForm.vue

@@ -90,13 +90,10 @@
 				return this.form.userName || this.form.applicantName || '';
 			},
 			durationLabel() {
-				const minutes = Number(this.form.durationMinutes);
-				if (!minutes || isNaN(minutes) || minutes <= 0) return '';
-				const hours = Math.floor(minutes / 60);
-				const mins = minutes % 60;
-				if (!hours) return `${mins} 分钟`;
-				if (!mins) return `${hours} 小时`;
-				return `${hours} 小时 ${mins} 分钟`;
+				// durationMinutes 现按小时口径提交/存储(如 2 = 2 小时)
+				const hours = Number(this.form.durationMinutes);
+				if (!hours || isNaN(hours) || hours <= 0) return '';
+				return `${hours} 小时`;
 			},
 			attachmentIds() {
 				const raw = this.form.attachmentFileIds;

+ 2 - 1
readme.md

@@ -1,4 +1,5 @@
 证书库密码 aimill666
 证书别名 aimillApp
 证书私钥密码 aimill666
-包名 com.zhongying.aimill
+包名 com.zhongying.aimill
+证书文件路径 aiot-app/aimill.keystore