提交 63ad166f authored 作者: 王鹏飞's avatar 王鹏飞

chore: add vite-plugin-checker; fix eslint error

上级 25ad89c0
...@@ -51,6 +51,7 @@ ...@@ -51,6 +51,7 @@
"typescript": "~5.6.3", "typescript": "~5.6.3",
"unplugin-auto-import": "^0.18.3", "unplugin-auto-import": "^0.18.3",
"vite": "^5.4.10", "vite": "^5.4.10",
"vite-plugin-checker": "^0.8.0",
"vite-plugin-mkcert": "^1.17.6", "vite-plugin-mkcert": "^1.17.6",
"vue-tsc": "^2.1.10" "vue-tsc": "^2.1.10"
} }
...@@ -85,8 +86,6 @@ ...@@ -85,8 +86,6 @@
"resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.18.6.tgz", "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.18.6.tgz",
"integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
"dev": true, "dev": true,
"optional": true,
"peer": true,
"dependencies": { "dependencies": {
"@babel/highlight": "^7.18.6" "@babel/highlight": "^7.18.6"
}, },
...@@ -381,8 +380,6 @@ ...@@ -381,8 +380,6 @@
"resolved": "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.18.6.tgz", "resolved": "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.18.6.tgz",
"integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
"dev": true, "dev": true,
"optional": true,
"peer": true,
"dependencies": { "dependencies": {
"@babel/helper-validator-identifier": "^7.18.6", "@babel/helper-validator-identifier": "^7.18.6",
"chalk": "^2.0.0", "chalk": "^2.0.0",
...@@ -397,8 +394,6 @@ ...@@ -397,8 +394,6 @@
"resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz", "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true, "dev": true,
"optional": true,
"peer": true,
"dependencies": { "dependencies": {
"color-convert": "^1.9.0" "color-convert": "^1.9.0"
}, },
...@@ -411,8 +406,6 @@ ...@@ -411,8 +406,6 @@
"resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz", "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true, "dev": true,
"optional": true,
"peer": true,
"dependencies": { "dependencies": {
"ansi-styles": "^3.2.1", "ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5", "escape-string-regexp": "^1.0.5",
...@@ -427,8 +420,6 @@ ...@@ -427,8 +420,6 @@
"resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz", "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true, "dev": true,
"optional": true,
"peer": true,
"dependencies": { "dependencies": {
"color-name": "1.1.3" "color-name": "1.1.3"
} }
...@@ -437,17 +428,13 @@ ...@@ -437,17 +428,13 @@
"version": "1.1.3", "version": "1.1.3",
"resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz", "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
"dev": true, "dev": true
"optional": true,
"peer": true
}, },
"node_modules/@babel/highlight/node_modules/escape-string-regexp": { "node_modules/@babel/highlight/node_modules/escape-string-regexp": {
"version": "1.0.5", "version": "1.0.5",
"resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
"dev": true, "dev": true,
"optional": true,
"peer": true,
"engines": { "engines": {
"node": ">=0.8.0" "node": ">=0.8.0"
} }
...@@ -457,8 +444,6 @@ ...@@ -457,8 +444,6 @@
"resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz", "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true, "dev": true,
"optional": true,
"peer": true,
"engines": { "engines": {
"node": ">=4" "node": ">=4"
} }
...@@ -468,8 +453,6 @@ ...@@ -468,8 +453,6 @@
"resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz", "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true, "dev": true,
"optional": true,
"peer": true,
"dependencies": { "dependencies": {
"has-flag": "^3.0.0" "has-flag": "^3.0.0"
}, },
...@@ -3424,6 +3407,45 @@ ...@@ -3424,6 +3407,45 @@
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/ansi-escapes": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
"integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"type-fest": "^0.21.3"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/ansi-escapes/node_modules/type-fest": {
"version": "0.21.3",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
"integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
"dev": true,
"license": "(MIT OR CC0-1.0)",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/ansi-regex": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/ansi-styles": { "node_modules/ansi-styles": {
"version": "4.3.0", "version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
...@@ -3451,8 +3473,7 @@ ...@@ -3451,8 +3473,7 @@
"version": "3.1.3", "version": "3.1.3",
"resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz", "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz",
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"optional": true, "devOptional": true,
"peer": true,
"dependencies": { "dependencies": {
"normalize-path": "^3.0.0", "normalize-path": "^3.0.0",
"picomatch": "^2.0.4" "picomatch": "^2.0.4"
...@@ -3715,8 +3736,7 @@ ...@@ -3715,8 +3736,7 @@
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz", "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz",
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
"optional": true, "devOptional": true,
"peer": true,
"engines": { "engines": {
"node": ">=8" "node": ">=8"
} }
...@@ -4109,8 +4129,7 @@ ...@@ -4109,8 +4129,7 @@
"version": "3.6.0", "version": "3.6.0",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
"integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
"optional": true, "devOptional": true,
"peer": true,
"dependencies": { "dependencies": {
"anymatch": "~3.1.2", "anymatch": "~3.1.2",
"braces": "~3.0.2", "braces": "~3.0.2",
...@@ -4134,8 +4153,7 @@ ...@@ -4134,8 +4153,7 @@
"version": "5.1.2", "version": "5.1.2",
"resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"optional": true, "devOptional": true,
"peer": true,
"dependencies": { "dependencies": {
"is-glob": "^4.0.1" "is-glob": "^4.0.1"
}, },
...@@ -5790,6 +5808,21 @@ ...@@ -5790,6 +5808,21 @@
"readable-stream": "^2.0.0" "readable-stream": "^2.0.0"
} }
}, },
"node_modules/fs-extra": {
"version": "11.2.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
"integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
"dev": true,
"license": "MIT",
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
"universalify": "^2.0.0"
},
"engines": {
"node": ">=14.14"
}
},
"node_modules/fs-minipass": { "node_modules/fs-minipass": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmmirror.com/fs-minipass/-/fs-minipass-2.1.0.tgz", "resolved": "https://registry.npmmirror.com/fs-minipass/-/fs-minipass-2.1.0.tgz",
...@@ -5838,6 +5871,7 @@ ...@@ -5838,6 +5871,7 @@
"version": "2.3.3", "version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"dev": true,
"hasInstallScript": true, "hasInstallScript": true,
"optional": true, "optional": true,
"os": [ "os": [
...@@ -6310,8 +6344,7 @@ ...@@ -6310,8 +6344,7 @@
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"optional": true, "devOptional": true,
"peer": true,
"dependencies": { "dependencies": {
"binary-extensions": "^2.0.0" "binary-extensions": "^2.0.0"
}, },
...@@ -6482,9 +6515,7 @@ ...@@ -6482,9 +6515,7 @@
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz",
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
"dev": true, "dev": true
"optional": true,
"peer": true
}, },
"node_modules/js-yaml": { "node_modules/js-yaml": {
"version": "4.1.0", "version": "4.1.0",
...@@ -6549,6 +6580,19 @@ ...@@ -6549,6 +6580,19 @@
"node": ">=6" "node": ">=6"
} }
}, },
"node_modules/jsonfile": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"universalify": "^2.0.0"
},
"optionalDependencies": {
"graceful-fs": "^4.1.6"
}
},
"node_modules/jspdf": { "node_modules/jspdf": {
"version": "2.5.1", "version": "2.5.1",
"resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.5.1.tgz", "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.5.1.tgz",
...@@ -7294,8 +7338,7 @@ ...@@ -7294,8 +7338,7 @@
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"optional": true, "devOptional": true,
"peer": true,
"engines": { "engines": {
"node": ">=0.10.0" "node": ">=0.10.0"
} }
...@@ -7305,6 +7348,19 @@ ...@@ -7305,6 +7348,19 @@
"resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", "resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz",
"integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==" "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw=="
}, },
"node_modules/npm-run-path": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
"integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
"dev": true,
"license": "MIT",
"dependencies": {
"path-key": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/nth-check": { "node_modules/nth-check": {
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
...@@ -8109,8 +8165,7 @@ ...@@ -8109,8 +8165,7 @@
"version": "3.6.0", "version": "3.6.0",
"resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"optional": true, "devOptional": true,
"peer": true,
"dependencies": { "dependencies": {
"picomatch": "^2.2.1" "picomatch": "^2.2.1"
}, },
...@@ -8818,6 +8873,19 @@ ...@@ -8818,6 +8873,19 @@
"safe-buffer": "~5.1.0" "safe-buffer": "~5.1.0"
} }
}, },
"node_modules/strip-ansi": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/strip-json-comments": { "node_modules/strip-json-comments": {
"version": "3.1.1", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
...@@ -9069,6 +9137,13 @@ ...@@ -9069,6 +9137,13 @@
"node": ">=0.6.0" "node": ">=0.6.0"
} }
}, },
"node_modules/tiny-invariant": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz",
"integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==",
"dev": true,
"license": "MIT"
},
"node_modules/tinymce": { "node_modules/tinymce": {
"version": "6.3.1", "version": "6.3.1",
"resolved": "https://registry.npmmirror.com/tinymce/-/tinymce-6.3.1.tgz", "resolved": "https://registry.npmmirror.com/tinymce/-/tinymce-6.3.1.tgz",
...@@ -9515,6 +9590,16 @@ ...@@ -9515,6 +9590,16 @@
"dev": true, "dev": true,
"license": "ISC" "license": "ISC"
}, },
"node_modules/universalify": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
"integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 10.0.0"
}
},
"node_modules/unplugin": { "node_modules/unplugin": {
"version": "1.15.0", "version": "1.15.0",
"resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.15.0.tgz", "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.15.0.tgz",
...@@ -9883,6 +9968,100 @@ ...@@ -9883,6 +9968,100 @@
} }
} }
}, },
"node_modules/vite-plugin-checker": {
"version": "0.8.0",
"resolved": "https://registry.npmjs.org/vite-plugin-checker/-/vite-plugin-checker-0.8.0.tgz",
"integrity": "sha512-UA5uzOGm97UvZRTdZHiQVYFnd86AVn8EVaD4L3PoVzxH+IZSfaAw14WGFwX9QS23UW3lV/5bVKZn6l0w+q9P0g==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.12.13",
"ansi-escapes": "^4.3.0",
"chalk": "^4.1.1",
"chokidar": "^3.5.1",
"commander": "^8.0.0",
"fast-glob": "^3.2.7",
"fs-extra": "^11.1.0",
"npm-run-path": "^4.0.1",
"strip-ansi": "^6.0.0",
"tiny-invariant": "^1.1.0",
"vscode-languageclient": "^7.0.0",
"vscode-languageserver": "^7.0.0",
"vscode-languageserver-textdocument": "^1.0.1",
"vscode-uri": "^3.0.2"
},
"engines": {
"node": ">=14.16"
},
"peerDependencies": {
"@biomejs/biome": ">=1.7",
"eslint": ">=7",
"meow": "^9.0.0",
"optionator": "^0.9.1",
"stylelint": ">=13",
"typescript": "*",
"vite": ">=2.0.0",
"vls": "*",
"vti": "*",
"vue-tsc": "~2.1.6"
},
"peerDependenciesMeta": {
"@biomejs/biome": {
"optional": true
},
"eslint": {
"optional": true
},
"meow": {
"optional": true
},
"optionator": {
"optional": true
},
"stylelint": {
"optional": true
},
"typescript": {
"optional": true
},
"vls": {
"optional": true
},
"vti": {
"optional": true
},
"vue-tsc": {
"optional": true
}
}
},
"node_modules/vite-plugin-checker/node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/vite-plugin-checker/node_modules/commander": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
"integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 12"
}
},
"node_modules/vite-plugin-mkcert": { "node_modules/vite-plugin-mkcert": {
"version": "1.17.6", "version": "1.17.6",
"resolved": "https://registry.npmjs.org/vite-plugin-mkcert/-/vite-plugin-mkcert-1.17.6.tgz", "resolved": "https://registry.npmjs.org/vite-plugin-mkcert/-/vite-plugin-mkcert-1.17.6.tgz",
...@@ -9908,6 +10087,69 @@ ...@@ -9908,6 +10087,69 @@
"integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
"peer": true "peer": true
}, },
"node_modules/vscode-jsonrpc": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz",
"integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8.0.0 || >=10.0.0"
}
},
"node_modules/vscode-languageclient": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz",
"integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==",
"dev": true,
"license": "MIT",
"dependencies": {
"minimatch": "^3.0.4",
"semver": "^7.3.4",
"vscode-languageserver-protocol": "3.16.0"
},
"engines": {
"vscode": "^1.52.0"
}
},
"node_modules/vscode-languageserver": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz",
"integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==",
"dev": true,
"license": "MIT",
"dependencies": {
"vscode-languageserver-protocol": "3.16.0"
},
"bin": {
"installServerIntoExtension": "bin/installServerIntoExtension"
}
},
"node_modules/vscode-languageserver-protocol": {
"version": "3.16.0",
"resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz",
"integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==",
"dev": true,
"license": "MIT",
"dependencies": {
"vscode-jsonrpc": "6.0.0",
"vscode-languageserver-types": "3.16.0"
}
},
"node_modules/vscode-languageserver-textdocument": {
"version": "1.0.12",
"resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz",
"integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==",
"dev": true,
"license": "MIT"
},
"node_modules/vscode-languageserver-types": {
"version": "3.16.0",
"resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz",
"integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==",
"dev": true,
"license": "MIT"
},
"node_modules/vscode-uri": { "node_modules/vscode-uri": {
"version": "3.0.8", "version": "3.0.8",
"resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz",
......
...@@ -58,6 +58,7 @@ ...@@ -58,6 +58,7 @@
"typescript": "~5.6.3", "typescript": "~5.6.3",
"unplugin-auto-import": "^0.18.3", "unplugin-auto-import": "^0.18.3",
"vite": "^5.4.10", "vite": "^5.4.10",
"vite-plugin-checker": "^0.8.0",
"vite-plugin-mkcert": "^1.17.6", "vite-plugin-mkcert": "^1.17.6",
"vue-tsc": "^2.1.10" "vue-tsc": "^2.1.10"
} }
......
<script setup lang="ts"> <script setup lang="ts">
import { Delete, Edit, MoreFilled, EditPen, User, Avatar, PieChart, UserFilled, View } from '@element-plus/icons-vue' import { Delete, MoreFilled, EditPen, User, Avatar, PieChart, UserFilled, View } from '@element-plus/icons-vue'
import { ElMessageBox, ElMessage } from 'element-plus' import { ElMessageBox, ElMessage } from 'element-plus'
import Icon from '@/components/ConnectionIcon.vue' import Icon from '@/components/ConnectionIcon.vue'
import { deleteConnection } from '../api' import { deleteConnection } from '../api'
...@@ -27,7 +27,7 @@ const emits = defineEmits([ ...@@ -27,7 +27,7 @@ const emits = defineEmits([
'generateUserData', 'generateUserData',
'generateEventData', 'generateEventData',
'viewDataProgress', 'viewDataProgress',
'handleStudentFollow' 'handleStudentFollow',
]) ])
// 删除 // 删除
...@@ -49,7 +49,7 @@ const edit = function () { ...@@ -49,7 +49,7 @@ const edit = function () {
} }
const iconMap: Record<string, string> = { const iconMap: Record<string, string> = {
'13': '99', '13': '99',
'14': '100' '14': '100',
} }
const generateUserData = function () { const generateUserData = function () {
...@@ -81,7 +81,12 @@ const handleStudentFollow = function () { ...@@ -81,7 +81,12 @@ const handleStudentFollow = function () {
<el-icon size="20" color="#333"><Delete /></el-icon> <el-icon size="20" color="#333"><Delete /></el-icon>
</div> --> </div> -->
<div class="connect-item__icon"> <div class="connect-item__icon">
<Icon w="40" h="40" :multiColor="true" class="svg" :name="data.type === '15' ? 'mall' : iconMap[data.type] || data.type"></Icon> <Icon
w="40"
h="40"
:multiColor="true"
class="svg"
:name="data.type === '15' ? 'mall' : iconMap[data.type] || data.type"></Icon>
</div> </div>
</div> </div>
<div class="connect-item_bottom"> <div class="connect-item_bottom">
......
<script setup lang="ts"> <script setup lang="ts">
import { ElMessage, ElMessageBox } from 'element-plus'
import type { OtherFields } from '../types' import type { OtherFields } from '../types'
import { RemoveFilled, CirclePlusFilled } from '@element-plus/icons-vue' import { RemoveFilled, CirclePlusFilled } from '@element-plus/icons-vue'
...@@ -14,7 +13,7 @@ const fieldsType: any = { ...@@ -14,7 +13,7 @@ const fieldsType: any = {
2: '整数', 2: '整数',
3: '数字', 3: '数字',
4: '日期', 4: '日期',
5: '时间' 5: '时间',
} }
const ruleTips: any = { const ruleTips: any = {
...@@ -22,7 +21,7 @@ const ruleTips: any = { ...@@ -22,7 +21,7 @@ const ruleTips: any = {
2: '最大位数', 2: '最大位数',
3: '小数点后位数', 3: '小数点后位数',
4: '格式', 4: '格式',
5: '格式' 5: '格式',
} }
const add = function (item: any) { const add = function (item: any) {
...@@ -35,15 +34,19 @@ const remove = function (item: any, index: number) { ...@@ -35,15 +34,19 @@ const remove = function (item: any, index: number) {
</script> </script>
<template> <template>
<el-form-item v-for="item in props.data" :label="item.name"> <el-form-item v-for="(item, index) in props.data" :label="item.name" :key="index">
<div> <div>
<el-radio-group v-model="item.rule.type"> <el-radio-group v-model="item.rule.type">
<el-radio :value="2">指定随机</el-radio> <el-radio :value="2">指定随机</el-radio>
<el-radio :value="1">固定</el-radio> <el-radio :value="1">固定</el-radio>
</el-radio-group> </el-radio-group>
<p class="specify-tips">字段类型:{{ fieldsType[item.type] }}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{ ruleTips[item.type] }}{{ item.format }}</p> <p class="specify-tips">
字段类型:{{ fieldsType[item.type] }}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{ ruleTips[item.type] }}{{
item.format
}}
</p>
<div class="specify" v-if="item.rule.type === 2"> <div class="specify" v-if="item.rule.type === 2">
<div class="specify-item" v-for="(specify, index) in item.rule.rand_value"> <div class="specify-item" v-for="(specify, index) in item.rule.rand_value" :key="index">
<!-- 字符串 --> <!-- 字符串 -->
<template v-if="parseInt(item.type) === 1"> <template v-if="parseInt(item.type) === 1">
<el-input v-model="specify.value" placeholder="请输入"></el-input> <el-input v-model="specify.value" placeholder="请输入"></el-input>
...@@ -62,11 +65,24 @@ const remove = function (item: any, index: number) { ...@@ -62,11 +65,24 @@ const remove = function (item: any, index: number) {
</template> </template>
<!-- 日期 --> <!-- 日期 -->
<template v-if="parseInt(item.type) === 4"> <template v-if="parseInt(item.type) === 4">
<el-date-picker placeholder="请选择随机日期最小值" style="width: 200px" value-format="YYYY-MM-DD" v-model="specify.min" /> <el-date-picker
<el-date-picker placeholder="请选择随机日期最大值" style="width: 200px; margin-left: 15px" value-format="YYYY-MM-DD" v-model="specify.max" /> placeholder="请选择随机日期最小值"
style="width: 200px"
value-format="YYYY-MM-DD"
v-model="specify.min" />
<el-date-picker
placeholder="请选择随机日期最大值"
style="width: 200px; margin-left: 15px"
value-format="YYYY-MM-DD"
v-model="specify.max" />
</template> </template>
<template v-if="parseInt(item.type) === 5"> <template v-if="parseInt(item.type) === 5">
<el-date-picker placeholder="请选择随机时间最小值" v-model="specify.min" style="width: 200px" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" /> <el-date-picker
placeholder="请选择随机时间最小值"
v-model="specify.min"
style="width: 200px"
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss" />
<el-date-picker <el-date-picker
placeholder="请选择随机时间最大值" placeholder="请选择随机时间最大值"
v-model="specify.max" v-model="specify.max"
...@@ -82,7 +98,11 @@ const remove = function (item: any, index: number) { ...@@ -82,7 +98,11 @@ const remove = function (item: any, index: number) {
style="margin-left: 10px; cursor: pointer" style="margin-left: 10px; cursor: pointer"
><CirclePlusFilled ><CirclePlusFilled
/></el-icon> /></el-icon>
<el-icon @click="remove(item.rule.rand_value, index)" size="20" style="margin-left: 10px; cursor: pointer" v-if="item.rule.rand_value.length > 1" <el-icon
@click="remove(item.rule.rand_value, index)"
size="20"
style="margin-left: 10px; cursor: pointer"
v-if="item.rule.rand_value.length > 1"
><RemoveFilled ><RemoveFilled
/></el-icon> /></el-icon>
</template> </template>
...@@ -97,7 +117,11 @@ const remove = function (item: any, index: number) { ...@@ -97,7 +117,11 @@ const remove = function (item: any, index: number) {
</div> </div>
<div v-else> <div v-else>
<template v-if="parseInt(item.type) === 4"> <template v-if="parseInt(item.type) === 4">
<el-date-picker placeholder="请选择固定属性值" style="width: 200px" value-format="YYYY-MM-DD" v-model="item.rule.fixed_value" /> <el-date-picker
placeholder="请选择固定属性值"
style="width: 200px"
value-format="YYYY-MM-DD"
v-model="item.rule.fixed_value" />
</template> </template>
<template v-else-if="parseInt(item.type) === 5"> <template v-else-if="parseInt(item.type) === 5">
<el-date-picker <el-date-picker
......
<script setup lang="ts"> <script setup lang="ts">
import { studentSubmitForm, studentSubmitLog } from '../api' import { studentSubmitForm, studentSubmitLog } from '../api'
import { ElMessage } from 'element-plus'
import type { StudentFollow } from '../types' import type { StudentFollow } from '../types'
import type { FormInstance, FormRules } from 'element-plus' import type { FormInstance, FormRules } from 'element-plus'
import Icon from '@/components/ConnectionIcon.vue' import Icon from '@/components/ConnectionIcon.vue'
...@@ -34,13 +33,13 @@ const ruleForm = reactive<RuleForm>({ ...@@ -34,13 +33,13 @@ const ruleForm = reactive<RuleForm>({
name: '', name: '',
mobile: '', mobile: '',
gender: '1', gender: '1',
experiment_connection_id: '' experiment_connection_id: '',
}) })
const rules = reactive<FormRules<RuleForm>>({ const rules = reactive<FormRules<RuleForm>>({
name: [{ required: true, message: '请输入', trigger: 'blur' }], name: [{ required: true, message: '请输入', trigger: 'blur' }],
mobile: [{ required: true, message: '请输入', trigger: 'blur' }], mobile: [{ required: true, message: '请输入', trigger: 'blur' }],
gender: [{ required: true, message: '请输入', trigger: 'blur' }] gender: [{ required: true, message: '请输入', trigger: 'blur' }],
}) })
const submitForm = async (formEl: FormInstance | undefined) => { const submitForm = async (formEl: FormInstance | undefined) => {
...@@ -69,7 +68,7 @@ const handleKeyUp = function (e: any) { ...@@ -69,7 +68,7 @@ const handleKeyUp = function (e: any) {
logs.push({ time: currentDateTime, text: textarea }) logs.push({ time: currentDateTime, text: textarea })
studentSubmitLog({ studentSubmitLog({
experiment_connection_id: props.data?.connect_id, experiment_connection_id: props.data?.connect_id,
logs: JSON.stringify([{ time: currentDateTime, text: textarea }]) logs: JSON.stringify([{ time: currentDateTime, text: textarea }]),
}).then() }).then()
textarea = '' textarea = ''
setTimeout(() => { setTimeout(() => {
...@@ -167,7 +166,7 @@ const sendChat = function () { ...@@ -167,7 +166,7 @@ const sendChat = function () {
</div> </div>
</div> </div>
</div> </div>
<div class="chat-view_right" v-for="item in logs"> <div class="chat-view_right" v-for="(item, index) in logs" :key="index">
<div class="view__time">{{ item.time }}</div> <div class="view__time">{{ item.time }}</div>
<div class="view-right_content"> <div class="view-right_content">
<div class="view-right__text">{{ item.text }}</div> <div class="view-right__text">{{ item.text }}</div>
......
<script setup lang="ts"> <script setup lang="ts">
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage } from 'element-plus'
import { submitScheduleMember } from '../api' import { submitScheduleMember } from '../api'
import type { ScheduleMember } from '../types' import type { ScheduleMember } from '../types'
import type { FormInstance } from 'element-plus' import type { FormInstance } from 'element-plus'
...@@ -30,7 +30,7 @@ const ruleForm = $ref<any>({ ...@@ -30,7 +30,7 @@ const ruleForm = $ref<any>({
gender: 100, gender: 100,
mobile: 1, mobile: 1,
create_data: '', create_data: '',
type_name: '' type_name: '',
}) })
watchEffect(() => { watchEffect(() => {
const mergeJson = function (target: any, source: any) { const mergeJson = function (target: any, source: any) {
...@@ -64,12 +64,12 @@ const submitForm = async (formEl: FormInstance | undefined, bl: string) => { ...@@ -64,12 +64,12 @@ const submitForm = async (formEl: FormInstance | undefined, bl: string) => {
if (res.code === 0) { if (res.code === 0) {
ElMessage({ ElMessage({
message: '保存成功', message: '保存成功',
type: 'success' type: 'success',
}) })
emit('update:modelValue', false) emit('update:modelValue', false)
} else { } else {
ElMessage({ ElMessage({
message: res.message message: res.message,
}) })
} }
}) })
......
<script setup lang="ts"> <script setup lang="ts">
import type { DetailsProp, ScheduleMember, ScheduleEvent, StudentFollow } from '../types' import type { DetailsProp, ScheduleMember, StudentFollow } from '../types'
import { Plus } from '@element-plus/icons-vue' import { Plus } from '@element-plus/icons-vue'
import AppList from '@/components/base/AppList.vue' import AppList from '@/components/base/AppList.vue'
import ListItem from '../components/ListItem.vue' import ListItem from '../components/ListItem.vue'
...@@ -25,7 +25,7 @@ const listOptions = computed(() => { ...@@ -25,7 +25,7 @@ const listOptions = computed(() => {
return { return {
remote: { remote: {
httpRequest: getConnectionList, httpRequest: getConnectionList,
params: { created_operator: '', type: '' } params: { created_operator: '', type: '' },
}, },
limit: 20, limit: 20,
filters: [ filters: [
...@@ -34,9 +34,9 @@ const listOptions = computed(() => { ...@@ -34,9 +34,9 @@ const listOptions = computed(() => {
type: 'select', type: 'select',
prop: 'type', prop: 'type',
placeholder: '请选择类型', placeholder: '请选择类型',
options: store.getMapValuesByKey('experiment_connection_type') options: store.getMapValuesByKey('experiment_connection_type'),
} },
] ],
} }
}) })
...@@ -55,7 +55,7 @@ const createConnect = function () { ...@@ -55,7 +55,7 @@ const createConnect = function () {
// 编辑链接 // 编辑链接
let formData = $ref<DetailsProp | undefined>() let formData = $ref<DetailsProp | undefined>()
const editConnect = function (id: string) { const editConnect = function (id: string) {
getConnectionDetails({ id: id }).then(res => { getConnectionDetails({ id: id }).then((res) => {
formData = res.data formData = res.data
formVisible = true formVisible = true
}) })
...@@ -93,7 +93,7 @@ const handleGenerateEventData = function (experimentId: string, id: string, even ...@@ -93,7 +93,7 @@ const handleGenerateEventData = function (experimentId: string, id: string, even
experiment_id: experimentId, experiment_id: experimentId,
connect_id: id, connect_id: id,
events: events, events: events,
last_event: last_event last_event: last_event,
} }
eventDataVisible = true eventDataVisible = true
} }
...@@ -138,8 +138,7 @@ const handleStudentFollow = function (experimentId: string, id: string, type: st ...@@ -138,8 +138,7 @@ const handleStudentFollow = function (experimentId: string, id: string, type: st
@generateUserData="handleGenerateUserData" @generateUserData="handleGenerateUserData"
@generateEventData="handleGenerateEventData" @generateEventData="handleGenerateEventData"
@viewDataProgress="viewDataProgress" @viewDataProgress="viewDataProgress"
@handleStudentFollow="handleStudentFollow" @handleStudentFollow="handleStudentFollow"></ListItem>
></ListItem>
<div class="connect-item" @click="createConnect" v-if="userStore.role?.id !== 1"> <div class="connect-item" @click="createConnect" v-if="userStore.role?.id !== 1">
<div class="connect-add-button"> <div class="connect-add-button">
<el-icon><Plus /></el-icon> <el-icon><Plus /></el-icon>
...@@ -162,8 +161,7 @@ const handleStudentFollow = function (experimentId: string, id: string, type: st ...@@ -162,8 +161,7 @@ const handleStudentFollow = function (experimentId: string, id: string, type: st
<StudentFollowDialog <StudentFollowDialog
:data="studentFollowData" :data="studentFollowData"
v-model="studentFollowVisible" v-model="studentFollowVisible"
v-if="studentFollowVisible" v-if="studentFollowVisible"></StudentFollowDialog>
></StudentFollowDialog>
</template> </template>
<style lang="scss"> <style lang="scss">
......
<script setup lang="ts"> <script setup lang="ts">
import type { ExperimentInfo } from '../types' import type { ExperimentInfo } from '../types'
import { getSearchCriteria, getRecordList } from '../api' import { getSearchCriteria, getRecordList } from '../api'
import Report from '@/modules/market/my/components/Report.vue' // import Report from '@/modules/market/my/components/Report.vue'
const route = useRoute() const route = useRoute()
...@@ -19,11 +19,11 @@ const listOptions = computed(() => { ...@@ -19,11 +19,11 @@ const listOptions = computed(() => {
return { return {
remote: { remote: {
httpRequest: getRecordList, httpRequest: getRecordList,
params: { name: '', sno_number: '' } params: { name: '', sno_number: '' },
}, },
filters: [ filters: [
{ type: 'input', prop: 'name', placeholder: '请输入学生姓名' }, { type: 'input', prop: 'name', placeholder: '请输入学生姓名' },
{ type: 'input', prop: 'sno_number', placeholder: '请输入学生学号' } { type: 'input', prop: 'sno_number', placeholder: '请输入学生学号' },
], ],
columns: [ columns: [
{ label: '序号', type: 'index', width: 60 }, { label: '序号', type: 'index', width: 60 },
...@@ -34,47 +34,47 @@ const listOptions = computed(() => { ...@@ -34,47 +34,47 @@ const listOptions = computed(() => {
label: '营销背景分析', label: '营销背景分析',
computed(row: any) { computed(row: any) {
return isComplete(row.row.step_1.is_complete) return isComplete(row.row.step_1.is_complete)
} },
}, },
{ {
label: '营销渠道选择', label: '营销渠道选择',
computed(row: any) { computed(row: any) {
return isComplete(row.row.step_2.is_complete) return isComplete(row.row.step_2.is_complete)
} },
}, },
{ {
label: '用户分析', label: '用户分析',
computed(row: any) { computed(row: any) {
return isComplete(row.row.step_3.is_complete) return isComplete(row.row.step_3.is_complete)
} },
}, },
{ {
label: '标签体系设计', label: '标签体系设计',
computed(row: any) { computed(row: any) {
return isComplete(row.row.step_4.is_complete) return isComplete(row.row.step_4.is_complete)
} },
}, },
{ {
label: '用户精准分群', label: '用户精准分群',
computed(row: any) { computed(row: any) {
return isComplete(row.row.step_5.is_complete) return isComplete(row.row.step_5.is_complete)
} },
}, },
{ {
label: '自动化营销旅程设计', label: '自动化营销旅程设计',
computed(row: any) { computed(row: any) {
return isComplete(row.row.step_6.is_complete) return isComplete(row.row.step_6.is_complete)
} },
}, },
{ {
label: '营销物料设计', label: '营销物料设计',
computed(row: any) { computed(row: any) {
return isComplete(row.row.step_7.is_complete) return isComplete(row.row.step_7.is_complete)
} },
}, },
{ label: '得分', prop: 'score' }, { label: '得分', prop: 'score' },
{ label: '操作', slots: 'table-x', width: 200 } { label: '操作', slots: 'table-x', width: 200 },
] ],
} }
}) })
...@@ -110,8 +110,8 @@ function isComplete(is: boolean) { ...@@ -110,8 +110,8 @@ function isComplete(is: boolean) {
query: { query: {
id: row.id, id: row.id,
snoNumber: row.sno_number, snoNumber: row.sno_number,
experiment_id: route.query.experiment_id experiment_id: route.query.experiment_id,
} },
}" }"
><el-button text type="primary">查看营销策划报告</el-button></router-link ><el-button text type="primary">查看营销策划报告</el-button></router-link
> >
...@@ -124,8 +124,8 @@ function isComplete(is: boolean) { ...@@ -124,8 +124,8 @@ function isComplete(is: boolean) {
name: row.name, name: row.name,
snoNumber: row.sno_number, snoNumber: row.sno_number,
className: row.class_name, className: row.class_name,
experiment_id: route.query.experiment_id experiment_id: route.query.experiment_id,
} },
}" }"
><el-button text type="primary">评分</el-button></router-link ><el-button text type="primary">评分</el-button></router-link
> >
......
<script setup lang="ts"> <script setup lang="ts">
import AppEditor from '@/components/base/AppEditor.vue' import AppEditor from '@/components/base/AppEditor.vue'
import { getScore, updateScore } from '../api' import { getScore, updateScore } from '../api'
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage } from 'element-plus'
const route = useRoute() const route = useRoute()
let data = $ref<any>([]) let data = $ref<any>([])
getScore({ record_id: route.query.id }).then(res => { getScore({ record_id: route.query.id }).then((res) => {
console.log(res.data, 'res.data') console.log(res.data, 'res.data')
data = res.data.map((item: any) => { data = res.data.map((item: any) => {
item.score = item.score === '' ? 0 : parseInt(item.score) item.score = item.score === '' ? 0 : parseInt(item.score)
...@@ -24,19 +24,19 @@ const listOptions = computed(() => { ...@@ -24,19 +24,19 @@ const listOptions = computed(() => {
prop: 'is_complete', prop: 'is_complete',
computed(row: any) { computed(row: any) {
return isComplete(row.row.is_complete) return isComplete(row.row.is_complete)
} },
}, },
{ label: '', prop: 'percent' }, { label: '', prop: 'percent' },
{ {
label: '', label: '',
prop: 'score', prop: 'score',
slots: 'table-input' slots: 'table-input',
}, },
{ slots: 'table-x', width: 200 } { slots: 'table-x', width: 200 },
], ],
['show-header']: false, ['show-header']: false,
border: true, border: true,
data: data data: data,
} }
}) })
...@@ -68,8 +68,8 @@ const handleSubmit = function () { ...@@ -68,8 +68,8 @@ const handleSubmit = function () {
updateScore({ updateScore({
experiment_id: route.query.experiment_id, experiment_id: route.query.experiment_id,
record_id: route.query.id, record_id: route.query.id,
score: JSON.stringify(data) score: JSON.stringify(data),
}).then(res => { }).then(() => {
ElMessage.success('保存成功') ElMessage.success('保存成功')
}) })
} }
......
...@@ -4,7 +4,11 @@ import { Plus } from '@element-plus/icons-vue' ...@@ -4,7 +4,11 @@ import { Plus } from '@element-plus/icons-vue'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import AppList from '@/components/base/AppList.vue' import AppList from '@/components/base/AppList.vue'
import { getMaterialList, updateMaterial, deleteMaterial } from '../api' import { getMaterialList, updateMaterial, deleteMaterial } from '../api'
import { getNameByValue, materialMethodList, materialUsageList, materialUsersList } from '@/utils/dictionary' import {
getNameByValue,
materialMethodList,
// materialUsageList, materialUsersList
} from '@/utils/dictionary'
import { useMapStore } from '@/stores/map' import { useMapStore } from '@/stores/map'
import { useUserStore } from '@/stores/user' import { useUserStore } from '@/stores/user'
...@@ -30,14 +34,14 @@ const listOptions = computed(() => { ...@@ -30,14 +34,14 @@ const listOptions = computed(() => {
beforeRequest(params: any) { beforeRequest(params: any) {
materialType.value = params.type materialType.value = params.type
return params return params
} },
}, },
filters: [ filters: [
{ {
type: 'select', type: 'select',
prop: 'type', prop: 'type',
placeholder: '请选择资料类型', placeholder: '请选择资料类型',
options: materialTypeList options: materialTypeList,
}, },
{ {
type: 'select', type: 'select',
...@@ -45,19 +49,19 @@ const listOptions = computed(() => { ...@@ -45,19 +49,19 @@ const listOptions = computed(() => {
placeholder: '请选择资料状态', placeholder: '请选择资料状态',
options: [ options: [
{ label: '有效', value: '1' }, { label: '有效', value: '1' },
{ label: '失效', value: '0' } { label: '失效', value: '0' },
] ],
}, },
{ {
type: 'select', type: 'select',
prop: 'way', prop: 'way',
placeholder: '请选择创作方式', placeholder: '请选择创作方式',
options: materialMethodList options: materialMethodList,
}, },
{ type: 'input', prop: 'name', placeholder: '请输入资料名称' }, { type: 'input', prop: 'name', placeholder: '请输入资料名称' },
{ type: 'input', prop: 'id', placeholder: '请输入资料ID' }, { type: 'input', prop: 'id', placeholder: '请输入资料ID' },
{ type: 'input', prop: 'updated_operator', placeholder: '更新人' } { type: 'input', prop: 'updated_operator', placeholder: '更新人' },
], ],
columns: [ columns: [
{ label: '序号', type: 'index', width: 60 }, { label: '序号', type: 'index', width: 60 },
...@@ -67,7 +71,7 @@ const listOptions = computed(() => { ...@@ -67,7 +71,7 @@ const listOptions = computed(() => {
width: 100, width: 100,
computed: ({ row }: { row: MaterialProp }) => { computed: ({ row }: { row: MaterialProp }) => {
return getNameByValue(row.type, materialTypeList) return getNameByValue(row.type, materialTypeList)
} },
}, },
{ label: '资料名称', prop: 'name' }, { label: '资料名称', prop: 'name' },
{ label: '资料ID', prop: 'id' }, { label: '资料ID', prop: 'id' },
...@@ -76,7 +80,7 @@ const listOptions = computed(() => { ...@@ -76,7 +80,7 @@ const listOptions = computed(() => {
prop: 'way', prop: 'way',
computed: ({ row }: { row: MaterialProp }) => { computed: ({ row }: { row: MaterialProp }) => {
return getNameByValue(row.way, materialMethodList) return getNameByValue(row.way, materialMethodList)
} },
}, },
// { label: '行业', prop: 'industry_name' }, // { label: '行业', prop: 'industry_name' },
// { // {
...@@ -98,18 +102,18 @@ const listOptions = computed(() => { ...@@ -98,18 +102,18 @@ const listOptions = computed(() => {
label: '状态', label: '状态',
prop: 'status_name', prop: 'status_name',
width: 90, width: 90,
slots: 'table-status' slots: 'table-status',
}, },
{ {
label: '更新人', label: '更新人',
prop: 'updated_operator_name', prop: 'updated_operator_name',
computed: ({ row }: { row: MaterialProp }) => { computed: ({ row }: { row: MaterialProp }) => {
return row.updated_operator.real_name || row.updated_operator.nickname || row.updated_operator.username return row.updated_operator.real_name || row.updated_operator.nickname || row.updated_operator.username
} },
}, },
{ label: '更新时间', prop: 'updated_time' }, { label: '更新时间', prop: 'updated_time' },
{ label: '操作', slots: 'table-x', width: 240 } { label: '操作', slots: 'table-x', width: 240 },
] ],
} }
}) })
...@@ -163,8 +167,7 @@ async function handleChangeStatus(row: MaterialProp) { ...@@ -163,8 +167,7 @@ async function handleChangeStatus(row: MaterialProp) {
v-model="row.status" v-model="row.status"
active-value="1" active-value="1"
inactive-value="0" inactive-value="0"
:before-change="() => handleChangeStatus(row)" :before-change="() => handleChangeStatus(row)"></el-switch>
></el-switch>
</template> </template>
<template #table-x="{ row }"> <template #table-x="{ row }">
<el-button type="primary" plain @click="handleView(row)">查看</el-button> <el-button type="primary" plain @click="handleView(row)">查看</el-button>
......
import type { RouteRecordRaw } from 'vue-router'
import Layout from '@/components/layout/Index.vue'
const routes: RouteRecordRaw[] = [
{
path: '/material/audio',
component: Layout,
children: [{ path: '', component: () => import('./views/Index.vue') }]
}
]
export { routes }
<script setup lang="ts">
import { Plus } from '@element-plus/icons-vue'
import AppList from '@/components/base/AppList.vue'
import { getMaterialList, deleteMaterial } from '@/api/base'
import type { MaterialProp } from '@/types'
import { ElMessage } from 'element-plus'
import { useUserStore } from '@/stores/user'
const userStore = useUserStore()
const UpdateMaterialDialog = defineAsyncComponent(() => import('@/components/base/UpdateMaterialDialog.vue'))
const appList = $ref<InstanceType<typeof AppList> | null>(null)
// 资料类型
const materialType = '3'
// 列表配置
const listOptions = computed(() => {
return {
remote: {
httpRequest: getMaterialList,
params: { name: '', id: '', status: '', type: materialType, updated_operator: '' }
},
filters: [
{ type: 'input', prop: 'name', placeholder: '请输入资料名称' },
{ type: 'input', prop: 'id', placeholder: '请输入资料ID' },
{
type: 'select',
prop: 'status',
placeholder: '请选择资料状态',
options: [
{ label: '有效', value: '1' },
{ label: '失效', value: '0' }
]
},
{ type: 'input', prop: 'updated_operator', placeholder: '更新人' }
],
columns: [
// { type: 'selection' },
{ label: '序号', type: 'index', width: 60 },
{ label: '资料ID', prop: 'id' },
{ label: '资料名称', prop: 'name' },
{ label: '资料类型', prop: 'type_name' },
{
label: '状态',
prop: 'status_name',
computed: (row: any) => {
return row.row.status === '0'
? `<span style="color: rgb(170, 2, 49)">${row.row.status_name}</span>`
: `<span style="color: #00ac27">${row.row.status_name}</span>`
}
},
{ label: '更新人', prop: 'updated_operator_name' },
{ label: '更新时间', prop: 'updated_time' },
{ label: '操作', slots: 'table-x', width: 240 }
]
}
})
// 刷新
function handleRefresh() {
appList?.refetch()
}
let updateVisible = $ref(false)
// 编辑
const currentRow = ref<MaterialProp>()
const handleEdit = function (row: MaterialProp) {
currentRow.value = row
row.isView = false
updateVisible = true
}
// 查看
const handleView = function (row: MaterialProp) {
row.isView = true
currentRow.value = row
updateVisible = true
}
// 新建
const handleAdd = function () {
updateVisible = true
currentRow.value = undefined
}
// 多选
let multipleSelection = $ref<MaterialProp[]>([])
function handleSelectionChange(selection: MaterialProp[]) {
multipleSelection = selection
}
// 删除
const handleRemove = function (row: { id: string }) {
deleteMembers(row.id)
}
const handleRemoves = function () {
const ids = multipleSelection
.reduce((a: any, b: any) => {
a.push(b.id)
return a
}, [])
.toString()
deleteMembers(ids)
}
const deleteMembers = function (ids: string) {
deleteMaterial({ id: ids }).then(() => {
ElMessage({ message: '删除成功', type: 'success' })
handleRefresh()
})
}
</script>
<template>
<AppCard>
<AppList v-bind="listOptions" ref="appList" @selection-change="handleSelectionChange">
<template #header-buttons>
<el-space>
<el-button
v-if="!userStore.status.material_status"
type="primary"
:icon="Plus"
@click="handleAdd"
v-permission="'v1-experiment-marketing-material-create'"
>新建</el-button
>
<!-- <el-button type="danger" plain :icon="Delete" :disabled="!multipleSelection.length" @click="handleRemoves()"
>删除</el-button
> -->
</el-space>
</template>
<template #table-x="{ row }">
<el-button type="primary" plain @click="handleView(row)">查看</el-button>
<el-button
type="primary"
plain
@click="handleEdit(row)"
v-permission="'v1-experiment-marketing-material-update'"
>编辑</el-button
>
<el-button
type="primary"
plain
@click="handleRemove(row)"
v-permission="'v1-experiment-marketing-material-delete'"
>删除</el-button
>
</template>
</AppList>
<UpdateMaterialDialog
:type="materialType"
:data="currentRow"
@update="handleRefresh()"
v-if="updateVisible"
v-model="updateVisible"
></UpdateMaterialDialog>
</AppCard>
</template>
import type { RouteRecordRaw } from 'vue-router'
import Layout from '@/components/layout/Index.vue'
const routes: RouteRecordRaw[] = [
{
path: '/material/card',
component: Layout,
children: [{ path: '', component: () => import('./views/Index.vue') }]
}
]
export { routes }
<script setup lang="ts">
import { Plus } from '@element-plus/icons-vue'
import AppList from '@/components/base/AppList.vue'
import { getMaterialList, deleteMaterial } from '@/api/base'
import type { MaterialProp } from '@/types'
import { ElMessage } from 'element-plus'
import { useUserStore } from '@/stores/user'
const userStore = useUserStore()
const UpdateMaterialDialog = defineAsyncComponent(() => import('@/components/base/UpdateMaterialDialog.vue'))
const appList = $ref<InstanceType<typeof AppList> | null>(null)
// 资料类型
const materialType = '8'
// 列表配置
const listOptions = computed(() => {
return {
remote: {
httpRequest: getMaterialList,
params: { name: '', id: '', status: '', type: materialType, updated_operator: '' }
},
filters: [
{ type: 'input', prop: 'name', placeholder: '请输入资料名称' },
{ type: 'input', prop: 'id', placeholder: '请输入资料ID' },
{
type: 'select',
prop: 'status',
placeholder: '请选择资料状态',
options: [
{ label: '有效', value: '1' },
{ label: '失效', value: '0' }
]
},
{ type: 'input', prop: 'updated_operator', placeholder: '更新人' }
],
columns: [
// { type: 'selection' },
{ label: '序号', type: 'index', width: 60 },
{ label: '资料ID', prop: 'id' },
{ label: '资料名称', prop: 'name' },
{ label: '资料类型', prop: 'type_name' },
{
label: '状态',
prop: 'status_name',
computed: (row: any) => {
return row.row.status === '0'
? `<span style="color: rgb(170, 2, 49)">${row.row.status_name}</span>`
: `<span style="color: #00ac27">${row.row.status_name}</span>`
}
},
{ label: '更新人', prop: 'updated_operator_name' },
{ label: '更新时间', prop: 'updated_time' },
{ label: '操作', slots: 'table-x', width: 240 }
]
}
})
// 刷新
function handleRefresh() {
appList?.refetch()
}
let updateVisible = $ref(false)
// 编辑
const currentRow = ref<MaterialProp>()
const handleEdit = function (row: MaterialProp) {
currentRow.value = row
row.isView = false
updateVisible = true
}
// 查看
const handleView = function (row: MaterialProp) {
row.isView = true
currentRow.value = row
updateVisible = true
}
// 新建
const handleAdd = function () {
updateVisible = true
currentRow.value = undefined
}
// 多选
let multipleSelection = $ref<MaterialProp[]>([])
function handleSelectionChange(selection: MaterialProp[]) {
multipleSelection = selection
}
// 删除
const handleRemove = function (row: { id: string }) {
deleteMembers(row.id)
}
const handleRemoves = function () {
const ids = multipleSelection
.reduce((a: any, b: any) => {
a.push(b.id)
return a
}, [])
.toString()
deleteMembers(ids)
}
const deleteMembers = function (ids: string) {
deleteMaterial({ id: ids }).then(() => {
ElMessage({ message: '删除成功', type: 'success' })
handleRefresh()
})
}
</script>
<template>
<AppCard>
<AppList v-bind="listOptions" ref="appList" @selection-change="handleSelectionChange">
<template #header-buttons>
<el-space>
<el-button
v-if="!userStore.status.material_status"
type="primary"
:icon="Plus"
@click="handleAdd"
v-permission="'v1-experiment-marketing-material-create'"
>新建</el-button
>
<!-- <el-button type="danger" plain :icon="Delete" :disabled="!multipleSelection.length" @click="handleRemoves()"
>删除</el-button
> -->
</el-space>
</template>
<template #table-x="{ row }">
<el-button type="primary" plain @click="handleView(row)">查看</el-button>
<el-button
type="primary"
plain
@click="handleEdit(row)"
v-permission="'v1-experiment-marketing-material-update'"
>编辑</el-button
>
<el-button
type="primary"
plain
@click="handleRemove(row)"
v-permission="'v1-experiment-marketing-material-delete'"
>删除</el-button
>
</template>
</AppList>
<UpdateMaterialDialog
:type="materialType"
:data="currentRow"
@update="handleRefresh()"
v-if="updateVisible"
v-model="updateVisible"
></UpdateMaterialDialog>
</AppCard>
</template>
import type { RouteRecordRaw } from 'vue-router'
import Layout from '@/components/layout/Index.vue'
const routes: RouteRecordRaw[] = [
{
path: '/material/h5',
component: Layout,
children: [{ path: '', component: () => import('./views/Index.vue') }]
}
]
export { routes }
<script setup lang="ts">
import { Plus } from '@element-plus/icons-vue'
import AppList from '@/components/base/AppList.vue'
import { getMaterialList, deleteMaterial } from '@/api/base'
import type { MaterialProp } from '@/types'
import { ElMessage } from 'element-plus'
import { useUserStore } from '@/stores/user'
const userStore = useUserStore()
const UpdateMaterialDialog = defineAsyncComponent(() => import('@/components/base/UpdateMaterialDialog.vue'))
const appList = $ref<InstanceType<typeof AppList> | null>(null)
// 资料类型
const materialType = '5'
// 列表配置
const listOptions = computed(() => {
return {
remote: {
httpRequest: getMaterialList,
params: { name: '', id: '', status: '', type: materialType, updated_operator: '' }
},
filters: [
{ type: 'input', prop: 'name', placeholder: '请输入资料名称' },
{ type: 'input', prop: 'id', placeholder: '请输入资料ID' },
{
type: 'select',
prop: 'status',
placeholder: '请选择资料状态',
options: [
{ label: '有效', value: '1' },
{ label: '失效', value: '0' }
]
},
{ type: 'input', prop: 'updated_operator', placeholder: '更新人' }
],
columns: [
// { type: 'selection' },
{ label: '序号', type: 'index', width: 60 },
{ label: '资料ID', prop: 'id' },
{ label: '资料名称', prop: 'name' },
{ label: '资料类型', prop: 'type_name' },
{
label: '状态',
prop: 'status_name',
computed: (row: any) => {
return row.row.status === '0'
? `<span style="color: rgb(170, 2, 49)">${row.row.status_name}</span>`
: `<span style="color: #00ac27">${row.row.status_name}</span>`
}
},
{ label: '更新人', prop: 'updated_operator_name' },
{ label: '更新时间', prop: 'updated_time' },
{ label: '操作', slots: 'table-x', width: 240 }
]
}
})
// 刷新
function handleRefresh() {
appList?.refetch()
}
let updateVisible = $ref(false)
// 编辑
const currentRow = ref<MaterialProp>()
const handleEdit = function (row: MaterialProp) {
currentRow.value = row
row.isView = false
updateVisible = true
}
// 查看
const handleView = function (row: MaterialProp) {
row.isView = true
currentRow.value = row
updateVisible = true
}
// 新建
const handleAdd = function () {
updateVisible = true
currentRow.value = undefined
}
// 多选
let multipleSelection = $ref<MaterialProp[]>([])
function handleSelectionChange(selection: MaterialProp[]) {
multipleSelection = selection
}
// 删除
const handleRemove = function (row: { id: string }) {
deleteMembers(row.id)
}
const handleRemoves = function () {
const ids = multipleSelection
.reduce((a: any, b: any) => {
a.push(b.id)
return a
}, [])
.toString()
deleteMembers(ids)
}
const deleteMembers = function (ids: string) {
deleteMaterial({ id: ids }).then(() => {
ElMessage({ message: '删除成功', type: 'success' })
handleRefresh()
})
}
</script>
<template>
<AppCard>
<AppList v-bind="listOptions" ref="appList" @selection-change="handleSelectionChange">
<template #header-buttons>
<el-space>
<el-button
v-if="!userStore.status.material_status"
type="primary"
:icon="Plus"
@click="handleAdd"
v-permission="'v1-experiment-marketing-material-create'"
>新建</el-button
>
<!-- <el-button type="danger" plain :icon="Delete" :disabled="!multipleSelection.length" @click="handleRemoves()"
>删除</el-button
> -->
</el-space>
</template>
<template #table-x="{ row }">
<el-button type="primary" plain @click="handleView(row)">查看</el-button>
<el-button
type="primary"
plain
@click="handleEdit(row)"
v-permission="'v1-experiment-marketing-material-update'"
>编辑</el-button
>
<el-button
type="primary"
plain
@click="handleRemove(row)"
v-permission="'v1-experiment-marketing-material-delete'"
>删除</el-button
>
</template>
</AppList>
<UpdateMaterialDialog
:type="materialType"
:data="currentRow"
@update="handleRefresh()"
v-if="updateVisible"
v-model="updateVisible"
></UpdateMaterialDialog>
</AppCard>
</template>
import type { RouteRecordRaw } from 'vue-router'
import Layout from '@/components/layout/Index.vue'
const routes: RouteRecordRaw[] = [
{
path: '/material/image',
component: Layout,
children: [{ path: '', component: () => import('./views/Index.vue') }]
}
]
export { routes }
<script setup lang="ts">
import { Plus } from '@element-plus/icons-vue'
import AppList from '@/components/base/AppList.vue'
import { getMaterialList, deleteMaterial } from '@/api/base'
import type { MaterialProp } from '@/types'
import { ElMessage } from 'element-plus'
import { useUserStore } from '@/stores/user'
const userStore = useUserStore()
const UpdateMaterialDialog = defineAsyncComponent(() => import('@/components/base/UpdateMaterialDialog.vue'))
const appList = $ref<InstanceType<typeof AppList> | null>(null)
// 资料类型
const materialType = '2'
// 列表配置
const listOptions = computed(() => {
return {
remote: {
httpRequest: getMaterialList,
params: { name: '', id: '', status: '', type: materialType, updated_operator: '' }
},
filters: [
{ type: 'input', prop: 'name', placeholder: '请输入资料名称' },
{ type: 'input', prop: 'id', placeholder: '请输入资料ID' },
{
type: 'select',
prop: 'status',
placeholder: '请选择资料状态',
options: [
{ label: '有效', value: '1' },
{ label: '失效', value: '0' }
]
},
{ type: 'input', prop: 'updated_operator', placeholder: '更新人' }
],
columns: [
// { type: 'selection' },
{ label: '序号', type: 'index', width: 60 },
{ label: '资料ID', prop: 'id' },
{ label: '资料名称', prop: 'name' },
{ label: '资料类型', prop: 'type_name' },
{
label: '状态',
prop: 'status_name',
computed: (row: any) => {
return row.row.status === '0'
? `<span style="color: rgb(170, 2, 49)">${row.row.status_name}</span>`
: `<span style="color: #00ac27">${row.row.status_name}</span>`
}
},
{ label: '更新人', prop: 'updated_operator_name' },
{ label: '更新时间', prop: 'updated_time' },
{ label: '操作', slots: 'table-x', width: 240 }
]
}
})
// 刷新
function handleRefresh() {
appList?.refetch()
}
let updateVisible = $ref(false)
// 编辑
const currentRow = ref<MaterialProp>()
const handleEdit = function (row: MaterialProp) {
currentRow.value = row
row.isView = false
updateVisible = true
}
// 查看
const handleView = function (row: MaterialProp) {
row.isView = true
currentRow.value = row
updateVisible = true
}
// 新建
const handleAdd = function () {
updateVisible = true
currentRow.value = undefined
}
// 多选
let multipleSelection = $ref<MaterialProp[]>([])
function handleSelectionChange(selection: MaterialProp[]) {
multipleSelection = selection
}
// 删除
const handleRemove = function (row: { id: string }) {
deleteMembers(row.id)
}
const handleRemoves = function () {
const ids = multipleSelection
.reduce((a: any, b: any) => {
a.push(b.id)
return a
}, [])
.toString()
deleteMembers(ids)
}
const deleteMembers = function (ids: string) {
deleteMaterial({ id: ids }).then(() => {
ElMessage({ message: '删除成功', type: 'success' })
handleRefresh()
})
}
</script>
<template>
<AppCard>
<AppList v-bind="listOptions" ref="appList" @selection-change="handleSelectionChange">
<template #header-buttons>
<el-space>
<el-button
v-if="!userStore.status.material_status"
type="primary"
:icon="Plus"
@click="handleAdd"
v-permission="'v1-experiment-marketing-material-create'"
>新建</el-button
>
<!-- <el-button type="danger" plain :icon="Delete" :disabled="!multipleSelection.length" @click="handleRemoves()"
>删除</el-button
> -->
</el-space>
</template>
<template #table-x="{ row }">
<el-button type="primary" plain @click="handleView(row)">查看</el-button>
<el-button
type="primary"
plain
@click="handleEdit(row)"
v-permission="'v1-experiment-marketing-material-update'"
>编辑</el-button
>
<el-button
type="primary"
plain
@click="handleRemove(row)"
v-permission="'v1-experiment-marketing-material-delete'"
>删除</el-button
>
</template>
</AppList>
<UpdateMaterialDialog
:type="materialType"
:data="currentRow"
@update="handleRefresh()"
v-if="updateVisible"
v-model="updateVisible"
></UpdateMaterialDialog>
</AppCard>
</template>
import type { RouteRecordRaw } from 'vue-router'
import Layout from '@/components/layout/Index.vue'
const routes: RouteRecordRaw[] = [
{
path: '/material/mini',
component: Layout,
children: [{ path: '', component: () => import('./views/Index.vue') }]
}
]
export { routes }
<script setup lang="ts">
import { Plus } from '@element-plus/icons-vue'
import AppList from '@/components/base/AppList.vue'
import { getMaterialList, deleteMaterial } from '@/api/base'
import type { MaterialProp } from '@/types'
import { ElMessage } from 'element-plus'
import { useUserStore } from '@/stores/user'
const userStore = useUserStore()
const UpdateMaterialDialog = defineAsyncComponent(() => import('@/components/base/UpdateMaterialDialog.vue'))
const appList = $ref<InstanceType<typeof AppList> | null>(null)
// 资料类型
const materialType = '7'
// 列表配置
const listOptions = computed(() => {
return {
remote: {
httpRequest: getMaterialList,
params: { name: '', id: '', status: '', type: materialType, updated_operator: '' }
},
filters: [
{ type: 'input', prop: 'name', placeholder: '请输入资料名称' },
{ type: 'input', prop: 'id', placeholder: '请输入资料ID' },
{
type: 'select',
prop: 'status',
placeholder: '请选择资料状态',
options: [
{ label: '有效', value: '1' },
{ label: '失效', value: '0' }
]
},
{ type: 'input', prop: 'updated_operator', placeholder: '更新人' }
],
columns: [
// { type: 'selection' },
{ label: '序号', type: 'index', width: 60 },
{ label: '资料ID', prop: 'id' },
{ label: '资料名称', prop: 'name' },
{ label: '资料类型', prop: 'type_name' },
{
label: '状态',
prop: 'status_name',
computed: (row: any) => {
return row.row.status === '0'
? `<span style="color: rgb(170, 2, 49)">${row.row.status_name}</span>`
: `<span style="color: #00ac27">${row.row.status_name}</span>`
}
},
{ label: '更新人', prop: 'updated_operator_name' },
{ label: '更新时间', prop: 'updated_time' },
{ label: '操作', slots: 'table-x', width: 240 }
]
}
})
// 刷新
function handleRefresh() {
appList?.refetch()
}
let updateVisible = $ref(false)
// 编辑
const currentRow = ref<MaterialProp>()
const handleEdit = function (row: MaterialProp) {
currentRow.value = row
row.isView = false
updateVisible = true
}
// 查看
const handleView = function (row: MaterialProp) {
row.isView = true
currentRow.value = row
updateVisible = true
}
// 新建
const handleAdd = function () {
updateVisible = true
currentRow.value = undefined
}
// 多选
let multipleSelection = $ref<MaterialProp[]>([])
function handleSelectionChange(selection: MaterialProp[]) {
multipleSelection = selection
}
// 删除
const handleRemove = function (row: { id: string }) {
deleteMembers(row.id)
}
const handleRemoves = function () {
const ids = multipleSelection
.reduce((a: any, b: any) => {
a.push(b.id)
return a
}, [])
.toString()
deleteMembers(ids)
}
const deleteMembers = function (ids: string) {
deleteMaterial({ id: ids }).then(() => {
ElMessage({ message: '删除成功', type: 'success' })
handleRefresh()
})
}
</script>
<template>
<AppCard>
<AppList v-bind="listOptions" ref="appList" @selection-change="handleSelectionChange">
<template #header-buttons>
<el-space v-if="!userStore.status.material_status">
<!-- v-permission="'v1-experiment-marketing-material-create'" -->
<el-button
v-if="!userStore.status.material_status"
type="primary"
:icon="Plus"
@click="handleAdd"
>新建</el-button
>
<!-- <el-button type="danger" plain :icon="Delete" :disabled="!multipleSelection.length" @click="handleRemoves()"
>删除</el-button
> -->
</el-space>
</template>
<template #table-x="{ row }">
<el-button type="primary" plain @click="handleView(row)">查看</el-button>
<el-button
type="primary"
plain
@click="handleEdit(row)"
v-permission="'v1-experiment-marketing-material-update'"
>编辑</el-button
>
<el-button
type="primary"
plain
@click="handleRemove(row)"
v-permission="'v1-experiment-marketing-material-delete'"
>删除</el-button
>
</template>
</AppList>
<UpdateMaterialDialog
:type="materialType"
:data="currentRow"
@update="handleRefresh()"
v-if="updateVisible"
v-model="updateVisible"
></UpdateMaterialDialog>
</AppCard>
</template>
import type { RouteRecordRaw } from 'vue-router'
import Layout from '@/components/layout/Index.vue'
const routes: RouteRecordRaw[] = [
{
path: '/material/qrcode',
component: Layout,
children: [{ path: '', component: () => import('./views/Index.vue') }]
}
]
export { routes }
<script setup lang="ts">
import { Plus } from '@element-plus/icons-vue'
import AppList from '@/components/base/AppList.vue'
import { getMaterialList, deleteMaterial } from '@/api/base'
import type { MaterialProp } from '@/types'
import { ElMessage } from 'element-plus'
import { useUserStore } from '@/stores/user'
const userStore = useUserStore()
const UpdateMaterialDialog = defineAsyncComponent(() => import('@/components/base/UpdateMaterialDialog.vue'))
const appList = $ref<InstanceType<typeof AppList> | null>(null)
// 资料类型
const materialType = '6'
// 列表配置
const listOptions = computed(() => {
return {
remote: {
httpRequest: getMaterialList,
params: { name: '', id: '', status: '', type: materialType, updated_operator: '' }
},
filters: [
{ type: 'input', prop: 'name', placeholder: '请输入资料名称' },
{ type: 'input', prop: 'id', placeholder: '请输入资料ID' },
{
type: 'select',
prop: 'status',
placeholder: '请选择资料状态',
options: [
{ label: '有效', value: '1' },
{ label: '失效', value: '0' }
]
},
{ type: 'input', prop: 'updated_operator', placeholder: '更新人' }
],
columns: [
// { type: 'selection' },
{ label: '序号', type: 'index', width: 60 },
{ label: '资料ID', prop: 'id' },
{ label: '资料名称', prop: 'name' },
{ label: '资料类型', prop: 'type_name' },
{
label: '状态',
prop: 'status_name',
computed: (row: any) => {
return row.row.status === '0'
? `<span style="color: rgb(170, 2, 49)">${row.row.status_name}</span>`
: `<span style="color: #00ac27">${row.row.status_name}</span>`
}
},
{ label: '更新人', prop: 'updated_operator_name' },
{ label: '更新时间', prop: 'updated_time' },
{ label: '操作', slots: 'table-x', width: 240 }
]
}
})
// 刷新
function handleRefresh() {
appList?.refetch()
}
let updateVisible = $ref(false)
// 编辑
const currentRow = ref<MaterialProp>()
const handleEdit = function (row: MaterialProp) {
currentRow.value = row
row.isView = false
updateVisible = true
}
// 查看
const handleView = function (row: MaterialProp) {
row.isView = true
currentRow.value = row
updateVisible = true
}
// 新建
const handleAdd = function () {
updateVisible = true
currentRow.value = undefined
}
// 多选
let multipleSelection = $ref<MaterialProp[]>([])
function handleSelectionChange(selection: MaterialProp[]) {
multipleSelection = selection
}
// 删除
const handleRemove = function (row: { id: string }) {
deleteMembers(row.id)
}
const handleRemoves = function () {
const ids = multipleSelection
.reduce((a: any, b: any) => {
a.push(b.id)
return a
}, [])
.toString()
deleteMembers(ids)
}
const deleteMembers = function (ids: string) {
deleteMaterial({ id: ids }).then(() => {
ElMessage({ message: '删除成功', type: 'success' })
handleRefresh()
})
}
</script>
<template>
<AppCard>
<AppList v-bind="listOptions" ref="appList" @selection-change="handleSelectionChange">
<template #header-buttons>
<el-space v-if="!userStore.status.material_status">
<!-- v-permission="'v1-experiment-marketing-material-create'" -->
<el-button
v-if="!userStore.status.material_status"
type="primary"
:icon="Plus"
@click="handleAdd"
>新建</el-button
>
<!-- <el-button type="danger" plain :icon="Delete" :disabled="!multipleSelection.length" @click="handleRemoves()"
>删除</el-button
> -->
</el-space>
</template>
<template #table-x="{ row }">
<el-button type="primary" plain @click="handleView(row)">查看</el-button>
<el-button
type="primary"
plain
@click="handleEdit(row)"
v-permission="'v1-experiment-marketing-material-update'"
>编辑</el-button
>
<el-button
type="primary"
plain
@click="handleRemove(row)"
v-permission="'v1-experiment-marketing-material-delete'"
>删除</el-button
>
</template>
</AppList>
<UpdateMaterialDialog
:type="materialType"
:data="currentRow"
@update="handleRefresh()"
v-if="updateVisible"
v-model="updateVisible"
></UpdateMaterialDialog>
</AppCard>
</template>
import type { RouteRecordRaw } from 'vue-router'
import Layout from '@/components/layout/Index.vue'
const routes: RouteRecordRaw[] = [
{
path: '/material/text',
component: Layout,
children: [{ path: '', component: () => import('./views/Index.vue') }]
}
]
export { routes }
<script setup lang="ts">
import { Plus } from '@element-plus/icons-vue'
import AppList from '@/components/base/AppList.vue'
import { getMaterialList, deleteMaterial } from '@/api/base'
import type { MaterialProp } from '@/types'
import { ElMessage } from 'element-plus'
import { useUserStore } from '@/stores/user'
const userStore = useUserStore()
const UpdateMaterialDialog = defineAsyncComponent(() => import('@/components/base/UpdateMaterialDialog.vue'))
const appList = $ref<InstanceType<typeof AppList> | null>(null)
// 资料类型
const materialType = '1'
// 列表配置
const listOptions = computed(() => {
return {
remote: {
httpRequest: getMaterialList,
params: { name: '', id: '', status: '', type: materialType, updated_operator: '' }
},
filters: [
{ type: 'input', prop: 'name', placeholder: '请输入资料名称' },
{ type: 'input', prop: 'id', placeholder: '请输入资料ID' },
{
type: 'select',
prop: 'status',
placeholder: '请选择资料状态',
options: [
{ label: '有效', value: '1' },
{ label: '失效', value: '0' }
]
},
{ type: 'input', prop: 'updated_operator', placeholder: '更新人' }
],
columns: [
// { type: 'selection' },
{ label: '序号', type: 'index', width: 60 },
{ label: '资料ID', prop: 'id' },
{ label: '资料名称', prop: 'name' },
{ label: '资料类型', prop: 'type_name' },
{
label: '状态',
prop: 'status_name',
computed: (row: any) => {
return row.row.status === '0'
? `<span style="color: rgb(170, 2, 49)">${row.row.status_name}</span>`
: `<span style="color: #00ac27">${row.row.status_name}</span>`
}
},
{ label: '更新人', prop: 'updated_operator_name' },
{ label: '更新时间', prop: 'updated_time' },
{ label: '操作', slots: 'table-x', width: 240 }
]
}
})
// 刷新
function handleRefresh() {
appList?.refetch()
}
let updateVisible = $ref(false)
// 编辑
const currentRow = ref<MaterialProp>()
const handleEdit = function (row: MaterialProp) {
currentRow.value = row
row.isView = false
updateVisible = true
}
// 查看
const handleView = function (row: MaterialProp) {
row.isView = true
currentRow.value = row
updateVisible = true
}
// 新建
const handleAdd = function () {
updateVisible = true
currentRow.value = undefined
}
// 多选
let multipleSelection = $ref<MaterialProp[]>([])
function handleSelectionChange(selection: MaterialProp[]) {
multipleSelection = selection
}
// 删除
const handleRemove = function (row: { id: string }) {
deleteMembers(row.id)
}
const handleRemoves = function () {
const ids = multipleSelection
.reduce((a: any, b: any) => {
a.push(b.id)
return a
}, [])
.toString()
deleteMembers(ids)
}
const deleteMembers = function (ids: string) {
deleteMaterial({ id: ids }).then(() => {
ElMessage({ message: '删除成功', type: 'success' })
handleRefresh()
})
}
</script>
<template>
<AppCard>
<AppList v-bind="listOptions" ref="appList" @selection-change="handleSelectionChange">
<template #header-buttons>
<el-space v-if="!userStore.status.material_status">
<!-- v-permission="'v1-experiment-marketing-material-create'" -->
<el-button
v-if="!userStore.status.material_status"
type="primary"
:icon="Plus"
@click="handleAdd"
>新建</el-button
>
<!-- <el-button type="danger" plain :icon="Delete" :disabled="!multipleSelection.length" @click="handleRemoves()"
>删除</el-button
> -->
</el-space>
</template>
<template #table-x="{ row }">
<el-button type="primary" plain @click="handleView(row)">查看</el-button>
<el-button
type="primary"
plain
@click="handleEdit(row)"
v-permission="'v1-experiment-marketing-material-update'"
>编辑</el-button
>
<el-button
type="primary"
plain
@click="handleRemove(row)"
v-permission="'v1-experiment-marketing-material-delete'"
>删除</el-button
>
</template>
</AppList>
<UpdateMaterialDialog
:type="materialType"
:data="currentRow"
@update="handleRefresh()"
v-if="updateVisible"
v-model="updateVisible"
></UpdateMaterialDialog>
</AppCard>
</template>
import type { RouteRecordRaw } from 'vue-router'
import Layout from '@/components/layout/Index.vue'
const routes: RouteRecordRaw[] = [
{
path: '/material/video',
component: Layout,
children: [{ path: '', component: () => import('./views/Index.vue') }]
}
]
export { routes }
<script setup lang="ts">
import { Plus } from '@element-plus/icons-vue'
import AppList from '@/components/base/AppList.vue'
import { getMaterialList, deleteMaterial } from '@/api/base'
import type { MaterialProp } from '@/types'
import { ElMessage } from 'element-plus'
import { useUserStore } from '@/stores/user'
const userStore = useUserStore()
const UpdateMaterialDialog = defineAsyncComponent(() => import('@/components/base/UpdateMaterialDialog.vue'))
const appList = $ref<InstanceType<typeof AppList> | null>(null)
// 资料类型
const materialType = '4'
// 列表配置
const listOptions = computed(() => {
return {
remote: {
httpRequest: getMaterialList,
params: { name: '', id: '', status: '', type: materialType, updated_operator: '' }
},
filters: [
{ type: 'input', prop: 'name', placeholder: '请输入资料名称' },
{ type: 'input', prop: 'id', placeholder: '请输入资料ID' },
{
type: 'select',
prop: 'status',
placeholder: '请选择资料状态',
options: [
{ label: '有效', value: '1' },
{ label: '失效', value: '0' }
]
},
{ type: 'input', prop: 'updated_operator', placeholder: '更新人' }
],
columns: [
// { type: 'selection' },
{ label: '序号', type: 'index', width: 60 },
{ label: '资料ID', prop: 'id' },
{ label: '资料名称', prop: 'name' },
{ label: '资料类型', prop: 'type_name' },
{
label: '状态',
prop: 'status_name',
computed: (row: any) => {
return row.row.status === '0'
? `<span style="color: rgb(170, 2, 49)">${row.row.status_name}</span>`
: `<span style="color: #00ac27">${row.row.status_name}</span>`
}
},
{ label: '更新人', prop: 'updated_operator_name' },
{ label: '更新时间', prop: 'updated_time' },
{ label: '操作', slots: 'table-x', width: 240 }
]
}
})
// 刷新
function handleRefresh() {
appList?.refetch()
}
let updateVisible = $ref(false)
// 编辑
const currentRow = ref<MaterialProp>()
const handleEdit = function (row: MaterialProp) {
currentRow.value = row
row.isView = false
updateVisible = true
}
// 查看
const handleView = function (row: MaterialProp) {
row.isView = true
currentRow.value = row
updateVisible = true
}
// 新建
const handleAdd = function () {
updateVisible = true
currentRow.value = undefined
}
// 多选
let multipleSelection = $ref<MaterialProp[]>([])
function handleSelectionChange(selection: MaterialProp[]) {
multipleSelection = selection
}
// 删除
const handleRemove = function (row: { id: string }) {
deleteMembers(row.id)
}
const handleRemoves = function () {
const ids = multipleSelection
.reduce((a: any, b: any) => {
a.push(b.id)
return a
}, [])
.toString()
deleteMembers(ids)
}
const deleteMembers = function (ids: string) {
deleteMaterial({ id: ids }).then(() => {
ElMessage({ message: '删除成功', type: 'success' })
handleRefresh()
})
}
</script>
<template>
<AppCard>
<AppList v-bind="listOptions" ref="appList" @selection-change="handleSelectionChange">
<template #header-buttons>
<el-space>
<el-button
v-if="!userStore.status.material_status"
type="primary"
:icon="Plus"
@click="handleAdd"
v-permission="'v1-experiment-marketing-material-create'"
>新建</el-button
>
<!-- <el-button type="danger" plain :icon="Delete" :disabled="!multipleSelection.length" @click="handleRemoves()"
>删除</el-button
> -->
</el-space>
</template>
<template #table-x="{ row }">
<el-button type="primary" plain @click="handleView(row)">查看</el-button>
<el-button
type="primary"
plain
@click="handleEdit(row)"
v-permission="'v1-experiment-marketing-material-update'"
>编辑</el-button
>
<el-button
type="primary"
plain
@click="handleRemove(row)"
v-permission="'v1-experiment-marketing-material-delete'"
>删除</el-button
>
</template>
</AppList>
<UpdateMaterialDialog
:type="materialType"
:data="currentRow"
@update="handleRefresh()"
v-if="updateVisible"
v-model="updateVisible"
></UpdateMaterialDialog>
</AppCard>
</template>
...@@ -12,7 +12,7 @@ const listOptions = computed(() => { ...@@ -12,7 +12,7 @@ const listOptions = computed(() => {
return { return {
remote: { remote: {
httpRequest: getProgress, httpRequest: getProgress,
params: {} params: {},
}, },
limit: 10, limit: 10,
columns: [ columns: [
...@@ -22,7 +22,7 @@ const listOptions = computed(() => { ...@@ -22,7 +22,7 @@ const listOptions = computed(() => {
prop: 'size', prop: 'size',
computed: (row: any) => { computed: (row: any) => {
return bytesToSize(row.row.size) return bytesToSize(row.row.size)
} },
}, },
{ label: '来源链接', prop: 'connection_name' }, { label: '来源链接', prop: 'connection_name' },
{ {
...@@ -32,12 +32,12 @@ const listOptions = computed(() => { ...@@ -32,12 +32,12 @@ const listOptions = computed(() => {
return row.row.status === '4' return row.row.status === '4'
? `<p><span style="color: rgb(170, 2, 49)">${row.row.status_name}</span><br/><span style="font-size: 12px">${row.row.message}</span></p>` ? `<p><span style="color: rgb(170, 2, 49)">${row.row.status_name}</span><br/><span style="font-size: 12px">${row.row.message}</span></p>`
: `<span style="color: #00ac27">${row.row.status_name}</span>` : `<span style="color: #00ac27">${row.row.status_name}</span>`
} },
}, },
{ label: '更新人', prop: 'updated_operator_name' }, { label: '更新人', prop: 'updated_operator_name' },
{ label: '导入时间', prop: 'created_time' }, { label: '导入时间', prop: 'created_time' },
{ label: '操作', slots: 'table-x', width: '100' } { label: '操作', slots: 'table-x', width: '100' },
] ],
} }
}) })
...@@ -64,7 +64,7 @@ const refetch = function () { ...@@ -64,7 +64,7 @@ const refetch = function () {
width="900px" width="900px"
@closed="$emit('update:modelValue', false)"> @closed="$emit('update:modelValue', false)">
<AppList v-bind="listOptions" ref="appList"> <AppList v-bind="listOptions" ref="appList">
<template #table-x="{ row }"> <template #table-x>
<el-button type="primary" plain @click="refetch" v-permission="'v1-experiment-member-delete'">刷新</el-button> <el-button type="primary" plain @click="refetch" v-permission="'v1-experiment-member-delete'">刷新</el-button>
</template> </template>
</AppList> </AppList>
......
...@@ -4,7 +4,7 @@ import { fileURLToPath, URL } from 'node:url' ...@@ -4,7 +4,7 @@ import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite' import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue' import vue from '@vitejs/plugin-vue'
// import checker from 'vite-plugin-checker' import checker from 'vite-plugin-checker'
import AutoImport from 'unplugin-auto-import/vite' import AutoImport from 'unplugin-auto-import/vite'
import ReactivityTransform from '@vue-macros/reactivity-transform/vite' import ReactivityTransform from '@vue-macros/reactivity-transform/vite'
import mkcert from 'vite-plugin-mkcert' import mkcert from 'vite-plugin-mkcert'
...@@ -20,7 +20,7 @@ export default defineConfig(({ mode }) => ({ ...@@ -20,7 +20,7 @@ export default defineConfig(({ mode }) => ({
eslintrc: { enabled: true }, eslintrc: { enabled: true },
}), }),
ReactivityTransform(), ReactivityTransform(),
// checker({ vueTsc: true, eslint: { lintCommand: 'eslint "./src/**/*.{vue,js,jsx,ts,tsx}"' } }) checker({ vueTsc: true, eslint: { useFlatConfig: true, lintCommand: 'eslint "./src/**/*.{vue,js,jsx,ts,tsx}"' } }),
], ],
server: { server: {
open: true, open: true,
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论