Browse Source

Merge branch 'master' into bzkf30

bzkf30 1 year ago
parent
commit
5370a3b3fe

+ 454 - 0
package-lock.json

@@ -11,6 +11,7 @@
         "autoprefixer": "^10.4.14",
         "axios": "^1.4.0",
         "dingtalk-jsapi": "^3.0.20",
+        "echarts": "^5.4.3",
         "lib-flexible": "^0.3.2",
         "pdfh5": "^1.4.3",
         "pinia": "^2.1.1",
@@ -33,6 +34,7 @@
         "@vue/test-utils": "^2.3.2",
         "jsdom": "^22.0.0",
         "pnpm": "^8.5.1",
+        "qrcode": "^1.5.3",
         "simple-git-hooks": "^2.8.1",
         "taze": "^0.10.1",
         "typescript": "^5.0.4",
@@ -5230,6 +5232,15 @@
         "node": ">=6"
       }
     },
+    "node_modules/camelcase": {
+      "version": "5.3.1",
+      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+      "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
     "node_modules/caniuse-lite": {
       "version": "1.0.30001509",
       "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz",
@@ -5630,6 +5641,15 @@
         }
       }
     },
+    "node_modules/decamelize": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+      "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/decimal.js": {
       "version": "10.4.3",
       "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
@@ -5738,6 +5758,12 @@
         "node": ">=12.20"
       }
     },
+    "node_modules/dijkstrajs": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz",
+      "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==",
+      "dev": true
+    },
     "node_modules/dingtalk-jsapi": {
       "version": "3.0.20",
       "resolved": "https://registry.npmjs.org/dingtalk-jsapi/-/dingtalk-jsapi-3.0.20.tgz",
@@ -5844,6 +5870,20 @@
       "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
       "dev": true
     },
+    "node_modules/echarts": {
+      "version": "5.4.3",
+      "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.4.3.tgz",
+      "integrity": "sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==",
+      "dependencies": {
+        "tslib": "2.3.0",
+        "zrender": "5.4.4"
+      }
+    },
+    "node_modules/echarts/node_modules/tslib": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
+      "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
+    },
     "node_modules/editorconfig": {
       "version": "0.15.3",
       "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz",
@@ -5895,6 +5935,12 @@
       "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
       "dev": true
     },
+    "node_modules/encode-utf8": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz",
+      "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==",
+      "dev": true
+    },
     "node_modules/encoding": {
       "version": "0.1.13",
       "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
@@ -9544,6 +9590,15 @@
         "node": ">=4"
       }
     },
+    "node_modules/pngjs": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz",
+      "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==",
+      "dev": true,
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
     "node_modules/pnpm": {
       "version": "8.6.5",
       "resolved": "https://registry.npmjs.org/pnpm/-/pnpm-8.6.5.tgz",
@@ -9727,6 +9782,175 @@
         "node": ">=6"
       }
     },
+    "node_modules/qrcode": {
+      "version": "1.5.3",
+      "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.3.tgz",
+      "integrity": "sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==",
+      "dev": true,
+      "dependencies": {
+        "dijkstrajs": "^1.0.1",
+        "encode-utf8": "^1.0.3",
+        "pngjs": "^5.0.0",
+        "yargs": "^15.3.1"
+      },
+      "bin": {
+        "qrcode": "bin/qrcode"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
+    "node_modules/qrcode/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dev": true,
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/qrcode/node_modules/cliui": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+      "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
+      "dev": true,
+      "dependencies": {
+        "string-width": "^4.2.0",
+        "strip-ansi": "^6.0.0",
+        "wrap-ansi": "^6.2.0"
+      }
+    },
+    "node_modules/qrcode/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/qrcode/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true
+    },
+    "node_modules/qrcode/node_modules/find-up": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+      "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+      "dev": true,
+      "dependencies": {
+        "locate-path": "^5.0.0",
+        "path-exists": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/qrcode/node_modules/locate-path": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+      "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+      "dev": true,
+      "dependencies": {
+        "p-locate": "^4.1.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/qrcode/node_modules/p-limit": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+      "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+      "dev": true,
+      "dependencies": {
+        "p-try": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/qrcode/node_modules/p-locate": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+      "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+      "dev": true,
+      "dependencies": {
+        "p-limit": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/qrcode/node_modules/wrap-ansi": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+      "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+      "dev": true,
+      "dependencies": {
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/qrcode/node_modules/y18n": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+      "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
+      "dev": true
+    },
+    "node_modules/qrcode/node_modules/yargs": {
+      "version": "15.4.1",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
+      "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
+      "dev": true,
+      "dependencies": {
+        "cliui": "^6.0.0",
+        "decamelize": "^1.2.0",
+        "find-up": "^4.1.0",
+        "get-caller-file": "^2.0.1",
+        "require-directory": "^2.1.1",
+        "require-main-filename": "^2.0.0",
+        "set-blocking": "^2.0.0",
+        "string-width": "^4.2.0",
+        "which-module": "^2.0.0",
+        "y18n": "^4.0.0",
+        "yargs-parser": "^18.1.2"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/qrcode/node_modules/yargs-parser": {
+      "version": "18.1.3",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+      "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+      "dev": true,
+      "dependencies": {
+        "camelcase": "^5.0.0",
+        "decamelize": "^1.2.0"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
     "node_modules/querystringify": {
       "version": "2.2.0",
       "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
@@ -10122,6 +10346,12 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/require-main-filename": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+      "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
+      "dev": true
+    },
     "node_modules/requires-port": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
@@ -12061,6 +12291,12 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/which-module": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz",
+      "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==",
+      "dev": true
+    },
     "node_modules/which-typed-array": {
       "version": "1.1.9",
       "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
@@ -12341,6 +12577,19 @@
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
+    },
+    "node_modules/zrender": {
+      "version": "5.4.4",
+      "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.4.4.tgz",
+      "integrity": "sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==",
+      "dependencies": {
+        "tslib": "2.3.0"
+      }
+    },
+    "node_modules/zrender/node_modules/tslib": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
+      "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
     }
   },
   "dependencies": {
@@ -15913,6 +16162,12 @@
       "dev": true,
       "peer": true
     },
+    "camelcase": {
+      "version": "5.3.1",
+      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+      "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+      "dev": true
+    },
     "caniuse-lite": {
       "version": "1.0.30001509",
       "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz",
@@ -16195,6 +16450,12 @@
         "ms": "2.1.2"
       }
     },
+    "decamelize": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+      "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
+      "dev": true
+    },
     "decimal.js": {
       "version": "10.4.3",
       "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz",
@@ -16282,6 +16543,12 @@
       "integrity": "sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==",
       "dev": true
     },
+    "dijkstrajs": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz",
+      "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==",
+      "dev": true
+    },
     "dingtalk-jsapi": {
       "version": "3.0.20",
       "resolved": "https://registry.npmjs.org/dingtalk-jsapi/-/dingtalk-jsapi-3.0.20.tgz",
@@ -16361,6 +16628,22 @@
       "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
       "dev": true
     },
+    "echarts": {
+      "version": "5.4.3",
+      "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.4.3.tgz",
+      "integrity": "sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==",
+      "requires": {
+        "tslib": "2.3.0",
+        "zrender": "5.4.4"
+      },
+      "dependencies": {
+        "tslib": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
+          "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
+        }
+      }
+    },
     "editorconfig": {
       "version": "0.15.3",
       "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz",
@@ -16408,6 +16691,12 @@
       "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
       "dev": true
     },
+    "encode-utf8": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz",
+      "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==",
+      "dev": true
+    },
     "encoding": {
       "version": "0.1.13",
       "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
@@ -19082,6 +19371,12 @@
       "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==",
       "dev": true
     },
+    "pngjs": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz",
+      "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==",
+      "dev": true
+    },
     "pnpm": {
       "version": "8.6.5",
       "resolved": "https://registry.npmjs.org/pnpm/-/pnpm-8.6.5.tgz",
@@ -19211,6 +19506,138 @@
       "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
       "dev": true
     },
+    "qrcode": {
+      "version": "1.5.3",
+      "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.3.tgz",
+      "integrity": "sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==",
+      "dev": true,
+      "requires": {
+        "dijkstrajs": "^1.0.1",
+        "encode-utf8": "^1.0.3",
+        "pngjs": "^5.0.0",
+        "yargs": "^15.3.1"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "cliui": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+          "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
+          "dev": true,
+          "requires": {
+            "string-width": "^4.2.0",
+            "strip-ansi": "^6.0.0",
+            "wrap-ansi": "^6.2.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true
+        },
+        "find-up": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+          "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+          "dev": true,
+          "requires": {
+            "locate-path": "^5.0.0",
+            "path-exists": "^4.0.0"
+          }
+        },
+        "locate-path": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+          "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+          "dev": true,
+          "requires": {
+            "p-locate": "^4.1.0"
+          }
+        },
+        "p-limit": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+          "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+          "dev": true,
+          "requires": {
+            "p-try": "^2.0.0"
+          }
+        },
+        "p-locate": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+          "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+          "dev": true,
+          "requires": {
+            "p-limit": "^2.2.0"
+          }
+        },
+        "wrap-ansi": {
+          "version": "6.2.0",
+          "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+          "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.0.0",
+            "string-width": "^4.1.0",
+            "strip-ansi": "^6.0.0"
+          }
+        },
+        "y18n": {
+          "version": "4.0.3",
+          "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+          "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
+          "dev": true
+        },
+        "yargs": {
+          "version": "15.4.1",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
+          "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
+          "dev": true,
+          "requires": {
+            "cliui": "^6.0.0",
+            "decamelize": "^1.2.0",
+            "find-up": "^4.1.0",
+            "get-caller-file": "^2.0.1",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^2.0.0",
+            "set-blocking": "^2.0.0",
+            "string-width": "^4.2.0",
+            "which-module": "^2.0.0",
+            "y18n": "^4.0.0",
+            "yargs-parser": "^18.1.2"
+          }
+        },
+        "yargs-parser": {
+          "version": "18.1.3",
+          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+          "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+          "dev": true,
+          "requires": {
+            "camelcase": "^5.0.0",
+            "decamelize": "^1.2.0"
+          }
+        }
+      }
+    },
     "querystringify": {
       "version": "2.2.0",
       "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
@@ -19503,6 +19930,12 @@
       "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
       "dev": true
     },
+    "require-main-filename": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+      "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
+      "dev": true
+    },
     "requires-port": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
@@ -20872,6 +21305,12 @@
         "is-weakset": "^2.0.1"
       }
     },
+    "which-module": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz",
+      "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==",
+      "dev": true
+    },
     "which-typed-array": {
       "version": "1.1.9",
       "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
@@ -21066,6 +21505,21 @@
       "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
       "dev": true,
       "peer": true
+    },
+    "zrender": {
+      "version": "5.4.4",
+      "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.4.4.tgz",
+      "integrity": "sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==",
+      "requires": {
+        "tslib": "2.3.0"
+      },
+      "dependencies": {
+        "tslib": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
+          "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
+        }
+      }
     }
   }
 }

+ 1 - 0
package.json

@@ -16,6 +16,7 @@
     "autoprefixer": "^10.4.14",
     "axios": "^1.4.0",
     "dingtalk-jsapi": "^3.0.20",
+    "echarts": "^5.4.3",
     "lib-flexible": "^0.3.2",
     "pdfh5": "^1.4.3",
     "pinia": "^2.1.1",

+ 25 - 7
pnpm-lock.yaml

@@ -16,6 +16,9 @@ dependencies:
   dingtalk-jsapi:
     specifier: ^3.0.20
     version: registry.npmmirror.com/dingtalk-jsapi@3.0.20
+  echarts:
+    specifier: ^5.4.3
+    version: 5.4.3
   lib-flexible:
     specifier: ^0.3.2
     version: registry.npmmirror.com/lib-flexible@0.3.2
@@ -780,6 +783,13 @@ packages:
       esutils: 2.0.3
     dev: true
 
+  /echarts@5.4.3:
+    resolution: {integrity: sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==}
+    dependencies:
+      tslib: 2.3.0
+      zrender: 5.4.4
+    dev: false
+
   /emoji-regex@8.0.0:
     resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
     dev: true
@@ -1416,6 +1426,14 @@ packages:
       is-number: 7.0.0
     dev: true
 
+  /tslib@1.14.1:
+    resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
+    dev: true
+
+  /tslib@2.3.0:
+    resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==}
+    dev: false
+
   /type-check@0.4.0:
     resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
     engines: {node: '>= 0.8.0'}
@@ -1520,6 +1538,12 @@ packages:
     engines: {node: '>=10'}
     dev: true
 
+  /zrender@5.4.4:
+    resolution: {integrity: sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==}
+    dependencies:
+      tslib: 2.3.0
+    dev: false
+
   registry.npmmirror.com/@ampproject/remapping@2.2.1:
     resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.2.1.tgz}
     name: '@ampproject/remapping'
@@ -8729,12 +8753,6 @@ packages:
       strip-bom: registry.npmmirror.com/strip-bom@3.0.0
     dev: true
 
-  registry.npmmirror.com/tslib@1.14.1:
-    resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz}
-    name: tslib
-    version: 1.14.1
-    dev: true
-
   registry.npmmirror.com/tsutils@3.21.0(typescript@5.1.3):
     resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==, registry: https://registry.npmjs.org/, tarball: https://registry.npmmirror.com/tsutils/-/tsutils-3.21.0.tgz}
     id: registry.npmmirror.com/tsutils/3.21.0
@@ -8744,7 +8762,7 @@ packages:
     peerDependencies:
       typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
     dependencies:
-      tslib: registry.npmmirror.com/tslib@1.14.1
+      tslib: 1.14.1
       typescript: registry.npmmirror.com/typescript@5.1.3
     dev: true
 

BIN
src/assets/index/cjxt.png


BIN
src/assets/index/sbbx.png


+ 236 - 0
src/pages/equipmentWarranty/equipmentWarranty/detail/index.vue

@@ -0,0 +1,236 @@
+<script setup>
+import * as dd from "dingtalk-jsapi";
+import {
+  closeToast,
+  showConfirmDialog,
+  showFailToast,
+  showSuccessToast,
+} from "vant";
+import axios from "axios";
+import { useUserStore } from "~/store/user";
+
+const userInfo = useUserStore();
+const loading = ref(false);
+const { currentRoute } = useRouter();
+const route = currentRoute.value;
+const xhs_id = route.query.xhs_id;
+const detailData = ref({});
+
+initDetailInfo();
+function initDetailInfo() {
+  loading.value = true;
+  request({
+    url: "/xdhq/hqgl_sbbx/detail",
+    data: {
+      xhs_id: xhs_id,
+    },
+  }).then((res) => {
+    loading.value = false;
+    closeToast();
+    detailData.value = res.data.one_info;
+   
+  });
+}
+
+
+</script>
+
+<template>
+  <div
+    v-show="loading"
+    class="h-100vh w-full absolute z-3000 bg-hex-000000b3 flex items-center justify-center"
+  >
+    <van-loading color="#ffffffcc" text-color="#ffffffcc" vertical>
+      加载中...
+    </van-loading>
+  </div>
+  <div class="xmgktParentDiv h-100vh overflow-auto bg-white">
+    <div class="tableContainer">
+      <div class="topPart">
+        <table class="Tb" width="100%" cellspacing="0" cellpadding="0">
+          <tr>
+            <td class="titleOpt">报修类型</td>
+            <td>{{ detailData.xhs_bxlb_option_n }}</td>
+          </tr>
+          <tr>
+            <td class="titleOpt">维修方式:</td>
+            <td>{{ detailData.xhs_wxfs }}</td>
+          </tr>
+          <tr>
+            <td class="titleOpt">维修结果:</td>
+         
+            <td  v-if="detailData.xhs_wxjg_option_k === '1'" class="text-green-500">{{ detailData.xhs_wxjg_option_n }}</td>
+            <td v-else-if="detailData.xhs_wxjg_option_k === '3'" class="text-red-500">{{ detailData.xhs_wxjg_option_n }}</td>
+            <td v-else>{{ detailData.xhs_wxjg_option_n }}</td>
+          </tr>
+          <tr>
+            <td class="titleOpt">申请人:</td>
+            <td>{{ detailData.xhs_sqr }}</td>
+          </tr>
+          <tr>
+            <td class="titleOpt">经手人:</td>
+            <td>{{ detailData.xhs_jsr }}</td>
+          </tr>
+          <tr>
+            <td class="titleOpt">批准人:</td>
+            <td>{{ detailData.xhs_pzr }}</td>
+          </tr>
+          <tr>
+            <td class="titleOpt">维修次数:</td>
+            <td>{{ detailData.xhs_wxcs }}</td>
+          </tr>
+        </table>
+      </div>
+    </div>
+
+     
+    
+  </div>
+</template>
+
+<style lang="scss" scoped>
+$color: #4351ff;
+$color1: #d2e7fd;
+
+.flex-row {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.d-flex {
+  display: flex;
+}
+
+.xmgktManageContent {
+  padding: 10px;
+  font-size: 12px;
+
+  .stepDiv {
+    .step-head {
+      width: 30px;
+      height: 100%;
+      position: relative;
+    }
+
+    .parent-head {
+      position: relative;
+      display: inline-block;
+      margin-bottom: -5px;
+
+      .parent-head-line {
+        width: 1px;
+        height: 50px;
+        margin: auto;
+        background: #e2e2e2;
+      }
+
+      .parent-name {
+        position: absolute;
+        top: 0;
+        left: -15px;
+        background: #fff;
+        padding: 5px 0;
+        left: 60%;
+        transform: translateX(-50%);
+      }
+
+      &.finished {
+        .parent-head-line {
+          background: $color1;
+        }
+      }
+    }
+
+    .parent {
+      .child {
+        height: 70px;
+
+        .step-line {
+          width: 1px;
+          height: 100%;
+          margin: auto;
+          background: #e2e2e2;
+        }
+
+        .step-check {
+          width: 22px;
+          height: 22px;
+          border-radius: 50%;
+          color: #fff;
+          background: #c7c7c7;
+          box-shadow: 0 0 0 3px #e2e2e2;
+          position: absolute;
+          top: 5px;
+          left: 50%;
+          transform: translateX(-50%);
+          display: flex;
+          justify-content: center;
+          align-items: center;
+        }
+
+        .mainCon {
+          border-bottom: 1px solid #e6e6e6;
+          margin-left: 10px;
+          margin-top: -15px;
+          height: 100%;
+
+          .attach {
+            font-size: 12px;
+            color: #ff0000;
+            min-width: 100px;
+            // width: 200px;
+          }
+
+          .van-button {
+            width: 60px;
+            height: 28px;
+            padding: 0;
+
+            &.van-button--info {
+              background: #969696;
+              border-color: #969696;
+              color: #fff;
+            }
+          }
+        }
+
+        &.finished {
+          .step-line {
+            background: $color1;
+          }
+
+          .step-check {
+            background: #0976f8;
+            box-shadow: 0 0 0 3px $color1;
+          }
+        }
+      }
+    }
+  }
+}
+
+:deep() {
+  .previewDiv {
+    height: 80%;
+    top: 50%;
+
+    .van-dialog__header {
+      padding: 0;
+      line-height: 50px;
+    }
+
+    .van-dialog__content {
+      padding: 0 10px;
+      height: calc(100% - 100px);
+    }
+
+    video,
+    audio,
+    iframe {
+      width: 100%;
+      height: 100%;
+    }
+  }
+}
+</style>

+ 495 - 0
src/pages/equipmentWarranty/equipmentWarranty/index.vue

@@ -0,0 +1,495 @@
+<script setup>
+import { showConfirmDialog, showToast } from "vant";
+import { onMounted, ref } from "vue";
+import * as echarts from "echarts";
+const list = ref([]);
+let page = 1;
+const param = $ref({
+  keyword: "",
+});
+const loading = ref(false);
+const finished = ref(false);
+let dialogShow = $ref(false);
+let dialogShowAdd = $ref(false);
+const echartsData = ref([]);
+const echartsLoading = ref(true);
+const canvasRef = ref();
+var Chart1 = null;
+const total = ref("");
+
+function initPie(data) {
+  var Option;
+  Option = {
+    legend: {
+      right: 0,
+      top: "center",
+      orient: "vertical",
+      formatter: function (name) {
+        console.log(name, 22);
+        return `${name} ${data.find((item) => name === item.name).value}`;
+      },
+    },
+    series: [
+      {
+        type: "pie",
+        center: [90, 80],
+        radius: [40, 70],
+        avoidLabelOverlap: false,
+        itemStyle: {
+          borderRadius: 6,
+          borderColor: "#fff",
+          borderWidth: 2,
+        },
+        label: {
+          show: false,
+          position: "center",
+        },
+        labelLine: {
+          show: false,
+        },
+        data,
+      },
+    ],
+  };
+
+  Option && Chart1.setOption(Option);
+}
+
+onMounted(() => {
+  Chart1 = echarts.init(document.getElementById("pie"));
+});
+function init() {
+  // onLoad()
+  request({ url: "/xdhq/hqgl_sbbx_stat/alyz" }).then((res) => {
+    echartsData.value = res.data.wxgl;
+      total.value= echartsData.value.reduce((p, { value }) => (p += value), 0),
+     console.log(echartsData.value.reduce((p, { value }) => (p += value), 0),total.value,"total");
+    echartsLoading.value = false;
+    initPie(echartsData.value);
+  });
+}
+
+
+function onLoad() {
+  loading.value = true;
+  request({
+    url: "/xdhq/hqgl_sbbx/index ",
+    data: {
+      page,
+      limit: 20,
+      ...param,
+    },
+  }).then((res) => {
+    const data = res.data;
+    list.value = [...list.value, ...data.page_data];
+    finished.value = data.total_page === page;
+    page++;
+    loading.value = false;
+    init();
+  });
+}
+
+const searchValue = $ref("");
+function onClickSearch() {
+  reGetList();
+
+}
+function reGetList() {
+  page = 1;
+  list.value = [];
+  finished.value = false;
+  onLoad();
+}
+let checkForm = $ref({
+  xhs_id: "",
+  xhs_wxjg: "",
+  xhs_yy: "",
+});
+let isShow = $ref(true);
+function handleTableColBtn_audit(item) {
+  dialogShow = true;
+  checkForm.xhs_id = item.xhs_id;
+  isShow = true;
+  checkForm.xhs_wxjg = "";
+  checkForm.xhs_yy = "";
+}
+function handleTableColBtn_audit2(item) {
+  dialogShow = true;
+  checkForm.xhs_id = item.xhs_id;
+  isShow = false;
+  checkForm.xhs_yy = "";
+}
+function onBeforeClose(action) {
+  if (action === "confirm") {
+    confirm();
+  } else {
+    dialogShow = false;
+  }
+}
+async function confirm() {
+  let data = {};
+  if (checkForm.xhs_wxjg == 2 || isShow == false) {
+    data = {
+      xhs_id: checkForm.xhs_id,
+      xdhq_hqgl_sbbx: {
+        xhs_wxjg: "2",
+        xhs_yy: checkForm.xhs_yy,
+      },
+    };
+  } else {
+    data = {
+      xhs_id: checkForm.xhs_id,
+      xdhq_hqgl_sbbx: {
+        xhs_wxjg: "1",
+      },
+    };
+  }
+  let res = {};
+  res = await request({ url: "/xdhq/hqgl_sbbx/edit", data });
+  if (res.code == "1") {
+    showToast("设置成功");
+    dialogShow = false;
+    list.value = [];
+    page = 1;
+    onLoad();
+  } else {
+    showToast(res.msg);
+  }
+}
+function handleTableColBtn_drop(item) {
+  request({
+    url: "/xdhq/hqgl_sbbx/edit",
+    data: {
+      xhs_id: item.xhs_id,
+      xdhq_hqgl_sbbx: {
+        xhs_wxjg: "3",
+      },
+    },
+  }).then((res) => {
+    showToast("设置成功");
+    list.value = [];
+    page = 1;
+    onLoad();
+  });
+}
+const showPicker = ref(false);
+const zcList = $ref([]);
+getZcData();
+function getZcData() {
+  loading.value = true;
+  request({
+    url: "/xdhq/hqgl_xcgl/index",
+    data: {
+      page: 1,
+      limit: 999,
+    },
+  }).then((res) => {
+    if (res.code == 1) {
+      let arr = res.data.page_data;
+      loading.value = false;
+      arr.map((item) => {
+        zcList.push({ text: item.xhx_zcmc, value: item.xhx_zcbh });
+      });
+    }
+  });
+}
+
+const onConfirm = ({ selectedOptions }) => {
+  checkFormAdd.xhs_zcmc = selectedOptions[0]?.text;
+  checkFormAdd.xhs_zcbh = selectedOptions[0]?.value;
+  showPicker.value = false;
+};
+
+const bxlxShowPicker = ref(false);
+const bxlxList = $ref([]);
+
+function bxlxListData() {
+  loading.value = true;
+  request({
+    url: "common/sjzd/option",
+    data: {
+      page: 1,
+      limit: 999,
+      cs_code: "BXLB",
+    },
+  }).then((res) => {
+    if (res.code == 1) {
+      let arr1 = res.data.option;
+      loading.value = false;
+      arr1.map((item) => {
+        bxlxList.push({ text: item.n, value: item.v });
+      });
+    }
+  });
+}
+
+const onConfirmBxlx = ({ selectedOptions }) => {
+  checkFormAdd.xhs_bxlb = selectedOptions[0]?.value;
+  bxlxShowPicker.value = false;
+  bxlxList.map((item) => {
+    if (checkFormAdd.xhs_bxlb == item.value) {
+      checkFormAdd.xhs_bxlbmc = item.text;
+    }
+  });
+  console.log(checkFormAdd.xhs_bxlbmc);
+};
+
+let checkFormAdd = $ref({
+  xhs_zcbh: "",
+  xhs_zcmc: "",
+  xhs_wxdd: "",
+  xhs_wxfs: "",
+  xhs_jsr: "",
+  xhs_sqr: "",
+  xhs_pzr: "",
+  xhs_wxcs: "",
+  xhs_bxlb: "",
+  xhs_bxlbmc: "",
+  xhs_wxjg: "2",
+});
+function handleTableRowBtn_add() {
+  dialogShowAdd = true;
+  bxlxListData();
+  checkFormAdd = {
+    xhs_zcbh: "",
+    xhs_zcmc: "",
+    xhs_wxdd: "",
+    xhs_wxfs: "",
+    xhs_jsr: "",
+    xhs_sqr: "",
+    xhs_pzr: "",
+    xhs_wxcs: "",
+    xhs_bxlb: "",
+    xhs_wxjg: "2",
+  };
+}
+
+function onBeforeCloseAdd(action) {
+  if (action === "confirm") {
+    confirmAdd();
+  } else {
+    dialogShowAdd = false;
+  }
+}
+async function confirmAdd() {
+  request({
+    url: "/xdhq/hqgl_sbbx/add",
+    data: {
+      xdhq_hqgl_sbbx: {
+        xhs_zcbh: checkFormAdd.xhs_zcbh,
+        xhs_zcmc: checkFormAdd.xhs_zcmc,
+        xhs_wxdd: checkFormAdd.xhs_wxdd,
+        xhs_wxfs: checkFormAdd.xhs_wxfs,
+        xhs_jsr: checkFormAdd.xhs_jsr,
+        xhs_sqr: checkFormAdd.xhs_sqr,
+        xhs_pzr: checkFormAdd.xhs_pzr,
+        xhs_wxcs: checkFormAdd.xhs_wxcs,
+        xhs_bxlb: checkFormAdd.xhs_bxlb,
+        xhs_wxjg: "2",
+      },
+    },
+  }).then((res) => {
+    if (res.code == "1") {
+      showToast("操作成功");
+      dialogShowAdd = false;
+      list.value = [];
+      page = 1;
+      onLoad();
+    } else {
+      showToast(res.msg);
+    }
+  });
+}
+
+const router = useRouter();
+function cellClick(xhs_id) {
+  router.push({
+    path: "/equipmentWarranty/equipmentWarranty/detail",
+    query: { xhs_id },
+  });
+}
+</script>
+
+<template>
+  <div>
+    <div class="pt-20px" style="border-bottom: 10px solid #f8f9f9">
+      <div class="flex justify-between items-end pl-15px pr-30px">
+        <div class="font-semibold text-20px">维修管理</div>
+        <div class="font-semibold text-20px">
+          <span class="font-bold mr-1 text-30px">{{ total }}</span
+          >个设备
+        </div>
+      </div>
+      <div class="px-30px">
+        <div id="pie" style="height: 160px; width: 100%"></div>
+      </div>
+    </div>
+
+    <van-search
+      v-model="param.keyword"
+      :clearable="false"
+      show-action
+      placeholder="请输入搜索关键词"
+      @search="onClickSearch"
+    >
+      <template #action>
+        <div @click="onClickSearch">搜索</div>
+      </template>
+    </van-search>
+    <van-button
+      class="w-full"
+      type="primary"
+      size="large"
+      @click="handleTableRowBtn_add"
+      >设备保修</van-button
+    >
+    <van-list
+      v-model:loading="loading"
+      :finished="finished"
+      finished-text="没有更多了"
+      @load="onLoad"
+    >
+      <van-cell v-for="item in list" :key="item">
+        <template #title>
+          <div
+            style="display: flex; justify-content: space-between; color: black"
+          >
+            <div @click="cellClick(item.xhs_id)" style="width: 65%">
+              {{ `${item.xhs_zcmc}\u00A0\u00A0\u00A0${item.xhs_wxdd}` }}
+            </div>
+
+            <div style="width: 35%">
+              <span
+                style="color: #4351ff; margin-left: 10px"
+                @click="handleTableColBtn_audit(item)"
+                >已修</span
+              >
+              <span
+                style="color: #4351ff; margin-left: 10px"
+                @click="handleTableColBtn_audit2(item)"
+                >未修</span
+              >
+              <span
+                style="color: #4351ff; margin-left: 10px"
+                @click="handleTableColBtn_drop(item)"
+                >报废</span
+              >
+            </div>
+          </div>
+        </template>
+      </van-cell>
+    </van-list>
+    <van-dialog
+      v-model:show="dialogShow"
+      title=""
+      show-cancel-button
+      :before-close="onBeforeClose"
+    >
+      <van-radio-group
+        class="mb-10px mt-20px ml-35px"
+        v-model="checkForm.xhs_wxjg"
+        v-if="isShow"
+        direction="horizontal"
+      >
+        <span class="mr-60px">状态</span>
+        <van-radio :name="1" icon-size="16px">成功</van-radio>
+        <van-radio :name="2" icon-size="16px">失败</van-radio>
+      </van-radio-group>
+      <van-cell-group inset>
+        <van-field
+          label="原因"
+          size="large"
+          v-show="checkForm.xhs_wxjg == '2' || isShow == false"
+          v-model="checkForm.xhs_yy"
+          rows="5"
+          autosize
+          type="textarea"
+        />
+      </van-cell-group>
+    </van-dialog>
+    <van-dialog
+      v-model:show="dialogShowAdd"
+      title=""
+      show-cancel-button
+      :before-close="onBeforeCloseAdd"
+    >
+      <van-field
+        v-model="checkFormAdd.xhs_zcmc"
+        is-link
+        readonly
+        class="ml-16px"
+        name="picker"
+        size="large"
+        label="资产名称"
+        placeholder="点击选择"
+        @click="showPicker = true"
+      />
+      <van-popup v-model:show="showPicker" position="bottom">
+        <van-picker
+          :columns="zcList"
+          @confirm="onConfirm"
+          @cancel="showPicker = false"
+        />
+      </van-popup>
+      <van-cell-group inset>
+        <van-field
+          v-model="checkFormAdd.xhs_wxdd"
+          label="维修地点"
+          size="large"
+          placeholder="请输入维修地点"
+        />
+        <van-field
+          v-model="checkFormAdd.xhs_wxfs"
+          size="large"
+          label="维修方式"
+          placeholder="请输入维修方式"
+        />
+        <van-field
+          v-model="checkFormAdd.xhs_sqr"
+          size="large"
+          label="申请人"
+          placeholder="请输入申请人"
+        /><van-field
+          v-model="checkFormAdd.xhs_jsr"
+          size="large"
+          label="经手人"
+          placeholder="请输入经手人"
+        /><van-field
+          v-model="checkFormAdd.xhs_pzr"
+          size="large"
+          label="批准人"
+          placeholder="请输入批准人"
+        /><van-field
+          v-model="checkFormAdd.xhs_wxcs"
+          size="large"
+          label="维修次数"
+          placeholder="请输入维修次数"
+        />
+      </van-cell-group>
+
+      <van-field
+        class="ml-16px"
+        v-model="checkFormAdd.xhs_bxlbmc"
+        is-link
+        readonly
+        name="picker"
+        size="large"
+        label="报修类型"
+        placeholder="点击选择"
+        @click="bxlxShowPicker = true"
+      />
+      <van-popup v-model:show="bxlxShowPicker" position="bottom">
+        <van-picker
+          :columns="bxlxList"
+          @confirm="onConfirmBxlx"
+          @cancel="showPicker = false"
+        />
+      </van-popup>
+    </van-dialog>
+  </div>
+</template>
+<style scoped>
+::v-deep .van-dialog__content {
+  padding: 15px;
+}
+</style>

+ 2 - 2
src/pages/menuData.js

@@ -99,14 +99,14 @@ export const menuList = [
     tag: 'cjxt',
     title: '晨检系统',
     list: [
-      { icon: getAssetsImages('index/xmlcgl.png'), menuName: '体检登记', path: '/morningInspectionSystem/medicalExaminationRegistration' },
+      { icon: getAssetsImages('index/cjxt.png'), menuName: '体检登记', path: '/morningInspectionSystem/medicalExaminationRegistration' },
     ],
   },
   {
     tag: 'sbbx',
     title: '设备保修',
     list: [
-      { icon: getAssetsImages('index/xmlcgl.png'), menuName: '设备保修', path: '/equipmentWarranty/equipmentWarranty' },
+      { icon: getAssetsImages('index/sbbx.png'), menuName: '设备保修', path: '/equipmentWarranty/equipmentWarranty' },
     ],
   },
   {

+ 2 - 1
src/pages/morningInspectionSystem/medicalExaminationRegistration/index.vue

@@ -44,7 +44,8 @@ console.log((firstForm.time));
       limit: 20,
        grade_id: firstForm.grade,
        xdcbj_tjlx: firstForm.type, 
-     xdcbj_tjrq:firstForm.time
+       xdcbj_tjrq:firstForm.time
+ 
     },
 
   }).then((res) => {

+ 2 - 1
src/pages/morningInspectionSystem/medicalExaminationRegistration/toClass.vue

@@ -46,7 +46,8 @@ console.log((firstForm.time));
       limit: 20,
        class_id: firstForm.class,
        xdcbj_tjlx: firstForm.type, 
-       xdcbj_tjrq:firstForm.time
+      xdcbj_tjrq:firstForm.time,
+       grade_id: grade_id,
     },
   }).then((res) => {
     const data = res.data;

+ 176 - 35
src/pages/morningInspectionSystem/medicalExaminationRegistration/toStudent.vue

@@ -1,4 +1,5 @@
 <script setup>
+import { showConfirmDialog, showToast } from "vant";
 import { userInfo } from "~/store/user";
 const router = useRouter();
 const { uo_type, uo_name } = userInfo;
@@ -119,6 +120,59 @@ function dropItemChange() {
 function onClickSearch() {
   dropItemChange();
 }
+//单个签到
+function checkSign(item) {
+  loading.value = true;
+  let data = {
+    xdct_id: item.xdct_id,
+    xdct_sfqd: "1",
+  };
+  request({
+    url: "/xddy/dygl_cjxt_tjdj/edit",
+    data: {
+      issubmit: "1",
+      xdct_id: item.xdct_id,
+      xddy_dygl_cjxt_tjdj: {
+        xdct_sfqd: "1",
+      },
+    },
+  }).then((res) => {
+    loading.value = false;
+    if (res.code == 1) {
+      showToast("签到成功");
+      list.value = [];
+      page = 1;
+      onLoad();
+    } else {
+      showToast(res.msg);
+    }
+  });
+}
+//一键签到
+function multipleCheckSign() {
+  request({
+    url: "/xddy/dygl_cjxt_tjdj/index",
+    data: {
+      page,
+      limit: 20,
+      grade_id: grade_id,
+      class_id: class_id,
+      xdct_xsxm: firstForm.xsxm,
+      xdct_xsxh: firstForm.xsxh,
+      xdct_tjjg: firstForm.tjjg,
+      xdct_xslx: firstForm.tjlx,
+      xdct_tjrq: firstForm.time,
+      onekey2sign: "1",
+    },
+  }).then((res) => {
+    showToast("签到成功");
+    list.value = [];
+    page = 1;
+    onLoad();
+  });
+}
+
+//体检登记
 let checkForm = $ref({
   xdct_id: "",
   xdct_xslx: 1,
@@ -142,26 +196,76 @@ let checkForm = $ref({
 let dialogShow = $ref(false);
 function checkPop(item) {
   dialogShow = true;
-   checkForm = {
-      xdct_id: item.xdct_id,
-      xdct_xslx: Number(item.xdct_xslx_option_k),
-      grade_id: item.grade_id,
-      grade_name: item.grade_name,
-      class_id: item.class_id,
-      class_name: item.class_name,
-      xdct_xsxm: item.xdct_xsxm,
-      xdct_xsxh: item.xdct_xsxh,
-      xdct_sffb: Number(item.xdct_sffb_option_k),
-      xdct_tjxx_tl: item.xdct_tjxx_tl,
-      xdct_tjxx_sg: item.xdct_tjxx_sg,
-      xdct_tjxx_tz: item.xdct_tjxx_tz,
-      xdct_tjxx_xw: item.xdct_tjxx_xw,
-      xdct_tjxx_fhl: item.xdct_tjxx_fhl,
-      xdct_tjxx_xy: item.xdct_tjxx_xy,
-      xdct_tjxx_mb: item.xdct_tjxx_mb,
-      xdct_tjxx_sl: item.xdct_tjxx_sl,
-      xdct_qtzz: item.xdct_qtzz,
-    };
+  checkForm = {
+    xdct_id: item.xdct_id,
+    xdct_xslx: Number(item.xdct_xslx_option_k),
+    grade_id: item.grade_id,
+    grade_name: item.grade_name,
+    class_id: item.class_id,
+    class_name: item.class_name,
+    xdct_xsxm: item.xdct_xsxm,
+    xdct_xsxh: item.xdct_xsxh,
+    xdct_sffb: Number(item.xdct_sffb_option_k),
+    xdct_tjxx_tl: item.xdct_tjxx_tl,
+    xdct_tjxx_sg: item.xdct_tjxx_sg,
+    xdct_tjxx_tz: item.xdct_tjxx_tz,
+    xdct_tjxx_xw: item.xdct_tjxx_xw,
+    xdct_tjxx_fhl: item.xdct_tjxx_fhl,
+    xdct_tjxx_xy: item.xdct_tjxx_xy,
+    xdct_tjxx_mb: item.xdct_tjxx_mb,
+    xdct_tjxx_sl: item.xdct_tjxx_sl,
+    xdct_qtzz: item.xdct_qtzz,
+  };
+}
+function onBeforeClose(action) {
+  console.log(action);
+  if (action === "confirm") {
+    confirm();
+  } else {
+    dialogShow = false;
+  }
+}
+function confirm() {
+  request({
+    url: "/xddy/dygl_cjxt_tjdj/edit",
+    data: {
+      xdct_id: checkForm.xdct_id,
+      xddy_dygl_cjxt_tjdj: {
+        xdct_xslx: checkForm.xdct_xslx,
+        grade_id: checkForm.grade_id,
+        grade_name: checkForm.grade_name,
+        class_id: checkForm.class_id,
+        class_name: checkForm.class_name,
+        xdct_xsxm: checkForm.xdct_xsxm,
+        xdct_xsxh: checkForm.xdct_xsxh,
+        xdct_sffb: checkForm.xdct_sffb,
+        xdct_tjxx_tl: checkForm.xdct_tjxx_tl,
+        xdct_tjxx_sg: checkForm.xdct_tjxx_sg,
+        xdct_tjxx_tz: checkForm.xdct_tjxx_tz,
+        xdct_tjxx_xw: checkForm.xdct_tjxx_xw,
+        xdct_tjxx_fhl: checkForm.xdct_tjxx_fhl,
+        xdct_tjxx_xy: checkForm.xdct_tjxx_xy,
+        xdct_tjxx_mb: checkForm.xdct_tjxx_mb,
+        xdct_tjxx_sl: checkForm.xdct_tjxx_sl,
+        xdct_qtzz: checkForm.xdct_qtzz,
+      },
+    },
+  }).then((res) => {
+    if (res.code == "1") {
+      showToast("体检登记成功");
+      dialogShow = false;
+      list.value = [];
+      page = 1;
+      onLoad();
+    } else {
+      showToast(res.msg);
+    }
+  });
+}
+
+function cancel() {
+  dialogShow = false;
+  show = false;
 }
 </script>
 
@@ -172,7 +276,7 @@ function checkPop(item) {
         v-model="firstForm.xsxm"
         :clearable="false"
         show-action
-        placeholder="请输入学生姓名"
+        placeholder="请输入姓名"
         @search="onClickSearch"
       >
         <template #action>
@@ -183,7 +287,7 @@ function checkPop(item) {
         v-model="firstForm.xsxh"
         :clearable="false"
         show-action
-        placeholder="请输入姓名"
+        placeholder="请输入学籍号"
         @search="onClickSearch"
       >
         <template #action>
@@ -219,7 +323,13 @@ function checkPop(item) {
         allow-same-day
       />
     </div>
-    <van-button class="w-full" type="primary" size="large">一键签到</van-button>
+    <van-button
+      class="w-full"
+      type="primary"
+      size="large"
+      @click="multipleCheckSign"
+      >一键签到</van-button
+    >
     <van-list
       v-model:loading="loading"
       :finished="finished"
@@ -235,10 +345,14 @@ function checkPop(item) {
               `${item.xdct_xslx}\u00A0\u00A0\u00A0\u00A0\u00A0${item.class_name}\u00A0\u00A0\u00A0\u00A0\u00A0${item.xdct_tjrq}`
             }}</span>
             <span style="color: #4351ff" @click="checkPop(item)">体检登记</span>
-            <span style="color: #4351ff" v-if="item.xdct_sfqd_option_k != 1"
+            <span
+              style="color: #4351ff"
+              v-if="item.xdct_sfqd_option_k != 1"
+              @click="checkSign(item)"
               >签到</span
             >
             <span style="color: #c0c4cc" v-else disabled>已签</span>
+
             <!-- <van-button
           class="w-66px "
          
@@ -288,10 +402,14 @@ function checkPop(item) {
     show-cancel-button
     :before-close="onBeforeClose"
   >
-    <van-radio-group class="mb-10px mt-20px" v-model="checkForm.xdct_xslx" direction="horizontal">
-      <span class="ml-30px ">体检类型:</span>
-      <van-radio name="1"  icon-size="16px">晨检</van-radio>
-      <van-radio name="2"  icon-size="16px">午检</van-radio>
+    <van-radio-group
+      class="mb-10px mt-20px"
+      v-model="checkForm.xdct_xslx"
+      direction="horizontal"
+    >
+      <span class="ml-30px">体检类型:</span>
+      <van-radio :name="1" icon-size="16px">晨检</van-radio>
+      <van-radio :name="2" icon-size="16px">午检</van-radio>
     </van-radio-group>
     <van-cell-group inset>
       <van-field
@@ -300,7 +418,12 @@ function checkPop(item) {
         size="large"
         placeholder="请输入学生姓名"
       />
-      <van-field v-model="checkForm.xdct_xsxh" size="large" label="学籍号" placeholder="请输入学籍号" />
+      <van-field
+        v-model="checkForm.xdct_xsxh"
+        size="large"
+        label="学籍号"
+        placeholder="请输入学籍号"
+      />
       <van-field
         v-model="checkForm.xdct_tjxx_sg"
         size="large"
@@ -316,7 +439,12 @@ function checkPop(item) {
         size="large"
         label="胸围"
         placeholder="请输入胸围"
-      /><van-field v-model="checkForm.xdct_tjxx_fhl" label="肺活量" placeholder="请输入肺活量" />
+      /><van-field
+        v-model="checkForm.xdct_tjxx_fhl"
+        label="肺活量"
+         size="large"
+        placeholder="请输入肺活量"
+      />
       <van-field
         v-model="checkForm.xdct_tjxx_xy"
         label="血压"
@@ -332,13 +460,26 @@ function checkPop(item) {
         size="large"
         label="视力"
         placeholder="请输入视力"
-      /><van-field v-model="checkForm.xdct_tjxx_tl" size="large" label="听力" placeholder="请输入听力" />
+      /><van-field
+        v-model="checkForm.xdct_tjxx_tl"
+        size="large"
+        label="听力"
+        placeholder="请输入听力"
+      />
     </van-cell-group>
-     <van-radio-group v-model="checkForm.xdct_sffb" direction="horizontal">
+    <van-radio-group v-model="checkForm.xdct_sffb" direction="horizontal">
       <span class="ml-30px">是否发病:</span>
-      <van-radio name="1" icon-size="16px">是</van-radio>
-      <van-radio name="2" icon-size="16px">否</van-radio>
+      <van-radio :name="1" icon-size="16px">是</van-radio>
+      <van-radio :name="2" icon-size="16px">否</van-radio>
     </van-radio-group>
+    <van-cell-group inset>
+      <van-field
+        label="症状"
+        v-if="checkForm.xdct_sffb == 1"
+        v-model="checkForm.xdct_qtzz"
+        placeholder="请输入其他症状"
+      />
+    </van-cell-group>
   </van-dialog>
 </template>
 
@@ -367,6 +508,6 @@ function checkPop(item) {
   flex: auto;
 }
 ::v-deep .van-radio-group {
-display: flex;
+  display: flex;
 }
 </style>

+ 0 - 229
src/pages/morningInspectionSystem/toStudent.vue

@@ -1,229 +0,0 @@
-<script setup>
-import { userInfo } from "~/store/user";
-const router = useRouter();
-const { uo_type, uo_name } = userInfo;
-const { currentRoute } = useRouter()
-const route = currentRoute.value
-const grade_id = route.query.grade_id
-const isBureau = ref(false); // 当前用户是否局端
-isBureau.value = uo_type === "1";
-const list = ref([]);
-const loading = ref(false);
-const finished = ref(false);
-const classList = ref([]);
-const classOption = $ref([{ text: "班级", value: "" }]);
-let page = 1;
-const firstForm = $ref({
-     class: "",
-     type: "",
-     time: "",
-});
- function  getTimeFormat() {
-      var date = new Date();
-      var month = date.getMonth() + 1;
-      var strDate = date.getDate();
-      if (month >= 1 && month <= 9) {
-        month = "0" + month;
-      }
-      if (strDate >= 0 && strDate <= 9) {
-        strDate = "0" + strDate;
-      }
-    let time = [
-        date.getFullYear() + "-" + month + "-" + strDate,
-        date.getFullYear() + "-" + month + "-" + strDate,
-      ];
-       firstForm.time = time[0] + " - " + time[1];
-console.log((firstForm.time));
-     
-    }
-    getTimeFormat()
-  function onLoad() {
-  loading.value = true;
-  request({
-    url: "/xddy/dygl_cjxt_bj/index",
-    data: {
-      page,
-      limit: 20,
-       class_id: firstForm.class,
-       xdcbj_tjlx: firstForm.type, 
-       xdcbj_tjrq:firstForm.time
-    },
-  }).then((res) => {
-    const data = res.data;
-    list.value = [...list.value, ...data.page_data];
-    finished.value = data.total_page === page;
-    page++;
-    loading.value = false;
-  });
-}
-function getClassData() {
-  loading.value = true;
-  request({
-    url: "/jcxx/class/index",
-    data: {
-      page: 1,
-      limit: 999,
-        grade_id: grade_id,
-    },
-  }).then((res) => {
-    if (res.code == 1) {
-      classList.value = res.data.page_data;
-      loading.value = false;
-      classList.value.map((item) => {
-        classOption.push({ text: item.class_name, value: item.class_num });
-      });
-    }
-  });
-}
-getClassData();
-const resultOption = $ref([
-     { text: "结果", value: "" },
-     {
-          text: "良好",
-          value: 1,
-        },
-        {
-          text: "及格",
-          value: 2,
-        },
-        {
-          text: "异常",
-          value: 3,
-        },
-]);
-const typeOption = $ref([
-  { text: "类别", value: "" },
-
-  {
-    text: "晨检",
-    value: 1,
-  },
-  {
-    text: "午检",
-    value: 2,
-  },
-]);
-
-const date = ref("");
-const show = ref(false);
-const formatDate = (date) =>
-  `${date.getFullYear()}-${((date.getMonth() + 1)>=1&&(date.getMonth() + 1)<=9)?'0'+(date.getMonth() + 1):date.getMonth() + 1}-${(date.getDate()>=0&&date.getDate()<=9)?'0'+date.getDate():date.getDate()}`;
-const onConfirm = (values) => {
-  const [start, end] = values;
-  show.value = false;
-  firstForm.time = `${formatDate(start)} - ${formatDate(end)}`;
-  console.log(firstForm.time,typeof(firstForm.time), " firstForm.time  ");
-  dropItemChange()
-};
-const minDate = new Date(2010, 0, 1);
-const maxDate = new Date(2010, 0, 31);
-function dropItemChange() {
-  page = 1;
-  list.value = [];
-  finished.value = false;
-  onLoad();
-}
-
-
-</script>
-
-<template>
-  <div class="index">
-    <div class="flex">
-      <van-dropdown-menu>
-        <van-dropdown-item
-          v-model="firstForm.class"
-          :options="classOption"
-          @change="dropItemChange"
-        />
-        <van-dropdown-item
-          v-model="firstForm.type"
-          :options="typeOption"
-          @change="dropItemChange"
-        />
-    
-      </van-dropdown-menu>
-
-      <van-cell
-        class="dateSearch"
-        title="日期:"
-        :value="firstForm.time"
-        @click="show = true"
-      /><van-calendar
-        v-model:show="show"
-        type="range"
-        :min-date="new Date('1970/01/01')"
-        :max-date="new Date('2099/01/31')"
-        @confirm="onConfirm"
-        allow-same-day
-      />
-    </div>
-    <van-list
-      v-model:loading="loading"
-      :finished="finished"
-      finished-text="没有更多了"
-      @load="onLoad"
-    >
-      <van-cell v-for="item in list" :key="item" >
-        <template #title>
-          <div
-            style="display: flex; justify-content: space-between; color: black"
-          >
-            <span>{{
-              `${item.xdcbj_tjlx}\u00A0\u00A0\u00A0\u00A0\u00A0${item.class_name}`
-            }}</span>
-            <span style="color: black">{{ item.xdcbj_tjrq }}</span>
-          </div>
-        </template>
-
-        <template #label>
-          <div>
-            <span class="mr-50px">应到:{{ item.xdcbj_ydrs }}人</span>
-            <span>实到:{{ item.xdcbj_sdrs }}人 </span>
-            <span></span>
-          </div>
-
-          <div
-            style="display: flex; justify-content: space-between; color: black"
-          >
-            <div>
-              <span>因病缺勤:{{ item.xdcbj_ybqqrs }}人 </span>
-            </div>
-            <div>
-              <span>因事缺勤:{{ item.xdcbj_ysqqrs }}人 </span>
-            </div>
-            <div>
-              <span>异常学生:{{ item.xdcbj_ysqqrs }}人 </span>
-            </div>
-          </div>
-        </template>
-      </van-cell>
-    </van-list>
-  </div>
-</template>
-
-<style lang="scss" scoped>
-.search {
-  box-shadow: 0 0.05333rem 0.32rem rgba(100, 101, 102, 0.12);
-}
-:deep(.van-dropdown-menu) {
-//   width: 50%;
-}
-:deep(.van-dropdown-menu__item) {
-  flex: none;
-  padding: 0 10px;
-}
-::v-deep .dateSearch {
-  font-size: 15.4px;
-  padding: 10.4px 5px;
-}
-::v-deep .dateSearch .van-cell__title {
-  width: 20%;
-  flex: auto;
-}
-::v-deep .dateSearch .van-cell__value {
-  width: 80%;
-  font-size: 12px;
-  flex: auto;
-}
-</style>

+ 279 - 59
src/pages/tdk/wdtdk.vue

@@ -1,10 +1,15 @@
 <script setup lang='ts'>
+import { reactive } from 'vue'
+import { userInfo as user } from '~/store/user'
+
 const fieldValue = ref()
 const WeekMap = '一二三四五六日'
 
+let Team_name
 const team_id = await request({ url: '/jcxx/team/index', data: { team_current: '1' } }).then((res) => {
   const { team_id, team_name } = res.data.page_data[0]
   fieldValue.value = team_name
+  Team_name = team_name
   return team_id
 })
 
@@ -24,79 +29,294 @@ function onConfirm({ selectedOptions }) {
 
   // queryApi2()
 }
+
+const showDialog = ref(false)
+let dialogForm_Data = $ref({
+  xtw_tklx: '1',
+  id_old: undefined,
+  id_new: undefined,
+  xtw_hdkjsxm: '',
+  xtw_hdkjs_user_id: '',
+  xtw_tkyy: '',
+})
+
+const dialogForm_Data_show = reactive({
+  id_old: '',
+  id_new: '',
+})
+function clearDialogData() {
+  dialogForm_Data = {
+    xtw_tklx: '1',
+    id_old: undefined,
+    id_new: undefined,
+    xtw_hdkjsxm: '',
+    xtw_hdkjs_user_id: '',
+    xtw_tkyy: '',
+  }
+  dialogForm_Data_show.id_old = ''
+  dialogForm_Data_show.id_new = ''
+}
+
+function handleDo() {
+  clearDialogData()
+  showDialog.value = true
+}
+
+const showPicker1 = ref(false)
+const showPicker2 = ref(false)
+const showPicker3 = ref(false)
+
+const pickerLoading1 = ref(false)
+const pickerLoading2 = ref(false)
+const pickerLoading3 = ref(false)
+
+function onConfirm1({ selectedOptions }) {
+  showPicker1.value = false
+  dialogForm_Data_show.id_old = selectedOptions[0].text
+  dialogForm_Data.id_old = selectedOptions[0].value
+
+  const item = selectedOptions[0].item
+
+  dialogForm_Data.xtw_jsxm = item.xjj_xm
+  dialogForm_Data.xtw_tkzc = item.skzc
+  dialogForm_Data.xtw_tkjc = item.skjc
+  dialogForm_Data.xtw_tkxq = item.skxq
+  dialogForm_Data.xtw_tkmc = item.subject_name
+}
+function onConfirm2({ selectedOptions }) {
+  showPicker2.value = false
+  dialogForm_Data_show.id_new = selectedOptions[0].text
+  dialogForm_Data.id_new = selectedOptions[0].value
+
+  const item = selectedOptions[0].item
+  dialogForm_Data.xtw_hdkjsxm = item.xjj_xm
+  dialogForm_Data.xtw_hdkzc = item.skzc
+  dialogForm_Data.xtw_hdkjc = item.skjc
+  dialogForm_Data.xtw_hdkxq = item.skxq
+  dialogForm_Data.xtw_hdkmc = item.subject_name
+}
+function onConfirm3({ selectedOptions }) {
+  showPicker3.value = false
+  dialogForm_Data.xtw_hdkjsxm = selectedOptions[0].text
+  dialogForm_Data.xtw_hdkjs_user_id = selectedOptions[0].value
+}
+
+const columns1 = ref([])
+const columns2 = ref([])
+const columns3 = ref([])
+
+function getLabel({ xjj_xm, skzc, skxq, skjc, subject_name }: any) {
+  return `${xjj_xm} / 第${skzc}周 周${WeekMap[skxq - 1]} 第${skjc}节 / ${subject_name}`
+}
+
+function queryPicker1() {
+  pickerLoading1.value = true
+  request({
+    url: '/xdjx/kbgl_jskbmx/index',
+    data: {
+      xjj_xm: user.user_realname,
+      tkzt: '1,4',
+      team_id,
+      limit: 1000,
+    },
+  }).then((res) => {
+    const d = res.data.page_data
+    columns1.value = d.map((el: any) => ({ text: getLabel(el), value: el.id, item: el }))
+  }).catch((err) => {
+    console.error(err)
+  }).finally(() => {
+    pickerLoading1.value = false
+  })
+}
+queryPicker1()
+
+function queryPicker2() {
+  pickerLoading2.value = true
+  request({
+    url: '/xdjx/kbgl_jskbmx/index',
+    data: {
+      tkzt: '1,4',
+      not_in: user.user_realname,
+      team_id,
+      limit: 1000,
+    },
+  }).then((res) => {
+    const d = res.data.page_data
+    columns2.value = d.map((el: any) => ({ text: getLabel(el), value: el.id, item: el }))
+  }).catch((err) => {
+    console.error(err)
+  }).finally(() => {
+    pickerLoading2.value = false
+  })
+}
+queryPicker2()
+
+function queryPicker3() {
+  pickerLoading3.value = true
+  request({
+    url: '/user/main/index',
+    data: {
+      not_in: user.user_no,
+      user_role_id: '7',
+      dept_id: user.dept_id,
+      limit: 1000,
+    },
+  }).then((res) => {
+    const d = res.data.page_data
+    columns3.value = d.map((el: any) => ({ text: el.user_realname, value: el.user_no }))
+  }).catch((err) => {
+    console.error(err)
+  }).finally(() => {
+    pickerLoading3.value = false
+  })
+}
+queryPicker3()
+
+const listRef = ref()
+function handleConfirmDialog() {
+  request({
+    url: '/xdjx/tdkgl_wdtdk/add',
+    data: {
+      xdjx_tdkgl_wdtdk: {
+        ...dialogForm_Data,
+        team_id,
+        team_name: Team_name,
+        xtw_shzt: '3',
+      },
+    },
+  }).then((res) => {
+    if (res.code === '1') {
+      clearDialogData()
+      showDialog.value = false
+      listRef.value?.refresh()
+    }
+  }).catch((err) => {
+    console.error(err)
+  })
+}
 </script>
 
 <template>
-  <div class="px-2px">
-    <van-field v-model="fieldValue" is-link readonly label="学期" placeholder="选择学期" @click="showPicker = true" />
-  </div>
+  <div class="flex flex-col h-100vh">
+    <div class="px-2px">
+      <van-field v-model="fieldValue" is-link readonly label="学期" placeholder="选择学期" @click="showPicker = true" />
+    </div>
 
-  <van-popup v-model:show="showPicker" round position="bottom">
-    <van-picker :columns="columns" @cancel="showPicker = false" @confirm="onConfirm" />
-  </van-popup>
-  <!-- <div class="flex_center py-4">
+    <van-popup v-model:show="showPicker" round position="bottom">
+      <van-picker :columns="columns" @cancel="showPicker = false" @confirm="onConfirm" />
+    </van-popup>
+    <!-- <div class="flex_center py-4">
     <van-loading />
   </div> -->
 
-  <remote-list
-    url="/xdjx/tdkgl_wdtdk/index" :d="{
-      team_id: form_team_id,
-    }" class="text-16px space-x-2 p-4px"
-    k="team_id"
-  >
-    <template
-      #default="{ row: { xtw_tklx, xtw_shzt, xtw_tklx_option_k, xtw_jsxm, xtw_tkzc, xtw_zcsj, xtw_tkjc, xtw_tkxq, xtw_tkmc, xtw_hdkjsxm, xtw_hdkzc, xtw_hdkzcsj, xtw_hdkjc, xtw_hdkxq, xtw_hdkmc } }"
+    <remote-list
+      ref="listRef" url="/xdjx/tdkgl_wdtdk/index" :d="{
+        team_id: form_team_id,
+        xtw_jsxm: user.user_realname,
+      }" class="text-16px space-x-2 p-4px flex-auto  bg-hex-f2f2f2" k="team_id"
     >
-      <div class="px-18px py-12px bg-white rounded text-12px mb-8px">
-        <div class="flex justify-between mb-10px">
-          <div class="text-14px font-bold">
-            {{ xtw_tklx }}申请
-          </div>
-          <van-tag type="primary">
-            {{ xtw_shzt === '3' ? '待审核' : xtw_shzt }}
-          </van-tag>
-        </div>
-        <div class="flex justify-between px-4px">
-          <div class="w-4/9">
-            <div class="mb-4px font-bold">
-              调课前:
+      <template
+        #default="{ row: { xtw_tklx, xtw_shzt, xtw_tklx_option_k, xtw_jsxm, xtw_tkzc, xtw_zcsj, xtw_tkjc, xtw_tkxq, xtw_tkmc, xtw_hdkjsxm, xtw_hdkzc, xtw_hdkzcsj, xtw_hdkjc, xtw_hdkxq, xtw_hdkmc } }"
+      >
+        <div class="px-18px py-12px bg-white rounded text-12px mb-8px">
+          <div class="flex justify-between mb-10px">
+            <div class="text-14px font-bold">
+              {{ xtw_tklx }}申请
             </div>
-            <template v-if="xtw_tklx_option_k === '1'">
-              <div>{{ xtw_jsxm }}/第{{ xtw_tkzc }}周 周{{ WeekMap[xtw_tkxq] }} 第{{ xtw_tkjc }}节/{{ xtw_tkmc }}</div>
-            </template>
-            <template v-else>
-              <div class="mb-2px">
-                {{ xtw_jsxm }}/第{{ xtw_tkzc }}周 周{{ WeekMap[xtw_tkxq ] }} 第{{ xtw_tkjc }}节/{{ xtw_tkmc }}
-              </div>
-              <div>
-                {{ xtw_hdkjsxm }}/第{{ xtw_hdkzc }}周 周{{ WeekMap[xtw_hdkxq] }} 第{{ xtw_hdkjc }}节/{{
-                  xtw_hdkmc
-                }}
-              </div>
-            </template>
+            <van-tag type="primary">
+              {{ xtw_shzt === '3' ? '待审核' : xtw_shzt }}
+            </van-tag>
           </div>
-          <div class="w-4/9">
-            <div class="mb-4px font-bold">
-              调课后:
-            </div>
-            <template v-if="xtw_tklx_option_k === '1'">
-              <div>{{ xtw_hdkjsxm }}/第{{ xtw_tkzc }}周 周{{ WeekMap[xtw_tkxq] }} 第{{ xtw_tkjc }}节/{{ xtw_tkmc }}</div>
-            </template>
-            <template v-else>
-              <div class="mb-2px">
-                {{ xtw_hdkjsxm }}/第{{ xtw_tkzc }}周 周{{ WeekMap[xtw_tkxq] }} 第{{ xtw_tkjc }}节/{{ xtw_hdkmc }}
+          <div class="flex justify-between px-4px">
+            <div class="w-4/9">
+              <div class="mb-4px font-bold">
+                调课前:
               </div>
-              <div>
-                {{ xtw_jsxm }}/第{{ xtw_hdkzc }}周 周{{ WeekMap[xtw_hdkxq] }} 第{{ xtw_hdkjc }}节/{{
-                  xtw_tkmc
-                }}
+              <template v-if="xtw_tklx_option_k === '1'">
+                <div>{{ xtw_jsxm }}/第{{ xtw_tkzc }}周 周{{ WeekMap[xtw_tkxq - 1] }} 第{{ xtw_tkjc }}节/{{ xtw_tkmc }}</div>
+              </template>
+              <template v-else>
+                <div class="mb-2px">
+                  {{ xtw_jsxm }}/第{{ xtw_tkzc }}周 周{{ WeekMap[xtw_tkxq - 1] }} 第{{ xtw_tkjc }}节/{{ xtw_tkmc }}
+                </div>
+                <div>
+                  {{ xtw_hdkjsxm }}/第{{ xtw_hdkzc }}周 周{{ WeekMap[xtw_hdkxq - 1] }} 第{{ xtw_hdkjc }}节/{{
+                    xtw_hdkmc
+                  }}
+                </div>
+              </template>
+            </div>
+            <div class="w-4/9">
+              <div class="mb-4px font-bold">
+                调课后:
               </div>
-            </template>
+              <template v-if="xtw_tklx_option_k === '1'">
+                <div>{{ xtw_hdkjsxm }}/第{{ xtw_tkzc }}周 周{{ WeekMap[xtw_tkxq - 1] }} 第{{ xtw_tkjc }}节/{{ xtw_tkmc }}</div>
+              </template>
+              <template v-else>
+                <div class="mb-2px">
+                  {{ xtw_hdkjsxm }}/第{{ xtw_tkzc }}周 周{{ WeekMap[xtw_tkxq - 1] }} 第{{ xtw_tkjc }}节/{{ xtw_hdkmc }}
+                </div>
+                <div>
+                  {{ xtw_jsxm }}/第{{ xtw_hdkzc }}周 周{{ WeekMap[xtw_hdkxq - 1] }} 第{{ xtw_hdkjc }}节/{{
+                    xtw_tkmc
+                  }}
+                </div>
+              </template>
+            </div>
           </div>
         </div>
-      </div>
-    </template>
-  </remote-list>
+      </template>
+    </remote-list>
+    <div class="flex">
+      <van-button type="primary" square class="w-full" @click="handleDo">
+        申请调代课
+      </van-button>
+    </div>
+  </div>
+
+  <van-dialog v-model:show="showDialog" title="申请调代课" show-cancel-button width="90vw" @confirm="handleConfirmDialog">
+    <van-form>
+      <van-cell-group inset>
+        <van-field
+          v-model="dialogForm_Data_show.id_old" is-link readonly name="id_old" label="调课名称"
+          placeholder="点击选择调课名称" @click="showPicker1 = true"
+        />
+
+        <van-field name="xtw_tklx" label="调课类型">
+          <template #input>
+            <van-radio-group v-model="dialogForm_Data.xtw_tklx" direction="horizontal">
+              <van-radio name="1">
+                调代课
+              </van-radio>
+              <van-radio name="2">
+                调换课
+              </van-radio>
+            </van-radio-group>
+          </template>
+        </van-field>
+
+        <van-field
+          v-show="dialogForm_Data.xtw_tklx === '2'" v-model="dialogForm_Data_show.id_new" is-link readonly
+          name="id_new" label="换课名称" placeholder="点击选择换课名称" @click="showPicker2 = true"
+        />
+
+        <van-field
+          v-show="dialogForm_Data.xtw_tklx === '1'" v-model="dialogForm_Data.xtw_hdkjsxm" is-link readonly
+          name="xtw_hdkjsxm" label="代课教师" placeholder="点击选择代课教师" @click="showPicker3 = true"
+        />
+
+        <van-field v-model="dialogForm_Data.xtw_tkyy" name="xtw_tkyy" label="调课原因" type="textarea" autosize />
+      </van-cell-group>
+    </van-form>
+  </van-dialog>
+  <van-popup v-model:show="showPicker1" position="bottom">
+    <van-picker :columns="columns1" :loading="pickerLoading1" @confirm="onConfirm1" @cancel="showPicker1 = false" />
+  </van-popup> <van-popup v-model:show="showPicker2" position="bottom">
+    <van-picker :columns="columns2" :loading="pickerLoading2" @confirm="onConfirm2" @cancel="showPicker2 = false" />
+  </van-popup><van-popup v-model:show="showPicker3" position="bottom">
+    <van-picker :columns="columns3" :loading="pickerLoading3" @confirm="onConfirm3" @cancel="showPicker3 = false" />
+  </van-popup>
 </template>
 
 <style lang="scss" scoped>

+ 2 - 2
src/styles/main.scss

@@ -9,7 +9,7 @@ body,
 }
 
 body {
-  padding-top: 1vh;
+  // padding-top: 1vh;
   background-color: #f2f2f2;
 }
 
@@ -24,5 +24,5 @@ html.dark {
 
 // 解决苹果手机点击input框放大的问题
 input {
-  font-size: 16px !important;
+  font-size: 14px !important;
 }