提交 f80ca1bd 作者: ZhangLingKun

Merge remote-tracking branch 'origin/master'

.DS_Store
.next
node_modules
build
Dockerfile
name: Build and Push to ACR
on:
push:
branches: ["develop"]
env:
REGION_ID: cn-shenzhen
REGISTRY: mmc-registry.cn-shenzhen.cr.aliyuncs.com
NAMESPACE: sharefly-dev
IMAGE: admin
TAG: ${{ github.sha }}
ACR_EE_REGISTRY: mmc-registry.cn-shenzhen.cr.aliyuncs.com
ACR_EE_INSTANCE_ID: cri-yhk5zgfc2v1sia6l
ACR_EE_NAMESPACE: sharefly-dev
ACR_EE_IMAGE: admin
ACR_EE_TAG: ${{ github.sha }}
JAVA_VERSION: "8"
GITLAB_URL: https://oauth2:MjVJKxB7m4tCy7symBzn@git.mmcuav.cn/iuav/csf-admin.git
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
environment: dev
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Login to ACR EE with the AccessKey pair
uses: aliyun/acr-login@v1
with:
login-server: "https://${{ env.ACR_EE_REGISTRY }}"
region-id: "${{ env.REGION_ID }}"
username: "QD--KeBiTeHangKong@1354706964800968"
password: "MMC@2023&ACR"
instance-id: "${{ env.ACR_EE_INSTANCE_ID }}"
- name: Build and push image to ACR EE
run: |
docker build -t "$ACR_EE_REGISTRY/$ACR_EE_NAMESPACE/$ACR_EE_IMAGE:$TAG" .
docker push "$ACR_EE_REGISTRY/$ACR_EE_NAMESPACE/$ACR_EE_IMAGE:$TAG"
- name: Kustomize Set Image
run: |-
cd kustomization/overlays/dev
curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash /dev/stdin 3.8.6
./kustomize edit set image REGISTRY/NAMESPACE/IMAGE:TAG=$REGISTRY/$NAMESPACE/$IMAGE:$TAG
- name: Commit and Push
run: |
git config user.name "Chuck"
git config user.email "Chuck@users.noreply.github.com"
git remote set-url origin "$GITLAB_URL"
git commit -am "Generated Image Update"
git push origin "develop"
name: Build and Push to ACR
on:
push:
### Production
branches: ["master"]
env:
REGION_ID: cn-shenzhen
REGISTRY: mmc-registry.cn-shenzhen.cr.aliyuncs.com
NAMESPACE: sharefly
IMAGE: admin
TAG: ${{ github.sha }}
ACR_EE_REGISTRY: mmc-registry.cn-shenzhen.cr.aliyuncs.com
ACR_EE_INSTANCE_ID: cri-yhk5zgfc2v1sia6l
ACR_EE_NAMESPACE: sharefly
ACR_EE_IMAGE: admin
ACR_EE_TAG: ${{ github.sha }}
JAVA_VERSION: "8"
GITLAB_URL: https://oauth2:MjVJKxB7m4tCy7symBzn@git.mmcuav.cn/iuav/csf-admin.git
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
### Production
environment: prod
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Login to ACR EE with the AccessKey pair
uses: aliyun/acr-login@v1
with:
login-server: "https://${{ env.ACR_EE_REGISTRY }}"
region-id: "${{ env.REGION_ID }}"
username: "QD--KeBiTeHangKong@1354706964800968"
password: "MMC@2023&ACR"
instance-id: "${{ env.ACR_EE_INSTANCE_ID }}"
- name: Build and push image to ACR EE
run: |
docker build -t "$ACR_EE_REGISTRY/$ACR_EE_NAMESPACE/$ACR_EE_IMAGE:$TAG" .
docker push "$ACR_EE_REGISTRY/$ACR_EE_NAMESPACE/$ACR_EE_IMAGE:$TAG"
### Production
- name: Kustomize Set Image
run: |-
cd kustomization/overlays/prod
curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash /dev/stdin 3.8.6
./kustomize edit set image REGISTRY/NAMESPACE/IMAGE:TAG=$REGISTRY/$NAMESPACE/$IMAGE:$TAG
### Production
- name: Commit and Push
run: |
git config user.name "Chuck"
git config user.email "Chuck@users.noreply.github.com"
git remote set-url origin "$GITLAB_URL"
git commit -am "generated Image update"
git push origin "master"
FROM node:18-alpine
WORKDIR /app
COPY package.json .
COPY package-lock.json .
RUN npm ci
COPY . .
EXPOSE 5173
CMD ["npm", "run", "dev"]
\ No newline at end of file
apiVersion: v1
kind: ConfigMap
metadata:
name: admin-map
namespace: default
data:
SPRING_PROFILES_ACTIVE: default
apiVersion: apps/v1
kind: Deployment
metadata:
name: admin-deployment
namespace: default
spec:
minReadySeconds: 120
revisionHistoryLimit: 2
replicas: 1
selector:
matchLabels:
app: admin
template:
metadata:
labels:
app: admin
spec:
containers:
- name: admin
image: REGISTRY/NAMESPACE/IMAGE:TAG
resources:
limits:
memory: 512Mi
cpu: 100m
ports:
- containerPort: 5173
\ No newline at end of file
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
commonLabels:
app: admin
resources:
- ./deployment.yaml
- ./service.yaml
- ./configMap.yaml
\ No newline at end of file
apiVersion: v1
kind: Service
metadata:
name: admin-svc
namespace: default
spec:
selector:
app: admin
type: NodePort
ports:
- protocol: TCP
port: 5173
apiVersion: v1
kind: ConfigMap
metadata:
name: admin-map
data:
SPRING_PROFILES_ACTIVE: dev
\ No newline at end of file
apiVersion: apps/v1
kind: Deployment
metadata:
name: admin-deployment
spec:
replicas: 2
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
\ No newline at end of file
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
#namePrefix: dev-
namespace: dev
commonLabels:
variant: dev
commonAnnotations:
note: This is dev!
patches:
- path: ./increase_replicas.yaml
- path: ./configMap.yaml
\ No newline at end of file
apiVersion: v1
kind: ConfigMap
metadata:
name: admin-map
data:
SPRING_PROFILES_ACTIVE: prod
\ No newline at end of file
apiVersion: apps/v1
kind: Deployment
metadata:
name: admin-deployment
spec:
replicas: 2
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
\ No newline at end of file
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
namespace: prod
#namePrefix: prod-
commonLabels:
variant: prod
commonAnnotations:
note: This is prod!
patches:
- path: increase_replicas.yaml
- path: configMap.yaml
\ No newline at end of file
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
"antd": "^5.4.2", "antd": "^5.4.2",
"axios": "^1.4.0", "axios": "^1.4.0",
"dayjs": "^1.11.7", "dayjs": "^1.11.7",
"events": "^3.3.0",
"file-saver": "^2.0.5", "file-saver": "^2.0.5",
"js-base64": "^3.7.3", "js-base64": "^3.7.3",
"js-cookie": "^3.0.1", "js-cookie": "^3.0.1",
...@@ -25,8 +26,10 @@ ...@@ -25,8 +26,10 @@
"query-string": "^8.1.0", "query-string": "^8.1.0",
"react": "^18.1.0", "react": "^18.1.0",
"react-dom": "^18.1.0", "react-dom": "^18.1.0",
"react-quill": "^2.0.0",
"react-redux": "^8.0.5", "react-redux": "^8.0.5",
"react-router-dom": "^6.10.0", "react-router-dom": "^6.10.0",
"react-viewer": "^3.2.2",
"sort-by": "^1.2.0", "sort-by": "^1.2.0",
"xlsx": "^0.18.5" "xlsx": "^0.18.5"
}, },
...@@ -1072,6 +1075,14 @@ ...@@ -1072,6 +1075,14 @@
"integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/@types/quill": {
"version": "1.3.10",
"resolved": "https://registry.npmmirror.com/@types/quill/-/quill-1.3.10.tgz",
"integrity": "sha512-IhW3fPW+bkt9MLNlycw8u8fWb7oO7W5URC9MfZYHBlA24rex9rs23D5DETChu1zvgVdc5ka64ICjJOgQMr6Shw==",
"dependencies": {
"parchment": "^1.1.2"
}
},
"node_modules/@types/react": { "node_modules/@types/react": {
"version": "18.0.9", "version": "18.0.9",
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.9.tgz", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.9.tgz",
...@@ -1875,6 +1886,14 @@ ...@@ -1875,6 +1886,14 @@
"integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==", "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/clone": {
"version": "2.1.2",
"resolved": "https://registry.npmmirror.com/clone/-/clone-2.1.2.tgz",
"integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
"engines": {
"node": ">=0.8"
}
},
"node_modules/codepage": { "node_modules/codepage": {
"version": "1.15.0", "version": "1.15.0",
"resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz",
...@@ -2033,6 +2052,19 @@ ...@@ -2033,6 +2052,19 @@
"node": ">=14.16" "node": ">=14.16"
} }
}, },
"node_modules/deep-equal": {
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/deep-equal/-/deep-equal-1.1.1.tgz",
"integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==",
"dependencies": {
"is-arguments": "^1.0.4",
"is-date-object": "^1.0.1",
"is-regex": "^1.0.4",
"object-is": "^1.0.1",
"object-keys": "^1.1.1",
"regexp.prototype.flags": "^1.2.0"
}
},
"node_modules/deep-is": { "node_modules/deep-is": {
"version": "0.1.4", "version": "0.1.4",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
...@@ -2044,7 +2076,6 @@ ...@@ -2044,7 +2076,6 @@
"version": "1.1.4", "version": "1.1.4",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
"integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
"dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"has-property-descriptors": "^1.0.0", "has-property-descriptors": "^1.0.0",
...@@ -2681,6 +2712,24 @@ ...@@ -2681,6 +2712,24 @@
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/eventemitter3": {
"version": "2.0.3",
"resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-2.0.3.tgz",
"integrity": "sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg=="
},
"node_modules/events": {
"version": "3.3.0",
"resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz",
"integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
"engines": {
"node": ">=0.8.x"
}
},
"node_modules/extend": {
"version": "3.0.2",
"resolved": "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
},
"node_modules/fast-deep-equal": { "node_modules/fast-deep-equal": {
"version": "3.1.3", "version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
...@@ -2900,7 +2949,6 @@ ...@@ -2900,7 +2949,6 @@
"version": "1.2.3", "version": "1.2.3",
"resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
"integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
"dev": true,
"license": "MIT", "license": "MIT",
"funding": { "funding": {
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
...@@ -3067,7 +3115,6 @@ ...@@ -3067,7 +3115,6 @@
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
"integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
"dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"get-intrinsic": "^1.1.1" "get-intrinsic": "^1.1.1"
...@@ -3092,7 +3139,6 @@ ...@@ -3092,7 +3139,6 @@
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
"integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
"dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"has-symbols": "^1.0.2" "has-symbols": "^1.0.2"
...@@ -3206,6 +3252,18 @@ ...@@ -3206,6 +3252,18 @@
"node": ">= 0.4" "node": ">= 0.4"
} }
}, },
"node_modules/is-arguments": {
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/is-arguments/-/is-arguments-1.1.1.tgz",
"integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
"dependencies": {
"call-bind": "^1.0.2",
"has-tostringtag": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/is-bigint": { "node_modules/is-bigint": {
"version": "1.0.4", "version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
...@@ -3279,7 +3337,6 @@ ...@@ -3279,7 +3337,6 @@
"version": "1.0.5", "version": "1.0.5",
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
"integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
"dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"has-tostringtag": "^1.0.0" "has-tostringtag": "^1.0.0"
...@@ -3357,7 +3414,6 @@ ...@@ -3357,7 +3414,6 @@
"version": "1.1.4", "version": "1.1.4",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
"integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
"dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"call-bind": "^1.0.2", "call-bind": "^1.0.2",
...@@ -3786,11 +3842,22 @@ ...@@ -3786,11 +3842,22 @@
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
}, },
"node_modules/object-is": {
"version": "1.1.5",
"resolved": "https://registry.npmmirror.com/object-is/-/object-is-1.1.5.tgz",
"integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==",
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/object-keys": { "node_modules/object-keys": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
"dev": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">= 0.4" "node": ">= 0.4"
...@@ -3953,6 +4020,11 @@ ...@@ -3953,6 +4020,11 @@
"node": ">=4" "node": ">=4"
} }
}, },
"node_modules/parchment": {
"version": "1.1.4",
"resolved": "https://registry.npmmirror.com/parchment/-/parchment-1.1.4.tgz",
"integrity": "sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg=="
},
"node_modules/parent-module": { "node_modules/parent-module": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
...@@ -4197,6 +4269,37 @@ ...@@ -4197,6 +4269,37 @@
], ],
"license": "MIT" "license": "MIT"
}, },
"node_modules/quill": {
"version": "1.3.7",
"resolved": "https://registry.npmmirror.com/quill/-/quill-1.3.7.tgz",
"integrity": "sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==",
"dependencies": {
"clone": "^2.1.1",
"deep-equal": "^1.0.1",
"eventemitter3": "^2.0.3",
"extend": "^3.0.2",
"parchment": "^1.1.4",
"quill-delta": "^3.6.2"
}
},
"node_modules/quill-delta": {
"version": "3.6.3",
"resolved": "https://registry.npmmirror.com/quill-delta/-/quill-delta-3.6.3.tgz",
"integrity": "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==",
"dependencies": {
"deep-equal": "^1.0.1",
"extend": "^3.0.2",
"fast-diff": "1.1.2"
},
"engines": {
"node": ">=0.10"
}
},
"node_modules/quill-delta/node_modules/fast-diff": {
"version": "1.1.2",
"resolved": "https://registry.npmmirror.com/fast-diff/-/fast-diff-1.1.2.tgz",
"integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig=="
},
"node_modules/rc-align": { "node_modules/rc-align": {
"version": "4.0.15", "version": "4.0.15",
"resolved": "https://registry.npmjs.org/rc-align/-/rc-align-4.0.15.tgz", "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-4.0.15.tgz",
...@@ -4865,6 +4968,20 @@ ...@@ -4865,6 +4968,20 @@
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/react-quill": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/react-quill/-/react-quill-2.0.0.tgz",
"integrity": "sha512-4qQtv1FtCfLgoD3PXAur5RyxuUbPXQGOHgTlFie3jtxp43mXDtzCKaOgQ3mLyZfi1PUlyjycfivKelFhy13QUg==",
"dependencies": {
"@types/quill": "^1.3.10",
"lodash": "^4.17.4",
"quill": "^1.3.7"
},
"peerDependencies": {
"react": "^16 || ^17 || ^18",
"react-dom": "^16 || ^17 || ^18"
}
},
"node_modules/react-redux": { "node_modules/react-redux": {
"version": "8.0.7", "version": "8.0.7",
"resolved": "https://registry.npmmirror.com/react-redux/-/react-redux-8.0.7.tgz", "resolved": "https://registry.npmmirror.com/react-redux/-/react-redux-8.0.7.tgz",
...@@ -4968,6 +5085,14 @@ ...@@ -4968,6 +5085,14 @@
"react-dom": ">=16.8" "react-dom": ">=16.8"
} }
}, },
"node_modules/react-viewer": {
"version": "3.2.2",
"resolved": "https://registry.npmmirror.com/react-viewer/-/react-viewer-3.2.2.tgz",
"integrity": "sha512-DHOq1x6cXsAViY43204ILRzLVR5ovP1MgzsC+LzZCWlInRuHjzAgpQZ8GzWm1CkiNYuHGwCxH36X0JUHl2xDSg==",
"dependencies": {
"classnames": "^2.2.5"
}
},
"node_modules/readdirp": { "node_modules/readdirp": {
"version": "3.6.0", "version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
...@@ -5034,7 +5159,6 @@ ...@@ -5034,7 +5159,6 @@
"version": "1.4.3", "version": "1.4.3",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz",
"integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==",
"dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"call-bind": "^1.0.2", "call-bind": "^1.0.2",
...@@ -6503,6 +6627,14 @@ ...@@ -6503,6 +6627,14 @@
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
"integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w=="
}, },
"@types/quill": {
"version": "1.3.10",
"resolved": "https://registry.npmmirror.com/@types/quill/-/quill-1.3.10.tgz",
"integrity": "sha512-IhW3fPW+bkt9MLNlycw8u8fWb7oO7W5URC9MfZYHBlA24rex9rs23D5DETChu1zvgVdc5ka64ICjJOgQMr6Shw==",
"requires": {
"parchment": "^1.1.2"
}
},
"@types/react": { "@types/react": {
"version": "18.0.9", "version": "18.0.9",
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.9.tgz", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.9.tgz",
...@@ -7028,6 +7160,11 @@ ...@@ -7028,6 +7160,11 @@
"resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz",
"integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw=="
}, },
"clone": {
"version": "2.1.2",
"resolved": "https://registry.npmmirror.com/clone/-/clone-2.1.2.tgz",
"integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w=="
},
"codepage": { "codepage": {
"version": "1.15.0", "version": "1.15.0",
"resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz",
...@@ -7136,6 +7273,19 @@ ...@@ -7136,6 +7273,19 @@
"resolved": "https://registry.npmmirror.com/decode-uri-component/-/decode-uri-component-0.4.1.tgz", "resolved": "https://registry.npmmirror.com/decode-uri-component/-/decode-uri-component-0.4.1.tgz",
"integrity": "sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ==" "integrity": "sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ=="
}, },
"deep-equal": {
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/deep-equal/-/deep-equal-1.1.1.tgz",
"integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==",
"requires": {
"is-arguments": "^1.0.4",
"is-date-object": "^1.0.1",
"is-regex": "^1.0.4",
"object-is": "^1.0.1",
"object-keys": "^1.1.1",
"regexp.prototype.flags": "^1.2.0"
}
},
"deep-is": { "deep-is": {
"version": "0.1.4", "version": "0.1.4",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
...@@ -7146,7 +7296,6 @@ ...@@ -7146,7 +7296,6 @@
"version": "1.1.4", "version": "1.1.4",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
"integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
"dev": true,
"requires": { "requires": {
"has-property-descriptors": "^1.0.0", "has-property-descriptors": "^1.0.0",
"object-keys": "^1.1.1" "object-keys": "^1.1.1"
...@@ -7614,6 +7763,21 @@ ...@@ -7614,6 +7763,21 @@
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true "dev": true
}, },
"eventemitter3": {
"version": "2.0.3",
"resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-2.0.3.tgz",
"integrity": "sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg=="
},
"events": {
"version": "3.3.0",
"resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz",
"integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="
},
"extend": {
"version": "3.0.2",
"resolved": "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
},
"fast-deep-equal": { "fast-deep-equal": {
"version": "3.1.3", "version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
...@@ -7765,8 +7929,7 @@ ...@@ -7765,8 +7929,7 @@
"functions-have-names": { "functions-have-names": {
"version": "1.2.3", "version": "1.2.3",
"resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
"integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="
"dev": true
}, },
"gensync": { "gensync": {
"version": "1.0.0-beta.2", "version": "1.0.0-beta.2",
...@@ -7876,7 +8039,6 @@ ...@@ -7876,7 +8039,6 @@
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
"integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
"dev": true,
"requires": { "requires": {
"get-intrinsic": "^1.1.1" "get-intrinsic": "^1.1.1"
} }
...@@ -7890,7 +8052,6 @@ ...@@ -7890,7 +8052,6 @@
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
"integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
"dev": true,
"requires": { "requires": {
"has-symbols": "^1.0.2" "has-symbols": "^1.0.2"
} }
...@@ -7968,6 +8129,15 @@ ...@@ -7968,6 +8129,15 @@
"side-channel": "^1.0.4" "side-channel": "^1.0.4"
} }
}, },
"is-arguments": {
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/is-arguments/-/is-arguments-1.1.1.tgz",
"integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
"requires": {
"call-bind": "^1.0.2",
"has-tostringtag": "^1.0.0"
}
},
"is-bigint": { "is-bigint": {
"version": "1.0.4", "version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
...@@ -8015,7 +8185,6 @@ ...@@ -8015,7 +8185,6 @@
"version": "1.0.5", "version": "1.0.5",
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
"integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
"dev": true,
"requires": { "requires": {
"has-tostringtag": "^1.0.0" "has-tostringtag": "^1.0.0"
} }
...@@ -8060,7 +8229,6 @@ ...@@ -8060,7 +8229,6 @@
"version": "1.1.4", "version": "1.1.4",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
"integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
"dev": true,
"requires": { "requires": {
"call-bind": "^1.0.2", "call-bind": "^1.0.2",
"has-tostringtag": "^1.0.0" "has-tostringtag": "^1.0.0"
...@@ -8352,11 +8520,19 @@ ...@@ -8352,11 +8520,19 @@
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
"integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ=="
}, },
"object-is": {
"version": "1.1.5",
"resolved": "https://registry.npmmirror.com/object-is/-/object-is-1.1.5.tgz",
"integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==",
"requires": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3"
}
},
"object-keys": { "object-keys": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
"dev": true
}, },
"object-path": { "object-path": {
"version": "0.6.0", "version": "0.6.0",
...@@ -8465,6 +8641,11 @@ ...@@ -8465,6 +8641,11 @@
"integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
"dev": true "dev": true
}, },
"parchment": {
"version": "1.1.4",
"resolved": "https://registry.npmmirror.com/parchment/-/parchment-1.1.4.tgz",
"integrity": "sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg=="
},
"parent-module": { "parent-module": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
...@@ -8605,6 +8786,36 @@ ...@@ -8605,6 +8786,36 @@
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
"dev": true "dev": true
}, },
"quill": {
"version": "1.3.7",
"resolved": "https://registry.npmmirror.com/quill/-/quill-1.3.7.tgz",
"integrity": "sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==",
"requires": {
"clone": "^2.1.1",
"deep-equal": "^1.0.1",
"eventemitter3": "^2.0.3",
"extend": "^3.0.2",
"parchment": "^1.1.4",
"quill-delta": "^3.6.2"
}
},
"quill-delta": {
"version": "3.6.3",
"resolved": "https://registry.npmmirror.com/quill-delta/-/quill-delta-3.6.3.tgz",
"integrity": "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==",
"requires": {
"deep-equal": "^1.0.1",
"extend": "^3.0.2",
"fast-diff": "1.1.2"
},
"dependencies": {
"fast-diff": {
"version": "1.1.2",
"resolved": "https://registry.npmmirror.com/fast-diff/-/fast-diff-1.1.2.tgz",
"integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig=="
}
}
},
"rc-align": { "rc-align": {
"version": "4.0.15", "version": "4.0.15",
"resolved": "https://registry.npmjs.org/rc-align/-/rc-align-4.0.15.tgz", "resolved": "https://registry.npmjs.org/rc-align/-/rc-align-4.0.15.tgz",
...@@ -9031,6 +9242,16 @@ ...@@ -9031,6 +9242,16 @@
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
}, },
"react-quill": {
"version": "2.0.0",
"resolved": "https://registry.npmmirror.com/react-quill/-/react-quill-2.0.0.tgz",
"integrity": "sha512-4qQtv1FtCfLgoD3PXAur5RyxuUbPXQGOHgTlFie3jtxp43mXDtzCKaOgQ3mLyZfi1PUlyjycfivKelFhy13QUg==",
"requires": {
"@types/quill": "^1.3.10",
"lodash": "^4.17.4",
"quill": "^1.3.7"
}
},
"react-redux": { "react-redux": {
"version": "8.0.7", "version": "8.0.7",
"resolved": "https://registry.npmmirror.com/react-redux/-/react-redux-8.0.7.tgz", "resolved": "https://registry.npmmirror.com/react-redux/-/react-redux-8.0.7.tgz",
...@@ -9082,6 +9303,14 @@ ...@@ -9082,6 +9303,14 @@
"react-router": "6.11.1" "react-router": "6.11.1"
} }
}, },
"react-viewer": {
"version": "3.2.2",
"resolved": "https://registry.npmmirror.com/react-viewer/-/react-viewer-3.2.2.tgz",
"integrity": "sha512-DHOq1x6cXsAViY43204ILRzLVR5ovP1MgzsC+LzZCWlInRuHjzAgpQZ8GzWm1CkiNYuHGwCxH36X0JUHl2xDSg==",
"requires": {
"classnames": "^2.2.5"
}
},
"readdirp": { "readdirp": {
"version": "3.6.0", "version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
...@@ -9136,7 +9365,6 @@ ...@@ -9136,7 +9365,6 @@
"version": "1.4.3", "version": "1.4.3",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz",
"integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==",
"dev": true,
"requires": { "requires": {
"call-bind": "^1.0.2", "call-bind": "^1.0.2",
"define-properties": "^1.1.3", "define-properties": "^1.1.3",
......
// 分页通用接口 // 分页通用接口
export interface PaginationProps { export interface PaginationProps {
pageSize?: number; pageSize: number;
pageNo?: number; pageNo: number;
} }
// 通用返回接口(分页) // 通用返回接口(分页)
...@@ -39,17 +39,17 @@ export interface ResponseType<D> { ...@@ -39,17 +39,17 @@ export interface ResponseType<D> {
// 通用接口封装函数(分页) 建议用这个 // 通用接口封装函数(分页) 建议用这个
export interface InterListFunction<D extends object, T> { export interface InterListFunction<D extends object, T> {
(req: D & PaginationProps): Promise<ResponseListType<T>>; (req: D & Partial<PaginationProps>): Promise<ResponseListType<T>>;
} }
// 通用接口封装函数(不分页) 建议用这个 // 通用接口封装函数(不分页) 建议用这个
export interface InterFunction<D extends object, T> { export interface InterFunction<D extends object, T> {
(req: D): Promise<ResponseType<T>>; (req?: D): Promise<ResponseType<T>>;
} }
// 通用接口封装函数(分页了,但又没有分页) 建议用这个 // 通用接口封装函数(分页了,但又没有分页) 建议用这个
export interface InterItemFunction<D extends object, T> { export interface InterItemFunction<D extends object, T> {
(req: D & PaginationProps): Promise<ResponseItemType<T>>; (req: D & Partial<PaginationProps>): Promise<ResponseItemType<T>>;
} }
// 返回类型封装 // 返回类型封装
......
import { InterItemFunction } from '~/api/interface'; import { InterFunction, InterItemFunction } from '~/api/interface';
export type MakeListType = InterItemFunction< export type MakeListType = InterItemFunction<
any, any,
...@@ -31,6 +31,54 @@ export type productListType = InterItemFunction< ...@@ -31,6 +31,54 @@ export type productListType = InterItemFunction<
}[]; }[];
}[] }[]
>; >;
//产品-新增
export type addProductType = InterFunction<
{
categoryId: number;
directoryId: number;
model: string;
productBrandId: number;
productName: string;
},
null
>;
//产品-编辑
export type editProductType = InterFunction<
{
categoryId: number;
directoryId: number;
model: string;
productBrandId: number;
productName: string;
id?: number;
},
any
>;
//产品-删除
export type deleteProductType = InterFunction<{ id: number }, null>;
//产品-详情
export type productDetailType = InterFunction<
{ id: number },
{
id: number;
productName: string;
productBrandId: number;
productBrand: string;
model: string;
categoriesId: number;
categoryName: string;
directoryId: number;
directoryName: string;
productSpecList: {
id: number;
partNo: string;
specImage: string;
specName: string;
versionDesc: string;
productSkuId: number;
}[];
}
>;
//产品-规格-列表 //产品-规格-列表
export type ProductSpecListType = InterItemFunction< export type ProductSpecListType = InterItemFunction<
{ productSkuId: number }, { productSkuId: number },
...@@ -43,3 +91,55 @@ export type ProductSpecListType = InterItemFunction< ...@@ -43,3 +91,55 @@ export type ProductSpecListType = InterItemFunction<
productSkuId: number; productSkuId: number;
}[] }[]
>; >;
//产品-规格-新增
export type productSpecAddType = InterFunction<
{
partNo: string;
productSkuId: number;
specImage: string;
specName: string;
versionDesc: string;
},
null
>;
//产品-规格-编辑
export type productSpecEditType = InterFunction<
{
partNo: string;
productSkuId: number;
specImage: string;
specName: string;
versionDesc: string;
id?: number;
},
null
>;
//产品-规格-删除
export type productSpecDeleteType = InterFunction<{ id: number }, any>;
//产品-规格-配置价格
export type productSpecPriceType = InterFunction<
{
leaseTerm?: number;
productSpecId?: number;
specPrice: { cooperationTag: number; price: number }[];
type: number;
},
null
>;
//产品-规格-获取配置价格
export type getProductSpecPriceType = InterFunction<
{ leaseTerm?: number; productSpecId?: number; type: number },
{ id: number; cooperationTag: number; price: number; leaseTerm: number }[]
>;
//产品-规格-配置价格修改
export type editProductSpecPriceType = InterFunction<
{
leaseTerm?: number;
productSpecId?: number;
specPrice: { cooperationTag: number; price: number }[];
type: number;
},
null
>;
//加盟标签-列表
export type cooperationTagType = InterFunction<any, { id: number; tagName: string }[]>;
import axios from '../request'; import axios from '../request';
import { categoryListType, GoodsInfo } from '~/api/interface/categoryManage'; import { categoryListType, directoryListType, GoodsInfo } from '~/api/interface/categoryManage';
export class CategoryManageAPI { export class CategoryManageAPI {
// 分类目录 // 分类目录
...@@ -8,6 +8,10 @@ export class CategoryManageAPI { ...@@ -8,6 +8,10 @@ export class CategoryManageAPI {
params, params,
}); });
}; };
// 分类目录(类型)
static getDirectoryListClone: directoryListType = (params) => {
return axios.get('/pms/classify/getDirectoryList', { params });
};
//目录列表不含分页 //目录列表不含分页
static getDirectoryList = (params: { type: number }) => { static getDirectoryList = (params: { type: number }) => {
......
...@@ -9,21 +9,21 @@ import axios from '../request'; ...@@ -9,21 +9,21 @@ import axios from '../request';
export class MakeManageAPI { export class MakeManageAPI {
// 品牌-新增 // 品牌-新增
static addBrandInfo: MakeAddType = (params) => { static addBrandInfo: MakeAddType = (params) => {
return axios.get('uavgoods/brand/addBrandInfo', { params }); return axios.get('/pms/brand/addBrandInfo', { params });
}; };
// 品牌-编辑 // 品牌-编辑
static editBrandInfo: MakeEditType = (params) => { static editBrandInfo: MakeEditType = (params) => {
return axios.get('uavgoods/brand/editBrandInfo', { params }); return axios.get('/pms/brand/editBrandInfo', { params });
}; };
// 品牌-列表 // 品牌-列表
static getListBrandInfo: MakeListType = (params) => { static getListBrandInfo: MakeListType = (params) => {
return axios.get('uavgoods/brand/listBrandInfo', { params }); return axios.get('/pms/brand/listBrandInfo', { params });
}; };
// 品牌刪除 // 品牌刪除
static deleteBrandInfo: MakeDeleteType = (params) => { static deleteBrandInfo: MakeDeleteType = (params) => {
return axios.get('uavgoods/brand/deleteBrandInfo', { params }); return axios.get('/pms/brand/deleteBrandInfo', { params });
}; };
} }
import axios from '../request'; import axios from '../request';
import { import {
MakeListType, addProductType,
cooperationTagType,
deleteProductType,
editProductSpecPriceType,
editProductType,
getProductSpecPriceType,
productDetailType,
productListType, productListType,
productSpecAddType,
productSpecDeleteType,
productSpecEditType,
ProductSpecListType, ProductSpecListType,
productSpecPriceType,
} from '~/api/interface/produceManageType'; } from '~/api/interface/produceManageType';
import dayjs from 'dayjs';
export class ProduceManageAPI { export class ProduceManageAPI {
// 产品管理-分页列表 // 产品管理-分页列表
...@@ -11,41 +22,53 @@ export class ProduceManageAPI { ...@@ -11,41 +22,53 @@ export class ProduceManageAPI {
return axios.post('/pms/product/spec/listPageProductSku', data); return axios.post('/pms/product/spec/listPageProductSku', data);
}; };
// 产品sku管理-删除产品sku // 产品sku管理-删除产品sku
static removeProductSku = (params: unknown) => { static removeProductSku: deleteProductType = (params) => {
return axios.get('uavgoods/product/spec/removeProductSku', { params }); return axios.get('/pms/product/spec/removeProductSku', { params });
};
static directoryList = () => {
return axios.get('uavgoods/directory/directoryList');
};
// 分类列表(属于商品)
static getListGoodsTypeList = (type: number): any => {
return axios.get(`uavgoods/mgoods/getGoodsTypeInfoList/${type}`);
};
// 品牌-列表
static getListBrandInfo: MakeListType = (params) => {
return axios.get('uavgoods/brand/listBrandInfo', { params });
}; };
// 产品sku管理-新增产品sku // 产品sku管理-新增产品sku
static addProductSku = (data: unknown) => { static addProductSku: addProductType = (data) => {
return axios.post('uavgoods/product/spec/addProductSku', data); return axios.post('/pms/product/spec/addProductSku', data);
}; };
// 产品sku管理-编辑产品sku // 产品sku管理-编辑产品sku
static editProductSku = (data: unknown) => { static editProductSku: editProductType = (data) => {
return axios.post('uavgoods/product/spec/editProductSku', data); return axios.post('/pms/product/spec/editProductSku', data);
}; };
// 产品规格管理---删除规格
static removeProductSpec = (params: unknown) => {
return axios.get('uavgoods/product/spec/removeProductSpec', { params });
};
// 产品sku管理-编辑单个产品sku时的信息回显 // 产品sku管理-编辑单个产品sku时的信息回显
static getProductSkuDetail = (params: unknown) => { static getProductSkuDetail: productDetailType = (params) => {
return axios.get('uavgoods/product/spec/getProductSkuDetail', { params }); return axios.get('/pms/product/spec/getProductSkuDetail', { params });
}; };
// 产品规格管理---删除规格
static removeProductSpec: productSpecDeleteType = (params) => {
return axios.get('/pms/product/spec/removeProductSpec', { params });
};
//产品规格管理---新增规格
static addProductSpec: productSpecAddType = (data) => {
return axios.post('/pms/product/spec/addOrEditProductSpec', data);
};
//产品规格管理---编辑规格
static editProductSpec: productSpecEditType = (data) => {
return axios.post('/pms/product/spec/addOrEditProductSpec', data);
};
// 产品sku管理-产品规格管理-分页列表 // 产品sku管理-产品规格管理-分页列表
static listPageProductSpec: ProductSpecListType = (params) => { static listPageProductSpec: ProductSpecListType = (params) => {
return axios.get('/pms/product/spec/listPageProductSpec', { params }); return axios.get('/pms/product/spec/listPageProductSpec', { params });
}; };
//产品sku管理-产品规格管理-价格配置
static setProductSpecPrice: productSpecPriceType = (data) => {
return axios.post('/pms/product/spec/productSpecCPQ', data);
};
//产品sku管理-产品规格管理-获取价格配置
static getProductSpecPrice: getProductSpecPriceType = (data) => {
return axios.post('/pms/product/spec/getProductSpecCPQ', data);
};
//产品sku管理-产品规格管理-价格配置修改
static editProductSpecPrice: editProductSpecPriceType = (data) => {
return axios.post('/pms/product/spec/updateProductSpecCPQ', data);
};
//加盟标签-列表
static getCooperationListTag: cooperationTagType = () => {
return axios.get('/userapp/cooperation/listTag');
};
} }
...@@ -13,7 +13,7 @@ const service = axios.create({ ...@@ -13,7 +13,7 @@ const service = axios.create({
}); });
service.interceptors.request.use( service.interceptors.request.use(
(config: any) => { (config: any) => {
const token = Cookies.get('SHAREFLY-TOKEN'); const token = Cookies.get('SHAREFLY_TOKEN');
// console.log('token --->', token); // console.log('token --->', token);
if (token) { if (token) {
config.headers.token = token; config.headers.token = token;
......
...@@ -50,7 +50,7 @@ const AddOrEditSpecModal: FC<ModalProps & PropsType> = ({ ...@@ -50,7 +50,7 @@ const AddOrEditSpecModal: FC<ModalProps & PropsType> = ({
{ {
title: '序号', title: '序号',
align: 'center', align: 'center',
render: (text: string, record: selfProduceItemType, index: number) => { render: (_text: string, _record: selfProduceItemType, index: number) => {
return (pagination.pageNo - 1) * pagination.pageSize + index + 1; return (pagination.pageNo - 1) * pagination.pageSize + index + 1;
}, },
}, },
......
...@@ -18,7 +18,7 @@ const ProductListModal: FC<ModalProps & PropsType> = ({ open, onCancel, data }) ...@@ -18,7 +18,7 @@ const ProductListModal: FC<ModalProps & PropsType> = ({ open, onCancel, data })
title: '序号', title: '序号',
align: 'center', align: 'center',
width: '50px', width: '50px',
render: (text: string, record: productInventoryListType[0], index: number) => { render: (_text: string, _record: productInventoryListType[0], index: number) => {
return index + 1; return index + 1;
}, },
}, },
...@@ -27,7 +27,7 @@ const ProductListModal: FC<ModalProps & PropsType> = ({ open, onCancel, data }) ...@@ -27,7 +27,7 @@ const ProductListModal: FC<ModalProps & PropsType> = ({ open, onCancel, data })
dataIndex: 'productName', dataIndex: 'productName',
align: 'center', align: 'center',
width: '100px', width: '100px',
render: (text: string, record: productInventoryListType[0]) => { render: (_text: string, record: productInventoryListType[0]) => {
return record.productSku.productName; return record.productSku.productName;
}, },
}, },
...@@ -36,7 +36,7 @@ const ProductListModal: FC<ModalProps & PropsType> = ({ open, onCancel, data }) ...@@ -36,7 +36,7 @@ const ProductListModal: FC<ModalProps & PropsType> = ({ open, onCancel, data })
dataIndex: 'typeName', dataIndex: 'typeName',
align: 'center', align: 'center',
width: '100px', width: '100px',
render: (text: string, record: productInventoryListType[0]) => { render: (_text: string, record: productInventoryListType[0]) => {
return record.productSku.goodsTypeId; return record.productSku.goodsTypeId;
}, },
}, },
...@@ -45,7 +45,7 @@ const ProductListModal: FC<ModalProps & PropsType> = ({ open, onCancel, data }) ...@@ -45,7 +45,7 @@ const ProductListModal: FC<ModalProps & PropsType> = ({ open, onCancel, data })
dataIndex: 'model', dataIndex: 'model',
align: 'center', align: 'center',
width: '100px', width: '100px',
render: (text: string, record: productInventoryListType[0]) => { render: (_text: string, record: productInventoryListType[0]) => {
return record.productSku.model; return record.productSku.model;
}, },
}, },
...@@ -54,7 +54,7 @@ const ProductListModal: FC<ModalProps & PropsType> = ({ open, onCancel, data }) ...@@ -54,7 +54,7 @@ const ProductListModal: FC<ModalProps & PropsType> = ({ open, onCancel, data })
dataIndex: 'productBrand', dataIndex: 'productBrand',
align: 'center', align: 'center',
width: '100px', width: '100px',
render: (text: string, record: productInventoryListType[0]) => { render: (_text: string, record: productInventoryListType[0]) => {
return record.productSku.productName; return record.productSku.productName;
}, },
}, },
...@@ -62,7 +62,7 @@ const ProductListModal: FC<ModalProps & PropsType> = ({ open, onCancel, data }) ...@@ -62,7 +62,7 @@ const ProductListModal: FC<ModalProps & PropsType> = ({ open, onCancel, data })
title: '产品规格', title: '产品规格',
// align: "left", // align: "left",
width: '200px', width: '200px',
render: (text: string, record) => { render: (_text: string, record) => {
if (record.select === 0) { if (record.select === 0) {
return '不指定'; return '不指定';
} }
......
...@@ -4,7 +4,7 @@ import { useNavigate } from 'react-router-dom'; ...@@ -4,7 +4,7 @@ import { useNavigate } from 'react-router-dom';
import { ColumnsType } from 'antd/es/table'; import { ColumnsType } from 'antd/es/table';
import { IndustryManageAPI } from '~/api'; import { IndustryManageAPI } from '~/api';
import { useSearchParams } from 'react-router-dom'; import { useSearchParams } from 'react-router-dom';
import { inventoryType } from '../industryList/propsType'; // import { inventoryType } from '../industryList/propsType';
import { InterDataType, PaginationProps } from '~/api/interface'; import { InterDataType, PaginationProps } from '~/api/interface';
import { import {
industryDetailType, industryDetailType,
...@@ -48,13 +48,13 @@ function IndustryDetail() { ...@@ -48,13 +48,13 @@ function IndustryDetail() {
// 方案规格 // 方案规格
const [industrySpecData, setIndustrySpecData] = useState<industrySpecType>([]); const [industrySpecData, setIndustrySpecData] = useState<industrySpecType>([]);
// 产品清单弹窗显示 // 产品清单弹窗显示
const [visibleList, setVisibleList] = useState<boolean>(false); // const [visibleList, setVisibleList] = useState<boolean>(false);
// 产品规格清单 // 产品规格清单
const [listData, setListData] = useState<inventoryType[]>([]); // const [listData, setListData] = useState<inventoryType[]>([]);
// 配置价格弹窗显示 // 配置价格弹窗显示
const [visiblePrice, setVisiblePrice] = useState<boolean>(false); // const [visiblePrice, setVisiblePrice] = useState<boolean>(false);
// 当前配置价格数据 // 当前配置价格数据
const [priceData, setPriceData] = useState([]); // const [priceData, setPriceData] = useState([]);
// 新增编辑规格弹窗是否显示 // 新增编辑规格弹窗是否显示
const [addOrEditSpecModalShow, setAddOrEditSpecModalShow] = useState<boolean>(false); const [addOrEditSpecModalShow, setAddOrEditSpecModalShow] = useState<boolean>(false);
//关联产品弹窗 //关联产品弹窗
...@@ -81,8 +81,8 @@ function IndustryDetail() { ...@@ -81,8 +81,8 @@ function IndustryDetail() {
title: '规格图片', title: '规格图片',
dataIndex: 'specImage', dataIndex: 'specImage',
align: 'center', align: 'center',
render: (text: string, record) => { render: (text) => {
return <Image width={50} height={50} src={record.specImage} alt='图片' />; return <Image width={50} height={50} src={text} alt='图片' />;
}, },
}, },
{ {
...@@ -101,13 +101,13 @@ function IndustryDetail() { ...@@ -101,13 +101,13 @@ function IndustryDetail() {
title: '操作', title: '操作',
align: 'center', align: 'center',
width: '250px', width: '250px',
render: (text: string, record: any) => { render: (_text, record) => {
return ( return (
<div> <div>
<Button <Button
type='link' type='link'
onClick={() => { onClick={() => {
handlePrice(record); // handlePrice(record);
}} }}
> >
配置价格 配置价格
...@@ -139,20 +139,20 @@ function IndustryDetail() { ...@@ -139,20 +139,20 @@ function IndustryDetail() {
}); });
// 关闭产品清单 // 关闭产品清单
const handleListClosed = () => { // const handleListClosed = () => {
setListData([]); // setListData([]);
setVisibleList(false); // setVisibleList(false);
}; // };
// 打开配置价格弹窗 // 打开配置价格弹窗
const handlePrice = (arr: any) => { // const handlePrice = (arr: any) => {
setPriceData(arr); // setPriceData(arr);
setVisiblePrice(true); // setVisiblePrice(true);
}; // };
// 关闭配置价格弹窗 // 关闭配置价格弹窗
const handlePriceClosed = () => { // const handlePriceClosed = () => {
setPriceData([]); // setPriceData([]);
setVisiblePrice(false); // setVisiblePrice(false);
}; // };
// 打开新增弹窗 // 打开新增弹窗
const handleAdd = () => { const handleAdd = () => {
setAddOrEditSpecModalShow(true); setAddOrEditSpecModalShow(true);
......
import { Button, Table } from 'antd'; import { useEffect, useState } from 'react';
import { Button, message, Modal, Table } from 'antd';
import { PlusOutlined } from '@ant-design/icons'; import { PlusOutlined } from '@ant-design/icons';
import { ColumnsType } from 'antd/es/table'; import type { ColumnsType } from 'antd/es/table';
// import AddOrEditMakeModal from './components/addOrEditMakeModal'; import AddOrEditMakeModal from './components/addOrEditMakeModal';
import { MakeManageAPI } from '~/api';
import { MakeItemEntity } from '~/api/interface/makeManage';
import { PaginationProps } from '~/api/interface';
const MakeList = () => { const MakeManage = () => {
const columns: ColumnsType<any> = [ const columns: ColumnsType<MakeItemEntity> = [
{ {
title: '品牌名称', title: '品牌名称',
align: 'center', align: 'center',
...@@ -18,28 +22,130 @@ const MakeList = () => { ...@@ -18,28 +22,130 @@ const MakeList = () => {
{ {
title: '操作', title: '操作',
align: 'center', align: 'center',
render: () => ( render: (_text: string, record: MakeItemEntity) => (
<> <>
<Button type='link'>编辑</Button> <Button type='link' onClick={() => editMake(record)}>
<Button type='link' danger> 编辑
</Button>
<Button type='link' danger onClick={() => deleteMake(record)}>
删除 删除
</Button> </Button>
</> </>
), ),
}, },
]; ];
const [tableData, setTableData] = useState<MakeItemEntity[]>([]);
const [pagination, setPagination] = useState<PaginationProps & { totalCount: number }>({
pageNo: 1,
pageSize: 10,
totalCount: 0,
});
// add or edit modal is show
const [currentMakeItem, setCurrentMakeItem] = useState<MakeItemEntity>();
const [addOrEditModalShow, setAddOrEditModalShow] = useState<boolean>(false);
// 新建
const addMakeClick = () => {
setAddOrEditModalShow(true);
};
// add or edit modal event
const addOrEditModalOk = () => {
getListBrandInfo({
pageSize: pagination.pageSize,
pageNo: pagination.pageNo,
});
setAddOrEditModalShow(false);
setCurrentMakeItem(undefined);
};
const addOrEditModalCancel = () => {
setCurrentMakeItem(undefined);
setAddOrEditModalShow(false);
};
// 品牌-列表
const getListBrandInfo = (data: Pick<PaginationProps, 'pageSize' | 'pageNo'>) => {
MakeManageAPI.getListBrandInfo(data).then(({ result }) => {
setTableData(result.list || []);
pagination.pageNo = data.pageNo;
pagination.pageSize = data.pageSize;
pagination.totalCount = result.totalCount;
setPagination(pagination);
});
};
// 分页
const paginationChange = (pageNo: number, pageSize: number) => {
getListBrandInfo({
pageSize,
pageNo,
});
};
// edit
const editMake = (record: MakeItemEntity) => {
setCurrentMakeItem(record);
setAddOrEditModalShow(true);
};
// delete
const deleteMake = (record: MakeItemEntity) => {
Modal.confirm({
content: '是否删除该品牌?',
onOk: () => {
MakeManageAPI.deleteBrandInfo({ id: record.id }).then(({ code, message: msg }) => {
if (code === '200') {
message.success('删除成功');
if (tableData.length === 1 && pagination.pageNo !== 1) {
pagination.pageNo--;
}
getListBrandInfo({
pageSize: pagination.pageSize,
pageNo: pagination.pageNo,
});
} else {
message.error(msg);
}
});
},
});
};
useEffect(() => {
getListBrandInfo({
pageSize: pagination.pageSize,
pageNo: pagination.pageNo,
});
}, []);
return ( return (
<div className='make-list'> <div className='make-manage'>
<div className='make-list-operate'> <Button
<Button type='primary' icon={<PlusOutlined />}> icon={<PlusOutlined />}
新增 type='primary'
onClick={addMakeClick}
style={{ marginBottom: '10px' }}
>
新建
</Button> </Button>
</div>
<div className='make-list-content' style={{ marginTop: '10px' }}> <Table
<Table bordered columns={columns} /> columns={columns}
</div> bordered
{/*<AddOrEditMakeModal />*/} rowKey='id'
dataSource={tableData}
pagination={{
total: pagination.totalCount,
pageSize: pagination.pageSize,
current: pagination.pageNo,
showSizeChanger: true,
showQuickJumper: true,
onChange: (page: number, pageSize: number) => paginationChange(page, pageSize),
showTotal: (total, range) => `当前 ${range[0]}-${range[1]} 条记录 / 共 ${total} 条数据`,
}}
/>
<AddOrEditMakeModal
open={addOrEditModalShow}
onOk={addOrEditModalOk}
handleCancel={addOrEditModalCancel}
title={currentMakeItem ? '编辑品牌' : '新建品牌'}
makeItem={currentMakeItem}
/>
</div> </div>
); );
}; };
export default MakeList; export default MakeManage;
import React, { FC, useEffect, useState } from 'react';
import { Form, Input, Modal, message, ModalProps } from 'antd';
import { Uploader } from '~/components/uploader';
import { UploadOutlined } from '@ant-design/icons';
import { ProduceManageAPI } from '~/api';
import { InterDataType } from '~/api/interface';
import { ProductSpecListType } from '~/api/interface/produceManageType';
//产品规格返回类型
type specType = InterDataType<ProductSpecListType>['list'];
interface PropsType {
onCancel: () => void;
onOk: () => void;
data: specType[0] | undefined;
productSkuId: number;
}
const AddOrEditProduceSpecModal: FC<ModalProps & PropsType> = ({
open,
onCancel,
data,
onOk,
productSkuId,
}) => {
// 表格事件
const [form] = Form.useForm();
//文件列表
const [fileList, setFileList] = useState<
{
id: number;
name: string;
uid: number;
url: string;
}[]
>([]);
// 关闭弹窗
const handleClosed = () => {
form.resetFields();
setFileList([]);
onCancel();
};
// 触发表单验证
const handleSubmit = () => {
form
.validateFields()
.then((values) => {
const obj = { ...data, ...values, productSkuId };
ProduceManageAPI[!obj.id ? 'addProductSpec' : 'editProductSpec'](obj).then(({ code }) => {
if (code === '200') {
message.success('操作成功');
form.resetFields();
setFileList([]);
onOk();
}
});
})
.catch((err) => {
message.warning(err.errorFields[0].errors[0]).then();
});
};
//上传成功
const uploadSuccess = (
value: {
id: number;
name: string;
uid: number;
url: string;
}[],
) => {
form.setFieldsValue({
specImage: value[0].url,
});
};
// componentsDidMounted
useEffect(() => {
if (data) {
form.setFieldsValue({
...data,
});
setFileList([
{
uid: Math.random(),
name: 'img',
id: Math.random(),
url: data.specImage,
},
]);
}
}, [data]);
return (
<div>
<Modal
open={open}
title='新增'
onCancel={handleClosed}
onOk={handleSubmit}
destroyOnClose
width={800}
>
<Form
name='form'
form={form}
layout='horizontal'
labelCol={{ span: 4 }}
wrapperCol={{ span: 16 }}
>
<Form.Item
name='specName'
label='规格名称'
rules={[{ required: true, message: '请输入规格名称' }]}
>
<Input placeholder='请输入规格名称' allowClear maxLength={30} />
</Form.Item>
<Form.Item
name='specImage'
label='规格图片'
rules={[{ required: true, message: '请上传规格图片' }]}
>
<Uploader
fileUpload
listType='picture-card'
onChange={uploadSuccess}
defaultFileList={fileList}
>
<UploadOutlined />
</Uploader>
</Form.Item>
<Form.Item
name='partNo'
label='产品料号'
rules={[{ required: true, message: '请输入产品料号' }]}
>
<Input placeholder='请输入产品料号' allowClear maxLength={50} />
</Form.Item>
<Form.Item
name='versionDesc'
label='版本描述'
rules={[{ required: true, message: '请输入版本描述' }]}
>
<Input placeholder='请输入版本描述' allowClear maxLength={50} />
</Form.Item>
</Form>
</Modal>
</div>
);
};
export default AddOrEditProduceSpecModal;
import React, { FC, useEffect, useState } from 'react';
import { Form, Input, message, Modal, Select, Row, Col, Button, ModalProps, Card } from 'antd';
import { ProduceManageAPI } from '~/api';
import { InterDataType } from '~/api/interface';
import { cooperationTagType, ProductSpecListType } from '~/api/interface/produceManageType';
import { filterObjAttr } from '~/utils';
//加盟标签返回类型
type cooperationTagResponseType = InterDataType<cooperationTagType>;
//产品规格返回类型
type specType = InterDataType<ProductSpecListType>['list'][0];
interface PropsType {
onCancel: () => void;
data: specType | undefined;
}
const { Option } = Select;
const SetProduceSpecPriceModal: FC<ModalProps & PropsType> = ({ open, onCancel, data }) => {
const tabList = [
{
key: '0',
tab: '销售价格',
},
{
key: '1',
tab: '租赁价格',
},
];
//当前tab
const [currentTab, setCurrentTab] = useState<string>('0');
// 表格事件
const [form] = Form.useForm();
// 等级标签列表
const [tagInfoList, setTagInfoList] = useState<cooperationTagResponseType>([]);
// 选择的列表
const [selectList, setSelectList] = useState<number[]>([]);
//是否编辑
const [isEdit, setIsEdit] = useState<boolean>(false);
// 获取当前规格的价格
const getProductSpecPrice = (type: number, productSpecId?: number, leaseTerm?: number) => {
ProduceManageAPI.getProductSpecPrice({ type, productSpecId, leaseTerm }).then(({ result }) => {
setIsEdit(!!result.length);
const levelNumber: number[] = result
.filter((v) => v.cooperationTag != 0)
.map((v) => v.cooperationTag);
const Obj: any = result.reduce((pre: any, cur) => {
pre[cur.cooperationTag] = cur.price;
return { ...pre };
}, {});
if (result.length) {
form.setFieldsValue({ ...Obj, level: levelNumber });
} else {
form.setFieldsValue({
0: undefined,
level: undefined,
});
}
const arr = result
.map((i) => {
return i.cooperationTag;
})
.filter((i: number) => i !== 0);
setSelectList(arr);
});
};
// 获取等级标签
const getTagNameList = () => {
ProduceManageAPI.getCooperationListTag().then(({ result }) => {
setTagInfoList(result || []);
});
};
// 选择器点击事件
const handleChange = (value: number[]) => {
setSelectList(value);
};
// 将val转换为label
const transValtoLabel = (id: number) => {
const item = tagInfoList.find((i) => i.id === id);
return item ? item.tagName : id;
};
// 关闭弹窗
const handleClosed = () => {
setCurrentTab('0');
const data = Object.fromEntries(
selectList.map((i) => {
return [i, undefined];
}),
);
form.setFieldsValue({
0: undefined,
...data,
});
setSelectList([]);
onCancel();
};
// 触发表单验证
const handleSubmit = () => {
form
.validateFields()
.then(async (values) => {
const specPrice = Object.keys(filterObjAttr(values, ['leaseTerm', 'level'])).reduce(
(pre: any, cur: string) => {
return [...pre, { price: values[cur], cooperationTag: Number(cur) }];
},
[],
);
ProduceManageAPI[isEdit ? 'editProductSpecPrice' : 'setProductSpecPrice']({
specPrice,
productSpecId: data?.id,
type: Number(currentTab),
leaseTerm: values.leaseTerm,
}).then(({ code }) => {
if (code === '200') {
message.success('操作成功');
handleClosed();
}
});
})
.catch((err) => {
message.warning(err.errorFields[0].errors[0]).then();
});
};
// 价格正则
const priceValidator = (_rule: any, value: any) => {
const regExp = /^[1-9]\d{0,7}(\.\d{1,2})?$|^0(\.\d{1,2})?$/;
const bol: boolean = regExp.test(value);
if (!value) {
return Promise.reject(new Error('请输入定价金额'));
}
if (!bol) {
return Promise.reject(
new Error('金额应为数字,小数最多两位,整数最多八位,不能输入0开头的整数'),
);
}
return Promise.resolve();
};
//tab change
const onTabChange = (key: string) => {
form.resetFields();
switch (key) {
case '0':
getProductSpecPrice(Number(key), data?.id);
break;
case '1':
getProductSpecPrice(Number(key), data?.id, 0);
break;
}
setSelectList([]);
setCurrentTab(key);
};
//租期选择
const rentDateChange = (value: string) => {
getProductSpecPrice(Number(currentTab), data?.id, Number(value));
};
// componentsDidMounted
useEffect(() => {
if (data) {
getTagNameList();
getProductSpecPrice(Number(currentTab), data?.id);
}
}, [data]);
return (
<Modal
open={open}
title='配置价格'
destroyOnClose
width={768}
onCancel={handleClosed}
footer={[
<Button key='1' type='default' onClick={handleClosed}>
取消
</Button>,
<Button key='2' type='primary' onClick={handleSubmit}>
确认
</Button>,
]}
>
<Card tabList={tabList} onTabChange={onTabChange}>
<Form
name='form'
form={form}
layout='horizontal'
labelWrap
initialValues={{ leaseTerm: 0 }}
>
{currentTab === '1' && (
<Form.Item
label='租期'
labelCol={{ span: 5 }}
wrapperCol={{ span: 15 }}
name='leaseTerm'
rules={[{ required: true, message: '请选择租期' }]}
>
<Select onChange={rentDateChange}>
<Select.Option value={0}>1-7天</Select.Option>
<Select.Option value={1}>8-15天</Select.Option>
<Select.Option value={2}>16-30天</Select.Option>
<Select.Option value={3}>31天以上</Select.Option>
</Select>
</Form.Item>
)}
<Form.Item
label='渠道等级'
name='level'
rules={[{ required: true, message: '请选择渠道等级' }]}
labelCol={{ span: 5 }}
wrapperCol={{ span: 15 }}
>
<Select
placeholder='请选择渠道等级'
allowClear
mode='multiple'
onChange={handleChange}
value={selectList}
>
{tagInfoList.map((i, j) => (
<Option value={i.id} key={j}>
{i.tagName}
</Option>
))}
</Select>
</Form.Item>
<Row>
<Col span={20}>
<Form.Item
name='0'
label='市场单价'
rules={[{ required: true, validator: priceValidator }]}
labelCol={{ span: 6 }}
wrapperCol={{ span: 18 }}
>
<Input placeholder='请输入市场单价' maxLength={11} allowClear />
</Form.Item>
</Col>
<Col span={4}>
<div style={{ margin: '6px 0 0 10px' }}>元/件</div>
</Col>
</Row>
{selectList.map((i, j) => (
<Row key={j}>
<Col span={20}>
<Form.Item
name={i}
label={transValtoLabel(i)}
rules={[{ required: true, validator: priceValidator }]}
key={j}
labelCol={{ span: 6 }}
wrapperCol={{ span: 18 }}
>
<Input placeholder='请输入定价金额' maxLength={11} allowClear />
</Form.Item>
</Col>
<Col span={4}>
<div style={{ margin: '6px 0 0 10px' }}>元/件</div>
</Col>
</Row>
))}
</Form>
</Card>
</Modal>
);
};
export default SetProduceSpecPriceModal;
import React, { useEffect, useState } from 'react'; import React, { useEffect, useState } from 'react';
import qs from 'query-string'; import { Button, Descriptions, message, Table, Modal, Image } from 'antd';
import { Button, Descriptions, message, Table, Modal } from 'antd';
import { ColumnsType } from 'antd/es/table'; import { ColumnsType } from 'antd/es/table';
// import { PriceModal } from '@/pages/goodsManage/productManage/comp/priceModal'; import AddOrEditProduceSpecModal from './components/addOrEditProduceSpecModal';
// import { AddEditDetailModal } from '@/pages/goodsManage/productManage/comp/addEditDetailModal'; import SetProduceSpecPriceModal from './components/setProduceSpecPriceModal';
import useOption from '~/common/hook/optionHook';
import { ProductSkuType, ProductSpecType } from '../produceList/propsType';
import { ProduceManageAPI } from '~/api'; import { ProduceManageAPI } from '~/api';
import { useSearchParams } from 'react-router-dom';
import { InterDataType, PaginationProps } from '~/api/interface';
import { productDetailType, ProductSpecListType } from '~/api/interface/produceManageType';
//产品详情返回类型
type detailType = InterDataType<productDetailType>;
//产品规格返回类型
type specType = InterDataType<ProductSpecListType>['list'];
const { confirm } = Modal; const { confirm } = Modal;
function ProduceDetail(props: any) { function ProduceDetail() {
const [searchParams] = useSearchParams();
//产品id
const [productId, setProductId] = useState<number>(0);
// 基本信息 // 基本信息
const [detailData, setDetailData] = useState<ProductSkuType>(); const [detailData, setDetailData] = useState<detailType>();
// 表格数据 // 表格数据
const [tableData, setTableData] = useState<ProductSpecType[]>([]); const [tableData, setTableData] = useState<specType>([]);
// 图片是否放大 //新增、编辑产品规格弹窗
const [visibleImg, setVisibleImg] = useState<boolean>(false); const [addOrEditProduceSpecModalShow, setAddOrEditProduceSpecModalShow] =
// 当前放大图片 useState<boolean>(false);
const [currentImgList, setCurrentImgList] = useState<{ src: string }[]>([]); // 当前数据
// 产品清单弹窗显示 const [addEditData, setAddEditData] = useState<specType[0]>();
const [visibleList, setVisibleList] = useState<boolean>(false); //配置价格弹窗
// 当前放大图片 const [produceSpecPriceModalShow, setProduceSpecPriceModalShow] = useState<boolean>(false);
const [listData, setListData] = useState([]);
// 配置价格弹窗显示
const [visiblePrice, setVisiblePrice] = useState<boolean>(false);
// 当前配置价格数据
const [priceData, setPriceData] = useState([]);
// 配置价格弹窗显示
const [visibleAddEdit, setVisibleAddEdit] = useState<boolean>(false);
// 当前配置价格数据
const [addEditData, setAddEditData] = useState<ProductSpecType>();
// 按钮权限
const btnAdd = useOption(22155);
const btnSetPrice = useOption(22156);
const btnEdit = useOption(22157);
const btnDelete = useOption(22158);
// 预览图片
const previewImage = (url: string) => {
setVisibleImg(true);
setCurrentImgList([{ src: url }]);
};
// 关闭图片放大
const setVisibleEvent = () => {
setVisibleImg(false);
};
// 查看产品清单
const handleList = (arr: any) => {
setListData(arr);
setVisibleList(true);
};
// 关闭产品清单
const handleListClosed = () => {
setListData([]);
setVisibleList(false);
};
// 打开配置价格弹窗
const handlePrice = (arr: any) => {
setPriceData(arr);
setVisiblePrice(true);
};
// 关闭配置价格弹窗
const handlePriceClosed = () => {
setPriceData([]);
setVisiblePrice(false);
};
// 打开新增弹窗
const handleAdd = () => {
const { id } = qs.parse(props.location.search);
setAddEditData({
createTime: '',
id: 0,
partNo: '',
productSkuId: id as unknown as number,
specImage: '',
specName: '',
versionDesc: '',
});
setVisibleAddEdit(true);
};
// 打开编辑弹窗
const handleEdit = (arr: ProductSpecType) => {
setAddEditData(arr);
setVisibleAddEdit(true);
};
// 关闭新增编辑弹窗
const handleAddEditClosed = () => {
paginationChange(pagination.current, pagination.pageSize);
setAddEditData(undefined);
setVisibleAddEdit(false);
};
// 删除产品
const handleDelete = (record: ProductSpecType) => {
confirm({
title: '提示',
content: '删除后此数据将会丢失,确定删除吗?',
async onOk() {
const res: any = await ProduceManageAPI.removeProductSpec({ id: record.id });
if (res.code !== '200') {
return message.error(res.message);
}
if (!res.result) {
await message.success('操作成功');
await paginationChange(pagination.current, pagination.pageSize);
return;
}
message.info({
content: (
<div style={{ textAlign: 'left' }}>
{res.result.goodsName && (
<div>
<div style={{ color: 'red' }}>删除失败,已被商品关联</div>
<div>关联商品为: {res.result.goodsName.join(',')}</div>
</div>
)}
{res.result.industrySkuName && (
<div>
<div style={{ color: 'red' }}>删除失败,已被方案关联</div>
<div>关联方案SKU为: {getTipInfo(res.result.industrySkuName)}</div>
</div>
)}
</div>
),
duration: 2,
// key: date,
// onClick: () => {
// message.destroy(date);
// },
});
},
});
};
// 表格结构 // 表格结构
const columns: ColumnsType<ProductSpecType> = [ const columns: ColumnsType<specType[0]> = [
{ title: '规格名称', dataIndex: 'specName', align: 'center' }, { title: '规格名称', dataIndex: 'specName', align: 'center' },
{ {
title: '规格图片', title: '规格图片',
dataIndex: 'specImage', dataIndex: 'specImage',
align: 'center', align: 'center',
render: (text: string) => { render: (text: string) => {
return ( return <Image width={50} height={50} src={text} />;
<img
style={{ width: '50px', height: '50px' }}
src={text}
alt='图片'
onClick={() => {
previewImage(text);
}}
/>
);
}, },
}, },
{ title: '版本描述', dataIndex: 'versionDesc', align: 'center' }, { title: '版本描述', dataIndex: 'versionDesc', align: 'center' },
...@@ -156,10 +47,9 @@ function ProduceDetail(props: any) { ...@@ -156,10 +47,9 @@ function ProduceDetail(props: any) {
title: '操作', title: '操作',
align: 'center', align: 'center',
width: '250px', width: '250px',
render: (text: string, record: ProductSpecType) => { render: (_text: string, record) => {
return ( return (
<div> <div>
{btnSetPrice ? (
<Button <Button
type='link' type='link'
onClick={() => { onClick={() => {
...@@ -168,10 +58,6 @@ function ProduceDetail(props: any) { ...@@ -168,10 +58,6 @@ function ProduceDetail(props: any) {
> >
配置价格 配置价格
</Button> </Button>
) : (
''
)}
{btnEdit ? (
<Button <Button
type='link' type='link'
onClick={() => { onClick={() => {
...@@ -180,64 +66,103 @@ function ProduceDetail(props: any) { ...@@ -180,64 +66,103 @@ function ProduceDetail(props: any) {
> >
编辑 编辑
</Button> </Button>
) : (
''
)}
{btnDelete ? (
<Button type='link' onClick={() => handleDelete(record)}> <Button type='link' onClick={() => handleDelete(record)}>
删除 删除
</Button> </Button>
) : (
''
)}
</div> </div>
); );
}, },
}, },
]; ];
// 表格分页配置 // 表格分页配置
const [pagination, setPagination] = useState({ const [pagination, setPagination] = useState<PaginationProps & { totalCount: number }>({
total: 0, totalCount: 0,
pageSize: 10, pageSize: 10,
current: 1, pageNo: 1,
totalPage: 0,
}); });
// 获取基本信息 // 打开新增弹窗
const getDetailData = async () => { const handleAdd = () => {
const { id } = qs.parse(props.location.search); setAddEditData(undefined);
const res: any = await ProduceManageAPI.getProductSkuDetail({ id }); setAddOrEditProduceSpecModalShow(true);
if (res && res.code === '200') { };
setDetailData(res.result); // 打开编辑弹窗
const handleEdit = (record: specType[0]) => {
setAddEditData(record);
setAddOrEditProduceSpecModalShow(true);
};
// 关闭新增编辑弹窗
const addOrEditProduceSpecModalCancel = () => {
setAddOrEditProduceSpecModalShow(false);
setAddEditData(undefined);
};
const addOrEditProduceSpecModalOk = () => {
setAddOrEditProduceSpecModalShow(false);
getProductSpecList(productId);
}; // 删除产品
const handleDelete = (record: specType[0]) => {
confirm({
title: '提示',
content: '删除后此数据将会丢失,确定删除吗?',
async onOk() {
const { code, result } = await ProduceManageAPI.removeProductSpec({ id: record.id });
if (!result && code === '200') {
message.success('操作成功');
getProductSpecList(productId);
return;
} }
message.info({
content: (
<div style={{ textAlign: 'left' }}>
{result.goodsName && (
<div>
<div style={{ color: 'red' }}>删除失败,已被商品关联</div>
<div>关联商品为: {result.goodsName.join(',')}</div>
</div>
)}
{result.industrySkuName && (
<div>
<div style={{ color: 'red' }}>删除失败,已被方案关联</div>
<div>关联方案SKU为: {getTipInfo(result.industrySkuName)}</div>
</div>
)}
</div>
),
duration: 2,
});
},
});
}; };
// 获取表格数据 // 获取基本信息
// 新版通用部分(ES6+ for React) ZhangLK 2022/08/30 Start const getDetailData = (id: number) => {
// 加载列表 ProduceManageAPI.getProductSkuDetail({ id }).then(({ result }) => {
const getTableList = async (value = {}) => { setDetailData(result || {});
// 只需要修改这个地方的接口即可
const res: any = await ProduceManageAPI.listPageProductSpec({
pageNo: pagination.current,
pageSize: pagination.pageSize,
...value,
productSkuId: qs.parse(props.location.search).id,
}); });
if (res && res.code === '200') { };
// console.log("res -->", res); //获取产品规格列表
const { list, pageNo, totalCount, pageSize, totalPage } = res.result; // 解构 const getProductSpecList = (productSkuId: number) => {
setPagination({ ProduceManageAPI.listPageProductSpec({
total: totalCount, pageNo: pagination.pageNo,
pageSize, pageSize: pagination.pageSize,
current: pageNo, productSkuId,
totalPage, }).then(({ result }) => {
setTableData(result.list);
pagination.totalCount = result.totalCount;
setPagination(pagination);
}); });
setTableData(list);
} else {
message.warning(res.message);
}
}; };
// 翻页 // 翻页
const paginationChange = (pageNo: number, pageSize: number) => { const paginationChange = (pageNo: number, pageSize: number) => {
getTableList({ pageNo, pageSize }).then(); pagination.pageNo = pageNo;
pagination.pageSize = pageSize;
getProductSpecList(productId);
};
//配置价格
const handlePrice = (record: specType[0]) => {
setAddEditData(record);
setProduceSpecPriceModalShow(true);
};
const produceSpecPriceModalCancel = () => {
setProduceSpecPriceModalShow(false);
}; };
// 返回上一页 // 返回上一页
const handleBack = () => { const handleBack = () => {
...@@ -248,9 +173,9 @@ function ProduceDetail(props: any) { ...@@ -248,9 +173,9 @@ function ProduceDetail(props: any) {
return data.map((v: any) => `${v.industrySkuName}(${v.industrySpecNames})`).join('、'); return data.map((v: any) => `${v.industrySkuName}(${v.industrySpecNames})`).join('、');
}; };
useEffect(() => { useEffect(() => {
// if (!props.location.search) return; setProductId(Number(searchParams.get('id')));
// getDetailData().then(); getDetailData(Number(searchParams.get('id')));
// getTableList().then(); getProductSpecList(Number(searchParams.get('id')));
}, []); }, []);
return ( return (
<div className='detail-wrap'> <div className='detail-wrap'>
...@@ -269,7 +194,7 @@ function ProduceDetail(props: any) { ...@@ -269,7 +194,7 @@ function ProduceDetail(props: any) {
> >
<Descriptions.Item label='产品名称'>{detailData?.productName}</Descriptions.Item> <Descriptions.Item label='产品名称'>{detailData?.productName}</Descriptions.Item>
<Descriptions.Item label='产品目录'>{detailData?.directoryName}</Descriptions.Item> <Descriptions.Item label='产品目录'>{detailData?.directoryName}</Descriptions.Item>
<Descriptions.Item label='产品类型'>{detailData?.typeName}</Descriptions.Item> <Descriptions.Item label='产品类型'>{detailData?.categoryName}</Descriptions.Item>
<Descriptions.Item label='型号'>{detailData?.model}</Descriptions.Item> <Descriptions.Item label='型号'>{detailData?.model}</Descriptions.Item>
<Descriptions.Item label='产品品牌'>{detailData?.productBrand}</Descriptions.Item> <Descriptions.Item label='产品品牌'>{detailData?.productBrand}</Descriptions.Item>
</Descriptions> </Descriptions>
...@@ -280,15 +205,11 @@ function ProduceDetail(props: any) { ...@@ -280,15 +205,11 @@ function ProduceDetail(props: any) {
labelStyle={{ width: '200px' }} labelStyle={{ width: '200px' }}
style={{ marginTop: '20px' }} style={{ marginTop: '20px' }}
> >
{btnAdd ? (
<Descriptions.Item> <Descriptions.Item>
<Button type='primary' onClick={handleAdd}> <Button type='primary' onClick={handleAdd}>
新增规格 新增规格
</Button> </Button>
</Descriptions.Item> </Descriptions.Item>
) : (
''
)}
<Descriptions.Item> <Descriptions.Item>
<Table <Table
size='small' size='small'
...@@ -298,9 +219,9 @@ function ProduceDetail(props: any) { ...@@ -298,9 +219,9 @@ function ProduceDetail(props: any) {
style={{ width: '100%' }} style={{ width: '100%' }}
bordered bordered
pagination={{ pagination={{
total: pagination.total, total: pagination.totalCount,
pageSize: pagination.pageSize, pageSize: pagination.pageSize,
current: pagination.current, current: pagination.pageNo,
showSizeChanger: true, showSizeChanger: true,
showQuickJumper: true, showQuickJumper: true,
onChange: (page: number, pageSize: number) => paginationChange(page, pageSize), onChange: (page: number, pageSize: number) => paginationChange(page, pageSize),
...@@ -310,12 +231,20 @@ function ProduceDetail(props: any) { ...@@ -310,12 +231,20 @@ function ProduceDetail(props: any) {
/> />
</Descriptions.Item> </Descriptions.Item>
</Descriptions> </Descriptions>
{/*<PriceModal visible={visiblePrice} closed={handlePriceClosed} data={priceData} />*/} {/*新增、编辑*/}
{/*<AddEditDetailModal*/} <AddOrEditProduceSpecModal
{/* visible={visibleAddEdit}*/} open={addOrEditProduceSpecModalShow}
{/* closed={handleAddEditClosed}*/} onCancel={addOrEditProduceSpecModalCancel}
{/* data={addEditData}*/} data={addEditData}
{/*/>*/} onOk={addOrEditProduceSpecModalOk}
productSkuId={productId}
/>
{/*配置价格*/}
<SetProduceSpecPriceModal
open={produceSpecPriceModalShow}
onCancel={produceSpecPriceModalCancel}
data={addEditData}
/>
</div> </div>
); );
} }
......
import React, { useEffect, useState } from 'react'; import React, { FC, useEffect, useState } from 'react';
import { Form, Input, Modal, message, Select } from 'antd'; import { Form, Input, Modal, message, Select, ModalProps } from 'antd';
import { CategoryManageAPI, ProduceManageAPI } from '~/api'; import { CategoryManageAPI, ProduceManageAPI } from '~/api';
import { ProductSkuType, MakeItemEntity } from '../../propsType'; import { InterDataType, InterReqType } from '~/api/interface';
import { InterDataType } from '~/api/interface';
import { categoryListType, directoryListType } from '~/api/interface/categoryManage'; import { categoryListType, directoryListType } from '~/api/interface/categoryManage';
import { MakeListType } from '~/api/interface/makeManage';
import { addProductType } from '~/api/interface/produceManageType';
import { filterObjAttr } from '~/utils';
//目录返回类型 //目录返回类型
type directoryType = InterDataType<directoryListType>; type directoryType = InterDataType<directoryListType>;
//分类返回类型 //分类返回类型
type categoryType = InterDataType<categoryListType>['list']; type categoryType = InterDataType<categoryListType>['list'];
//品牌返回类型
type makeListType = InterDataType<MakeListType>['list'];
//表单类型
type addMakeParameterType = InterReqType<addProductType>;
interface PropsType { interface PropsType {
visible: boolean; closed: () => void;
closed: any; data: (addMakeParameterType & { id: number; categoriesId: number }) | undefined;
data: ProductSkuType | undefined;
makeList: MakeItemEntity[];
decList: directoryType; decList: directoryType;
makeList: makeListType;
onOk: () => void;
} }
const { Option } = Select; const { Option } = Select;
function AddOrEditProduceModal(props: PropsType) { const AddOrEditProduceModal: FC<ModalProps & PropsType> = ({
// 父组件传参 open,
const { visible, closed, data, makeList, decList } = props; closed,
data,
decList,
makeList,
onOk,
}) => {
// 产品类型下拉列表 // 产品类型下拉列表
const [productTypeSelectList, setProductTypeSelectList] = useState<categoryType>([]); const [productTypeSelectList, setProductTypeSelectList] = useState<categoryType>([]);
// 表格事件 // 表格事件
const [form] = Form.useForm(); const [form] = Form.useForm<addMakeParameterType>();
// 关闭弹窗 // 关闭弹窗
const handleClosed = async () => { const handleClosed = async () => {
form.resetFields(); form.resetFields();
...@@ -36,15 +47,17 @@ function AddOrEditProduceModal(props: PropsType) { ...@@ -36,15 +47,17 @@ function AddOrEditProduceModal(props: PropsType) {
const handleSubmit = () => { const handleSubmit = () => {
form form
.validateFields() .validateFields()
.then(async (values) => { .then((values) => {
const obj = { ...data, ...values }; const obj: any = { ...data, ...values };
const res: any = await ProduceManageAPI[!obj.id ? 'addProductSku' : 'editProductSku'](obj); ProduceManageAPI[!obj.id ? 'addProductSku' : 'editProductSku'](
if (res && res.code === '200') { filterObjAttr(obj, ['categoriesId']),
).then(({ code }) => {
if (code === '200') {
message.success('操作成功'); message.success('操作成功');
await handleClosed(); form.resetFields();
} else { onOk();
message.warning(res.message);
} }
});
}) })
.catch((err) => { .catch((err) => {
message.warning(err.errorFields[0].errors[0]).then(); message.warning(err.errorFields[0].errors[0]).then();
...@@ -60,20 +73,21 @@ function AddOrEditProduceModal(props: PropsType) { ...@@ -60,20 +73,21 @@ function AddOrEditProduceModal(props: PropsType) {
}; };
// 目录修改 // 目录修改
const decSelectChange = (value: number) => { const decSelectChange = (value: number) => {
form.setFieldValue('goodsTypeId', undefined); form.setFieldValue('categoryId', undefined);
getCategoryListByDirectory(value); getCategoryListByDirectory(value);
}; };
// componentsDidMounted // componentsDidMounted
useEffect(() => { useEffect(() => {
if (!data) return; if (data) {
getCategoryListByDirectory(data.directoryId); getCategoryListByDirectory(data.directoryId);
form.setFieldsValue({ form.setFieldsValue({
...data, ...data,
}); });
}
}, [data]); }, [data]);
return ( return (
<Modal <Modal
open={visible} open={open}
title={data?.id ? '编辑' : '新增'} title={data?.id ? '编辑' : '新增'}
onCancel={handleClosed} onCancel={handleClosed}
onOk={handleSubmit} onOk={handleSubmit}
...@@ -108,7 +122,7 @@ function AddOrEditProduceModal(props: PropsType) { ...@@ -108,7 +122,7 @@ function AddOrEditProduceModal(props: PropsType) {
</Select> </Select>
</Form.Item> </Form.Item>
<Form.Item <Form.Item
name='goodsTypeId' name='categoryId'
label='产品类型' label='产品类型'
rules={[{ required: true, message: '请选择产品类型' }]} rules={[{ required: true, message: '请选择产品类型' }]}
> >
...@@ -156,5 +170,5 @@ function AddOrEditProduceModal(props: PropsType) { ...@@ -156,5 +170,5 @@ function AddOrEditProduceModal(props: PropsType) {
</Form> </Form>
</Modal> </Modal>
); );
} };
export default AddOrEditProduceModal; export default AddOrEditProduceModal;
...@@ -3,36 +3,36 @@ import './index.scss'; ...@@ -3,36 +3,36 @@ import './index.scss';
import { Button, Form, Input, message, Modal, Select, Table } from 'antd'; import { Button, Form, Input, message, Modal, Select, Table } from 'antd';
import { useNavigate } from 'react-router-dom'; import { useNavigate } from 'react-router-dom';
import { ColumnsType } from 'antd/es/table'; import { ColumnsType } from 'antd/es/table';
import { CategoryManageAPI, ProduceManageAPI } from '~/api'; import { CategoryManageAPI, MakeManageAPI, ProduceManageAPI } from '~/api';
import AddOrEditProduce from './components/addOrEditProduceModal'; import AddOrEditProduce from './components/addOrEditProduceModal';
import { MakeItemEntity } from './propsType'; import { InterDataType, InterReqType, PaginationProps } from '~/api/interface';
import { InterDataType, PaginationProps } from '~/api/interface'; import { addProductType, productListType } from '~/api/interface/produceManageType';
import { productListType } from '~/api/interface/produceManageType';
import { categoryListType, directoryListType } from '~/api/interface/categoryManage'; import { categoryListType, directoryListType } from '~/api/interface/categoryManage';
import { MakeListType } from '~/api/interface/makeManage';
//产品列表返回类型 //产品列表返回类型
type produceListType = InterDataType<productListType>['list']; type produceListType = InterDataType<productListType>['list'];
//产品列表参数类型
type produceParametersType = Omit<InterReqType<productListType>, 'pageSize' | 'pageNo'>;
//分类返回类型 //分类返回类型
type categoryType = InterDataType<categoryListType>['list']; type categoryType = InterDataType<categoryListType>['list'];
//目录返回类型 //目录返回类型
type directoryType = InterDataType<directoryListType>; type directoryType = InterDataType<directoryListType>;
//品牌返回类型
type makeListType = InterDataType<MakeListType>['list'];
//新增编辑表单类型
type addMakeParameterType = InterReqType<addProductType>;
const { Option } = Select; const { Option } = Select;
const { confirm } = Modal; const { confirm } = Modal;
// 搜索表单的数据
let query: any = {};
// 表单提交
interface FormType {
productName?: string;
goodsTypeId?: number;
}
function ProduceManage() { function ProduceManage() {
// 路由操作 // 路由操作
const navigate = useNavigate(); const navigate = useNavigate();
// 表格数据 // 表格数据
const [tableData, setTableData] = useState<produceListType>([]); const [tableData, setTableData] = useState<produceListType>([]);
//筛选表单
const [query, setQuery] = useState<produceParametersType>();
// 加载中 // 加载中
const [loading, setLoading] = useState<boolean>(false); const [loading, setLoading] = useState<boolean>(false);
// 产品类型下拉列表 // 产品类型下拉列表
...@@ -40,9 +40,11 @@ function ProduceManage() { ...@@ -40,9 +40,11 @@ function ProduceManage() {
// 新增弹窗是否显示 // 新增弹窗是否显示
const [visibleAddEdit, setVisibleAddEdit] = useState(false); const [visibleAddEdit, setVisibleAddEdit] = useState(false);
// 新增弹窗内容 // 新增弹窗内容
const [addEditData, setAddEditData] = useState<produceListType[0]>(); const [addEditData, setAddEditData] = useState<
addMakeParameterType & { id: number; categoriesId: number }
>();
// 品牌列表 // 品牌列表
const [makeList, setMakeList] = useState<MakeItemEntity[]>([]); const [makeList, setMakeList] = useState<makeListType>([]);
// 目录列表 // 目录列表
const [decList, setDecList] = useState<directoryType>([]); const [decList, setDecList] = useState<directoryType>([]);
// 表格结构 // 表格结构
...@@ -66,7 +68,7 @@ function ProduceManage() { ...@@ -66,7 +68,7 @@ function ProduceManage() {
align: 'center', align: 'center',
width: '15%', width: '15%',
fixed: 'right', fixed: 'right',
render: (text: string, record) => { render: (_text: string, record) => {
return ( return (
<div> <div>
<Button type='link' onClick={() => handleDetail(record)}> <Button type='link' onClick={() => handleDetail(record)}>
...@@ -99,42 +101,61 @@ function ProduceManage() { ...@@ -99,42 +101,61 @@ function ProduceManage() {
}; };
// 新增弹窗 // 新增弹窗
const handleAdd = () => { const handleAdd = () => {
getMakeList();
setVisibleAddEdit(true); setVisibleAddEdit(true);
setAddEditData(undefined); setAddEditData(undefined);
}; };
// 编辑弹窗 // 编辑弹窗
const handleEdit = (record: produceListType[0]) => { const handleEdit = (record: produceListType[0]) => {
getMakeList();
setVisibleAddEdit(true); setVisibleAddEdit(true);
setAddEditData(record); setAddEditData({
id: record.id,
categoryId: record.categoriesId,
directoryId: record.directoryId,
model: record.model,
productBrandId: record.productBrandId,
productName: record.productName,
categoriesId: record.categoriesId,
});
}; };
// 关闭弹窗 // 关闭弹窗
const handleAddEditClosed = () => { const handleAddEditClosed = () => {
setVisibleAddEdit(false); setVisibleAddEdit(false);
setAddEditData(undefined); setAddEditData(undefined);
paginationChange(pagination.pageNo, pagination.pageSize); };
const addOrEditProduceOk = () => {
setVisibleAddEdit(false);
setAddEditData(undefined);
getProduceList(query);
}; };
// 删除产品 // 删除产品
const handleDelete = (record: produceListType[0]) => { const handleDelete = (record: produceListType[0]) => {
confirm({ confirm({
title: '提示', title: '提示',
content: '删除后此数据将会丢失,确定删除吗?', content: '删除后此数据将会丢失,确定删除吗?',
async onOk() { onOk() {
const res: any = await ProduceManageAPI.removeProductSku({ id: record.id }); ProduceManageAPI.removeProductSku({ id: record.id }).then(({ code }) => {
if (res && res.code === '200') { if (code === '200') {
await message.success('操作成功'); if (pagination.pageNo != 1 && tableData.length === 1) {
await paginationChange(pagination.pageNo, pagination.pageSize); pagination.pageNo -= 1;
} else {
message.error(res.message);
} }
message.success('删除成功');
getProduceList(query);
}
});
}, },
}); });
}; };
//产品列表 //产品列表
const getProduceList = () => { const getProduceList = (query?: produceParametersType) => {
setLoading(true);
ProduceManageAPI.listPageProductSku({ ProduceManageAPI.listPageProductSku({
pageNo: pagination.pageNo, pageNo: pagination.pageNo,
pageSize: pagination.pageSize, pageSize: pagination.pageSize,
...query,
}).then(({ result }) => { }).then(({ result }) => {
setLoading(false);
setTableData(result.list || []); setTableData(result.list || []);
setPagination(pagination); setPagination(pagination);
}); });
...@@ -143,29 +164,31 @@ function ProduceManage() { ...@@ -143,29 +164,31 @@ function ProduceManage() {
const paginationChange = (pageNo: number, pageSize: number) => { const paginationChange = (pageNo: number, pageSize: number) => {
pagination.pageNo = pageNo; pagination.pageNo = pageNo;
pagination.pageSize = pageSize; pagination.pageSize = pageSize;
getProduceList(); getProduceList(query);
}; };
// 表单提交 // 表单提交
const onFinish = (val: FormType) => { const onFinish = (val: produceListType) => {
// 在这里对提交的数据做处理,如range转为开始和结束时间 // 在这里对提交的数据做处理,如range转为开始和结束时间
const data = Object.fromEntries( const data = Object.fromEntries(
// 过滤为空项 // 过滤为空项
Object.entries({ Object.entries({
...val, ...val,
}).filter((i) => i[1] !== '' && i[1] !== undefined && i[1] !== null), }).filter(
(i) => (typeof i[1] === 'string' && i[1] !== '') || (i[1] !== undefined && i[1] !== null),
),
); );
query = data; setQuery(data);
// getTableList(data).then(); getProduceList(data);
}; };
// 获取品牌列表 //品牌列表
const getMakeList = () => { const getMakeList = () => {
ProduceManageAPI.getListBrandInfo({ pageNo: 1, pageSize: 999999 }).then(({ code, result }) => { MakeManageAPI.getListBrandInfo({ pageNo: 1, pageSize: 9999 }).then(({ result }) => {
setMakeList(result.list || []); setMakeList(result.list || []);
}); });
}; };
// 目录列表 // 目录列表
const getDirectoryList = () => { const getDirectoryList = () => {
CategoryManageAPI.getDirectoryList({ type: 4 }).then(({ result }) => { CategoryManageAPI.getDirectoryListClone({ type: 4 }).then(({ result }) => {
setDecList(result || []); setDecList(result || []);
}); });
}; };
...@@ -185,7 +208,7 @@ function ProduceManage() { ...@@ -185,7 +208,7 @@ function ProduceManage() {
}; };
// componentDidMount // componentDidMount
useEffect(() => { useEffect(() => {
getProduceList(); getProduceList(query);
getDirectoryList(); getDirectoryList();
}, []); }, []);
...@@ -245,11 +268,12 @@ function ProduceManage() { ...@@ -245,11 +268,12 @@ function ProduceManage() {
}} }}
/> />
<AddOrEditProduce <AddOrEditProduce
visible={visibleAddEdit} open={visibleAddEdit}
closed={handleAddEditClosed} closed={handleAddEditClosed}
data={addEditData} data={addEditData}
makeList={makeList} makeList={makeList}
decList={decList} decList={decList}
onOk={addOrEditProduceOk}
/> />
</div> </div>
); );
......
// 产品sku管理-分页列表
export interface ProductSkuType {
createTime: string;
goodsTypeId: number;
id: number;
model: string;
productBrand: number;
productName: string;
typeName: string;
productBrandId: number;
directoryId: number;
directoryName: string;
}
// 产品sku管理-产品规格管理-分页列表
export interface ProductSpecType {
createTime: string;
id: number;
partNo: string;
productSkuId: number;
specImage: string;
specName: string;
versionDesc: string;
}
// 品牌管理-列表
export type MakeItemEntity = {
createTime: string;
brandName: string;
id: number;
};
...@@ -11,7 +11,7 @@ function PrivateRouter() { ...@@ -11,7 +11,7 @@ function PrivateRouter() {
const beforeEach = () => { const beforeEach = () => {
// TODO: 判断是否登录 (需要改为实时获取地址栏的路由) // TODO: 判断是否登录 (需要改为实时获取地址栏的路由)
const path = location.pathname; const path = location.pathname;
const token = Cookies.get('SHAREFLY-TOKEN'); const token = Cookies.get('SHAREFLY_TOKEN');
if (!token && path !== '/login') { if (!token && path !== '/login') {
location.replace('/login'); location.replace('/login');
return; return;
......
...@@ -35,7 +35,7 @@ export const urlToBase64 = (url: string) => { ...@@ -35,7 +35,7 @@ export const urlToBase64 = (url: string) => {
}; };
// 过滤对象属性 // 过滤对象属性
export const filterObjAttr = (obj: any, key: string[]) => { export const filterObjAttr = (obj: any, key: string[]) => {
return Object.keys(obj).reduce((pre: any, cur: string) => { return Object.keys(JSON.parse(JSON.stringify(obj))).reduce((pre: any, cur: string) => {
if (!key.includes(cur)) { if (!key.includes(cur)) {
pre[cur] = obj[cur]; pre[cur] = obj[cur];
} }
......
...@@ -12,6 +12,7 @@ export default defineConfig({ ...@@ -12,6 +12,7 @@ export default defineConfig({
proxy: { proxy: {
'/api': { '/api': {
// target: 'http://192.168.3.111:8077', // 后端女oms // target: 'http://192.168.3.111:8077', // 后端女oms
// target: 'http://192.168.3.17:8099', // 狗旺
target: 'https://test.iuav.shop', target: 'https://test.iuav.shop',
changeOrigin: true, changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, ''), rewrite: (path) => path.replace(/^\/api/, ''),
......
...@@ -69,7 +69,7 @@ ...@@ -69,7 +69,7 @@
resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz" resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz"
integrity sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw== integrity sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==
"@babel/core@^7.17.10": "@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.17.10":
version "7.18.2" version "7.18.2"
resolved "https://registry.npmjs.org/@babel/core/-/core-7.18.2.tgz" resolved "https://registry.npmjs.org/@babel/core/-/core-7.18.2.tgz"
integrity sha512-A8pri1YJiC5UnkdrWcmfZTJTV85b4UXTAfImGmCfYmax4TR9Cw8sDS0MOk++Gp2mE/BefVJ5nwy5yzqNJbP/DQ== integrity sha512-A8pri1YJiC5UnkdrWcmfZTJTV85b4UXTAfImGmCfYmax4TR9Cw8sDS0MOk++Gp2mE/BefVJ5nwy5yzqNJbP/DQ==
...@@ -263,14 +263,28 @@ ...@@ -263,14 +263,28 @@
dependencies: dependencies:
regenerator-runtime "^0.13.11" regenerator-runtime "^0.13.11"
"@babel/runtime@^7.10.2", "@babel/runtime@^7.16.3": "@babel/runtime@^7.10.2":
version "7.18.3" version "7.18.3"
resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz" resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz"
integrity sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug== integrity sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==
dependencies: dependencies:
regenerator-runtime "^0.13.4" regenerator-runtime "^0.13.4"
"@babel/runtime@^7.12.1", "@babel/runtime@^7.9.2": "@babel/runtime@^7.12.1":
version "7.22.3"
resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.22.3.tgz"
integrity sha512-XsDuspWKLUsxwCp6r7EhsExHtYfbe5oAGQ19kqngTdCPUoPQzOPdUbD/pB9PJiwb2ptYKQDjSJT3R6dC+EPqfQ==
dependencies:
regenerator-runtime "^0.13.11"
"@babel/runtime@^7.16.3":
version "7.18.3"
resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz"
integrity sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==
dependencies:
regenerator-runtime "^0.13.4"
"@babel/runtime@^7.9.2":
version "7.22.3" version "7.22.3"
resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.22.3.tgz" resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.22.3.tgz"
integrity sha512-XsDuspWKLUsxwCp6r7EhsExHtYfbe5oAGQ19kqngTdCPUoPQzOPdUbD/pB9PJiwb2ptYKQDjSJT3R6dC+EPqfQ== integrity sha512-XsDuspWKLUsxwCp6r7EhsExHtYfbe5oAGQ19kqngTdCPUoPQzOPdUbD/pB9PJiwb2ptYKQDjSJT3R6dC+EPqfQ==
...@@ -330,111 +344,6 @@ ...@@ -330,111 +344,6 @@
resolved "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz" resolved "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz"
integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==
"@esbuild/android-arm64@0.17.18":
version "0.17.18"
resolved "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.17.18.tgz#4aa8d8afcffb4458736ca9b32baa97d7cb5861ea"
integrity sha512-/iq0aK0eeHgSC3z55ucMAHO05OIqmQehiGay8eP5l/5l+iEr4EIbh4/MI8xD9qRFjqzgkc0JkX0LculNC9mXBw==
"@esbuild/android-arm@0.17.18":
version "0.17.18"
resolved "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.17.18.tgz#74a7e95af4ee212ebc9db9baa87c06a594f2a427"
integrity sha512-EmwL+vUBZJ7mhFCs5lA4ZimpUH3WMAoqvOIYhVQwdIgSpHC8ImHdsRyhHAVxpDYUSm0lWvd63z0XH1IlImS2Qw==
"@esbuild/android-x64@0.17.18":
version "0.17.18"
resolved "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.17.18.tgz#1dcd13f201997c9fe0b204189d3a0da4eb4eb9b6"
integrity sha512-x+0efYNBF3NPW2Xc5bFOSFW7tTXdAcpfEg2nXmxegm4mJuVeS+i109m/7HMiOQ6M12aVGGFlqJX3RhNdYM2lWg==
"@esbuild/darwin-arm64@0.17.18":
version "0.17.18"
resolved "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.18.tgz#444f3b961d4da7a89eb9bd35cfa4415141537c2a"
integrity sha512-6tY+djEAdF48M1ONWnQb1C+6LiXrKjmqjzPNPWXhu/GzOHTHX2nh8Mo2ZAmBFg0kIodHhciEgUBtcYCAIjGbjQ==
"@esbuild/darwin-x64@0.17.18":
version "0.17.18"
resolved "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.17.18.tgz#a6da308d0ac8a498c54d62e0b2bfb7119b22d315"
integrity sha512-Qq84ykvLvya3dO49wVC9FFCNUfSrQJLbxhoQk/TE1r6MjHo3sFF2tlJCwMjhkBVq3/ahUisj7+EpRSz0/+8+9A==
"@esbuild/freebsd-arm64@0.17.18":
version "0.17.18"
resolved "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.18.tgz#b83122bb468889399d0d63475d5aea8d6829c2c2"
integrity sha512-fw/ZfxfAzuHfaQeMDhbzxp9mc+mHn1Y94VDHFHjGvt2Uxl10mT4CDavHm+/L9KG441t1QdABqkVYwakMUeyLRA==
"@esbuild/freebsd-x64@0.17.18":
version "0.17.18"
resolved "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.18.tgz#af59e0e03fcf7f221b34d4c5ab14094862c9c864"
integrity sha512-FQFbRtTaEi8ZBi/A6kxOC0V0E9B/97vPdYjY9NdawyLd4Qk5VD5g2pbWN2VR1c0xhzcJm74HWpObPszWC+qTew==
"@esbuild/linux-arm64@0.17.18":
version "0.17.18"
resolved "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.17.18.tgz#8551d72ba540c5bce4bab274a81c14ed01eafdcf"
integrity sha512-R7pZvQZFOY2sxUG8P6A21eq6q+eBv7JPQYIybHVf1XkQYC+lT7nDBdC7wWKTrbvMXKRaGudp/dzZCwL/863mZQ==
"@esbuild/linux-arm@0.17.18":
version "0.17.18"
resolved "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.17.18.tgz#e09e76e526df4f665d4d2720d28ff87d15cdf639"
integrity sha512-jW+UCM40LzHcouIaqv3e/oRs0JM76JfhHjCavPxMUti7VAPh8CaGSlS7cmyrdpzSk7A+8f0hiedHqr/LMnfijg==
"@esbuild/linux-ia32@0.17.18":
version "0.17.18"
resolved "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.17.18.tgz#47878860ce4fe73a36fd8627f5647bcbbef38ba4"
integrity sha512-ygIMc3I7wxgXIxk6j3V00VlABIjq260i967Cp9BNAk5pOOpIXmd1RFQJQX9Io7KRsthDrQYrtcx7QCof4o3ZoQ==
"@esbuild/linux-loong64@0.17.18":
version "0.17.18"
resolved "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.17.18.tgz#3f8fbf5267556fc387d20b2e708ce115de5c967a"
integrity sha512-bvPG+MyFs5ZlwYclCG1D744oHk1Pv7j8psF5TfYx7otCVmcJsEXgFEhQkbhNW8otDHL1a2KDINW20cfCgnzgMQ==
"@esbuild/linux-mips64el@0.17.18":
version "0.17.18"
resolved "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.18.tgz#9d896d8f3c75f6c226cbeb840127462e37738226"
integrity sha512-oVqckATOAGuiUOa6wr8TXaVPSa+6IwVJrGidmNZS1cZVx0HqkTMkqFGD2HIx9H1RvOwFeWYdaYbdY6B89KUMxA==
"@esbuild/linux-ppc64@0.17.18":
version "0.17.18"
resolved "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.18.tgz#3d9deb60b2d32c9985bdc3e3be090d30b7472783"
integrity sha512-3dLlQO+b/LnQNxgH4l9rqa2/IwRJVN9u/bK63FhOPB4xqiRqlQAU0qDU3JJuf0BmaH0yytTBdoSBHrb2jqc5qQ==
"@esbuild/linux-riscv64@0.17.18":
version "0.17.18"
resolved "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.18.tgz#8a943cf13fd24ff7ed58aefb940ef178f93386bc"
integrity sha512-/x7leOyDPjZV3TcsdfrSI107zItVnsX1q2nho7hbbQoKnmoeUWjs+08rKKt4AUXju7+3aRZSsKrJtaRmsdL1xA==
"@esbuild/linux-s390x@0.17.18":
version "0.17.18"
resolved "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.17.18.tgz#66cb01f4a06423e5496facabdce4f7cae7cb80e5"
integrity sha512-cX0I8Q9xQkL/6F5zWdYmVf5JSQt+ZfZD2bJudZrWD+4mnUvoZ3TDDXtDX2mUaq6upMFv9FlfIh4Gfun0tbGzuw==
"@esbuild/linux-x64@0.17.18":
version "0.17.18"
resolved "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.17.18.tgz#23c26050c6c5d1359c7b774823adc32b3883b6c9"
integrity sha512-66RmRsPlYy4jFl0vG80GcNRdirx4nVWAzJmXkevgphP1qf4dsLQCpSKGM3DUQCojwU1hnepI63gNZdrr02wHUA==
"@esbuild/netbsd-x64@0.17.18":
version "0.17.18"
resolved "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.18.tgz#789a203d3115a52633ff6504f8cbf757f15e703b"
integrity sha512-95IRY7mI2yrkLlTLb1gpDxdC5WLC5mZDi+kA9dmM5XAGxCME0F8i4bYH4jZreaJ6lIZ0B8hTrweqG1fUyW7jbg==
"@esbuild/openbsd-x64@0.17.18":
version "0.17.18"
resolved "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.18.tgz#d7b998a30878f8da40617a10af423f56f12a5e90"
integrity sha512-WevVOgcng+8hSZ4Q3BKL3n1xTv5H6Nb53cBrtzzEjDbbnOmucEVcZeGCsCOi9bAOcDYEeBZbD2SJNBxlfP3qiA==
"@esbuild/sunos-x64@0.17.18":
version "0.17.18"
resolved "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.17.18.tgz#ecad0736aa7dae07901ba273db9ef3d3e93df31f"
integrity sha512-Rzf4QfQagnwhQXVBS3BYUlxmEbcV7MY+BH5vfDZekU5eYpcffHSyjU8T0xucKVuOcdCsMo+Ur5wmgQJH2GfNrg==
"@esbuild/win32-arm64@0.17.18":
version "0.17.18"
resolved "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.17.18.tgz#58dfc177da30acf956252d7c8ae9e54e424887c4"
integrity sha512-Kb3Ko/KKaWhjeAm2YoT/cNZaHaD1Yk/pa3FTsmqo9uFh1D1Rfco7BBLIPdDOozrObj2sahslFuAQGvWbgWldAg==
"@esbuild/win32-ia32@0.17.18":
version "0.17.18"
resolved "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.17.18.tgz#340f6163172b5272b5ae60ec12c312485f69232b"
integrity sha512-0/xUMIdkVHwkvxfbd5+lfG7mHOf2FRrxNbPiKWg9C4fFrB8H0guClmaM3BFiRUYrznVoyxTIyC/Ou2B7QQSwmw==
"@esbuild/win32-x64@0.17.18": "@esbuild/win32-x64@0.17.18":
version "0.17.18" version "0.17.18"
resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.18.tgz" resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.18.tgz"
...@@ -517,7 +426,7 @@ ...@@ -517,7 +426,7 @@
"@nodelib/fs.stat" "2.0.5" "@nodelib/fs.stat" "2.0.5"
run-parallel "^1.1.9" run-parallel "^1.1.9"
"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": "@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5":
version "2.0.5" version "2.0.5"
resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
...@@ -587,7 +496,7 @@ ...@@ -587,7 +496,7 @@
rc-resize-observer "^1.3.1" rc-resize-observer "^1.3.1"
rc-util "^5.29.2" rc-util "^5.29.2"
"@reduxjs/toolkit@^1.9.2": "@reduxjs/toolkit@^1 || ^2.0.0-beta.0", "@reduxjs/toolkit@^1.9.2":
version "1.9.5" version "1.9.5"
resolved "https://registry.npmmirror.com/@reduxjs/toolkit/-/toolkit-1.9.5.tgz" resolved "https://registry.npmmirror.com/@reduxjs/toolkit/-/toolkit-1.9.5.tgz"
integrity sha512-Rt97jHmfTeaxL4swLRNPD/zV4OxTes4la07Xc4hetpUW/vc75t5m1ANyxG6ymnEQ2FsLQsoMlYB2vV1sO3m8tQ== integrity sha512-Rt97jHmfTeaxL4swLRNPD/zV4OxTes4la07Xc4hetpUW/vc75t5m1ANyxG6ymnEQ2FsLQsoMlYB2vV1sO3m8tQ==
...@@ -643,7 +552,7 @@ ...@@ -643,7 +552,7 @@
resolved "https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.195.tgz" resolved "https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.195.tgz"
integrity sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg== integrity sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg==
"@types/node@^20.1.3": "@types/node@^20.1.3", "@types/node@>= 14":
version "20.2.5" version "20.2.5"
resolved "https://registry.npmmirror.com/@types/node/-/node-20.2.5.tgz" resolved "https://registry.npmmirror.com/@types/node/-/node-20.2.5.tgz"
integrity sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ== integrity sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ==
...@@ -655,12 +564,12 @@ ...@@ -655,12 +564,12 @@
"@types/quill@^1.3.10": "@types/quill@^1.3.10":
version "1.3.10" version "1.3.10"
resolved "https://registry.yarnpkg.com/@types/quill/-/quill-1.3.10.tgz#dc1f7b6587f7ee94bdf5291bc92289f6f0497613" resolved "https://registry.npmmirror.com/@types/quill/-/quill-1.3.10.tgz"
integrity sha512-IhW3fPW+bkt9MLNlycw8u8fWb7oO7W5URC9MfZYHBlA24rex9rs23D5DETChu1zvgVdc5ka64ICjJOgQMr6Shw== integrity sha512-IhW3fPW+bkt9MLNlycw8u8fWb7oO7W5URC9MfZYHBlA24rex9rs23D5DETChu1zvgVdc5ka64ICjJOgQMr6Shw==
dependencies: dependencies:
parchment "^1.1.2" parchment "^1.1.2"
"@types/react-dom@^18.0.5": "@types/react-dom@^16.8 || ^17.0 || ^18.0", "@types/react-dom@^18.0.5":
version "18.0.5" version "18.0.5"
resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.5.tgz" resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.5.tgz"
integrity sha512-OWPWTUrY/NIrjsAPkAk1wW9LZeIjSvkXRhclsFO8CZcZGCOg2G0YZy4ft+rOyYxy8B7ui5iZzi9OkDebZ7/QSA== integrity sha512-OWPWTUrY/NIrjsAPkAk1wW9LZeIjSvkXRhclsFO8CZcZGCOg2G0YZy4ft+rOyYxy8B7ui5iZzi9OkDebZ7/QSA==
...@@ -677,7 +586,7 @@ ...@@ -677,7 +586,7 @@
hoist-non-react-statics "^3.3.0" hoist-non-react-statics "^3.3.0"
redux "^4.0.0" redux "^4.0.0"
"@types/react@*", "@types/react@^18.0.9": "@types/react@*", "@types/react@^16.8 || ^17.0 || ^18.0", "@types/react@^18.0.9":
version "18.0.9" version "18.0.9"
resolved "https://registry.npmjs.org/@types/react/-/react-18.0.9.tgz" resolved "https://registry.npmjs.org/@types/react/-/react-18.0.9.tgz"
integrity sha512-9bjbg1hJHUm4De19L1cHiW0Jvx3geel6Qczhjd0qY5VKVE2X5+x77YxAepuCwVh4vrgZJdgEJw48zrhRIeF4Nw== integrity sha512-9bjbg1hJHUm4De19L1cHiW0Jvx3geel6Qczhjd0qY5VKVE2X5+x77YxAepuCwVh4vrgZJdgEJw48zrhRIeF4Nw==
...@@ -711,7 +620,7 @@ ...@@ -711,7 +620,7 @@
semver "^7.3.7" semver "^7.3.7"
tsutils "^3.21.0" tsutils "^3.21.0"
"@typescript-eslint/parser@^5.26.0": "@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.26.0":
version "5.26.0" version "5.26.0"
resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.26.0.tgz" resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.26.0.tgz"
integrity sha512-n/IzU87ttzIdnAH5vQ4BBDnLPly7rC5VnjN3m0xBG82HK6rhRxnCb3w/GyWbNDghPd+NktJqB/wl6+YkzZ5T5Q== integrity sha512-n/IzU87ttzIdnAH5vQ4BBDnLPly7rC5VnjN3m0xBG82HK6rhRxnCb3w/GyWbNDghPd+NktJqB/wl6+YkzZ5T5Q==
...@@ -795,7 +704,7 @@ acorn-jsx@^5.3.2: ...@@ -795,7 +704,7 @@ acorn-jsx@^5.3.2:
resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
acorn@^8.7.1: "acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.7.1:
version "8.7.1" version "8.7.1"
resolved "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz" resolved "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz"
integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==
...@@ -1077,14 +986,14 @@ chalk@^4.0.0: ...@@ -1077,14 +986,14 @@ chalk@^4.0.0:
optionalDependencies: optionalDependencies:
fsevents "~2.3.2" fsevents "~2.3.2"
classnames@2.x, classnames@^2.2.1, classnames@^2.2.3, classnames@^2.2.5, classnames@^2.2.6, classnames@^2.3.1, classnames@^2.3.2: classnames@^2.2.1, classnames@^2.2.3, classnames@^2.2.5, classnames@^2.2.6, classnames@^2.3.1, classnames@^2.3.2, classnames@2.x:
version "2.3.2" version "2.3.2"
resolved "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz" resolved "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz"
integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==
clone@^2.1.1: clone@^2.1.1:
version "2.1.2" version "2.1.2"
resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" resolved "https://registry.npmmirror.com/clone/-/clone-2.1.2.tgz"
integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w== integrity sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==
codepage@~1.15.0: codepage@~1.15.0:
...@@ -1106,16 +1015,16 @@ color-convert@^2.0.1: ...@@ -1106,16 +1015,16 @@ color-convert@^2.0.1:
dependencies: dependencies:
color-name "~1.1.4" color-name "~1.1.4"
color-name@1.1.3:
version "1.1.3"
resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"
integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
color-name@~1.1.4: color-name@~1.1.4:
version "1.1.4" version "1.1.4"
resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
color-name@1.1.3:
version "1.1.3"
resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"
integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
combined-stream@^1.0.8: combined-stream@^1.0.8:
version "1.0.8" version "1.0.8"
resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz" resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz"
...@@ -1181,7 +1090,7 @@ damerau-levenshtein@^1.0.7: ...@@ -1181,7 +1090,7 @@ damerau-levenshtein@^1.0.7:
resolved "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz" resolved "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz"
integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==
dayjs@^1.11.1, dayjs@^1.11.7: dayjs@^1.11.1, dayjs@^1.11.7, "dayjs@>= 1.x":
version "1.11.7" version "1.11.7"
resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz" resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz"
integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ== integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==
...@@ -1214,7 +1123,7 @@ decode-uri-component@^0.4.1: ...@@ -1214,7 +1123,7 @@ decode-uri-component@^0.4.1:
deep-equal@^1.0.1: deep-equal@^1.0.1:
version "1.1.1" version "1.1.1"
resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" resolved "https://registry.npmmirror.com/deep-equal/-/deep-equal-1.1.1.tgz"
integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==
dependencies: dependencies:
is-arguments "^1.0.4" is-arguments "^1.0.4"
...@@ -1237,14 +1146,6 @@ define-properties@^1.1.3, define-properties@^1.1.4: ...@@ -1237,14 +1146,6 @@ define-properties@^1.1.3, define-properties@^1.1.4:
has-property-descriptors "^1.0.0" has-property-descriptors "^1.0.0"
object-keys "^1.1.1" object-keys "^1.1.1"
define-properties@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5"
integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==
dependencies:
has-property-descriptors "^1.0.0"
object-keys "^1.1.1"
delayed-stream@~1.0.0: delayed-stream@~1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz" resolved "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz"
...@@ -1497,7 +1398,7 @@ eslint-visitor-keys@^3.3.0: ...@@ -1497,7 +1398,7 @@ eslint-visitor-keys@^3.3.0:
resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz" resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz"
integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==
eslint@^8.16.0: eslint@*, "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8", "eslint@^3 || ^4 || ^5 || ^6 || ^7 || ^8", "eslint@^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0", "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", eslint@^8.16.0, eslint@>=5, eslint@>=7.0.0, eslint@>=7.28.0:
version "8.16.0" version "8.16.0"
resolved "https://registry.npmjs.org/eslint/-/eslint-8.16.0.tgz" resolved "https://registry.npmjs.org/eslint/-/eslint-8.16.0.tgz"
integrity sha512-MBndsoXY/PeVTDJeWsYj7kLZ5hQpJOfMYLsF6LicLHQWbRDG19lK5jOix4DPl8yY4SUFcE3txy86OzFLWT+yoA== integrity sha512-MBndsoXY/PeVTDJeWsYj7kLZ5hQpJOfMYLsF6LicLHQWbRDG19lK5jOix4DPl8yY4SUFcE3txy86OzFLWT+yoA==
...@@ -1583,17 +1484,17 @@ esutils@^2.0.2: ...@@ -1583,17 +1484,17 @@ esutils@^2.0.2:
eventemitter3@^2.0.3: eventemitter3@^2.0.3:
version "2.0.3" version "2.0.3"
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-2.0.3.tgz#b5e1079b59fb5e1ba2771c0a993be060a58c99ba" resolved "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-2.0.3.tgz"
integrity sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg== integrity sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg==
events@^3.3.0: events@^3.3.0:
version "3.3.0" version "3.3.0"
resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" resolved "https://registry.npmmirror.com/events/-/events-3.3.0.tgz"
integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
extend@^3.0.2: extend@^3.0.2:
version "3.0.2" version "3.0.2"
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" resolved "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz"
integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
...@@ -1601,16 +1502,16 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: ...@@ -1601,16 +1502,16 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
fast-diff@1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.1.2.tgz#4b62c42b8e03de3f848460b639079920695d0154"
integrity sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==
fast-diff@^1.1.2: fast-diff@^1.1.2:
version "1.2.0" version "1.2.0"
resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz" resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz"
integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==
fast-diff@1.1.2:
version "1.1.2"
resolved "https://registry.npmmirror.com/fast-diff/-/fast-diff-1.1.2.tgz"
integrity sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==
fast-glob@^3.2.9: fast-glob@^3.2.9:
version "3.2.11" version "3.2.11"
resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz" resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz"
...@@ -1648,7 +1549,7 @@ file-entry-cache@^6.0.1: ...@@ -1648,7 +1549,7 @@ file-entry-cache@^6.0.1:
file-saver@^2.0.5: file-saver@^2.0.5:
version "2.0.5" version "2.0.5"
resolved "https://registry.yarnpkg.com/file-saver/-/file-saver-2.0.5.tgz#d61cfe2ce059f414d899e9dd6d4107ee25670c38" resolved "https://registry.npmmirror.com/file-saver/-/file-saver-2.0.5.tgz"
integrity sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA== integrity sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==
fill-range@^7.0.1: fill-range@^7.0.1:
...@@ -1707,11 +1608,6 @@ fs.realpath@^1.0.0: ...@@ -1707,11 +1608,6 @@ fs.realpath@^1.0.0:
resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
fsevents@~2.3.2:
version "2.3.2"
resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
function-bind@^1.1.1: function-bind@^1.1.1:
version "1.1.1" version "1.1.1"
resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz"
...@@ -1732,9 +1628,9 @@ functional-red-black-tree@^1.0.1: ...@@ -1732,9 +1628,9 @@ functional-red-black-tree@^1.0.1:
resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz"
integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
functions-have-names@^1.2.2, functions-have-names@^1.2.3: functions-have-names@^1.2.2:
version "1.2.3" version "1.2.3"
resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz"
integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
gensync@^1.0.0-beta.2: gensync@^1.0.0-beta.2:
...@@ -1924,7 +1820,7 @@ internal-slot@^1.0.3: ...@@ -1924,7 +1820,7 @@ internal-slot@^1.0.3:
is-arguments@^1.0.4: is-arguments@^1.0.4:
version "1.1.1" version "1.1.1"
resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" resolved "https://registry.npmmirror.com/is-arguments/-/is-arguments-1.1.1.tgz"
integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==
dependencies: dependencies:
call-bind "^1.0.2" call-bind "^1.0.2"
...@@ -2002,7 +1898,7 @@ is-number@^7.0.0: ...@@ -2002,7 +1898,7 @@ is-number@^7.0.0:
is-regex@^1.0.4, is-regex@^1.1.4: is-regex@^1.0.4, is-regex@^1.1.4:
version "1.1.4" version "1.1.4"
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz"
integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==
dependencies: dependencies:
call-bind "^1.0.2" call-bind "^1.0.2"
...@@ -2216,11 +2112,16 @@ minimist@^1.2.0, minimist@^1.2.6: ...@@ -2216,11 +2112,16 @@ minimist@^1.2.0, minimist@^1.2.6:
resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz"
integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
moment@^2.29.4: moment@^2.29.4, "moment@>= 2.x":
version "2.29.4" version "2.29.4"
resolved "https://registry.npmmirror.com/moment/-/moment-2.29.4.tgz" resolved "https://registry.npmmirror.com/moment/-/moment-2.29.4.tgz"
integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==
ms@^2.1.1:
version "2.1.3"
resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
ms@2.0.0: ms@2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"
...@@ -2231,11 +2132,6 @@ ms@2.1.2: ...@@ -2231,11 +2132,6 @@ ms@2.1.2:
resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
ms@^2.1.1:
version "2.1.3"
resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
nanoid@^3.3.6: nanoid@^3.3.6:
version "3.3.6" version "3.3.6"
resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz" resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz"
...@@ -2268,7 +2164,7 @@ object-inspect@^1.12.0, object-inspect@^1.9.0: ...@@ -2268,7 +2164,7 @@ object-inspect@^1.12.0, object-inspect@^1.9.0:
object-is@^1.0.1: object-is@^1.0.1:
version "1.1.5" version "1.1.5"
resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" resolved "https://registry.npmmirror.com/object-is/-/object-is-1.1.5.tgz"
integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==
dependencies: dependencies:
call-bind "^1.0.2" call-bind "^1.0.2"
...@@ -2369,7 +2265,7 @@ p-try@^1.0.0: ...@@ -2369,7 +2265,7 @@ p-try@^1.0.0:
parchment@^1.1.2, parchment@^1.1.4: parchment@^1.1.2, parchment@^1.1.4:
version "1.1.4" version "1.1.4"
resolved "https://registry.yarnpkg.com/parchment/-/parchment-1.1.4.tgz#aeded7ab938fe921d4c34bc339ce1168bc2ffde5" resolved "https://registry.npmmirror.com/parchment/-/parchment-1.1.4.tgz"
integrity sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg== integrity sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==
parent-module@^1.0.0: parent-module@^1.0.0:
...@@ -2440,7 +2336,7 @@ prettier-linter-helpers@^1.0.0: ...@@ -2440,7 +2336,7 @@ prettier-linter-helpers@^1.0.0:
dependencies: dependencies:
fast-diff "^1.1.2" fast-diff "^1.1.2"
prettier@^2.6.2: prettier@^2.6.2, prettier@>=2.0.0:
version "2.6.2" version "2.6.2"
resolved "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz" resolved "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz"
integrity sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew== integrity sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==
...@@ -2492,7 +2388,7 @@ queue-microtask@^1.2.2: ...@@ -2492,7 +2388,7 @@ queue-microtask@^1.2.2:
quill-delta@^3.6.2: quill-delta@^3.6.2:
version "3.6.3" version "3.6.3"
resolved "https://registry.yarnpkg.com/quill-delta/-/quill-delta-3.6.3.tgz#b19fd2b89412301c60e1ff213d8d860eac0f1032" resolved "https://registry.npmmirror.com/quill-delta/-/quill-delta-3.6.3.tgz"
integrity sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg== integrity sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==
dependencies: dependencies:
deep-equal "^1.0.1" deep-equal "^1.0.1"
...@@ -2501,7 +2397,7 @@ quill-delta@^3.6.2: ...@@ -2501,7 +2397,7 @@ quill-delta@^3.6.2:
quill@^1.3.7: quill@^1.3.7:
version "1.3.7" version "1.3.7"
resolved "https://registry.yarnpkg.com/quill/-/quill-1.3.7.tgz#da5b2f3a2c470e932340cdbf3668c9f21f9286e8" resolved "https://registry.npmmirror.com/quill/-/quill-1.3.7.tgz"
integrity sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g== integrity sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==
dependencies: dependencies:
clone "^2.1.1" clone "^2.1.1"
...@@ -2879,7 +2775,7 @@ rc-virtual-list@^3.4.13, rc-virtual-list@^3.4.8: ...@@ -2879,7 +2775,7 @@ rc-virtual-list@^3.4.13, rc-virtual-list@^3.4.8:
rc-resize-observer "^1.0.0" rc-resize-observer "^1.0.0"
rc-util "^5.15.0" rc-util "^5.15.0"
react-dom@^18.1.0: react-dom@*, "react-dom@^16 || ^17 || ^18", "react-dom@^16.8 || ^17.0 || ^18.0", react-dom@^18.1.0, react-dom@>=16.0.0, react-dom@>=16.11.0, react-dom@>=16.8, react-dom@>=16.9.0:
version "18.1.0" version "18.1.0"
resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.1.0.tgz" resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.1.0.tgz"
integrity sha512-fU1Txz7Budmvamp7bshe4Zi32d0ll7ect+ccxNu9FlObT605GOEB8BfO4tmRJ39R5Zj831VCpvQ05QPBW5yb+w== integrity sha512-fU1Txz7Budmvamp7bshe4Zi32d0ll7ect+ccxNu9FlObT605GOEB8BfO4tmRJ39R5Zj831VCpvQ05QPBW5yb+w==
...@@ -2899,14 +2795,14 @@ react-is@^18.0.0: ...@@ -2899,14 +2795,14 @@ react-is@^18.0.0:
react-quill@^2.0.0: react-quill@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/react-quill/-/react-quill-2.0.0.tgz#67a0100f58f96a246af240c9fa6841b363b3e017" resolved "https://registry.npmmirror.com/react-quill/-/react-quill-2.0.0.tgz"
integrity sha512-4qQtv1FtCfLgoD3PXAur5RyxuUbPXQGOHgTlFie3jtxp43mXDtzCKaOgQ3mLyZfi1PUlyjycfivKelFhy13QUg== integrity sha512-4qQtv1FtCfLgoD3PXAur5RyxuUbPXQGOHgTlFie3jtxp43mXDtzCKaOgQ3mLyZfi1PUlyjycfivKelFhy13QUg==
dependencies: dependencies:
"@types/quill" "^1.3.10" "@types/quill" "^1.3.10"
lodash "^4.17.4" lodash "^4.17.4"
quill "^1.3.7" quill "^1.3.7"
react-redux@^8.0.5: "react-redux@^7.2.1 || ^8.0.2", react-redux@^8.0.5:
version "8.0.7" version "8.0.7"
resolved "https://registry.npmmirror.com/react-redux/-/react-redux-8.0.7.tgz" resolved "https://registry.npmmirror.com/react-redux/-/react-redux-8.0.7.tgz"
integrity sha512-1vRQuCQI5Y2uNmrMXg81RXKiBHY3jBzvCvNmZF437O/Z9/pZ+ba2uYHbemYXb3g8rjsacBGo+/wmfrQKzMhJsg== integrity sha512-1vRQuCQI5Y2uNmrMXg81RXKiBHY3jBzvCvNmZF437O/Z9/pZ+ba2uYHbemYXb3g8rjsacBGo+/wmfrQKzMhJsg==
...@@ -2940,12 +2836,12 @@ react-router@6.11.1: ...@@ -2940,12 +2836,12 @@ react-router@6.11.1:
react-viewer@^3.2.2: react-viewer@^3.2.2:
version "3.2.2" version "3.2.2"
resolved "https://registry.yarnpkg.com/react-viewer/-/react-viewer-3.2.2.tgz#38626a7fa862ec84dfa373c2ef5843f4100c465b" resolved "https://registry.npmmirror.com/react-viewer/-/react-viewer-3.2.2.tgz"
integrity sha512-DHOq1x6cXsAViY43204ILRzLVR5ovP1MgzsC+LzZCWlInRuHjzAgpQZ8GzWm1CkiNYuHGwCxH36X0JUHl2xDSg== integrity sha512-DHOq1x6cXsAViY43204ILRzLVR5ovP1MgzsC+LzZCWlInRuHjzAgpQZ8GzWm1CkiNYuHGwCxH36X0JUHl2xDSg==
dependencies: dependencies:
classnames "^2.2.5" classnames "^2.2.5"
react@^18.1.0: react@*, "react@^16 || ^17 || ^18", "react@^16.8 || ^17.0 || ^18.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^16.9.0 || ^17.0.0 || ^18", react@^18.1.0, react@>=16.0.0, react@>=16.11.0, react@>=16.8, react@>=16.9.0:
version "18.1.0" version "18.1.0"
resolved "https://registry.npmjs.org/react/-/react-18.1.0.tgz" resolved "https://registry.npmjs.org/react/-/react-18.1.0.tgz"
integrity sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ== integrity sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ==
...@@ -2974,7 +2870,7 @@ redux-thunk@^2.4.2: ...@@ -2974,7 +2870,7 @@ redux-thunk@^2.4.2:
resolved "https://registry.npmmirror.com/redux-thunk/-/redux-thunk-2.4.2.tgz" resolved "https://registry.npmmirror.com/redux-thunk/-/redux-thunk-2.4.2.tgz"
integrity sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q== integrity sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==
redux@^4.0.0, redux@^4.2.1: redux@^4, "redux@^4 || ^5.0.0-beta.0", redux@^4.0.0, redux@^4.2.1:
version "4.2.1" version "4.2.1"
resolved "https://registry.npmmirror.com/redux/-/redux-4.2.1.tgz" resolved "https://registry.npmmirror.com/redux/-/redux-4.2.1.tgz"
integrity sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w== integrity sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==
...@@ -2991,16 +2887,7 @@ regenerator-runtime@^0.13.4: ...@@ -2991,16 +2887,7 @@ regenerator-runtime@^0.13.4:
resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz" resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz"
integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==
regexp.prototype.flags@^1.2.0: regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3:
version "1.5.0"
resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb"
integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==
dependencies:
call-bind "^1.0.2"
define-properties "^1.2.0"
functions-have-names "^1.2.3"
regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3:
version "1.4.3" version "1.4.3"
resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz" resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz"
integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==
...@@ -3082,7 +2969,7 @@ safe-buffer@~5.1.1: ...@@ -3082,7 +2969,7 @@ safe-buffer@~5.1.1:
resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
sass@^1.62.0: sass@*, sass@^1.62.0:
version "1.62.1" version "1.62.1"
resolved "https://registry.npmjs.org/sass/-/sass-1.62.1.tgz" resolved "https://registry.npmjs.org/sass/-/sass-1.62.1.tgz"
integrity sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A== integrity sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A==
...@@ -3150,7 +3037,7 @@ sort-by@^1.2.0: ...@@ -3150,7 +3037,7 @@ sort-by@^1.2.0:
dependencies: dependencies:
object-path "0.6.0" object-path "0.6.0"
"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2: source-map-js@^1.0.2, "source-map-js@>=0.6.2 <2.0.0":
version "1.0.2" version "1.0.2"
resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz"
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
...@@ -3315,7 +3202,7 @@ type-fest@^0.20.2: ...@@ -3315,7 +3202,7 @@ type-fest@^0.20.2:
resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz"
integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
typescript@^4.6.3: typescript@^4.6.3, "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta":
version "4.7.2" version "4.7.2"
resolved "https://registry.npmjs.org/typescript/-/typescript-4.7.2.tgz" resolved "https://registry.npmjs.org/typescript/-/typescript-4.7.2.tgz"
integrity sha512-Mamb1iX2FDUpcTRzltPxgWMKy3fhg0TN378ylbktPGPK/99KbDtMQ4W1hwgsbPAsG3a0xKa1vmw4VKZQbkvz5A== integrity sha512-Mamb1iX2FDUpcTRzltPxgWMKy3fhg0TN378ylbktPGPK/99KbDtMQ4W1hwgsbPAsG3a0xKa1vmw4VKZQbkvz5A==
...@@ -3357,7 +3244,7 @@ vite-tsconfig-paths@^3.5.0: ...@@ -3357,7 +3244,7 @@ vite-tsconfig-paths@^3.5.0:
recrawl-sync "^2.0.3" recrawl-sync "^2.0.3"
tsconfig-paths "^4.0.0" tsconfig-paths "^4.0.0"
vite@^4.3.5: vite@^4.3.5, vite@>2.0.0-0:
version "4.3.9" version "4.3.9"
resolved "https://registry.npmmirror.com/vite/-/vite-4.3.9.tgz" resolved "https://registry.npmmirror.com/vite/-/vite-4.3.9.tgz"
integrity sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg== integrity sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论