From 0097910cb228aafcb4e8587d2b29f33de1a39b82 Mon Sep 17 00:00:00 2001 From: maslow Date: Sat, 16 Oct 2021 02:50:19 +0800 Subject: [PATCH] feat(sys-client): add ejson ObjectId & Binaray type support to dbm; --- packages/system-client/.vscode/settings.json | 2 +- packages/system-client/package-lock.json | 64 ++++++++++++++++--- packages/system-client/package.json | 1 + .../src/views/database/collections.vue | 18 ++++-- 4 files changed, 70 insertions(+), 15 deletions(-) diff --git a/packages/system-client/.vscode/settings.json b/packages/system-client/.vscode/settings.json index 7f12680804..ba027d24d7 100644 --- a/packages/system-client/.vscode/settings.json +++ b/packages/system-client/.vscode/settings.json @@ -48,7 +48,7 @@ "typescript.updateImportsOnFileMove.enabled": "always", // json "[json]": { - "editor.defaultFormatter": "dbaeumer.vscode-eslint" + "editor.defaultFormatter": "vscode.json-language-features" }, "cSpell.words": [ "cloudfunction" diff --git a/packages/system-client/package-lock.json b/packages/system-client/package-lock.json index d1b82574e3..105e799e79 100644 --- a/packages/system-client/package-lock.json +++ b/packages/system-client/package-lock.json @@ -9,6 +9,7 @@ "license": "MIT", "dependencies": { "axios": "^0.21.1", + "bson": "^4.5.3", "clipboard": "2.0.4", "element-ui": "2.13.2", "file-saver": "2.0.1", @@ -6306,8 +6307,7 @@ "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "node_modules/batch": { "version": "0.6.1", @@ -6646,6 +6646,40 @@ "node-int64": "^0.4.0" } }, + "node_modules/bson": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/bson/-/bson-4.5.3.tgz", + "integrity": "sha512-qVX7LX79Mtj7B3NPLzCfBiCP6RAsjiV8N63DjlaVVpZW+PFoDTxQ4SeDbSpcqgE6mXksM5CAwZnXxxxn/XwC0g==", + "dependencies": { + "buffer": "^5.6.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "node_modules/buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -11613,8 +11647,7 @@ "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "node_modules/iferr": { "version": "0.1.5", @@ -29169,8 +29202,7 @@ "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "batch": { "version": "0.6.1", @@ -29486,6 +29518,23 @@ "node-int64": "^0.4.0" } }, + "bson": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/bson/-/bson-4.5.3.tgz", + "integrity": "sha512-qVX7LX79Mtj7B3NPLzCfBiCP6RAsjiV8N63DjlaVVpZW+PFoDTxQ4SeDbSpcqgE6mXksM5CAwZnXxxxn/XwC0g==", + "requires": { + "buffer": "^5.6.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -33663,8 +33712,7 @@ "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "iferr": { "version": "0.1.5", diff --git a/packages/system-client/package.json b/packages/system-client/package.json index 44d297b2ce..aa48ea677c 100644 --- a/packages/system-client/package.json +++ b/packages/system-client/package.json @@ -17,6 +17,7 @@ }, "dependencies": { "axios": "^0.21.1", + "bson": "^4.5.3", "clipboard": "2.0.4", "element-ui": "2.13.2", "file-saver": "2.0.1", diff --git a/packages/system-client/src/views/database/collections.vue b/packages/system-client/src/views/database/collections.vue index 9654ec887d..fd89eea74c 100644 --- a/packages/system-client/src/views/database/collections.vue +++ b/packages/system-client/src/views/database/collections.vue @@ -22,7 +22,7 @@ -
+
{{ item }}
@@ -158,6 +158,7 @@ import { getCollections, getCollectionIndexes, deleCollectionIndex, setCollectio import JsonEditor from '@/components/JsonEditor/param' import MiniPagination from '@/components/Pagination/mini' import { showError, showSuccess } from '@/utils/show' +import { EJSON } from 'bson' const db = getDb() @@ -334,20 +335,25 @@ export default { this.getList() }, handleEditRecord(val) { - this.record = val + this.record = EJSON.serialize(val) this.formMode = 'edit' this.showDocEditorForm = true }, async updateDocument() { await this.$confirm('确认要更新数据?', '确认') - const record = typeof this.record === 'string' ? JSON.parse(this.record) : this.record - const { _id, ...params } = record + // 将 [EJSON字符串] 解析为 [JSON对象] + const parsed = typeof this.record === 'string' ? JSON.parse(this.record) : this.record + + // 将 [JSON对象] 序列化为 [EJSON对象] + const serialized = EJSON.serialize(parsed) + const { _id, ...params } = serialized + if (!_id) return const r = await db .collection(this.collectionName) - .doc(_id) - .set({ ...params }) + .where({ _id }) + .update({ ...params }) if (r.error) { const message = typeof r.error !== 'string' ? JSON.stringify(r.error) : r.error