yanghao 2 недель назад
Родитель
Сommit
230f5cdea3

+ 2 - 2
android/simpleDemo/build.gradle

@@ -10,8 +10,8 @@ android {
         minSdkVersion 21
         // targetSdkVersion 33
         targetSdk 33
-        versionCode 10301
-        versionName "1.3.1"
+        versionCode 10302
+        versionName "1.3.2"
         multiDexEnabled true
         compileOptions {
             sourceCompatibility JavaVersion.VERSION_1_8

+ 18 - 60
package-lock.json

@@ -1,5 +1,5 @@
 {
-	"name": "DeepOil",
+	"name": "pms-app",
 	"lockfileVersion": 2,
 	"requires": true,
 	"packages": {
@@ -20,7 +20,6 @@
 			"version": "7.27.1",
 			"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
 			"integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
-			"peer": true,
 			"engines": {
 				"node": ">=6.9.0"
 			}
@@ -29,7 +28,6 @@
 			"version": "7.27.1",
 			"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
 			"integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
-			"peer": true,
 			"engines": {
 				"node": ">=6.9.0"
 			}
@@ -38,7 +36,6 @@
 			"version": "7.27.2",
 			"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz",
 			"integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==",
-			"peer": true,
 			"dependencies": {
 				"@babel/types": "^7.27.1"
 			},
@@ -53,7 +50,6 @@
 			"version": "7.27.1",
 			"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz",
 			"integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==",
-			"peer": true,
 			"dependencies": {
 				"@babel/helper-string-parser": "^7.27.1",
 				"@babel/helper-validator-identifier": "^7.27.1"
@@ -70,14 +66,12 @@
 		"node_modules/@jridgewell/sourcemap-codec": {
 			"version": "1.5.0",
 			"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
-			"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
-			"peer": true
+			"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="
 		},
 		"node_modules/@vue/compiler-core": {
 			"version": "3.5.14",
 			"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.14.tgz",
 			"integrity": "sha512-k7qMHMbKvoCXIxPhquKQVw3Twid3Kg4s7+oYURxLGRd56LiuHJVrvFKI4fm2AM3c8apqODPfVJGoh8nePbXMRA==",
-			"peer": true,
 			"dependencies": {
 				"@babel/parser": "^7.27.2",
 				"@vue/shared": "3.5.14",
@@ -90,7 +84,6 @@
 			"version": "3.5.14",
 			"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.14.tgz",
 			"integrity": "sha512-1aOCSqxGOea5I80U2hQJvXYpPm/aXo95xL/m/mMhgyPUsKe9jhjwWpziNAw7tYRnbz1I61rd9Mld4W9KmmRoug==",
-			"peer": true,
 			"dependencies": {
 				"@vue/compiler-core": "3.5.14",
 				"@vue/shared": "3.5.14"
@@ -100,7 +93,6 @@
 			"version": "3.5.14",
 			"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.14.tgz",
 			"integrity": "sha512-9T6m/9mMr81Lj58JpzsiSIjBgv2LiVoWjIVa7kuXHICUi8LiDSIotMpPRXYJsXKqyARrzjT24NAwttrMnMaCXA==",
-			"peer": true,
 			"dependencies": {
 				"@babel/parser": "^7.27.2",
 				"@vue/compiler-core": "3.5.14",
@@ -117,7 +109,6 @@
 			"version": "3.5.14",
 			"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.14.tgz",
 			"integrity": "sha512-Y0G7PcBxr1yllnHuS/NxNCSPWnRGH4Ogrp0tsLA5QemDZuJLs99YjAKQ7KqkHE0vCg4QTKlQzXLKCMF7WPSl7Q==",
-			"peer": true,
 			"dependencies": {
 				"@vue/compiler-dom": "3.5.14",
 				"@vue/shared": "3.5.14"
@@ -132,7 +123,6 @@
 			"version": "3.5.14",
 			"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.14.tgz",
 			"integrity": "sha512-7cK1Hp343Fu/SUCCO52vCabjvsYu7ZkOqyYu7bXV9P2yyfjUMUXHZafEbq244sP7gf+EZEz+77QixBTuEqkQQw==",
-			"peer": true,
 			"dependencies": {
 				"@vue/shared": "3.5.14"
 			}
@@ -141,7 +131,6 @@
 			"version": "3.5.14",
 			"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.14.tgz",
 			"integrity": "sha512-w9JWEANwHXNgieAhxPpEpJa+0V5G0hz3NmjAZwlOebtfKyp2hKxKF0+qSh0Xs6/PhfGihuSdqMprMVcQU/E6ag==",
-			"peer": true,
 			"dependencies": {
 				"@vue/reactivity": "3.5.14",
 				"@vue/shared": "3.5.14"
@@ -151,7 +140,6 @@
 			"version": "3.5.14",
 			"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.14.tgz",
 			"integrity": "sha512-lCfR++IakeI35TVR80QgOelsUIdcKjd65rWAMfdSlCYnaEY5t3hYwru7vvcWaqmrK+LpI7ZDDYiGU5V3xjMacw==",
-			"peer": true,
 			"dependencies": {
 				"@vue/reactivity": "3.5.14",
 				"@vue/runtime-core": "3.5.14",
@@ -163,7 +151,6 @@
 			"version": "3.5.14",
 			"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.14.tgz",
 			"integrity": "sha512-Rf/ISLqokIvcySIYnv3tNWq40PLpNLDLSJwwVWzG6MNtyIhfbcrAxo5ZL9nARJhqjZyWWa40oRb2IDuejeuv6w==",
-			"peer": true,
 			"dependencies": {
 				"@vue/compiler-ssr": "3.5.14",
 				"@vue/shared": "3.5.14"
@@ -175,8 +162,7 @@
 		"node_modules/@vue/shared": {
 			"version": "3.5.14",
 			"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.14.tgz",
-			"integrity": "sha512-oXTwNxVfc9EtP1zzXAlSlgARLXNC84frFYkS0HHz0h3E4WZSP9sywqjqzGCP9Y34M8ipNmd380pVgmMuwELDyQ==",
-			"peer": true
+			"integrity": "sha512-oXTwNxVfc9EtP1zzXAlSlgARLXNC84frFYkS0HHz0h3E4WZSP9sywqjqzGCP9Y34M8ipNmd380pVgmMuwELDyQ=="
 		},
 		"node_modules/call-bind-apply-helpers": {
 			"version": "1.0.2",
@@ -214,8 +200,7 @@
 		"node_modules/csstype": {
 			"version": "3.1.3",
 			"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
-			"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
-			"peer": true
+			"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
 		},
 		"node_modules/dayjs": {
 			"version": "1.11.13",
@@ -247,7 +232,6 @@
 			"version": "4.5.0",
 			"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
 			"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
-			"peer": true,
 			"engines": {
 				"node": ">=0.12"
 			},
@@ -285,8 +269,7 @@
 		"node_modules/estree-walker": {
 			"version": "2.0.2",
 			"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
-			"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
-			"peer": true
+			"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
 		},
 		"node_modules/function-bind": {
 			"version": "1.1.2",
@@ -386,7 +369,6 @@
 			"version": "0.30.17",
 			"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz",
 			"integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
-			"peer": true,
 			"dependencies": {
 				"@jridgewell/sourcemap-codec": "^1.5.0"
 			}
@@ -409,7 +391,6 @@
 					"url": "https://github.com/sponsors/ai"
 				}
 			],
-			"peer": true,
 			"bin": {
 				"nanoid": "bin/nanoid.cjs"
 			},
@@ -431,13 +412,13 @@
 		"node_modules/picocolors": {
 			"version": "1.1.1",
 			"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
-			"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
-			"peer": true
+			"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
 		},
 		"node_modules/pinia": {
 			"version": "2.3.1",
 			"resolved": "https://registry.npmjs.org/pinia/-/pinia-2.3.1.tgz",
 			"integrity": "sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==",
+			"peer": true,
 			"dependencies": {
 				"@vue/devtools-api": "^6.6.3",
 				"vue-demi": "^0.14.10"
@@ -516,7 +497,6 @@
 					"url": "https://github.com/sponsors/ai"
 				}
 			],
-			"peer": true,
 			"dependencies": {
 				"nanoid": "^3.3.8",
 				"picocolors": "^1.1.1",
@@ -617,7 +597,6 @@
 			"version": "1.2.1",
 			"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
 			"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
-			"peer": true,
 			"engines": {
 				"node": ">=0.10.0"
 			}
@@ -673,20 +652,17 @@
 		"@babel/helper-string-parser": {
 			"version": "7.27.1",
 			"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
-			"integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
-			"peer": true
+			"integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="
 		},
 		"@babel/helper-validator-identifier": {
 			"version": "7.27.1",
 			"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
-			"integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
-			"peer": true
+			"integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="
 		},
 		"@babel/parser": {
 			"version": "7.27.2",
 			"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz",
 			"integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==",
-			"peer": true,
 			"requires": {
 				"@babel/types": "^7.27.1"
 			}
@@ -695,7 +671,6 @@
 			"version": "7.27.1",
 			"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz",
 			"integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==",
-			"peer": true,
 			"requires": {
 				"@babel/helper-string-parser": "^7.27.1",
 				"@babel/helper-validator-identifier": "^7.27.1"
@@ -709,14 +684,12 @@
 		"@jridgewell/sourcemap-codec": {
 			"version": "1.5.0",
 			"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
-			"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
-			"peer": true
+			"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="
 		},
 		"@vue/compiler-core": {
 			"version": "3.5.14",
 			"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.14.tgz",
 			"integrity": "sha512-k7qMHMbKvoCXIxPhquKQVw3Twid3Kg4s7+oYURxLGRd56LiuHJVrvFKI4fm2AM3c8apqODPfVJGoh8nePbXMRA==",
-			"peer": true,
 			"requires": {
 				"@babel/parser": "^7.27.2",
 				"@vue/shared": "3.5.14",
@@ -729,7 +702,6 @@
 			"version": "3.5.14",
 			"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.14.tgz",
 			"integrity": "sha512-1aOCSqxGOea5I80U2hQJvXYpPm/aXo95xL/m/mMhgyPUsKe9jhjwWpziNAw7tYRnbz1I61rd9Mld4W9KmmRoug==",
-			"peer": true,
 			"requires": {
 				"@vue/compiler-core": "3.5.14",
 				"@vue/shared": "3.5.14"
@@ -739,7 +711,6 @@
 			"version": "3.5.14",
 			"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.14.tgz",
 			"integrity": "sha512-9T6m/9mMr81Lj58JpzsiSIjBgv2LiVoWjIVa7kuXHICUi8LiDSIotMpPRXYJsXKqyARrzjT24NAwttrMnMaCXA==",
-			"peer": true,
 			"requires": {
 				"@babel/parser": "^7.27.2",
 				"@vue/compiler-core": "3.5.14",
@@ -756,7 +727,6 @@
 			"version": "3.5.14",
 			"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.14.tgz",
 			"integrity": "sha512-Y0G7PcBxr1yllnHuS/NxNCSPWnRGH4Ogrp0tsLA5QemDZuJLs99YjAKQ7KqkHE0vCg4QTKlQzXLKCMF7WPSl7Q==",
-			"peer": true,
 			"requires": {
 				"@vue/compiler-dom": "3.5.14",
 				"@vue/shared": "3.5.14"
@@ -771,7 +741,6 @@
 			"version": "3.5.14",
 			"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.14.tgz",
 			"integrity": "sha512-7cK1Hp343Fu/SUCCO52vCabjvsYu7ZkOqyYu7bXV9P2yyfjUMUXHZafEbq244sP7gf+EZEz+77QixBTuEqkQQw==",
-			"peer": true,
 			"requires": {
 				"@vue/shared": "3.5.14"
 			}
@@ -780,7 +749,6 @@
 			"version": "3.5.14",
 			"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.14.tgz",
 			"integrity": "sha512-w9JWEANwHXNgieAhxPpEpJa+0V5G0hz3NmjAZwlOebtfKyp2hKxKF0+qSh0Xs6/PhfGihuSdqMprMVcQU/E6ag==",
-			"peer": true,
 			"requires": {
 				"@vue/reactivity": "3.5.14",
 				"@vue/shared": "3.5.14"
@@ -790,7 +758,6 @@
 			"version": "3.5.14",
 			"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.14.tgz",
 			"integrity": "sha512-lCfR++IakeI35TVR80QgOelsUIdcKjd65rWAMfdSlCYnaEY5t3hYwru7vvcWaqmrK+LpI7ZDDYiGU5V3xjMacw==",
-			"peer": true,
 			"requires": {
 				"@vue/reactivity": "3.5.14",
 				"@vue/runtime-core": "3.5.14",
@@ -802,7 +769,6 @@
 			"version": "3.5.14",
 			"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.14.tgz",
 			"integrity": "sha512-Rf/ISLqokIvcySIYnv3tNWq40PLpNLDLSJwwVWzG6MNtyIhfbcrAxo5ZL9nARJhqjZyWWa40oRb2IDuejeuv6w==",
-			"peer": true,
 			"requires": {
 				"@vue/compiler-ssr": "3.5.14",
 				"@vue/shared": "3.5.14"
@@ -811,8 +777,7 @@
 		"@vue/shared": {
 			"version": "3.5.14",
 			"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.14.tgz",
-			"integrity": "sha512-oXTwNxVfc9EtP1zzXAlSlgARLXNC84frFYkS0HHz0h3E4WZSP9sywqjqzGCP9Y34M8ipNmd380pVgmMuwELDyQ==",
-			"peer": true
+			"integrity": "sha512-oXTwNxVfc9EtP1zzXAlSlgARLXNC84frFYkS0HHz0h3E4WZSP9sywqjqzGCP9Y34M8ipNmd380pVgmMuwELDyQ=="
 		},
 		"call-bind-apply-helpers": {
 			"version": "1.0.2",
@@ -840,8 +805,7 @@
 		"csstype": {
 			"version": "3.1.3",
 			"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
-			"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
-			"peer": true
+			"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
 		},
 		"dayjs": {
 			"version": "1.11.13",
@@ -869,8 +833,7 @@
 		"entities": {
 			"version": "4.5.0",
 			"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
-			"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
-			"peer": true
+			"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="
 		},
 		"es-define-property": {
 			"version": "1.0.1",
@@ -893,8 +856,7 @@
 		"estree-walker": {
 			"version": "2.0.2",
 			"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
-			"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
-			"peer": true
+			"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
 		},
 		"function-bind": {
 			"version": "1.1.2",
@@ -967,7 +929,6 @@
 			"version": "0.30.17",
 			"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz",
 			"integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
-			"peer": true,
 			"requires": {
 				"@jridgewell/sourcemap-codec": "^1.5.0"
 			}
@@ -980,8 +941,7 @@
 		"nanoid": {
 			"version": "3.3.11",
 			"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
-			"integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
-			"peer": true
+			"integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="
 		},
 		"object-inspect": {
 			"version": "1.13.4",
@@ -991,13 +951,13 @@
 		"picocolors": {
 			"version": "1.1.1",
 			"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
-			"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
-			"peer": true
+			"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
 		},
 		"pinia": {
 			"version": "2.3.1",
 			"resolved": "https://registry.npmjs.org/pinia/-/pinia-2.3.1.tgz",
 			"integrity": "sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==",
+			"peer": true,
 			"requires": {
 				"@vue/devtools-api": "^6.6.3",
 				"vue-demi": "^0.14.10"
@@ -1023,7 +983,6 @@
 			"version": "8.5.3",
 			"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz",
 			"integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==",
-			"peer": true,
 			"requires": {
 				"nanoid": "^3.3.8",
 				"picocolors": "^1.1.1",
@@ -1090,8 +1049,7 @@
 		"source-map-js": {
 			"version": "1.2.1",
 			"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
-			"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
-			"peer": true
+			"integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="
 		},
 		"vue": {
 			"version": "3.5.14",

+ 79 - 4
pages/recordFilling/detail.vue

@@ -34,7 +34,22 @@
             <span>{{ params.createTime }}</span>
           </view>
         </view>
-        <view class="item-content flex-row align-center">
+        <view
+          v-if="deptName === 'ry'"
+          class="item-content flex-row align-center">
+          <view class="item-title full-cell flex-row align-center">
+            <span class="item-title-width">井号:</span>
+            <uni-data-select
+              :localdata="taskOptions"
+              style="text-align: right"
+              :styles="{ disableColor: '#fff' }"
+              :clear="false"
+              :disabled="!isView"
+              :placeholder="$t('operation.PleaseSelect')"
+              v-model="taskId"></uni-data-select>
+          </view>
+        </view>
+        <view v-else class="item-content flex-row align-center">
           <view class="item-title full-cell flex-row align-center">
             <span class="item-title-width">井号:</span>
             <span>{{ params.wellName || "" }}</span>
@@ -209,8 +224,19 @@
               </button>
             </uni-forms-item>
             <template v-for="(detail, index) in reportDetails" :key="index">
-              <uni-forms-item label="日期" style="margin-top: 32px">
-                <span>{{ params.createTime }}</span>
+              <uv-divider v-if="index !== 0" class="divider"></uv-divider>
+              <uni-forms-item
+                label="日期"
+                required
+                :name="['reportDetails', index, 'reportDate']"
+                :rules="[{ required: true, errorMessage: '请选择日期' }]">
+                <uni-datetime-picker
+                  class="datetime-picker"
+                  type="date"
+                  returnType="timestamp"
+                  v-model="detail.reportDate"
+                  :border="false"
+                  :disabled="!isView" />
               </uni-forms-item>
               <uni-forms-item :label="`${$t('ruiDu.timeNode')}:`" required>
                 <view
@@ -388,6 +414,9 @@ const addProductionStatusRow = () => {
     reportDetails.value = [];
   }
   reportDetails.value.push({
+    reportDate: params.createTime
+      ? dayjs(params.createTime).valueOf()
+      : dayjs().valueOf(),
     startTime: "08:00",
     endTime: "08:00",
     duration: 0,
@@ -406,6 +435,9 @@ const removeReportDetailRow = index => {
   reportDetails.value.splice(index, 1);
 };
 
+const taskId = ref(undefined);
+const taskOptions = ref([]);
+
 const inputCurrentDepth = useDebounceFn(function inputCurrentDepth(
   list,
   val,
@@ -575,6 +607,17 @@ onLoad(async option => {
   if (params.value?.orderId) {
     const detail = (await getRecordFillingDetail(params.value.orderId)).data;
 
+    const daily = detail ?? {
+      wellNamePair: {},
+    };
+
+    taskOptions.value = Object.keys(daily.wellNamePair).map(key => ({
+      text: daily.wellNamePair[key],
+      value: Number(key),
+    }));
+
+    taskId.value = taskOptions.value[0]?.value || undefined;
+
     const data = await getDeptName(detail.deptId);
     console.log("data>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", data);
     deptName.value = data.data;
@@ -981,11 +1024,13 @@ const queryList = (pageNo, pageSize) => {
 
       // 如果加载的数据中包含生产日报,应用累加值
       const hasReport = resList.some(item => item.deviceName === "生产日报");
+
       if (hasReport) {
         applyAccumulatedToReport();
 
         reportDetailsGet(params.value.orderId).then(res => {
           reportDetails.value = (res.data ?? []).map(item => ({
+            reportDate: item.reportDate ?? dayjs(params.createTime).valueOf(),
             startTime: formatT(item.startTime),
             endTime: formatT(item.endTime),
             duration: item.duration,
@@ -994,6 +1039,8 @@ const queryList = (pageNo, pageSize) => {
             constructionDetail: item.constructionDetail,
           }));
 
+          console.log("🚀 ~ reportDetails.value:", reportDetails.value);
+
           if (!reportDetails.value.length) {
             addProductionStatusRow();
           }
@@ -1605,7 +1652,10 @@ const submitData = async () => {
     // 3. 提交所有填写记录
     const reqData = {
       createReqVO: submitList,
-      reportDetails: reportDetails.value,
+      reportDetails: reportDetails.value.map(item => ({
+        ...item,
+        taskId: taskId.value,
+      })),
     };
 
     const res = await recordFillingDetailInsertDataList(reqData);
@@ -1881,4 +1931,29 @@ const submitData = async () => {
 :deep(.uni-easyinput__content-textarea) {
   margin: 0 !important;
 }
+
+.divider {
+  margin: 0;
+  transform: translateY(-2px);
+  :deep(.uv-line) {
+    border-width: 2px !important;
+    border-color: rgb(41, 121, 255) !important;
+  }
+}
+
+:deep(.datetime-picker) {
+  .uniui-calendar {
+    &::before {
+      display: none;
+    }
+  }
+
+  .uni-date-editor--x__disabled {
+    opacity: 1 !important;
+  }
+
+  .uni-date__x-input {
+    color: #333 !important;
+  }
+}
 </style>

+ 128 - 108
pages/ruiDu/approval.vue

@@ -1,106 +1,111 @@
 <script setup>
-  import { onLoad } from '@dcloudio/uni-app';
-  import { ref, getCurrentInstance } from 'vue';
-  // -------------------------- 引入api接口 start--------------------------
-  import { getRuiDuReportDetail, approveRdDailyReport } from '@/api/ruiDu.js';
-  // -------------------------- 引入api接口 end--------------------------
-  // --------------------------引入组件----------------------------------
-  import reportInfo from './compontents/report-info.vue';
-  import reportForm from './compontents/report-form.vue';
-  // --------------------------引用全局变量$t-------------------------------
-  const { appContext } = getCurrentInstance();
-  const t = appContext.config.globalProperties.$t;
-  // ----------------------------选项卡----------------------------------
-  // 选项卡标题
-  const tabTitles = ref([t('ruiDu.taskInfo'), t('ruiDu.reportInfo')]);
-  const currentTab = ref(0);
-  const styleType = ref('text');
-  const activeColor = ref('#004098');
-  const onClickTabItem = e => {
-    currentTab.value = e.currentIndex;
-  };
-  // --------------------------页面变量----------------------------------
-  // 报告ID
-  const reportId = ref('');
-  // 报告详情数据
-  const detailData = ref({});
-  // 表单组件ref
-  const reportFormEditRef = ref(null);
-  // --------------------------生命周期函数----------------------------------
-  onLoad(option => {
-    // 页面加载
-    reportId.value = option.id; // 获取页面参数
-    // 获取日报详情
-    getReportDetail();
-  });
-  // -------------------------- 页面方法 --------------------------
+import { onLoad } from "@dcloudio/uni-app";
+import { ref, getCurrentInstance } from "vue";
+// -------------------------- 引入api接口 start--------------------------
+import { getRuiDuReportDetail, approveRdDailyReport } from "@/api/ruiDu.js";
+// -------------------------- 引入api接口 end--------------------------
+// --------------------------引入组件----------------------------------
+import reportInfo from "./compontents/report-info.vue";
+import reportForm from "./compontents/report-form.vue";
+// --------------------------引用全局变量$t-------------------------------
+const { appContext } = getCurrentInstance();
+const t = appContext.config.globalProperties.$t;
+// ----------------------------选项卡----------------------------------
+// 选项卡标题
+const tabTitles = ref([t("ruiDu.taskInfo"), t("ruiDu.reportInfo")]);
+const currentTab = ref(0);
+const styleType = ref("text");
+const activeColor = ref("#004098");
+const onClickTabItem = e => {
+  currentTab.value = e.currentIndex;
+};
+// --------------------------页面变量----------------------------------
+// 报告ID
+const reportId = ref("");
+// 报告详情数据
+const detailData = ref({});
+// 表单组件ref
+const reportFormEditRef = ref(null);
+// --------------------------生命周期函数----------------------------------
+onLoad(option => {
+  // 页面加载
+  reportId.value = option.id; // 获取页面参数
   // 获取日报详情
-  const getReportDetail = () => {
-    getRuiDuReportDetail({ id: reportId.value })
-      .then(res => {
-        if (res.code === 0) {
-          detailData.value = Object.assign(detailData.value, res.data || {});
-          console.log('🚀 ~ getReportDetail ~ detailData.value:', detailData.value);
-        }
-      })
-      .catch(res => {});
-  };
+  getReportDetail();
+});
+// -------------------------- 页面方法 --------------------------
+// 获取日报详情
+const getReportDetail = () => {
+  getRuiDuReportDetail({ id: reportId.value })
+    .then(res => {
+      if (res.code === 0) {
+        detailData.value = Object.assign(detailData.value, res.data || {});
+        console.log(
+          "🚀 ~ getReportDetail ~ detailData.value:",
+          detailData.value
+        );
+      }
+    })
+    .catch(res => {});
+};
 
-  const infoRef = ref(null);
+const infoRef = ref(null);
 
-  const loading = ref(false);
+const loading = ref(false);
 
-  const handleApproval = async type => {
-    loading.value = true;
+const handleApproval = async type => {
+  loading.value = true;
 
-    try {
-      const data = {
-        attachments: detailData.value.attachments || [],
-        opinion: infoRef.value.approvalOpinion,
-        auditStatus: type === 'pass' ? 20 : 30,
-        companyId: detailData.value.companyId,
-        costCenter: detailData.value.costCenter || '',
-        dynamicFields: detailData.value.dynamicFields || {},
-        deptId: detailData.value.deptId,
-        deviceIds: detailData.value.deviceIds,
-        startTime: `${detailData.value.startTime[0].toString().padStart(2, '0')}:${detailData.value.startTime[1]
-          .toString()
-          .padStart(2, '0')}`,
-        endTime: `${detailData.value.endTime[0].toString().padStart(2, '0')}:${detailData.value.endTime[1]
-          .toString()
-          .padStart(2, '0')}`,
-        externalRental: detailData.value.externalRental,
-        faultDowntime: detailData.value.faultDowntime || '',
-        malfunction: detailData.value.malfunction,
-        nextPlan: detailData.value.nextPlan,
-        id: detailData.value.id,
-        ...(detailData.value.platformId ? { platformId: detailData.value.platformId } : {}),
-        platformWell: detailData.value.platformWell,
-        productionStatus: detailData.value.productionStatus,
-        projectDepartment: detailData.value.projectDepartment || '',
-        rdStatus: detailData.value.rdStatus,
-        techniqueIds: detailData.value.techniqueIds,
-        taskId: detailData.value.taskId,
-        timeRange: ['1970-01-01T00:00:00.008Z', '1970-01-01T00:00:00.008Z'],
-      };
+  try {
+    const data = {
+      attachments: detailData.value.attachments || [],
+      opinion: infoRef.value.approvalOpinion,
+      auditStatus: type === "pass" ? 20 : 30,
+      companyId: detailData.value.companyId,
+      costCenter: detailData.value.costCenter || "",
+      dynamicFields: detailData.value.dynamicFields || {},
+      deptId: detailData.value.deptId,
+      deviceIds: detailData.value.deviceIds,
+      startTime: `${detailData.value.startTime[0].toString().padStart(2, "0")}:${detailData.value.startTime[1]
+        .toString()
+        .padStart(2, "0")}`,
+      endTime: `${detailData.value.endTime[0].toString().padStart(2, "0")}:${detailData.value.endTime[1]
+        .toString()
+        .padStart(2, "0")}`,
+      externalRental: detailData.value.externalRental,
+      faultDowntime: detailData.value.faultDowntime || "",
+      malfunction: detailData.value.malfunction,
+      nextPlan: detailData.value.nextPlan,
+      id: detailData.value.id,
+      ...(detailData.value.platformId
+        ? { platformId: detailData.value.platformId }
+        : {}),
+      platformWell: detailData.value.platformWell,
+      productionStatus: detailData.value.productionStatus,
+      projectDepartment: detailData.value.projectDepartment || "",
+      rdStatus: detailData.value.rdStatus,
+      techniqueIds: detailData.value.techniqueIds,
+      taskId: detailData.value.taskId,
+      timeRange: ["1970-01-01T00:00:00.008Z", "1970-01-01T00:00:00.008Z"],
+    };
 
-      await approveRdDailyReport(data);
+    await approveRdDailyReport(data);
 
-      uni.showToast({
-        title: type === 'pass' ? '审批通过' : '审批驳回',
-        icon: 'success',
-      });
+    uni.showToast({
+      title: type === "pass" ? "审批通过" : "审批驳回",
+      icon: "success",
+    });
 
-      uni.reLaunch({ url: '/pages/home/index' });
-    } catch (error) {
-      console.log('🚀 ~ handleApproval ~ error:', error);
-      uni.showToast({ title: t('operation.failed'), icon: 'none' });
-    } finally {
-      loading.value = false;
-    }
-  };
+    uni.reLaunch({ url: "/pages/home/index" });
+  } catch (error) {
+    console.log("🚀 ~ handleApproval ~ error:", error);
+    uni.showToast({ title: t("operation.failed"), icon: "none" });
+  } finally {
+    loading.value = false;
+  }
+};
 
-  // -------------------------- 页面方法 end --------------------------
+// -------------------------- 页面方法 end --------------------------
 </script>
 
 <template>
@@ -125,16 +130,31 @@
       </view>
       <!-- 保养项列表 -->
       <view class="work-order-bom-list" v-show="currentTab === 1">
-        <report-form ref="reportFormEditRef" :report-id="reportId" :report-data="detailData" :form-disable="true" />
+        <report-form
+          ref="reportFormEditRef"
+          :report-id="reportId"
+          :report-data="detailData"
+          :form-disable="true"
+          type="approval" />
       </view>
     </scroll-view>
 
     <view class="segmented-footer" v-if="detailData.auditStatus === 10">
       <view class="footer-btn">
-        <button :disabled="loading" :loading="loading" class="mini-btn" type="primary" @click="handleApproval('pass')">
+        <button
+          :disabled="loading"
+          :loading="loading"
+          class="mini-btn"
+          type="primary"
+          @click="handleApproval('pass')">
           审批通过
         </button>
-        <button :disabled="loading" :loading="loading" class="mini-btn" type="warn" @click="handleApproval('reject')">
+        <button
+          :disabled="loading"
+          :loading="loading"
+          class="mini-btn"
+          type="warn"
+          @click="handleApproval('reject')">
           审批驳回
         </button>
       </view>
@@ -143,20 +163,20 @@
 </template>
 
 <style lang="scss" scoped>
-  @import '@/style/work-order-segmented.scss';
-  .page {
-    padding-bottom: 0;
-  }
+@import "@/style/work-order-segmented.scss";
+.page {
+  padding-bottom: 0;
+}
 
-  .footer-btn {
-    display: flex;
-    justify-content: flex-end;
-    padding: 0 32px;
+.footer-btn {
+  display: flex;
+  justify-content: flex-end;
+  padding: 0 32px;
 
-    gap: 0 32px;
+  gap: 0 32px;
 
-    & > uni-button {
-      margin: 0;
-    }
+  & > uni-button {
+    margin: 0;
   }
+}
 </style>

+ 33 - 13
pages/ruiDu/compontents/report-form.vue

@@ -95,6 +95,10 @@ const props = defineProps({
     type: Boolean,
     default: false, // 是否禁用表单
   },
+  type: {
+    type: String,
+    default: "edit",
+  },
 });
 
 const isRequired = computed(() => {
@@ -176,14 +180,6 @@ const formDataBaseRules = reactive({
       },
     ],
   },
-  constructionBrief: {
-    rules: [
-      {
-        required: true,
-        errorMessage: `请输入当日施工简报`,
-      },
-    ],
-  },
 });
 
 function debounce(func, delay) {
@@ -207,7 +203,15 @@ const handleInputRaw = (val, id, field) => {
 const onInputChange = debounce(handleInputRaw, 500);
 
 const validate = async () => {
-  return await reportFormRef.value.validate();
+  if (istime.value === "true") {
+    return await reportFormRef.value.validateField([
+      "constructionBrief",
+      ...form.platformIds.flatMap(pid => [
+        ...NON_PROD_FIELDS.map(item => `${pid}.${item.key}`),
+        `${pid}.otherNptReason`,
+      ]),
+    ]);
+  } else return await reportFormRef.value.validate();
 };
 
 const submitForm = async () => {
@@ -483,6 +487,8 @@ const formDataFormat = () => {
     };
   }
 
+  form.constructionBrief = props.reportData.constructionBrief || ""; // 施工简介
+
   form.reportDetails = (props.reportData.reportDetails || []).map(item => ({
     duration: item.duration || 0,
     constructionDetail: item.constructionDetail || "",
@@ -1303,14 +1309,18 @@ watch(
             :maxlength="1000" />
         </uni-forms-item>
         <uni-forms-item
-          v-if="istime === 'true'"
+          v-if="type !== 'edit' || istime === 'true'"
           class="form-item"
           label="当日施工简报"
           required
-          name="constructionBrief">
+          name="constructionBrief"
+          :rules="[
+            { required: istime === 'true', errorMessage: '请输入当日施工简报' },
+          ]">
           <uni-easyinput
             class="digit-item"
             type="textarea"
+            :autoHeight="true"
             :inputBorder="false"
             :clearable="true"
             :styles="{ disableColor: '#fff' }"
@@ -1345,8 +1355,8 @@ watch(
                   type="primary"
                   size="mini"
                   class="file-picker-btn"
-                  >删除文件</button
-                >
+                  >删除文件
+                </button>
               </view>
             </view>
           </view>
@@ -1381,6 +1391,7 @@ watch(
         </div>
 
         <template v-for="(item, index) in form.reportDetails" :key="index">
+          <uv-divider v-if="index !== 0" class="divider"></uv-divider>
           <uni-forms-item class="form-item" label="日期">
             <uni-easyinput
               class="digit-item"
@@ -1871,4 +1882,13 @@ watch(
   margin-left: auto;
   float: right;
 }
+
+.divider {
+  margin: 0;
+  transform: translateY(-1px);
+  :deep(.uv-line) {
+    border-width: 2px !important;
+    border-color: rgb(41, 121, 255) !important;
+  }
+}
 </style>

+ 14 - 21
pages/ruiDu/detail.vue

@@ -6,8 +6,7 @@
         :values="tabTitles"
         :style-type="styleType"
         :active-color="activeColor"
-        @clickItem="onClickTabItem"
-      />
+        @clickItem="onClickTabItem" />
     </view>
     <scroll-view scroll-y="true" class="segmented-content">
       <!-- 工单信息 -->
@@ -16,23 +15,19 @@
       </view>
       <!-- 保养项列表 -->
       <view class="work-order-bom-list" v-show="currentTab === 1">
-        <report-form ref="reportFormEditRef" :report-id="reportId" :report-data="detailData" :form-disable="true" />
+        <report-form
+          ref="reportFormEditRef"
+          :report-id="reportId"
+          :report-data="detailData"
+          :form-disable="true"
+          type="detail" />
       </view>
     </scroll-view>
   </view>
 </template>
 <script setup>
-import { onLoad, onReady, onBackPress } from "@dcloudio/uni-app";
-import {
-  reactive,
-  ref,
-  onMounted,
-  onBeforeUnmount,
-  nextTick,
-  getCurrentInstance,
-  watch,
-} from "vue";
-import dayjs from "dayjs";
+import { onLoad } from "@dcloudio/uni-app";
+import { ref, getCurrentInstance } from "vue";
 // -------------------------- 引入api接口 start--------------------------
 import { getRuiDuReportDetail } from "@/api/ruiDu.js";
 // -------------------------- 引入api接口 end--------------------------
@@ -48,7 +43,7 @@ const tabTitles = ref([t("ruiDu.taskInfo"), t("ruiDu.reportInfo")]);
 const currentTab = ref(0);
 const styleType = ref("text");
 const activeColor = ref("#004098");
-const onClickTabItem = (e) => {
+const onClickTabItem = e => {
   currentTab.value = e.currentIndex;
 };
 // --------------------------页面变量----------------------------------
@@ -59,7 +54,7 @@ const detailData = ref({});
 // 表单组件ref
 const reportFormEditRef = ref(null);
 // --------------------------生命周期函数----------------------------------
-onLoad((option) => {
+onLoad(option => {
   // 页面加载
   reportId.value = option.id; // 获取页面参数
   // 获取日报详情
@@ -69,7 +64,7 @@ onLoad((option) => {
 // 获取日报详情
 const getReportDetail = () => {
   getRuiDuReportDetail({ id: reportId.value })
-    .then((res) => {
+    .then(res => {
       if (res.code === 0) {
         detailData.value = Object.assign(detailData.value, res.data || {});
         console.log(
@@ -78,11 +73,9 @@ const getReportDetail = () => {
         );
       }
     })
-    .catch((res) => {});
+    .catch(res => {});
 };
 
-
-
 // -------------------------- 页面方法 end --------------------------
 </script>
 
@@ -91,7 +84,7 @@ const getReportDetail = () => {
 .page {
   padding-bottom: 0;
 }
-.segmented-content{
+.segmented-content {
   height: calc(100% - 45px - 20px);
 }
 </style>

+ 59 - 56
pages/ruiDu/edit.vue

@@ -19,7 +19,8 @@
           ref="reportFormEditRef"
           :report-id="reportId"
           :report-data="detailData"
-          :form-disable="detailData.status !== 0" />
+          :form-disable="detailData.status !== 0"
+          type="edit" />
       </view>
       <!-- <view class="work-order-bom-list" v-if="currentTab === 2">
         <report-form-copy ref="reportFormEditRef" :report-id="reportId" :report-data="detailData" />
@@ -34,8 +35,10 @@
               class="mini-btn"
               type="primary"
               @click="save"
-              :disabled="detailData.status !== 0 && detailData.auditStatus !== 20">
-              {{ t('operation.save') }}
+              :disabled="
+                detailData.status !== 0 && detailData.auditStatus !== 20
+              ">
+              {{ t("operation.save") }}
             </button>
           </view>
         </uni-col>
@@ -44,62 +47,62 @@
   </view>
 </template>
 <script setup>
-  import { onLoad } from '@dcloudio/uni-app';
-  import { ref, getCurrentInstance } from 'vue';
-  // -------------------------- 引入api接口 start--------------------------
-  import { getRuiDuReportDetail } from '@/api/ruiDu.js';
-  // -------------------------- 引入api接口 end--------------------------
-  // --------------------------引入组件----------------------------------
-  import reportInfo from './compontents/report-info.vue';
-  import reportForm from './compontents/report-form.vue';
-  // --------------------------引用全局变量$t-------------------------------
-  const { appContext } = getCurrentInstance();
-  const t = appContext.config.globalProperties.$t;
-  // ----------------------------选项卡----------------------------------
-  // 选项卡标题
-  const tabTitles = ref([t('ruiDu.taskInfo'), t('ruiDu.reportInfo')]);
-  const currentTab = ref(0);
-  const styleType = ref('text');
-  const activeColor = ref('#004098');
-  const onClickTabItem = e => {
-    currentTab.value = e.currentIndex;
-  };
-  // --------------------------页面变量----------------------------------
-  // 报告ID
-  const reportId = ref('');
-  // 报告详情数据
-  const detailData = ref({});
-  // 表单组件ref
-  const reportFormEditRef = ref(null);
-  // --------------------------生命周期函数----------------------------------
-  onLoad(option => {
-    // 页面加载
-    reportId.value = option.id; // 获取页面参数
-    // 获取日报详情
-    getReportDetail();
-  });
-  // -------------------------- 页面方法 --------------------------
+import { onLoad } from "@dcloudio/uni-app";
+import { ref, getCurrentInstance } from "vue";
+// -------------------------- 引入api接口 start--------------------------
+import { getRuiDuReportDetail } from "@/api/ruiDu.js";
+// -------------------------- 引入api接口 end--------------------------
+// --------------------------引入组件----------------------------------
+import reportInfo from "./compontents/report-info.vue";
+import reportForm from "./compontents/report-form.vue";
+// --------------------------引用全局变量$t-------------------------------
+const { appContext } = getCurrentInstance();
+const t = appContext.config.globalProperties.$t;
+// ----------------------------选项卡----------------------------------
+// 选项卡标题
+const tabTitles = ref([t("ruiDu.taskInfo"), t("ruiDu.reportInfo")]);
+const currentTab = ref(0);
+const styleType = ref("text");
+const activeColor = ref("#004098");
+const onClickTabItem = e => {
+  currentTab.value = e.currentIndex;
+};
+// --------------------------页面变量----------------------------------
+// 报告ID
+const reportId = ref("");
+// 报告详情数据
+const detailData = ref({});
+// 表单组件ref
+const reportFormEditRef = ref(null);
+// --------------------------生命周期函数----------------------------------
+onLoad(option => {
+  // 页面加载
+  reportId.value = option.id; // 获取页面参数
   // 获取日报详情
-  const getReportDetail = () => {
-    getRuiDuReportDetail({ id: reportId.value })
-      .then(res => {
-        if (res.code === 0) {
-          detailData.value = Object.assign(detailData.value, res.data || {});
-        }
-      })
-      .catch(res => {});
-  };
-  // 保存
-  const save = () => {
-    reportFormEditRef.value.submitForm();
-  };
+  getReportDetail();
+});
+// -------------------------- 页面方法 --------------------------
+// 获取日报详情
+const getReportDetail = () => {
+  getRuiDuReportDetail({ id: reportId.value })
+    .then(res => {
+      if (res.code === 0) {
+        detailData.value = Object.assign(detailData.value, res.data || {});
+      }
+    })
+    .catch(res => {});
+};
+// 保存
+const save = () => {
+  reportFormEditRef.value.submitForm();
+};
 
-  // -------------------------- 页面方法 end --------------------------
+// -------------------------- 页面方法 end --------------------------
 </script>
 
 <style lang="scss" scoped>
-  @import '@/style/work-order-segmented.scss';
-  .page {
-    padding-bottom: 0;
-  }
+@import "@/style/work-order-segmented.scss";
+.page {
+  padding-bottom: 0;
+}
 </style>

+ 47 - 8
pages/ruiying/components/form.vue

@@ -115,6 +115,7 @@ async function loadDetail(id) {
     });
 
     form.value.reportDetails = form.value.reportDetails.map(item => ({
+      reportDate: item.reportDate || form.value.createTime,
       duration: item.duration || 0,
       constructionDetail: item.constructionDetail || "",
       currentDepth: item.currentDepth || 0,
@@ -149,6 +150,7 @@ const addReportDetailRow = () => {
     form.value.reportDetails = [];
   }
   form.value.reportDetails.push({
+    reportDate: form.value.createTime ?? dayjs().valueOf(),
     startTime: "08:00",
     endTime: "08:00",
     duration: 0,
@@ -268,7 +270,12 @@ const rules = reactive({
     ],
   },
   constructionBrief: {
-    rules: [{ required: true, errorMessage: `请输入当日施工简报` }],
+    rules: [
+      {
+        required: props.type === "approval",
+        errorMessage: `请输入当日施工简报`,
+      },
+    ],
   },
 });
 
@@ -489,15 +496,14 @@ const inputCurrentDepth = useDebounceFn(function inputCurrentDepth(val, index) {
           :maxlength="1000" />
       </uni-forms-item> -->
       <uni-forms-item
-        v-if="props.type === 'approval' || props.type === 'approval-detail'"
         label="当日施工简报"
-        required
+        :required="type === 'approval'"
         name="constructionBrief">
         <uni-easyinput
           type="textarea"
           autoHeight
           v-bind="defaultProps"
-          :disabled="disabled('approval')"
+          :disabled="type !== 'approval'"
           v-model="form.constructionBrief"
           :maxlength="2000" />
       </uni-forms-item>
@@ -522,10 +528,19 @@ const inputCurrentDepth = useDebounceFn(function inputCurrentDepth(val, index) {
         </button>
       </uni-forms-item>
       <template v-for="(item, index) in form.reportDetails" :key="index">
-        <uni-forms-item label="日期" style="margin-top: 32px">
-          <span class="readOnly">{{
-            dayjs(form.createTime).format("YYYY-MM-DD")
-          }}</span>
+        <uv-divider v-if="index !== 0" class="divider"></uv-divider>
+        <uni-forms-item
+          label="日期"
+          required
+          :name="['reportDetails', index, 'reportDate']"
+          :rules="[{ required: true, errorMessage: '请选择日期' }]">
+          <uni-datetime-picker
+            class="datetime-picker"
+            type="date"
+            returnType="timestamp"
+            v-model="item.reportDate"
+            :border="false"
+            :disabled="disabled('edit')" />
         </uni-forms-item>
         <uni-forms-item :label="`${$t('ruiDu.timeNode')}:`" required>
           <view
@@ -831,4 +846,28 @@ const inputCurrentDepth = useDebounceFn(function inputCurrentDepth(val, index) {
   align-items: center;
   justify-content: end;
 }
+.divider {
+  margin: 0;
+  transform: translateY(-7px);
+  :deep(.uv-line) {
+    border-width: 2px !important;
+    border-color: rgb(41, 121, 255) !important;
+  }
+}
+
+:deep(.datetime-picker) {
+  .uniui-calendar {
+    &::before {
+      display: none;
+    }
+  }
+
+  .uni-date-editor--x__disabled {
+    opacity: 1 !important;
+  }
+
+  .uni-date__x-input {
+    color: #333 !important;
+  }
+}
 </style>

+ 32 - 8
pages/ruiyingx/components/form.vue

@@ -109,6 +109,7 @@ async function loadDetail(id) {
     });
 
     form.value.reportDetails = form.value.reportDetails.map(item => ({
+      reportDate: item.reportDate || form.value.createTime,
       duration: item.duration || 0,
       constructionDetail: item.constructionDetail || "",
       currentOperation: item.currentOperation || "",
@@ -142,6 +143,7 @@ const addReportDetailRow = () => {
     form.value.reportDetails = [];
   }
   form.value.reportDetails.push({
+    reportDate: form.value.createTime ?? dayjs().valueOf(),
     startTime: "08:00",
     endTime: "08:00",
     duration: 0,
@@ -279,7 +281,12 @@ const rules = reactive({
     ],
   },
   constructionBrief: {
-    rules: [{ required: true, errorMessage: `请输入当日施工简报` }],
+    rules: [
+      {
+        required: props.type === "approval",
+        errorMessage: `请输入当日施工简报`,
+      },
+    ],
   },
 });
 
@@ -510,15 +517,14 @@ const reportDetailsTimeRange = data => {
           :maxlength="1000" />
       </uni-forms-item> -->
       <uni-forms-item
-        v-if="props.type === 'approval' || props.type === 'approval-detail'"
         label="当日施工简报"
-        required
+        :required="type === 'approval'"
         name="constructionBrief">
         <uni-easyinput
           type="textarea"
           autoHeight
           v-bind="defaultProps"
-          :disabled="disabled('approval')"
+          :disabled="type !== 'approval'"
           v-model="form.constructionBrief"
           :maxlength="2000" />
       </uni-forms-item>
@@ -563,10 +569,19 @@ const reportDetailsTimeRange = data => {
         </button>
       </uni-forms-item>
       <template v-for="(item, index) in form.reportDetails" :key="index">
-        <uni-forms-item label="日期" style="margin-top: 32px">
-          <span class="readOnly">{{
-            dayjs(form.createTime).format("YYYY-MM-DD")
-          }}</span>
+        <uv-divider v-if="index !== 0" class="divider"></uv-divider>
+        <uni-forms-item
+          label="日期"
+          required
+          :name="['reportDetails', index, 'reportDate']"
+          :rules="[{ required: true, errorMessage: '请选择日期' }]">
+          <uni-datetime-picker
+            class="datetime-picker"
+            type="date"
+            returnType="timestamp"
+            v-model="item.reportDate"
+            :border="false"
+            :disabled="disabled('edit')" />
         </uni-forms-item>
         <uni-forms-item :label="`${$t('ruiDu.timeNode')}:`" required>
           <view
@@ -837,4 +852,13 @@ const reportDetailsTimeRange = data => {
     color: rgb(75 85 99);
   }
 }
+
+.divider {
+  margin: 0;
+  transform: translateY(-7px);
+  :deep(.uv-line) {
+    border-width: 2px !important;
+    border-color: rgb(41, 121, 255) !important;
+  }
+}
 </style>

+ 27 - 19
utils/navigate.js

@@ -1,19 +1,19 @@
-import { getInspectOrderGet } from '@/api/inspection';
-import { getRepairDetail } from '@/api/repair';
+import { getInspectOrderGet } from "@/api/inspection";
+import { getRepairDetail } from "@/api/repair";
 
 /**
  * 根据不同类型的消息跳转目标页面
  * @param data
  */
 export const messageNavigate = async data => {
-  console.log('data :>> ', data);
+  console.log("data :>> ", data);
   if (!data.userId) {
-    data.userId = '';
+    data.userId = "";
   }
-  if (data.type === 'generateInspect') {
+  if (data.type === "generateInspect") {
     // 巡检工单填写页面
     const detail = (await getInspectOrderGet({ id: data.id })).data;
-    if (detail.status === 'finished') {
+    if (detail.status === "finished") {
       uni.navigateTo({
         url: `/pages/inspection/detail?id=${data.id}&reloginUserId=${data.userId}`,
       });
@@ -22,15 +22,15 @@ export const messageNavigate = async data => {
         url: `/pages/inspection/edit?id=${data.id}&reloginUserId=${data.userId}`,
       });
     }
-  } else if (data.type === 'failureReport') {
+  } else if (data.type === "failureReport") {
     // 故障上报审批页面
     uni.navigateTo({
       url: `/pages/message/detail/index?processInstanceId=${data.id}&reloginUserId=${data.userId}`,
     });
-  } else if (data.type === 'generateMaintain') {
+  } else if (data.type === "generateMaintain") {
     // 维修工单填写页面
     const detail = (await getRepairDetail({ id: data.id })).data;
-    if (detail.status !== 'tx') {
+    if (detail.status !== "tx") {
       uni.navigateTo({
         url: `/pages/repair/detail?id=${data.id}&reloginUserId=${data.userId}`,
       });
@@ -39,17 +39,17 @@ export const messageNavigate = async data => {
         url: `/pages/repair/edit?id=${data.id}&reloginUserId=${data.userId}`,
       });
     }
-  } else if (data.type === 'maintainOut') {
+  } else if (data.type === "maintainOut") {
     // 维修工单委外流程审批页面
     uni.navigateTo({
       url: `/pages/message/detail/index?processInstanceId=${data.id}&reloginUserId=${data.userId}`,
     });
-  } else if (data.type === 'generateMaintenance') {
+  } else if (data.type === "generateMaintenance") {
     // 保养工单填写页面
     uni.navigateTo({
       url: `/pages/maintenance/edit?id=${data.id}&reloginUserId=${data.userId}`,
     });
-  } else if (data.type === 'generateOperation') {
+  } else if (data.type === "generateOperation") {
     // 运行记录填写页面
     const json = JSON.stringify({
       deptId: data.deptId,
@@ -66,31 +66,39 @@ export const messageNavigate = async data => {
         data.userId
       }`,
     });
-  } else if (data.type === 'rdReportApproval') {
+  } else if (data.type === "rdDailyReport") {
+    uni.navigateTo({
+      url: `/pages/ruiDu/edit?id=${data.businessId}&istime=${false}`,
+    });
+  } else if (data.type === "rdReportApproval") {
     uni.navigateTo({
       url: `/pages/ruiDu/approval?id=${data.businessId}`,
     });
-  } else if (data.type === 'rhDailyReport') {
+  } else if (data.type === "rdReportDetail") {
+    uni.navigateTo({
+      url: `/pages/ruiDu/detail?id=${data.businessId}`,
+    });
+  } else if (data.type === "rhDailyReport") {
     uni.navigateTo({
       url: `/pages/ruihen/edit?id=${data.businessId}`,
     });
-  } else if (data.type === 'rhReportApproval') {
+  } else if (data.type === "rhReportApproval") {
     uni.navigateTo({
       url: `/pages/ruihen/approval?id=${data.businessId}`,
     });
-  } else if (data.type === 'ryDailyReport') {
+  } else if (data.type === "ryDailyReport") {
     uni.navigateTo({
       url: `/pages/ruiying/edit?id=${data.businessId}`,
     });
-  } else if (data.type === 'ryReportApproval') {
+  } else if (data.type === "ryReportApproval") {
     uni.navigateTo({
       url: `/pages/ruiying/approval?id=${data.businessId}`,
     });
-  } else if (data.type === 'ryXjDailyReport') {
+  } else if (data.type === "ryXjDailyReport") {
     uni.navigateTo({
       url: `/pages/ruiyingx/edit?id=${data.businessId}`,
     });
-  } else if (data.type === 'ryXjReportApproval') {
+  } else if (data.type === "ryXjReportApproval") {
     uni.navigateTo({
       url: `/pages/ruiyingx/approval?id=${data.businessId}`,
     });