浏览代码

Merge branch 'master' of http://47.101.159.18:3000/Muchinfo/MTP2.0_WEB

marymelisa 4 年之前
父节点
当前提交
0a629e961f

+ 228 - 228
package-lock.json

@@ -1828,6 +1828,160 @@
         "tslint": "^5.20.1",
         "webpack": "^4.0.0",
         "yorkie": "^2.0.0"
+      },
+      "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,
+          "optional": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.1",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
+          "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.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,
+          "optional": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "cosmiconfig": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
+          "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "@types/parse-json": "^4.0.0",
+            "import-fresh": "^3.1.0",
+            "parse-json": "^5.0.0",
+            "path-type": "^4.0.0",
+            "yaml": "^1.7.2"
+          }
+        },
+        "deepmerge": {
+          "version": "4.2.2",
+          "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
+          "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
+          "dev": true,
+          "optional": true
+        },
+        "fork-ts-checker-webpack-plugin-v5": {
+          "version": "npm:fork-ts-checker-webpack-plugin@5.2.1",
+          "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-5.2.1.tgz",
+          "integrity": "sha512-SVi+ZAQOGbtAsUWrZvGzz38ga2YqjWvca1pXQFUArIVXqli0lLoDQ8uS0wg0kSpcwpZmaW5jVCZXQebkyUQSsw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "@babel/code-frame": "^7.8.3",
+            "@types/json-schema": "^7.0.5",
+            "chalk": "^4.1.0",
+            "cosmiconfig": "^6.0.0",
+            "deepmerge": "^4.2.2",
+            "fs-extra": "^9.0.0",
+            "memfs": "^3.1.2",
+            "minimatch": "^3.0.4",
+            "schema-utils": "2.7.0",
+            "semver": "^7.3.2",
+            "tapable": "^1.0.0"
+          }
+        },
+        "fs-extra": {
+          "version": "9.1.0",
+          "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+          "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "at-least-node": "^1.0.0",
+            "graceful-fs": "^4.2.0",
+            "jsonfile": "^6.0.1",
+            "universalify": "^2.0.0"
+          }
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "optional": true
+        },
+        "jsonfile": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+          "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "graceful-fs": "^4.1.6",
+            "universalify": "^2.0.0"
+          }
+        },
+        "lru-cache": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+          "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "yallist": "^4.0.0"
+          }
+        },
+        "schema-utils": {
+          "version": "2.7.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz",
+          "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "@types/json-schema": "^7.0.4",
+            "ajv": "^6.12.2",
+            "ajv-keywords": "^3.4.1"
+          }
+        },
+        "semver": {
+          "version": "7.3.5",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+          "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "lru-cache": "^6.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        },
+        "universalify": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+          "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+          "dev": true,
+          "optional": true
+        }
       }
     },
     "@vue/cli-plugin-vuex": {
@@ -1900,6 +2054,37 @@
         "webpack-merge": "^4.2.2"
       },
       "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,
+          "optional": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.1",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
+          "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.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,
+          "optional": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
         "file-loader": {
           "version": "4.3.0",
           "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-4.3.0.tgz",
@@ -1909,6 +2094,49 @@
             "loader-utils": "^1.2.3",
             "schema-utils": "^2.5.0"
           }
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "optional": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        },
+        "vue-loader-v16": {
+          "version": "npm:vue-loader@16.2.0",
+          "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.2.0.tgz",
+          "integrity": "sha512-TitGhqSQ61RJljMmhIGvfWzJ2zk9m1Qug049Ugml6QP3t0e95o0XJjk29roNEiPKJQBEi8Ord5hFuSuELzSp8Q==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "chalk": "^4.1.0",
+            "hash-sum": "^2.0.0",
+            "loader-utils": "^2.0.0"
+          },
+          "dependencies": {
+            "loader-utils": {
+              "version": "2.0.0",
+              "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
+              "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "big.js": "^5.2.2",
+                "emojis-list": "^3.0.0",
+                "json5": "^2.1.2"
+              }
+            }
+          }
         }
       }
     },
@@ -6104,160 +6332,6 @@
         "worker-rpc": "^0.1.0"
       }
     },
-    "fork-ts-checker-webpack-plugin-v5": {
-      "version": "npm:fork-ts-checker-webpack-plugin@5.2.1",
-      "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-5.2.1.tgz",
-      "integrity": "sha512-SVi+ZAQOGbtAsUWrZvGzz38ga2YqjWvca1pXQFUArIVXqli0lLoDQ8uS0wg0kSpcwpZmaW5jVCZXQebkyUQSsw==",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "@babel/code-frame": "^7.8.3",
-        "@types/json-schema": "^7.0.5",
-        "chalk": "^4.1.0",
-        "cosmiconfig": "^6.0.0",
-        "deepmerge": "^4.2.2",
-        "fs-extra": "^9.0.0",
-        "memfs": "^3.1.2",
-        "minimatch": "^3.0.4",
-        "schema-utils": "2.7.0",
-        "semver": "^7.3.2",
-        "tapable": "^1.0.0"
-      },
-      "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,
-          "optional": true,
-          "requires": {
-            "color-convert": "^2.0.1"
-          }
-        },
-        "chalk": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
-          "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.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,
-          "optional": true,
-          "requires": {
-            "color-name": "~1.1.4"
-          }
-        },
-        "cosmiconfig": {
-          "version": "6.0.0",
-          "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
-          "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "@types/parse-json": "^4.0.0",
-            "import-fresh": "^3.1.0",
-            "parse-json": "^5.0.0",
-            "path-type": "^4.0.0",
-            "yaml": "^1.7.2"
-          }
-        },
-        "deepmerge": {
-          "version": "4.2.2",
-          "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
-          "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
-          "dev": true,
-          "optional": true
-        },
-        "fs-extra": {
-          "version": "9.1.0",
-          "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
-          "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "at-least-node": "^1.0.0",
-            "graceful-fs": "^4.2.0",
-            "jsonfile": "^6.0.1",
-            "universalify": "^2.0.0"
-          }
-        },
-        "has-flag": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-          "dev": true,
-          "optional": true
-        },
-        "jsonfile": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
-          "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "graceful-fs": "^4.1.6",
-            "universalify": "^2.0.0"
-          }
-        },
-        "lru-cache": {
-          "version": "6.0.0",
-          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
-          "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "yallist": "^4.0.0"
-          }
-        },
-        "schema-utils": {
-          "version": "2.7.0",
-          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz",
-          "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "@types/json-schema": "^7.0.4",
-            "ajv": "^6.12.2",
-            "ajv-keywords": "^3.4.1"
-          }
-        },
-        "semver": {
-          "version": "7.3.5",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
-          "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "lru-cache": "^6.0.0"
-          }
-        },
-        "supports-color": {
-          "version": "7.2.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "has-flag": "^4.0.0"
-          }
-        },
-        "universalify": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
-          "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
-          "dev": true,
-          "optional": true
-        }
-      }
-    },
     "form-data": {
       "version": "2.3.3",
       "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
@@ -12729,80 +12803,6 @@
         }
       }
     },
-    "vue-loader-v16": {
-      "version": "npm:vue-loader@16.2.0",
-      "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.2.0.tgz",
-      "integrity": "sha512-TitGhqSQ61RJljMmhIGvfWzJ2zk9m1Qug049Ugml6QP3t0e95o0XJjk29roNEiPKJQBEi8Ord5hFuSuELzSp8Q==",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "chalk": "^4.1.0",
-        "hash-sum": "^2.0.0",
-        "loader-utils": "^2.0.0"
-      },
-      "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,
-          "optional": true,
-          "requires": {
-            "color-convert": "^2.0.1"
-          }
-        },
-        "chalk": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
-          "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.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,
-          "optional": true,
-          "requires": {
-            "color-name": "~1.1.4"
-          }
-        },
-        "has-flag": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-          "dev": true,
-          "optional": true
-        },
-        "loader-utils": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
-          "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "big.js": "^5.2.2",
-            "emojis-list": "^3.0.0",
-            "json5": "^2.1.2"
-          }
-        },
-        "supports-color": {
-          "version": "7.2.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "has-flag": "^4.0.0"
-          }
-        }
-      }
-    },
     "vue-router": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.0.1.tgz",

+ 3 - 0
src/assets/styles/mixin.less

@@ -541,6 +541,9 @@
 .formFieldSet {
     border: 1px solid @m-grey19;
     padding: 0 20px 20px;
+    legend {
+        color: @m-white0;
+    }
 }
 .formFieldSet+.formFieldSet {
     margin-top: 35px;

+ 5 - 0
src/services/bus/goods.ts

@@ -0,0 +1,5 @@
+import APP from '@/services';
+
+export function getGoodsList() {
+    return APP.get('Goods')
+}

+ 2 - 4
src/services/bus/index.ts

@@ -9,6 +9,7 @@ import { setServiceURL } from '@/services/request/serviceURL';
 import ProtobufCtr from '@/services/socket/protobuf/index';
 import { localStorageUtil } from '@/utils/storage';
 import { message } from 'ant-design-vue';
+import { GetErmcpGoods } from '../go/ermcp/goodsInfo';
 
 /**
  * 全局数据刷新
@@ -21,10 +22,8 @@ export async function globalDataRefresh(): Promise<string> {
         if (isLogin()) {
             // 获取服务时间,token校验需要用到
             await getServerTime();
-            await LoginQuery();
             // 建立行情交易长链x
             await APP.connectTrading();
-
             // token 校验处理
             const res = await handleTokenCheck()
                 .then(() => true)
@@ -35,8 +34,7 @@ export async function globalDataRefresh(): Promise<string> {
             } else {
                 // token校验成功 马上轮询
                 checkTokenLoop();
-                await GetPCMenus();
-                await QueryTableDefine();
+                Promise.all([GetErmcpGoods(), GetPCMenus(), QueryTableDefine(), LoginQuery()])
             }
         } else {
             // 重置数据中心数据

+ 7 - 4
src/services/bus/login.ts

@@ -2,6 +2,7 @@ import APP from '@/services';
 import { isAllEnum } from '@/services/bus/allEnum';
 import { checkTokenLoop } from '@/services/bus/token';
 import { getAllEnums, GetPCMenus, getServerTime, queryErrorInfos, QueryTableDefine } from '@/services/go/commonService/index';
+import { GetErmcpGoods } from '@/services/go/ermcp/goodsInfo';
 import { GetLoginID, LoginQuery } from '@/services/go/useInfo/index';
 import { localStorageUtil } from '@/utils/storage';
 import { sessionStorageUtil } from '@/utils/storage/index';
@@ -24,10 +25,11 @@ export const login = async (logidCode: string, password: String, byteArr: Uint8A
 
         // localstorage 缓存登录信息,处理页面刷新
         setLoginData(loginData);
-        await GetPCMenus();
-        await QueryTableDefine();
+        Promise.all([GetErmcpGoods(), GetPCMenus(), QueryTableDefine(), getServerTime(), LoginQuery()])
+        // await GetPCMenus();
+        // await QueryTableDefine();
         // 获取服务时间
-        await getServerTime();
+        // await getServerTime();
         // 获取错误信息
         if (!localStorageUtil.getItem('errorCodeInfos')) {
             await queryErrorInfos();
@@ -36,9 +38,10 @@ export const login = async (logidCode: string, password: String, byteArr: Uint8A
         if (!isAllEnum()) {
             await getAllEnums();
         }
+
         // 校验token
         checkTokenLoop();
-        await LoginQuery();
+        // await LoginQuery();
         return loginData;
     } catch (err) {
         return Promise.reject('登录失败:' + err);

+ 1 - 1
src/services/dataCenter/index.ts

@@ -17,7 +17,7 @@ const needClearSourceData: NeedClearSourceDataType = {
     username: '',
     menus: [],
     tableHead: [],
-
+    Goods: [],
 
     queryClientFixedADConfigs: [],
     checkTokenTimeDiff: Math.floor(Math.random() * 6 + 5) * 60 * 1000,

+ 2 - 0
src/services/dataCenter/interface.ts

@@ -1,4 +1,5 @@
 import { OperationTabMenu, TableDefineRsp } from '@/services/go/commonService/interface';
+import { Goods } from '@/services/go/ermcp/goodsInfo/interface';
 import * as useInfo from '@/services/go/useInfo/interface';
 import * as mineType from '@/services/http/mine/interface';
 import * as Type from '@/services/http/notice/interface';
@@ -34,6 +35,7 @@ export interface NeedClearSourceDataType {
     username: string;
     menus: OperationTabMenu[]; // 交易端菜单
     tableHead: TableDefineRsp[]; // 动态表头
+    Goods: Goods[],
 
     queryClientFixedADConfigs: advert.fixedADConfigs[]; //首页图片广告
     checkTokenTimeDiff: number; // 轮休校验token时间差

+ 10 - 4
src/services/go/ermcp/goodsInfo/index.ts

@@ -1,5 +1,6 @@
 /** ================================= 信息 - 现货商品信息 ================================**/
 
+import APP from '@/services';
 import { getUserId } from "@/services/bus/account";
 import { getUserAccountType } from "@/services/bus/user";
 import { commonSearch_go } from '@/services/go/index';
@@ -8,7 +9,7 @@ import {
     Ermcp3Wrstandard,
     ErmcpDeliveryGoodsDetailEx,
     ErmcpDeliveryGoodsReq,
-    ErmcpDeliveryGoodsRsp, ErmcpMiddleGoodsModel, Goods
+    ErmcpDeliveryGoodsRsp, ErmcpMiddleGoodsModel
 } from './interface';
 
 /**
@@ -102,12 +103,17 @@ export function QueryMiddleGoodsDetail(middlegoodsid: number): Promise<Ermcp3Mid
 }
 
 /**
- * 查询企业风管期货商品信息 /Ermcp/GetErmcpGoods
+ * 查询企业风管期货商品信息 /Ermcp/GetErmcpGoods (此接口需要优化,需要前端存入本地,目前项目赶,有时间优化)
  * @param lastUpdateTime 最后修改时间 - 闭区间,格式:yyyy-MM-dd HH:mm:ss
  * @constructor
  */
-export function GetErmcpGoods(lastUpdateTime?: string): Promise<Goods[]> {
-    return commonSearch_go('/Ermcp3/QueryMiddleGoodsDetail', { lastUpdateTime }).catch((err) => {
+export function GetErmcpGoods(lastUpdateTime?: string): Promise<string> {
+    const param = lastUpdateTime ? { lastUpdateTime } : {}
+    return commonSearch_go('/Ermcp/GetErmcpGoods', param).then(res => {
+        console.log('查询企业风管期货商品信息', res);
+        APP.set('Goods', res)
+        return 'ok'
+    }).catch((err) => {
         throw new Error(`查询企业风管期货商品信息: ${err.message}`);
     });
 }

+ 1 - 1
src/services/go/ermcp/purchase/interface.ts

@@ -21,7 +21,7 @@ export interface Ermcp3SellBuyContract {
     //:未提交 1:待审核 2:执行中 3:正常完结 4:审核拒绝 5:异常完结 6:已撤回
     contractmargin: number;//合同保证金
     contractno: string;//合同编号
-    contracttype: number;//合同类型 1-采购, -1-销售
+    contracttype: number;//合同类型 1-采购, -2-销售
     convertfactor: number;//标仓系数(品类)
     createtime: string;//创建时间
     daikaiamount: number;//应收(开)票额

+ 194 - 22
src/views/business/purchase/components/funds/index.vue

@@ -1,42 +1,214 @@
 <template>
-  <!-- 款项登记-->
-  <a-modal class="custom-detail"
-           title="款项登记"
-           v-model:visible="visible"
-           @cancel="cancel"
-           width="890px">
-    <template #footer>
-      <a-button key="submit"
-                type="primary"
-                :loading="loading"
-                @click="submit">关闭</a-button>
-    </template>
+    <!-- 款项登记-->
+    <a-modal class="custom-detail add-custom "
+             :title="selectedRow.contracttype===1? '采购合同-款项登记': '销售合同-款项登记'"
+             v-model:visible="visible"
+             @cancel="cancel"
+             width="890px">
+        <template #footer>
+            <a-button key="submit"
+                      type="primary"
+                      @click="cancel">取消
+            </a-button>
+            <a-button key="submit"
+                    type="primary"
+                    :loading="loading"
+                    @click="submit">款项登记
+            </a-button>
+        </template>
+        <fieldset class="formFieldSet">
+            <legend>合同基本信息</legend>
+            <a-form class="inlineForm">
+                <a-row :gutter="24">
+                    <a-col :span="12">
+                        <a-form-item label="合同编号">
+                            <span class="white">{{ formatValue(selectedRow.contractno) }}</span>
+                        </a-form-item>
+                    </a-col>
+                    <a-col :span="12">
+                        <a-form-item label="定价.
+                        类型">
+                            <span class="white">{{ getPriceTypeName(selectedRow.pricetype) }}</span>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
+                <a-row :gutter="24">
+                    <a-col :span="12">
+                        <a-form-item :label="selectedRow.contracttype===1? '采购方': '销售方'">
+                            <span class="white">{{ formatValue(selectedRow.accountname) }}</span>
+                        </a-form-item>
+                    </a-col>
+                    <a-col :span="12">
+                        <a-form-item label="现货品种">
+                            <span class="white">{{ formatValue(selectedRow.deliverygoodsname) }}</span>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
+                <a-row :gutter="24">
+                    <a-col :span="12">
+                        <a-form-item label="合同签署量">
+                            <span class="white">{{ formatValue(selectedRow.qty + selectedRow.enumdicname) }}</span>
+                        </a-form-item>
+                    </a-col>
+                    <a-col :span="12">
+                        <a-form-item label="合同暂定价">
+                            <span class="white">{{ formatValue(selectedRow.price) }}</span>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
+                <a-row :gutter="24">
+                    <a-col :span="12">
+                        <a-form-item label="点价合约">
+                            <span class="white">{{ formatValue(selectedRow.goodsname) }}</span>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
+            </a-form>
+        </fieldset>
+        <fieldset class="formFieldSet">
+            <legend>已登记信息</legend>
+            <a-form class="inlineForm">
+                <a-row :gutter="24">
+                    <a-col :span="12">
+                        <a-form-item label="已定价量">
+                            <span class="white">{{ selectedRow.pricedqty + selectedRow.enumdicname }}</span>
+                        </a-form-item>
+                    </a-col>
+                    <a-col :span="12">
+                        <a-form-item label="已点均价">
+                            <span class="white">{{ formatValue(selectedRow.pricedavg) }}</span>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
+            </a-form>
+        </fieldset>
+        <fieldset class="formFieldSet">
+            <legend>本次点价信息</legend>
+            <a-form class="inlineForm"
+                        ref="formRef"
+                        :model="formState"
+                        :rules="formStateRules">
+                <a-row :gutter="24">
+                    <a-col :span="12">
+                        <a-form-item label="点价价格"  name="PricedPrice">
+                            <a-input-number id="dialogInput"  style="width: 200px" v-model:value="formState.PricedPrice" :min="0" placeholder="请输入点价价格"/>
+                        </a-form-item>
+                    </a-col>
+                    <a-col :span="12">
+                        <a-form-item label="升贴水">
+                            <span class="white">{{ formatValue(selectedRow.pricemove) }}</span>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
 
-  </a-modal>
+                <a-row :gutter="24">
+                    <a-col :span="12">
+                        <a-form-item label="商品价格">
+                            <span class="white">{{ Number(selectedRow.pricemove) + Number(formState.PricedPrice) }}</span>
+                        </a-form-item>
+                    </a-col>
+                    <a-col :span="12">
+                        <a-form-item label="点价数量" name="PricedQty">
+                            <a-input-number id="dialogInput"  style="width: 200px" v-model:value="formState.PricedQty" :min="0" :max="selectedRow.unpricedqty" placeholder="请输入点价数量"/>
+                            <span class="white">未定价量{{selectedRow.unpricedqty}}{{selectedRow.enumdicname}} </span>
+                            <span class="white" @click="formState.PricedQty = selectedRow.unpricedqty"> 全部登记</span>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
+
+                <a-row :gutter="24">
+                    <a-col :span="12">
+                        <a-form-item label="点价金额">
+                            <span class="white">{{( Number(selectedRow.pricemove) + Number(formState.PricedPrice)) * formState.PricedQty }}</span>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
+            </a-form>
+        </fieldset>
+    </a-modal>
 </template>
 
 <script lang="ts">
-import { defineComponent, ref } from 'vue';
-import { closeModal } from '@/common/setup/modal/index';
+import {defineComponent, PropType, reactive, ref,unref} from 'vue';
+import {closeModal} from '@/common/setup/modal/index';
+import {formatValue} from "@/common/methods";
+import {Ermcp3SellBuyContract} from "@/services/go/ermcp/purchase/interface";
+import {getPriceTypeName} from "@/views/business/purchase/setup";
+import { operationContractReq } from '@/services/proto/contract';
+import { message } from 'ant-design-vue';
 
 export default defineComponent({
     name: 'purchase_pending_funds',
     components: {},
-    setup() {
-        const { visible, cancel } = closeModal('purchase_pending_funds');
+    props: {
+        selectedRow: {
+            type: Object as PropType<Ermcp3SellBuyContract>,
+            default: {},
+        },
+    },
+    setup(props) {
+        const {visible, cancel} = closeModal('purchase_pending_funds');
         const loading = ref<boolean>(false);
+        function objectToUint8Array(data: object) {
+            const encode = encodeURI(JSON.stringify(data));// 对字符串进行编码
+            const base64String = btoa(encode);// 对编码的字符串转化base64
+            const padding = '='.repeat((4 - base64String.length % 4) % 4);
+            const base64 = (base64String + padding).replace(/\-/g, '+').replace(/_/g, '/');
+            const rawData = window.atob(base64);
+            const outputArray = new Uint8Array(rawData.length);
+            for (var i = 0; i < rawData.length; ++i) {
+                outputArray[i] = rawData.charCodeAt(i);
+            }
+            return outputArray;
+        }
+
+        const formRef = ref();
+        const formState = reactive({ PricedPrice: 0, PricedQty: 0 });
+        const numberIstrue = (rule: any, value: any) => {
+            if (!value) {
+                return Promise.reject(new Error('请输入正确的值'));
+            } else {
+                return Promise.resolve();
+            }
+        };
+        const formStateRules = {
+            PricedPrice: [{ required: true, validator: numberIstrue, trigger: 'blur', type: 'number' }],
+            PricedQty: [{ required: true, validator: numberIstrue, trigger: 'blur', type: 'number' }],
+        }
         function submit() {
-            loading.value = true;
-            setTimeout(() => {
-                loading.value = false;
-                cancel();
-            }, 2000);
+            const wrapEl = unref(formRef);
+            wrapEl.validate().then(() => {
+                loading.value = true;
+                console.log(objectToUint8Array(formState));
+                operationContractReq({
+                    OperateType: 1, // uint32 操作类型-1:登记2:确认3:拒绝4:撤销
+                    Info: {
+                        OperateApplyType: 1, // uint32 操作申请类型-1:点价2:结算3:款项4:发票
+                        RelatedID: 1, // uint64 现货合同ID(602+Unix秒时间戳(10位)+xxxxxx)
+                        DetailJson : objectToUint8Array(formState), // bytes 明细JSON {}
+                    }
+                }).then(()=>{
+                    message.success('登记成功!')
+                    loading.value = false;
+                    cancel();
+                }).catch(err=>{
+                    message.error(err)
+                    loading.value = false;
+                    cancel();
+                })
+            });
         }
+
         return {
             visible,
             cancel,
             submit,
             loading,
+            formRef,
+            formState,
+            formatValue,
+            formStateRules,
+            getPriceTypeName,
         };
     },
 });

+ 194 - 22
src/views/business/purchase/components/invoice/index.vue

@@ -1,42 +1,214 @@
 <template>
-  <!-- 发票登记-->
-  <a-modal class="custom-detail"
-           title="发票登记"
-           v-model:visible="visible"
-           @cancel="cancel"
-           width="890px">
-    <template #footer>
-      <a-button key="submit"
-                type="primary"
-                :loading="loading"
-                @click="submit">关闭</a-button>
-    </template>
+    <!-- 发票登记-->
+    <a-modal class="custom-detail add-custom "
+             :title="selectedRow.contracttype===1? '采购合同-发票登记': '销售合同-发票登记'"
+             v-model:visible="visible"
+             @cancel="cancel"
+             width="890px">
+        <template #footer>
+            <a-button key="submit"
+                      type="primary"
+                      @click="cancel">取消
+            </a-button>
+            <a-button key="submit"
+                    type="primary"
+                    :loading="loading"
+                    @click="submit">发票登记
+            </a-button>
+        </template>
+        <fieldset class="formFieldSet">
+            <legend>合同基本信息</legend>
+            <a-form class="inlineForm">
+                <a-row :gutter="24">
+                    <a-col :span="12">
+                        <a-form-item label="合同编号">
+                            <span class="white">{{ formatValue(selectedRow.contractno) }}</span>
+                        </a-form-item>
+                    </a-col>
+                    <a-col :span="12">
+                        <a-form-item label="定价.
+                        类型">
+                            <span class="white">{{ getPriceTypeName(selectedRow.pricetype) }}</span>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
+                <a-row :gutter="24">
+                    <a-col :span="12">
+                        <a-form-item :label="selectedRow.contracttype===1? '采购方': '销售方'">
+                            <span class="white">{{ formatValue(selectedRow.accountname) }}</span>
+                        </a-form-item>
+                    </a-col>
+                    <a-col :span="12">
+                        <a-form-item label="现货品种">
+                            <span class="white">{{ formatValue(selectedRow.deliverygoodsname) }}</span>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
+                <a-row :gutter="24">
+                    <a-col :span="12">
+                        <a-form-item label="合同签署量">
+                            <span class="white">{{ formatValue(selectedRow.qty + selectedRow.enumdicname) }}</span>
+                        </a-form-item>
+                    </a-col>
+                    <a-col :span="12">
+                        <a-form-item label="合同暂定价">
+                            <span class="white">{{ formatValue(selectedRow.price) }}</span>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
+                <a-row :gutter="24">
+                    <a-col :span="12">
+                        <a-form-item label="点价合约">
+                            <span class="white">{{ formatValue(selectedRow.goodsname) }}</span>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
+            </a-form>
+        </fieldset>
+        <fieldset class="formFieldSet">
+            <legend>已登记信息</legend>
+            <a-form class="inlineForm">
+                <a-row :gutter="24">
+                    <a-col :span="12">
+                        <a-form-item label="已定价量">
+                            <span class="white">{{ selectedRow.pricedqty + selectedRow.enumdicname }}</span>
+                        </a-form-item>
+                    </a-col>
+                    <a-col :span="12">
+                        <a-form-item label="已点均价">
+                            <span class="white">{{ formatValue(selectedRow.pricedavg) }}</span>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
+            </a-form>
+        </fieldset>
+        <fieldset class="formFieldSet">
+            <legend>本次点价信息</legend>
+            <a-form class="inlineForm"
+                        ref="formRef"
+                        :model="formState"
+                        :rules="formStateRules">
+                <a-row :gutter="24">
+                    <a-col :span="12">
+                        <a-form-item label="点价价格"  name="PricedPrice">
+                            <a-input-number id="dialogInput"  style="width: 200px" v-model:value="formState.PricedPrice" :min="0" placeholder="请输入点价价格"/>
+                        </a-form-item>
+                    </a-col>
+                    <a-col :span="12">
+                        <a-form-item label="升贴水">
+                            <span class="white">{{ formatValue(selectedRow.pricemove) }}</span>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
 
-  </a-modal>
+                <a-row :gutter="24">
+                    <a-col :span="12">
+                        <a-form-item label="商品价格">
+                            <span class="white">{{ Number(selectedRow.pricemove) + Number(formState.PricedPrice) }}</span>
+                        </a-form-item>
+                    </a-col>
+                    <a-col :span="12">
+                        <a-form-item label="点价数量" name="PricedQty">
+                            <a-input-number id="dialogInput"  style="width: 200px" v-model:value="formState.PricedQty" :min="0" :max="selectedRow.unpricedqty" placeholder="请输入点价数量"/>
+                            <span class="white">未定价量{{selectedRow.unpricedqty}}{{selectedRow.enumdicname}} </span>
+                            <span class="white" @click="formState.PricedQty = selectedRow.unpricedqty"> 全部登记</span>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
+
+                <a-row :gutter="24">
+                    <a-col :span="12">
+                        <a-form-item label="点价金额">
+                            <span class="white">{{( Number(selectedRow.pricemove) + Number(formState.PricedPrice)) * formState.PricedQty }}</span>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
+            </a-form>
+        </fieldset>
+    </a-modal>
 </template>
 
 <script lang="ts">
-import { defineComponent, ref } from 'vue';
-import { closeModal } from '@/common/setup/modal/index';
+import {defineComponent, PropType, reactive, ref,unref} from 'vue';
+import {closeModal} from '@/common/setup/modal/index';
+import {formatValue} from "@/common/methods";
+import {Ermcp3SellBuyContract} from "@/services/go/ermcp/purchase/interface";
+import {getPriceTypeName} from "@/views/business/purchase/setup";
+import { operationContractReq } from '@/services/proto/contract';
+import { message } from 'ant-design-vue';
 
 export default defineComponent({
     name: 'purchase_pending_invoice',
     components: {},
-    setup() {
-        const { visible, cancel } = closeModal('purchase_pending_invoice');
+    props: {
+        selectedRow: {
+            type: Object as PropType<Ermcp3SellBuyContract>,
+            default: {},
+        },
+    },
+    setup(props) {
+        const {visible, cancel} = closeModal('purchase_pending_invoice');
         const loading = ref<boolean>(false);
+        function objectToUint8Array(data: object) {
+            const encode = encodeURI(JSON.stringify(data));// 对字符串进行编码
+            const base64String = btoa(encode);// 对编码的字符串转化base64
+            const padding = '='.repeat((4 - base64String.length % 4) % 4);
+            const base64 = (base64String + padding).replace(/\-/g, '+').replace(/_/g, '/');
+            const rawData = window.atob(base64);
+            const outputArray = new Uint8Array(rawData.length);
+            for (var i = 0; i < rawData.length; ++i) {
+                outputArray[i] = rawData.charCodeAt(i);
+            }
+            return outputArray;
+        }
+
+        const formRef = ref();
+        const formState = reactive({ PricedPrice: 0, PricedQty: 0 });
+        const numberIstrue = (rule: any, value: any) => {
+            if (!value) {
+                return Promise.reject(new Error('请输入正确的值'));
+            } else {
+                return Promise.resolve();
+            }
+        };
+        const formStateRules = {
+            PricedPrice: [{ required: true, validator: numberIstrue, trigger: 'blur', type: 'number' }],
+            PricedQty: [{ required: true, validator: numberIstrue, trigger: 'blur', type: 'number' }],
+        }
         function submit() {
-            loading.value = true;
-            setTimeout(() => {
-                loading.value = false;
-                cancel();
-            }, 2000);
+            const wrapEl = unref(formRef);
+            wrapEl.validate().then(() => {
+                loading.value = true;
+                console.log(objectToUint8Array(formState));
+                operationContractReq({
+                    OperateType: 1, // uint32 操作类型-1:登记2:确认3:拒绝4:撤销
+                    Info: {
+                        OperateApplyType: 1, // uint32 操作申请类型-1:点价2:结算3:款项4:发票
+                        RelatedID: 1, // uint64 现货合同ID(602+Unix秒时间戳(10位)+xxxxxx)
+                        DetailJson : objectToUint8Array(formState), // bytes 明细JSON {}
+                    }
+                }).then(()=>{
+                    message.success('登记成功!')
+                    loading.value = false;
+                    cancel();
+                }).catch(err=>{
+                    message.error(err)
+                    loading.value = false;
+                    cancel();
+                })
+            });
         }
+
         return {
             visible,
             cancel,
             submit,
             loading,
+            formRef,
+            formState,
+            formatValue,
+            formStateRules,
+            getPriceTypeName,
         };
     },
 });

+ 194 - 22
src/views/business/purchase/components/settlement/index.vue

@@ -1,42 +1,214 @@
 <template>
-  <!-- 交收登记-->
-  <a-modal class="custom-detail"
-           title="交收登记"
-           v-model:visible="visible"
-           @cancel="cancel"
-           width="890px">
-    <template #footer>
-      <a-button key="submit"
-                type="primary"
-                :loading="loading"
-                @click="submit">关闭</a-button>
-    </template>
+    <!-- 交收登记-->
+    <a-modal class="custom-detail add-custom "
+             :title="selectedRow.contracttype===1? '采购合同-交收登记': '销售合同-交收登记'"
+             v-model:visible="visible"
+             @cancel="cancel"
+             width="890px">
+        <template #footer>
+            <a-button key="submit"
+                      type="primary"
+                      @click="cancel">取消
+            </a-button>
+            <a-button key="submit"
+                    type="primary"
+                    :loading="loading"
+                    @click="submit">交收登记
+            </a-button>
+        </template>
+        <fieldset class="formFieldSet">
+            <legend>合同基本信息</legend>
+            <a-form class="inlineForm">
+                <a-row :gutter="24">
+                    <a-col :span="12">
+                        <a-form-item label="合同编号">
+                            <span class="white">{{ formatValue(selectedRow.contractno) }}</span>
+                        </a-form-item>
+                    </a-col>
+                    <a-col :span="12">
+                        <a-form-item label="定价.
+                        类型">
+                            <span class="white">{{ getPriceTypeName(selectedRow.pricetype) }}</span>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
+                <a-row :gutter="24">
+                    <a-col :span="12">
+                        <a-form-item :label="selectedRow.contracttype===1? '采购方': '销售方'">
+                            <span class="white">{{ formatValue(selectedRow.accountname) }}</span>
+                        </a-form-item>
+                    </a-col>
+                    <a-col :span="12">
+                        <a-form-item label="现货品种">
+                            <span class="white">{{ formatValue(selectedRow.deliverygoodsname) }}</span>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
+                <a-row :gutter="24">
+                    <a-col :span="12">
+                        <a-form-item label="合同签署量">
+                            <span class="white">{{ formatValue(selectedRow.qty + selectedRow.enumdicname) }}</span>
+                        </a-form-item>
+                    </a-col>
+                    <a-col :span="12">
+                        <a-form-item label="合同暂定价">
+                            <span class="white">{{ formatValue(selectedRow.price) }}</span>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
+                <a-row :gutter="24">
+                    <a-col :span="12">
+                        <a-form-item label="点价合约">
+                            <span class="white">{{ formatValue(selectedRow.goodsname) }}</span>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
+            </a-form>
+        </fieldset>
+        <fieldset class="formFieldSet">
+            <legend>已登记信息</legend>
+            <a-form class="inlineForm">
+                <a-row :gutter="24">
+                    <a-col :span="12">
+                        <a-form-item label="已定价量">
+                            <span class="white">{{ selectedRow.pricedqty + selectedRow.enumdicname }}</span>
+                        </a-form-item>
+                    </a-col>
+                    <a-col :span="12">
+                        <a-form-item label="已点均价">
+                            <span class="white">{{ formatValue(selectedRow.pricedavg) }}</span>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
+            </a-form>
+        </fieldset>
+        <fieldset class="formFieldSet">
+            <legend>本次点价信息</legend>
+            <a-form class="inlineForm"
+                        ref="formRef"
+                        :model="formState"
+                        :rules="formStateRules">
+                <a-row :gutter="24">
+                    <a-col :span="12">
+                        <a-form-item label="点价价格"  name="PricedPrice">
+                            <a-input-number id="dialogInput"  style="width: 200px" v-model:value="formState.PricedPrice" :min="0" placeholder="请输入点价价格"/>
+                        </a-form-item>
+                    </a-col>
+                    <a-col :span="12">
+                        <a-form-item label="升贴水">
+                            <span class="white">{{ formatValue(selectedRow.pricemove) }}</span>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
 
-  </a-modal>
+                <a-row :gutter="24">
+                    <a-col :span="12">
+                        <a-form-item label="商品价格">
+                            <span class="white">{{ Number(selectedRow.pricemove) + Number(formState.PricedPrice) }}</span>
+                        </a-form-item>
+                    </a-col>
+                    <a-col :span="12">
+                        <a-form-item label="点价数量" name="PricedQty">
+                            <a-input-number id="dialogInput"  style="width: 200px" v-model:value="formState.PricedQty" :min="0" :max="selectedRow.unpricedqty" placeholder="请输入点价数量"/>
+                            <span class="white">未定价量{{selectedRow.unpricedqty}}{{selectedRow.enumdicname}} </span>
+                            <span class="white" @click="formState.PricedQty = selectedRow.unpricedqty"> 全部登记</span>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
+
+                <a-row :gutter="24">
+                    <a-col :span="12">
+                        <a-form-item label="点价金额">
+                            <span class="white">{{( Number(selectedRow.pricemove) + Number(formState.PricedPrice)) * formState.PricedQty }}</span>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
+            </a-form>
+        </fieldset>
+    </a-modal>
 </template>
 
 <script lang="ts">
-import { defineComponent, ref } from 'vue';
-import { closeModal } from '@/common/setup/modal/index';
+import {defineComponent, PropType, reactive, ref,unref} from 'vue';
+import {closeModal} from '@/common/setup/modal/index';
+import {formatValue} from "@/common/methods";
+import {Ermcp3SellBuyContract} from "@/services/go/ermcp/purchase/interface";
+import {getPriceTypeName} from "@/views/business/purchase/setup";
+import { operationContractReq } from '@/services/proto/contract';
+import { message } from 'ant-design-vue';
 
 export default defineComponent({
     name: 'purchase_pending_settlement',
     components: {},
-    setup() {
-        const { visible, cancel } = closeModal('purchase_pending_settlement');
+    props: {
+        selectedRow: {
+            type: Object as PropType<Ermcp3SellBuyContract>,
+            default: {},
+        },
+    },
+    setup(props) {
+        const {visible, cancel} = closeModal('purchase_pending_settlement');
         const loading = ref<boolean>(false);
+        function objectToUint8Array(data: object) {
+            const encode = encodeURI(JSON.stringify(data));// 对字符串进行编码
+            const base64String = btoa(encode);// 对编码的字符串转化base64
+            const padding = '='.repeat((4 - base64String.length % 4) % 4);
+            const base64 = (base64String + padding).replace(/\-/g, '+').replace(/_/g, '/');
+            const rawData = window.atob(base64);
+            const outputArray = new Uint8Array(rawData.length);
+            for (var i = 0; i < rawData.length; ++i) {
+                outputArray[i] = rawData.charCodeAt(i);
+            }
+            return outputArray;
+        }
+
+        const formRef = ref();
+        const formState = reactive({ PricedPrice: 0, PricedQty: 0 });
+        const numberIstrue = (rule: any, value: any) => {
+            if (!value) {
+                return Promise.reject(new Error('请输入正确的值'));
+            } else {
+                return Promise.resolve();
+            }
+        };
+        const formStateRules = {
+            PricedPrice: [{ required: true, validator: numberIstrue, trigger: 'blur', type: 'number' }],
+            PricedQty: [{ required: true, validator: numberIstrue, trigger: 'blur', type: 'number' }],
+        }
         function submit() {
-            loading.value = true;
-            setTimeout(() => {
-                loading.value = false;
-                cancel();
-            }, 2000);
+            const wrapEl = unref(formRef);
+            wrapEl.validate().then(() => {
+                loading.value = true;
+                console.log(objectToUint8Array(formState));
+                operationContractReq({
+                    OperateType: 1, // uint32 操作类型-1:登记2:确认3:拒绝4:撤销
+                    Info: {
+                        OperateApplyType: 1, // uint32 操作申请类型-1:点价2:结算3:款项4:发票
+                        RelatedID: 1, // uint64 现货合同ID(602+Unix秒时间戳(10位)+xxxxxx)
+                        DetailJson : objectToUint8Array(formState), // bytes 明细JSON {}
+                    }
+                }).then(()=>{
+                    message.success('登记成功!')
+                    loading.value = false;
+                    cancel();
+                }).catch(err=>{
+                    message.error(err)
+                    loading.value = false;
+                    cancel();
+                })
+            });
         }
+
         return {
             visible,
             cancel,
             submit,
             loading,
+            formRef,
+            formState,
+            formatValue,
+            formStateRules,
+            getPriceTypeName,
         };
     },
 });

+ 194 - 22
src/views/business/purchase/components/someprice/index.vue

@@ -1,42 +1,214 @@
 <template>
-  <!-- 采购点价登记-->
-  <a-modal class="custom-detail"
-           title="点价登记"
-           v-model:visible="visible"
-           @cancel="cancel"
-           width="890px">
-    <template #footer>
-      <a-button key="submit"
-                type="primary"
-                :loading="loading"
-                @click="submit">关闭</a-button>
-    </template>
+    <!-- 点价登记-->
+    <a-modal class="custom-detail add-custom "
+             :title="selectedRow.contracttype===1? '采购合同-点价登记': '销售合同-点价登记'"
+             v-model:visible="visible"
+             @cancel="cancel"
+             width="890px">
+        <template #footer>
+            <a-button key="submit"
+                      type="primary"
+                      @click="cancel">取消
+            </a-button>
+            <a-button key="submit"
+                    type="primary"
+                    :loading="loading"
+                    @click="submit">点价登记
+            </a-button>
+        </template>
+        <fieldset class="formFieldSet">
+            <legend>合同基本信息</legend>
+            <a-form class="inlineForm">
+                <a-row :gutter="24">
+                    <a-col :span="12">
+                        <a-form-item label="合同编号">
+                            <span class="white">{{ formatValue(selectedRow.contractno) }}</span>
+                        </a-form-item>
+                    </a-col>
+                    <a-col :span="12">
+                        <a-form-item label="定价.
+                        类型">
+                            <span class="white">{{ getPriceTypeName(selectedRow.pricetype) }}</span>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
+                <a-row :gutter="24">
+                    <a-col :span="12">
+                        <a-form-item :label="selectedRow.contracttype===1? '采购方': '销售方'">
+                            <span class="white">{{ formatValue(selectedRow.accountname) }}</span>
+                        </a-form-item>
+                    </a-col>
+                    <a-col :span="12">
+                        <a-form-item label="现货品种">
+                            <span class="white">{{ formatValue(selectedRow.deliverygoodsname) }}</span>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
+                <a-row :gutter="24">
+                    <a-col :span="12">
+                        <a-form-item label="合同签署量">
+                            <span class="white">{{ formatValue(selectedRow.qty + selectedRow.enumdicname) }}</span>
+                        </a-form-item>
+                    </a-col>
+                    <a-col :span="12">
+                        <a-form-item label="合同暂定价">
+                            <span class="white">{{ formatValue(selectedRow.price) }}</span>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
+                <a-row :gutter="24">
+                    <a-col :span="12">
+                        <a-form-item label="点价合约">
+                            <span class="white">{{ formatValue(selectedRow.goodsname) }}</span>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
+            </a-form>
+        </fieldset>
+        <fieldset class="formFieldSet">
+            <legend>已登记信息</legend>
+            <a-form class="inlineForm">
+                <a-row :gutter="24">
+                    <a-col :span="12">
+                        <a-form-item label="已定价量">
+                            <span class="white">{{ selectedRow.pricedqty + selectedRow.enumdicname }}</span>
+                        </a-form-item>
+                    </a-col>
+                    <a-col :span="12">
+                        <a-form-item label="已点均价">
+                            <span class="white">{{ formatValue(selectedRow.pricedavg) }}</span>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
+            </a-form>
+        </fieldset>
+        <fieldset class="formFieldSet">
+            <legend>本次点价信息</legend>
+            <a-form class="inlineForm"
+                        ref="formRef"
+                        :model="formState"
+                        :rules="formStateRules">
+                <a-row :gutter="24">
+                    <a-col :span="12">
+                        <a-form-item label="点价价格"  name="PricedPrice">
+                            <a-input-number id="dialogInput"  style="width: 200px" v-model:value="formState.PricedPrice" :min="0" placeholder="请输入点价价格"/>
+                        </a-form-item>
+                    </a-col>
+                    <a-col :span="12">
+                        <a-form-item label="升贴水">
+                            <span class="white">{{ formatValue(selectedRow.pricemove) }}</span>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
 
-  </a-modal>
+                <a-row :gutter="24">
+                    <a-col :span="12">
+                        <a-form-item label="商品价格">
+                            <span class="white">{{ Number(selectedRow.pricemove) + Number(formState.PricedPrice) }}</span>
+                        </a-form-item>
+                    </a-col>
+                    <a-col :span="12">
+                        <a-form-item label="点价数量" name="PricedQty">
+                            <a-input-number id="dialogInput"  style="width: 200px" v-model:value="formState.PricedQty" :min="0" :max="selectedRow.unpricedqty" placeholder="请输入点价数量"/>
+                            <span class="white">未定价量{{selectedRow.unpricedqty}}{{selectedRow.enumdicname}} </span>
+                            <span class="white" @click="formState.PricedQty = selectedRow.unpricedqty"> 全部登记</span>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
+
+                <a-row :gutter="24">
+                    <a-col :span="12">
+                        <a-form-item label="点价金额">
+                            <span class="white">{{( Number(selectedRow.pricemove) + Number(formState.PricedPrice)) * formState.PricedQty }}</span>
+                        </a-form-item>
+                    </a-col>
+                </a-row>
+            </a-form>
+        </fieldset>
+    </a-modal>
 </template>
 
 <script lang="ts">
-import { defineComponent, ref } from 'vue';
-import { closeModal } from '@/common/setup/modal/index';
+import {defineComponent, PropType, reactive, ref,unref} from 'vue';
+import {closeModal} from '@/common/setup/modal/index';
+import {formatValue} from "@/common/methods";
+import {Ermcp3SellBuyContract} from "@/services/go/ermcp/purchase/interface";
+import {getPriceTypeName} from "@/views/business/purchase/setup";
+import { operationContractReq } from '@/services/proto/contract';
+import { message } from 'ant-design-vue';
 
 export default defineComponent({
     name: 'purchase_pending_someprice',
     components: {},
-    setup() {
-        const { visible, cancel } = closeModal('purchase_pending_someprice');
+    props: {
+        selectedRow: {
+            type: Object as PropType<Ermcp3SellBuyContract>,
+            default: {},
+        },
+    },
+    setup(props) {
+        const {visible, cancel} = closeModal('purchase_pending_someprice');
         const loading = ref<boolean>(false);
+        function objectToUint8Array(data: object) {
+            const encode = encodeURI(JSON.stringify(data));// 对字符串进行编码
+            const base64String = btoa(encode);// 对编码的字符串转化base64
+            const padding = '='.repeat((4 - base64String.length % 4) % 4);
+            const base64 = (base64String + padding).replace(/\-/g, '+').replace(/_/g, '/');
+            const rawData = window.atob(base64);
+            const outputArray = new Uint8Array(rawData.length);
+            for (var i = 0; i < rawData.length; ++i) {
+                outputArray[i] = rawData.charCodeAt(i);
+            }
+            return outputArray;
+        }
+
+        const formRef = ref();
+        const formState = reactive({ PricedPrice: 0, PricedQty: 0 });
+        const numberIstrue = (rule: any, value: any) => {
+            if (!value) {
+                return Promise.reject(new Error('请输入正确的值'));
+            } else {
+                return Promise.resolve();
+            }
+        };
+        const formStateRules = {
+            PricedPrice: [{ required: true, validator: numberIstrue, trigger: 'blur', type: 'number' }],
+            PricedQty: [{ required: true, validator: numberIstrue, trigger: 'blur', type: 'number' }],
+        }
         function submit() {
-            loading.value = true;
-            setTimeout(() => {
-                loading.value = false;
-                cancel();
-            }, 2000);
+            const wrapEl = unref(formRef);
+            wrapEl.validate().then(() => {
+                loading.value = true;
+                console.log(objectToUint8Array(formState));
+                operationContractReq({
+                    OperateType: 1, // uint32 操作类型-1:登记2:确认3:拒绝4:撤销
+                    Info: {
+                        OperateApplyType: 1, // uint32 操作申请类型-1:点价2:结算3:款项4:发票
+                        RelatedID: 1, // uint64 现货合同ID(602+Unix秒时间戳(10位)+xxxxxx)
+                        DetailJson : objectToUint8Array(formState), // bytes 明细JSON {}
+                    }
+                }).then(()=>{
+                    message.success('登记成功!')
+                    loading.value = false;
+                    cancel();
+                }).catch(err=>{
+                    message.error(err)
+                    loading.value = false;
+                    cancel();
+                })
+            });
         }
+
         return {
             visible,
             cancel,
             submit,
             loading,
+            formRef,
+            formState,
+            formatValue,
+            formStateRules,
+            getPriceTypeName,
         };
     },
 });

+ 6 - 6
src/views/business/purchase/list/all/index.vue

@@ -26,17 +26,17 @@
       </a-table>
     </contextMenu>
     <!-- 详情 -->
-    <Detail />
+    <Detail  :selectedRow="selectedRow"/>
     <!-- 采购点价登记 -->
-    <SomePrice />
+    <SomePrice  :selectedRow="selectedRow"/>
     <!-- 交收登记 -->
-    <Settlement />
+    <Settlement  :selectedRow="selectedRow"/>
     <!-- 款项登记 -->
-    <Funds />
+    <Funds  :selectedRow="selectedRow"/>
     <!-- 发票登记 -->
-    <Invoice />
+    <Invoice  :selectedRow="selectedRow"/>
     <!-- 入库登记 -->
-    <Storage />
+    <Storage  :selectedRow="selectedRow"/>
   </div>
 </template>
 

+ 1 - 1
src/views/business/purchase/list/pending/index.vue

@@ -28,7 +28,7 @@
     <!-- 详情 -->
     <Detail :selectedRow="selectedRow" />
     <!-- 采购点价登记 -->
-    <SomePrice />
+    <SomePrice :selectedRow="selectedRow"/>
   </div>
 </template>
 

+ 11 - 8
src/views/information/spot-contract/components/add/index.vue

@@ -249,15 +249,16 @@
           <!-- 以下是点价的价格信息 start -->
           <template v-if="formState.PriceType === 2 || formState.PriceType === 3">
             <a-col :span="12">
-              <a-form-item label="点价合约">
+              <a-form-item label="点价合约"
+                           name="GoodsID">
                 <a-select class="inlineFormSelect"
+                          v-model:value="formState.GoodsID"
                           style="width: 200px"
                           placeholder="请选择点价合约">
-                  <a-select-option value="1">
-                    合约一
-                  </a-select-option>
-                  <a-select-option value="2">
-                    合约二
+                  <a-select-option v-for="item in goodsList"
+                                   :key="item.goodsid"
+                                   :value="item.goodsid">
+                    {{item.goodsname}}
                   </a-select-option>
                 </a-select>
               </a-form-item>
@@ -432,6 +433,7 @@ import { closeModal } from '@/common/setup/modal/index';
 import { initData } from '@/common/methods';
 import { handleFromState, handleContract, handlevalidate, handleDeliveryGoods, handlePrice, handleDate } from './setup';
 import { getUserName } from '@/services/bus/user';
+import { getGoodsList } from '@/services/bus/goods';
 
 export default defineComponent({
     name: 'add-spot-contract',
@@ -469,6 +471,8 @@ export default defineComponent({
         const { priceType, payCurrency, payCurrencyUnit, parCurrencyChange } = handlePrice(formState);
         // 日期
         const { deliveryDate, disabledDate } = handleDate();
+        // 现货商品列表
+        const goodsList = getGoodsList();
         function submit() {
             loading.value = true;
             setTimeout(() => {
@@ -506,6 +510,7 @@ export default defineComponent({
             getUserName,
             deliveryDate,
             disabledDate,
+            goodsList,
         };
     },
 });
@@ -513,7 +518,5 @@ export default defineComponent({
 
 <style lang="less">
 .add-spot-contract {
- 
-
 }
 </style>;

+ 1 - 1
src/views/information/spot-contract/components/add/interface.ts

@@ -19,7 +19,7 @@ export interface FormState {
     Amount: number | null// double 金额[1:一口价、3:暂定价]
     DeliveryStartDate: string// string 交收期(开始)
     DeliveryEndDate: string // string 交收期(结束)
-    // GoodsID: number // uint64 点价合约ID-0:为现货,其它为期货商品合约ID[2:点价3:暂定价]
+    GoodsID: number // uint64 点价合约ID-0:为现货,其它为期货商品合约ID[2:点价3:暂定价]
     // PriceMove: number// double 升贴水[2:点价3:暂定价]
     // StartDate: string // string 点价开始日期[2:点价3:暂定价]
     // EndDate: string // string 点价结束日期[2:点价3:暂定价]

+ 1 - 0
src/views/information/spot-contract/components/add/setup.ts

@@ -35,6 +35,7 @@ export function handleFromState() {
         AccountID: undefined, // uint64 期货账户ID
         Remark: '', // string 合同备注
         CurrencyID: undefined, // 结算币种ID
+        GoodsID: undefined, // uint64 点价合约ID-0:为现货,其它为期货商品合约ID[2:点价3:暂定价]
     })
     // 业务类型
     const businessType = [