
diff --git a/gpt-vue/.eslintignore b/gpt-vue/.eslintignore
new file mode 100644
index 00000000..de4d1f00
--- /dev/null
+++ b/gpt-vue/.eslintignore
@@ -0,0 +1,2 @@
+dist
+node_modules
diff --git a/gpt-vue/.eslintrc.cjs b/gpt-vue/.eslintrc.cjs
new file mode 100644
index 00000000..4797699f
--- /dev/null
+++ b/gpt-vue/.eslintrc.cjs
@@ -0,0 +1,27 @@
+/* eslint-env node */
+require("@rushstack/eslint-patch/modern-module-resolution");
+
+module.exports = {
+ root: true,
+ extends: [
+ "plugin:vue/vue3-essential",
+ "eslint:recommended",
+ "@vue/eslint-config-typescript",
+ ],
+ parserOptions: {
+ ecmaVersion: "latest",
+ sourceType: "module",
+ parser: "@typescript-eslint/parser",
+ ecmaFeatures: {
+ jsx: true,
+ },
+ },
+ plugins: ["vue", "@typescript-eslint"],
+ rules: {
+ "prettier/prettier": "warn",
+ "@typescript-eslint/ban-ts-comment": "off",
+ "vue/multi-word-component-names": "off",
+ "@typescript-eslint/no-explicit-any": "off",
+ "no-undef": "off",
+ },
+};
diff --git a/gpt-vue/.prettierrc.json b/gpt-vue/.prettierrc.json
new file mode 100644
index 00000000..80f5ac6c
--- /dev/null
+++ b/gpt-vue/.prettierrc.json
@@ -0,0 +1,9 @@
+{
+ "printWidth": 100,
+ "tabWidth": 2,
+ "useTabs": false,
+ "singleQuote": false,
+ "semi": true,
+ "trailingComma": "es5",
+ "bracketSpacing": true
+}
diff --git a/gpt-vue/package.json b/gpt-vue/package.json
index 0f7c829c..8d00bafa 100644
--- a/gpt-vue/package.json
+++ b/gpt-vue/package.json
@@ -12,6 +12,16 @@
"author": "",
"license": "ISC",
"devDependencies": {
+ "@rushstack/eslint-patch": "^1.3.3",
+ "@tsconfig/node20": "^20.1.2",
+ "@types/node": "^20.11.10",
+ "@vue/eslint-config-typescript": "^12.0.0",
+ "@vue/tsconfig": "^0.5.1",
+ "eslint": "^8.49.0",
+ "eslint-config-prettier": "^9.1.0",
+ "eslint-plugin-prettier": "^5.1.3",
+ "eslint-plugin-vue": "^9.17.0",
+ "prettier": "^3.2.5",
"rimraf": "^5.0.5"
}
}
diff --git a/gpt-vue/packages/package.json b/gpt-vue/packages/package.json
index 4c28f6c5..7807fb71 100644
--- a/gpt-vue/packages/package.json
+++ b/gpt-vue/packages/package.json
@@ -12,5 +12,8 @@
"dependencies": {
"axios": "^1.6.7",
"uuid": "^9.0.1"
+ },
+ "devDependencies": {
+ "@types/uuid": "^9.0.8"
}
}
diff --git a/gpt-vue/packages/utils/index.ts b/gpt-vue/packages/utils/index.ts
index 937cdd0d..698da4d8 100644
--- a/gpt-vue/packages/utils/index.ts
+++ b/gpt-vue/packages/utils/index.ts
@@ -2,4 +2,56 @@ import { v4 as uuidV4 } from "uuid";
export const getUUID = () => {
return uuidV4();
-};
\ No newline at end of file
+};
+
+// 格式化日期
+export function dateFormat(timestamp: number, format?: string) {
+ if (!timestamp) {
+ return '';
+ } else if (timestamp < 9680917502) {
+ timestamp = timestamp * 1000;
+ }
+ let year, month, day, HH, mm, ss;
+ let time = new Date(timestamp);
+ let timeDate;
+ year = time.getFullYear(); // 年
+ month = time.getMonth() + 1; // 月
+ day = time.getDate(); // 日
+ HH = time.getHours(); // 时
+ mm = time.getMinutes(); // 分
+ ss = time.getSeconds(); // 秒
+
+ month = month < 10 ? '0' + month : month;
+ day = day < 10 ? '0' + day : day;
+ HH = HH < 10 ? '0' + HH : HH; // 时
+ mm = mm < 10 ? '0' + mm : mm; // 分
+ ss = ss < 10 ? '0' + ss : ss; // 秒
+
+ switch (format) {
+ case 'yyyy':
+ timeDate = String(year);
+ break;
+ case 'yyyy-MM':
+ timeDate = year + '-' + month;
+ break;
+ case 'yyyy-MM-dd':
+ timeDate = year + '-' + month + '-' + day;
+ break;
+ case 'yyyy/MM/dd':
+ timeDate = year + '/' + month + '/' + day;
+ break;
+ case 'yyyy-MM-dd HH:mm:ss':
+ timeDate = year + '-' + month + '-' + day + ' ' + HH + ':' + mm + ':' + ss;
+ break;
+ case 'HH:mm:ss':
+ timeDate = HH + ':' + mm + ':' + ss;
+ break;
+ case 'MM':
+ timeDate = String(month);
+ break;
+ default:
+ timeDate = year + '-' + month + '-' + day + ' ' + HH + ':' + mm + ':' + ss;
+ break;
+ }
+ return timeDate;
+}
\ No newline at end of file
diff --git a/gpt-vue/pnpm-lock.yaml b/gpt-vue/pnpm-lock.yaml
index 1973f554..3cca3413 100644
--- a/gpt-vue/pnpm-lock.yaml
+++ b/gpt-vue/pnpm-lock.yaml
@@ -8,6 +8,36 @@ importers:
.:
devDependencies:
+ '@rushstack/eslint-patch':
+ specifier: ^1.3.3
+ version: 1.7.2
+ '@tsconfig/node20':
+ specifier: ^20.1.2
+ version: 20.1.2
+ '@types/node':
+ specifier: ^20.11.10
+ version: 20.11.24
+ '@vue/eslint-config-typescript':
+ specifier: ^12.0.0
+ version: 12.0.0(eslint-plugin-vue@9.22.0)(eslint@8.57.0)(typescript@5.3.3)
+ '@vue/tsconfig':
+ specifier: ^0.5.1
+ version: 0.5.1
+ eslint:
+ specifier: ^8.49.0
+ version: 8.57.0
+ eslint-config-prettier:
+ specifier: ^9.1.0
+ version: 9.1.0(eslint@8.57.0)
+ eslint-plugin-prettier:
+ specifier: ^5.1.3
+ version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5)
+ eslint-plugin-vue:
+ specifier: ^9.17.0
+ version: 9.22.0(eslint@8.57.0)
+ prettier:
+ specifier: ^3.2.5
+ version: 3.2.5
rimraf:
specifier: ^5.0.5
version: 5.0.5
@@ -22,6 +52,11 @@ importers:
specifier: ^9.0.1
version: 9.0.1
+ devDependencies:
+ '@types/uuid':
+ specifier: ^9.0.8
+ version: 9.0.8
+
projects/vue-admin:
dependencies:
'@arco-design/web-vue':
@@ -30,6 +65,9 @@ importers:
'@gpt-vue/packages':
specifier: workspace:^1.0.0
version: link:../../packages
+ md-editor-v3:
+ specifier: ^2.2.1
+ version: 2.11.3(vue@3.4.21)
pinia:
specifier: ^2.1.7
version: 2.1.7(typescript@5.3.3)(vue@3.4.21)
@@ -840,6 +878,11 @@ packages:
dev: true
optional: true
+ /@pkgr/core@0.1.1:
+ resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==}
+ engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
+ dev: true
+
/@rollup/rollup-android-arm-eabi@4.12.0:
resolution: {integrity: sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==}
cpu: [arm]
@@ -975,6 +1018,10 @@ packages:
resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==}
dev: true
+ /@types/uuid@9.0.8:
+ resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==}
+ dev: true
+
/@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.3.3):
resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==}
engines: {node: ^16.0.0 || >=18.0.0}
@@ -1661,6 +1708,36 @@ packages:
engines: {node: '>=10'}
dev: true
+ /eslint-config-prettier@9.1.0(eslint@8.57.0):
+ resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==}
+ hasBin: true
+ peerDependencies:
+ eslint: '>=7.0.0'
+ dependencies:
+ eslint: 8.57.0
+ dev: true
+
+ /eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5):
+ resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ '@types/eslint': '>=8.0.0'
+ eslint: '>=8.0.0'
+ eslint-config-prettier: '*'
+ prettier: '>=3.0.0'
+ peerDependenciesMeta:
+ '@types/eslint':
+ optional: true
+ eslint-config-prettier:
+ optional: true
+ dependencies:
+ eslint: 8.57.0
+ eslint-config-prettier: 9.1.0(eslint@8.57.0)
+ prettier: 3.2.5
+ prettier-linter-helpers: 1.0.0
+ synckit: 0.8.8
+ dev: true
+
/eslint-plugin-vue@9.22.0(eslint@8.57.0):
resolution: {integrity: sha512-7wCXv5zuVnBtZE/74z4yZ0CM8AjH6bk4MQGm7hZjUC2DBppKU5ioeOk5LGSg/s9a1ZJnIsdPLJpXnu1Rc+cVHg==}
engines: {node: ^14.17.0 || >=16.0.0}
@@ -1779,6 +1856,10 @@ packages:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
dev: true
+ /fast-diff@1.3.0:
+ resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==}
+ dev: true
+
/fast-glob@3.3.2:
resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
engines: {node: '>=8.6.0'}
@@ -2189,6 +2270,14 @@ packages:
dev: true
optional: true
+ /md-editor-v3@2.11.3(vue@3.4.21):
+ resolution: {integrity: sha512-SCfS4qMy0HldFdplcIGUMCpSv8qkNWkYShSdv2gTHeViKduA34zV89BOrWcqls2EZSlvt2n3G7nHRzYUvJjDKw==}
+ peerDependencies:
+ vue: ^3.2.47
+ dependencies:
+ vue: 3.4.21(typescript@5.3.3)
+ dev: false
+
/memorystream@0.3.1:
resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==}
engines: {node: '>= 0.10.0'}
@@ -2442,6 +2531,19 @@ packages:
engines: {node: '>= 0.8.0'}
dev: true
+ /prettier-linter-helpers@1.0.0:
+ resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ fast-diff: 1.3.0
+ dev: true
+
+ /prettier@3.2.5:
+ resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==}
+ engines: {node: '>=14'}
+ hasBin: true
+ dev: true
+
/proxy-from-env@1.1.0:
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
dev: false
@@ -2663,6 +2765,14 @@ packages:
resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==}
dev: true
+ /synckit@0.8.8:
+ resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ dependencies:
+ '@pkgr/core': 0.1.1
+ tslib: 2.6.2
+ dev: true
+
/text-table@0.2.0:
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
dev: true
diff --git a/gpt-vue/projects/vue-admin/.eslintrc.cjs b/gpt-vue/projects/vue-admin/.eslintrc.cjs
index ade85716..3ee7977d 100644
--- a/gpt-vue/projects/vue-admin/.eslintrc.cjs
+++ b/gpt-vue/projects/vue-admin/.eslintrc.cjs
@@ -1,14 +1,28 @@
/* eslint-env node */
-require('@rushstack/eslint-patch/modern-module-resolution')
+require("@rushstack/eslint-patch/modern-module-resolution");
module.exports = {
root: true,
- 'extends': [
- 'plugin:vue/vue3-essential',
- 'eslint:recommended',
- '@vue/eslint-config-typescript'
+ extends: [
+ "plugin:vue/vue3-essential",
+ "eslint:recommended",
+ "@vue/eslint-config-typescript",
+ "@vue/eslint-config-prettier",
],
parserOptions: {
- ecmaVersion: 'latest'
- }
-}
+ ecmaVersion: "latest",
+ sourceType: "module",
+ parser: "@typescript-eslint/parser",
+ ecmaFeatures: {
+ jsx: true,
+ },
+ },
+ plugins: ["vue", "@typescript-eslint"],
+ rules: {
+ "prettier/prettier": "warn",
+ "@typescript-eslint/ban-ts-comment": "off",
+ "vue/multi-word-component-names": "off",
+ "@typescript-eslint/no-explicit-any": "off",
+ "no-undef": "off",
+ },
+};
diff --git a/gpt-vue/projects/vue-admin/.prettierrc.json b/gpt-vue/projects/vue-admin/.prettierrc.json
new file mode 100644
index 00000000..80f5ac6c
--- /dev/null
+++ b/gpt-vue/projects/vue-admin/.prettierrc.json
@@ -0,0 +1,9 @@
+{
+ "printWidth": 100,
+ "tabWidth": 2,
+ "useTabs": false,
+ "singleQuote": false,
+ "semi": true,
+ "trailingComma": "es5",
+ "bracketSpacing": true
+}
diff --git a/gpt-vue/projects/vue-admin/env.d.ts b/gpt-vue/projects/vue-admin/env.d.ts
index 11f02fe2..b77bd43e 100644
--- a/gpt-vue/projects/vue-admin/env.d.ts
+++ b/gpt-vue/projects/vue-admin/env.d.ts
@@ -1 +1,9 @@
///