diff --git a/.env b/.env
index fd3be9a..995d758 100644
--- a/.env
+++ b/.env
@@ -1,7 +1,7 @@
# 程序名称
VITE_APP_NAME=Simple Element+
# 接口地址
-VITE_APP_API_BASE_URL=https://www.fastmock.site/mock/80793bea9d60828fda74202f7017e953/simple
+VITE_APP_API_BASE_URL=/simple
# 超时配置
VITE_APP_API_TIMEOUT=10000
-
+VITE_APP_SYSTEM_KEY=SIMPLE-ELEMENT
diff --git a/mock/MockCity.js b/mock/MockCity.js
new file mode 100644
index 0000000..a7cf82e
--- /dev/null
+++ b/mock/MockCity.js
@@ -0,0 +1,75 @@
+import Mock from 'mockjs'
+export default [
+ {
+ url: '/simple/city/autoCities',
+ method: 'post',
+ response: request => {
+ return {
+ success: true,
+ message: 'Success',
+ resultData: function () {
+ let pageSize = 10
+ if (request.body.page) {
+ pageSize = request.body.page.pageSize || 10
+ }
+ const total = 99
+ const pageCount = parseInt((total + pageSize - 1) / pageSize)
+ const result = {
+ page: {
+ pageSize: function () {
+ return pageSize
+ },
+ pageNumber: function () {
+ if (request.body.page) {
+ return request.body.page.pageNumber || 1
+ }
+ return 1
+ },
+ pageCount,
+ totalCount: total
+ }
+ }
+ let size = 10
+ if (request.body.page) {
+ size = request.body.page.pageSize
+ }
+ result['cityList|' + size] = [{
+ code: function () {
+ return Mock.Random.string('ABCDEFGHIJKLMNOPQRSTUVWXYZ', 3)
+ },
+ nameCn: function () {
+ return Mock.Random.city()
+ },
+ nameEn: function () {
+ return 'En' + this.nameCn
+ }
+ }]
+ return Mock.mock(result)
+ }
+ }
+ }
+ },
+ {
+ url: '/simple/city/selectCities',
+ method: 'post',
+ response: request => {
+ return {
+ success: true,
+ message: 'Success',
+ resultData: {
+ 'cityList|20-70': [{
+ code: function () {
+ return Mock.Random.string('ABCDEFGHIJKLMNOPQRSTUVWXYZ', 3)
+ },
+ nameCn: function () {
+ return Mock.Random.city()
+ },
+ nameEn: function () {
+ return 'En' + this.nameCn
+ }
+ }]
+ }
+ }
+ }
+ }
+]
diff --git a/mock/MockLogin.js b/mock/MockLogin.js
new file mode 100644
index 0000000..820bbce
--- /dev/null
+++ b/mock/MockLogin.js
@@ -0,0 +1,31 @@
+/**
+ */
+export default [{
+ url: '/simple/login',
+ method: 'post',
+ response: (request) => {
+ return {
+ success: function () {
+ return request.body.userName === 'admin' && request.body.userPassword === '123456'
+ },
+ message: function () {
+ return this.success ? '登录成功' : '用户名或密码错误'
+ },
+ resultData: function () {
+ if (this.success) {
+ return {
+ account: {
+ userNameEN: 'Tom',
+ userNameCN: '汤姆',
+ gender: 'male',
+ email: 'tomcat@fugary.com'
+ },
+ accessToken: 'abcdefghijklmn'
+ }
+ } else {
+ return null
+ }
+ }
+ }
+ }
+}]
diff --git a/mock/MockMenus.js b/mock/MockMenus.js
new file mode 100644
index 0000000..481209d
--- /dev/null
+++ b/mock/MockMenus.js
@@ -0,0 +1,159 @@
+const allMenus = [
+ {
+ id: 1,
+ iconCls: 'setting',
+ nameCn: '系统管理',
+ nameEn: 'System'
+ },
+ {
+ id: 11,
+ parentId: 1,
+ iconCls: 'user',
+ nameCn: '用户管理',
+ nameEn: 'Users',
+ menuUrl: '/admin/users'
+ },
+ {
+ id: 12,
+ parentId: 1,
+ iconCls: 'GroupOutlined',
+ nameCn: '角色管理',
+ nameEn: 'Roles',
+ menuUrl: '/admin/roles'
+ },
+ {
+ id: 13,
+ parentId: 1,
+ iconCls: 'lock',
+ nameCn: '权限管理',
+ nameEn: 'Authority',
+ menuUrl: '/admin/authority'
+ },
+ {
+ id: 14,
+ parentId: 1,
+ iconCls: 'GroupsOutlined',
+ nameCn: '用户组管理',
+ nameEn: 'Groups',
+ menuUrl: '/admin/groups'
+ },
+ {
+ id: 15,
+ parentId: 1,
+ iconCls: 'SupervisedUserCircleOutlined',
+ nameCn: '租户管理',
+ nameEn: 'Tenants',
+ menuUrl: '/admin/tenants'
+ },
+ {
+ id: 16,
+ parentId: 1,
+ iconCls: 'menu',
+ nameCn: '菜单管理',
+ nameEn: 'Menus',
+ menuUrl: '/admin/menus'
+ },
+ {
+ id: 2,
+ iconCls: 'BuildFilled',
+ nameCn: '常用工具',
+ nameEn: 'Tools'
+ },
+ {
+ id: 21,
+ parentId: 2,
+ iconCls: 'InsertEmoticonOutlined',
+ nameCn: '图标管理',
+ nameEn: 'Icons',
+ menuUrl: '/icons'
+ },
+ {
+ id: 22,
+ parentId: 2,
+ iconCls: 'TableRowsFilled',
+ nameCn: '表单示例',
+ nameEn: 'Forms',
+ menuUrl: '/forms'
+ },
+ {
+ id: 23,
+ parentId: 2,
+ iconCls: 'Grid',
+ nameCn: '表格示例',
+ nameEn: 'Tables',
+ menuUrl: '/tables'
+ },
+ {
+ id: 24,
+ parentId: 2,
+ iconCls: 'TipsAndUpdatesOutlined',
+ nameCn: '其他示例',
+ nameEn: 'Others',
+ menuUrl: '/tests'
+ }
+]
+
+export default [{
+ url: '/simple/api/menus',
+ method: 'post',
+ response: () => {
+ return {
+ success: true,
+ message: 'Success',
+ resultData: {
+ menuList: allMenus
+ }
+ }
+ }
+}, {
+ url: '/simple/api/searchMenus',
+ method: 'post',
+ response: request => {
+ return {
+ success: true,
+ message: 'Success',
+ resultData: function () {
+ const menuList = allMenus
+ let pageSize = 10
+ let pageNumber = 1
+ if (request.body.page) {
+ pageSize = +request.body.page.pageSize || 10
+ pageNumber = +request.body.page.pageNumber || 1
+ }
+ const total = menuList.length
+ const pageCount = (total + pageSize - 1) / pageSize
+ const result = {
+ page: {
+ pageSize: function () {
+ return pageSize
+ },
+ pageNumber: function ({ request }) {
+ if (request.body.page) {
+ return request.body.page.pageNumber || 1
+ }
+ return 1
+ },
+ pageCount,
+ totalCount: total
+ }
+ }
+ result.menuList = menuList.slice((pageNumber - 1) * pageSize, pageNumber * pageSize)
+ return result
+ }
+ }
+ }
+}, {
+ url: '/simple/api/menus/:id',
+ method: 'get',
+ response: request => {
+ return {
+ success: true,
+ message: 'Success',
+ resultData: function () {
+ return {
+ menu: allMenus.filter(menu => menu.id === +request.query.id)[0]
+ }
+ }
+ }
+ }
+}]
diff --git a/mock/MockUsers.js b/mock/MockUsers.js
new file mode 100644
index 0000000..41abf70
--- /dev/null
+++ b/mock/MockUsers.js
@@ -0,0 +1,74 @@
+import Mock from 'mockjs'
+export default [
+ {
+ url: '/simple/api/users',
+ method: 'post',
+ response: request => {
+ return {
+ success: true,
+ message: 'Success',
+ resultData: function () {
+ let pageSize = 10
+ if (request.body.page) {
+ pageSize = +request.body.page.pageSize || 10
+ }
+ const total = 999
+ const pageCount = (total + pageSize - 1) / pageSize
+ const result = {
+ page: {
+ pageSize: function () {
+ return pageSize
+ },
+ pageNumber: function () {
+ if (request.body.page) {
+ return request.body.page.pageNumber || 1
+ }
+ return 1
+ },
+ pageCount,
+ totalCount: total
+ }
+ }
+ let size = 10
+ if (request.body.page) {
+ size = request.body.page.pageSize
+ }
+ result['userList|' + size] = [{
+ id: '@id',
+ 'gender|1': ['male', 'female'],
+ nameCn: '@cname',
+ nameEn: '@name',
+ address: function () {
+ return Mock.Random.city(true)
+ },
+ birthday: '@date'
+ }]
+ return Mock.mock(result)
+ }
+ }
+ }
+ }, {
+ url: '/simple/api/users/:id',
+ method: 'get',
+ response: request => {
+ return {
+ success: true,
+ message: 'Success',
+ resultData: {
+ user: {
+ id: function () {
+ return request.query.id
+ },
+ 'gender|1': ['male', 'female'],
+ nameCn: '@cname',
+ nameEn: '@name',
+ address: function () {
+ return Mock.Random.city(true)
+ },
+ birthday: '@date'
+ }
+ }
+ }
+ }
+ }
+]
diff --git a/package-lock.json b/package-lock.json
index 0c35edf..c61ba50 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,28 +10,30 @@
"dependencies": {
"@element-plus/icons-vue": "^2.3.1",
"@vicons/material": "^0.12.0",
- "@vueuse/core": "^10.7.0",
- "axios": "^1.6.3",
+ "@vueuse/core": "^10.9.0",
+ "axios": "^1.6.8",
"dayjs": "^1.11.10",
- "element-plus": "^2.4.4",
+ "element-plus": "^2.6.3",
"lodash": "^4.17.21",
+ "mockjs": "^1.1.0",
"pinia": "^2.1.7",
"pinia-plugin-persistedstate": "^3.2.1",
- "vue": "^3.3.13",
- "vue-i18n": "^9.8.0",
- "vue-router": "^4.2.5",
+ "vite-plugin-mock": "^3.0.1",
+ "vue": "^3.4.21",
+ "vue-i18n": "^9.10.2",
+ "vue-router": "^4.3.0",
"vue-virtual-scroller": "^2.0.0-beta.8"
},
"devDependencies": {
- "@rushstack/eslint-patch": "^1.6.1",
- "@typescript-eslint/eslint-plugin": "^6.18.1",
- "@typescript-eslint/parser": "^6.18.1",
- "@vitejs/plugin-vue": "^4.5.2",
+ "@rushstack/eslint-patch": "^1.10.1",
+ "@typescript-eslint/eslint-plugin": "^7.4.0",
+ "@typescript-eslint/parser": "^7.4.0",
+ "@vitejs/plugin-vue": "^5.0.4",
"@vue/eslint-config-standard": "^8.0.1",
- "eslint": "^8.56.0",
- "eslint-plugin-vue": "^9.19.2",
- "typescript": "^5.3.3",
- "vite": "^5.0.10"
+ "eslint": "^8.57.0",
+ "eslint-plugin-vue": "^9.24.0",
+ "typescript": "^5.4.3",
+ "vite": "^5.2.7"
}
},
"node_modules/@aashutoshrathi/word-wrap": {
@@ -44,9 +46,9 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.23.6",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz",
- "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==",
+ "version": "7.24.1",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz",
+ "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==",
"bin": {
"parser": "bin/babel-parser.js"
},
@@ -70,14 +72,343 @@
"vue": "^3.2.0"
}
},
- "node_modules/@esbuild/win32-x64": {
- "version": "0.19.10",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.10.tgz",
- "integrity": "sha512-whqLG6Sc70AbU73fFYvuYzaE4MNMBIlR1Y/IrUeOXFrWHxBEjjbZaQ3IXIQS8wJdAzue2GwYZCjOrgrU1oUHoA==",
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz",
+ "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==",
+ "cpu": [
+ "ppc64"
+ ],
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz",
+ "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz",
+ "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz",
+ "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz",
+ "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz",
+ "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz",
+ "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz",
+ "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz",
+ "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz",
+ "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz",
+ "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz",
+ "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==",
+ "cpu": [
+ "loong64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz",
+ "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==",
+ "cpu": [
+ "mips64el"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz",
+ "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==",
+ "cpu": [
+ "ppc64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz",
+ "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz",
+ "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==",
+ "cpu": [
+ "s390x"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz",
+ "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz",
+ "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz",
+ "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz",
+ "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz",
+ "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz",
+ "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz",
+ "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==",
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"win32"
@@ -134,9 +465,9 @@
}
},
"node_modules/@eslint/js": {
- "version": "8.56.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz",
- "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==",
+ "version": "8.57.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
+ "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
"dev": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -165,13 +496,13 @@
"integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A=="
},
"node_modules/@humanwhocodes/config-array": {
- "version": "0.11.13",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz",
- "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==",
+ "version": "0.11.14",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
+ "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
"dev": true,
"dependencies": {
- "@humanwhocodes/object-schema": "^2.0.1",
- "debug": "^4.1.1",
+ "@humanwhocodes/object-schema": "^2.0.2",
+ "debug": "^4.3.1",
"minimatch": "^3.0.5"
},
"engines": {
@@ -192,18 +523,18 @@
}
},
"node_modules/@humanwhocodes/object-schema": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz",
- "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz",
+ "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==",
"dev": true
},
"node_modules/@intlify/core-base": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.8.0.tgz",
- "integrity": "sha512-UxaSZVZ1DwqC/CltUZrWZNaWNhfmKtfyV4BJSt/Zt4Or/fZs1iFj0B+OekYk1+MRHfIOe3+x00uXGQI4PbO/9g==",
+ "version": "9.10.2",
+ "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.10.2.tgz",
+ "integrity": "sha512-HGStVnKobsJL0DoYIyRCGXBH63DMQqEZxDUGrkNI05FuTcruYUtOAxyL3zoAZu/uDGO6mcUvm3VXBaHG2GdZCg==",
"dependencies": {
- "@intlify/message-compiler": "9.8.0",
- "@intlify/shared": "9.8.0"
+ "@intlify/message-compiler": "9.10.2",
+ "@intlify/shared": "9.10.2"
},
"engines": {
"node": ">= 16"
@@ -213,11 +544,11 @@
}
},
"node_modules/@intlify/message-compiler": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.8.0.tgz",
- "integrity": "sha512-McnYWhcoYmDJvssVu6QGR0shqlkJuL1HHdi5lK7fNqvQqRYaQ4lSLjYmZxwc8tRNMdIe9/KUKfyPxU9M6yCtNQ==",
+ "version": "9.10.2",
+ "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.10.2.tgz",
+ "integrity": "sha512-ntY/kfBwQRtX5Zh6wL8cSATujPzWW2ZQd1QwKyWwAy5fMqJyyixHMeovN4fmEyCqSu+hFfYOE63nU94evsy4YA==",
"dependencies": {
- "@intlify/shared": "9.8.0",
+ "@intlify/shared": "9.10.2",
"source-map-js": "^1.0.2"
},
"engines": {
@@ -228,9 +559,9 @@
}
},
"node_modules/@intlify/shared": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.8.0.tgz",
- "integrity": "sha512-TmgR0RCLjzrSo+W3wT0ALf9851iFMlVI9EYNGeWvZFUQTAJx0bvfsMlPdgVtV1tDNRiAfhkFsMKu6jtUY1ZLKQ==",
+ "version": "9.10.2",
+ "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.10.2.tgz",
+ "integrity": "sha512-ttHCAJkRy7R5W2S9RVnN9KYQYPIpV2+GiS79T4EE37nrPyH6/1SrOh3bmdCRC1T3ocL8qCDx7x2lBJ0xaITU7Q==",
"engines": {
"node": ">= 16"
},
@@ -247,7 +578,6 @@
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
"dependencies": {
"@nodelib/fs.stat": "2.0.5",
"run-parallel": "^1.1.9"
@@ -260,7 +590,6 @@
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true,
"engines": {
"node": ">= 8"
}
@@ -269,7 +598,6 @@
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dev": true,
"dependencies": {
"@nodelib/fs.scandir": "2.1.5",
"fastq": "^1.6.0"
@@ -288,25 +616,197 @@
"url": "https://opencollective.com/popperjs"
}
},
- "node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.9.1",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.1.tgz",
- "integrity": "sha512-PyJsSsafjmIhVgaI1Zdj7m8BB8mMckFah/xbpplObyHfiXzKcI5UOUXRyOdHW7nz4DpMCuzLnF7v5IWHenCwYA==",
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.13.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.2.tgz",
+ "integrity": "sha512-3XFIDKWMFZrMnao1mJhnOT1h2g0169Os848NhhmGweEcfJ4rCi+3yMCOLG4zA61rbJdkcrM/DjVZm9Hg5p5w7g==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.13.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.2.tgz",
+ "integrity": "sha512-GdxxXbAuM7Y/YQM9/TwwP+L0omeE/lJAR1J+olu36c3LqqZEBdsIWeQ91KBe6nxwOnb06Xh7JS2U5ooWU5/LgQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.13.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.2.tgz",
+ "integrity": "sha512-mCMlpzlBgOTdaFs83I4XRr8wNPveJiJX1RLfv4hggyIVhfB5mJfN4P8Z6yKh+oE4Luz+qq1P3kVdWrCKcMYrrA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.13.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.2.tgz",
+ "integrity": "sha512-yUoEvnH0FBef/NbB1u6d3HNGyruAKnN74LrPAfDQL3O32e3k3OSfLrPgSJmgb3PJrBZWfPyt6m4ZhAFa2nZp2A==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.13.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.2.tgz",
+ "integrity": "sha512-GYbLs5ErswU/Xs7aGXqzc3RrdEjKdmoCrgzhJWyFL0r5fL3qd1NPcDKDowDnmcoSiGJeU68/Vy+OMUluRxPiLQ==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.13.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.2.tgz",
+ "integrity": "sha512-L1+D8/wqGnKQIlh4Zre9i4R4b4noxzH5DDciyahX4oOz62CphY7WDWqJoQ66zNR4oScLNOqQJfNSIAe/6TPUmQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.13.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.2.tgz",
+ "integrity": "sha512-tK5eoKFkXdz6vjfkSTCupUzCo40xueTOiOO6PeEIadlNBkadH1wNOH8ILCPIl8by/Gmb5AGAeQOFeLev7iZDOA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
+ "version": "4.13.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.13.2.tgz",
+ "integrity": "sha512-zvXvAUGGEYi6tYhcDmb9wlOckVbuD+7z3mzInCSTACJ4DQrdSLPNUeDIcAQW39M3q6PDquqLWu7pnO39uSMRzQ==",
+ "cpu": [
+ "ppc64le"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.13.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.2.tgz",
+ "integrity": "sha512-C3GSKvMtdudHCN5HdmAMSRYR2kkhgdOfye4w0xzyii7lebVr4riCgmM6lRiSCnJn2w1Xz7ZZzHKuLrjx5620kw==",
+ "cpu": [
+ "riscv64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.13.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.13.2.tgz",
+ "integrity": "sha512-l4U0KDFwzD36j7HdfJ5/TveEQ1fUTjFFQP5qIt9gBqBgu1G8/kCaq5Ok05kd5TG9F8Lltf3MoYsUMw3rNlJ0Yg==",
+ "cpu": [
+ "s390x"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.13.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.2.tgz",
+ "integrity": "sha512-xXMLUAMzrtsvh3cZ448vbXqlUa7ZL8z0MwHp63K2IIID2+DeP5iWIT6g1SN7hg1VxPzqx0xZdiDM9l4n9LRU1A==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.13.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.2.tgz",
+ "integrity": "sha512-M/JYAWickafUijWPai4ehrjzVPKRCyDb1SLuO+ZyPfoXgeCEAlgPkNXewFZx0zcnoIe3ay4UjXIMdXQXOZXWqA==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.13.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.2.tgz",
+ "integrity": "sha512-2YWwoVg9KRkIKaXSh0mz3NmfurpmYoBBTAXA9qt7VXk0Xy12PoOP40EFuau+ajgALbbhi4uTj3tSG3tVseCjuA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.13.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.2.tgz",
+ "integrity": "sha512-2FSsE9aQ6OWD20E498NYKEQLneShWes0NGMPQwxWOdws35qQXH+FplabOSP5zEe1pVjurSDOGEVCE2agFwSEsw==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.13.2",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.2.tgz",
+ "integrity": "sha512-7h7J2nokcdPePdKykd8wtc8QqqkqxIrUz7MHj6aNr8waBRU//NLDVnNjQnqQO6fqtjrtCdftpbTuOKAyrAQETQ==",
"cpu": [
"x64"
],
- "dev": true,
"optional": true,
"os": [
"win32"
]
},
"node_modules/@rushstack/eslint-patch": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.6.1.tgz",
- "integrity": "sha512-UY+FGM/2jjMkzQLn8pxcHGMaVLh9aEitG3zY2CiY7XHdLiz3bZOwa6oDxNqEMv7zZkV+cj5DOdz0cQ1BP5Hjgw==",
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.1.tgz",
+ "integrity": "sha512-S3Kq8e7LqxkA9s7HKLqXGTGck1uwis5vAXan3FnU5yw1Ec5hsSGnq4s/UCaSqABPOnOTg7zASLyst7+ohgWexg==",
"dev": true
},
+ "node_modules/@types/estree": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
+ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="
+ },
"node_modules/@types/json-schema": {
"version": "7.0.15",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
@@ -332,11 +832,15 @@
"@types/lodash": "*"
}
},
+ "node_modules/@types/mockjs": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/@types/mockjs/-/mockjs-1.0.10.tgz",
+ "integrity": "sha512-SXgrhajHG7boLv6oU93CcmdDm0HYRiceuz6b+7z+/2lCJPTWDv0V5YiwFHT2ejE4bQqgSXQiVPQYPWv7LGsK1g=="
+ },
"node_modules/@types/node": {
"version": "20.10.5",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.5.tgz",
"integrity": "sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==",
- "dev": true,
"optional": true,
"peer": true,
"dependencies": {
@@ -344,9 +848,9 @@
}
},
"node_modules/@types/semver": {
- "version": "7.5.6",
- "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz",
- "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==",
+ "version": "7.5.8",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz",
+ "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
"dev": true
},
"node_modules/@types/web-bluetooth": {
@@ -355,16 +859,16 @@
"integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow=="
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "6.18.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.18.1.tgz",
- "integrity": "sha512-nISDRYnnIpk7VCFrGcu1rnZfM1Dh9LRHnfgdkjcbi/l7g16VYRri3TjXi9Ir4lOZSw5N/gnV/3H7jIPQ8Q4daA==",
+ "version": "7.4.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.4.0.tgz",
+ "integrity": "sha512-yHMQ/oFaM7HZdVrVm/M2WHaNPgyuJH4WelkSVEWSSsir34kxW2kDJCxlXRhhGWEsMN0WAW/vLpKfKVcm8k+MPw==",
"dev": true,
"dependencies": {
"@eslint-community/regexpp": "^4.5.1",
- "@typescript-eslint/scope-manager": "6.18.1",
- "@typescript-eslint/type-utils": "6.18.1",
- "@typescript-eslint/utils": "6.18.1",
- "@typescript-eslint/visitor-keys": "6.18.1",
+ "@typescript-eslint/scope-manager": "7.4.0",
+ "@typescript-eslint/type-utils": "7.4.0",
+ "@typescript-eslint/utils": "7.4.0",
+ "@typescript-eslint/visitor-keys": "7.4.0",
"debug": "^4.3.4",
"graphemer": "^1.4.0",
"ignore": "^5.2.4",
@@ -373,15 +877,15 @@
"ts-api-utils": "^1.0.1"
},
"engines": {
- "node": "^16.0.0 || >=18.0.0"
+ "node": "^18.18.0 || >=20.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha",
- "eslint": "^7.0.0 || ^8.0.0"
+ "@typescript-eslint/parser": "^7.0.0",
+ "eslint": "^8.56.0"
},
"peerDependenciesMeta": {
"typescript": {
@@ -405,26 +909,26 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "6.18.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.18.1.tgz",
- "integrity": "sha512-zct/MdJnVaRRNy9e84XnVtRv9Vf91/qqe+hZJtKanjojud4wAVy/7lXxJmMyX6X6J+xc6c//YEWvpeif8cAhWA==",
+ "version": "7.4.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.4.0.tgz",
+ "integrity": "sha512-ZvKHxHLusweEUVwrGRXXUVzFgnWhigo4JurEj0dGF1tbcGh6buL+ejDdjxOQxv6ytcY1uhun1p2sm8iWStlgLQ==",
"dev": true,
"dependencies": {
- "@typescript-eslint/scope-manager": "6.18.1",
- "@typescript-eslint/types": "6.18.1",
- "@typescript-eslint/typescript-estree": "6.18.1",
- "@typescript-eslint/visitor-keys": "6.18.1",
+ "@typescript-eslint/scope-manager": "7.4.0",
+ "@typescript-eslint/types": "7.4.0",
+ "@typescript-eslint/typescript-estree": "7.4.0",
+ "@typescript-eslint/visitor-keys": "7.4.0",
"debug": "^4.3.4"
},
"engines": {
- "node": "^16.0.0 || >=18.0.0"
+ "node": "^18.18.0 || >=20.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0"
+ "eslint": "^8.56.0"
},
"peerDependenciesMeta": {
"typescript": {
@@ -433,16 +937,16 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "6.18.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.18.1.tgz",
- "integrity": "sha512-BgdBwXPFmZzaZUuw6wKiHKIovms97a7eTImjkXCZE04TGHysG+0hDQPmygyvgtkoB/aOQwSM/nWv3LzrOIQOBw==",
+ "version": "7.4.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.4.0.tgz",
+ "integrity": "sha512-68VqENG5HK27ypafqLVs8qO+RkNc7TezCduYrx8YJpXq2QGZ30vmNZGJJJC48+MVn4G2dCV8m5ZTVnzRexTVtw==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "6.18.1",
- "@typescript-eslint/visitor-keys": "6.18.1"
+ "@typescript-eslint/types": "7.4.0",
+ "@typescript-eslint/visitor-keys": "7.4.0"
},
"engines": {
- "node": "^16.0.0 || >=18.0.0"
+ "node": "^18.18.0 || >=20.0.0"
},
"funding": {
"type": "opencollective",
@@ -450,25 +954,25 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "6.18.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.18.1.tgz",
- "integrity": "sha512-wyOSKhuzHeU/5pcRDP2G2Ndci+4g653V43gXTpt4nbyoIOAASkGDA9JIAgbQCdCkcr1MvpSYWzxTz0olCn8+/Q==",
+ "version": "7.4.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.4.0.tgz",
+ "integrity": "sha512-247ETeHgr9WTRMqHbbQdzwzhuyaJ8dPTuyuUEMANqzMRB1rj/9qFIuIXK7l0FX9i9FXbHeBQl/4uz6mYuCE7Aw==",
"dev": true,
"dependencies": {
- "@typescript-eslint/typescript-estree": "6.18.1",
- "@typescript-eslint/utils": "6.18.1",
+ "@typescript-eslint/typescript-estree": "7.4.0",
+ "@typescript-eslint/utils": "7.4.0",
"debug": "^4.3.4",
"ts-api-utils": "^1.0.1"
},
"engines": {
- "node": "^16.0.0 || >=18.0.0"
+ "node": "^18.18.0 || >=20.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0"
+ "eslint": "^8.56.0"
},
"peerDependenciesMeta": {
"typescript": {
@@ -477,12 +981,12 @@
}
},
"node_modules/@typescript-eslint/types": {
- "version": "6.18.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.18.1.tgz",
- "integrity": "sha512-4TuMAe+tc5oA7wwfqMtB0Y5OrREPF1GeJBAjqwgZh1lEMH5PJQgWgHGfYufVB51LtjD+peZylmeyxUXPfENLCw==",
+ "version": "7.4.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.4.0.tgz",
+ "integrity": "sha512-mjQopsbffzJskos5B4HmbsadSJQWaRK0UxqQ7GuNA9Ga4bEKeiO6b2DnB6cM6bpc8lemaPseh0H9B/wyg+J7rw==",
"dev": true,
"engines": {
- "node": "^16.0.0 || >=18.0.0"
+ "node": "^18.18.0 || >=20.0.0"
},
"funding": {
"type": "opencollective",
@@ -490,13 +994,13 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "6.18.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.18.1.tgz",
- "integrity": "sha512-fv9B94UAhywPRhUeeV/v+3SBDvcPiLxRZJw/xZeeGgRLQZ6rLMG+8krrJUyIf6s1ecWTzlsbp0rlw7n9sjufHA==",
+ "version": "7.4.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.4.0.tgz",
+ "integrity": "sha512-A99j5AYoME/UBQ1ucEbbMEmGkN7SE0BvZFreSnTd1luq7yulcHdyGamZKizU7canpGDWGJ+Q6ZA9SyQobipePg==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "6.18.1",
- "@typescript-eslint/visitor-keys": "6.18.1",
+ "@typescript-eslint/types": "7.4.0",
+ "@typescript-eslint/visitor-keys": "7.4.0",
"debug": "^4.3.4",
"globby": "^11.1.0",
"is-glob": "^4.0.3",
@@ -505,7 +1009,7 @@
"ts-api-utils": "^1.0.1"
},
"engines": {
- "node": "^16.0.0 || >=18.0.0"
+ "node": "^18.18.0 || >=20.0.0"
},
"funding": {
"type": "opencollective",
@@ -542,9 +1046,9 @@
}
},
"node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "version": "7.6.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
+ "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
"dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
@@ -557,34 +1061,34 @@
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "6.18.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.18.1.tgz",
- "integrity": "sha512-zZmTuVZvD1wpoceHvoQpOiewmWu3uP9FuTWo8vqpy2ffsmfCE8mklRPi+vmnIYAIk9t/4kOThri2QCDgor+OpQ==",
+ "version": "7.4.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.4.0.tgz",
+ "integrity": "sha512-NQt9QLM4Tt8qrlBVY9lkMYzfYtNz8/6qwZg8pI3cMGlPnj6mOpRxxAm7BMJN9K0AiY+1BwJ5lVC650YJqYOuNg==",
"dev": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.4.0",
"@types/json-schema": "^7.0.12",
"@types/semver": "^7.5.0",
- "@typescript-eslint/scope-manager": "6.18.1",
- "@typescript-eslint/types": "6.18.1",
- "@typescript-eslint/typescript-estree": "6.18.1",
+ "@typescript-eslint/scope-manager": "7.4.0",
+ "@typescript-eslint/types": "7.4.0",
+ "@typescript-eslint/typescript-estree": "7.4.0",
"semver": "^7.5.4"
},
"engines": {
- "node": "^16.0.0 || >=18.0.0"
+ "node": "^18.18.0 || >=20.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0"
+ "eslint": "^8.56.0"
}
},
"node_modules/@typescript-eslint/utils/node_modules/semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "version": "7.6.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
+ "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
"dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
@@ -597,16 +1101,16 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "6.18.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.18.1.tgz",
- "integrity": "sha512-/kvt0C5lRqGoCfsbmm7/CwMqoSkY3zzHLIjdhHZQW3VFrnz7ATecOHR7nb7V+xn4286MBxfnQfQhAmCI0u+bJA==",
+ "version": "7.4.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.4.0.tgz",
+ "integrity": "sha512-0zkC7YM0iX5Y41homUUeW1CHtZR01K3ybjM1l6QczoMuay0XKtrb93kv95AxUGwdjGr64nNqnOCwmEl616N8CA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "6.18.1",
+ "@typescript-eslint/types": "7.4.0",
"eslint-visitor-keys": "^3.4.1"
},
"engines": {
- "node": "^16.0.0 || >=18.0.0"
+ "node": "^18.18.0 || >=20.0.0"
},
"funding": {
"type": "opencollective",
@@ -625,62 +1129,62 @@
"integrity": "sha512-chv1CYAl8P32P3Ycwgd5+vw/OFNc2mtkKdb1Rw4T5IJmKy6GVDsoUKV3N2l208HATn7CCQphZtuPDdsm7K2kmA=="
},
"node_modules/@vitejs/plugin-vue": {
- "version": "4.5.2",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.5.2.tgz",
- "integrity": "sha512-UGR3DlzLi/SaVBPX0cnSyE37vqxU3O6chn8l0HJNzQzDia6/Au2A4xKv+iIJW8w2daf80G7TYHhi1pAUjdZ0bQ==",
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.4.tgz",
+ "integrity": "sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==",
"dev": true,
"engines": {
- "node": "^14.18.0 || >=16.0.0"
+ "node": "^18.0.0 || >=20.0.0"
},
"peerDependencies": {
- "vite": "^4.0.0 || ^5.0.0",
+ "vite": "^5.0.0",
"vue": "^3.2.25"
}
},
"node_modules/@vue/compiler-core": {
- "version": "3.3.13",
- "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.13.tgz",
- "integrity": "sha512-bwi9HShGu7uaZLOErZgsH2+ojsEdsjerbf2cMXPwmvcgZfVPZ2BVZzCVnwZBxTAYd6Mzbmf6izcUNDkWnBBQ6A==",
+ "version": "3.4.21",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.21.tgz",
+ "integrity": "sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==",
"dependencies": {
- "@babel/parser": "^7.23.5",
- "@vue/shared": "3.3.13",
+ "@babel/parser": "^7.23.9",
+ "@vue/shared": "3.4.21",
+ "entities": "^4.5.0",
"estree-walker": "^2.0.2",
"source-map-js": "^1.0.2"
}
},
"node_modules/@vue/compiler-dom": {
- "version": "3.3.13",
- "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.13.tgz",
- "integrity": "sha512-EYRDpbLadGtNL0Gph+HoKiYqXLqZ0xSSpR5Dvnu/Ep7ggaCbjRDIus1MMxTS2Qm0koXED4xSlvTZaTnI8cYAsw==",
+ "version": "3.4.21",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.21.tgz",
+ "integrity": "sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==",
"dependencies": {
- "@vue/compiler-core": "3.3.13",
- "@vue/shared": "3.3.13"
+ "@vue/compiler-core": "3.4.21",
+ "@vue/shared": "3.4.21"
}
},
"node_modules/@vue/compiler-sfc": {
- "version": "3.3.13",
- "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.13.tgz",
- "integrity": "sha512-DQVmHEy/EKIgggvnGRLx21hSqnr1smUS9Aq8tfxiiot8UR0/pXKHN9k78/qQ7etyQTFj5em5nruODON7dBeumw==",
+ "version": "3.4.21",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.21.tgz",
+ "integrity": "sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==",
"dependencies": {
- "@babel/parser": "^7.23.5",
- "@vue/compiler-core": "3.3.13",
- "@vue/compiler-dom": "3.3.13",
- "@vue/compiler-ssr": "3.3.13",
- "@vue/reactivity-transform": "3.3.13",
- "@vue/shared": "3.3.13",
+ "@babel/parser": "^7.23.9",
+ "@vue/compiler-core": "3.4.21",
+ "@vue/compiler-dom": "3.4.21",
+ "@vue/compiler-ssr": "3.4.21",
+ "@vue/shared": "3.4.21",
"estree-walker": "^2.0.2",
- "magic-string": "^0.30.5",
- "postcss": "^8.4.32",
+ "magic-string": "^0.30.7",
+ "postcss": "^8.4.35",
"source-map-js": "^1.0.2"
}
},
"node_modules/@vue/compiler-ssr": {
- "version": "3.3.13",
- "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.13.tgz",
- "integrity": "sha512-d/P3bCeUGmkJNS1QUZSAvoCIW4fkOKK3l2deE7zrp0ypJEy+En2AcypIkqvcFQOcw3F0zt2VfMvNsA9JmExTaw==",
+ "version": "3.4.21",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.21.tgz",
+ "integrity": "sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==",
"dependencies": {
- "@vue/compiler-dom": "3.3.13",
- "@vue/shared": "3.3.13"
+ "@vue/compiler-dom": "3.4.21",
+ "@vue/shared": "3.4.21"
}
},
"node_modules/@vue/devtools-api": {
@@ -707,79 +1211,67 @@
}
},
"node_modules/@vue/reactivity": {
- "version": "3.3.13",
- "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.13.tgz",
- "integrity": "sha512-fjzCxceMahHhi4AxUBzQqqVhuA21RJ0COaWTbIBl1PruGW1CeY97louZzLi4smpYx+CHfFPPU/CS8NybbGvPKQ==",
+ "version": "3.4.21",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.21.tgz",
+ "integrity": "sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw==",
"dependencies": {
- "@vue/shared": "3.3.13"
- }
- },
- "node_modules/@vue/reactivity-transform": {
- "version": "3.3.13",
- "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.13.tgz",
- "integrity": "sha512-oWnydGH0bBauhXvh5KXUy61xr9gKaMbtsMHk40IK9M4gMuKPJ342tKFarY0eQ6jef8906m35q37wwA8DMZOm5Q==",
- "dependencies": {
- "@babel/parser": "^7.23.5",
- "@vue/compiler-core": "3.3.13",
- "@vue/shared": "3.3.13",
- "estree-walker": "^2.0.2",
- "magic-string": "^0.30.5"
+ "@vue/shared": "3.4.21"
}
},
"node_modules/@vue/runtime-core": {
- "version": "3.3.13",
- "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.13.tgz",
- "integrity": "sha512-1TzA5TvGuh2zUwMJgdfvrBABWZ7y8kBwBhm7BXk8rvdx2SsgcGfz2ruv2GzuGZNvL1aKnK8CQMV/jFOrxNQUMA==",
+ "version": "3.4.21",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.21.tgz",
+ "integrity": "sha512-pQthsuYzE1XcGZznTKn73G0s14eCJcjaLvp3/DKeYWoFacD9glJoqlNBxt3W2c5S40t6CCcpPf+jG01N3ULyrA==",
"dependencies": {
- "@vue/reactivity": "3.3.13",
- "@vue/shared": "3.3.13"
+ "@vue/reactivity": "3.4.21",
+ "@vue/shared": "3.4.21"
}
},
"node_modules/@vue/runtime-dom": {
- "version": "3.3.13",
- "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.13.tgz",
- "integrity": "sha512-JJkpE8R/hJKXqVTgUoODwS5wqKtOsmJPEqmp90PDVGygtJ4C0PtOkcEYXwhiVEmef6xeXcIlrT3Yo5aQ4qkHhQ==",
+ "version": "3.4.21",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.21.tgz",
+ "integrity": "sha512-gvf+C9cFpevsQxbkRBS1NpU8CqxKw0ebqMvLwcGQrNpx6gqRDodqKqA+A2VZZpQ9RpK2f9yfg8VbW/EpdFUOJw==",
"dependencies": {
- "@vue/runtime-core": "3.3.13",
- "@vue/shared": "3.3.13",
+ "@vue/runtime-core": "3.4.21",
+ "@vue/shared": "3.4.21",
"csstype": "^3.1.3"
}
},
"node_modules/@vue/server-renderer": {
- "version": "3.3.13",
- "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.13.tgz",
- "integrity": "sha512-vSnN+nuf6iSqTL3Qgx/9A+BT+0Zf/VJOgF5uMZrKjYPs38GMYyAU1coDyBNHauehXDaP+zl73VhwWv0vBRBHcg==",
+ "version": "3.4.21",
+ "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.21.tgz",
+ "integrity": "sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==",
"dependencies": {
- "@vue/compiler-ssr": "3.3.13",
- "@vue/shared": "3.3.13"
+ "@vue/compiler-ssr": "3.4.21",
+ "@vue/shared": "3.4.21"
},
"peerDependencies": {
- "vue": "3.3.13"
+ "vue": "3.4.21"
}
},
"node_modules/@vue/shared": {
- "version": "3.3.13",
- "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.13.tgz",
- "integrity": "sha512-/zYUwiHD8j7gKx2argXEMCUXVST6q/21DFU0sTfNX0URJroCe3b1UF6vLJ3lQDfLNIiiRl2ONp7Nh5UVWS6QnA=="
+ "version": "3.4.21",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.21.tgz",
+ "integrity": "sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g=="
},
"node_modules/@vueuse/core": {
- "version": "10.7.0",
- "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.7.0.tgz",
- "integrity": "sha512-4EUDESCHtwu44ZWK3Gc/hZUVhVo/ysvdtwocB5vcauSV4B7NiGY5972WnsojB3vRNdxvAt7kzJWE2h9h7C9d5w==",
+ "version": "10.9.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.9.0.tgz",
+ "integrity": "sha512-/1vjTol8SXnx6xewDEKfS0Ra//ncg4Hb0DaZiwKf7drgfMsKFExQ+FnnENcN6efPen+1kIzhLQoGSy0eDUVOMg==",
"dependencies": {
"@types/web-bluetooth": "^0.0.20",
- "@vueuse/metadata": "10.7.0",
- "@vueuse/shared": "10.7.0",
- "vue-demi": ">=0.14.6"
+ "@vueuse/metadata": "10.9.0",
+ "@vueuse/shared": "10.9.0",
+ "vue-demi": ">=0.14.7"
},
"funding": {
"url": "https://github.com/sponsors/antfu"
}
},
"node_modules/@vueuse/core/node_modules/vue-demi": {
- "version": "0.14.6",
- "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz",
- "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==",
+ "version": "0.14.7",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz",
+ "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==",
"hasInstallScript": true,
"bin": {
"vue-demi-fix": "bin/vue-demi-fix.js",
@@ -802,28 +1294,28 @@
}
},
"node_modules/@vueuse/metadata": {
- "version": "10.7.0",
- "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.7.0.tgz",
- "integrity": "sha512-GlaH7tKP2iBCZ3bHNZ6b0cl9g0CJK8lttkBNUX156gWvNYhTKEtbweWLm9rxCPIiwzYcr/5xML6T8ZUEt+DkvA==",
+ "version": "10.9.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.9.0.tgz",
+ "integrity": "sha512-iddNbg3yZM0X7qFY2sAotomgdHK7YJ6sKUvQqbvwnf7TmaVPxS4EJydcNsVejNdS8iWCtDk+fYXr7E32nyTnGA==",
"funding": {
"url": "https://github.com/sponsors/antfu"
}
},
"node_modules/@vueuse/shared": {
- "version": "10.7.0",
- "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.7.0.tgz",
- "integrity": "sha512-kc00uV6CiaTdc3i1CDC4a3lBxzaBE9AgYNtFN87B5OOscqeWElj/uza8qVDmk7/U8JbqoONLbtqiLJ5LGRuqlw==",
+ "version": "10.9.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.9.0.tgz",
+ "integrity": "sha512-Uud2IWncmAfJvRaFYzv5OHDli+FbOzxiVEQdLCKQKLyhz94PIyFC3CHcH7EDMwIn8NPtD06+PNbC/PiO0LGLtw==",
"dependencies": {
- "vue-demi": ">=0.14.6"
+ "vue-demi": ">=0.14.7"
},
"funding": {
"url": "https://github.com/sponsors/antfu"
}
},
"node_modules/@vueuse/shared/node_modules/vue-demi": {
- "version": "0.14.6",
- "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz",
- "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==",
+ "version": "0.14.7",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.7.tgz",
+ "integrity": "sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==",
"hasInstallScript": true,
"bin": {
"vue-demi-fix": "bin/vue-demi-fix.js",
@@ -906,6 +1398,18 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
"node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
@@ -1052,11 +1556,11 @@
}
},
"node_modules/axios": {
- "version": "1.6.3",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.3.tgz",
- "integrity": "sha512-fWyNdeawGam70jXSVlKl+SUNVcL6j6W79CuSIPfi6HnDUmSCH6gyUys/HrqHeA/wU0Az41rRgean494d0Jb+ww==",
+ "version": "1.6.8",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz",
+ "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==",
"dependencies": {
- "follow-redirects": "^1.15.0",
+ "follow-redirects": "^1.15.6",
"form-data": "^4.0.0",
"proxy-from-env": "^1.1.0"
}
@@ -1067,6 +1571,17 @@
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true
},
+ "node_modules/binary-extensions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/boolbase": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
@@ -1087,7 +1602,6 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
"dependencies": {
"fill-range": "^7.0.1"
},
@@ -1119,6 +1633,20 @@
"node": ">=10"
}
},
+ "node_modules/bundle-require": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-4.0.2.tgz",
+ "integrity": "sha512-jwzPOChofl67PSTW2SGubV9HBQAhhR2i6nskiOThauo9dzwDUgOWQScFVaJkjEfYX+UXiD+LEx8EblQMc2wIag==",
+ "dependencies": {
+ "load-tsconfig": "^0.2.3"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "esbuild": ">=0.17"
+ }
+ },
"node_modules/call-bind": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz",
@@ -1158,6 +1686,40 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
+ "node_modules/chokidar": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -1187,12 +1749,47 @@
"node": ">= 0.8"
}
},
+ "node_modules/commander": {
+ "version": "12.0.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-12.0.0.tgz",
+ "integrity": "sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==",
+ "engines": {
+ "node": ">=18"
+ }
+ },
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
"dev": true
},
+ "node_modules/connect": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz",
+ "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==",
+ "dependencies": {
+ "debug": "2.6.9",
+ "finalhandler": "1.1.2",
+ "parseurl": "~1.3.3",
+ "utils-merge": "1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/connect/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/connect/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
"node_modules/cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -1233,7 +1830,6 @@
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
"dependencies": {
"ms": "2.1.2"
},
@@ -1315,10 +1911,15 @@
"node": ">=6.0.0"
}
},
+ "node_modules/ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
+ },
"node_modules/element-plus": {
- "version": "2.4.4",
- "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.4.4.tgz",
- "integrity": "sha512-TlKubXJgxwhER0dw+8ULn9hr9kZjraV4R6Q/eidwWUwCKxwXYPBGmMKsZ/85tlxlhMYbcLZd/YZh6G3QkHX4fg==",
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.6.3.tgz",
+ "integrity": "sha512-U4L/mr+1r+EmAUYUHrs0V/8hHMdBGP07rPymSC72LZCN4jK1UwygQYICegTQ5us4mxeqBvW6wfoEfo003fwCqw==",
"dependencies": {
"@ctrl/tinycolor": "^3.4.1",
"@element-plus/icons-vue": "^2.3.1",
@@ -1428,6 +2029,25 @@
}
}
},
+ "node_modules/encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
"node_modules/es-abstract": {
"version": "1.22.3",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz",
@@ -1522,10 +2142,9 @@
}
},
"node_modules/esbuild": {
- "version": "0.19.10",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.10.tgz",
- "integrity": "sha512-S1Y27QGt/snkNYrRcswgRFqZjaTG5a5xM3EQo97uNBnH505pdzSNe/HLBq1v0RO7iK/ngdbhJB6mDAp0OK+iUA==",
- "dev": true,
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz",
+ "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==",
"hasInstallScript": true,
"bin": {
"esbuild": "bin/esbuild"
@@ -1534,29 +2153,29 @@
"node": ">=12"
},
"optionalDependencies": {
- "@esbuild/aix-ppc64": "0.19.10",
- "@esbuild/android-arm": "0.19.10",
- "@esbuild/android-arm64": "0.19.10",
- "@esbuild/android-x64": "0.19.10",
- "@esbuild/darwin-arm64": "0.19.10",
- "@esbuild/darwin-x64": "0.19.10",
- "@esbuild/freebsd-arm64": "0.19.10",
- "@esbuild/freebsd-x64": "0.19.10",
- "@esbuild/linux-arm": "0.19.10",
- "@esbuild/linux-arm64": "0.19.10",
- "@esbuild/linux-ia32": "0.19.10",
- "@esbuild/linux-loong64": "0.19.10",
- "@esbuild/linux-mips64el": "0.19.10",
- "@esbuild/linux-ppc64": "0.19.10",
- "@esbuild/linux-riscv64": "0.19.10",
- "@esbuild/linux-s390x": "0.19.10",
- "@esbuild/linux-x64": "0.19.10",
- "@esbuild/netbsd-x64": "0.19.10",
- "@esbuild/openbsd-x64": "0.19.10",
- "@esbuild/sunos-x64": "0.19.10",
- "@esbuild/win32-arm64": "0.19.10",
- "@esbuild/win32-ia32": "0.19.10",
- "@esbuild/win32-x64": "0.19.10"
+ "@esbuild/aix-ppc64": "0.20.2",
+ "@esbuild/android-arm": "0.20.2",
+ "@esbuild/android-arm64": "0.20.2",
+ "@esbuild/android-x64": "0.20.2",
+ "@esbuild/darwin-arm64": "0.20.2",
+ "@esbuild/darwin-x64": "0.20.2",
+ "@esbuild/freebsd-arm64": "0.20.2",
+ "@esbuild/freebsd-x64": "0.20.2",
+ "@esbuild/linux-arm": "0.20.2",
+ "@esbuild/linux-arm64": "0.20.2",
+ "@esbuild/linux-ia32": "0.20.2",
+ "@esbuild/linux-loong64": "0.20.2",
+ "@esbuild/linux-mips64el": "0.20.2",
+ "@esbuild/linux-ppc64": "0.20.2",
+ "@esbuild/linux-riscv64": "0.20.2",
+ "@esbuild/linux-s390x": "0.20.2",
+ "@esbuild/linux-x64": "0.20.2",
+ "@esbuild/netbsd-x64": "0.20.2",
+ "@esbuild/openbsd-x64": "0.20.2",
+ "@esbuild/sunos-x64": "0.20.2",
+ "@esbuild/win32-arm64": "0.20.2",
+ "@esbuild/win32-ia32": "0.20.2",
+ "@esbuild/win32-x64": "0.20.2"
}
},
"node_modules/escape-html": {
@@ -1577,16 +2196,16 @@
}
},
"node_modules/eslint": {
- "version": "8.56.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz",
- "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==",
+ "version": "8.57.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
+ "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
"dev": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.6.1",
"@eslint/eslintrc": "^2.1.4",
- "@eslint/js": "8.56.0",
- "@humanwhocodes/config-array": "^0.11.13",
+ "@eslint/js": "8.57.0",
+ "@humanwhocodes/config-array": "^0.11.14",
"@humanwhocodes/module-importer": "^1.0.1",
"@nodelib/fs.walk": "^1.2.8",
"@ungap/structured-clone": "^1.2.0",
@@ -1867,17 +2486,18 @@
}
},
"node_modules/eslint-plugin-vue": {
- "version": "9.19.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.19.2.tgz",
- "integrity": "sha512-CPDqTOG2K4Ni2o4J5wixkLVNwgctKXFu6oBpVJlpNq7f38lh9I80pRTouZSJ2MAebPJlINU/KTFSXyQfBUlymA==",
+ "version": "9.24.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.24.0.tgz",
+ "integrity": "sha512-9SkJMvF8NGMT9aQCwFc5rj8Wo1XWSMSHk36i7ZwdI614BU7sIOR28ZjuFPKp8YGymZN12BSEbiSwa7qikp+PBw==",
"dev": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.4.0",
+ "globals": "^13.24.0",
"natural-compare": "^1.4.0",
"nth-check": "^2.1.1",
- "postcss-selector-parser": "^6.0.13",
- "semver": "^7.5.4",
- "vue-eslint-parser": "^9.3.1",
+ "postcss-selector-parser": "^6.0.15",
+ "semver": "^7.6.0",
+ "vue-eslint-parser": "^9.4.2",
"xml-name-validator": "^4.0.0"
},
"engines": {
@@ -1888,9 +2508,9 @@
}
},
"node_modules/eslint-plugin-vue/node_modules/semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "version": "7.6.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
+ "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
"dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
@@ -2031,7 +2651,6 @@
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
"integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
- "dev": true,
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
@@ -2047,7 +2666,6 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
"dependencies": {
"is-glob": "^4.0.1"
},
@@ -2071,7 +2689,6 @@
"version": "1.16.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz",
"integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==",
- "dev": true,
"dependencies": {
"reusify": "^1.0.4"
}
@@ -2092,7 +2709,6 @@
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
"dependencies": {
"to-regex-range": "^5.0.1"
},
@@ -2100,6 +2716,36 @@
"node": ">=8"
}
},
+ "node_modules/finalhandler": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
+ "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
+ "dependencies": {
+ "debug": "2.6.9",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "on-finished": "~2.3.0",
+ "parseurl": "~1.3.3",
+ "statuses": "~1.5.0",
+ "unpipe": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/finalhandler/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/finalhandler/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ },
"node_modules/find-up": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
@@ -2137,9 +2783,9 @@
"dev": true
},
"node_modules/follow-redirects": {
- "version": "1.15.4",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz",
- "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==",
+ "version": "1.15.6",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
+ "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
"funding": [
{
"type": "individual",
@@ -2187,7 +2833,6 @@
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
"hasInstallScript": true,
"optional": true,
"os": [
@@ -2535,6 +3180,17 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/is-boolean-object": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
@@ -2594,7 +3250,6 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -2603,7 +3258,6 @@
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
"dependencies": {
"is-extglob": "^2.1.1"
},
@@ -2627,7 +3281,6 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true,
"engines": {
"node": ">=0.12.0"
}
@@ -2817,6 +3470,14 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/load-tsconfig": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz",
+ "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ }
+ },
"node_modules/locate-path": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
@@ -2871,9 +3532,9 @@
}
},
"node_modules/magic-string": {
- "version": "0.30.5",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz",
- "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==",
+ "version": "0.30.8",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz",
+ "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==",
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.4.15"
},
@@ -2890,7 +3551,6 @@
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true,
"engines": {
"node": ">= 8"
}
@@ -2899,7 +3559,6 @@
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
"integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
- "dev": true,
"dependencies": {
"braces": "^3.0.2",
"picomatch": "^2.3.1"
@@ -2953,11 +3612,21 @@
"resolved": "https://registry.npmjs.org/mitt/-/mitt-2.1.0.tgz",
"integrity": "sha512-ILj2TpLiysu2wkBbWjAmww7TkZb65aiQO+DkVdUTBpBXq+MHYiETENkKFMtsJZX1Lf4pe4QOrTSjIfUwN5lRdg=="
},
+ "node_modules/mockjs": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/mockjs/-/mockjs-1.1.0.tgz",
+ "integrity": "sha512-eQsKcWzIaZzEZ07NuEyO4Nw65g0hdWAyurVol1IPl1gahRwY+svqzfgfey8U8dahLwG44d6/RwEzuK52rSa/JQ==",
+ "dependencies": {
+ "commander": "*"
+ },
+ "bin": {
+ "random": "bin/random"
+ }
+ },
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"node_modules/nanoid": {
"version": "3.3.7",
@@ -2982,6 +3651,14 @@
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
"dev": true
},
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/normalize-wheel-es": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz",
@@ -3081,6 +3758,17 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -3149,6 +3837,14 @@
"node": ">=6"
}
},
+ "node_modules/parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -3182,6 +3878,11 @@
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true
},
+ "node_modules/path-to-regexp": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz",
+ "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw=="
+ },
"node_modules/path-type": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
@@ -3200,7 +3901,6 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
"engines": {
"node": ">=8.6"
},
@@ -3267,9 +3967,9 @@
}
},
"node_modules/postcss": {
- "version": "8.4.32",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz",
- "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==",
+ "version": "8.4.38",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
+ "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
"funding": [
{
"type": "opencollective",
@@ -3287,16 +3987,16 @@
"dependencies": {
"nanoid": "^3.3.7",
"picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
+ "source-map-js": "^1.2.0"
},
"engines": {
"node": "^10 || ^12 || >=14"
}
},
"node_modules/postcss-selector-parser": {
- "version": "6.0.13",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
- "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==",
+ "version": "6.0.16",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz",
+ "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==",
"dev": true,
"dependencies": {
"cssesc": "^3.0.0",
@@ -3333,7 +4033,6 @@
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true,
"funding": [
{
"type": "github",
@@ -3349,6 +4048,17 @@
}
]
},
+ "node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
"node_modules/regexp.prototype.flags": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz",
@@ -3408,7 +4118,6 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true,
"engines": {
"iojs": ">=1.0.0",
"node": ">=0.10.0"
@@ -3430,10 +4139,12 @@
}
},
"node_modules/rollup": {
- "version": "4.9.1",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.1.tgz",
- "integrity": "sha512-pgPO9DWzLoW/vIhlSoDByCzcpX92bKEorbgXuZrqxByte3JFk2xSW2JEeAcyLc9Ru9pqcNNW+Ob7ntsk2oT/Xw==",
- "dev": true,
+ "version": "4.13.2",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.2.tgz",
+ "integrity": "sha512-MIlLgsdMprDBXC+4hsPgzWUasLO9CE4zOkj/u6j+Z6j5A4zRY+CtiXAdJyPtgCsc42g658Aeh1DlrdVEJhsL2g==",
+ "dependencies": {
+ "@types/estree": "1.0.5"
+ },
"bin": {
"rollup": "dist/bin/rollup"
},
@@ -3442,19 +4153,21 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.9.1",
- "@rollup/rollup-android-arm64": "4.9.1",
- "@rollup/rollup-darwin-arm64": "4.9.1",
- "@rollup/rollup-darwin-x64": "4.9.1",
- "@rollup/rollup-linux-arm-gnueabihf": "4.9.1",
- "@rollup/rollup-linux-arm64-gnu": "4.9.1",
- "@rollup/rollup-linux-arm64-musl": "4.9.1",
- "@rollup/rollup-linux-riscv64-gnu": "4.9.1",
- "@rollup/rollup-linux-x64-gnu": "4.9.1",
- "@rollup/rollup-linux-x64-musl": "4.9.1",
- "@rollup/rollup-win32-arm64-msvc": "4.9.1",
- "@rollup/rollup-win32-ia32-msvc": "4.9.1",
- "@rollup/rollup-win32-x64-msvc": "4.9.1",
+ "@rollup/rollup-android-arm-eabi": "4.13.2",
+ "@rollup/rollup-android-arm64": "4.13.2",
+ "@rollup/rollup-darwin-arm64": "4.13.2",
+ "@rollup/rollup-darwin-x64": "4.13.2",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.13.2",
+ "@rollup/rollup-linux-arm64-gnu": "4.13.2",
+ "@rollup/rollup-linux-arm64-musl": "4.13.2",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.13.2",
+ "@rollup/rollup-linux-riscv64-gnu": "4.13.2",
+ "@rollup/rollup-linux-s390x-gnu": "4.13.2",
+ "@rollup/rollup-linux-x64-gnu": "4.13.2",
+ "@rollup/rollup-linux-x64-musl": "4.13.2",
+ "@rollup/rollup-win32-arm64-msvc": "4.13.2",
+ "@rollup/rollup-win32-ia32-msvc": "4.13.2",
+ "@rollup/rollup-win32-x64-msvc": "4.13.2",
"fsevents": "~2.3.2"
}
},
@@ -3462,7 +4175,6 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
"integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
"funding": [
{
"type": "github",
@@ -3596,13 +4308,21 @@
}
},
"node_modules/source-map-js": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
- "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
+ "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
"engines": {
"node": ">=0.10.0"
}
},
+ "node_modules/statuses": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+ "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/string.prototype.trim": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz",
@@ -3715,7 +4435,6 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
"dependencies": {
"is-number": "^7.0.0"
},
@@ -3724,12 +4443,12 @@
}
},
"node_modules/ts-api-utils": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz",
- "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
+ "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==",
"dev": true,
"engines": {
- "node": ">=16.13.0"
+ "node": ">=16"
},
"peerDependencies": {
"typescript": ">=4.2.0"
@@ -3837,9 +4556,9 @@
}
},
"node_modules/typescript": {
- "version": "5.3.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
- "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
+ "version": "5.4.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz",
+ "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==",
"devOptional": true,
"bin": {
"tsc": "bin/tsc",
@@ -3868,10 +4587,17 @@
"version": "5.26.5",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
"integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
- "dev": true,
"optional": true,
"peer": true
},
+ "node_modules/unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -3887,15 +4613,22 @@
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
"dev": true
},
+ "node_modules/utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
"node_modules/vite": {
- "version": "5.0.10",
- "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.10.tgz",
- "integrity": "sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==",
- "dev": true,
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.7.tgz",
+ "integrity": "sha512-k14PWOKLI6pMaSzAuGtT+Cf0YmIx12z9YGon39onaJNy8DLBfBJrzg9FQEmkAM5lpHBZs9wksWAsyF/HkpEwJA==",
"dependencies": {
- "esbuild": "^0.19.3",
- "postcss": "^8.4.32",
- "rollup": "^4.2.0"
+ "esbuild": "^0.20.1",
+ "postcss": "^8.4.38",
+ "rollup": "^4.13.0"
},
"bin": {
"vite": "bin/vite.js"
@@ -3942,16 +4675,38 @@
}
}
},
- "node_modules/vue": {
- "version": "3.3.13",
- "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.13.tgz",
- "integrity": "sha512-LDnUpQvDgsfc0u/YgtAgTMXJlJQqjkxW1PVcOnJA5cshPleULDjHi7U45pl2VJYazSSvLH8UKcid/kzH8I0a0Q==",
+ "node_modules/vite-plugin-mock": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/vite-plugin-mock/-/vite-plugin-mock-3.0.1.tgz",
+ "integrity": "sha512-jEqRkX6Ts6z9e3sPrktcmujLGTIjxMwMZUhcgoo1q0dEMcljMBkZgJK1vMaetTm+GfOy2NkGVQOwVqLS/Vy6Uw==",
"dependencies": {
- "@vue/compiler-dom": "3.3.13",
- "@vue/compiler-sfc": "3.3.13",
- "@vue/runtime-dom": "3.3.13",
- "@vue/server-renderer": "3.3.13",
- "@vue/shared": "3.3.13"
+ "@types/mockjs": "^1.0.7",
+ "bundle-require": "^4.0.1",
+ "chokidar": "^3.5.3",
+ "connect": "^3.7.0",
+ "debug": "^4.3.4",
+ "fast-glob": "^3.2.12",
+ "path-to-regexp": "^6.2.1",
+ "picocolors": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ },
+ "peerDependencies": {
+ "mockjs": ">=1.1.0",
+ "vite": ">=4.0.0"
+ }
+ },
+ "node_modules/vue": {
+ "version": "3.4.21",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.21.tgz",
+ "integrity": "sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==",
+ "dependencies": {
+ "@vue/compiler-dom": "3.4.21",
+ "@vue/compiler-sfc": "3.4.21",
+ "@vue/runtime-dom": "3.4.21",
+ "@vue/server-renderer": "3.4.21",
+ "@vue/shared": "3.4.21"
},
"peerDependencies": {
"typescript": "*"
@@ -3963,9 +4718,9 @@
}
},
"node_modules/vue-eslint-parser": {
- "version": "9.3.2",
- "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.2.tgz",
- "integrity": "sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg==",
+ "version": "9.4.2",
+ "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.2.tgz",
+ "integrity": "sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==",
"dev": true,
"dependencies": {
"debug": "^4.3.4",
@@ -3987,9 +4742,9 @@
}
},
"node_modules/vue-eslint-parser/node_modules/semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "version": "7.6.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
+ "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
"dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
@@ -4002,12 +4757,12 @@
}
},
"node_modules/vue-i18n": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.8.0.tgz",
- "integrity": "sha512-Izho+6PYjejsTq2mzjcRdBZ5VLRQoSuuexvR8029h5CpN03FYqiqBrShMyf2I1DKkN6kw/xmujcbvC+4QybpsQ==",
+ "version": "9.10.2",
+ "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.10.2.tgz",
+ "integrity": "sha512-ECJ8RIFd+3c1d3m1pctQ6ywG5Yj8Efy1oYoAKQ9neRdkLbuKLVeW4gaY5HPkD/9ssf1pOnUrmIFjx2/gkGxmEw==",
"dependencies": {
- "@intlify/core-base": "9.8.0",
- "@intlify/shared": "9.8.0",
+ "@intlify/core-base": "9.10.2",
+ "@intlify/shared": "9.10.2",
"@vue/devtools-api": "^6.5.0"
},
"engines": {
@@ -4037,11 +4792,11 @@
}
},
"node_modules/vue-router": {
- "version": "4.2.5",
- "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.5.tgz",
- "integrity": "sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.3.0.tgz",
+ "integrity": "sha512-dqUcs8tUeG+ssgWhcPbjHvazML16Oga5w34uCUmsk7i0BcnskoLGwjpa15fqMr2Fa5JgVBrdL2MEgqz6XZ/6IQ==",
"dependencies": {
- "@vue/devtools-api": "^6.5.0"
+ "@vue/devtools-api": "^6.5.1"
},
"funding": {
"url": "https://github.com/sponsors/posva"
diff --git a/package.json b/package.json
index b282d45..f18210b 100644
--- a/package.json
+++ b/package.json
@@ -11,27 +11,29 @@
"dependencies": {
"@element-plus/icons-vue": "^2.3.1",
"@vicons/material": "^0.12.0",
- "@vueuse/core": "^10.7.0",
- "axios": "^1.6.3",
+ "@vueuse/core": "^10.9.0",
+ "axios": "^1.6.8",
"dayjs": "^1.11.10",
- "element-plus": "^2.4.4",
+ "element-plus": "^2.6.3",
"lodash": "^4.17.21",
+ "mockjs": "^1.1.0",
"pinia": "^2.1.7",
"pinia-plugin-persistedstate": "^3.2.1",
- "vue": "^3.3.13",
- "vue-i18n": "^9.8.0",
- "vue-router": "^4.2.5",
+ "vite-plugin-mock": "^3.0.1",
+ "vue": "^3.4.21",
+ "vue-i18n": "^9.10.2",
+ "vue-router": "^4.3.0",
"vue-virtual-scroller": "^2.0.0-beta.8"
},
"devDependencies": {
- "@rushstack/eslint-patch": "^1.6.1",
- "@typescript-eslint/eslint-plugin": "^6.18.1",
- "@typescript-eslint/parser": "^6.18.1",
- "@vitejs/plugin-vue": "^4.5.2",
+ "@rushstack/eslint-patch": "^1.10.1",
+ "@typescript-eslint/eslint-plugin": "^7.4.0",
+ "@typescript-eslint/parser": "^7.4.0",
+ "@vitejs/plugin-vue": "^5.0.4",
"@vue/eslint-config-standard": "^8.0.1",
- "eslint": "^8.56.0",
- "eslint-plugin-vue": "^9.19.2",
- "typescript": "^5.3.3",
- "vite": "^5.0.10"
+ "eslint": "^8.57.0",
+ "eslint-plugin-vue": "^9.24.0",
+ "typescript": "^5.4.3",
+ "vite": "^5.2.7"
}
}
diff --git a/src/assets/main.css b/src/assets/main.css
index 8c4a478..f72f0ed 100644
--- a/src/assets/main.css
+++ b/src/assets/main.css
@@ -19,23 +19,62 @@ html, body, #app, .index-container {
border-right: 0 none;
}
+.common-el-tooltip {
+ max-width: 500px;
+}
+
+.common-dropdown .el-dropdown-link {
+ display: flex;
+ align-items: center;
+}
+
+.el-dropdown-link:focus {
+ outline: none;
+}
+
.el-menu-left:not(.el-menu--collapse) {
width: 250px;
min-height: 400px;
}
+.no-padding {
+ padding: 0;
+}
+
+.padding-5 {
+ padding: 5px;
+}
+
+.padding-10 {
+ padding: 10px;
+}
+
+.padding-15 {
+ padding: 15px;
+}
+
+.padding-main {
+ padding: var(--el-main-padding);
+}
+
.padding-left1 {
padding-left: 5px;
}
.padding-left2 {
padding-left: 10px;
}
+.padding-left3 {
+ padding-left: 15px;
+}
.padding-right1 {
padding-right: 5px;
}
.padding-right2 {
padding-right: 10px;
}
+.padding-right3 {
+ padding-right: 15px;
+}
.padding-top1 {
padding-top: 5px;
@@ -43,12 +82,59 @@ html, body, #app, .index-container {
.padding-top2 {
padding-top: 10px;
}
+.padding-top3 {
+ padding-top: 15px;
+}
.padding-bottom1 {
padding-bottom: 5px;
}
.padding-bottom2 {
padding-bottom: 10px;
}
+.padding-bottom3 {
+ padding-bottom: 15px;
+}
+
+.margin-bottom1 {
+ margin-bottom: 5px;
+}
+.margin-bottom2 {
+ margin-bottom: 10px;
+}
+.margin-bottom3 {
+ margin-bottom: 15px;
+}
+
+.margin-left1 {
+ margin-left: 5px;
+}
+.margin-left2 {
+ margin-left: 10px;
+}
+.margin-left3 {
+ margin-left: 15px;
+}
+
+.margin-right1 {
+ margin-right: 5px;
+}
+.margin-right2 {
+ margin-right: 10px;
+}
+.margin-right3 {
+ margin-right: 15px;
+}
+
+.margin-top1 {
+ margin-top: 5px;
+}
+.margin-top2 {
+ margin-top: 10px;
+}
+.margin-top3 {
+ margin-top: 15px;
+}
+
.text-center {
text-align: center;
}
@@ -94,6 +180,10 @@ html, body, #app, .index-container {
flex-direction: column;
}
+.flex-start {
+ align-items: flex-start;
+}
+
.container-center {
display: flex;
justify-content: center;
@@ -101,22 +191,63 @@ html, body, #app, .index-container {
padding-top: 20px;
}
-.common-form.el-form--inline .el-input{
- --el-input-width: 220px;
+.reason-code-container .el-radio__label{
+ white-space: break-spaces;
}
+.common-tabs .el-tabs__new-tab {
+ width: 50%;
+ border: none;
+ margin: 10px 10px 0 10px;
+ justify-content: right;
+}
+
+.el-tabs__item.is-active {
+ font-weight: bold;
+}
+
+.common-form.el-form--inline .el-select,
+.common-subform.el-form--inline .el-select{
+ --el-select-width: 200px;
+}
+
+.common-form.el-form--inline .el-input,
.common-subform.el-form--inline .el-input{
- --el-input-width: 220px;
+ --el-input-width: 200px;
+ --el-date-editor-width: 200px;
+}
+
+.common-form-small.common-form.el-form--inline .el-select{
+ --el-select-width: 160px;
+}
+
+.common-form-small.common-form.el-form--inline .el-input{
+ --el-input-width: 160px;
+ --el-date-editor-width: 160px;
}
.form-edit-width-70 {
width:70%
}
+.form-edit-width-90 {
+ width:90%
+}
+
.form-edit-width-100 {
width:100%
}
+.form-edit-width-70 .el-select:not(:is(.el-form--inline .el-select,.el-pagination .el-select)),
+.form-edit-width-90 .el-select:not(:is(.el-form--inline .el-select,.el-pagination .el-select)),
+.form-edit-width-100 .el-select:not(:is(.el-form--inline .el-select,.el-pagination .el-select)){
+ width: 100%;
+}
+
+.pointer {
+ cursor: pointer;
+}
+
.common-autocomplete .el-popover__title{
font-size: 14px;
font-weight: 600;
@@ -133,6 +264,8 @@ html, body, #app, .index-container {
.common-autocomplete .common-select-page .el-tabs__item {
height: 30px;
+ padding-left: 10px !important;
+ padding-right: 10px !important;
}
.common-autocomplete .common-select-page .common-select-page-btn {
@@ -146,6 +279,90 @@ html, body, #app, .index-container {
padding: 5px;
}
+.common-hide-expand.el-table .el-table__expand-icon {
+ display: none;
+}
+
+.exchange-button {
+ position: absolute;
+ right: -20px;
+}
+
+.small-card .el-card__header{
+ padding: 10px;
+}
+
+.small-card.el-card {
+ margin-bottom: 15px;
+}
+
+.table-card .el-card__body {
+ padding: 0;
+}
+
+.product-book-card .el-card__body {
+ padding: 10px;
+}
+
+.operation-card .card-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.common-data-row label {
+ font-weight: 600 ;
+}
+
+.common-data-row .el-col {
+ padding: 3px 0;
+}
+
+.el-dropdown+.el-button {
+ margin-left: 12px;
+}
+
+.segment-label {
+ font-weight: 600;
+}
+
+.common-form-auto {
+ display: flex;
+ flex-wrap: wrap;
+}
+
+.common-form-auto .el-form-item {
+ flex-grow: 1;
+ flex-basis: 0;
+}
+
+.common-form-auto .el-form-item__content {
+ height: 32px;
+}
+
+.common-form-auto .el-form--inline .el-input,
+.common-form-auto.el-form--inline .el-input,
+.common-form-auto .el-form--inline .el-select,
+.common-form-auto.el-form--inline .el-select {
+ --el-input-width: 100%;
+ --el-date-editor-width: 100%;
+}
+
+.common-form-auto.el-form--inline .el-form-item,
+.common-form-auto .el-form--inline .el-form-item {
+ margin-right: 10px;
+}
+
+.el-form-item.is-required .common-form-label .common-form-label-text:before {
+ content: "*";
+ color: var(--el-color-danger);
+ margin-right: 4px;
+}
+
+.flex-grow2 {
+ flex-grow: 2;
+}
+
/**
* slide-fade动画
*/
diff --git a/src/components/common-autocomplete/index.vue b/src/components/common-autocomplete/index.vue
index 11da421..f23d389 100644
--- a/src/components/common-autocomplete/index.vue
+++ b/src/components/common-autocomplete/index.vue
@@ -1,8 +1,7 @@
@@ -443,6 +457,8 @@ watch(() => props.selectPageConfig, () => {
:empty-text="autocompleteConfig.emptyMessage"
:data="dataList"
:page-attrs="pageAttrs"
+ :frontend-paging="autocompleteConfig.frontendPaging"
+ :frontend-page-size="defaultAutoPage.pageSize"
@row-click="onSelectData($event)"
@current-page-change="onInputKeywords(false)"
>
diff --git a/src/components/common-autocomplete/public.d.ts b/src/components/common-autocomplete/public.d.ts
index e1fa574..618fe1e 100644
--- a/src/components/common-autocomplete/public.d.ts
+++ b/src/components/common-autocomplete/public.d.ts
@@ -19,6 +19,18 @@ export interface CommonSelectPageOption {
}
export interface CommonAutocompleteOption {
+ /** id属性名 */
+ labelProp?: string;
+ /** label属性名 */
+ idProp?: string;
+ /**
+ * 分页数
+ */
+ pageSize: number;
+ /**
+ * 前端分页模式
+ */
+ frontendPaging: boolean;
/** 自动完成表格列配置 */
columns: Array;
/** 空数据提示信息 */
diff --git a/src/components/common-breadcrumb/index.vue b/src/components/common-breadcrumb/index.vue
index 523552f..a646293 100644
--- a/src/components/common-breadcrumb/index.vue
+++ b/src/components/common-breadcrumb/index.vue
@@ -2,7 +2,7 @@
import { computed } from 'vue'
import { useTabsViewStore } from '@/stores/TabsViewStore'
import { useRoute } from 'vue-router'
-import { useMenuInfo, useMenuName } from '@/components/utils'
+import { parsePathParams, useMenuInfo, useMenuName } from '@/components/utils'
const tabsViewStore = useTabsViewStore()
@@ -20,7 +20,7 @@ const breadcrumbs = computed(() => {
icon = item.meta.icon
}
return {
- path: item.path,
+ path: parsePathParams(item.path, route.params),
menuName: useMenuName(item),
icon
}
@@ -32,11 +32,11 @@ const breadcrumbs = computed(() => {
return notExist && !item.menuName.endsWith('Base')
})
})
+
+import { get, isArray, isObject, set } from 'lodash'
+import { computed, onMounted, useSlots } from 'vue'
+import cloneDeep from 'lodash/cloneDeep'
+
+const props = defineProps({
+ /**
+ * @type {CommonFormOption}
+ */
+ option: {
+ type: Object,
+ required: true
+ },
+ model: {
+ type: Object,
+ required: true
+ },
+ labelWidth: {
+ type: String,
+ default: '150px'
+ },
+ prop: {
+ type: String,
+ default: ''
+ },
+ unlimitedEnable: {
+ type: Boolean,
+ default: true
+ }
+})
+
+const calcFilterType = computed(() => props.option.type || 'checkbox-group')
+
+const isUnlimited = computed(() => {
+ const option = props.option
+ const value = get(props.model, option.prop)
+ const filterType = calcFilterType.value
+ if (filterType === 'common-tab-filter') {
+ if (isObject(value) && option.attrs?.tabs && option.attrs?.tabs.length) {
+ let unlimited = true
+ option.attrs.tabs.forEach(tab => {
+ const tabVal = get(value, tab.prop)
+ if (unlimited) {
+ if (isArray(tabVal)) {
+ if (tabVal.length) {
+ unlimited = false
+ }
+ } else {
+ unlimited = !tabVal
+ }
+ }
+ })
+ return unlimited
+ }
+ }
+ return !value || !value.length
+})
+
+const setUnlimited = () => {
+ const option = props.option
+ const filterType = calcFilterType.value
+ let value
+ if (filterType.includes('checkbox')) {
+ value = []
+ } else if (filterType === 'common-tab-filter') {
+ value = {}
+ }
+ set(props.model, option.prop, value)
+}
+
+const initFilterModel = () => {
+ const filterType = calcFilterType.value
+ if (filterType === 'common-tab-filter') {
+ const value = get(props.model, props.option.prop)
+ if (!value) {
+ set(props.model, props.option.prop, {})
+ }
+ }
+}
+
+onMounted(() => {
+ initFilterModel()
+})
+
+const newOption = computed(() => {
+ const option = cloneDeep(props.option)
+ option.type = calcFilterType.value
+ return option
+})
+
+const slots = computed(() => {
+ const tmpSlots = cloneDeep(useSlots())
+ delete tmpSlots.afterLabel
+ return tmpSlots
+})
+
+
+
+
+
+
+
+
+
+ {{ $t('common.label.unlimited') }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/common-form-control/common-form-label.vue b/src/components/common-form-control/common-form-label.vue
new file mode 100644
index 0000000..797b391
--- /dev/null
+++ b/src/components/common-form-control/common-form-label.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/common-form-control/common-tab-filter.vue b/src/components/common-form-control/common-tab-filter.vue
new file mode 100644
index 0000000..fdcd486
--- /dev/null
+++ b/src/components/common-form-control/common-tab-filter.vue
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+ {{ tab.label }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/common-form-control/control-child.vue b/src/components/common-form-control/control-child.vue
index f503c56..f0f9f82 100644
--- a/src/components/common-form-control/control-child.vue
+++ b/src/components/common-form-control/control-child.vue
@@ -1,7 +1,6 @@
{{ label }}
diff --git a/src/components/common-form-control/index.vue b/src/components/common-form-control/index.vue
index b744d6a..2661138 100644
--- a/src/components/common-form-control/index.vue
+++ b/src/components/common-form-control/index.vue
@@ -1,10 +1,11 @@
@@ -149,26 +223,30 @@ const formItemEnabled = computed(() => props.option.enabled !== false)
v-if="formItemEnabled"
ref="formItemRef"
:rules="rules"
- :prop="option.prop"
- :label-width="labelWidth"
+ :prop="calcOption.prop"
+ :style="calcOption.style"
+ :label-width="controlLabelWidth"
+ v-bind="$attrs"
>
- {{ label }}
+
+ {{ label }}
+
props.option.enabled !== false)
:is="inputType"
v-model="modelValue"
v-bind="modelAttrs"
- :placeholder="option.placeholder"
- :disabled="option.disabled"
- :readonly="option.readonly"
+ :placeholder="calcOption.placeholder"
+ :disabled="calcOption.disabled"
+ :readonly="calcOption.readonly"
@change="controlChange"
>
- {{ modelAttrs.modelText || modelAttrs.modelTextFunc(modelValue) }}
+
+
+
props.option.enabled !== false)
:option="childItem"
/>
+
+
diff --git a/src/components/common-form/index.vue b/src/components/common-form/index.vue
index 63d6c37..cd78a94 100644
--- a/src/components/common-form/index.vue
+++ b/src/components/common-form/index.vue
@@ -1,5 +1,5 @@
@@ -106,9 +136,13 @@ defineExpose({
:model="formModel"
name="default"
/>
-
+
diff --git a/src/components/common-form/public.d.ts b/src/components/common-form/public.d.ts
index 86671f2..84c9ade 100644
--- a/src/components/common-form/public.d.ts
+++ b/src/components/common-form/public.d.ts
@@ -1,19 +1,114 @@
import { RuleItem } from 'async-validator/dist-types/interface'
-import { FormInstance, FormProps } from 'element-plus'
+import {
+ FormInstance, FormProps, DialogProps,
+ InputProps, InputNumberProps, CascaderProps,
+ RadioGroupProps, RadioProps, RadioButtonProps,
+ CheckboxProps, CheckboxGroupProps, CheckboxButtonProps,
+ DatePickerProps, timePickerDefaultProps, SwitchProps, SliderProps, TransferProps
+} from 'element-plus'
+import { SelectProps as SelectV1Props } from 'element-plus/es/components/select/src/select'
+import SelectV2Props from 'element-plus/es/components/select-v2/src/select-v2/defaults'
+import { CommonAutocompleteProps } from '../common-autocomplete/public'
+import { TreeComponentProps } from 'element-plus/es/components/tree/src/tree.type'
+import { ExtractPropTypes, CSSProperties, VNode } from 'vue'
-export interface CommonFormOption {
- /** 表单类型 */
- type: 'input' | 'input-number' | 'cascader' | 'radio'
- | 'radio-group' | 'radio-button' | 'checkbox' | 'checkbox-group' | 'checkbox-button' | 'date-picker'
- | 'time-picker' | 'switch' | 'select' | 'option' | 'slider' | 'transfer' | 'upload' | 'common-icon-select' | 'common-autocomplete' | 'tree-select';
+export type TimePickerProps = ExtractPropTypes
+export type SelectProps = ExtractPropTypes
+export interface OptionProps {
+ label: string;
+ value: any;
+ disabled: boolean;
+}
+
+export interface IconSelectProps {
+ dialogAttrs: DialogProps,
+ colSize: number,
+ dialogHeight: string,
+ dialogWidth: string,
+ disabled: boolean,
+ readonly: boolean,
+ placeholder: string,
+ clearable: boolean,
+ validateEvent: boolean
+}
+
+export interface CommonFormLabelProps {
+ /**
+ * 显示文本
+ */
+ modelText: string;
+}
+
+export interface CommonTabFilterProps {
+ tabs: Array<{
+ icon: string,
+ label: string,
+ prop: string,
+ children: OptionProps[]
+ }>,
+ type: 'checkbox-group' | 'radio-group',
+ defaultIcon: string,
+ iconSize: number
+}
+
+/**
+ * 'input' | 'input-number' | 'cascader' | 'radio'
+ * | 'radio-group' | 'radio-button' | 'checkbox' | 'checkbox-group' | 'checkbox-button' | 'date-picker'
+ * | 'time-picker' | 'switch' | 'select' | 'select-v2' | 'option' | 'slider' | 'transfer' | 'upload'
+ * | 'common-tab-filter' | 'common-icon-select' | 'common-autocomplete' | 'common-form-label'
+ * | 'tree-select'
+ */
+export type PropsMap = {
+ 'input': InputProps,
+ 'input-number': InputNumberProps,
+ 'cascader': CascaderProps,
+ 'radio': RadioProps,
+ 'radio-group': RadioGroupProps,
+ 'radio-button': RadioButtonProps,
+ 'checkbox': CheckboxProps,
+ 'checkbox-group': CheckboxGroupProps,
+ 'checkbox-button': CheckboxButtonProps,
+ 'date-picker': DatePickerProps,
+ 'time-picker': TimePickerProps,
+ 'switch': SwitchProps,
+ 'select': SelectProps,
+ 'select-v2': SelectV2Props,
+ 'option': OptionProps,
+ 'slider': SliderProps,
+ 'transfer': TransferProps,
+ 'upload': TransferProps,
+ 'tree-select': SelectProps & TreeComponentProps,
+ 'common-tab-filter': CommonTabFilterProps,
+ 'common-form-label': CommonFormLabelProps,
+ 'common-icon-select': IconSelectProps,
+ 'common-autocomplete': CommonAutocompleteProps,
+ [key:string]: InputProps
+}
+
+type FormControlTypeOption = {
+ [Type in keyof PropsMap]: {
+ type?: Type,
+ attrs?: PropsMap[Type]
+ }
+}[keyof PropsMap]
+
+export interface CommonFormOption extends FormControlTypeOption {
/** 数据值 */
value?: any;
/** 属性名 */
- prop: string | string[];
+ prop?: string | string[];
/** 表单标签 */
label?: string;
/** 用于国际化的label */
labelKey?: string;
+ /**
+ * 样式自定义
+ */
+ labelCls?: string;
+ /**
+ * item样式
+ */
+ style: CSSProperties;
/** 是否必填,后面解析成为rules的一部分 */
required?: boolean;
/** 正则表达式验证,解析成为rules的一部分 */
@@ -22,27 +117,42 @@ export interface CommonFormOption {
patternMsg?: string;
/** 是否禁用 */
disabled?: boolean;
+ /** 是否显示 */
+ enabled?: boolean;
/** 是否只读 */
readonly?: boolean;
/** 占位提示符 */
placeholder?: string;
- /** 其他可用属性 */
- attrs?: {
- showPassword: boolean,
- [key: string]: any
- };
/** 有些控件柚子节点 */
children?: Array;
/** async-validator验证器 */
- rules: Array;
+ rules?: Array;
/** change事件 */
- change: (val: any) => void;
+ change?: (val: any) => void;
/** 提示信息 */
- tooltip: string;
+ tooltip?: string;
/** 提示函数 */
- tooltipFunc: () => void;
+ tooltipFunc?: () => void;
+ /**
+ * common-form-label格式化
+ * @param modelValue 数据
+ * @param option 选项
+ */
+ formatter?: (modelValue:any, option: CommonFormOption) => string|VNode;
/** 自定义slot名称 */
- slot: string;
+ slot?: string;
+ /**
+ * 根据model数据动态计算Option值
+ * @param model 表单model
+ * @param option 原始选项
+ */
+ dynamicOption?: (model: any, option: CommonFormOption, addInfo?: any) => CommonFormOption;
+ /**
+ * 根据model数据动态计算attrs的值
+ * @param model 表单model
+ * @param option 原始选项
+ */
+ dynamicAttrs?: (model: any, option: CommonFormOption, addInfo?: any) => any;
}
export interface CommonFormProps extends FormProps {
@@ -64,10 +174,14 @@ export interface CommonFormProps extends FormProps {
showButtons: boolean;
/** 是否显示提交按钮 */
showSubmit: boolean;
+ /** 当校验不通过时提交按钮不可点击,默认为 false: 校验不通过也可直接提交 */
+ disableSubmitIfNotValid: boolean;
/** 是否显示重置按钮 */
showReset: boolean;
/** 提交逻辑 */
submitForm: (form: FormInstance) => void;
/** 返回地址 */
backUrl: string;
+ /** 行级排列 */
+ inline: boolean;
}
diff --git a/src/components/common-icon-select/index.vue b/src/components/common-icon-select/index.vue
index 1ac036b..d54042f 100644
--- a/src/components/common-icon-select/index.vue
+++ b/src/components/common-icon-select/index.vue
@@ -1,14 +1,9 @@
{{ menuItem.labelKey?$t(menuItem.labelKey):menuItem.label }}
-
{
@@ -104,6 +112,7 @@ const dropdownClick = (menuItem, $event) => {
@click="dropdownClick(childMenu, $event)"
>
@@ -117,12 +126,14 @@ const dropdownClick = (menuItem, $event) => {
@@ -130,10 +141,6 @@ const dropdownClick = (menuItem, $event) => {
{{ menuItem.labelKey?$t(menuItem.labelKey):menuItem.label }}
-
@@ -142,7 +149,4 @@ const dropdownClick = (menuItem, $event) => {
.common-dropdown {
height: 100%;
}
-.common-dropdown .el-icon {
- margin-top: 20px;
-}
diff --git a/src/components/common-menu/index.vue b/src/components/common-menu/index.vue
index 28d1d07..687d7ee 100644
--- a/src/components/common-menu/index.vue
+++ b/src/components/common-menu/index.vue
@@ -1,21 +1,28 @@
diff --git a/src/components/common-menu/public.d.ts b/src/components/common-menu/public.d.ts
index 90bca60..26a3831 100644
--- a/src/components/common-menu/public.d.ts
+++ b/src/components/common-menu/public.d.ts
@@ -8,6 +8,14 @@ export interface CommonMenuItem {
isDropdown?: boolean;
/** 是否是分割元素 */
isSplit?: boolean;
+ /**
+ * 是否禁用,禁用状态仍然是显示的
+ */
+ disabled?: boolean;
+ /**
+ * 是否启用,默认true,设置false不显示
+ */
+ enabled?: boolean;
/** 自定义样式 */
menuCls?: string;
/** 路由地址 */
diff --git a/src/components/common-sort/index.vue b/src/components/common-sort/index.vue
new file mode 100644
index 0000000..eb891fb
--- /dev/null
+++ b/src/components/common-sort/index.vue
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+ {{ calLabel(option) }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/common-sort/public.d.ts b/src/components/common-sort/public.d.ts
new file mode 100644
index 0000000..a854a75
--- /dev/null
+++ b/src/components/common-sort/public.d.ts
@@ -0,0 +1,17 @@
+export interface SortOption {
+ prop: string; // 排序字段,如price,该值会作为
+ labelKey?: string;// 国际化资源key,首选该属性,不存在才使用label
+ label?: string;
+ showIcon?: boolean; // 控制某些排序不显示图标
+ fixedValue?: 'ASC' | 'DESC' // 固定排序模式
+}
+
+/**
+ * 排序结果
+ * key是排序字段,来自SortOption的prop,value是排序方式
+ * 'ASC':升序 'DESC':降序 '':不生效
+ * 如 { "deptTime": "DESC", "price": "", "duration": "" }
+ */
+export interface SortProps {
+ [key: string]: 'ASC' | 'DESC' | ''
+}
diff --git a/src/components/common-table-form/index.vue b/src/components/common-table-form/index.vue
new file mode 100644
index 0000000..101a4e7
--- /dev/null
+++ b/src/components/common-table-form/index.vue
@@ -0,0 +1,136 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/common-table-form/table-form-control.vue b/src/components/common-table-form/table-form-control.vue
new file mode 100644
index 0000000..2604722
--- /dev/null
+++ b/src/components/common-table-form/table-form-control.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
diff --git a/src/components/common-table/common-table-column.vue b/src/components/common-table/common-table-column.vue
index 5a82ae0..de0a4de 100644
--- a/src/components/common-table/common-table-column.vue
+++ b/src/components/common-table/common-table-column.vue
@@ -1,6 +1,6 @@
{
>
{{ formatter?formatter(scope.row, scope):getPropertyData(scope.row) }}
+
+
@@ -80,7 +88,7 @@ const getPropertyData = (row) => {
>
{
:circle="button.circle"
@click="button.click&&button.click(scope.row, scope)"
>
- {{ button.label || $t(button.labelKey) }}
+ {{ button.label || toLabelByKey(button.labelKey) }}
import CommonTableColumn from '@/components/common-table/common-table-column.vue'
-import { computed, ref } from 'vue'
+import { computed, ref, onMounted, watch } from 'vue'
+import { useIntersectionObserver } from '@vueuse/core'
+import { getFrontendPage } from '@/components/utils'
+
+defineOptions({
+ inheritAttrs: false
+})
/**
* @type CommonTableProps
@@ -11,7 +17,7 @@ const props = defineProps({
*/
columns: {
type: Array,
- required: true
+ default: () => []
},
/**
* 显示数据
@@ -36,7 +42,7 @@ const props = defineProps({
},
/**
* el-button
- * @type [ButtonProps]
+ * @type [TableButtonProps]
*/
buttons: {
type: Array,
@@ -84,6 +90,26 @@ const props = defineProps({
loadingText: {
type: String,
default: ''
+ },
+ expandTable: {
+ type: Boolean,
+ default: false
+ },
+ hideExpandBtn: {
+ type: Boolean,
+ default: false
+ },
+ frontendPaging: {
+ type: Boolean,
+ default: false
+ },
+ frontendPageSize: {
+ type: Number,
+ default: 10
+ },
+ infinitePaging: {
+ type: Boolean,
+ default: false
}
})
/**
@@ -92,6 +118,15 @@ const props = defineProps({
*/
const calcColumns = computed(() => {
let _columns = props.columns
+ if (props.expandTable) {
+ _columns = [{
+ slot: 'expand',
+ attrs: {
+ type: 'expand',
+ width: props.hideExpandBtn ? 1 : 0
+ }
+ }, ..._columns]
+ }
if (props.buttons.length || props.buttonsSlot) {
const buttonColumn = {
labelKey: 'common.label.operation',
@@ -116,6 +151,74 @@ const currentPageChange = (pageNumber) => {
emit('currentPageChange', pageNumber)
}
+const calcData = ref([])
+const frontendPage = ref(getFrontendPage(0, props.frontendPageSize))
+const infiniteRef = ref(null)
+const isInfiniteEnd = ref(false)
+
+function checkInfiniteEnd (pageVal) {
+ if (props.infinitePaging) {
+ isInfiniteEnd.value = pageVal ? pageVal.pageNumber >= pageVal.pageCount : true
+ }
+}
+
+function calcFrontEndPageData () {
+ if (props.frontendPaging) {
+ calcData.value = props.data?.slice((frontendPage.value.pageNumber - 1) * frontendPage.value.pageSize,
+ frontendPage.value.pageNumber * frontendPage.value.pageSize) // 展示数据
+ checkInfiniteEnd(frontendPage.value)
+ }
+}
+
+function calcTableDataAndPage () {
+ if (props.frontendPaging) { // 前端分页模式
+ frontendPage.value = getFrontendPage(props.data?.length, frontendPage.value.pageSize, frontendPage.value.pageNumber) // 前端分页信息
+ calcFrontEndPageData()
+ } else { // 后端分页模式
+ if (props.infinitePaging) { // 无限加载模式
+ if (!calcData.value.length && props.page && props.page.pageNumber > 1) { // 如果进来就是后面的页码,重新查询
+ emit('update:page', { ...props.page, pageNumber: 1 }) // 仅更新pageNumber
+ } else {
+ calcData.value = [...calcData.value, ...props.data]
+ }
+ checkInfiniteEnd(props.page)
+ } else {
+ calcData.value = props.data
+ }
+ }
+}
+
+watch(() => props.data, () => {
+ calcTableDataAndPage()
+}, { deep: true, immediate: true })
+
+watch(() => frontendPage, () => {
+ calcFrontEndPageData()
+}, { deep: true, immediate: true })
+
+onMounted(() => {
+ if (props.infinitePaging) {
+ console.info('================================mounted', infiniteRef.value)
+ useIntersectionObserver(infiniteRef, onInfiniteLoad, {
+ threshold: 1
+ })
+ }
+})
+
+const onInfiniteLoad = (args) => {
+ const isIntersecting = args[0].isIntersecting
+ console.info('===========================infinite', isIntersecting, ...args)
+ if (isIntersecting && calcData.value?.length) {
+ if (props.frontendPaging) {
+ frontendPage.value = getFrontendPage(props.data?.length,
+ frontendPage.value.pageSize + props.frontendPageSize,
+ frontendPage.value.pageNumber)
+ } else if (props.page) {
+ currentPageChange(props.page.pageNumber + 1)
+ }
+ }
+}
+
const table = ref()
defineExpose({
@@ -135,7 +238,8 @@ defineExpose({
v-bind="$attrs"
:highlight-current-row="highlightCurrentRow"
:stripe="stripe"
- :data="data"
+ :data="calcData"
+ :class="{'common-hide-expand': hideExpandBtn}"
:border="border"
>
+
+
+
+
+
+
+ Loading
+
+
+
+
+
+
diff --git a/src/components/common-table/public.d.ts b/src/components/common-table/public.d.ts
index 0d1be5c..f2781d0 100644
--- a/src/components/common-table/public.d.ts
+++ b/src/components/common-table/public.d.ts
@@ -1,34 +1,52 @@
import { ButtonProps, LinkProps, TableProps, PaginationProps } from 'element-plus'
+import tableColumnProps from 'element-plus/es/components/table/src/table-column/defaults'
import { CommonPage } from '../public'
+import { ExtractPropTypes } from 'vue'
+
+export type TableColumnProps = ExtractPropTypes
+
+export type TableButtonProps = {
+ /**
+ * 计算是否显示按钮
+ * @param data 表格数据
+ */
+ buttonIf: (data: any) => boolean
+} & ButtonProps
/**
* 表格列定义
*/
export interface CommonTableColumn {
- // 表格头
- label: string;
- // 表格头国际化key
- labelKey: string;
- // 属性名
- property: string;
- // 属性名,同property
- prop: string;
- // 宽度
- width: string;
- // 是否是可操作列
- isOperation: boolean;
- // 自定义插槽名称,用于自定义显示数据
- slot: string;
- // 自定义按钮
- buttons: Array
- // 可选属性
- attrs: any;
- // 链接可选属性
- linkAttrs: LinkProps;
- // 点击事件
- click: (data: any) => any;
- // 格式化函数
- formatter: (data: any, scope: any) => string;
+ /** 是否显示 */
+ enabled?: boolean;
+ /** 表格头 */
+ label?: string;
+ /** 表格头国际化key */
+ labelKey?: string;
+ /** 属性名 */
+ property?: string;
+ /** 属性名,同property */
+ prop?: string;
+ /** 宽度 */
+ width?: string;
+ /** 是否是可操作列 */
+ isOperation?: boolean;
+ /** 自定义插槽名称,用于自定义显示数据 */
+ slot?: string;
+ /** 自定义插槽名称,用于自定义显示Label */
+ headerSlot?: string;
+ /** 自定义按钮 */
+ buttons?: Array
+ /** 可选属性 */
+ attrs?: TableColumnProps;
+ /** 链接可选属性 */
+ linkAttrs?: LinkProps;
+ /** 点击事件 */
+ click?: (data: any) => any;
+ /** 格式化函数 */
+ formatter?: (data: any, scope: any) => string;
+ /** 日期格式化 */
+ dateFormat?: string
}
/**
@@ -46,15 +64,13 @@ export interface CommonTableProps extends TableProps {
/** 边框配置 */
border: boolean;
/** 自定义按钮配置 */
- buttons?: Array;
+ buttons?: Array;
/** buttons插槽 */
buttonsSlot?: string;
/** 默认的按钮大小 */
buttonSize?: string;
/** 按钮列配置 */
- buttonsColumnAttrs?: {
- [key: string]: any
- };
+ buttonsColumnAttrs?: TableColumnProps;
/** 分页配置 */
page?: CommonPage;
/** 分页对齐 */
@@ -65,6 +81,16 @@ export interface CommonTableProps extends TableProps {
loading?: boolean;
/** loading显示消息 */
loadingText?: string;
+ /** 可以展开的table */
+ expandTable: boolean;
+ /** 是否隐藏展开按钮 */
+ hideExpandBtn: boolean;
+ /** 是否是前台分页**/
+ frontendPaging: boolean;
+ /** 前端模式分页数量 **/
+ frontendPageSize: number;
+ /** 是否是无限加载分页**/
+ infinitePaging: boolean;
}
export interface CommonTableColumnProps {
diff --git a/src/components/common-window/index.vue b/src/components/common-window/index.vue
index ebf1351..f6cbaa4 100644
--- a/src/components/common-window/index.vue
+++ b/src/components/common-window/index.vue
@@ -1,6 +1,6 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/directives/CommonTooltipDirective.js b/src/components/directives/CommonTooltipDirective.js
new file mode 100644
index 0000000..20ee7f5
--- /dev/null
+++ b/src/components/directives/CommonTooltipDirective.js
@@ -0,0 +1,56 @@
+import { isObject, isString } from 'lodash'
+import CommonTooltip from '@/components/directives/CommonTooltip.vue'
+import { DynamicHelper } from '@/components/directives/index'
+
+const calcTooltipConfig = (binding) => {
+ let config = {}
+ if (isObject(binding.value)) {
+ config = { ...config, ...binding.value }
+ } else if (isString(binding.value)) {
+ config.content = binding.value
+ }
+ if (binding.arg) {
+ config.placement = binding.arg
+ }
+ return config
+}
+
+const initTooltipVnode = (el, binding, props) => {
+ const dynamicHelper = new DynamicHelper()
+ const tooltipVnode = dynamicHelper.createAndRender(CommonTooltip, props)
+ el.tooltipVnode = tooltipVnode
+ el.tooltipDynamicHelper = dynamicHelper
+ if (!el.tooltipConfig) {
+ el.tooltipConfig = calcTooltipConfig(binding)
+ }
+ if (tooltipVnode.component?.exposed?.triggerRef) {
+ tooltipVnode.component.exposed.triggerRef.value = el
+ }
+}
+
+const getTooltipDirective = (props) => {
+ return {
+ mounted (el, binding) {
+ el.addEventListener('mouseenter', () => {
+ if (!el.tooltipVnode) {
+ initTooltipVnode(el, binding, props)
+ }
+ el?.tooltipVnode?.component?.exposed?.setConfig(el.tooltipConfig)
+ el.tooltipVnode?.component?.exposed?.showOrHideTooltip(true)
+ })
+ el.addEventListener('mouseleave', () => {
+ el.tooltipVnode?.component?.exposed?.showOrHideTooltip(false)
+ })
+ },
+ updated (el, binding) {
+ el.tooltipConfig = calcTooltipConfig(binding)
+ },
+ unmounted (el) {
+ el.tooltipDynamicHelper?.destroy()
+ }
+ }
+}
+
+export const CommonTooltipDirective = getTooltipDirective({ type: 'el-tooltip' })
+
+export const CommonPopoverDirective = getTooltipDirective({ type: 'el-popover' })
diff --git a/src/components/directives/index.js b/src/components/directives/index.js
new file mode 100644
index 0000000..658840c
--- /dev/null
+++ b/src/components/directives/index.js
@@ -0,0 +1,43 @@
+import { CommonPopoverDirective, CommonTooltipDirective } from '@/components/directives/CommonTooltipDirective'
+import { h, render } from 'vue'
+
+export class DynamicHelper {
+ constructor () {
+ this.appDivId = 'app'
+ this.context = DynamicHelper.app._context
+ this.container = DynamicHelper.createContainer()
+ this.destroy = DynamicHelper.getDestroyFunc(this.container)
+ }
+
+ static createContainer () {
+ return document.createElement('div')
+ }
+
+ static getDestroyFunc (container) {
+ return () => {
+ if (container) {
+ render(null, container)
+ }
+ }
+ }
+
+ createAndRender (...args) {
+ const container = this.container
+ const vnode = h(...args)
+ vnode.appContext = this.context
+ render(vnode, container)
+ const appDiv = document.getElementById(this.appDivId)
+ if (appDiv && container.firstElementChild) {
+ appDiv.appendChild(container.firstElementChild)
+ }
+ return vnode
+ }
+}
+
+export default {
+ install (Vue) {
+ DynamicHelper.app = Vue
+ Vue.directive('common-tooltip', CommonTooltipDirective)
+ Vue.directive('common-popover', CommonPopoverDirective)
+ }
+}
diff --git a/src/components/index.js b/src/components/index.js
index 5ae16f9..7b0a042 100644
--- a/src/components/index.js
+++ b/src/components/index.js
@@ -2,6 +2,8 @@ import CommonIcon from '@/components/common-icon/index.vue'
import CommonIconSelect from '@/components/common-icon-select/index.vue'
import CommonForm from '@/components/common-form/index.vue'
import CommonFormControl from '@/components/common-form-control/index.vue'
+import CommonFilterControl from '@/components/common-form-control/common-filter-control.vue'
+import CommonTabFilter from '@/components/common-form-control/common-tab-filter.vue'
import CommonFormLabel from '@/components/common-form-control/common-form-label.vue'
import CommonMenu from '@/components/common-menu/index.vue'
import CommonMenuItem from '@/components/common-menu-item/index.vue'
@@ -11,6 +13,8 @@ import CommonTableForm from '@/components/common-table-form/index.vue'
import CommonBreadcrumb from '@/components/common-breadcrumb/index.vue'
import CommonWindow from '@/components/common-window/index.vue'
import CommonAutocomplete from '@/components/common-autocomplete/index.vue'
+import CommonSort from '@/components/common-sort/index.vue'
+import CommonDirectives from '@/components/directives'
/**
* 自定义通用组件自动注册
@@ -24,6 +28,8 @@ export default {
Vue.component('CommonIconSelect', CommonIconSelect)
Vue.component('CommonForm', CommonForm)
Vue.component('CommonFormControl', CommonFormControl)
+ Vue.component('CommonFilterControl', CommonFilterControl)
+ Vue.component('CommonTabFilter', CommonTabFilter)
Vue.component('CommonFormLabel', CommonFormLabel)
Vue.component('CommonMenu', CommonMenu)
Vue.component('CommonMenuItem', CommonMenuItem)
@@ -33,5 +39,7 @@ export default {
Vue.component('CommonBreadcrumb', CommonBreadcrumb)
Vue.component('CommonWindow', CommonWindow)
Vue.component('CommonAutocomplete', CommonAutocomplete)
+ Vue.component('CommonSort', CommonSort)
+ Vue.use(CommonDirectives)
}
}
diff --git a/src/components/utils/index.js b/src/components/utils/index.js
index 0cff6b5..176ea6a 100644
--- a/src/components/utils/index.js
+++ b/src/components/utils/index.js
@@ -1,7 +1,21 @@
import { ref } from 'vue'
-import { $i18nBundle } from '@/messages'
+import { $i18nBundle, $i18nKey } from '@/messages'
+import { isArray, isObject } from 'lodash'
import dayjs from 'dayjs'
+export const getFrontendPage = (totalCount, pageSize, pageNumber = 1) => {
+ const pageCount = Math.floor((totalCount + pageSize - 1) / pageSize)
+ if (pageNumber > pageCount && pageCount > 0) {
+ pageNumber = pageCount
+ }
+ return {
+ pageNumber,
+ pageSize,
+ totalCount,
+ pageCount
+ }
+}
+
const calcWithIf = menuItem => {
['icon', 'labelKey', 'label', 'html'].forEach(key => {
const keyIf = menuItem[`${key}If`]
@@ -11,6 +25,10 @@ const calcWithIf = menuItem => {
})
}
+/**
+ * @param {CommonFormOption} option
+ * @return {string}
+ */
export const useInputType = (option) => {
const inType = option.type || 'input'
if (inType.startsWith('common-') || inType.startsWith('el-')) {
@@ -28,6 +46,15 @@ export const useMenuInfo = item => {
}
}
+export const toLabelByKey = labelKey => {
+ if (isArray(labelKey)) {
+ return $i18nKey(...labelKey)
+ }
+ if (labelKey) {
+ return $i18nBundle(labelKey)
+ }
+}
+
export const useMenuName = item => {
const menuInfo = useMenuInfo(item)
if (menuInfo) {
@@ -35,23 +62,50 @@ export const useMenuName = item => {
return menuInfo.label
}
if (menuInfo.labelKey) {
- return $i18nBundle(menuInfo.labelKey)
+ return toLabelByKey(menuInfo.labelKey)
}
}
if (item.meta && item.meta.labelKey) {
- return $i18nBundle(item.meta.labelKey)
+ return toLabelByKey(item.meta.labelKey)
}
return item.name || 'No Name'
}
+/**
+ * 外部链接判断
+ * @param path
+ * @return {boolean}
+ */
+export const isExternalLink = (path) => {
+ return /^(https?:|mailto:|tel:)/.test(path)
+}
+/**
+ * 外部菜单类型判断
+ * @param menuItem
+ * @return {boolean}
+ */
+export const isExternalMenu = menuItem => {
+ return menuItem.external || isExternalLink(menuItem.index)
+}
-export const filterMenus = menus => menus.filter(menu => !menu.disabled)
+/**
+ * @param menus {[CommonMenuItem] }菜单列表
+ * @return {[CommonMenuItem]}
+ */
+export const processMenus = menus => menus.filter(menu => menu.enabled !== false)
.map(menu => {
calcWithIf(menu)
if (menu.index) { // 把菜单存储下来,后面需要使用名字
MENU_INFO_LIST.value[menu.index] = menu
}
if (menu.children && menu.children.length) {
- menu.children = filterMenus(menu.children)
+ menu.children = processMenus(menu.children)
+ }
+ if (isExternalMenu(menu) && !menu.click) { // 跳转外部链接
+ const url = menu.index
+ menu.index = ''
+ menu.click = () => {
+ window.open(url, menu.target || '_blank')
+ }
}
return menu
})
@@ -62,7 +116,7 @@ export const filterMenus = menus => menus.filter(menu => !menu.disabled)
* @param route {RouteRecordMultipleViewsWithChildren} 路由信息
*/
export const useParentRoute = function (route) {
- const parentName = route.meta?.replaceTabHistory
+ const parentName = route?.meta?.replaceTabHistory
if (parentName) {
const routes = route.matched || []
for (let i = routes.length - 1; i > 0; i--) {
@@ -75,6 +129,48 @@ export const useParentRoute = function (route) {
return route
}
+export const parsePathParams = (path, params) => {
+ if (path && path.includes(':') && isObject(params)) {
+ Object.keys(params).forEach(key => {
+ path = path.replace(new RegExp(`:${key}`, 'g'), params[key])
+ })
+ }
+ return path
+}
+
+/**
+ * 定义表单选项,带有jsdoc注解,方便代码提示
+ * @param {CommonFormOption[]} formOptions 表单选项
+ * @return {CommonFormOption[]} 表单选项配置
+ */
+export const defineFormOptions = (formOptions) => {
+ return formOptions
+}
+
+/**
+ * 定义表格选项,带有jsdoc注解,方便代码提示
+ * @param {CommonTableColumn[]} tableColumns 表单的列
+ * @return {CommonTableColumn[]} 表单的列配置
+ */
+export const defineTableColumns = (tableColumns) => {
+ return tableColumns
+}
+
+/**
+ * 定义表格的按钮,带有jsdoc注解,方便代码提示
+ * @param {TableButtonProps[]} tableButtons 表格的按钮
+ * @return {TableButtonProps[]} 表格的按钮配置
+ */
+export const defineTableButtons = (tableButtons) => {
+ return tableButtons
+}
+/**
+ * @param menuItems {CommonMenuItem[]} 菜单配置项
+ * @return {CommonMenuItem[]} 菜单配置项
+ */
+export const defineMenuItems = (menuItems) => {
+ return menuItems
+}
export const formatDate = (date, format) => {
if (date) {
return dayjs(date).format(format || 'YYYY-MM-DD HH:mm:ss')
@@ -86,3 +182,4 @@ export const formatDay = (date, format) => {
return dayjs(date).format(format || 'YYYY-MM-DD')
}
}
+
diff --git a/src/messages/index.js b/src/messages/index.js
index 22ec5f5..5d7d7fc 100644
--- a/src/messages/index.js
+++ b/src/messages/index.js
@@ -35,11 +35,15 @@ export const changeMessages = locale => {
export const $changeLocale = locale => {
useGlobalConfigStore().changeLocale(locale)
}
+
+export const $isLocale = locale => {
+ return useGlobalConfigStore().currentLocale === locale
+}
/**
- * @param cn
- * @param en
+ * @param cn 中文字段
+ * @param en 英文字段
* @param {boolean} replaceEmpty 为空是否用不为空的数据代替
- * @returns {*}
+ * @returns {String}
*/
export const $i18nMsg = (cn, en, replaceEmpty = true) => {
const { currentLocale } = useGlobalConfigStore()
@@ -48,16 +52,50 @@ export const $i18nMsg = (cn, en, replaceEmpty = true) => {
}
return replaceEmpty ? (en || cn) : en
}
-
+/**
+ * @param {String} key 国际化资源key
+ * @param {String[]=} params 可选参数
+ * @returns {string}
+ */
export const $i18nBundle = i18n.global.t
+/**
+ * 根据key和locale返回数据
+ * vue-i18n似乎有bug,按照官方文档传locale得不到正确的消息:
+ * $t('ab.c', 'zh-CN')
+ * https://vue-i18n.intlify.dev/api/injection.html#t-key-locale
+ * @param key
+ * @param locale
+ * @param [args]
+ * @return {String}
+ */
+export const $i18nByLocale = (key, locale, args) => {
+ return i18n.global.t(key, locale, {
+ locale,
+ list: args || []
+ })
+}
+
+/**
+ * 方便多个资源key解析
+ * @param {String} key 国际化资源key
+ * @param {String} args 可选参数,也是资源key,方便多个资源key解析
+ */
+export const $i18nKey = (key, ...args) => {
+ args = args.map(argKey => $i18nBundle(argKey))
+ return $i18nBundle(key, args)
+}
+
export default {
install (app) {
app.use(i18n)
Object.assign(app.config.globalProperties, {
$changeLocale,
$i18nMsg,
- $i18nBundle
+ $i18nKey,
+ $i18nBundle,
+ $isLocale,
+ $i18nByLocale
})
}
}
diff --git a/src/stores/index.js b/src/stores/index.js
index 996c0d7..a8bae0c 100644
--- a/src/stores/index.js
+++ b/src/stores/index.js
@@ -1,10 +1,28 @@
import { createPinia } from 'pinia'
-import piniaPluginPersistedState from 'pinia-plugin-persistedstate'
+import { createPersistedState } from 'pinia-plugin-persistedstate'
+
+/**
+ * 组合式api的$reset需要自己实现
+ *
+ * @param store
+ */
+const piniaPluginResetStore = ({ store }) => {
+ const initialState = JSON.parse(JSON.stringify(store.$state)) // deep clone(store.$state)
+ store.$reset = () => {
+ store.$state = JSON.parse(JSON.stringify(initialState))
+ }
+}
export default {
install (app) {
const pinia = createPinia()
- pinia.use(piniaPluginPersistedState)
+ pinia.use(piniaPluginResetStore)
+ pinia.use(createPersistedState({
+ key: key => {
+ const systemKey = import.meta.env.VITE_APP_SYSTEM_KEY
+ return `__${systemKey}__${key}`
+ }
+ }))
app.use(pinia)
return pinia
}
diff --git a/src/views/tools/Forms.vue b/src/views/tools/Forms.vue
index 917fdb7..c88e068 100644
--- a/src/views/tools/Forms.vue
+++ b/src/views/tools/Forms.vue
@@ -3,6 +3,7 @@ import { computed, ref } from 'vue'
import { useCityAutocompleteConfig, useCitySelectPageConfig } from '@/services/city/CityService'
import { $i18nMsg } from '@/messages'
import { ElMessage } from 'element-plus'
+import { defineFormOptions } from '@/components/utils'
const defaultCity = ref({})
@@ -14,11 +15,53 @@ setTimeout(() => {
}
}, 1000)
+const getGenderOptions = (type) => {
+ type = type || 'radio'
+ return [
+ {
+ type,
+ label: '男',
+ value: 'male'
+ },
+ {
+ type,
+ label: '女',
+ value: 'female'
+ },
+ {
+ type,
+ label: '保密',
+ value: 'unknown'
+ }
+ ]
+}
+
+const getHobbyOptions = (type) => {
+ type = type || 'checkbox'
+ return [
+ {
+ type,
+ label: '编程',
+ value: 'program'
+ },
+ {
+ type,
+ label: '吃饭',
+ value: 'eat'
+ },
+ {
+ type,
+ label: '睡觉',
+ value: 'sleep'
+ }
+ ]
+}
+
/**
* @type {[CommonFormOption]}
*/
const formOptions = computed(() => {
- return [{
+ return defineFormOptions([{
label: '用户名',
prop: 'userName',
value: '',
@@ -52,22 +95,14 @@ const formOptions = computed(() => {
label: '兴趣爱好',
type: 'checkbox-group',
prop: 'hobby',
- value: '',
required: true,
- children: [
- {
- label: '编程',
- value: 'program'
- },
- {
- label: '吃饭',
- value: 'eat'
- },
- {
- label: '睡觉',
- value: 'sleep'
- }
- ]
+ children: getHobbyOptions()
+ }, {
+ label: '兴趣爱好',
+ type: 'checkbox-group',
+ prop: 'hobby',
+ required: true,
+ children: getHobbyOptions('checkbox-button')
}, {
label: '职业',
type: 'select',
@@ -94,20 +129,14 @@ const formOptions = computed(() => {
prop: 'gender',
value: '',
required: true,
- children: [
- {
- label: '男',
- value: 'male'
- },
- {
- label: '女',
- value: 'female'
- },
- {
- label: '保密',
- value: 'unknown'
- }
- ]
+ children: getGenderOptions()
+ }, {
+ label: '性别',
+ type: 'radio-group',
+ prop: 'gender',
+ value: '',
+ required: true,
+ children: getGenderOptions('radio-button')
}, {
label: '图标',
prop: 'icon',
@@ -124,6 +153,9 @@ const formOptions = computed(() => {
change: (city) => {
defaultCity.value = city
},
+ getAutocompleteLabel: () => {
+ return $i18nMsg(defaultCity.value?.nameCN, defaultCity.value?.nameEN)
+ },
attrs: {
defaultLabel: $i18nMsg(defaultCity.value?.nameCn, defaultCity.value?.nameEn),
autocompleteConfig: useCityAutocompleteConfig(),
@@ -146,9 +178,11 @@ const formOptions = computed(() => {
prop: 'address',
value: '',
attrs: {
- type: 'textarea'
+ type: 'textarea',
+ maxlength: 100,
+ showWordLimit: true
}
- }]
+ }])
})
const userDto = ref({
contacts: [{
@@ -195,7 +229,7 @@ const submitForm = (form) => {
-
+