提交 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 @@
"antd": "^5.4.2",
"axios": "^1.4.0",
"dayjs": "^1.11.7",
"events": "^3.3.0",
"file-saver": "^2.0.5",
"js-base64": "^3.7.3",
"js-cookie": "^3.0.1",
......@@ -25,8 +26,10 @@
"query-string": "^8.1.0",
"react": "^18.1.0",
"react-dom": "^18.1.0",
"react-quill": "^2.0.0",
"react-redux": "^8.0.5",
"react-router-dom": "^6.10.0",
"react-viewer": "^3.2.2",
"sort-by": "^1.2.0",
"xlsx": "^0.18.5"
},
......@@ -1072,6 +1075,14 @@
"integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==",
"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": {
"version": "18.0.9",
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.9.tgz",
......@@ -1875,6 +1886,14 @@
"integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==",
"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": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz",
......@@ -2033,6 +2052,19 @@
"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": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
......@@ -2044,7 +2076,6 @@
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
"integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
"dev": true,
"license": "MIT",
"dependencies": {
"has-property-descriptors": "^1.0.0",
......@@ -2681,6 +2712,24 @@
"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": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
......@@ -2900,7 +2949,6 @@
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
"integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
"dev": true,
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
......@@ -3067,7 +3115,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
"integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"get-intrinsic": "^1.1.1"
......@@ -3092,7 +3139,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
"integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"has-symbols": "^1.0.2"
......@@ -3206,6 +3252,18 @@
"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": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
......@@ -3279,7 +3337,6 @@
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
"integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"has-tostringtag": "^1.0.0"
......@@ -3357,7 +3414,6 @@
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
"integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
......@@ -3786,11 +3842,22 @@
"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": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
......@@ -3953,6 +4020,11 @@
"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": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
......@@ -4197,6 +4269,37 @@
],
"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": {
"version": "4.0.15",
"resolved": "https://registry.npmjs.org/rc-align/-/rc-align-4.0.15.tgz",
......@@ -4865,6 +4968,20 @@
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
"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": {
"version": "8.0.7",
"resolved": "https://registry.npmmirror.com/react-redux/-/react-redux-8.0.7.tgz",
......@@ -4968,6 +5085,14 @@
"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": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
......@@ -5034,7 +5159,6 @@
"version": "1.4.3",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz",
"integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
......@@ -6503,6 +6627,14 @@
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
"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": {
"version": "18.0.9",
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.9.tgz",
......@@ -7028,6 +7160,11 @@
"resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz",
"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": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz",
......@@ -7136,6 +7273,19 @@
"resolved": "https://registry.npmmirror.com/decode-uri-component/-/decode-uri-component-0.4.1.tgz",
"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": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
......@@ -7146,7 +7296,6 @@
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
"integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
"dev": true,
"requires": {
"has-property-descriptors": "^1.0.0",
"object-keys": "^1.1.1"
......@@ -7614,6 +7763,21 @@
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"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": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
......@@ -7765,8 +7929,7 @@
"functions-have-names": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
"integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
"dev": true
"integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="
},
"gensync": {
"version": "1.0.0-beta.2",
......@@ -7876,7 +8039,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
"integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
"dev": true,
"requires": {
"get-intrinsic": "^1.1.1"
}
......@@ -7890,7 +8052,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
"integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
"dev": true,
"requires": {
"has-symbols": "^1.0.2"
}
......@@ -7968,6 +8129,15 @@
"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": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
......@@ -8015,7 +8185,6 @@
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
"integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
"dev": true,
"requires": {
"has-tostringtag": "^1.0.0"
}
......@@ -8060,7 +8229,6 @@
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
"integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
"has-tostringtag": "^1.0.0"
......@@ -8352,11 +8520,19 @@
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
"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": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
"dev": true
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
},
"object-path": {
"version": "0.6.0",
......@@ -8465,6 +8641,11 @@
"integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
"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": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
......@@ -8605,6 +8786,36 @@
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
"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": {
"version": "4.0.15",
"resolved": "https://registry.npmjs.org/rc-align/-/rc-align-4.0.15.tgz",
......@@ -9031,6 +9242,16 @@
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
"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": {
"version": "8.0.7",
"resolved": "https://registry.npmmirror.com/react-redux/-/react-redux-8.0.7.tgz",
......@@ -9082,6 +9303,14 @@
"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": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
......@@ -9136,7 +9365,6 @@
"version": "1.4.3",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz",
"integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
......
// 分页通用接口
export interface PaginationProps {
pageSize?: number;
pageNo?: number;
pageSize: number;
pageNo: number;
}
// 通用返回接口(分页)
......@@ -39,17 +39,17 @@ export interface ResponseType<D> {
// 通用接口封装函数(分页) 建议用这个
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> {
(req: D): Promise<ResponseType<T>>;
(req?: D): Promise<ResponseType<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<
any,
......@@ -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<
{ productSkuId: number },
......@@ -43,3 +91,55 @@ export type ProductSpecListType = InterItemFunction<
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 { categoryListType, GoodsInfo } from '~/api/interface/categoryManage';
import { categoryListType, directoryListType, GoodsInfo } from '~/api/interface/categoryManage';
export class CategoryManageAPI {
// 分类目录
......@@ -8,6 +8,10 @@ export class CategoryManageAPI {
params,
});
};
// 分类目录(类型)
static getDirectoryListClone: directoryListType = (params) => {
return axios.get('/pms/classify/getDirectoryList', { params });
};
//目录列表不含分页
static getDirectoryList = (params: { type: number }) => {
......
......@@ -9,21 +9,21 @@ import axios from '../request';
export class MakeManageAPI {
// 品牌-新增
static addBrandInfo: MakeAddType = (params) => {
return axios.get('uavgoods/brand/addBrandInfo', { params });
return axios.get('/pms/brand/addBrandInfo', { params });
};
// 品牌-编辑
static editBrandInfo: MakeEditType = (params) => {
return axios.get('uavgoods/brand/editBrandInfo', { params });
return axios.get('/pms/brand/editBrandInfo', { params });
};
// 品牌-列表
static getListBrandInfo: MakeListType = (params) => {
return axios.get('uavgoods/brand/listBrandInfo', { params });
return axios.get('/pms/brand/listBrandInfo', { params });
};
// 品牌刪除
static deleteBrandInfo: MakeDeleteType = (params) => {
return axios.get('uavgoods/brand/deleteBrandInfo', { params });
return axios.get('/pms/brand/deleteBrandInfo', { params });
};
}
import axios from '../request';
import {
MakeListType,
addProductType,
cooperationTagType,
deleteProductType,
editProductSpecPriceType,
editProductType,
getProductSpecPriceType,
productDetailType,
productListType,
productSpecAddType,
productSpecDeleteType,
productSpecEditType,
ProductSpecListType,
productSpecPriceType,
} from '~/api/interface/produceManageType';
import dayjs from 'dayjs';
export class ProduceManageAPI {
// 产品管理-分页列表
......@@ -11,41 +22,53 @@ export class ProduceManageAPI {
return axios.post('/pms/product/spec/listPageProductSku', data);
};
// 产品sku管理-删除产品sku
static removeProductSku = (params: unknown) => {
return axios.get('uavgoods/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 });
static removeProductSku: deleteProductType = (params) => {
return axios.get('/pms/product/spec/removeProductSku', { params });
};
// 产品sku管理-新增产品sku
static addProductSku = (data: unknown) => {
return axios.post('uavgoods/product/spec/addProductSku', data);
static addProductSku: addProductType = (data) => {
return axios.post('/pms/product/spec/addProductSku', data);
};
// 产品sku管理-编辑产品sku
static editProductSku = (data: unknown) => {
return axios.post('uavgoods/product/spec/editProductSku', data);
static editProductSku: editProductType = (data) => {
return axios.post('/pms/product/spec/editProductSku', data);
};
// 产品规格管理---删除规格
static removeProductSpec = (params: unknown) => {
return axios.get('uavgoods/product/spec/removeProductSpec', { params });
};
// 产品sku管理-编辑单个产品sku时的信息回显
static getProductSkuDetail = (params: unknown) => {
return axios.get('uavgoods/product/spec/getProductSkuDetail', { params });
static getProductSkuDetail: productDetailType = (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管理-产品规格管理-分页列表
static listPageProductSpec: ProductSpecListType = (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({
});
service.interceptors.request.use(
(config: any) => {
const token = Cookies.get('SHAREFLY-TOKEN');
const token = Cookies.get('SHAREFLY_TOKEN');
// console.log('token --->', token);
if (token) {
config.headers.token = token;
......
......@@ -50,7 +50,7 @@ const AddOrEditSpecModal: FC<ModalProps & PropsType> = ({
{
title: '序号',
align: 'center',
render: (text: string, record: selfProduceItemType, index: number) => {
render: (_text: string, _record: selfProduceItemType, index: number) => {
return (pagination.pageNo - 1) * pagination.pageSize + index + 1;
},
},
......
......@@ -18,7 +18,7 @@ const ProductListModal: FC<ModalProps & PropsType> = ({ open, onCancel, data })
title: '序号',
align: 'center',
width: '50px',
render: (text: string, record: productInventoryListType[0], index: number) => {
render: (_text: string, _record: productInventoryListType[0], index: number) => {
return index + 1;
},
},
......@@ -27,7 +27,7 @@ const ProductListModal: FC<ModalProps & PropsType> = ({ open, onCancel, data })
dataIndex: 'productName',
align: 'center',
width: '100px',
render: (text: string, record: productInventoryListType[0]) => {
render: (_text: string, record: productInventoryListType[0]) => {
return record.productSku.productName;
},
},
......@@ -36,7 +36,7 @@ const ProductListModal: FC<ModalProps & PropsType> = ({ open, onCancel, data })
dataIndex: 'typeName',
align: 'center',
width: '100px',
render: (text: string, record: productInventoryListType[0]) => {
render: (_text: string, record: productInventoryListType[0]) => {
return record.productSku.goodsTypeId;
},
},
......@@ -45,7 +45,7 @@ const ProductListModal: FC<ModalProps & PropsType> = ({ open, onCancel, data })
dataIndex: 'model',
align: 'center',
width: '100px',
render: (text: string, record: productInventoryListType[0]) => {
render: (_text: string, record: productInventoryListType[0]) => {
return record.productSku.model;
},
},
......@@ -54,7 +54,7 @@ const ProductListModal: FC<ModalProps & PropsType> = ({ open, onCancel, data })
dataIndex: 'productBrand',
align: 'center',
width: '100px',
render: (text: string, record: productInventoryListType[0]) => {
render: (_text: string, record: productInventoryListType[0]) => {
return record.productSku.productName;
},
},
......@@ -62,7 +62,7 @@ const ProductListModal: FC<ModalProps & PropsType> = ({ open, onCancel, data })
title: '产品规格',
// align: "left",
width: '200px',
render: (text: string, record) => {
render: (_text: string, record) => {
if (record.select === 0) {
return '不指定';
}
......
......@@ -4,7 +4,7 @@ import { useNavigate } from 'react-router-dom';
import { ColumnsType } from 'antd/es/table';
import { IndustryManageAPI } from '~/api';
import { useSearchParams } from 'react-router-dom';
import { inventoryType } from '../industryList/propsType';
// import { inventoryType } from '../industryList/propsType';
import { InterDataType, PaginationProps } from '~/api/interface';
import {
industryDetailType,
......@@ -48,13 +48,13 @@ function IndustryDetail() {
// 方案规格
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);
//关联产品弹窗
......@@ -81,8 +81,8 @@ function IndustryDetail() {
title: '规格图片',
dataIndex: 'specImage',
align: 'center',
render: (text: string, record) => {
return <Image width={50} height={50} src={record.specImage} alt='图片' />;
render: (text) => {
return <Image width={50} height={50} src={text} alt='图片' />;
},
},
{
......@@ -101,13 +101,13 @@ function IndustryDetail() {
title: '操作',
align: 'center',
width: '250px',
render: (text: string, record: any) => {
render: (_text, record) => {
return (
<div>
<Button
type='link'
onClick={() => {
handlePrice(record);
// handlePrice(record);
}}
>
配置价格
......@@ -139,20 +139,20 @@ function IndustryDetail() {
});
// 关闭产品清单
const handleListClosed = () => {
setListData([]);
setVisibleList(false);
};
// const handleListClosed = () => {
// setListData([]);
// setVisibleList(false);
// };
// 打开配置价格弹窗
const handlePrice = (arr: any) => {
setPriceData(arr);
setVisiblePrice(true);
};
// const handlePrice = (arr: any) => {
// setPriceData(arr);
// setVisiblePrice(true);
// };
// 关闭配置价格弹窗
const handlePriceClosed = () => {
setPriceData([]);
setVisiblePrice(false);
};
// const handlePriceClosed = () => {
// setPriceData([]);
// setVisiblePrice(false);
// };
// 打开新增弹窗
const handleAdd = () => {
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 { ColumnsType } from 'antd/es/table';
// import AddOrEditMakeModal from './components/addOrEditMakeModal';
import type { ColumnsType } from 'antd/es/table';
import AddOrEditMakeModal from './components/addOrEditMakeModal';
import { MakeManageAPI } from '~/api';
import { MakeItemEntity } from '~/api/interface/makeManage';
import { PaginationProps } from '~/api/interface';
const MakeList = () => {
const columns: ColumnsType<any> = [
const MakeManage = () => {
const columns: ColumnsType<MakeItemEntity> = [
{
title: '品牌名称',
align: 'center',
......@@ -18,28 +22,130 @@ const MakeList = () => {
{
title: '操作',
align: 'center',
render: () => (
render: (_text: string, record: MakeItemEntity) => (
<>
<Button type='link'>编辑</Button>
<Button type='link' danger>
<Button type='link' onClick={() => editMake(record)}>
编辑
</Button>
<Button type='link' danger onClick={() => deleteMake(record)}>
删除
</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 (
<div className='make-list'>
<div className='make-list-operate'>
<Button type='primary' icon={<PlusOutlined />}>
新增
</Button>
</div>
<div className='make-list-content' style={{ marginTop: '10px' }}>
<Table bordered columns={columns} />
</div>
{/*<AddOrEditMakeModal />*/}
<div className='make-manage'>
<Button
icon={<PlusOutlined />}
type='primary'
onClick={addMakeClick}
style={{ marginBottom: '10px' }}
>
新建
</Button>
<Table
columns={columns}
bordered
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>
);
};
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 qs from 'query-string';
import { Button, Descriptions, message, Table, Modal } from 'antd';
import { Button, Descriptions, message, Table, Modal, Image } from 'antd';
import { ColumnsType } from 'antd/es/table';
// import { PriceModal } from '@/pages/goodsManage/productManage/comp/priceModal';
// import { AddEditDetailModal } from '@/pages/goodsManage/productManage/comp/addEditDetailModal';
import useOption from '~/common/hook/optionHook';
import { ProductSkuType, ProductSpecType } from '../produceList/propsType';
import AddOrEditProduceSpecModal from './components/addOrEditProduceSpecModal';
import SetProduceSpecPriceModal from './components/setProduceSpecPriceModal';
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;
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 [visibleImg, setVisibleImg] = useState<boolean>(false);
// 当前放大图片
const [currentImgList, setCurrentImgList] = useState<{ src: string }[]>([]);
// 产品清单弹窗显示
const [visibleList, setVisibleList] = 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 [tableData, setTableData] = useState<specType>([]);
//新增、编辑产品规格弹窗
const [addOrEditProduceSpecModalShow, setAddOrEditProduceSpecModalShow] =
useState<boolean>(false);
// 当前数据
const [addEditData, setAddEditData] = useState<specType[0]>();
//配置价格弹窗
const [produceSpecPriceModalShow, setProduceSpecPriceModalShow] = useState<boolean>(false);
// 表格结构
const columns: ColumnsType<specType[0]> = [
{ title: '规格名称', dataIndex: 'specName', align: 'center' },
{
title: '规格图片',
dataIndex: 'specImage',
align: 'center',
render: (text: string) => {
return <Image width={50} height={50} src={text} />;
},
},
{ title: '版本描述', dataIndex: 'versionDesc', align: 'center' },
{ title: '料号', dataIndex: 'partNo', align: 'center' },
{
title: '操作',
align: 'center',
width: '250px',
render: (_text: string, record) => {
return (
<div>
<Button
type='link'
onClick={() => {
handlePrice(record);
}}
>
配置价格
</Button>
<Button
type='link'
onClick={() => {
handleEdit(record);
}}
>
编辑
</Button>
<Button type='link' onClick={() => handleDelete(record)}>
删除
</Button>
</div>
);
},
},
];
// 表格分页配置
const [pagination, setPagination] = useState<PaginationProps & { totalCount: number }>({
totalCount: 0,
pageSize: 10,
pageNo: 1,
});
// 打开新增弹窗
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);
setAddEditData(undefined);
setAddOrEditProduceSpecModalShow(true);
};
// 打开编辑弹窗
const handleEdit = (arr: ProductSpecType) => {
setAddEditData(arr);
setVisibleAddEdit(true);
const handleEdit = (record: specType[0]) => {
setAddEditData(record);
setAddOrEditProduceSpecModalShow(true);
};
// 关闭新增编辑弹窗
const handleAddEditClosed = () => {
paginationChange(pagination.current, pagination.pageSize);
const addOrEditProduceSpecModalCancel = () => {
setAddOrEditProduceSpecModalShow(false);
setAddEditData(undefined);
setVisibleAddEdit(false);
};
// 删除产品
const handleDelete = (record: ProductSpecType) => {
const addOrEditProduceSpecModalOk = () => {
setAddOrEditProduceSpecModalShow(false);
getProductSpecList(productId);
}; // 删除产品
const handleDelete = (record: specType[0]) => {
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);
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' }}>
{res.result.goodsName && (
{result.goodsName && (
<div>
<div style={{ color: 'red' }}>删除失败,已被商品关联</div>
<div>关联商品为: {res.result.goodsName.join(',')}</div>
<div>关联商品为: {result.goodsName.join(',')}</div>
</div>
)}
{res.result.industrySkuName && (
{result.industrySkuName && (
<div>
<div style={{ color: 'red' }}>删除失败,已被方案关联</div>
<div>关联方案SKU为: {getTipInfo(res.result.industrySkuName)}</div>
<div>关联方案SKU为: {getTipInfo(result.industrySkuName)}</div>
</div>
)}
</div>
),
duration: 2,
// key: date,
// onClick: () => {
// message.destroy(date);
// },
});
},
});
};
// 表格结构
const columns: ColumnsType<ProductSpecType> = [
{ title: '规格名称', dataIndex: 'specName', align: 'center' },
{
title: '规格图片',
dataIndex: 'specImage',
align: 'center',
render: (text: string) => {
return (
<img
style={{ width: '50px', height: '50px' }}
src={text}
alt='图片'
onClick={() => {
previewImage(text);
}}
/>
);
},
},
{ title: '版本描述', dataIndex: 'versionDesc', align: 'center' },
{ title: '料号', dataIndex: 'partNo', align: 'center' },
{
title: '操作',
align: 'center',
width: '250px',
render: (text: string, record: ProductSpecType) => {
return (
<div>
{btnSetPrice ? (
<Button
type='link'
onClick={() => {
handlePrice(record);
}}
>
配置价格
</Button>
) : (
''
)}
{btnEdit ? (
<Button
type='link'
onClick={() => {
handleEdit(record);
}}
>
编辑
</Button>
) : (
''
)}
{btnDelete ? (
<Button type='link' onClick={() => handleDelete(record)}>
删除
</Button>
) : (
''
)}
</div>
);
},
},
];
// 表格分页配置
const [pagination, setPagination] = useState({
total: 0,
pageSize: 10,
current: 1,
totalPage: 0,
});
// 获取基本信息
const getDetailData = async () => {
const { id } = qs.parse(props.location.search);
const res: any = await ProduceManageAPI.getProductSkuDetail({ id });
if (res && res.code === '200') {
setDetailData(res.result);
}
const getDetailData = (id: number) => {
ProduceManageAPI.getProductSkuDetail({ id }).then(({ result }) => {
setDetailData(result || {});
});
};
// 获取表格数据
// 新版通用部分(ES6+ for React) ZhangLK 2022/08/30 Start
// 加载列表
const getTableList = async (value = {}) => {
// 只需要修改这个地方的接口即可
const res: any = await ProduceManageAPI.listPageProductSpec({
pageNo: pagination.current,
//获取产品规格列表
const getProductSpecList = (productSkuId: number) => {
ProduceManageAPI.listPageProductSpec({
pageNo: pagination.pageNo,
pageSize: pagination.pageSize,
...value,
productSkuId: qs.parse(props.location.search).id,
productSkuId,
}).then(({ result }) => {
setTableData(result.list);
pagination.totalCount = result.totalCount;
setPagination(pagination);
});
if (res && res.code === '200') {
// console.log("res -->", res);
const { list, pageNo, totalCount, pageSize, totalPage } = res.result; // 解构
setPagination({
total: totalCount,
pageSize,
current: pageNo,
totalPage,
});
setTableData(list);
} else {
message.warning(res.message);
}
};
// 翻页
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 = () => {
......@@ -248,9 +173,9 @@ function ProduceDetail(props: any) {
return data.map((v: any) => `${v.industrySkuName}(${v.industrySpecNames})`).join('、');
};
useEffect(() => {
// if (!props.location.search) return;
// getDetailData().then();
// getTableList().then();
setProductId(Number(searchParams.get('id')));
getDetailData(Number(searchParams.get('id')));
getProductSpecList(Number(searchParams.get('id')));
}, []);
return (
<div className='detail-wrap'>
......@@ -269,7 +194,7 @@ function ProduceDetail(props: any) {
>
<Descriptions.Item label='产品名称'>{detailData?.productName}</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?.productBrand}</Descriptions.Item>
</Descriptions>
......@@ -280,15 +205,11 @@ function ProduceDetail(props: any) {
labelStyle={{ width: '200px' }}
style={{ marginTop: '20px' }}
>
{btnAdd ? (
<Descriptions.Item>
<Button type='primary' onClick={handleAdd}>
新增规格
</Button>
</Descriptions.Item>
) : (
''
)}
<Descriptions.Item>
<Button type='primary' onClick={handleAdd}>
新增规格
</Button>
</Descriptions.Item>
<Descriptions.Item>
<Table
size='small'
......@@ -298,9 +219,9 @@ function ProduceDetail(props: any) {
style={{ width: '100%' }}
bordered
pagination={{
total: pagination.total,
total: pagination.totalCount,
pageSize: pagination.pageSize,
current: pagination.current,
current: pagination.pageNo,
showSizeChanger: true,
showQuickJumper: true,
onChange: (page: number, pageSize: number) => paginationChange(page, pageSize),
......@@ -310,12 +231,20 @@ function ProduceDetail(props: any) {
/>
</Descriptions.Item>
</Descriptions>
{/*<PriceModal visible={visiblePrice} closed={handlePriceClosed} data={priceData} />*/}
{/*<AddEditDetailModal*/}
{/* visible={visibleAddEdit}*/}
{/* closed={handleAddEditClosed}*/}
{/* data={addEditData}*/}
{/*/>*/}
{/*新增、编辑*/}
<AddOrEditProduceSpecModal
open={addOrEditProduceSpecModalShow}
onCancel={addOrEditProduceSpecModalCancel}
data={addEditData}
onOk={addOrEditProduceSpecModalOk}
productSkuId={productId}
/>
{/*配置价格*/}
<SetProduceSpecPriceModal
open={produceSpecPriceModalShow}
onCancel={produceSpecPriceModalCancel}
data={addEditData}
/>
</div>
);
}
......
import React, { useEffect, useState } from 'react';
import { Form, Input, Modal, message, Select } from 'antd';
import React, { FC, useEffect, useState } from 'react';
import { Form, Input, Modal, message, Select, ModalProps } from 'antd';
import { CategoryManageAPI, ProduceManageAPI } from '~/api';
import { ProductSkuType, MakeItemEntity } from '../../propsType';
import { InterDataType } from '~/api/interface';
import { InterDataType, InterReqType } from '~/api/interface';
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 categoryType = InterDataType<categoryListType>['list'];
//品牌返回类型
type makeListType = InterDataType<MakeListType>['list'];
//表单类型
type addMakeParameterType = InterReqType<addProductType>;
interface PropsType {
visible: boolean;
closed: any;
data: ProductSkuType | undefined;
makeList: MakeItemEntity[];
closed: () => void;
data: (addMakeParameterType & { id: number; categoriesId: number }) | undefined;
decList: directoryType;
makeList: makeListType;
onOk: () => void;
}
const { Option } = Select;
function AddOrEditProduceModal(props: PropsType) {
// 父组件传参
const { visible, closed, data, makeList, decList } = props;
const AddOrEditProduceModal: FC<ModalProps & PropsType> = ({
open,
closed,
data,
decList,
makeList,
onOk,
}) => {
// 产品类型下拉列表
const [productTypeSelectList, setProductTypeSelectList] = useState<categoryType>([]);
// 表格事件
const [form] = Form.useForm();
const [form] = Form.useForm<addMakeParameterType>();
// 关闭弹窗
const handleClosed = async () => {
form.resetFields();
......@@ -36,15 +47,17 @@ function AddOrEditProduceModal(props: PropsType) {
const handleSubmit = () => {
form
.validateFields()
.then(async (values) => {
const obj = { ...data, ...values };
const res: any = await ProduceManageAPI[!obj.id ? 'addProductSku' : 'editProductSku'](obj);
if (res && res.code === '200') {
message.success('操作成功');
await handleClosed();
} else {
message.warning(res.message);
}
.then((values) => {
const obj: any = { ...data, ...values };
ProduceManageAPI[!obj.id ? 'addProductSku' : 'editProductSku'](
filterObjAttr(obj, ['categoriesId']),
).then(({ code }) => {
if (code === '200') {
message.success('操作成功');
form.resetFields();
onOk();
}
});
})
.catch((err) => {
message.warning(err.errorFields[0].errors[0]).then();
......@@ -60,20 +73,21 @@ function AddOrEditProduceModal(props: PropsType) {
};
// 目录修改
const decSelectChange = (value: number) => {
form.setFieldValue('goodsTypeId', undefined);
form.setFieldValue('categoryId', undefined);
getCategoryListByDirectory(value);
};
// componentsDidMounted
useEffect(() => {
if (!data) return;
getCategoryListByDirectory(data.directoryId);
form.setFieldsValue({
...data,
});
if (data) {
getCategoryListByDirectory(data.directoryId);
form.setFieldsValue({
...data,
});
}
}, [data]);
return (
<Modal
open={visible}
open={open}
title={data?.id ? '编辑' : '新增'}
onCancel={handleClosed}
onOk={handleSubmit}
......@@ -108,7 +122,7 @@ function AddOrEditProduceModal(props: PropsType) {
</Select>
</Form.Item>
<Form.Item
name='goodsTypeId'
name='categoryId'
label='产品类型'
rules={[{ required: true, message: '请选择产品类型' }]}
>
......@@ -156,5 +170,5 @@ function AddOrEditProduceModal(props: PropsType) {
</Form>
</Modal>
);
}
};
export default AddOrEditProduceModal;
......@@ -3,36 +3,36 @@ import './index.scss';
import { Button, Form, Input, message, Modal, Select, Table } from 'antd';
import { useNavigate } from 'react-router-dom';
import { ColumnsType } from 'antd/es/table';
import { CategoryManageAPI, ProduceManageAPI } from '~/api';
import { CategoryManageAPI, MakeManageAPI, ProduceManageAPI } from '~/api';
import AddOrEditProduce from './components/addOrEditProduceModal';
import { MakeItemEntity } from './propsType';
import { InterDataType, PaginationProps } from '~/api/interface';
import { productListType } from '~/api/interface/produceManageType';
import { InterDataType, InterReqType, PaginationProps } from '~/api/interface';
import { addProductType, productListType } from '~/api/interface/produceManageType';
import { categoryListType, directoryListType } from '~/api/interface/categoryManage';
import { MakeListType } from '~/api/interface/makeManage';
//产品列表返回类型
type produceListType = InterDataType<productListType>['list'];
//产品列表参数类型
type produceParametersType = Omit<InterReqType<productListType>, 'pageSize' | 'pageNo'>;
//分类返回类型
type categoryType = InterDataType<categoryListType>['list'];
//目录返回类型
type directoryType = InterDataType<directoryListType>;
//品牌返回类型
type makeListType = InterDataType<MakeListType>['list'];
//新增编辑表单类型
type addMakeParameterType = InterReqType<addProductType>;
const { Option } = Select;
const { confirm } = Modal;
// 搜索表单的数据
let query: any = {};
// 表单提交
interface FormType {
productName?: string;
goodsTypeId?: number;
}
function ProduceManage() {
// 路由操作
const navigate = useNavigate();
// 表格数据
const [tableData, setTableData] = useState<produceListType>([]);
//筛选表单
const [query, setQuery] = useState<produceParametersType>();
// 加载中
const [loading, setLoading] = useState<boolean>(false);
// 产品类型下拉列表
......@@ -40,9 +40,11 @@ function ProduceManage() {
// 新增弹窗是否显示
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>([]);
// 表格结构
......@@ -66,7 +68,7 @@ function ProduceManage() {
align: 'center',
width: '15%',
fixed: 'right',
render: (text: string, record) => {
render: (_text: string, record) => {
return (
<div>
<Button type='link' onClick={() => handleDetail(record)}>
......@@ -99,42 +101,61 @@ function ProduceManage() {
};
// 新增弹窗
const handleAdd = () => {
getMakeList();
setVisibleAddEdit(true);
setAddEditData(undefined);
};
// 编辑弹窗
const handleEdit = (record: produceListType[0]) => {
getMakeList();
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 = () => {
setVisibleAddEdit(false);
setAddEditData(undefined);
paginationChange(pagination.pageNo, pagination.pageSize);
};
const addOrEditProduceOk = () => {
setVisibleAddEdit(false);
setAddEditData(undefined);
getProduceList(query);
};
// 删除产品
const handleDelete = (record: produceListType[0]) => {
confirm({
title: '提示',
content: '删除后此数据将会丢失,确定删除吗?',
async onOk() {
const res: any = await ProduceManageAPI.removeProductSku({ id: record.id });
if (res && res.code === '200') {
await message.success('操作成功');
await paginationChange(pagination.pageNo, pagination.pageSize);
} else {
message.error(res.message);
}
onOk() {
ProduceManageAPI.removeProductSku({ id: record.id }).then(({ code }) => {
if (code === '200') {
if (pagination.pageNo != 1 && tableData.length === 1) {
pagination.pageNo -= 1;
}
message.success('删除成功');
getProduceList(query);
}
});
},
});
};
//产品列表
const getProduceList = () => {
const getProduceList = (query?: produceParametersType) => {
setLoading(true);
ProduceManageAPI.listPageProductSku({
pageNo: pagination.pageNo,
pageSize: pagination.pageSize,
...query,
}).then(({ result }) => {
setLoading(false);
setTableData(result.list || []);
setPagination(pagination);
});
......@@ -143,29 +164,31 @@ function ProduceManage() {
const paginationChange = (pageNo: number, pageSize: number) => {
pagination.pageNo = pageNo;
pagination.pageSize = pageSize;
getProduceList();
getProduceList(query);
};
// 表单提交
const onFinish = (val: FormType) => {
const onFinish = (val: produceListType) => {
// 在这里对提交的数据做处理,如range转为开始和结束时间
const data = Object.fromEntries(
// 过滤为空项
Object.entries({
...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;
// getTableList(data).then();
setQuery(data);
getProduceList(data);
};
// 获取品牌列表
//品牌列表
const getMakeList = () => {
ProduceManageAPI.getListBrandInfo({ pageNo: 1, pageSize: 999999 }).then(({ code, result }) => {
MakeManageAPI.getListBrandInfo({ pageNo: 1, pageSize: 9999 }).then(({ result }) => {
setMakeList(result.list || []);
});
};
// 目录列表
const getDirectoryList = () => {
CategoryManageAPI.getDirectoryList({ type: 4 }).then(({ result }) => {
CategoryManageAPI.getDirectoryListClone({ type: 4 }).then(({ result }) => {
setDecList(result || []);
});
};
......@@ -185,7 +208,7 @@ function ProduceManage() {
};
// componentDidMount
useEffect(() => {
getProduceList();
getProduceList(query);
getDirectoryList();
}, []);
......@@ -245,11 +268,12 @@ function ProduceManage() {
}}
/>
<AddOrEditProduce
visible={visibleAddEdit}
open={visibleAddEdit}
closed={handleAddEditClosed}
data={addEditData}
makeList={makeList}
decList={decList}
onOk={addOrEditProduceOk}
/>
</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() {
const beforeEach = () => {
// TODO: 判断是否登录 (需要改为实时获取地址栏的路由)
const path = location.pathname;
const token = Cookies.get('SHAREFLY-TOKEN');
const token = Cookies.get('SHAREFLY_TOKEN');
if (!token && path !== '/login') {
location.replace('/login');
return;
......
......@@ -35,7 +35,7 @@ export const urlToBase64 = (url: 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)) {
pre[cur] = obj[cur];
}
......
......@@ -12,6 +12,7 @@ export default defineConfig({
proxy: {
'/api': {
// target: 'http://192.168.3.111:8077', // 后端女oms
// target: 'http://192.168.3.17:8099', // 狗旺
target: 'https://test.iuav.shop',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, ''),
......
......@@ -69,7 +69,7 @@
resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz"
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"
resolved "https://registry.npmjs.org/@babel/core/-/core-7.18.2.tgz"
integrity sha512-A8pri1YJiC5UnkdrWcmfZTJTV85b4UXTAfImGmCfYmax4TR9Cw8sDS0MOk++Gp2mE/BefVJ5nwy5yzqNJbP/DQ==
......@@ -263,14 +263,28 @@
dependencies:
regenerator-runtime "^0.13.11"
"@babel/runtime@^7.10.2", "@babel/runtime@^7.16.3":
"@babel/runtime@^7.10.2":
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.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"
resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.22.3.tgz"
integrity sha512-XsDuspWKLUsxwCp6r7EhsExHtYfbe5oAGQ19kqngTdCPUoPQzOPdUbD/pB9PJiwb2ptYKQDjSJT3R6dC+EPqfQ==
......@@ -330,111 +344,6 @@
resolved "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz"
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":
version "0.17.18"
resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.18.tgz"
......@@ -517,7 +426,7 @@
"@nodelib/fs.stat" "2.0.5"
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"
resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
......@@ -587,7 +496,7 @@
rc-resize-observer "^1.3.1"
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"
resolved "https://registry.npmmirror.com/@reduxjs/toolkit/-/toolkit-1.9.5.tgz"
integrity sha512-Rt97jHmfTeaxL4swLRNPD/zV4OxTes4la07Xc4hetpUW/vc75t5m1ANyxG6ymnEQ2FsLQsoMlYB2vV1sO3m8tQ==
......@@ -643,7 +552,7 @@
resolved "https://registry.npmmirror.com/@types/lodash/-/lodash-4.14.195.tgz"
integrity sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg==
"@types/node@^20.1.3":
"@types/node@^20.1.3", "@types/node@>= 14":
version "20.2.5"
resolved "https://registry.npmmirror.com/@types/node/-/node-20.2.5.tgz"
integrity sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ==
......@@ -655,12 +564,12 @@
"@types/quill@^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==
dependencies:
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"
resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.5.tgz"
integrity sha512-OWPWTUrY/NIrjsAPkAk1wW9LZeIjSvkXRhclsFO8CZcZGCOg2G0YZy4ft+rOyYxy8B7ui5iZzi9OkDebZ7/QSA==
......@@ -677,7 +586,7 @@
hoist-non-react-statics "^3.3.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"
resolved "https://registry.npmjs.org/@types/react/-/react-18.0.9.tgz"
integrity sha512-9bjbg1hJHUm4De19L1cHiW0Jvx3geel6Qczhjd0qY5VKVE2X5+x77YxAepuCwVh4vrgZJdgEJw48zrhRIeF4Nw==
......@@ -711,7 +620,7 @@
semver "^7.3.7"
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"
resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.26.0.tgz"
integrity sha512-n/IzU87ttzIdnAH5vQ4BBDnLPly7rC5VnjN3m0xBG82HK6rhRxnCb3w/GyWbNDghPd+NktJqB/wl6+YkzZ5T5Q==
......@@ -795,7 +704,7 @@ acorn-jsx@^5.3.2:
resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
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"
resolved "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz"
integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==
......@@ -1077,14 +986,14 @@ chalk@^4.0.0:
optionalDependencies:
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"
resolved "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz"
integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==
clone@^2.1.1:
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==
codepage@~1.15.0:
......@@ -1106,16 +1015,16 @@ color-convert@^2.0.1:
dependencies:
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:
version "1.1.4"
resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
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:
version "1.0.8"
resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz"
......@@ -1181,7 +1090,7 @@ damerau-levenshtein@^1.0.7:
resolved "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz"
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"
resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz"
integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==
......@@ -1214,7 +1123,7 @@ decode-uri-component@^0.4.1:
deep-equal@^1.0.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==
dependencies:
is-arguments "^1.0.4"
......@@ -1237,14 +1146,6 @@ define-properties@^1.1.3, define-properties@^1.1.4:
has-property-descriptors "^1.0.0"
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:
version "1.0.0"
resolved "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz"
......@@ -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"
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"
resolved "https://registry.npmjs.org/eslint/-/eslint-8.16.0.tgz"
integrity sha512-MBndsoXY/PeVTDJeWsYj7kLZ5hQpJOfMYLsF6LicLHQWbRDG19lK5jOix4DPl8yY4SUFcE3txy86OzFLWT+yoA==
......@@ -1583,17 +1484,17 @@ esutils@^2.0.2:
eventemitter3@^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==
events@^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==
extend@^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==
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"
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:
version "1.2.0"
resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz"
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:
version "3.2.11"
resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz"
......@@ -1648,7 +1549,7 @@ file-entry-cache@^6.0.1:
file-saver@^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==
fill-range@^7.0.1:
......@@ -1707,11 +1608,6 @@ fs.realpath@^1.0.0:
resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"
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:
version "1.1.1"
resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz"
......@@ -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"
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"
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==
gensync@^1.0.0-beta.2:
......@@ -1924,7 +1820,7 @@ internal-slot@^1.0.3:
is-arguments@^1.0.4:
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==
dependencies:
call-bind "^1.0.2"
......@@ -2002,7 +1898,7 @@ is-number@^7.0.0:
is-regex@^1.0.4, is-regex@^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==
dependencies:
call-bind "^1.0.2"
......@@ -2216,11 +2112,16 @@ minimist@^1.2.0, minimist@^1.2.6:
resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz"
integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
moment@^2.29.4:
moment@^2.29.4, "moment@>= 2.x":
version "2.29.4"
resolved "https://registry.npmmirror.com/moment/-/moment-2.29.4.tgz"
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:
version "2.0.0"
resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"
......@@ -2231,11 +2132,6 @@ ms@2.1.2:
resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"
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:
version "3.3.6"
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:
object-is@^1.0.1:
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==
dependencies:
call-bind "^1.0.2"
......@@ -2369,7 +2265,7 @@ p-try@^1.0.0:
parchment@^1.1.2, parchment@^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==
parent-module@^1.0.0:
......@@ -2440,7 +2336,7 @@ prettier-linter-helpers@^1.0.0:
dependencies:
fast-diff "^1.1.2"
prettier@^2.6.2:
prettier@^2.6.2, prettier@>=2.0.0:
version "2.6.2"
resolved "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz"
integrity sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==
......@@ -2492,7 +2388,7 @@ queue-microtask@^1.2.2:
quill-delta@^3.6.2:
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==
dependencies:
deep-equal "^1.0.1"
......@@ -2501,7 +2397,7 @@ quill-delta@^3.6.2:
quill@^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==
dependencies:
clone "^2.1.1"
......@@ -2879,7 +2775,7 @@ rc-virtual-list@^3.4.13, rc-virtual-list@^3.4.8:
rc-resize-observer "^1.0.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"
resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.1.0.tgz"
integrity sha512-fU1Txz7Budmvamp7bshe4Zi32d0ll7ect+ccxNu9FlObT605GOEB8BfO4tmRJ39R5Zj831VCpvQ05QPBW5yb+w==
......@@ -2899,14 +2795,14 @@ react-is@^18.0.0:
react-quill@^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==
dependencies:
"@types/quill" "^1.3.10"
lodash "^4.17.4"
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"
resolved "https://registry.npmmirror.com/react-redux/-/react-redux-8.0.7.tgz"
integrity sha512-1vRQuCQI5Y2uNmrMXg81RXKiBHY3jBzvCvNmZF437O/Z9/pZ+ba2uYHbemYXb3g8rjsacBGo+/wmfrQKzMhJsg==
......@@ -2940,12 +2836,12 @@ react-router@6.11.1:
react-viewer@^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==
dependencies:
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"
resolved "https://registry.npmjs.org/react/-/react-18.1.0.tgz"
integrity sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ==
......@@ -2974,7 +2870,7 @@ redux-thunk@^2.4.2:
resolved "https://registry.npmmirror.com/redux-thunk/-/redux-thunk-2.4.2.tgz"
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"
resolved "https://registry.npmmirror.com/redux/-/redux-4.2.1.tgz"
integrity sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==
......@@ -2991,16 +2887,7 @@ regenerator-runtime@^0.13.4:
resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz"
integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==
regexp.prototype.flags@^1.2.0:
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:
regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.4.1, regexp.prototype.flags@^1.4.3:
version "1.4.3"
resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz"
integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==
......@@ -3082,7 +2969,7 @@ safe-buffer@~5.1.1:
resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
sass@^1.62.0:
sass@*, sass@^1.62.0:
version "1.62.1"
resolved "https://registry.npmjs.org/sass/-/sass-1.62.1.tgz"
integrity sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A==
......@@ -3150,7 +3037,7 @@ sort-by@^1.2.0:
dependencies:
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"
resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz"
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
......@@ -3315,7 +3202,7 @@ type-fest@^0.20.2:
resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz"
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"
resolved "https://registry.npmjs.org/typescript/-/typescript-4.7.2.tgz"
integrity sha512-Mamb1iX2FDUpcTRzltPxgWMKy3fhg0TN378ylbktPGPK/99KbDtMQ4W1hwgsbPAsG3a0xKa1vmw4VKZQbkvz5A==
......@@ -3357,7 +3244,7 @@ vite-tsconfig-paths@^3.5.0:
recrawl-sync "^2.0.3"
tsconfig-paths "^4.0.0"
vite@^4.3.5:
vite@^4.3.5, vite@>2.0.0-0:
version "4.3.9"
resolved "https://registry.npmmirror.com/vite/-/vite-4.3.9.tgz"
integrity sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论