Compare commits

..

No commits in common. 'main' and 'bak' have entirely different histories.
main ... bak

5
components.d.ts vendored

@ -21,23 +21,20 @@ declare module 'vue' {
NDialogProvider: typeof import('naive-ui')['NDialogProvider']
NDivider: typeof import('naive-ui')['NDivider']
NDropdown: typeof import('naive-ui')['NDropdown']
NEllipsis: typeof import('naive-ui')['NEllipsis']
NEmpty: typeof import('naive-ui')['NEmpty']
NForm: typeof import('naive-ui')['NForm']
NFormItem: typeof import('naive-ui')['NFormItem']
NGi: typeof import('naive-ui')['NGi']
NGrid: typeof import('naive-ui')['NGrid']
NGridItem: typeof import('naive-ui')['NGridItem']
NIcon: typeof import('naive-ui')['NIcon']
NImage: typeof import('naive-ui')['NImage']
NInput: typeof import('naive-ui')['NInput']
NMessageProvider: typeof import('naive-ui')['NMessageProvider']
NModal: typeof import('naive-ui')['NModal']
NNotificationProvider: typeof import('naive-ui')['NNotificationProvider']
NotPassed: typeof import('./src/components/NotPassed.vue')['default']
NPopconfirm: typeof import('naive-ui')['NPopconfirm']
NPopover: typeof import('naive-ui')['NPopover']
NPopselect: typeof import('naive-ui')['NPopselect']
NProgress: typeof import('naive-ui')['NProgress']
NScrollbar: typeof import('naive-ui')['NScrollbar']
NSelect: typeof import('naive-ui')['NSelect']
NSlider: typeof import('naive-ui')['NSlider']

@ -23,7 +23,7 @@ const adminInfo = {
value: 'task-main',
},
{
label: '图审审批管理',
label: 'AI工单',
value: 'worksheet-main',
},
],

@ -15,14 +15,10 @@
"postinstall": "patch-package"
},
"dependencies": {
"@vicons/ionicons5": "^0.12.0",
"@vicons/tabler": "^0.12.0",
"@vicons/utils": "^0.1.4",
"@vueup/vue-quill": "^1.2.0",
"@vueuse/core": "10.9.0",
"axios": "^1.4.0",
"date-fns": "^2.30.0",
"dayjs": "^1.11.10",
"esno": "^0.16.3",
"file-saver": "^2.0.5",
"imagesloaded": "^5.0.0",

@ -1,55 +1,3 @@
diff --git a/node_modules/naive-ui/es/form/src/FormItem.mjs b/node_modules/naive-ui/es/form/src/FormItem.mjs
index 3aacec9..a63ab54 100644
--- a/node_modules/naive-ui/es/form/src/FormItem.mjs
+++ b/node_modules/naive-ui/es/form/src/FormItem.mjs
@@ -73,8 +73,8 @@ function wrapValidator(validator, async) {
try {
const validateResult = validator(...args);
if (!async && (typeof validateResult === 'boolean' || validateResult instanceof Error || Array.isArray(validateResult)) || (
- // Error[]
- validateResult === null || validateResult === void 0 ? void 0 : validateResult.then)) {
+ // Error[]
+ validateResult === null || validateResult === void 0 ? void 0 : validateResult.then)) {
return validateResult;
} else if (validateResult === undefined) {
return true;
@@ -479,8 +479,11 @@ export default defineComponent({
class: `${mergedClsPrefix}-form-item-feedback ${mergedClsPrefix}-form-item-feedback--warning`
}, feedbackNodes) : mergedValidationStatus === 'error' ? h("div", {
key: "controlled-error",
- class: `${mergedClsPrefix}-form-item-feedback ${mergedClsPrefix}-form-item-feedback--error`
- }, feedbackNodes) : mergedValidationStatus === 'success' ? h("div", {
+ class: `${mergedClsPrefix}-form-item-feedback ${mergedClsPrefix}-form-item-feedback--error flex`
+ }, [h('img', {
+ style: { width: '1rem', height: '1rem' },
+ src: 'http://47.93.59.251/api/upload/ocr/1711419313955_c.png'
+ }), feedbackNodes]) : mergedValidationStatus === 'success' ? h("div", {
key: "controlled-success",
class: `${mergedClsPrefix}-form-item-feedback ${mergedClsPrefix}-form-item-feedback--success`
}, feedbackNodes) : h("div", {
diff --git a/node_modules/naive-ui/es/modal/src/Modal.mjs b/node_modules/naive-ui/es/modal/src/Modal.mjs
index 9508b72..63f417b 100644
--- a/node_modules/naive-ui/es/modal/src/Modal.mjs
+++ b/node_modules/naive-ui/es/modal/src/Modal.mjs
@@ -13,6 +13,10 @@ import { modalInjectionKey, modalProviderInjectionKey } from "./interface.mjs";
import style from "./styles/index.cssr.mjs";
export const modalProps = Object.assign(Object.assign(Object.assign(Object.assign({}, useTheme.props), {
show: Boolean,
+ showMask: {
+ type: Boolean,
+ default: true
+ },
unstableShowMask: {
type: Boolean,
default: true
@@ -309,6 +313,7 @@ export default defineComponent({
"aria-hidden": true,
ref: "containerRef",
class: `${mergedClsPrefix}-modal-mask`,
+ style: this.showMask ? '' : {background:'none'},
onClick: this.handleClickoutside
}) : null;
}
diff --git a/node_modules/naive-ui/es/pagination/src/Pagination.mjs b/node_modules/naive-ui/es/pagination/src/Pagination.mjs
index 5bd975b..e1c6ebc 100644
--- a/node_modules/naive-ui/es/pagination/src/Pagination.mjs
@ -63,192 +11,3 @@ index 5bd975b..e1c6ebc 100644
default:
return null;
}
diff --git a/node_modules/naive-ui/lib/form/src/FormItem.js b/node_modules/naive-ui/lib/form/src/FormItem.js
index 4f47aad..6dae078 100644
--- a/node_modules/naive-ui/lib/form/src/FormItem.js
+++ b/node_modules/naive-ui/lib/form/src/FormItem.js
@@ -24,7 +24,8 @@ const styles_1 = require("../styles");
const utils_1 = require("./utils");
const context_1 = require("./context");
const form_item_cssr_1 = __importDefault(require("./styles/form-item.cssr"));
-exports.formItemProps = Object.assign(Object.assign({}, _mixins_1.useTheme.props), { label: String, labelWidth: [Number, String], labelStyle: [String, Object], labelAlign: String, labelPlacement: String, path: String, first: Boolean, rulePath: String, required: Boolean, showRequireMark: {
+exports.formItemProps = Object.assign(Object.assign({}, _mixins_1.useTheme.props), {
+ label: String, labelWidth: [Number, String], labelStyle: [String, Object], labelAlign: String, labelPlacement: String, path: String, first: Boolean, rulePath: String, required: Boolean, showRequireMark: {
type: Boolean,
default: undefined
}, requireMarkPlacement: String, showFeedback: {
@@ -33,7 +34,8 @@ exports.formItemProps = Object.assign(Object.assign({}, _mixins_1.useTheme.props
}, rule: [Object, Array], size: String, ignorePathChange: Boolean, validationStatus: String, feedback: String, showLabel: {
type: Boolean,
default: undefined
- }, labelProps: Object });
+ }, labelProps: Object
+});
exports.formItemPropKeys = (0, _utils_1.keysOf)(exports.formItemProps);
// wrap sync validator
function wrapValidator(validator, async) {
@@ -175,22 +177,22 @@ exports.default = (0, vue_1.defineComponent)({
}))
.filter(shouldRuleBeApplied)
.map((rule, i) => {
- const shallowClonedRule = Object.assign({}, rule);
- if (shallowClonedRule.validator) {
- shallowClonedRule.validator = wrapValidator(shallowClonedRule.validator, false);
- }
- if (shallowClonedRule.asyncValidator) {
- shallowClonedRule.asyncValidator = wrapValidator(shallowClonedRule.asyncValidator, true);
- }
- if (shallowClonedRule.renderMessage) {
- const rendererKey = `__renderMessage__${i}`;
- originalMessageRendersMessage[rendererKey] =
- shallowClonedRule.message;
- shallowClonedRule.message = rendererKey;
- messageRenderers[rendererKey] = shallowClonedRule.renderMessage;
- }
- return shallowClonedRule;
- });
+ const shallowClonedRule = Object.assign({}, rule);
+ if (shallowClonedRule.validator) {
+ shallowClonedRule.validator = wrapValidator(shallowClonedRule.validator, false);
+ }
+ if (shallowClonedRule.asyncValidator) {
+ shallowClonedRule.asyncValidator = wrapValidator(shallowClonedRule.asyncValidator, true);
+ }
+ if (shallowClonedRule.renderMessage) {
+ const rendererKey = `__renderMessage__${i}`;
+ originalMessageRendersMessage[rendererKey] =
+ shallowClonedRule.message;
+ shallowClonedRule.message = rendererKey;
+ messageRenderers[rendererKey] = shallowClonedRule.renderMessage;
+ }
+ return shallowClonedRule;
+ });
const activeErrorRules = activeRules.filter((r) => r.level !== 'warning');
const activeWarningRules = activeRules.filter((r) => r.level === 'warning');
const mergedPath = path !== null && path !== void 0 ? path : '__n_no_path__';
@@ -353,31 +355,37 @@ exports.default = (0, vue_1.defineComponent)({
const textNode = ((0, vue_1.h)("span", { class: `${mergedClsPrefix}-form-item-label__text` }, labelText));
const markNode = renderedShowRequireMark ? ((0, vue_1.h)("span", { class: `${mergedClsPrefix}-form-item-label__asterisk` }, mergedRequireMarkPlacement !== 'left' ? '\u00A0*' : '*\u00A0')) : (mergedRequireMarkPlacement === 'right-hanging' && ((0, vue_1.h)("span", { class: `${mergedClsPrefix}-form-item-label__asterisk-placeholder` }, '\u00A0*')));
const { labelProps } = this;
- return ((0, vue_1.h)("label", Object.assign({}, labelProps, { class: [
+ return ((0, vue_1.h)("label", Object.assign({}, labelProps, {
+ class: [
labelProps === null || labelProps === void 0 ? void 0 : labelProps.class,
`${mergedClsPrefix}-form-item-label`,
`${mergedClsPrefix}-form-item-label--${mergedRequireMarkPlacement}-mark`,
this.reverseColSpace &&
- `${mergedClsPrefix}-form-item-label--reverse-columns-space`
- ], style: this.mergedLabelStyle, ref: "labelElementRef" }), mergedRequireMarkPlacement === 'left'
+ `${mergedClsPrefix}-form-item-label--reverse-columns-space`
+ ], style: this.mergedLabelStyle, ref: "labelElementRef"
+ }), mergedRequireMarkPlacement === 'left'
? [markNode, textNode]
: [textNode, markNode]));
};
- return ((0, vue_1.h)("div", { class: [
+ return ((0, vue_1.h)("div", {
+ class: [
`${mergedClsPrefix}-form-item`,
this.themeClass,
`${mergedClsPrefix}-form-item--${this.mergedSize}-size`,
`${mergedClsPrefix}-form-item--${this.mergedLabelPlacement}-labelled`,
this.isAutoLabelWidth &&
- `${mergedClsPrefix}-form-item--auto-label-width`,
+ `${mergedClsPrefix}-form-item--auto-label-width`,
!mergedShowLabel && `${mergedClsPrefix}-form-item--no-label`
- ], style: this.cssVars },
+ ], style: this.cssVars
+ },
mergedShowLabel && renderLabel(),
- (0, vue_1.h)("div", { class: [
+ (0, vue_1.h)("div", {
+ class: [
`${mergedClsPrefix}-form-item-blank`,
this.mergedValidationStatus &&
- `${mergedClsPrefix}-form-item-blank--${this.mergedValidationStatus}`
- ] }, $slots),
+ `${mergedClsPrefix}-form-item-blank--${this.mergedValidationStatus}`
+ ]
+ }, $slots),
this.mergedShowFeedback ? ((0, vue_1.h)("div", { key: this.feedbackId, class: `${mergedClsPrefix}-form-item-feedback-wrapper` },
(0, vue_1.h)(vue_1.Transition, { name: "fade-down-transition", mode: "out-in" }, {
default: () => {
@@ -386,7 +394,9 @@ exports.default = (0, vue_1.defineComponent)({
var _a;
const { feedback } = this;
const feedbackNodes = children || feedback ? ((0, vue_1.h)("div", { key: "__feedback__", class: `${mergedClsPrefix}-form-item-feedback__line` }, children || feedback)) : this.renderExplains.length ? ((_a = this.renderExplains) === null || _a === void 0 ? void 0 : _a.map(({ key, render }) => ((0, vue_1.h)("div", { key: key, class: `${mergedClsPrefix}-form-item-feedback__line` }, render())))) : null;
- return feedbackNodes ? (mergedValidationStatus === 'warning' ? ((0, vue_1.h)("div", { key: "controlled-warning", class: `${mergedClsPrefix}-form-item-feedback ${mergedClsPrefix}-form-item-feedback--warning` }, feedbackNodes)) : mergedValidationStatus === 'error' ? ((0, vue_1.h)("div", { key: "controlled-error", class: `${mergedClsPrefix}-form-item-feedback ${mergedClsPrefix}-form-item-feedback--error` }, feedbackNodes)) : mergedValidationStatus === 'success' ? ((0, vue_1.h)("div", { key: "controlled-success", class: `${mergedClsPrefix}-form-item-feedback ${mergedClsPrefix}-form-item-feedback--success` }, feedbackNodes)) : ((0, vue_1.h)("div", { key: "controlled-default", class: `${mergedClsPrefix}-form-item-feedback` }, feedbackNodes))) : null;
+ return feedbackNodes ? (mergedValidationStatus === 'warning' ? ((0, vue_1.h)("div", { key: "controlled-warning", class: `${mergedClsPrefix}-form-item-feedback ${mergedClsPrefix}-form-item-feedback--warning` }, feedbackNodes)) : mergedValidationStatus === 'error' ? ((0, vue_1.h)("div", { key: "controlled-error", class: `${mergedClsPrefix}-form-item-feedback ${mergedClsPrefix}-form-item-feedback--error flex` }, [h('img', {
+ style: { width: '1rem', height: '1rem' },src: 'http://47.93.59.251/api/upload/ocr/1711419313955_c.png'
+ }), feedbackNodes])) : mergedValidationStatus === 'success' ? ((0, vue_1.h)("div", { key: "controlled-success", class: `${mergedClsPrefix}-form-item-feedback ${mergedClsPrefix}-form-item-feedback--success` }, feedbackNodes)) : ((0, vue_1.h)("div", { key: "controlled-default", class: `${mergedClsPrefix}-form-item-feedback` }, feedbackNodes))) : null;
});
}
}))) : null));
diff --git a/node_modules/naive-ui/lib/modal/src/Modal.js b/node_modules/naive-ui/lib/modal/src/Modal.js
index 47f6ac2..801e8e7 100644
--- a/node_modules/naive-ui/lib/modal/src/Modal.js
+++ b/node_modules/naive-ui/lib/modal/src/Modal.js
@@ -17,7 +17,11 @@ const presetProps_1 = require("./presetProps");
const BodyWrapper_1 = __importDefault(require("./BodyWrapper"));
const interface_1 = require("./interface");
const index_cssr_1 = __importDefault(require("./styles/index.cssr"));
-exports.modalProps = Object.assign(Object.assign(Object.assign(Object.assign({}, _mixins_1.useTheme.props), { show: Boolean, unstableShowMask: {
+exports.modalProps = Object.assign(Object.assign(Object.assign(Object.assign({}, _mixins_1.useTheme.props), {
+ show: Boolean, showMask: {
+ type: Boolean,
+ default: true,
+ }, unstableShowMask: {
type: Boolean,
default: true
}, maskClosable: {
@@ -38,7 +42,8 @@ exports.modalProps = Object.assign(Object.assign(Object.assign(Object.assign({},
}, closeOnEsc: {
type: Boolean,
default: true
- }, blockScroll: { type: Boolean, default: true } }), presetProps_1.presetProps), {
+ }, blockScroll: { type: Boolean, default: true }
+}), presetProps_1.presetProps), {
// events
onEsc: Function, 'onUpdate:show': [Function, Array], onUpdateShow: [Function, Array], onAfterEnter: Function, onBeforeLeave: Function, onAfterLeave: Function, onClose: Function, onPositiveClick: Function, onNegativeClick: Function, onMaskClick: Function,
// private
@@ -47,7 +52,8 @@ exports.modalProps = Object.assign(Object.assign(Object.assign(Object.assign({},
default: undefined
},
// deprecated
- overlayStyle: [String, Object], onBeforeHide: Function, onAfterHide: Function, onHide: Function });
+ overlayStyle: [String, Object], onBeforeHide: Function, onAfterHide: Function, onHide: Function
+});
exports.default = (0, vue_1.defineComponent)({
name: 'Modal',
inheritAttrs: false,
@@ -226,21 +232,25 @@ exports.default = (0, vue_1.defineComponent)({
var _a;
(_a = this.onRender) === null || _a === void 0 ? void 0 : _a.call(this);
const { unstableShowMask } = this;
- return (0, vue_1.withDirectives)((0, vue_1.h)("div", { role: "none", ref: "containerRef", class: [
+ return (0, vue_1.withDirectives)((0, vue_1.h)("div", {
+ role: "none", ref: "containerRef", class: [
`${mergedClsPrefix}-modal-container`,
this.themeClass,
this.namespace
- ], style: this.cssVars },
- (0, vue_1.h)(BodyWrapper_1.default, Object.assign({ style: this.overlayStyle }, this.$attrs, { ref: "bodyWrapper", displayDirective: this.displayDirective, show: this.show, preset: this.preset, autoFocus: this.autoFocus, trapFocus: this.trapFocus, blockScroll: this.blockScroll }, this.presetProps, { onEsc: this.handleEsc, onClose: this.handleCloseClick, onNegativeClick: this.handleNegativeClick, onPositiveClick: this.handlePositiveClick, onBeforeLeave: this.handleBeforeLeave, onAfterEnter: this.onAfterEnter, onAfterLeave: this.handleAfterLeave, onClickoutside: unstableShowMask ? undefined : this.handleClickoutside, renderMask: unstableShowMask
+ ], style: this.cssVars
+ },
+ (0, vue_1.h)(BodyWrapper_1.default, Object.assign({ style: this.overlayStyle }, this.$attrs, { ref: "bodyWrapper", displayDirective: this.displayDirective, show: this.show, preset: this.preset, autoFocus: this.autoFocus, trapFocus: this.trapFocus, blockScroll: this.blockScroll }, this.presetProps, {
+ onEsc: this.handleEsc, onClose: this.handleCloseClick, onNegativeClick: this.handleNegativeClick, onPositiveClick: this.handlePositiveClick, onBeforeLeave: this.handleBeforeLeave, onAfterEnter: this.onAfterEnter, onAfterLeave: this.handleAfterLeave, onClickoutside: unstableShowMask ? undefined : this.handleClickoutside, renderMask: unstableShowMask
? () => {
var _a;
return ((0, vue_1.h)(vue_1.Transition, { name: "fade-in-transition", key: "mask", appear: (_a = this.internalAppear) !== null && _a !== void 0 ? _a : this.isMounted }, {
default: () => {
- return this.show ? ((0, vue_1.h)("div", { "aria-hidden": true, ref: "containerRef", class: `${mergedClsPrefix}-modal-mask`, onClick: this.handleClickoutside })) : null;
+ return this.show ? ((0, vue_1.h)("div", { "aria-hidden": true, ref: "containerRef", class: `${mergedClsPrefix}-modal-mask` ,style:this.showMask ? '' : {background:'none'}, onClick: this.handleClickoutside })) : null;
}
}));
}
- : undefined }), this.$slots)), [
+ : undefined
+ }), this.$slots)), [
[
vdirs_1.zindexable,
{

@ -5,15 +5,6 @@ settings:
excludeLinksFromLockfile: false
dependencies:
'@vicons/ionicons5':
specifier: ^0.12.0
version: 0.12.0
'@vicons/tabler':
specifier: ^0.12.0
version: 0.12.0
'@vicons/utils':
specifier: ^0.1.4
version: 0.1.4(vue@3.3.10)
'@vueup/vue-quill':
specifier: ^1.2.0
version: 1.2.0(vue@3.3.10)
@ -26,9 +17,6 @@ dependencies:
date-fns:
specifier: ^2.30.0
version: 2.30.0
dayjs:
specifier: ^1.11.10
version: 1.11.10
esno:
specifier: ^0.16.3
version: 0.16.3
@ -53,9 +41,6 @@ dependencies:
naive-ui:
specifier: ^2.38.1
version: 2.38.1(vue@3.3.10)
patch-package:
specifier: ^8.0.0
version: 8.0.0
pinia:
specifier: ^2.0.33
version: 2.1.7(typescript@4.9.5)(vue@3.3.10)
@ -1348,10 +1333,6 @@ packages:
resolution: {integrity: sha512-SXgrhajHG7boLv6oU93CcmdDm0HYRiceuz6b+7z+/2lCJPTWDv0V5YiwFHT2ejE4bQqgSXQiVPQYPWv7LGsK1g==}
dev: true
/@types/node@14.14.45:
resolution: {integrity: sha512-DssMqTV9UnnoxDWu959sDLZzfvqCF0qDNRjaWeYSui9xkFe61kKo4l1TWNTQONpuXEm+gLMRvdlzvNHBamzmEw==}
dev: false
/@types/node@18.19.2:
resolution: {integrity: sha512-6wzfBdbWpe8QykUkXBjtmO3zITA0A3FIjoy+in0Y2K4KrCiRhNYJIdwAPDffZ3G6GnaKaSLSEa9ZuORLfEoiwg==}
dependencies:
@ -1522,23 +1503,6 @@ packages:
resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
dev: true
/@vicons/ionicons5@0.12.0:
resolution: {integrity: sha512-Iy1EUVRpX0WWxeu1VIReR1zsZLMc4fqpt223czR+Rpnrwu7pt46nbnC2ycO7ItI/uqDLJxnbcMC7FujKs9IfFA==}
dev: false
/@vicons/tabler@0.12.0:
resolution: {integrity: sha512-3+wUFuxb7e8OzZ8Wryct1pzfA2vyoF4lwW98O9s27ZrfCGaJGNmqG+q8A7vQ92Mf+COCgxpK+rhNPTtTvaU6qw==}
dev: false
/@vicons/utils@0.1.4(vue@3.3.10):
resolution: {integrity: sha512-OHI19qVNN6i+uPQ+Y3f2s0dUxwsYnOCcKBW7XOU4yXXO1aU3ZoKpblCc3+4N0qmgoJs5rWKRAaMisipqEXJwAg==}
peerDependencies:
vue: ^3.0.6
dependencies:
'@xicons/utils': 0.1.4
vue: 3.3.10(typescript@4.9.5)
dev: false
/@vitejs/plugin-vue@4.5.1(vite@5.0.5)(vue@3.3.10):
resolution: {integrity: sha512-DaUzYFr+2UGDG7VSSdShKa9sIWYBa1LL8KC0MNOf2H5LjcTPjob0x8LbkqXWmAtbANJCkpiQTj66UVcQkN2s3g==}
engines: {node: ^14.18.0 || >=16.0.0}
@ -1807,12 +1771,6 @@ packages:
'@xtuc/long': 4.2.2
dev: true
/@xicons/utils@0.1.4:
resolution: {integrity: sha512-uXxKDLz9abr80yJC05XSTq6wlyFcdW+N/1IYJkeHjzzXVc4VQ0sEYMoMMTjAH7HQBOyOkzOB4pf5NGF72lwa8Q==}
dependencies:
css-render: 0.13.9
dev: false
/@xtuc/ieee754@1.2.0:
resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==}
dev: true
@ -1821,10 +1779,6 @@ packages:
resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
dev: true
/@yarnpkg/lockfile@1.1.0:
resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==}
dev: false
/JSONStream@1.3.5:
resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
hasBin: true
@ -2033,11 +1987,6 @@ packages:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
dev: false
/at-least-node@1.0.0:
resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==}
engines: {node: '>= 4.0.0'}
dev: false
/atob@2.1.2:
resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==}
engines: {node: '>= 4.5.0'}
@ -2138,6 +2087,7 @@ packages:
engines: {node: '>=8'}
dependencies:
fill-range: 7.0.1
dev: true
/browserslist@4.22.2:
resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==}
@ -2320,6 +2270,7 @@ packages:
/ci-info@3.9.0:
resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
engines: {node: '>=8'}
dev: true
/class-utils@0.3.6:
resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==}
@ -2586,14 +2537,6 @@ packages:
shebang-command: 2.0.0
which: 2.0.2
/css-render@0.13.9:
resolution: {integrity: sha512-n3C4ZH59rveBrUlAD7n0Ze9/gUMKa4dlH1C9CWKpGcIHR/xRcIVXzBGy1iw8WWq2ySmn2/ZqOpySQNAK5Pb6sw==}
dependencies:
'@emotion/hash': 0.8.0
'@types/node': 14.14.45
csstype: 3.0.11
dev: false
/css-render@0.15.12:
resolution: {integrity: sha512-eWzS66patiGkTTik+ipO9qNGZ+uNuGyTmnz6/+EJIiFg8+3yZRpnMwgFo8YdXhQRsiePzehnusrxVvugNjXzbw==}
dependencies:
@ -2668,10 +2611,6 @@ packages:
'@babel/runtime': 7.23.5
dev: false
/dayjs@1.11.10:
resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==}
dev: false
/de-indent@1.0.2:
resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
dev: true
@ -3948,6 +3887,7 @@ packages:
engines: {node: '>=8'}
dependencies:
to-regex-range: 5.0.1
dev: true
/finalhandler@1.1.2:
resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==}
@ -3980,12 +3920,6 @@ packages:
path-exists: 4.0.0
dev: true
/find-yarn-workspace-root@2.0.0:
resolution: {integrity: sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==}
dependencies:
micromatch: 4.0.5
dev: false
/fizzy-ui-utils@2.0.7:
resolution: {integrity: sha512-CZXDVXQ1If3/r8s0T+v+qVeMshhfcuq0rqIFgJnrtd+Bu8GmDmqMjntjUePypVtjHXKJ6V4sw9zeyox34n9aCg==}
dependencies:
@ -4061,16 +3995,6 @@ packages:
universalify: 2.0.1
dev: true
/fs-extra@9.1.0:
resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==}
engines: {node: '>=10'}
dependencies:
at-least-node: 1.0.0
graceful-fs: 4.2.11
jsonfile: 6.1.0
universalify: 2.0.1
dev: false
/fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
@ -4223,6 +4147,7 @@ packages:
/graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
dev: true
/graphemer@1.4.0:
resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
@ -4540,12 +4465,6 @@ packages:
is-data-descriptor: 1.0.1
dev: true
/is-docker@2.2.1:
resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
engines: {node: '>=8'}
hasBin: true
dev: false
/is-extendable@0.1.1:
resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==}
engines: {node: '>=0.10.0'}
@ -4591,6 +4510,7 @@ packages:
/is-number@7.0.0:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
dev: true
/is-obj@2.0.0:
resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==}
@ -4653,21 +4573,10 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
/is-wsl@2.2.0:
resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
engines: {node: '>=8'}
dependencies:
is-docker: 2.2.1
dev: false
/isarray@1.0.0:
resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
dev: true
/isarray@2.0.5:
resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
dev: false
/isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
@ -4762,16 +4671,6 @@ packages:
/json-stable-stringify-without-jsonify@1.0.1:
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
/json-stable-stringify@1.1.1:
resolution: {integrity: sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.5
isarray: 2.0.5
jsonify: 0.0.1
object-keys: 1.1.1
dev: false
/json5@1.0.2:
resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
hasBin: true
@ -4799,10 +4698,7 @@ packages:
universalify: 2.0.1
optionalDependencies:
graceful-fs: 4.2.11
/jsonify@0.0.1:
resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==}
dev: false
dev: true
/jsonparse@1.3.1:
resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
@ -4838,12 +4734,6 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
/klaw-sync@6.0.0:
resolution: {integrity: sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==}
dependencies:
graceful-fs: 4.2.11
dev: false
/kleur@3.0.3:
resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
engines: {node: '>=6'}
@ -5210,6 +5100,7 @@ packages:
dependencies:
braces: 3.0.2
picomatch: 2.3.1
dev: true
/mime-db@1.52.0:
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
@ -5281,6 +5172,7 @@ packages:
/minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
dev: true
/minipass@4.2.8:
resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==}
@ -5561,14 +5453,6 @@ packages:
mimic-fn: 4.0.0
dev: true
/open@7.4.2:
resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==}
engines: {node: '>=8'}
dependencies:
is-docker: 2.2.1
is-wsl: 2.2.0
dev: false
/optionator@0.9.3:
resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==}
engines: {node: '>= 0.8.0'}
@ -5580,11 +5464,6 @@ packages:
prelude-ls: 1.2.1
type-check: 0.4.0
/os-tmpdir@1.0.2:
resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
engines: {node: '>=0.10.0'}
dev: false
/outlayer@2.1.1:
resolution: {integrity: sha512-+GplXsCQ3VrbGujAeHEzP9SXsBmJxzn/YdDSQZL0xqBmAWBmortu2Y9Gwdp9J0bgDQ8/YNIPMoBM13nTwZfAhw==}
dependencies:
@ -5691,28 +5570,6 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
/patch-package@8.0.0:
resolution: {integrity: sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA==}
engines: {node: '>=14', npm: '>5'}
hasBin: true
dependencies:
'@yarnpkg/lockfile': 1.1.0
chalk: 4.1.2
ci-info: 3.9.0
cross-spawn: 7.0.3
find-yarn-workspace-root: 2.0.0
fs-extra: 9.1.0
json-stable-stringify: 1.1.1
klaw-sync: 6.0.0
minimist: 1.2.8
open: 7.4.2
rimraf: 2.7.1
semver: 7.5.4
slash: 2.0.0
tmp: 0.0.33
yaml: 2.3.4
dev: false
/path-browserify@1.0.1:
resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
dev: true
@ -5777,6 +5634,7 @@ packages:
/picomatch@2.3.1:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
dev: true
/pidtree@0.6.0:
resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==}
@ -6214,13 +6072,6 @@ packages:
resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==}
dev: true
/rimraf@2.7.1:
resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
hasBin: true
dependencies:
glob: 7.2.3
dev: false
/rimraf@3.0.2:
resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
hasBin: true
@ -6392,11 +6243,6 @@ packages:
resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
dev: true
/slash@2.0.0:
resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==}
engines: {node: '>=6'}
dev: false
/slash@3.0.0:
resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
engines: {node: '>=8'}
@ -6842,13 +6688,6 @@ packages:
resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
dev: true
/tmp@0.0.33:
resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
engines: {node: '>=0.6.0'}
dependencies:
os-tmpdir: 1.0.2
dev: false
/to-fast-properties@2.0.0:
resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
engines: {node: '>=4'}
@ -6873,6 +6712,7 @@ packages:
engines: {node: '>=8.0'}
dependencies:
is-number: 7.0.0
dev: true
/to-regex@3.0.2:
resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==}
@ -6987,6 +6827,7 @@ packages:
/universalify@2.0.1:
resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
engines: {node: '>= 10.0.0'}
dev: true
/unpipe@1.0.0:
resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
@ -7536,6 +7377,7 @@ packages:
/yaml@2.3.4:
resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==}
engines: {node: '>= 14'}
dev: true
/yargs-parser@20.2.9:
resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}

@ -1,17 +1,12 @@
<script lang="ts" setup>
import { dateZhCN, zhCN } from "naive-ui";
import { computed, onMounted, nextTick,inject } from "vue";
import { AppProvider } from "@/components/Application";
import { lighten } from "@/utils/index";
import mouseTrapBind from '@/hooks/event/mouseTrapBind'
const mousetrap = inject('mousetrap') as any
onMounted(()=>{
mouseTrapBind(mousetrap);
})
import { dateZhCN, zhCN } from 'naive-ui'
import { computed } from 'vue'
import { AppProvider } from '@/components/Application'
import { lighten } from '@/utils/index'
const getThemeOverrides = computed(() => {
const theme = "#1980FF";
const lightenStr = lighten(theme, 6);
const theme = '#1980FF'
const lightenStr = lighten(theme, 6)
return {
common: {
@ -21,44 +16,38 @@ const getThemeOverrides = computed(() => {
primaryColorSuppl: theme,
},
Switch: {
railColorActive: "#07C984",
railColorActive: '#07C984',
},
Input: {
borderHover: "0px",
borderFocus: "0px",
boxShadowFocus: "#ff0000",
borderHover: '0px',
borderFocus: '0px',
boxShadowFocus: '#ff0000',
},
Tag: {
colorCheckedHover: "#507afd",
colorCheckedPressed: "#507afd",
colorCheckedHover: '#507afd',
colorCheckedPressed: '#507afd',
},
Slider: {
fillColor: "#1980FF",
dotBorderActive: "#1980FF",
fillColorHover: "#1980FF",
fillColor: '#1980FF',
dotBorderActive: '#1980FF',
fillColorHover: '#1980FF',
},
Card: {
padding: "0px",
padding: '0px',
},
Dropdown: {
optionColorHover: "#e8f2ff",
optionColorHover: '#e8f2ff',
},
Upload: {
draggerBorder: "1px dashed #1980FF",
draggerBorderHover: "1px dashed #1980FF",
draggerBorder: '1px dashed #1980FF',
draggerBorderHover: '1px dashed #1980FF',
},
};
});
}
})
</script>
<template>
<NConfigProvider
:locale="zhCN"
:date-locale="dateZhCN"
:theme-overrides="getThemeOverrides"
>
<NConfigProvider :locale="zhCN" :date-locale="dateZhCN" :theme-overrides="getThemeOverrides">
<AppProvider>
<RouterView />
</AppProvider>
@ -66,19 +55,16 @@ const getThemeOverrides = computed(() => {
</template>
<style lang="less">
.n-checkbox .n-checkbox__label {
.n-checkbox .n-checkbox__label{
color: #666666 !important;
font-size: 14px !important;
}
.n-checkbox.n-checkbox--disabled .n-checkbox__label {
.n-checkbox.n-checkbox--disabled .n-checkbox__label{
color: #c9c9c9 !important;
font-size: 14px !important;
}
.draggable-ul .draggable-li {
.draggable-ul .draggable-li{
color: #666666 !important;
font-size: 14px !important;
}
::v-deep(.n-base-clear > .n-base-clear__clear){
color: #c9c9c9 !important;
}
</style>

@ -23,12 +23,12 @@ export async function getRegionList(params: PageParam = { pageNo: 1, pageSize: 1
*/
export async function getPictureTypeList(): Promise<any> {
const res = await http.request({
url: `/static/admin/web/distionary/bytypecode/izpicturetype`,
url: `/ocr/ocrPicturetype/rootList`,
method: 'get',
})
const list = res.data[0].distionaryList
return list
const { data } = res
return data
}
/**
@ -377,17 +377,6 @@ export async function getizstatusList() {
url: `/static/admin/web/distionary/bytypecode/izstatus`,
method: 'get',
})
return res.data[0].distionaryList
}
/**
* ()
* @returns
*/
export async function getizApprovalStatusList() {
const res = await http.request({
url: `/static/admin/web/distionary/bytypecode/izApprovalStatus`,
method: 'get',
})
return res.data[0].distionaryList
}

@ -30,11 +30,10 @@ export async function getFinalList(params: FinalParam) {
params: notEmptyParams,
})
const { data: { list, totalPage, totalCount } } = res
const { data: { list, totalPage } } = res
return {
pageCount: totalPage,
data: list,
totalCount,
}
}
@ -50,34 +49,3 @@ export async function resetApproval(params: ResetParam) {
params,
})
}
/**
*
* @param params
* @returns
*/
export async function repetitionTask() {
return http.request({
url: `/flow/task/repetitionTask`,
method: 'get',
})
}
/**
*
* @returns
*/
export async function getRepeatList(params: FinalParam) {
const res = await http.request({
url: `/flow/task/repetitionTaskList`,
method: 'get',
params,
})
const { data: { records, total, pages } } = res
return {
pageCount: pages,
data: records,
totalCount: total,
}
}

@ -17,11 +17,10 @@ export async function getConditionList(page: PageParam, searchParam: FilterSearc
},
})
const { data: { records, pages,total } } = res
const { data: { records, pages } } = res
return {
pageCount: pages,
data: records,
total
}
}

@ -1,9 +1,9 @@
import { pickBy } from 'lodash-es'
import { http } from '@/utils/http/axios'
import type { CheckParam, PageParam, QueryPictureParam, UploadParam } from '/#/api'
import { ContentTypeEnum } from '@/enums/httpEnum'
import { notEmpty } from '@/utils'
import { formatToDate2 } from '@/utils/dateUtil'
import { http } from '@/utils/http/axios'
import { pickBy } from 'lodash-es'
import type { CheckParam, PageParam, QueryPictureParam, UploadParam } from '/#/api'
/**
*
@ -103,131 +103,6 @@ export async function oneClickCheck(params: Partial<CheckParam> = { search_histo
})
}
/**
*
* @param note
* @returns
*/
export async function oneClickCheckTaskPackage(params: Partial<CheckParam> = { search_history: '0' }) {
const notEmptyParams = pickBy(params, notEmpty)
Object.keys(notEmptyParams).forEach((key) => {
const val = notEmptyParams[key]
if (Array.isArray(val))
notEmptyParams[key] = val.join(',')
})
return http.request({
url: `/ocr/checkDuplicate/openCheckDuplicate`,
method: 'get',
params: notEmptyParams,
headers: { 'Content-Type': ContentTypeEnum.FORM_DATA },
})
}
/**
*
* @param note
* @returns
*/
export async function getLastCheckNo() {
return http.request({
url: `/ocr/checkDuplicate/getLastCheckNo`,
method: 'get',
headers: { 'Content-Type': ContentTypeEnum.FORM_DATA },
})
}
/**
*
* @param note
* @returns
*/
export async function getCheckDuplicateStatus(checkDuplicateNo) {
return http.request({
url: `/ocr/checkDuplicate/getCheckDuplicateStatus`,
method: 'get',
params: { checkDuplicateNo },
headers: { 'Content-Type': ContentTypeEnum.FORM_DATA },
})
}
/**
*
* @param note
* @returns
*/
export async function removeCheckDuplicate(checkDuplicateNo) {
return http.request({
url: `/ocr/checkDuplicate/removeCheckDuplicate`,
method: 'get',
params: { checkDuplicateNo },
headers: { 'Content-Type': ContentTypeEnum.FORM_DATA },
})
}
/**
*
* @param
* @returns
*/
export async function createPackage(params) {
return http.request({
url: `/ocr/ocrTaskPackage/createPackage`,
method: 'post',
params
})
}
/**
*
* @param
* @returns
*/
export async function deletePackage(params) {
return http.request({
url: `/ocr/ocrTaskPackage/deletePackage`,
method: 'get',
params
})
}
/**
*
* @param
* @returns
*/
export async function queryPageListByCheckNo(params: any): Promise<any> {
const notEmptyParams = pickBy(params, notEmpty)
Object.keys(notEmptyParams).forEach((key) => {
const val = notEmptyParams[key]
if (key === 'izyear') {
const start = formatToDate2(val[0])
const end = formatToDate2(val[1])
notEmptyParams[key] = `${start}-${end}`
}
if (Array.isArray(notEmptyParams[key]))
notEmptyParams[key] = val.join(',')
})
const res = await http.request({
url: `/ocr/checkDuplicate/queryPageListByCheckNo`,
method: 'get',
params: notEmptyParams,
headers: { 'Content-Type': ContentTypeEnum.FORM_DATA },
})
const { data: { records, pages, total } } = res
return {
pageCount: pages,
data: records,
total,
}
}
/**
*
* @param params
@ -263,17 +138,3 @@ export async function getPictureList(params: any): Promise<any> {
total,
}
}
/**
*
* @param
* @returns
*/
export async function getFilterList(params) {
return http.request({
url: `/ocr/ocrUsersearch/querySearchCondition`,
method: 'get',
params
})
}

@ -55,16 +55,3 @@ export async function readAllMsg(params) {
return res
}
/**
*
* @returns
*/
export async function msgPolling() {
const res = await http.request({
url: `/ocr/msg/msgPolling`,
method: 'get',
})
return res
}

@ -7,15 +7,11 @@ import { ContentTypeEnum } from '@/enums/httpEnum'
*
* @returns
*/
export async function getApprovalList(page: any) {
export async function getApprovalList(page: PageParam) {
const res = await http.request({
url: `/flow/task/listalldata`,
method: 'get',
params: {
pageSize: page.pageSize,
currPage: page.pageNo,
keyword: page.keyword,
},
params: { pageSize: page.pageSize, currPage: page.pageNo },
})
const { data: { list, totalCount } } = res
@ -29,106 +25,11 @@ export async function getApprovalList(page: any) {
*
* @param param
*/
export async function audit(params) {
export async function audit(params: ApprovalParam) {
return http.request({
url: `/flow/task/completeBatchFlow?`,
method: 'post',
params,
params: qs.stringify(params, { indices: false }),
headers: { 'Content-Type': ContentTypeEnum.FORM_DATA },
})
}
/**
*
* @returns
*/
export async function dubiousfileyd(params) {
const res = await http.request({
url: `/ocr/dubiousfile/dubiousfileyd`,
method: 'get',
params,
})
return res
}
/**
*
* @returns
*/
export async function dubiousfilelist(params) {
const res = await http.request({
url: `/ocr/dubiousfile/dubiousfilelist`,
method: 'get',
params,
})
return res
}
/**
*
* @returns
*/
export async function removeFiles(params) {
const res = await http.request({
url: `/ocr/dubiousfile/dubiousfileyc`,
method: 'get',
params,
})
return res
}
/**
* ()
* @param packageid id
* @param taskchildpictureid id
* @param params
* @returns
*/
export async function getSimilarityList(params: any) {
const res = await http.request({
url: `/backstage/jifen/ocrtaskchildpicture/getSimilarityList`,
method: 'get',
params,
})
const { data: { records, pages, total } } = res
// 精简一下数据
const list = records.map((item) => {
return {
id: item.id,
taskId: item.taskId,
taskname: item.fromtaskname,
assignee: item.assignee,
pictureid: item.pictureid,
imgurl: item.imgUrl,
thumburl: item.imgUrl,
iztrueorfalse: item.iztrueorfalse,
states: item.states,
}
})
return {
pageCount: pages,
data: records,
total,
}
}
/**
* ()
* @param id id
* @param packageid id
* @returns
*/
export async function getTaskDetailInfo(taskId: string, packageid: string) {
const pid = packageid || 0
const res = await http.request({
url: `/backstage/jifen/ocrtaskchildpicture/getdata/${taskId}/${pid}`,
method: 'get',
})
return res.data
}

@ -1,5 +1,5 @@
import { http } from '@/utils/http/axios'
import type { PageParam, PictureSortParam, SetTFParam, SimilarityPictureSortParam } from '/#/api'
import type { PageParam, PictureSortParam, SetTFParam } from '/#/api'
import { ContentTypeEnum } from '@/enums/httpEnum'
@ -7,27 +7,9 @@ import { ContentTypeEnum } from '@/enums/httpEnum'
*
* @returns
*/
export async function getPackageList(params: PageParam, packageName: string) {
export async function getPackageList(params: PageParam, packagename: string) {
const res = await http.request({
url: `/ocr/ocrTaskPackage/getPackageList`,
method: 'get',
params: { ...params, packageName },
})
const { data: { records, pages } } = res
return {
pageCount: pages,
data: records,
}
}
/**
* -
* @returns
*/
export async function getPackagePicture(params: PageParam, packagename: string) {
const res = await http.request({
url: `/ocr/ocrPicture/getPackagePicture`,
url: `/ocr/ocrPackagetask/list`,
method: 'get',
params: { ...params, packagename },
})
@ -62,14 +44,16 @@ export async function getPackageTaskList(packageid: string, params: PageParam) {
}
/**
* -
* @param checkDuplicateId id
* ()
* @param id id
* @param packageid id
* @returns
*/
export async function getTaskDetailInfo(checkDuplicateId: string) {
export async function getTaskDetailInfo(taskId: string, packageid: string) {
const pid = packageid || 0
const res = await http.request({
url: `/ocr/ocrPicture/getPackagePicture?checkDuplicateId=${checkDuplicateId}`,
url: `/backstage/jifen/ocrtaskchildpicture/getdata/${taskId}/${pid}`,
method: 'get',
})
@ -83,10 +67,11 @@ export async function getTaskDetailInfo(checkDuplicateId: string) {
* @param params
* @returns
*/
export async function getPictureSimilarityList(params: PageParam & PictureSortParam & SimilarityPictureSortParam) {
export async function getTaskDetailPictureList(packageid: string, taskchildpictureid: string, params: PageParam & PictureSortParam) {
const pid = packageid || 0
const res = await http.request({
url: `/backstage/jifen/ocrtaskchildpicture/getPictureSimilarityList`,
url: `/backstage/jifen/ocrtaskchildpicture/listbypictureid/${pid}/${taskchildpictureid}`,
method: 'get',
params,
})
@ -94,23 +79,18 @@ export async function getPictureSimilarityList(params: PageParam & PictureSortPa
const { data: { records, pages, total } } = res
// 精简一下数据
const list = records.map((item,index) => {
const list = records.map((item) => {
return {
id: item.id,
checkDuplicateId: item.checkDuplicateId,
taskId: item.taskId,
taskname: item.fromTaskName,
taskname: item.fromtaskname,
assignee: item.assignee,
pictureid: item.pictureid,
imgurl: item.serverThumbnailUrl,
maxSimilarity: item.maxSimilarity,
thumburl: item.ocrPicture?.serverThumbnailUrl || item.ocrPicture?.imgurl,
imgurl: item.ocrPicture.imgurl,
thumburl: item.ocrPicture.serverThumbnailUrl || item.ocrPicture.imgurl,
iztrueorfalse: item.iztrueorfalse,
states: item.states,
history: item.ocpictureid && item.picturecompare && hasHistory(item.ocpictureid, item.picturecompare),
historyStates:item.historyStates,
submitDateTimestamp:item.submitDateTimestamp,
photoDateTimestamp:item.photoDateTimestamp,
history: hasHistory(item.ocpictureid, item.picturecompare),
}
})
return {
@ -167,42 +147,3 @@ export async function sort(id: string): Promise<any> {
params: { packageid: id },
})
}
/**
*
* @param id
* @returns
*/
export async function toolsCount(id: string): Promise<any> {
return await http.request({
url: `/ocr/aitools/toolsCount`,
method: 'get',
params: { packageid: id },
})
}
/**
* ai
* @param id
* @returns
*/
export async function aiApprovaltools(params): Promise<any> {
return await http.request({
url: `/ocr/aitools/aiApprovaltools`,
method: 'get',
params,
})
}
/**
* ai
* @param id
* @returns
*/
export async function aiApprovaltoolsClearmark(params): Promise<any> {
return await http.request({
url: `/ocr/aitools/aiApprovaltoolsClearmark`,
method: 'get',
params,
})
}

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64px" height="64px" viewBox="0 0 64 64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>排序</title>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="PrevailCloud-Design-图标集" transform="translate(-664.000000, -7071.000000)" fill-rule="nonzero">
<g id="排序" transform="translate(664.000000, 7071.000000)">
<rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="64" height="64"></rect>
<path d="M26.7875,57.7625 L6,38.71875 L10.2375,34.09375 L20.5125,43.5 L20.5125,6.89375 L26.7875,6.89375 L26.7875,57.7625 Z M43.4875,57.10625 L37.2125,57.10625 L37.2125,6.2375 L58,25.28125 L53.7625,29.90625 L43.4875,20.5 L43.4875,57.10625 Z" id="形状" fill="#507AFD"></path>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 927 B

@ -1,19 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="65px" height="65px" viewBox="0 0 65 65" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>编组 11</title>
<g id="图审审批" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="3.0生成成功提示" transform="translate(-599.000000, -429.000000)" fill="#507AFD">
<g id="编组-28" transform="translate(518.000000, 322.000000)">
<g id="编组-19" transform="translate(80.000000, 107.000000)">
<g id="编组-11" transform="translate(1.000000, 0.000000)">
<circle id="椭圆形" fill-opacity="0.1" cx="32.5" cy="32.5" r="32.5"></circle>
<g id="图文详情" transform="translate(18.000000, 18.000000)" fill-rule="nonzero">
<rect id="矩形" opacity="0" x="0" y="0" width="28" height="28"></rect>
<path d="M7.084,8.288 C7.644,8.288 8.12466667,8.48866667 8.526,8.89 C8.92733333,9.29133333 9.128,9.78133333 9.128,10.36 C9.128,10.92 8.92733333,11.4006667 8.526,11.802 C8.12466667,12.2033333 7.644,12.404 7.084,12.404 C6.50533333,12.404 6.02,12.2033333 5.628,11.802 C5.236,11.4006667 5.04,10.92 5.04,10.36 C5.04,9.78133333 5.236,9.29133333 5.628,8.89 C6.02,8.48866667 6.50533333,8.288 7.084,8.288 Z M23.632,1.568 C24.416,1.568 25.046,1.82933333 25.522,2.352 C25.998,2.87466667 26.236,3.472 26.236,4.144 L26.236,19.208 C26.236,19.6373333 26.082,20.0013333 25.774,20.3 C25.466,20.5986667 25.0973333,20.748 24.668,20.748 L22.736,20.748 L22.736,17.36 L23.94,17.36 C24.1453333,17.36 24.3226667,17.2853333 24.472,17.136 C24.6213333,16.9866667 24.696,16.8 24.696,16.576 C24.696,16.3706667 24.6213333,16.1933333 24.472,16.044 C24.3226667,15.8946667 24.1453333,15.82 23.94,15.82 L22.736,15.82 L22.736,13.636 L23.94,13.636 C24.1453333,13.636 24.3226667,13.5613333 24.472,13.412 C24.6213333,13.2626667 24.696,13.0853333 24.696,12.88 C24.696,12.6746667 24.6213333,12.4926667 24.472,12.334 C24.3226667,12.1753333 24.1453333,12.096 23.94,12.096 L22.736,12.096 L22.736,10.108 L23.94,10.108 C24.1453333,10.108 24.3226667,10.0333333 24.472,9.884 C24.6213333,9.73466667 24.696,9.548 24.696,9.324 C24.696,9.11866667 24.6213333,8.94133333 24.472,8.792 C24.3226667,8.64266667 24.1453333,8.568 23.94,8.568 L22.736,8.568 L22.736,6.216 C22.736,5.17066667 22.4933333,4.43333333 22.008,4.004 C21.5226667,3.57466667 20.7013333,3.36 19.544,3.36 L8.764,3.36 L8.764,3.108 C8.764,2.67866667 8.918,2.31466667 9.226,2.016 C9.534,1.71733333 9.90266667,1.568 10.332,1.568 L23.632,1.568 Z M18.928,5.04 C19.656,5.04 20.1833333,5.25 20.51,5.67 C20.8366667,6.09 21,6.636 21,7.308 L21,22.764 C21,23.1933333 20.8226667,23.59 20.468,23.954 C20.1133333,24.318 19.6746667,24.5 19.152,24.5 L3.5,24.5 C3.052,24.5 2.65066667,24.3133333 2.296,23.94 C1.94133333,23.5666667 1.764,23.128 1.764,22.624 L1.764,6.888 C1.764,6.34666667 1.91333333,5.90333333 2.212,5.558 C2.51066667,5.21266667 2.90266667,5.04 3.388,5.04 L18.928,5.04 L18.928,5.04 Z M19.236,7.98 C19.236,7.66266667 19.138,7.38733333 18.942,7.154 C18.746,6.92066667 18.4333333,6.804 18.004,6.804 L4.648,6.804 C4.57333333,6.804 4.47066667,6.818 4.34,6.846 C4.20933333,6.874 4.07866667,6.92066667 3.948,6.986 C3.81733333,7.05133333 3.70533333,7.14 3.612,7.252 C3.51866667,7.364 3.472,7.504 3.472,7.672 L3.472,15.176 C3.62133333,15.344 3.83133333,15.5446667 4.102,15.778 C4.37266667,16.0113333 4.69,16.226 5.054,16.422 C5.418,16.618 5.824,16.786 6.272,16.926 C6.72,17.066 7.20533333,17.136 7.728,17.136 C8.512,17.136 9.198,17.01 9.786,16.758 C10.374,16.506 10.92,16.1886667 11.424,15.806 C11.928,15.4233333 12.4226667,15.0126667 12.908,14.574 C13.3933333,14.1353333 13.93,13.72 14.518,13.328 C15.106,12.936 15.778,12.6046667 16.534,12.334 C17.29,12.0633333 18.1906667,11.9093333 19.236,11.872 L19.236,7.98 Z" id="形状"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.9 KiB

@ -1,20 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="65px" height="65px" viewBox="0 0 65 65" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>编组 33</title>
<g id="图审审批" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="3.0生成成功提示" transform="translate(-788.000000, -429.000000)">
<g id="编组-28" transform="translate(518.000000, 322.000000)">
<g id="编组-30" transform="translate(269.000000, 107.000000)">
<g id="编组-33" transform="translate(1.000000, 0.000000)">
<circle id="椭圆形备份" fill="#EDF1FE" cx="32.5" cy="32.5" r="32.5"></circle>
<g id="审批" transform="translate(17.000000, 18.000000)" fill="#507AFD" fill-rule="nonzero">
<rect id="矩形" opacity="0" x="0" y="0" width="30" height="30"></rect>
<path d="M15.7625,22.2125 L16.775,20.95 C16.1125,20.15 15.7125,19.125 15.7125,18.025 C15.7125,15.5 17.775,13.4375 20.3125,13.4375 C21.675,13.4375 22.9125,14.0375 23.75,14.975 L23.75,3.96249999 C23.75,3.13749999 23.075,2.46249999 22.25,2.46249999 L6,2.46249999 C5.175,2.46249999 4.5,3.13749999 4.5,3.96249999 L4.5,23.4625 C4.5,24.2875 5.175,24.9625 6,24.9625 L13.2125,24.9625 C13.525,23.65 14.5,22.6 15.7625,22.2125 Z M9.8875,6 L18.3875,6 C18.9375,6 19.3875,6.45 19.3875,7 C19.3875,7.54999998 18.9375,8 18.3875,8 L9.8875,8 C9.3375,8 8.8875,7.55000001 8.8875,7 C8.8875,6.44999997 9.32499999,6 9.8875,6 Z M9.8875,10.5 L18.3875,10.5 C18.9375,10.5 19.3875,10.95 19.3875,11.5 C19.3875,12.05 18.9375,12.5 18.3875,12.5 L9.8875,12.5 C9.3375,12.5 8.8875,12.05 8.8875,11.5 C8.8875,10.95 9.32499999,10.5 9.8875,10.5 Z M8.8875,16 C8.8875,15.45 9.3375,15 9.8875,15 L13.3875,15 C13.9375,15 14.3875,15.45 14.3875,16 C14.3875,16.55 13.9375,17 13.3875,17 L9.8875,17 C9.32499999,17 8.8875,16.55 8.8875,16 Z" id="形状"></path>
<path d="M23.7625,27.5 L16.85,27.5 C15.9,27.5 15.125,26.725 15.125,25.775 C15.125,24.825 15.9,24.05 16.85,24.05 L19.6875,20.525 C18.55,20.25 17.7125,19.2375 17.7125,18.025 C17.7125,16.6 18.875,15.4375 20.3125,15.4375 C21.75,15.4375 22.9125,16.6 22.9125,18.025 C22.9125,19.2375 22.075,20.25 20.9375,20.525 L23.775,24.05 C24.725,24.05 25.5,24.825 25.5,25.775 C25.5,26.725 24.725,27.5 23.7625,27.5 L23.7625,27.5 Z" id="路径"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.5 KiB

@ -1 +1,25 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1711414535036" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7149" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48"><path d="M938.672 0A85.328 85.328 0 0 1 1024 85.328v853.344A85.328 85.328 0 0 1 938.672 1024H85.328A85.328 85.328 0 0 1 0 938.672V85.328A85.328 85.328 0 0 1 85.328 0h853.344z m0 42.672H85.328a42.672 42.672 0 0 0-42.576 39.968l-0.08 2.688v853.344a42.672 42.672 0 0 0 39.968 42.576l2.688 0.08h853.344a42.672 42.672 0 0 0 42.576-39.968l0.08-2.688V85.328a42.672 42.672 0 0 0-39.968-42.576l-2.688-0.08z" fill="#CFE4FF" p-id="7150"></path><path d="M384.192 522.352c0.256 5.088 2.336 10.096 6.224 13.984l8.96 8.96c0.736 0.752 1.52 1.44 2.352 2.048L611.472 757.04a10.672 10.672 0 0 0 15.072 0l24.048-24.048a10.672 10.672 0 0 0 0-15.072L453.76 521.072 650.592 324.24a10.672 10.672 0 0 0 1.12-13.76l-1.12-1.328-24.048-24.032a10.672 10.672 0 0 0-15.072 0l-209.76 209.696c-0.8 0.624-1.6 1.296-2.352 2.048l-8.96 8.96c-3.872 3.888-5.952 8.896-6.208 13.984z" fill="#1880FF" p-id="7151"></path></svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64px" height="64px" viewBox="0 0 64 64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>切换_左</title>
<defs>
<rect id="path-1" x="0" y="0" width="37.3333333" height="37.3333333"></rect>
</defs>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="PrevailCloud-Design-图标集" transform="translate(-664.000000, -4463.000000)">
<g id="切换_左" transform="translate(664.000000, 4463.000000)">
<rect id="矩形备份-2" stroke="#CFE4FF" stroke-width="2.66666667" x="1.33333333" y="1.33333333" width="61.3333333" height="61.3333333" rx="5.33333333"></rect>
<g id="箭头备份" transform="translate(32.000000, 32.000000) scale(-1, 1) rotate(-270.000000) translate(-32.000000, -32.000000) translate(13.333333, 13.333333)">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<g id="蒙版"></g>
<g id="编组" mask="url(#mask-2)" fill="#1980FF">
<g transform="translate(4.360436, 8.660698)" id="形状结合">
<path d="M6.52026692,8.34350016 C6.53646644,8.02535456 6.66606265,7.711906 6.90905555,7.46891311 L6.90905555,7.46891311 L7.46891311,6.90905555 C7.51559647,6.86237218 7.56488031,6.81987422 7.61629834,6.78156167 L20.7250613,-6.32500477 C20.9854108,-6.5853543 21.4075208,-6.5853543 21.6678703,-6.32500477 L23.1705369,-4.82233817 C23.4308865,-4.56198864 23.4308865,-4.13987866 23.1705369,-3.87952913 L10.8682669,8.42273308 L23.1705369,20.7250613 C23.4048515,20.9593759 23.428283,21.3247164 23.2408313,21.5852362 L23.1705369,21.6678703 L21.6678703,23.1705369 C21.4075208,23.4308865 20.9854108,23.4308865 20.7250613,23.1705369 L20.7250613,23.1705369 L7.61629834,10.0639705 C7.56488031,10.0256579 7.51559647,9.98315998 7.46891311,9.93647662 L6.90905555,9.37661906 C6.66606265,9.13362617 6.53646644,8.82017761 6.52026692,8.50203201 Z" transform="translate(14.943033, 8.422766) scale(-1, -1) rotate(-90.000000) translate(-14.943033, -8.422766) "></path>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

@ -1 +1,25 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1711414527948" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6999" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48"><path d="M938.672 0A85.328 85.328 0 0 1 1024 85.328v853.344A85.328 85.328 0 0 1 938.672 1024H85.328A85.328 85.328 0 0 1 0 938.672V85.328A85.328 85.328 0 0 1 85.328 0h853.344z m0 42.672H85.328a42.672 42.672 0 0 0-42.576 39.968l-0.08 2.688v853.344a42.672 42.672 0 0 0 39.968 42.576l2.688 0.08h853.344a42.672 42.672 0 0 0 42.576-39.968l0.08-2.688V85.328a42.672 42.672 0 0 0-39.968-42.576l-2.688-0.08z" fill="#CFE4FF" p-id="7000"></path><path d="M653.712 522.352c-0.256 5.088-2.336 10.096-6.208 13.984l-8.96 8.96c-0.752 0.752-1.536 1.44-2.368 2.048l-209.744 209.696c-4.16 4.16-10.912 4.16-15.072 0L387.312 733.008a10.672 10.672 0 0 1 0-15.072L584.144 521.072 387.312 324.24a10.672 10.672 0 0 1-1.12-13.76l1.12-1.328 24.048-24.032a10.672 10.672 0 0 1 15.072 0l209.76 209.696c0.8 0.624 1.6 1.296 2.352 2.048l8.96 8.96c3.872 3.888 5.952 8.896 6.208 13.984z" fill="#1880FF" p-id="7001"></path></svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64px" height="64px" viewBox="0 0 64 64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>切换_右</title>
<defs>
<rect id="path-1" x="0" y="0" width="37.3333333" height="37.3333333"></rect>
</defs>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="PrevailCloud-Design-图标集" transform="translate(-928.000000, -4463.000000)">
<g id="切换_右" transform="translate(928.000000, 4463.000000)">
<g id="箭头" transform="translate(32.000000, 32.000000) rotate(-270.000000) translate(-32.000000, -32.000000) translate(13.333333, 13.333333)">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<g id="蒙版"></g>
<g id="编组" mask="url(#mask-2)" fill="#1880FF">
<g transform="translate(4.291360, 9.809710)" id="形状结合">
<path d="M6.52026692,8.34350016 C6.53646644,8.02535456 6.66606265,7.711906 6.90905555,7.46891311 L6.90905555,7.46891311 L7.46891311,6.90905555 C7.51559647,6.86237218 7.56488031,6.81987422 7.61629834,6.78156167 L20.7250613,-6.32500477 C20.9854108,-6.5853543 21.4075208,-6.5853543 21.6678703,-6.32500477 L23.1705369,-4.82233817 C23.4308865,-4.56198864 23.4308865,-4.13987866 23.1705369,-3.87952913 L10.8682669,8.42273308 L23.1705369,20.7250613 C23.4048515,20.9593759 23.428283,21.3247164 23.2408313,21.5852362 L23.1705369,21.6678703 L21.6678703,23.1705369 C21.4075208,23.4308865 20.9854108,23.4308865 20.7250613,23.1705369 L20.7250613,23.1705369 L7.61629834,10.0639705 C7.56488031,10.0256579 7.51559647,9.98315998 7.46891311,9.93647662 L6.90905555,9.37661906 C6.66606265,9.13362617 6.53646644,8.82017761 6.52026692,8.50203201 Z" transform="translate(14.943033, 8.422766) scale(-1, -1) rotate(-90.000000) translate(-14.943033, -8.422766) "></path>
</g>
</g>
</g>
<rect id="矩形" stroke="#CFE4FF" stroke-width="2.66666667" x="1.33333333" y="1.33333333" width="61.3333333" height="61.3333333" rx="5.33333333"></rect>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

@ -1,36 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="96px" height="96px" viewBox="0 0 96 96" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>批量审批</title>
<defs>
<rect id="path-1" x="0" y="0" width="96" height="96"></rect>
<linearGradient x1="-22.3619338%" y1="76.1321669%" x2="117.972308%" y2="50%" id="linearGradient-3">
<stop stop-color="#FFFFFF" offset="0%"></stop>
<stop stop-color="#FFFFFF" stop-opacity="0" offset="100%"></stop>
</linearGradient>
<filter x="-122.7%" y="-69.2%" width="345.5%" height="238.5%" filterUnits="objectBoundingBox" id="filter-4">
<feGaussianBlur stdDeviation="9.55102041" in="SourceGraphic"></feGaussianBlur>
</filter>
<linearGradient x1="14.9908397%" y1="-71.2671%" x2="47.6080819%" y2="303.1339%" id="linearGradient-5">
<stop stop-color="#FFFFFF" offset="0%"></stop>
<stop stop-color="#F1FFF6" offset="100%"></stop>
</linearGradient>
</defs>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="无法上传iconfont" transform="translate(-392.000000, -80.000000)">
<g id="批量审批" transform="translate(392.000000, 80.000000)">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<g id="路径"></g>
<g id="Group-1822" mask="url(#mask-2)">
<g transform="translate(6.368194, 19.102041)">
<path d="M49.463055,49.6015194 L49.463055,24.323152 C49.463055,20.3860092 46.2687692,17.1917235 42.3316264,17.1917235 L39.583055,17.1917235 L39.583055,18.5713153 L39.5724427,18.645601 C39.540606,20.1843765 38.2777488,21.4260092 36.7283611,21.4260092 L19.8336672,21.4260092 L19.7699937,21.4260092 C18.220606,21.3941725 16.9789733,20.1313153 16.9789733,18.5713153 L16.9789733,17.1917235 L14.2304019,17.1917235 C10.293259,17.1917235 7.09897333,20.3860092 7.09897333,24.323152 L7.09897333,49.6015194 C7.09897333,53.5386623 10.293259,56.732948 14.2304019,56.732948 L42.3316264,56.732948 C46.2687692,56.732948 49.463055,53.5386623 49.463055,49.6015194 Z" id="Union" stroke="none" fill-opacity="0.600000024" fill="#F4FFF8" transform="translate(28.281014, 36.962336) rotate(-30.460000) translate(-28.281014, -36.962336) "></path>
<path d="M35.8342197,7.32322251 L35.8342197,10.2829337 C35.8342197,11.0044191 36.1111226,11.6607322 36.5650893,12.1512141 C37.0143978,12.636663 37.6367523,12.960043 38.3350711,13.0234495 L38.3350711,13.0234495 L61.3588209,13.0336572 C62.0803063,13.0336572 62.7366194,12.7567544 63.2271013,12.3027877 C63.7130458,11.8530205 64.0365903,11.2298538 64.09953,10.5306669 L64.09953,10.5306669 L64.1146901,7.32426948 L68.9147392,7.32426948 C71.8137163,7.32426948 74.4453735,8.47911287 76.3740413,10.3536539 C78.3118962,12.2371241 79.5396361,14.8470931 79.6165151,17.7413959 L79.6165151,17.7413959 L79.6203422,52.1057908 C79.6203422,55.0047678 78.4654988,57.6364251 76.5909578,59.5650929 C74.7074862,61.5029492 72.0975148,62.7306895 69.2032095,62.8075669 L69.2032095,62.8075669 L31.0290249,62.8113938 C28.1300479,62.8113938 25.4983906,61.6565504 23.5697229,59.7820094 C21.631868,57.8985391 20.4041281,55.2885701 20.327249,52.3942673 L20.327249,52.3942673 L20.323422,18.0298724 C20.323422,15.1308954 21.4782654,12.4992381 23.3528064,10.5705704 C25.2361737,8.63282142 27.8459603,7.40510979 30.7400738,7.32810915 L30.7400738,7.32810915 L35.8342197,7.32322251 Z M57.5494395,-1.09090909 C59.14008,-1.09090909 60.313592,-0.652974173 61.12441,0.1087034 C61.9490359,0.883351956 62.4414688,2.02617884 62.4888004,3.59725381 L62.4888004,3.59725381 L62.4925935,5.66693878 C62.4925935,7.25757933 62.0546586,8.43109126 61.292981,9.24190932 C60.5181849,10.0666922 59.3750704,10.5591556 57.8035332,10.6063267 L57.8035332,10.6063267 L42.405766,10.6100928 C40.8151255,10.6100928 39.6416135,10.1721578 38.8307955,9.41048027 C38.0061696,8.63583172 37.5137367,7.49300484 37.4664051,5.92192987 L37.4664051,5.92192987 L37.462612,3.8522449 C37.462612,2.26160435 37.9005469,1.08809242 38.6622245,0.277274355 C39.4370206,-0.547508531 40.5801351,-1.03997191 42.1516723,-1.08714299 L42.1516723,-1.08714299 Z" id="Union" stroke="url(#linearGradient-3)" stroke-width="2.18181818" fill-opacity="0.35" fill="#FCFCFC"></path>
<path d="M23.420377,36.9093878 C23.9191525,48.6146939 23.9191525,58.7918367 25.9142545,60.3093878 C27.9093566,61.837551 41.8750709,53.1885714 45.8652749,44.5395918 C49.0595607,37.6204082 42.2146627,24.6946939 38.3836423,19.1020408 L24.9167035,22.1583673 C24.2587443,23.1771429 23.0277239,27.5493878 23.420377,36.9093878 Z" id="路径" stroke="none" fill="#C1D7FF" filter="url(#filter-4)"></path>
<path d="M47.2331446,39.7010427 L47.2331446,36.3914559 C44.8150436,35.3332024 43.1250841,32.9174856 43.1250841,30.1155683 C43.1250841,26.3342271 46.1981823,23.268801 49.9718515,23.268801 C53.7531928,23.268801 56.8186189,26.342052 56.8186189,30.1155683 C56.8186189,32.9219483 55.1259085,35.333936 52.7105585,36.3911503 L52.7105585,39.7010427 L58.8687367,39.7010427 C60.7615316,39.7010427 62.2960328,41.2206582 62.2960328,43.1245181 L62.2960328,46.54781 L37.6477314,46.54781 L37.6477314,43.1243652 C37.6477314,41.2337099 39.1895989,39.7010427 41.0749664,39.7010427 L47.2331446,39.7010427 L47.2331446,39.7010427 Z M39.0170543,47.9171635 L60.9265265,47.9171635 L60.9265265,50.6558705 L39.0170543,50.6558705 L39.0170543,47.9171635 L39.0170543,47.9171635 Z" id="形状" stroke="none" fill="url(#linearGradient-5)"></path>
</g>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 5.7 KiB

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1711545475852" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5038" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48"><path d="M587.474824 170.646588c26.262588 0 50.356706 14.637176 62.403764 37.948236l40.478118 78.185411h155.407059c38.851765 0 70.294588 31.442824 70.294588 70.294589v446.042352c0 38.851765-31.442824 70.294588-70.294588 70.294589H180.705882a70.294588 70.294588 0 0 1-70.294588-70.294589V357.074824c0-38.851765 31.503059-70.294588 70.294588-70.294589h153.6l38.912-77.402353a70.294588 70.294588 0 0 1 62.765177-38.731294h151.491765z m0 60.235294H435.983059a10.059294 10.059294 0 0 0-8.975059 5.541647l-47.224471 93.967059a30.117647 30.117647 0 0 1-26.925176 16.624941H180.705882a10.059294 10.059294 0 0 0-10.059294 10.059295v446.042352c0 5.541647 4.517647 10.059294 10.059294 10.059295h665.057883a10.059294 10.059294 0 0 0 10.059294-10.059295V357.074824a10.059294 10.059294 0 0 0-10.059294-10.059295h-173.718589a30.117647 30.117647 0 0 1-26.74447-16.263529l-48.911059-94.448941a10.059294 10.059294 0 0 0-8.914823-5.421177zM511.457882 412.009412a150.588235 150.588235 0 1 1 0 301.17647 150.588235 150.588235 0 0 1 0-301.17647z m0 60.235294a90.352941 90.352941 0 1 0 0 180.705882 90.352941 90.352941 0 0 0 0-180.705882z m311.235765-271.058824a30.117647 30.117647 0 1 1 0 60.235294h-60.235294a30.117647 30.117647 0 1 1 0-60.235294h60.235294z" p-id="5039" fill="#ffffff"></path></svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 16 16"><g fill="white"><path d="M15 12a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V6a1 1 0 0 1 1-1h1.172a3 3 0 0 0 2.12-.879l.83-.828A1 1 0 0 1 6.827 3h2.344a1 1 0 0 1 .707.293l.828.828A3 3 0 0 0 12.828 5H14a1 1 0 0 1 1 1zM2 4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2h-1.172a2 2 0 0 1-1.414-.586l-.828-.828A2 2 0 0 0 9.172 2H6.828a2 2 0 0 0-1.414.586l-.828.828A2 2 0 0 1 3.172 4z"/><path d="M8 11a2.5 2.5 0 1 1 0-5a2.5 2.5 0 0 1 0 5m0 1a3.5 3.5 0 1 0 0-7a3.5 3.5 0 0 0 0 7M3 6.5a.5.5 0 1 1-1 0a.5.5 0 0 1 1 0"/></g></svg>

Before

Width:  |  Height:  |  Size: 607 B

@ -1,23 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64px" height="64px" viewBox="0 0 64 64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>关闭</title>
<defs>
<rect id="path-1" x="0" y="0" width="64" height="64"></rect>
</defs>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="PrevailCloud-Design-图标集" transform="translate(-2512.000000, -4463.000000)">
<g id="关闭" transform="translate(2512.000000, 4463.000000)">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<g id="蒙版"></g>
<g id="编组-39" mask="url(#mask-2)">
<g transform="translate(8.000000, 8.000000)">
<rect id="矩形" fill="none" x="0" y="0" width="48" height="48"></rect>
<path d="M6.69150312,3.16140864 L23.9995365,20.4685365 L41.3084969,3.16140864 C41.6628011,2.80710441 42.2203082,2.77985024 42.6058744,3.07964613 L42.6984668,3.16140864 L44.8385914,5.30153325 C45.2224209,5.68536283 45.2224209,6.30767353 44.8385914,6.69150312 L44.8385914,6.69150312 L27.5295365,23.9995365 L44.8385914,41.3084969 C45.2224209,41.6923265 45.2224209,42.3146372 44.8385914,42.6984668 L42.6984668,44.8385914 C42.3146372,45.2224209 41.6923265,45.2224209 41.3084969,44.8385914 L23.9995365,27.5295365 L6.69150312,44.8385914 C6.33719889,45.1928956 5.77969181,45.2201498 5.3941256,44.9203539 L5.30153325,44.8385914 L3.16140864,42.6984668 C2.77757906,42.3146372 2.77757906,41.6923265 3.16140864,41.3084969 L3.16140864,41.3084969 L20.4685365,23.9995365 L3.16140864,6.69150312 C2.77757906,6.30767353 2.77757906,5.68536283 3.16140864,5.30153325 L5.30153325,3.16140864 C5.68536283,2.77757906 6.30767353,2.77757906 6.69150312,3.16140864 Z" id="形状结合" fill="#666666" fill-rule="evenodd"></path>
</g>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.0 KiB

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1711433938252" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7299" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48"><path d="M512 64c247.424 0 448 200.576 448 448S759.424 960 512 960 64 759.424 64 512 264.576 64 512 64z m0 80C308.752 144 144 308.752 144 512s164.752 368 368 368 368-164.752 368-368S715.248 144 512 144z m158.896 182.592l1.52 1.328 22.688 22.56a16 16 0 0 1 0.064 22.624L557.12 512l138.048 138.88a16 16 0 0 1 1.28 21.136l-1.344 1.504-22.688 22.56a16 16 0 0 1-22.64-0.064L512 557.392l-137.776 138.624a16 16 0 0 1-21.12 1.392l-1.52-1.328-22.688-22.56a16 16 0 0 1-1.392-21.12l1.328-1.504L466.88 512l-138.048-138.88a16 16 0 0 1-1.28-21.136l1.344-1.504 22.688-22.56a16 16 0 0 1 21.12-1.28l1.52 1.344L512 466.608l137.792-138.624a16 16 0 0 1 21.12-1.392z" p-id="7300" fill="#ffffff"></path></svg>

Before

Width:  |  Height:  |  Size: 1009 B

@ -1,18 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64px" height="64px" viewBox="0 0 64 64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>自定义列</title>
<defs>
<rect id="path-1" x="0" y="0" width="64" height="64"></rect>
</defs>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="PrevailCloud-Design-图标集" transform="translate(-1986.000000, -6758.000000)">
<g id="自定义列" transform="translate(1986.000000, 6758.000000)">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<g id="蒙版"></g>
<path d="M36.9854854,42.6064492 C37.5377701,42.6064492 37.9854854,43.0541645 37.9854854,43.6064492 L37.9854854,56 C37.9854854,56.5522847 37.5377701,57 36.9854854,57 L33.9854854,57 C33.4332006,57 32.9854854,56.5522847 32.9854854,56 L32.985,52.303 L7,52.3032246 C6.44771525,52.3032246 6,51.8555094 6,51.3032246 L6,48.3032246 C6,47.7509399 6.44771525,47.3032246 7,47.3032246 L32.985,47.303 L32.9854854,43.6064492 C32.9854854,43.0541645 33.4332006,42.6064492 33.9854854,42.6064492 L36.9854854,42.6064492 Z M54.4637884,47.3032246 C55.0160731,47.3032246 55.4637884,47.7509399 55.4637884,48.3032246 L55.4637884,51.3032246 C55.4637884,51.8555094 55.0160731,52.3032246 54.4637884,52.3032246 L44.6371044,52.3032246 C44.0848196,52.3032246 43.6371044,51.8555094 43.6371044,51.3032246 L43.6371044,48.3032246 C43.6371044,47.7509399 44.0848196,47.3032246 44.6371044,47.3032246 L54.4637884,47.3032246 Z M29.8824782,24.8032246 C30.4347629,24.8032246 30.8824782,25.2509399 30.8824782,25.8032246 L30.882,29.5 L57,29.5 C57.5522847,29.5 58,29.9477153 58,30.5 L58,33.5 C58,34.0522847 57.5522847,34.5 57,34.5 L30.882,34.5 L30.8824782,38.1967754 C30.8824782,38.7490601 30.4347629,39.1967754 29.8824782,39.1967754 L26.8824782,39.1967754 C26.3301934,39.1967754 25.8824782,38.7490601 25.8824782,38.1967754 L25.8824782,25.8032246 C25.8824782,25.2509399 26.3301934,24.8032246 26.8824782,24.8032246 L29.8824782,24.8032246 Z M19.2308592,29.5 C19.7831439,29.5 20.2308592,29.9477153 20.2308592,30.5 L20.2308592,33.5 C20.2308592,34.0522847 19.7831439,34.5 19.2308592,34.5 L7,34.5 C6.44771525,34.5 6,34.0522847 6,33.5 L6,30.5 C6,29.9477153 6.44771525,29.5 7,29.5 L19.2308592,29.5 Z M36.9854854,7 C37.5377701,7 37.9854854,7.44771525 37.9854854,8 L37.9854854,20.3935508 C37.9854854,20.9458355 37.5377701,21.3935508 36.9854854,21.3935508 L33.9854854,21.3935508 C33.4332006,21.3935508 32.9854854,20.9458355 32.9854854,20.3935508 L32.985,16.696 L7,16.6967754 C6.44771525,16.6967754 6,16.2490601 6,15.6967754 L6,12.6967754 C6,12.1444906 6.44771525,11.6967754 7,11.6967754 L32.985,11.696 L32.9854854,8 C32.9854854,7.44771525 33.4332006,7 33.9854854,7 L36.9854854,7 Z M54.4637884,11.6967754 C55.0160731,11.6967754 55.4637884,12.1444906 55.4637884,12.6967754 L55.4637884,15.6967754 C55.4637884,16.2490601 55.0160731,16.6967754 54.4637884,16.6967754 L44.6371044,16.6967754 C44.0848196,16.6967754 43.6371044,16.2490601 43.6371044,15.6967754 L43.6371044,12.6967754 C43.6371044,12.1444906 44.0848196,11.6967754 44.6371044,11.6967754 L54.4637884,11.6967754 Z" id="形状结合" fill="#666666" fill-rule="nonzero" mask="url(#mask-2)"></path>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.3 KiB

@ -1,32 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>编组 13</title>
<defs>
<rect id="path-1" x="0" y="0" width="15.7538462" height="15.7538462"></rect>
</defs>
<g id="index" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="异步查重" transform="translate(-1352.000000, -938.000000)">
<g id="编组-25" transform="translate(1064.000000, 919.000000)">
<g id="编组-14" transform="translate(256.000000, 19.000000)">
<g id="收起" transform="translate(40.000000, 8.000000) scale(-1, 1) rotate(-90.000000) translate(-40.000000, -8.000000) translate(32.000000, 0.000000)">
<g id="编组-13" transform="translate(0.123077, 0.123077)">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<g id="蒙版"></g>
<g id="编组-11" mask="url(#mask-2)">
<g transform="translate(1.741980, 1.461539)">
<rect id="矩形" fill="#666666" transform="translate(0.729021, 6.415385) rotate(-270.000000) translate(-0.729021, -6.415385) " x="-5.68636353" y="5.68636353" width="12.830769" height="1.45804193" rx="0.291608386"></rect>
<g id="编组" stroke-width="1" fill="none" transform="translate(8.478978, 6.415385) scale(-1, 1) translate(-8.478978, -6.415385) translate(4.688069, 0.000000)">
<rect id="矩形" transform="translate(3.790909, 6.415384) scale(-1, -1) rotate(-180.000000) translate(-3.790909, -6.415384) " x="0" y="0" width="7.58181805" height="12.830769"></rect>
<path d="M0.201793759,6.3610837 C0.213041182,6.22879799 0.269278297,6.09961817 0.370505105,5.99839136 L0.370505105,5.99839136 L0.563544402,5.80535207 C0.57979068,5.78910579 0.596756979,5.77401837 0.61434058,5.7600898 L6.09088579,0.287203877 C6.20476595,0.173323719 6.38940217,0.173323719 6.50328233,0.287203877 L7.10871816,0.89263971 C7.22259832,1.00651987 7.22259832,1.19115609 7.10871816,1.30503624 L1.99779376,6.41479376 L7.10871816,11.5257328 C7.20632972,11.6233443 7.22027423,11.7729399 7.15055169,11.8854041 L7.10871816,11.9381293 L6.50328233,12.5435651 C6.38940217,12.6574453 6.20476595,12.6574453 6.09088579,12.5435651 L6.09088579,12.5435651 L0.618409245,7.07387291 C0.599371439,7.05906492 0.581040393,7.04291292 0.563544402,7.02541693 L0.370505105,6.83237764 C0.269278297,6.73115083 0.213041182,6.60197101 0.201793759,6.4696853 Z" id="形状结合" fill="#666666" transform="translate(3.697961, 6.415384) scale(1, -1) rotate(-180.000000) translate(-3.697961, -6.415384) "></path>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.1 KiB

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1711356174084" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6298" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48"><path d="M608 112a16 16 0 0 1 16 16v48A16 16 0 0 1 608 192L192 192.064V832h640V416a16 16 0 0 1 16-16H896a16 16 0 0 1 16 16v464a32 32 0 0 1-32 32H144a32 32 0 0 1-32-32V144a32 32 0 0 1 32-32H608z m236.16 11.328a16 16 0 0 1 22.592 0l33.92 33.92a16 16 0 0 1 0 22.656l-452.48 452.48a16 16 0 0 1-22.656 0l-33.92-33.92a16 16 0 0 1 0-22.592z" p-id="6299" fill="#666666"></path></svg>

Before

Width:  |  Height:  |  Size: 697 B

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="14px" height="14px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>形状</title>
<g id="登录" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="登录_1.2未输入密码提示" transform="translate(-537.000000, -488.000000)" fill="#FF4E4F">
<g id="编组-11" transform="translate(510.000000, 165.000000)">
<g id="登录" transform="translate(0.000000, 44.000000)">
<g id="Group-10" transform="translate(27.000000, 276.000000)">
<g id="警示" transform="translate(0.000000, 3.000000)">
<path d="M7,0.875 C3.61757813,0.875 0.875,3.61757813 0.875,7 C0.875,10.3824219 3.61757813,13.125 7,13.125 C10.3824219,13.125 13.125,10.3824219 13.125,7 C13.125,3.61757813 10.3824219,0.875 7,0.875 Z M6.5625,4.046875 C6.5625,3.98671875 6.61171875,3.9375 6.671875,3.9375 L7.328125,3.9375 C7.38828125,3.9375 7.4375,3.98671875 7.4375,4.046875 L7.4375,7.765625 C7.4375,7.82578125 7.38828125,7.875 7.328125,7.875 L6.671875,7.875 C6.61171875,7.875 6.5625,7.82578125 6.5625,7.765625 L6.5625,4.046875 Z M7,10.0625 C6.63769531,10.0625 6.34375,9.76855469 6.34375,9.40625 C6.34375,9.04394531 6.63769531,8.75 7,8.75 C7.36230469,8.75 7.65625,9.04394531 7.65625,9.40625 C7.65625,9.76855469 7.36230469,10.0625 7,10.0625 Z" id="形状"></path>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

@ -1,3 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 20 20">
<path fill="#f6c042" d="M2.93 17.07A10 10 0 1 1 17.07 2.93A10 10 0 0 1 2.93 17.07M9 5v6h2V5zm0 8v2h2v-2z" />
</svg>

Before

Width:  |  Height:  |  Size: 203 B

@ -1,24 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64px" height="64px" viewBox="0 0 64 64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>展开</title>
<defs>
<rect id="path-1" x="0" y="0" width="64" height="64"></rect>
</defs>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="PrevailCloud-Design-图标集" transform="translate(-2512.000000, -2179.000000)">
<g id="展开-2" transform="translate(2512.000000, 2179.000000)">
<g id="展开" transform="translate(32.000000, 32.000000) scale(-1, 1) rotate(-270.000000) translate(-32.000000, -32.000000) ">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<g id="蒙版"></g>
<g id="编组" mask="url(#mask-2)" fill="#666666">
<g transform="translate(32.398318, 32.358039) scale(-1, 1) translate(-32.398318, -32.358039) translate(18.781652, 8.065215)" id="形状结合">
<path d="M7.27477106e-13,24.1889844 C0.0208813961,23.5597929 0.271458149,22.9368064 0.75173026,22.4565343 L0.75173026,22.4565343 L1.10421929,22.1040453 C1.1915415,22.0167231 1.28358153,21.9369941 1.3795189,21.8648584 L22.8677171,0.376576996 C23.3698198,-0.125525665 24.183889,-0.125525665 24.6859917,0.376576996 L26.8567553,2.54734061 C27.358858,3.04944327 27.358858,3.86351253 26.8567553,4.36561519 L6.929,24.293 L26.8567553,44.2200322 C27.3253845,44.6886613 27.3566264,45.429048 26.9504812,45.9339115 L26.8567553,46.0383067 L24.6859917,48.2090704 C24.183889,48.711173 23.3698198,48.711173 22.8677171,48.2090704 L22.8677171,48.2090704 L1.37441953,26.7169448 C1.28031918,26.6458236 1.18999323,26.567376 1.10421929,26.4816021 L0.75173026,26.129113 C0.271458149,25.6488409 0.0208813961,25.0258544 -1.7706149e-13,24.3966629 Z" transform="translate(13.616666, 24.292824) scale(1, -1) translate(-13.616666, -24.292824) "></path>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.1 KiB

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1711092604490" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5999" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48"><path d="M446.56 836.016a73.136 73.136 0 0 0 130.88 0h95.872c-14.88 73.776-79.088 129.68-156.736 131.792l-4.576 0.064c-79.68 0-146.144-56.64-161.312-131.84h95.872zM512 54.88c181.776 0 329.136 147.36 329.136 329.136v360.592h106.304c10.096 0 18.288 8.176 18.288 18.272v54.88c0 10.08-8.192 18.272-18.288 18.272H76.56a18.288 18.288 0 0 1-18.288-18.288V762.88c0-10.08 8.192-18.272 18.288-18.272h106.288V384c0-179.92 144.384-326.128 323.6-329.104L512 54.88z m0 91.424c-129.6 0-234.976 103.712-237.664 232.672l-0.048 5.04-0.016 360.576h475.44V384c0-131.28-106.432-237.712-237.712-237.712z" fill="#333333" p-id="6000"></path><path d="M796.448 170.672m-170.672 0a170.672 170.672 0 1 0 341.344 0 170.672 170.672 0 1 0-341.344 0Z" fill="#F7534F" p-id="6001"></path></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1711952592553" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5038" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48"><path d="M178.016 592a16 16 0 0 1 16 16l-0.016 224h635.872V608a16 16 0 0 1 16-16h48a16 16 0 0 1 16 16v272a32 32 0 0 1-29.6 31.92l-2.4 0.08H146.016a32 32 0 0 1-32-32V608a16 16 0 0 1 16-16h48zM514.368 129.024c7.76 0.32 15.424 3.424 21.344 9.344l200.72 200.736a16 16 0 0 1 0 22.624l-33.936 33.936a16 16 0 0 1-22.624 0L552 267.792v394.688a16 16 0 0 1-16 16h-48a16 16 0 0 1-16-16V267.68l-127.984 128a16 16 0 0 1-22.624 0l-33.936-33.952a16 16 0 0 1 0-22.624L488.16 138.368c5.92-5.92 13.584-9.04 21.328-9.344z" p-id="5039" fill="#666666"></path></svg>

Before

Width:  |  Height:  |  Size: 866 B

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1712133750226" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5038" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48"><path d="M725.328 682.672V640h85.344v42.672h42.656V768h-42.656v42.672h-85.344V768h-42.656v-85.328h42.656zM170.672 256h682.656v85.328H170.672V256z m0 426.672h426.656V768H170.672v-85.328z m0-213.344h682.656v85.344H170.672v-85.344z" p-id="5039" fill="#444444"></path></svg>

Before

Width:  |  Height:  |  Size: 592 B

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1711952656753" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5379" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48"><path d="M184.224 514.112c80.672 145.056 199.472 227.936 327.744 227.936 128.288 0 247.088-82.88 327.808-227.936-80.72-145.056-199.536-227.872-327.792-227.872-128.288 0-247.088 82.816-327.76 227.872z m327.744 300.24c-159.28 0-310.432-106.8-404.368-285.648-4.8-9.12-4.8-20.048 0-29.184 93.92-178.848 245.12-285.632 404.368-285.632 159.28 0 310.464 106.784 404.432 285.632 4.8 9.136 4.8 20.048 0 29.184-93.968 178.848-245.152 285.648-404.432 285.648zM512 418.992c-51.696 0-93.728 42.656-93.728 95.136s42.032 95.12 93.728 95.12 93.728-42.656 93.728-95.136S563.68 418.976 512 418.976m0 255.616c-87.136 0-158.08-72-158.08-160.48 0-88.512 70.928-160.464 158.08-160.464 87.168 0 158.128 71.952 158.128 160.48 0 88.448-70.96 160.464-158.128 160.464" p-id="5380"></path></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

@ -1,23 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64px" height="64px" viewBox="0 0 64 64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>搜索</title>
<defs>
<rect id="path-1" x="0" y="0" width="64" height="64"></rect>
</defs>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="PrevailCloud-Design-图标集" transform="translate(-1456.000000, -2179.000000)">
<g id="搜索" transform="translate(1456.000000, 2179.000000)">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<g id="蒙版"></g>
<g mask="url(#mask-2)">
<g transform="translate(7.000000, 7.000000)">
<rect id="矩形" fill="none" x="0" y="0" width="50" height="50"></rect>
<path fill="#999999" d="M22.381822,0.00665233369 C34.7429609,0.00665233369 44.7636439,10.0273353 44.7636439,22.3884743 C44.7636439,27.650919 42.9474783,32.4891755 39.9077466,36.3106444 L49.7142957,46.1174007 C50.10482,46.507925 50.10482,47.1410899 49.7142957,47.5316142 L47.5316142,49.7142957 C47.1410899,50.10482 46.507925,50.10482 46.1174007,49.7142957 L36.3119993,39.9080267 C32.4892827,42.9515923 27.6479429,44.7702962 22.381822,44.7702962 C10.020683,44.7702962 0,34.7496132 0,22.3884743 C0,10.0273353 10.020683,0.00665233369 22.381822,0.00665233369 Z M22.381822,5.09343005 C12.8300328,5.09343005 5.08677772,12.8366851 5.08677772,22.3884743 C5.08677772,31.9402635 12.8300328,39.6835185 22.381822,39.6835185 C31.9336111,39.6835185 39.6768662,31.9402635 39.6768662,22.3884743 C39.6768662,12.8366851 31.9336111,5.09343005 22.381822,5.09343005 Z" id="矩形-2" fill-rule="evenodd"></path>
</g>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.9 KiB

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512"><path d="M304 192v32c0 6.6-5.4 12-12 12h-56v56c0 6.6-5.4 12-12 12h-32c-6.6 0-12-5.4-12-12v-56h-56c-6.6 0-12-5.4-12-12v-32c0-6.6 5.4-12 12-12h56v-56c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v56h56c6.6 0 12 5.4 12 12zm201 284.7L476.7 505c-9.4 9.4-24.6 9.4-33.9 0L343 405.3c-4.5-4.5-7-10.6-7-17V372c-35.3 27.6-79.7 44-128 44C93.1 416 0 322.9 0 208S93.1 0 208 0s208 93.1 208 208c0 48.3-16.4 92.7-44 128h16.3c6.4 0 12.5 2.5 17 7l99.7 99.7c9.3 9.4 9.3 24.6 0 34zM344 208c0-75.2-60.8-136-136-136S72 132.8 72 208s60.8 136 136 136s136-60.8 136-136z" fill="currentColor"></path></svg>

Before

Width:  |  Height:  |  Size: 678 B

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1711468398773" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7494" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48"><path d="M227.552 512a56.896 56.896 0 1 1 113.792 0 56.896 56.896 0 0 1-113.792 0zM512 568.896a56.896 56.896 0 1 0 0-113.792 56.896 56.896 0 0 0 0 113.792z m227.552 0a56.896 56.896 0 1 0 0-113.792 56.896 56.896 0 0 0 0 113.792z" p-id="7495" fill="#507AFD"></path></svg>

Before

Width:  |  Height:  |  Size: 591 B

@ -1,25 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="61px" height="27px" viewBox="0 0 61 27" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>不通过</title>
<defs>
<linearGradient x1="-4.97303838%" y1="41.5988857%" x2="45.6925102%" y2="55.4227602%" id="linearGradient-1">
<stop stop-color="#FF8686" offset="0%"></stop>
<stop stop-color="#FF4E4F" offset="100%"></stop>
</linearGradient>
</defs>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="PrevailCloud-Design-图标集" transform="translate(-1606.000000, -6777.000000)">
<g id="不通过-3" transform="translate(1606.000000, 6777.000000)">
<g id="不通过" transform="translate(0.500000, 0.000000)">
<polygon id="路径-5" fill="#D13333" points="3.91304348 23.0854896 0 23.0854896 3.7945822 27"></polygon>
<g id="编组-5备份">
<path d="M5.2173913,0 L54.7826087,0 C57.6640943,3.58858093e-16 60,2.33590565 60,5.2173913 L60,18.2608696 C60,21.1423552 57.6640943,23.4782609 54.7826087,23.4782609 L0,23.4782609 L0,23.4782609 L0,5.2173913 C-3.52880218e-16,2.33590565 2.33590565,-1.24703651e-15 5.2173913,0 Z" id="矩形" fill="url(#linearGradient-1)"></path>
<text id="不通过" font-family="PingFangSC-Medium, PingFang SC" font-size="14" font-weight="400" line-spacing="23.4782609" fill="#FFFFFF">
<tspan x="8.52173913" y="15">不通过</tspan>
</text>
</g>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1711092612790" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6149" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48"><path d="M446.56 836.016a73.136 73.136 0 0 0 130.88 0h95.872c-14.88 73.776-79.088 129.68-156.736 131.792l-4.576 0.064c-79.68 0-146.144-56.64-161.312-131.84h95.872zM512 54.88c181.776 0 329.136 147.36 329.136 329.136v360.592h106.304c10.096 0 18.288 8.176 18.288 18.272v54.88c0 10.08-8.192 18.272-18.288 18.272H76.56a18.288 18.288 0 0 1-18.288-18.288V762.88c0-10.08 8.192-18.272 18.288-18.272h106.288V384c0-179.92 144.384-326.128 323.6-329.104L512 54.88z m0 91.424c-129.6 0-234.976 103.712-237.664 232.672l-0.048 5.04-0.016 360.576h475.44V384c0-131.28-106.432-237.712-237.712-237.712z" p-id="6150"></path></svg>

Before

Width:  |  Height:  |  Size: 930 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 230 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 230 KiB

@ -1,23 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="54px" height="27px" viewBox="0 0 54 27" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>通过</title>
<defs>
<linearGradient x1="-31.4290365%" y1="26.5492888%" x2="57.6741536%" y2="57.6149674%" id="linearGradient-1">
<stop stop-color="#11E6BA" offset="0%"></stop>
<stop stop-color="#07C984" offset="100%"></stop>
</linearGradient>
</defs>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="PrevailCloud-Design-图标集" transform="translate(-1457.000000, -6777.000000)">
<g id="通过" transform="translate(1458.000000, 6777.000000)">
<polygon id="路径-5" fill="#004A2F" points="3.91304348 23.0854896 0 23.0854896 3.7945822 27"></polygon>
<g id="编组-5备份">
<path d="M5.2173913,0 L46.7826087,0 C49.6640943,-1.41749875e-15 52,2.33590565 52,5.2173913 L52,18.2608696 C52,21.1423552 49.6640943,23.4782609 46.7826087,23.4782609 L0,23.4782609 L0,23.4782609 L0,5.2173913 C-1.24105864e-15,2.33590565 2.33590565,-2.13521493e-15 5.2173913,0 Z" id="矩形" fill="url(#linearGradient-1)"></path>
<text id="通过" font-family="PingFangSC-Medium, PingFang SC" font-size="14" font-weight="400" line-spacing="23.4782609" fill="#FFFFFF">
<tspan x="11.5217391" y="15">通过</tspan>
</text>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>沉浸模式-开启</title>
<g id="图审审批" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="沉浸模式1.1" transform="translate(-1375.000000, -32.000000)" fill-rule="nonzero">
<g id="更多操作" transform="translate(1370.000000, 27.000000)">
<g id="沉浸模式-开启" transform="translate(5.000000, 5.000000)">
<polygon id="路径" fill-opacity="0" fill="#FFFFFF" points="0 0 20 0 20 20 0 20"></polygon>
<g id="编组" transform="translate(2.000000, 2.000000)" fill="#507AFD">
<path d="M8,16 C3.59999999,16 0,12.4444444 0,8.09876544 C0,6.22222223 0.700000007,4.34567902 2,2.86419753 C2.40000001,2.4691358 3,2.37037037 3.4,2.76543209 C3.8,3.16049383 3.89999999,3.75308642 3.5,4.14814814 C2.5,5.23456791 2,6.61728395 2,8.09876544 C2,11.3580247 4.70000001,14.0246914 8,14.0246914 C11.3,14.0246914 14,11.3580247 14,8.09876544 C14,6.61728395 13.5,5.23456791 12.5,4.14814816 C12.1,3.75308642 12.2,3.16049383 12.6,2.76543211 C13,2.37037037 13.6,2.46913581 14,2.86419755 C15.3,4.34567903 16,6.12345681 16,8.09876545 C16,12.4444444 12.4,16 8,16 Z" id="路径"></path>
<path d="M8.99999999,5.92592592 C8.99999999,6.41975308 8.6,6.91358025 7.99999999,6.91358025 L7.99999999,6.91358025 C7.4,6.91358025 6.99999999,6.51851852 6.99999999,5.92592592 L6.99999999,0.987654328 C6.99999999,0.493827172 7.4,0 7.99999999,0 L7.99999999,0 C8.49999999,0 8.99999999,0.395061734 8.99999999,0.987654328 L8.99999999,5.92592592 Z" id="路径"></path>
</g>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64px" height="64px" viewBox="0 0 64 64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>刷新</title>
<defs>
<rect id="path-1" x="0" y="0" width="64" height="64"></rect>
</defs>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="PrevailCloud-Design-图标集" transform="translate(-664.000000, -4776.000000)">
<g id="刷新" transform="translate(664.000000, 4776.000000)">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<g id="蒙版"></g>
<g id="编组" mask="url(#mask-2)" fill="#666666">
<g transform="translate(6.995021, 6.975001)" id="形状结合">
<path d="M49.0099572,25.0249986 C49.5622419,25.0249986 50.0099572,25.4727138 50.0099572,26.0249986 L50.0099572,26.0259985 L49.9999581,26.2615845 C49.3553776,39.5080844 38.4112759,50.0499972 25.0049786,50.0499972 C16.58645,50.0499972 9.13882756,45.8930539 4.60277334,39.5198292 L1.67101425,41.8104464 C1.58334606,41.8789403 1.47533829,41.9162394 1.36408594,41.9164402 C1.08794402,41.9169386 0.863682725,41.6934854 0.863184328,41.4173435 L0.863184328,41.4173435 L0.844095019,30.8407325 C0.844020336,30.7993536 0.849082518,30.7581254 0.859165449,30.7179937 C0.92645382,30.4501749 1.19811182,30.2876129 1.46593058,30.3549013 L1.46593058,30.3549013 L11.7237529,32.9321374 C11.831652,32.9592466 11.927428,33.0215672 11.9959219,33.1092354 C12.1659321,33.3268385 12.1273504,33.6410613 11.9097473,33.8110715 L11.9097473,33.8110715 L8.56747628,36.4214918 C12.1791746,41.6209567 18.1945483,45.0249986 25.0049786,45.0249986 C35.7054956,45.0249986 44.4432922,36.6215932 44.9789547,26.0541959 L44.979571,26.0259985 L44.9811223,26.0259985 L44.9811223,26.0249986 C44.9811223,25.4727138 45.4288375,25.0249986 45.9811223,25.0249986 L49.0099572,25.0249986 Z M25.0049786,0 C33.321686,0 40.6908312,4.05699588 45.2413203,10.2998936 L47.905662,8.06524095 C47.9908864,7.99372921 48.0975266,7.95268339 48.2087042,7.94860007 C48.4846605,7.93846476 48.7165836,8.15395526 48.7267189,8.42991158 L48.7267189,8.42991158 L49.114915,18.9994134 C49.1164337,19.0407645 49.1128135,19.0821442 49.1041373,19.1226034 C49.0462366,19.3926073 48.7804175,19.564551 48.5104135,19.5066503 L48.5104135,19.5066503 L38.1688957,17.2889771 C38.0601163,17.26565 37.9622237,17.2067099 37.8907119,17.1214855 C37.713211,16.9099482 37.740803,16.5945704 37.9523403,16.4170695 L37.9523403,16.4170695 L41.3811509,13.5407149 C37.7629138,8.39075675 31.7770037,5.0249986 25.0049786,5.0249986 C14.2950415,5.0249986 5.55128214,13.4432061 5.02960686,24.0237149 C5.0297706,24.5377427 4.6437421,24.9604992 4.14640425,25.0182704 L4.02978319,25.0249986 L1,25.0249986 C0.487164161,25.0249986 0.0644928393,24.6389584 0.00672773133,24.1416197 L0,24.0249986 L0,24.0239987 C0.525328666,10.6668647 11.5194638,0 25.0049786,0 Z"></path>
</g>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.1 KiB

@ -1,23 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="54px" height="27px" viewBox="0 0 54 27" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>重复</title>
<defs>
<linearGradient x1="-5.49504207%" y1="42.7952614%" x2="139.160156%" y2="68.5061521%" id="linearGradient-1">
<stop stop-color="#FFDF8C" offset="0%"></stop>
<stop stop-color="#FE9800" offset="100%"></stop>
</linearGradient>
</defs>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="PrevailCloud-Design-图标集" transform="translate(-1763.000000, -6777.000000)">
<g id="重复" transform="translate(1764.000000, 6777.000000)">
<polygon id="路径-5" fill="#895200" points="3.91304348 23.0854896 0 23.0854896 3.7945822 27"></polygon>
<g id="编组-5备份">
<path d="M5.2173913,0 L46.7826087,0 C49.6640943,-1.41749875e-15 52,2.33590565 52,5.2173913 L52,18.2608696 C52,21.1423552 49.6640943,23.4782609 46.7826087,23.4782609 L0,23.4782609 L0,23.4782609 L0,5.2173913 C-1.24105864e-15,2.33590565 2.33590565,-2.13521493e-15 5.2173913,0 Z" id="矩形" fill="url(#linearGradient-1)"></path>
<text id="重复" font-family="PingFangSC-Medium, PingFang SC" font-size="14" font-weight="400" line-spacing="23.4782609" fill="#FFFFFF">
<tspan x="11.5217391" y="15">重复</tspan>
</text>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

@ -1,18 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64px" height="64px" viewBox="0 0 64 64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>右箭头</title>
<defs>
<rect id="path-1" x="0" y="0" width="64" height="64"></rect>
</defs>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="PrevailCloud-Design-图标集" transform="translate(-2504.000000, -8416.000000)">
<g id="右箭头" transform="translate(2536.000000, 8448.000000) scale(-1, 1) translate(-2536.000000, -8448.000000) translate(2504.000000, 8416.000000)">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<g id="蒙版"></g>
<path d="M28.2032063,13.8205721 C28.5937306,13.4300478 29.2268955,13.4300478 29.6174198,13.8205721 L29.6174198,13.8205721 L31.7387402,15.9418924 C32.1292645,16.3324167 32.1292645,16.9655817 31.7387402,17.356106 L31.7387402,17.356106 L20.0942055,28.9996789 L52.663654,29 C53.2159388,29 53.663654,29.4477153 53.663654,30 L53.663654,33 C53.663654,33.5522847 53.2159388,34 52.663654,34 L20.0952055,33.9996789 L31.7387402,45.643894 C32.1292645,46.0344183 32.1292645,46.6675833 31.7387402,47.0581076 L29.6174198,49.1794279 C29.2268955,49.5699522 28.5937306,49.5699522 28.2032063,49.1794279 L11.9379919,32.9142136 C11.1569433,32.133165 11.1569433,30.866835 11.9379919,30.0857864 L13.3522055,28.6715729 L13.3592055,28.6636789 Z" id="形状结合" fill="#FFFFFF" mask="url(#mask-2)"></path>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 500 KiB

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24"><path fill="none" stroke="white" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 21H7m10 0h.803c1.118 0 1.677 0 2.104-.218c.377-.192.683-.498.875-.874c.218-.427.218-.987.218-2.105V9.22c0-.45 0-.675-.048-.889a1.994 1.994 0 0 0-.209-.545c-.106-.19-.256-.355-.55-.682l-2.755-3.062c-.341-.378-.514-.57-.721-.708a1.999 1.999 0 0 0-.61-.271C15.863 3 15.6 3 15.075 3H6.2c-1.12 0-1.68 0-2.108.218a1.999 1.999 0 0 0-.874.874C3 4.52 3 5.08 3 6.2v11.6c0 1.12 0 1.68.218 2.107c.192.377.497.683.874.875c.427.218.987.218 2.105.218H7m10 0v-3.803c0-1.118 0-1.678-.218-2.105a2.001 2.001 0 0 0-.875-.874C15.48 14 14.92 14 13.8 14h-3.6c-1.12 0-1.68 0-2.108.218a1.999 1.999 0 0 0-.874.874C7 15.52 7 16.08 7 17.2V21m8-14H9"/></svg>

Before

Width:  |  Height:  |  Size: 818 B

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 208 KiB

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1711545486232" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5287" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48"><path d="M794.202353 116.675765H229.616941c-62.403765 0-112.941176 50.597647-112.941176 112.941176v564.585412c0 62.343529 50.597647 112.941176 112.941176 112.941176h564.585412c62.343529 0 112.941176-50.597647 112.941176-112.941176V229.616941c0-62.403765-50.597647-112.941176-112.941176-112.941176z m56.500706 677.647059a56.32 56.32 0 0 1-56.440471 56.380235H229.737412a56.199529 56.199529 0 0 1-40.056471-16.444235 56.018824 56.018824 0 0 1-16.624941-39.936V229.677176c0.060235-31.322353 25.419294-56.621176 56.621176-56.621176h564.585412a56.500706 56.500706 0 0 1 56.440471 56.621176v564.645648z" p-id="5288" fill="#ffffff"></path><path d="M759.085176 370.688h-225.882352a28.190118 28.190118 0 1 0 0 56.440471h225.882352a28.190118 28.190118 0 1 0 0-56.440471z m0 226.002824h-225.882352a28.190118 28.190118 0 1 0 0 56.380235h225.882352a28.190118 28.190118 0 0 0 0-56.380235zM363.760941 526.095059a98.785882 98.785882 0 1 0 0 197.632 98.785882 98.785882 0 0 0 0-197.571765z m29.997177 128.843294a42.405647 42.405647 0 1 1-59.934118-59.994353 42.405647 42.405647 0 0 1 59.934118 59.994353z m34.755764-332.318118L335.510588 415.623529l-36.502588-36.502588a28.190118 28.190118 0 0 0-39.875765 39.875765l56.440471 56.500706a28.190118 28.190118 0 0 0 39.875765 0l112.941176-112.941177a28.190118 28.190118 0 0 0-39.875765-39.936z" p-id="5289" fill="#ffffff"></path></svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

@ -1,26 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64px" height="64px" viewBox="0 0 64 64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>chazhongjiansuo</title>
<defs>
<rect id="path-1" x="0" y="0" width="64" height="64"></rect>
<linearGradient x1="12.4444444%" y1="0%" x2="87.5555556%" y2="100%" id="linearGradient-3">
<stop stop-color="#5B85F8" offset="0%"></stop>
<stop stop-color="#3C6CF0" offset="100%"></stop>
</linearGradient>
</defs>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="PrevailCloud-Design-图标集" transform="translate(-2250.000000, -6758.000000)">
<g id="chazhongjiansuo" transform="translate(2250.000000, 6758.000000)">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<g id="蒙版"></g>
<g mask="url(#mask-2)" fill="url(#linearGradient-3)" fill-rule="nonzero" id="形状结合">
<g transform="translate(6.000000, 2.000000)">
<path d="M31.4511232,24.8747904 L31.7607141,24.8786253 L32.4504148,24.8786253 C39.5888163,25.0499657 45.2098765,30.9440752 45.0374513,38.0375676 C44.9632519,41.0900989 43.8225861,43.8634128 41.9782017,46.0188901 L51.6240923,56.6794025 C52.1413678,57.2619598 52.1413678,57.8102491 51.5206372,58.3585383 L50.106751,59.6264573 C49.5205054,60.1404784 48.9687449,60.1404784 48.4169844,59.523653 L38.6877524,48.7707922 C36.6723213,49.9523783 34.3085739,50.605744 31.7951992,50.5454164 L31.7951992,50.5454164 L31.1054985,50.5454164 C23.967097,50.374076 18.3460368,44.4799664 18.518462,37.3864741 C18.6908871,30.2929817 24.6223126,24.7072849 31.7607141,24.8786253 Z M23.6222467,0.61682542 C24.5188575,-0.205608473 25.8982588,-0.205608473 26.7948696,0.61682542 C29.3467619,2.94705478 35.2781874,6.95642001 46.3478825,7.77885391 C48.6928647,7.9501943 50.4516013,9.9034748 50.4176147,12.1994361 L50.4176147,12.1994361 L50.4176147,38.1061037 L48.5894096,38.1061037 C49.106685,28.682382 41.8303434,20.6293835 32.3469597,20.1153623 C22.8290909,19.6013411 14.6906235,26.7976377 14.173348,36.2556275 C13.6560725,45.7136172 20.9324142,53.8008838 30.4157979,54.314905 C31.5538039,54.3834412 32.69181,54.314905 33.795331,54.1435646 L33.795331,54.1435646 L34.5540017,55.2744112 C32.5193848,56.5423302 30.553738,57.775981 28.6915463,58.8382914 C26.5534744,60.1747465 23.8291569,60.1747465 21.6910849,58.8382914 C14.7595935,54.4177093 0,44.1715537 0,37.5235464 L0,37.5235464 L0,12.1994361 C0,9.9034748 1.75873661,8.01873046 4.06923373,7.81312199 C15.0009888,6.99068809 21.0013843,2.94705478 23.6222467,0.61682542 Z M31.7951992,30.2244456 C27.6225103,30.1216413 24.1395221,33.3771088 24.0705521,37.5235464 C23.967097,41.6699839 27.243175,45.0967918 31.4158638,45.199596 L31.4158638,45.199596 L31.8296842,45.199596 C36.002373,45.3024003 39.4508762,42.0469328 39.5543313,37.9004952 C39.6577864,33.7540577 36.3817084,30.3272498 32.2090195,30.2244456 L32.2090195,30.2244456 Z"></path>
</g>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.2 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 9.2 KiB

@ -1,14 +1 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>BBD切换</title>
<g id="-index备份" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="index_1.1备份-7" transform="translate(-708.000000, -455.000000)" fill-rule="nonzero">
<g id="编组-31" transform="translate(408.000000, 150.000000)">
<g id="BBD切换" transform="translate(300.000000, 305.000000)">
<rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="20" height="20"></rect>
<path d="M20,12.285 L14.99125,7.91 L14.99125,10.35375 L7.5,10.35375 L7.5,14.2175 L14.9925,14.2175 L14.9925,16.66 L20,12.285 L20,12.285 Z M12.5,5.35375 L5.0075,5.35375 L5.0075,2.91 L0,7.285 L5.00875,11.66 L5.00875,9.2175 L12.5,9.2175 L12.5,5.35375 L12.5,5.35375 Z" id="形状" fill="#999999"></path>
</g>
</g>
</g>
</g>
</svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1710418001545" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="16757" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M1024 628.992l-256.448-224v125.12H384v197.824h383.616v125.056l256.384-224z m-384-354.88H256.384v-125.12L0 372.992l256.448 224v-125.056H640V274.112z" p-id="16758"></path></svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 509 B

@ -1,11 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64px" height="64px" viewBox="0 0 64 64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>B-复选框</title>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="PrevailCloud-Design-图标集" transform="translate(-2250.000000, -6121.000000)" fill="#72D996" fill-rule="nonzero">
<g id="B-复选框" transform="translate(2250.000000, 6121.000000)">
<path d="M56.183097,0 L7.81690298,0 C3.52260802,0 0,3.51585529 0,7.81062975 L0,56.1822242 C0,60.4769987 3.51546277,64 7.81690298,64 L56.183097,64 C60.4845372,64 64,60.4841447 64,56.1822242 L64,7.81777579 C63.9928548,3.52300134 60.477392,0 56.183097,0 Z M52.6533438,19.8660116 L28.9596963,50.0652077 C28.0665401,51.2085753 26.7017975,51.8803037 25.2584571,51.9017418 L25.1870046,51.9017418 C23.7650999,51.9017418 22.4146478,51.2728897 21.5000558,50.1723984 L11.4323992,38.0884323 C9.73182985,36.0518088 10.0104946,33.0290308 12.0468907,31.3282715 C14.0832868,29.6275123 17.1057274,29.9062081 18.8062968,31.9428316 L25.0726806,39.4676195 L45.100815,13.9419384 C46.7370771,11.8481465 49.7595177,11.4979902 51.8387853,13.127289 C53.9251982,14.7637338 54.2896059,17.7865118 52.6533438,19.8660116 L52.6533438,19.8660116 Z" id="形状"></path>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

@ -1,32 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>编组 13</title>
<defs>
<rect id="path-1" x="0" y="3.06460325e-13" width="15.7538462" height="15.7538462"></rect>
</defs>
<g id="index" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="异步查重-折叠" transform="translate(-1352.000000, -1041.000000)">
<g id="编组-36" transform="translate(1064.000000, 1022.000000)">
<g id="编组-19" transform="translate(256.000000, 19.000000)">
<g id="展开" transform="translate(40.000000, 8.000000) scale(1, -1) rotate(-90.000000) translate(-40.000000, -8.000000) translate(32.000000, 0.000000)">
<g id="编组-13" transform="translate(0.123077, 0.123077)">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<g id="蒙版"></g>
<g id="编组-11" mask="url(#mask-2)">
<g transform="translate(1.741980, 1.461539)">
<rect id="矩形" fill="#666666" transform="translate(0.729021, 6.415385) rotate(-270.000000) translate(-0.729021, -6.415385) " x="-5.68636353" y="5.68636353" width="12.830769" height="1.45804193" rx="0.291608386"></rect>
<g id="编组" stroke-width="1" fill="none" transform="translate(8.478978, 6.415385) scale(-1, 1) translate(-8.478978, -6.415385) translate(4.688069, 0.000000)">
<rect id="矩形" transform="translate(3.790909, 6.415385) scale(-1, -1) rotate(-180.000000) translate(-3.790909, -6.415385) " x="0" y="3.05602346e-13" width="7.58181805" height="12.830769"></rect>
<path d="M0.201793759,6.3610837 C0.213041182,6.22879799 0.269278297,6.09961817 0.370505105,5.99839136 L0.370505105,5.99839136 L0.563544402,5.80535207 C0.57979068,5.78910579 0.596756979,5.77401837 0.61434058,5.7600898 L6.09088579,0.287203877 C6.20476595,0.173323719 6.38940217,0.173323719 6.50328233,0.287203877 L7.10871816,0.89263971 C7.22259832,1.00651987 7.22259832,1.19115609 7.10871816,1.30503624 L1.99779376,6.41479376 L7.10871816,11.5257328 C7.20632972,11.6233443 7.22027423,11.7729399 7.15055169,11.8854041 L7.10871816,11.9381293 L6.50328233,12.5435651 C6.38940217,12.6574453 6.20476595,12.6574453 6.09088579,12.5435651 L6.09088579,12.5435651 L0.618409245,7.07387291 C0.599371439,7.05906492 0.581040393,7.04291292 0.563544402,7.02541693 L0.370505105,6.83237764 C0.269278297,6.73115083 0.213041182,6.60197101 0.201793759,6.4696853 Z" id="形状结合" fill="#666666" transform="translate(3.697961, 6.415385) scale(1, -1) rotate(-180.000000) translate(-3.697961, -6.415385) "></path>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.2 KiB

@ -1,19 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64px" height="64px" viewBox="0 0 64 64" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>放大</title>
<defs>
<rect id="path-1" x="0" y="0" width="64" height="64"></rect>
<rect id="path-1" x="0" y="0" width="16" height="16"></rect>
</defs>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="PrevailCloud-Design-图标集" transform="translate(-1720.000000, -2805.000000)">
<g id="放大" transform="translate(1720.000000, 2805.000000)">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="蒙版" fill="#000000" fill-rule="nonzero" opacity="0" xlink:href="#path-1"></use>
<g id="编组" mask="url(#mask-2)" fill="#ffffff" fill-rule="nonzero">
<g transform="translate(7.000000, 7.000000)" id="形状">
<path d="M44.560973,40.5665707 C44.6720829,40.6499032 44.7748596,40.7387911 44.8748585,40.8387901 L48.9164824,44.8776363 C49.6598018,45.5952197 49.958016,46.6580848 49.6964749,47.6576076 C49.4349339,48.6571305 48.6543527,49.4377117 47.6548299,49.6992527 C46.655307,49.9607937 45.5924419,49.6625796 44.8748585,48.9192602 L40.8360124,44.8776363 C40.7378353,44.7796968 40.6468589,44.6747954 40.563793,44.5637507 C30.189539,52.8169323 15.1768306,51.5372425 6.34910651,41.6472758 C-2.47861756,31.7573091 -2.05159696,16.6962111 7.32230707,7.32230707 C16.6962111,-2.05159696 31.7573091,-2.47861756 41.6472758,6.34910651 C51.5372425,15.1768306 52.8169323,30.189539 44.5637507,40.563793 L44.5637507,40.5665707 L44.560973,40.5665707 Z M22.855647,22.8584248 L22.855647,17.1445963 C22.8231546,16.1026764 23.3604612,15.1256909 24.2577642,14.5951247 C25.1550671,14.0645585 26.2700554,14.0645585 27.1673583,14.5951247 C28.0646612,15.1256909 28.6019679,16.1026764 28.5694755,17.1445963 L28.5694755,22.8584248 L34.2833039,22.8584248 C35.3252241,22.825932 36.3022099,23.3632385 36.8327764,24.2605416 C37.3633428,25.1578447 37.3633428,26.2728333 36.8327764,27.1701363 C36.3022099,28.0674394 35.3252241,28.604746 34.2833039,28.5722532 L28.5694755,28.5722532 L28.5694755,34.2860817 C28.6019679,35.3280017 28.0646612,36.3049871 27.1673583,36.8355533 C26.2700554,37.3661195 25.1550671,37.3661195 24.2577642,36.8355533 C23.3604612,36.3049871 22.8231546,35.3280017 22.855647,34.2860817 L22.855647,28.5722532 L17.1418186,28.5722532 C16.0998983,28.604746 15.1229125,28.0674394 14.5923461,27.1701363 C14.0617797,26.2728333 14.0617797,25.1578447 14.5923461,24.2605416 C15.1229125,23.3632385 16.0998983,22.825932 17.1418186,22.8584248 L22.855647,22.8584248 Z M24.997291,44.2859759 C31.9421392,44.3693275 38.3954099,40.7120576 41.8921184,34.7111498 C45.3888269,28.710242 45.3888269,21.2926733 41.8921184,15.2917655 C38.3954099,9.29085771 31.9421392,5.63358778 24.997291,5.71693946 C14.4370169,5.84368327 5.94283561,14.440423 5.94283561,25.0014577 C5.94283561,35.5624923 14.4370169,44.1592321 24.997291,44.2859759 Z"></path>
<g id="-index" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="图片放大" transform="translate(-1174.000000, -447.000000)">
<g id="编组-29" transform="translate(1026.000000, 430.000000)">
<g id="编组-13备份-2" transform="translate(142.000000, 11.000000)">
<g id="放大" transform="translate(6.000000, 6.000000)">
<mask id="mask-2" fill="white">
<use xlink:href="#path-1"></use>
</mask>
<use id="蒙版" fill="#000000" fill-rule="nonzero" opacity="0" xlink:href="#path-1"></use>
<g id="编组" mask="url(#mask-2)" fill="#666666" fill-rule="nonzero">
<g transform="translate(1.750000, 1.750000)" id="形状">
<path d="M11.1402432,10.1416427 C11.1680207,10.1624758 11.1937149,10.1846978 11.2187146,10.2096975 L12.2291206,11.2194091 C12.4149505,11.3988049 12.489504,11.6645212 12.4241187,11.9144019 C12.3587335,12.1642826 12.1635882,12.3594279 11.9137075,12.4248132 C11.6638267,12.4901984 11.3981105,12.4156449 11.2187146,12.229815 L10.2090031,11.2194091 C10.1844588,11.1949242 10.1617147,11.1686989 10.1409482,11.1409377 C7.54738474,13.2042331 3.79420765,12.8843106 1.58727663,10.4118189 C-0.619654391,7.93932727 -0.51289924,4.17405278 1.83057677,1.83057677 C4.17405278,-0.51289924 7.93932727,-0.619654391 10.4118189,1.58727663 C12.8843106,3.79420765 13.2042331,7.54738474 11.1409377,10.1409482 L11.1409377,10.1416427 L11.1402432,10.1416427 Z M5.71391175,5.71460619 L5.71391175,4.28614909 C5.70578865,4.02566909 5.84011531,3.78142274 6.06444104,3.64878118 C6.28876677,3.51613963 6.56751385,3.51613963 6.79183958,3.64878118 C7.01616531,3.78142274 7.15049197,4.02566909 7.14236887,4.28614909 L7.14236887,5.71460619 L8.57082597,5.71460619 C8.83130603,5.706483 9.07555248,5.84080963 9.20819409,6.0651354 C9.3408357,6.28946117 9.3408357,6.56820832 9.20819409,6.79253409 C9.07555248,7.01685985 8.83130603,7.15118649 8.57082597,7.14306329 L7.14236887,7.14306329 L7.14236887,8.57152041 C7.15049197,8.83200041 7.01616531,9.07624677 6.79183958,9.20888832 C6.56751385,9.34152987 6.28876677,9.34152987 6.06444104,9.20888832 C5.84011531,9.07624677 5.70578865,8.83200041 5.71391175,8.57152041 L5.71391175,7.14306329 L4.28545464,7.14306329 C4.02497459,7.15118649 3.78072814,7.01685985 3.64808653,6.79253409 C3.51544491,6.56820832 3.51544491,6.28946117 3.64808653,6.0651354 C3.78072814,5.84080963 4.02497459,5.706483 4.28545464,5.71460619 L5.71391175,5.71460619 Z M6.24932275,11.071494 C7.98553481,11.0923319 9.59885248,10.1780144 10.4730296,8.67778745 C11.3472067,7.17756051 11.3472067,5.32316832 10.4730296,3.82294138 C9.59885248,2.32271443 7.98553481,1.40839695 6.24932275,1.42923486 C3.60925424,1.46092082 1.4857089,3.61010576 1.4857089,6.25036441 C1.4857089,8.89062307 3.60925424,11.039808 6.24932275,11.071494 Z"></path>
</g>
</g>
</g>
</g>
</g>

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

@ -1,253 +0,0 @@
<script lang="ts" setup>
import { computed, onBeforeMount, reactive, ref } from 'vue'
import { useMessage } from 'naive-ui'
import { useDictionary } from '@/store/modules/dictonary'
import { audit } from '@/api/task/task'
const emit = defineEmits(['success'])
const message = useMessage()
const loading = ref(false)
const dictonaryStore = useDictionary()
const state: any = reactive({
idItemList: [],
})
const formRef = ref()
const show = ref(false)
const cardStyle = {
'width': '520px',
'--n-padding-bottom': '10px',
'--n-padding-left': '0px',
}
const rules = {
disposeTypeId: [
{ required: true, message: '请选择处理方式', trigger: 'blur' },
],
failCauseId: [
{ required: true, message: '请选择不通过原因', trigger: 'blur' },
],
}
const formData = reactive({
disposeTypeId: '262403670085013522',
failCauseId: '260402999231251188',
comment: '',
})
function showModal(value) {
state.idItemList = value
show.value = true
}
function closeModal() {
show.value = false
}
defineExpose({
showModal,
})
const disposeOptions = ref<any[]>([]) //
const failCauseOptions = ref<any[]>([]) //
const selectItem = ref(null)
onBeforeMount(async () => {
const rejectList = await dictonaryStore.fetchTFList()
const backList = await dictonaryStore.fetchBackList()
failCauseOptions.value = rejectList
disposeOptions.value = backList
})
const showOther = computed(() => {
const failCauseItem = failCauseOptions.value.find(item => item.value === formData.failCauseId)
return failCauseItem?.label === '其他'
})
/*
* 需要的参数字段结构
* [{
* id: ''
* taskId:''
* fromTaskName: ''
* }]
*/
async function handleSumbit(e: MouseEvent) {
e.preventDefault()
formRef.value.validate(async (errors) => {
if (!errors) {
try {
const list: any = []
state.idItemList.forEach((item) => {
list.push({
formId: item.id,
taskId: item.taskId,
taskName: item.fromTaskName,
})
})
const disposeTypeItem = disposeOptions.value.find(item => item.value === formData.disposeTypeId)
const failCauseItem = failCauseOptions.value.find(item => item.value === formData.failCauseId)
const param = {
result: false,
comment: showOther.value ? formData.comment : '',
disposeType: disposeTypeItem.label,
disposeTypeId: formData.disposeTypeId,
failCauseId: formData.failCauseId,
failCauseName: failCauseItem.label,
flowTaskInfoList: list,
}
audit(param).then((res) => {
const { code } = res
if (code === 'OK') {
message.success(res.message)
emit('success', param)
closeModal()
}
else { message.error(res.message) }
})
}
finally {
loading.value = false
}
}
})
}
async function selectChange(id) {
selectItem.value = failCauseOptions.value.find(v => v.id === id)
}
</script>
<template>
<n-modal v-model:show="show" transform-origin="center">
<n-card :style="cardStyle" :bordered="false" size="huge" role="dialog" aria-modal="true">
<div class="wrapper">
<div class="wrapper-header">
<span class="wrapper-left">选择不通过原因</span>
<SvgIcon
size="22"
class="icon"
name="close-none-border"
@click="closeModal"
/>
</div>
<n-form
ref="formRef"
size="large"
:model="formData"
:rules="rules"
require-mark-placement="left"
>
<div class="wrapper-content">
<n-form-item class="form-item" label="处理方式" path="disposeTypeId">
<n-select v-model:value="formData.disposeTypeId" filterable :options="disposeOptions" />
</n-form-item>
<n-form-item class="form-item" label="不通过原因" path="failCauseId">
<n-select v-model:value="formData.failCauseId" filterable :options="failCauseOptions" @change="selectChange" />
</n-form-item>
<n-form-item v-show="showOther" class="form-item-area" label="" path="">
<n-input v-model:value="formData.comment" placeholder-class="pl" type="textarea" placeholder="备注内容" />
</n-form-item>
</div>
</n-form>
</div>
<template #footer>
<div class="wrapper-footer">
<n-button type="info" @click="handleSumbit">
确定
</n-button>
<n-button secondary class="btn" style="margin-left:15px" @click="closeModal">
取消
</n-button>
</div>
</template>
</n-card>
</n-modal>
</template>
<style lang="less" scoped>
.wrapper {
&-header {
display: flex;
justify-content: space-between;
align-items: center;
height: 56px;
border-bottom: 0.5px solid #d9d9d9;
padding: 0 24px
}
&-left {
font-size: 18px;
font-family: PingFang SC, PingFang SC-Medium;
font-weight: 500;
color: #333333;
}
.icon{
cursor: pointer;
}
&-content {
padding: 24px;
}
&-footer {
display: flex;
justify-content: flex-end;
padding-right: 24px;
padding-bottom: 10px;
border-top: 0.5px solid #d9d9d9;
padding-top: 15px;
}
&-info {
font-weight: bold;
position: relative;
&:before {
background-color: #1980ff;
content: '';
width: 5px;
border-radius: 2px;
top: 0;
bottom: 0;
position: absolute;
}
}
.form-item-area{
margin-top: -30px;
}
}
::v-deep(.n-card__content) {
padding: 0!important;
}
::v-deep(.n-card > .n-card-header) {
--n-padding-top: 0px;
--n-padding-bottom: 12px;
}
::v-deep(.n-divider:not(.n-divider--vertical)) {
margin-top: 0px;
margin-bottom: 0px;
}
::v-deep(.n-form-item-label__text) {
color: #666666;
}
::v-deep(.n-input__placeholder) {
color: #333333!important;
}
.btn{
border: 1px solid #cad2dd;
background-color: #fff;
}
</style>

@ -1,217 +0,0 @@
<script lang="ts" setup>
import { computed, onBeforeMount, reactive, ref, toRefs, unref } from 'vue'
import { useDialog, useMessage } from 'naive-ui'
import { useDictionary } from '@/store/modules/dictonary'
import { audit } from '@/api/task/task'
const emit = defineEmits<{
(e: 'commit', rejectId: any, backId: any, isOther: boolean)
}>()
const message = useMessage()
const dictonaryStore = useDictionary()
const state: any = reactive({
detail: {},
})
const { detail } = toRefs(state)
const show = ref(false)
const cardStyle = {
'width': '520px',
'--n-padding-bottom': '10px',
'--n-padding-left': '0px',
}
function showModal(value) {
console.log(value)
state.detail = value
show.value = true
}
function closeModal() {
show.value = false
}
defineExpose({
showModal,
})
const backOptions = ref<any[]>([])
const reasonOptions = ref<any[]>([])
const selectBackId = ref(null)
const selectRejectId = ref(null)
const selectItem = ref(null)
const otherValue = ref(null)
const showOther = computed(() => {
return (selectItem.value as any)?.label === '其他'
})
const comomitValue = computed(() => {
return (selectItem.value as any)?.label === '其他' ? otherValue.value : selectRejectId.value
})
async function handleSumbit(e: MouseEvent) {
e.preventDefault()
// selectRejectId.value === 'other'
// emit('commit', unref(comomitValue), unref(selectBackId), showOther.value)
console.log(state.detail)
console.log(comomitValue)
const param = {
formid: [state.detail.id],
taskId: ['66b06dda-e673-11ee-a934-0242bc74e4f3'],
approvd: false,
taskComment: comomitValue.value,
taskname: showOther.value ? state.detail.detail.tasks : ['其他'],
}
audit(param).then((res) => {
const { code } = res
if (code === 'OK')
closeModal()
else message.error(res.message)
})
}
onBeforeMount(async () => {
const rejectList = await dictonaryStore.fetchTFList()
const backList = await dictonaryStore.fetchBackList()
reasonOptions.value = rejectList
backOptions.value = backList
// TODO name=
//
// reasonOptions.value.push({
// label: '',
// value: 'other',
// })
})
async function selectChange(id) {
console.log(id, 'selectChange')
selectItem.value = reasonOptions.value.find(v => v.id == id)
}
</script>
<template>
<n-modal v-model:show="show" transform-origin="center">
<n-card :style="cardStyle" :bordered="false" size="huge" role="dialog" aria-modal="true">
<div class="wrapper">
<div class="wrapper-header">
<span class="wrapper-left">选择不通过原因</span>
<div class="wrapper-right">
<div class="wrapper-right-close" @pointerdown="closeModal">
<div class="wrapper-right-icon" />
</div>
</div>
</div>
<div class="wrapper-content">
<span>处理方式</span>
<n-select v-model:value="selectBackId" filterable style="margin-top: 10px;" :options="backOptions" />
</div>
<div class="wrapper-content">
<span>不通过原因</span>
<n-select v-model:value="selectRejectId" filterable style="margin-top: 10px;" :options="reasonOptions" @change="selectChange" />
<n-input v-show="showOther" v-model:value="otherValue" type="textarea" placeholder="备注内容" style="margin-top: 10px;" />
</div>
<!-- <div class="wrapper-content">
<n-input
type="textarea"
placeholder="备注内容" v-model="showOther"></n-input>
</div> -->
</div>
<template #footer>
<div class="wrapper-footer">
<n-button type="info" @click="handleSumbit">
确认
</n-button>
<n-button secondary style="margin-left:15px" @click="closeModal">
取消
</n-button>
</div>
</template>
</n-card>
</n-modal>
</template>
<style lang="less" scoped>
.wrapper {
&-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px;
}
&-left {
font-weight: bold;
font-size: 16px;
}
&-right {
&-close {
width: 18px;
height: 18px;
cursor: pointer;
}
&-icon {
background: #000;
display: inline-block;
width: 18px;
height: 1px;
transform: rotate(45deg);
-webkit-transform: rotate(45deg);
margin-bottom: 8px;
&:after {
content: '';
display: block;
width: 18px;
height: 1px;
background: #000;
transform: rotate(-90deg);
-webkit-transform: rotate(-90deg);
}
}
}
&-content {
padding: 18px 10px;
}
&-footer {
display: flex;
justify-content: flex-end;
}
&-info {
font-weight: bold;
position: relative;
&:before {
background-color: #1980ff;
content: '';
width: 5px;
border-radius: 2px;
top: 0;
bottom: 0;
position: absolute;
}
}
}
::v-deep(.n-card.n-card--content-segmented > .n-card__content:not(:first-child)) {
border: 0px;
}
::v-deep(.n-card > .n-card-header) {
--n-padding-top: 0px;
--n-padding-bottom: 12px;
}
::v-deep(.n-divider:not(.n-divider--vertical)) {
margin-top: 0px;
margin-bottom: 0px;
}
</style>

@ -9,8 +9,8 @@ const quillEditor = ref()
const cardStyle = {
'width': '500px',
'--n-padding-bottom': '17px',
'--n-padding-left': '24px',
'--n-padding-bottom': '10px',
'--n-padding-left': '10px',
}
const note = ref('<p>sss</p>')
@ -23,7 +23,7 @@ const options = reactive({
],
},
theme: 'snow',
placeholder: '',
placeholder: 'placaholder',
})
function initHandler() {
@ -44,7 +44,7 @@ const saveHandler = debounce(() => {
<template>
<div>
<n-card :style="cardStyle" :bordered="false" class="mt-4 proCard">
<div class="title">
<div style="font-weight: bold;font-size: 18px;margin-bottom: 24px;">
备注信息
</div>
<QuillEditor
@ -61,26 +61,16 @@ const saveHandler = debounce(() => {
</div>
</template>
<style lang="less" scoped>
.title{
font-size: 18px;
font-family: PingFang SC, PingFang SC-Medium;
font-weight: Medium;
color: #333333;
margin-bottom: 24px;
}
<style lang="less">
.ql-toolbar.ql-snow {
border-top: none;
border-left: none;
border-right: none;
border-bottom: 1px solid #eee;
margin-top: -10px;
background: #f8f8f8;
border: 1px solid #d8d8d8;
}
.ql-container.ql-snow {
border: 1px solid #d8d8d8;
border: none;
}
</style>

@ -31,7 +31,7 @@ async function handlerSearch(value) {
if (res.code === 'OK') {
state.resultList = [
{
title: '图检审批',
title: 'AI工单管理',
path: 'worksheet',
data: res.data.ai,
},
@ -106,7 +106,7 @@ function highlightText(text, query) {
</template>
</n-input>
</div>
<div v-show="showList && (historyList.length || resultList.length)" class="list_box">
<div v-show="showList" class="list_box">
<div
v-if="historyList.length"
class="list_classfiy_item"
@ -115,7 +115,7 @@ function highlightText(text, query) {
<div class="list_title">
历史搜索
</div>
<div class="flex history-list">
<div class="history-list flex">
<div class="tag-wrap">
<div v-for="(item, index) of historyList" :key="index" class="tag" @click="handlerHistory(item.historyname)">
{{ item.historyname }}
@ -148,7 +148,6 @@ function highlightText(text, query) {
position: absolute;
top: 20%;
left: 20%;
box-shadow: none!important;
.ip_box{
z-index: 0;
position: relative;

@ -1,5 +1,5 @@
import { IzCustomlevel, IzCustomname, IzCustomtype, IzfirmVue, IzProductVue, IzProjecttype, IzProjectVue, IztaskrromVue, IztaskstatusVue, IzVisitcity, IzvisitproVue, PictureDownloadVue, PictureTypeVue, PictureUploadVue, PlanVue, ReportUserVue, SimilarityVue, TimeVue } from '@/views/home/aside/comp/items'
import type { Component } from 'vue'
import { IzCustomlevel, IzCustomname, IzCustomtype, IzProductVue, IzProjectVue, IzProjecttype, IzShowVue, IzVisitcity, IzfirmVue, IztaskrromVue, IztaskstatusVue, IzvisitproVue, PictureDownloadVue, PictureTypeVue, PictureUploadVue, PlaceHolderVue, PlanVue, ReportUserVue, SimilarityVue, TimeVue } from '@/views/home/aside/comp/items'
export interface AsideEntity {
label: string
@ -8,7 +8,7 @@ export interface AsideEntity {
inFilterList?: boolean// 是否出现在过滤配置选项中(这个名字不好为false代表只用于客户端的显示配置不作为参数传递给服务器端)
render?: boolean// 是否作为单独组件渲染
key: string
component?: Component
component: Component
}
// 客户端配置
@ -45,14 +45,14 @@ export const asideMap: Recordable<AsideEntity> = {
izsimilarity: {
label: '相似度阈值',
defaultValue: [0, 100],
isDefaultFilter: true,
isDefaultFilter: false,
key: 'izsimilarity',
component: SimilarityVue,
},
izyear: {
label: '年份',
defaultValue: null,
isDefaultFilter: true,
isDefaultFilter: false,
key: 'izyear',
component: TimeVue,
},
@ -72,28 +72,28 @@ export const asideMap: Recordable<AsideEntity> = {
inFilterList: false,
},
izcustomtype: {
label: '拜访客户类型',
label: '客户类型',
defaultValue: null,
isDefaultFilter: false,
key: 'izcustomtype',
component: IzCustomtype,
},
izcustomlevel: {
label: '拜访客户级别',
label: '客户级别',
defaultValue: null,
isDefaultFilter: false,
key: 'izcustomlevel',
component: IzCustomlevel,
},
izcustomname: {
label: '拜访客户名称',
label: '客户名称',
defaultValue: null,
isDefaultFilter: false,
key: 'izcustomname',
component: IzCustomname,
},
izprojecttype: {
label: '拜访项目类型',
label: '项目类型',
defaultValue: null,
isDefaultFilter: false,
key: 'izprojecttype',
@ -114,14 +114,14 @@ export const asideMap: Recordable<AsideEntity> = {
component: IztaskstatusVue,
},
izvisitpro: {
label: '拜访省份/直辖市',
label: '拜访省份',
defaultValue: null,
isDefaultFilter: false,
key: 'izvisitpro',
component: IzvisitproVue,
},
izvisitcity: {
label: '拜访城市',
label: '发布地区',
defaultValue: null,
isDefaultFilter: false,
key: 'izvisitcity',
@ -141,31 +141,38 @@ export const asideMap: Recordable<AsideEntity> = {
key: 'izproductname',
component: IzProductVue,
},
// izdesc: {
// label: '添加备注',
// defaultValue: null,
// isDefaultFilter: false,
// key: 'izdesc',
// component: PlaceHolderVue,
// inFilterList: false,
// render: false,
// },
// izsearchmanager: {
// label: '自定义筛选',
// defaultValue: null,
// isDefaultFilter: false,
// key: 'izsearchmanager',
// component: PlaceHolderVue,
// inFilterList: false,
// render: false,
// },
// izsearch: {
// label: '自定义过滤',
// defaultValue: null,
// isDefaultFilter: false,
// key: 'izsearch',
// component: PlaceHolderVue,
// inFilterList: false,
// render: false,
// },
izdesc: {
label: '添加备注',
defaultValue: null,
isDefaultFilter: false,
key: 'izdesc',
component: PlaceHolderVue,
inFilterList: false,
render: false,
},
izsearchmanager: {
label: '自定义筛选',
defaultValue: null,
isDefaultFilter: false,
key: 'izsearchmanager',
component: PlaceHolderVue,
inFilterList: false,
render: false,
},
izshow: {
label: '分类',
defaultValue: null,
isDefaultFilter: false,
key: 'izshow',
component: IzShowVue,
},
izsearch: {
label: '自定义过滤',
defaultValue: null,
isDefaultFilter: false,
key: 'izsearch',
component: PlaceHolderVue,
inFilterList: false,
render: false,
},
}

@ -1,5 +1,5 @@
import type { AsideEntity } from './aside'
import { IzApprovalStatus, IzProjectVue, IzStatus, IztaskrromVue, PictureDownloadVue, PlanVue, ReportUserVue, TimeVue, IzCustomname, IzCustomtype, IzVisitcity, IzCustomlevel, IzProjecttype, IzProductVue, IzvisitproVue, IzfirmVue } from '@/views/home/aside/comp/items'
import { IzProjectVue, IzStatus, IztaskrromVue, PictureDownloadVue, PlanVue, ReportUserVue, TimeVue } from '@/views/home/aside/comp/items'
export interface RowData {
id: string
@ -129,99 +129,3 @@ export const asideMap: Recordable<AsideEntity> = {
inFilterList: false,
},
}
// 审批添加筛选配置 (左侧)
export const asideTaskMap: Recordable<AsideEntity> = {
izstatus: {
label: '审批状态',
defaultValue: null,
isDefaultFilter: true,
key: 'izApprovalStatus',
component: IzApprovalStatus, // todo
},
izuptime: {
label: '提报时间',
defaultValue: null,
isDefaultFilter: true,
key: 'izuptime',
component: TimeVue,
},
izupuser: {
label: '提报人',
defaultValue: null,
isDefaultFilter: true,
key: 'izupuser',
component: ReportUserVue,
},
iztaskrrom: {
label: '任务来源',
defaultValue: null,
isDefaultFilter: true,
key: 'iztaskrrom',
component: IztaskrromVue,
},
izcustomname: {
label: '拜访客户',
defaultValue: null,
isDefaultFilter: true,
key: 'izcustomname',
component: IzCustomname,
},
izcustomtype: {
label: '客户类型',
defaultValue: null,
isDefaultFilter: true,
key: 'izcustomtype',
component: IzCustomtype,
},
izproject: {
label: '所属项目',
defaultValue: null,
isDefaultFilter: true,
key: 'izproject',
component: IzProjectVue,
},
izvisitpro: {
label: '拜访省份/直辖市',
defaultValue: null,
isDefaultFilter: true,
key: 'izvisitpro',
component: IzVisitcity,
},
izcustomlevel: {
label: '客户级别',
defaultValue: null,
isDefaultFilter: true,
key: 'izcustomlevel',
component: IzCustomlevel
},
izprojecttype: {
label: '项目类别',
defaultValue: null,
isDefaultFilter: true,
key: 'izprojecttype',
component: IzProjecttype,
},
izproductname: {
label: '产品名称',
defaultValue: null,
isDefaultFilter: true,
key: 'izproductname',
component: IzProductVue,
},
izvisitcity: {
label: '拜访城市',
defaultValue: null,
isDefaultFilter: true,
key: 'izvisitcity',
component: IzvisitproVue,
},
izfirm: {
label: '厂商',
defaultValue: null,
isDefaultFilter: true,
key: 'izfirm',
component: IzfirmVue,
}
}

@ -1,8 +1,4 @@
export const timeOptions = [
{
label: '全部',
value: '',
},
{
label: '近3个月',
value: '3',
@ -26,14 +22,14 @@ export const timeOptions = [
]
export const viewOptions = [
{
label: '平铺',
value: 'masonry',
},
{
label: '横版',
value: 'horizontalVersion',
},
{
label: '平铺',
value: 'masonry',
},
{
label: '竖版',
value: 'verticalVersion',

@ -1,6 +0,0 @@
// 任务审核状态
export const TASK_STATUS_OBJ = {
1: '待审批',
2: '通过',
3: '不通过',
} as any

@ -1,11 +0,0 @@
const commonKeyDown = (keyCode: number) => {
document.dispatchEvent(new KeyboardEvent('keydown', { keyCode }));
}
const c = () => {
commonKeyDown(27)
}
const initBind = (mousetrap) => {
mousetrap.bind('c', c)
}
export default initBind;

@ -1,114 +0,0 @@
<script lang="ts" setup>
import { onBeforeMount, ref } from 'vue';
const emit = defineEmits<{
(e: 'commit')
}>()
const props = defineProps({
selectedTotal: {
type: Number,
default: () => 0,
}
})
const show = ref(false)
const cardStyle = {
'width': '450px',
'--n-padding-top': '20px',
'--n-padding-bottom': '20px',
'--n-padding-left': '20px',
'--n-padding-right': '20px',
}
function showModal() {
show.value = true
}
function closeModal() {
show.value = false
}
defineExpose({
showModal,
})
async function handleSumbit(e: MouseEvent) {
e.preventDefault()
closeModal()
emit('commit')
}
onBeforeMount(async () => { })
</script>
<template>
<n-modal v-model:show="show" transform-origin="center">
<n-card :style="cardStyle" :bordered="false" size="huge" role="dialog" aria-modal="true">
<div class="wrapper">
<div class="wrapper-header">
<SvgIcon name="exclamation-solid" size="16" />
<span class="wrapper-left">确认提示</span>
</div>
<div class="wrapper-content">
已选<span class="highlighted-text">{{ props.selectedTotal }}</span>张图片确认将所选照片移除可疑夹吗
</div>
</div>
<template #footer>
<div class="wrapper-footer">
<n-button type="info" @click="handleSumbit">
确定
</n-button>
<n-button secondary style="margin-left:15px" @click="closeModal">
取消
</n-button>
</div>
</template>
</n-card>
</n-modal>
</template>
<style lang="less" scoped>
.wrapper {
&-header {
display: flex;
justify-content: flex-start;
align-items: center;
padding: 10px;
}
&-left {
font-weight: 600;
font-size: 16px;
margin-left: 15px;
}
&-content {
margin-left: 15px;
color: #8e8e8e;
.highlighted-text {
color: #5b85f8;
margin: 0 5px;
}
}
&-footer {
display: flex;
justify-content: flex-end;
}
}
::v-deep(.n-card.n-card--content-segmented > .n-card__content:not(:first-child)) {
border: 0px;
}
::v-deep(.n-card > .n-card-header) {
--n-padding-top: 0px;
--n-padding-bottom: 12px;
}
::v-deep(.n-divider:not(.n-divider--vertical)) {
margin-top: 0px;
margin-bottom: 0px;
}
</style>

@ -1,35 +1,25 @@
<script lang="ts" setup>
import { computed, onBeforeMount, onMounted, onUpdated, reactive, ref, watch } from 'vue'
import Masonry from 'masonry-layout'
import { useDialog, useMessage } from 'naive-ui'
import { computed, onBeforeMount, onMounted, onUpdated, reactive, ref, unref, watch } from 'vue'
import { dubiousfilelist, removeFiles } from '@/api/task/task'
import { viewOptions } from '@/config/home'
import { useInfiniteScroll } from '@vueuse/core'
import { debounce, throttle } from 'lodash-es'
import imagesloaded from 'imagesloaded'
import { debounce } from 'lodash-es'
import { audit } from '@/api/task/task'
import NotPassed from '@/components/Approval/NotPassed.vue'
import { formatToDateHMS } from '@/utils/dateUtil'
import { randomInt } from '@/utils/index'
import { timeOptions, viewOptions } from '@/config/home'
import { getPictureList } from '@/api/home/main'
import { off, on } from '@/utils/domUtils'
import ConfrimModal from "./ConfrimModal.vue"
import img1 from '@/assets/images/1.jpg'
import img2 from '@/assets/images/2.jpg'
import img3 from '@/assets/images/3.jpg'
import img4 from '@/assets/images/4.jpg'
import img5 from '@/assets/images/5.jpg'
const cardStyle = {
'--n-padding-bottom': '40px',
'--n-padding-left': '120px',
}
const message = useMessage()
const timeRange = ref('')
const batch = ref(false)
const timeOptions = [{
label: '升序',
value: 'asc',
}, {
label: '降序',
value: 'desc',
}]
const timeRange = ref('all')
const timeLabel = computed(() => {
const item = timeOptions.find((option) => {
return option.value === timeRange.value
@ -38,7 +28,7 @@ const timeLabel = computed(() => {
return item?.label
})
const viewMode = ref('horizontalVersion')
const viewMode = ref('masonry')
const viewLabel = computed(() => {
const item = viewOptions.find((option) => {
@ -58,10 +48,8 @@ const pagination = reactive({
let loading = false
let _masonry: null | Masonry = null
const show = ref(false)
const selectedApproveItems = ref<any[]>([]); //
const dialog = useDialog();
let processItems: any[] = [];
const confrimModalRef = ref<any>();
const urls = [img1, img2, img3, img4, img5]
const layout = debounce(() => {
if (!show.value)
@ -101,24 +89,29 @@ useInfiniteScroll(
{ distance: 10, canLoadMore: () => canloadMore },
)
function randomUrl() {
const index = randomInt(0, urls.length)
return urls[index]
}
async function featchList() {
loading = true
try {
const result = await dubiousfilelist({ ...pagination, orderbyname: timeRange.value })
const result = await getPictureList({ ...pagination, search_month: '', search_history: '0' })
// TODO
// result.data = Array.from({ length: 30 })
result.data = Array.from({ length: 30 })
result.pageCount = 1
const { data, pageCount } = result
pagination.pageNo += 1
canloadMore = pageCount >= pagination.pageNo
return result.data.records
// const list = data.map((item) => {
// return {
// imgUrl: randomUrl(),
// }
// })
// console.log(list)
// return list
const list = data.map((item) => {
return {
imgUrl: randomUrl(),
}
})
return list
}
catch (error) {
return []
@ -135,14 +128,12 @@ async function loadMore() {
}
onUpdated(() => {
console.log('onUpdated', onUpdated)
layout()
})
onBeforeMount(async () => {
console.log(888)
// const list = await featchList()
// listData.value = list
const list = await featchList()
listData.value = list
})
let start: { x: number, y: number } | null = null
@ -173,14 +164,15 @@ function imUpdateSelectIds(x: number, y: number, w: number, h: number) {
items.forEach((item: HTMLDivElement) => {
const rect = item.getBoundingClientRect()
const index = selectIds.value.indexOf(item.dataset.id!)
if (rect.right > x && rect.bottom > y && rect.left < x + w && rect.top < y + h)
index === -1 && selectIds.value.push(item.dataset.id!)
else index !== -1 && selectIds.value.splice(index, 1)
})
}
function isSelected(pictureId: number) {
return selectIds.value.includes(String(pictureId))
function isSelected(id: number) {
return selectIds.value.includes(String(id))
}
function moveHandler(e: MouseEvent) {
@ -238,171 +230,34 @@ onMounted(() => {
show.value && addListeners()
})
async function showModal() {
function showModal() {
show.value = true
reset()
pagination.pageNo = 1
const list = await featchList()
listData.value = list
layout()
}
async function onChange() {
pagination.pageNo = 1
const list = await featchList()
listData.value = list
}
function closeModal(event: MouseEvent) {
selectedApproveItems.value = []
show.value = false
}
async function commit() {
const ids = selectIds.value.join(',')
const res = await removeFiles({ pictureid: ids })
if (res.code === 'OK') {
message.success('移除成功')
pagination.pageNo = 1
const list = await featchList()
listData.value = list
layout()
}
}
function remove() {
if (!selectIds.value || selectIds.value.length === 0) {
message.error('至少选中一个')
return
}
confrimModalRef?.value?.showModal()
}
function setBatch(value) {
if (value && batch.value) {
batch.value = !value;
} else {
batch.value = value;
}
if (value === false) {
selectIds.value = []
selectedApproveItems.value.forEach((item) => (item.checked = false));
selectedApproveItems.value.length = 0;
}
}
defineExpose({
showModal,
})
const notPassModalRef = ref(null)
const showActions = computed(() => {
return selectedApproveItems.value.length > 0 && batch;
});
function onCheckChange(checked: any, item: any) {
item.checked = checked
const index = selectedApproveItems.value.indexOf(item);
if (index === -1 && checked) selectedApproveItems.value.push(item);
else selectedApproveItems.value.splice(index, 1);
}
function rejectHandler() {
const modal = unref(notPassModalRef)! as any
modal.showModal(selectedApproveItems.value)
}
function reset() {
batch.value = false;
pagination.pageNo = 1;
pagination.pageSize = 20;
selectIds.value = [];
selectedApproveItems.value.length = 0;
loading = false;
canloadMore = true;
}
function validate(items: any[]) {
if (items.length === 0) return "至少选中一个任务";
return null;
}
function approvalHandler(items?: any) {
if (batch.value) {
processItems = selectedApproveItems.value
}
// => => /
if (items !== undefined && !(items instanceof PointerEvent))
processItems = [items]
const msg = validate(processItems)
if (msg !== null) {
message.error(msg)
return
}
const list: any = []
processItems.forEach((item) => {
list.push({
formId: item.id,
taskId: item.taskId,
taskName: item.fromTaskName,
})
})
const param = {
result: true,
comment: '',
disposeType: '',
disposeTypeId: '',
failCauseId: '',
failCauseName: '',
flowTaskInfoList: list,
}
dialog.info({
title: '确认提示',
content: '确认给该任务审批为【通过】吗?',
positiveText: '确定',
negativeText: '取消',
onPositiveClick: () => {
doAudit(param)
},
onNegativeClick: () => { },
})
}
function doAudit(param: any) {
audit(param).then((res) => {
const { code } = res
setBatch(false)
if (code === 'OK') {
message.info(res.message)
// emitter.emit('refresh')
refreshHandler()
}
else message.error(res.message)
})
}
function reloadList() {
refreshHandler()
const checked = ref(false)
function onCheckChange(val: any, item: any) {
checked.value = val
}
async function refreshHandler() {
reset()
const list = await featchList()
listData.value = list
layout()
}
</script>
<template>
<div>
<n-modal v-model:show="show" :mask-closable="false" style="position: relative;" transform-origin="center"
@after-enter="afterEnter" @after-leave="afterLeave">
<n-card :style="cardStyle" class="card card-1" style="position: fixed;top:64px" :bordered="false" size="huge"
role="dialog" aria-modal="true">
<n-modal
v-model:show="show" :mask-closable="false" style="position: relative;" transform-origin="center"
@after-enter="afterEnter" @after-leave="afterLeave"
>
<n-card
:style="cardStyle" class="card" style="position: fixed;top:64px" :bordered="false" size="huge" role="dialog"
aria-modal="true"
>
<div class="wrapper">
<div class="wrapper-m32">
<SvgIcon name="recycle" size="16" />
@ -415,80 +270,44 @@ async function refreshHandler() {
<div class="wrapper-content">
<div class="wrapper-content-form wrapper-m32">
<div>
<n-popselect v-model:value="timeRange" :options="timeOptions" trigger="click" @change="onChange">
<n-popselect v-model:value="timeRange" :options="timeOptions" trigger="click">
<div class="wrapper-content-form-dropdown">
<span>时间排序</span>
<span>{{ timeLabel || '时间模式' }}</span>
<SvgIcon class="wrapper-content-form-dropdown-gap" name="arrow-botton" size="14" />
</div>
</n-popselect>
<n-popselect v-model:value="viewMode" :options="viewOptions" trigger="click">
<div class="wrapper-form-dropdown">
<span>视图模式</span>
<span>{{ viewLabel || '视图模式' }}</span>
<SvgIcon class="wrapper-content-form-gap" name="arrow-botton" size="14" />
</div>
</n-popselect>
</div>
<div>
<div class="remove" @click="remove">
移除可疑文件夹
</div>
<div class="wrapper-content-form-button" @click="setBatch(true)" v-show="!showActions">
<div>移除可疑文件夹</div>
<div class="wrapper-content-form-button">
<SvgIcon style="margin-right: 6px;" size="14" name="tf" />
批量审批
</div>
<div v-show="showActions" class="batch">
<n-button text @click="setBatch(false)">
<template #icon>
<SvgIcon name="revoke" />
</template>
返回
</n-button>
<div style="cursor: pointer; margin-left: 16px" @click.stop="rejectHandler">
<SvgIcon width="64" height="28" name="a1" />
</div>
<SvgIcon size="24" name="vs" />
<div style="cursor: pointer" @click.stop="approvalHandler">
<SvgIcon width="64" height="28" name="a2" />
</div>
</div>
</div>
</div>
<div ref="el" class="scroll">
<!-- <n-scrollbar :on-scroll="scrollHandler"> -->
<div ref="masonryRef" class="grid">
<div v-for="(item, index) in listData" :key="item.pictureId" :data-id="item.pictureId"
:class="{ 'grid-item-selected': isSelected(item.pictureId) }" :style="{ height: gridHeight }"
class="grid-item">
<n-image :src="item.imgUrl" class="img "
:class="{ 'img-fit': viewMode === 'horizontalVersion', 'img-full': viewMode === '3:4' || viewMode === 'verticalVersion' }" />
<n-checkbox v-if="batch && item.historyStates === 1" v-model:checked="item.checked"
<div
v-for="(item, index) in listData" :key="index" :data-id="index"
:class="{ 'grid-item-selected': isSelected(index) }" :style="{ height: gridHeight }" class="grid-item"
>
<img
class="wrapper-content-item-img"
:class="{ 'wrapper-content-item-img-fit': viewMode !== 'masonry' }" :src="item.imgUrl"
>
<n-checkbox
v-model:checked="item.checked"
style="position:absolute;left:20px;top:20px" @click.prevent
@update:checked="onCheckChange($event, item)" />
<img v-if="item.historyStates === 2" class="tag-status" src="@/assets/images/task/tag-pass.png" alt="">
<img v-if="item.historyStates === 3" class="tag-status" src="@/assets/images/task/tag-not-pass.png"
alt="">
<div :class="{ 'percent-red': item.similarityScore === 100 }" class="percent">
{{ item.similarityScore }}<span class="percent-unit">%</span>
</div>
<div class="time" style="left: 25px;bottom: 15px;">
<!-- <div class="time-item">
<SvgIcon class="svg-time" color="#FFF" size="16" name="camera-time" />
<span>{{ item?.photoDateTimestamp ?
formatToDateHMS(Number(item.photoDateTimestamp)) : '-' }}</span>
</div>
<div class="time-item time-item2">
<SvgIcon class="svg-time" color="#FFF" size="16" name="submit-time" />
<span>{{ item.submitDateTimestamp ?
formatToDateHMS(Number(item.submitDateTimestamp)) : '-' }}</span>
</div> -->
<div class="time-item">
<SvgIcon class="svg-time" color="#FFF" size="16" name="time" />
<span>{{ item.submitDateTimestamp ?
formatToDateHMS(Number(item.submitDateTimestamp)) : '-' }}</span>
</div>
</div>
@update:checked="onCheckChange($event, item)"
/>
</div>
</div>
<!-- </n-scrollbar> -->
@ -501,9 +320,6 @@ async function refreshHandler() {
</div>
</n-card>
</n-modal>
<NotPassed ref="notPassModalRef" @success="reloadList" />
<ConfrimModal ref="confrimModalRef" @commit="commit" :selectedTotal="selectIds.length" />
</div>
</template>
@ -512,12 +328,7 @@ async function refreshHandler() {
width: 100vw;
height: calc(100vh - 64px);
user-select: none;
border-top-left-radius: 10px;
border-top-right-radius: 10px;
}
.remove {
cursor: pointer;
/* Standard syntax */
}
.close {
@ -548,10 +359,6 @@ async function refreshHandler() {
}
}
.img {
border-radius: 8px;
}
.wrapper {
display: flex;
flex-direction: column;
@ -563,7 +370,7 @@ async function refreshHandler() {
padding: 24px 0px 12px 0px;
}
&-m32 {
&-m32{
margin-left: 32px;
}
@ -618,96 +425,17 @@ async function refreshHandler() {
.grid-item {
width: 214px;
padding: 16px;
position: relative;
.tag-status {
width: 46px;
height: 22px;
position: absolute;
left: 16px;
top: 20px;
}
}
.grid-item-selected {
background-color: #dae3ff;
}
.percent {
position: absolute;
display: flex;
align-items: center;
justify-content: center;
width: 35px;
height: 18px;
opacity: 0.9;
background: #6f92fd;
border-radius: 6px 0px 6px 0px;
z-index: 5;
right: 28px;
top: 20px;
color: #fff;
font-size: 14px;
.percent-unit {
font-size: 8px;
margin-top: 4px;
}
}
.percent-red {
background: #ff4e4f;
}
.time {
position: absolute;
z-index: 3;
left: 32px;
bottom: 32px;
.time-item {
display: flex;
align-items: center;
font-size: 14px;
font-family: PingFang SC, PingFang SC-Medium;
font-weight: 500;
color: #ffffff;
margin-bottom: 4px;
}
.time-item2 {
margin-bottom: 0;
}
.svg-time {
margin-right: 5px;
}
}
.scroll {
overflow-y: auto;
overflow-y: scroll;
height: calc(100vh - 282px);
margin-left: 20px;
background-color: aqua;
}
}
}
.wrapper-content-form-button {
cursor: pointer;
}
.img-fit {
width: 100%;
overflow: hidden;
}
.img-full {
width: 100%;
overflow: hidden;
::v-deep(img) {
width: 100%;
height: 100%;
object-fit: cover;
}
}</style>
</style>

@ -14,7 +14,7 @@ defineExpose({
<template>
<div>
<n-modal v-model:show="show" :mask="false" :showMask="false" transform-origin="center">
<n-modal v-model:show="show" :mask="false" transform-origin="center">
<Search @close="show = false" />
</n-modal>
</div>

@ -9,7 +9,6 @@ const cardStyle = {
'width': '800px',
'--n-padding-bottom': '10px',
'--n-padding-left': '10px',
'padding-bottom':'100px'
}
function showModal() {
@ -131,9 +130,9 @@ defineExpose({
</table>
</div>
</div>
<!-- <n-divider /> -->
<n-divider />
<!-- <template #footer>
<template #footer>
<div class="wrapper-footer">
<n-button type="info" @click="closeModal">
确认
@ -142,7 +141,7 @@ defineExpose({
取消
</n-button>
</div>
</template> -->
</template>
</n-card>
</n-modal>
</div>
@ -254,11 +253,6 @@ defineExpose({
tr td:first-child{
text-align: right;
padding-right: 10px;
color: #515457;
}
tr td{
color: #333333;
}
tr span{
padding: 0 10px;

@ -1,162 +1,133 @@
<script lang="ts" setup>
import { computed, inject, onMounted, ref } from "vue";
import { useRoute, useRouter } from "vue-router";
import { useUser } from "@/store/modules/user";
import { getImgUrl } from "@/utils/urlUtils";
import defaultAvatar from '@/assets/icons/avatar.svg';
import { computed, inject, onMounted, ref } from 'vue'
import { useRoute, useRouter } from 'vue-router'
import { useUser } from '@/store/modules/user'
import { getImgUrl } from '@/utils/urlUtils'
const emit = defineEmits<{
(e: "logout"): void;
}>();
(e: 'logout'): void
}>()
const router = useRouter();
const router = useRouter()
const userStore = useUser();
const userStore = useUser()
const useInfo = userStore.getUserInfo;
const useInfo = userStore.getUserInfo
const aiDisabled = ref(false);
const aiDisabled = ref(false)
function handleSelect(row) {
userStore.updateTenantId(row.key);
location.reload();
function handleSelect(key: string) {
userStore.updateTenantId(key)
location.reload()
}
function logIt(e) {
return false;
return false
}
//
function goHome(e) {
router.push({ name: "home" });
router.push({ name: 'home' })
}
//
function goTask(e) {
router.push({ name: "task-main" });
router.push({ name: 'task-main' })
}
// AI
function goWorksheet(e) {
router.push({ name: "worksheet-main" });
router.push({ name: 'worksheet-main' })
}
//
function goFinal(e) {
router.push({ name: "final-main" });
router.push({ name: 'final-main' })
}
const mousetrap = inject("mousetrap") as any;
const mousetrap = inject('mousetrap') as any
onMounted(() => {
mousetrap.bind("g h", goHome);
mousetrap.bind("g t", goTask);
mousetrap.bind("g a", goWorksheet);
mousetrap.bind("g e", goFinal);
});
mousetrap.bind('g h', goHome)
mousetrap.bind('g t', goTask)
mousetrap.bind('g a', goWorksheet)
mousetrap.bind('g e', goFinal)
})
const showPopover = ref(false);
const popRef = ref(null);
const changeFlag = ref(false);
const showPopover = ref(false)
const popRef = ref(null)
const iconName = computed(() => {
return showPopover.value ? "expand" : "collapse";
});
return showPopover.value ? 'expand' : 'collapse'
})
function handleUpdateShow(show: boolean) {
showPopover.value = show;
showPopover.value = show
}
function logOut() {
(popRef.value as any).setShow(false);
emit("logout");
(popRef.value as any).setShow(false)
emit('logout')
}
const currentCompanyName = computed(() => {
const tenantList = useInfo.tenantList;
const currentId = userStore.getTenantId;
const current = tenantList.find((item) => item.id === currentId);
return current.name || "name";
});
const tenantList = useInfo.tenantList
const currentId = userStore.getTenantId
const current = tenantList.find(item => item.id === currentId)
return current.name || 'name'
})
const options = computed(() => {
const tenantList = useInfo.tenantList;
const tenantList = useInfo.tenantList
return tenantList.map((item) => {
return {
label: item.name,
key: item.id,
};
});
});
}
})
})
</script>
<template>
<n-popover
ref="popRef"
style="border-radius: 10px"
placement="bottom-end"
raw
:show-arrow="false"
trigger="click"
ref="popRef" style="border-radius: 10px" placement="bottom-end" raw :show-arrow="false" trigger="click"
@update:show="handleUpdateShow"
>
<template #trigger>
<div class="setting">
<span>{{ useInfo.username }}</span>
<SvgIcon style="margin-left: 6px" :name="iconName" size="14" />
<SvgIcon style="margin-left: 6px;" :name="iconName" size="14" />
</div>
</template>
<div class="container">
<div class="header">
<n-avatar
:src="(useInfo.usericon && getImgUrl(useInfo.usericon)) || defaultAvatar"
round
style="width: 53px; height: 53px"
/>
<div style="margin-left: 12px">
<span style="display: block" class="user-name">{{ useInfo.username }}</span>
<span style="display: block" class="depart-name">{{ useInfo.departname }}</span>
<n-avatar :src="getImgUrl(useInfo.usericon)" round size="medium" />
<div style="margin-left: 10px">
<span style="display: block; font-size: 20px">{{ useInfo.username }}</span>
<span style="display: block; font-size: '20px'">{{ useInfo.departname }}</span>
</div>
</div>
<div class="trigger">
<span>{{ currentCompanyName }}</span>
<span @click="changeFlag = !changeFlag" style="cursor: pointer"><SvgIcon name="switchCompany" size="24" /></span>
</div>
<n-dropdown placement="left-start" trigger="hover" :options="options" @select="handleSelect">
<div class="trigger">
<span>{{ currentCompanyName }}</span>
<span>icon</span>
</div>
</n-dropdown>
<div class="item">
<span>AI设置开关</span>
<n-switch v-model:value="aiDisabled" />
</div>
<div class="trigger">联系我们</div>
<n-divider style="margin-top: 0px; margin-bottom: 10px; padding: 0 22px" />
<div class="trigger" @click="logOut">退</div>
<div
class="container sub-container"
v-show="changeFlag"
style="position: absolute; right: 17vw; width: 11.5vw; padding: 24px 0"
>
<div
class="trigger"
v-for="option in options"
:key="option.key"
@click="handleSelect(option)"
>
{{ option.label }}
</div>
<div class="trigger">
联系我们
</div>
<n-divider style="margin-top: 0px; margin-bottom: 10px" />
<div class="trigger" @click="logOut">
退出登录
</div>
</div>
</n-popover>
</template>
<style lang="less" scoped>
.container {
.header {
.user-name {
font-size: 16px;
}
.depart-name {
font-size: 12px;
}
}
}
.setting {
display: flex;
align-items: center;
@ -169,40 +140,26 @@ const options = computed(() => {
border-radius: 10px;
justify-content: center;
background-color: #ffffff;
width: 16vw;
position: relative;
.header {
border-radius: 10px 10px 0px 0px;
background: linear-gradient(122deg, #4867ff 5%, #a0b3ff 100%);
background-color: #7a92ff;
padding: 10px 20px;
display: flex;
align-items: center;
margin-bottom: 14px;
margin-bottom: 20px;
color: #ffffff;
height: 80px;
}
.trigger,
.item {
display: flex;
justify-content: space-between;
padding: 13px 20px;
cursor: pointer;
color: #333333;
padding: 10px 20px;
}
.trigger:hover {
background-color: #e8f2ff;
}
}
::v-deep(.n-dropdown-option) {
color: lime;
background: red;
}
::v-deep(.n-dropdown-option-body__label) {
color: lime;
}
</style>

@ -7,15 +7,11 @@ import RecycleModal from './RecycleModal.vue'
import SearchModal from './SearchModal.vue'
import ShortcutModal from './ShortcutModal.vue'
import UserSettings from './UserSettings.vue'
import { msgPolling } from '@/api/message/message'
import { getImgUrl } from '@/utils/urlUtils'
import { useUser } from '@/store/modules/user'
import { useTaskStore } from '@/store/modules/task'
import defaultAvatar from '@/assets/icons/avatar.svg';
const taskStore = useTaskStore();
export default defineComponent({
name: "PageHeader",
name: 'PageHeader',
components: {
UserSettings,
QuillModal,
@ -31,139 +27,120 @@ export default defineComponent({
type: Boolean,
},
},
emits: ["update:collapsed"],
emits: ['update:collapsed'],
setup() {
const message = useMessage();
const dialog = useDialog();
const message = useMessage()
const dialog = useDialog()
const userStore = useUser();
const useInfo = userStore.getUserInfo;
const userStore = useUser()
const useInfo = userStore.getUserInfo
const name = "";
const name = ''
const state = reactive({
username: name ?? "",
fullscreenIcon: "FullscreenOutlined",
});
username: name ?? '',
fullscreenIcon: 'FullscreenOutlined',
})
const router = useRouter();
const route = useRoute();
const routename = ref(route.meta.title);
// mm
const iconList = ref([
{
icon: "magnifying-1",
handle: searchHandler,
},
{
icon: "shortcut-keys",
handle: shortcutHandler,
},
{
icon: "suspicious-folder",
handle: recycleHandler,
},
{
icon: "memo",
handle: quillHandler,
},
{
icon: "nomessage",
handle: goMessage,
},
]);
const router = useRouter()
const route = useRoute()
const routename = ref(route.meta.title)
watch(
() => route.fullPath,
() => {
routename.value = route.meta.title;
}
);
const handleDragOver = (event, item) => {
taskStore.setInFile(true);
};
const handleDragLeave = (event, item) => {
taskStore.setInFile(false);
};
routename.value = route.meta.title
},
)
const dropdownSelect = (key) => {
router.push({ name: key });
};
router.push({ name: key })
}
// 退
const doLogout = () => {
dialog.info({
title: "提示",
content: "您确定要退出登录吗",
positiveText: "确定",
negativeText: "取消",
title: '提示',
content: '您确定要退出登录吗',
positiveText: '确定',
negativeText: '取消',
onPositiveClick: () => {
userStore.logout().then(() => {
message.success("成功退出登录");
message.success('成功退出登录')
router
.replace({
name: "Login",
name: 'Login',
query: {
// redirect: route.fullPath,
redirect: route.fullPath,
},
})
.finally(() => location.reload());
});
.finally(() => location.reload())
})
},
onNegativeClick: () => {},
});
};
})
}
const quillModalRef = ref(null);
const shortcutModal = ref(null);
const recycleModalRef = ref(null);
const SearchModalRef = ref(null);
const quillModalRef = ref(null)
const shortcutModal = ref(null)
const recycleModalRef = ref(null)
const SearchModalRef = ref(null)
function quillHandler() {
const modal = unref(quillModalRef)! as any;
modal.showModal();
const modal = unref(quillModalRef)! as any
modal.showModal()
}
function shortcutHandler() {
const modal = unref(shortcutModal)! as any;
modal.showModal();
const modal = unref(shortcutModal)! as any
modal.showModal()
}
function recycleHandler() {
const modal = unref(recycleModalRef)! as any;
modal.showModal();
const modal = unref(recycleModalRef)! as any
modal.showModal()
}
function searchHandler() {
const modal = unref(SearchModalRef)! as any;
modal.showModal();
const modal = unref(SearchModalRef)! as any
modal.showModal()
}
function goMessage() {
router.push({ name: "message-main" });
router.push({ name: 'message-main' })
}
async function getMessage() {
const res = await msgPolling();
if (res.data) iconList.value[4].icon = "hasmessage";
else iconList.value[4].icon = "nomessage";
}
setInterval(() => {
getMessage();
}, 5000);
const mousetrap = inject("mousetrap") as any;
const mousetrap = inject('mousetrap') as any
onMounted(() => {
getMessage();
mousetrap.bind("n r", quillHandler);
mousetrap.bind("n t", quillHandler);
mousetrap.bind("n n", recycleHandler);
mousetrap.bind("m m", searchHandler);
});
mousetrap.bind('n r', quillHandler)
mousetrap.bind('n t', quillHandler)
mousetrap.bind('n n', recycleHandler)
mousetrap.bind('m m', searchHandler)
})
const defaultAvatarSrc = ref(defaultAvatar);
// mm
const iconList = [
{
icon: 'magnifying-1',
handle: searchHandler,
},
{
icon: 'shortcut-keys',
handle: shortcutHandler,
},
{
icon: 'suspicious-folder',
handle: recycleHandler,
},
{
icon: 'memo',
handle: quillHandler,
},
{
icon: 'newmessage',
handle: goMessage,
},
]
return {
...toRefs(state),
@ -181,13 +158,9 @@ export default defineComponent({
recycleHandler,
useInfo,
getImgUrl,
getMessage,
handleDragOver,
handleDragLeave,
defaultAvatarSrc,
}
},
});
})
</script>
<template>
@ -209,16 +182,6 @@ export default defineComponent({
v-for="item in iconList"
:key="item.icon"
class="layout-header-trigger layout-header-trigger-min"
@dragover.prevent="
(e) => {
handleDragOver(e, item);
}
"
@dragleave.prevent="
(e) => {
handleDragLeave(e, item);
}
"
>
<div class="back" @click="item.handle">
<SvgIcon :name="item.icon" size="18" />
@ -226,8 +189,7 @@ export default defineComponent({
</div>
<!-- 个人中心 -->
<div class="layout-header-trigger layout-header-trigger-min">
<!-- <n-avatar :src="getImgUrl(useInfo.usericon)" round /> -->
<n-avatar :src="(useInfo.usericon && getImgUrl(useInfo.usericon)) || defaultAvatarSrc" round/>
<n-avatar :src="getImgUrl(useInfo.usericon)" round />
</div>
<!-- 设置 -->
<UserSettings @logout="doLogout" />
@ -337,7 +299,9 @@ export default defineComponent({
}
.layout-header-left {
::v-deep(.n-breadcrumb .n-breadcrumb-item:last-child .n-breadcrumb-item__link) {
::v-deep(
.n-breadcrumb .n-breadcrumb-item:last-child .n-breadcrumb-item__link
) {
color: #515a6e;
}
}

@ -36,7 +36,7 @@ function getSvgName(item: MenuMixedOption) {
class="icon-button" :class="{ 'icon-button--selected': isSelect(item) }"
@click="handleClick(item)"
>
<SvgIcon color="#666666" :size="item.svgsize as number" :name="getSvgName(item)" />
<SvgIcon :size="item.svgsize as number" :name="getSvgName(item)" />
</button>
</template>
<span>{{ item.title }}</span>

@ -1,98 +1,72 @@
<script lang="ts">
import { computed, defineComponent, onMounted, ref, unref, watch } from "vue";
import { useRoute, useRouter } from "vue-router";
import { IconGroup } from "../IconGroup";
import { useAsyncRouteStore } from "@/store/modules/asyncRoute";
import { generatorMenu } from "@/utils";
import { storage } from "@/utils/Storage";
import { CURRENT_USER } from "@/store/mutation-types";
import { computed, defineComponent, onMounted, ref, unref, watch } from 'vue'
import { useRoute, useRouter } from 'vue-router'
import { IconGroup } from '../IconGroup'
import { useAsyncRouteStore } from '@/store/modules/asyncRoute'
import { generatorMenu } from '@/utils'
export default defineComponent({
name: "AppMenu",
name: 'AppMenu',
components: { IconGroup },
emits: ["clickMenuItem"],
emits: ['clickMenuItem'],
setup(props, { emit }) {
//
const currentRoute = useRoute();
const router = useRouter();
const asyncRouteStore = useAsyncRouteStore();
const menus = ref<any[]>([]);
const selectedSvg = ref<string>(currentRoute.meta.svgname as string);
const currentRoute = useRoute()
const router = useRouter()
const asyncRouteStore = useAsyncRouteStore()
const menus = ref<any[]>([])
const selectedSvg = ref<string>(currentRoute.meta.svgname as string)
const getSelectedSvg = computed(() => {
return unref(selectedSvg);
});
return unref(selectedSvg)
})
//
watch(
() => currentRoute.fullPath,
() => {
updateMenu();
}
);
updateMenu()
},
)
function updateSelectedKeys() {
const svgname: string = (currentRoute.meta?.svgname as string) || "";
selectedSvg.value = svgname;
const svgname: string = (currentRoute.meta?.svgname as string) || ''
selectedSvg.value = svgname
}
function updateMenu() {
menus.value = generatorMenu(asyncRouteStore.getMenus);
const userInfo = storage.get(CURRENT_USER);
if (userInfo && userInfo.frontmenuTList) {
menus.value = userInfo.frontmenuTList.map((item) => {
let v = {
component: () =>
item.resUrl == "/task"
? import("@/views/task/index.vue")
: item.resUrl == "/home"
? import("@/views/home/index.vue")
: item.resUrl == "/worksheet"
? import("@/views/worksheet/index.vue")
: item.resUrl == "/final"
? import("@/views/final/index.vue")
: "",
icon: undefined,
key: item.resKey,
label: item.description,
meta: {
title: item.description,
permissions: [item.resKey],
},
path: item.resUrl,
name: item.resKey,
svgname: item.icon,
svgsize: item.resUrl == "/home" ? 60 : 22,
title: item.description,
};
return v;
});
}
updateSelectedKeys();
menus.value = generatorMenu(asyncRouteStore.getMenus)
updateSelectedKeys()
}
//
function clickMenuItem(key: string) {
if (/http(s)?:/.test(key)) window.open(key);
else router.push({ name: key });
if (/http(s)?:/.test(key))
window.open(key)
else
router.push({ name: key })
emit("clickMenuItem" as any, key);
emit('clickMenuItem' as any, key)
}
onMounted(() => {
updateMenu();
});
updateMenu()
})
return {
menus,
selectedSvg,
getSelectedSvg,
clickMenuItem,
};
}
},
});
})
</script>
<template>
<IconGroup :options="menus" :value="getSelectedSvg" @update:value="clickMenuItem" />
<IconGroup
:options="menus"
:value="getSelectedSvg"
@update:value="clickMenuItem"
/>
</template>

@ -38,7 +38,7 @@ const routes: Array<RouteRecordRaw> = [
path: 'final-detail',
name: 'final-detail',
meta: {
title: '任务详情',
title: '任务终审详情',
},
component: () => import('@/views/task/content/Content.vue'),
},

@ -18,7 +18,7 @@ const routes: Array<RouteRecordRaw> = [
redirect: '/home',
component: Layout,
meta: {
title: 'AI一键查重',
title: 'AI查重',
svgname: 'ai-main',
svgsize: 60,
permissions: ['home_main'],
@ -29,7 +29,7 @@ const routes: Array<RouteRecordRaw> = [
path: 'home',
name: `home_main`,
meta: {
title: 'AI一键查重',
title: 'AI查重',
permissions: ['home_main'],
affix: true,
},

@ -32,7 +32,7 @@ const routes: Array<RouteRecordRaw> = [
path: 'message',
name: 'message-main',
meta: {
title: '消息通知',
title: 'message',
},
component: () => import('@/views/message/index.vue'),
},

@ -1,5 +1,5 @@
import { Layout } from '@/router/constant'
import type { RouteRecordRaw } from 'vue-router'
import { Layout } from '@/router/constant'
/**
* @param name , ,
@ -19,7 +19,7 @@ const routes: Array<RouteRecordRaw> = [
redirect: '/worksheet',
component: Layout,
meta: {
title: '图审审批管理',
title: 'AI工单',
permissions: ['worksheet-main'],
svgname: 'worksheet',
svgsize: 22,
@ -30,7 +30,7 @@ const routes: Array<RouteRecordRaw> = [
path: 'worksheet',
name: 'worksheet-main',
meta: {
title: '图审审批管理',
title: 'AI工单',
},
component: () => import('@/views/worksheet/index.vue'),
},

@ -9,10 +9,6 @@ export interface ConfigState {
systemConfig: AsideConfig | null
customConfig: string[] | null
asideValue: any
searchValue: string
isAllowDownload: boolean
timeNum: number
filterConfig: string[] // 过滤筛选条件
}
export const useAsideConfigStore = defineStore({
@ -21,10 +17,6 @@ export const useAsideConfigStore = defineStore({
systemConfig: null,
customConfig: null,
asideValue: null,
searchValue: "",
isAllowDownload: true,
timeNum: 0,
filterConfig: [],
}),
getters: {
getConfig(): AsideConfig | null {
@ -34,19 +26,7 @@ export const useAsideConfigStore = defineStore({
return this.customConfig
},
getAsideValue(): any {
return this.asideValue || {}
},
getSearchValue(): any {
return this.searchValue
},
getIsAllowDownload(): any {
return this.isAllowDownload
},
getTimeNum(): any {
return this.timeNum
},
getFilterConfig(): any {
return this.filterConfig
return this.asideValue
},
},
actions: {
@ -56,22 +36,6 @@ export const useAsideConfigStore = defineStore({
setAsideValue(value) {
this.asideValue = value
},
setSearchValue(value) {
this.searchValue = value
},
setIsAllowDownload(value) {
this.isAllowDownload = value
},
setTimeNum(value) {
this.timeNum = value
},
// 设置个性化配置
setCustomConfig(value) {
this.customConfig = value
},
setFilterConfig(value) {
this.filterConfig = value
},
// 获取系统配置信息
async fetchConfig() {
const response = await getConfig()

@ -1,6 +1,6 @@
import { defineStore } from 'pinia'
import { store } from '@/store'
import { getBackList, getBusinessList, getIzShowList, getIztaskstatusList, getPictureTypeList, getRegionList, getRejectList, getRelationTypeList, getTFList, getizstatusList, getizApprovalStatusList } from '@/api/dictionary'
import { getBackList, getBusinessList, getIzShowList, getIztaskstatusList, getPictureTypeList, getRegionList, getRejectList, getRelationTypeList, getTFList, getizstatusList } from '@/api/dictionary'
export interface DictionaryState {
regionList: any
@ -24,7 +24,6 @@ export interface DictionaryState {
backList: any
relationTypeList: any
izstatusList: any
izApprovalStatusList: any
}
export const useDictionaryStore = defineStore({
@ -51,7 +50,6 @@ export const useDictionaryStore = defineStore({
backList: null,
relationTypeList: null,
izstatusList: null,
izApprovalStatusList: null,
}),
getters: {
getRegionList: (state) => {
@ -102,35 +100,8 @@ export const useDictionaryStore = defineStore({
getizstatus: (state) => {
return state.izstatusList
},
getizApprovalStatus: (state) => {
return state.izApprovalStatusList
}
},
actions: {
initData(){
// this.fetchRegionList(); //废弃
this.fetchPictureTypeList();
this.fetchPersionList();
this.fetchPlanList();
this.fetchTFList();
// this.fetchIzShowList(); //废弃
this.fetchIzProjectList();
this.fetchIztaskrromList();
this.fetchIztaskstatusList();
this.fetchIzvisitproList();
this.fetchIzfirmList();
this.fetchIzproductnameList();
this.fetchizcustomnameList();
this.fetchIzCustomtypeList();
this.fetchIzcustomlevelList();
this.fetchizizprojecttypeList();
this.fetchizvisitcityList();
this.fetchRejectList();
this.fetchBackList();
this.fetchRelationTypeList();
this.fetchizstatusListt();
this.fetchizApprovalStatusList();
},
settfList(config) {
this.tfList = config
},
@ -245,7 +216,7 @@ export const useDictionaryStore = defineStore({
// 退回方式
async fetchBackList() {
const list = await getBackList()
this.backList = generateOptions2(list)
this.backList = generateOptions(list, 'codeno', 'name')
return this.backList
},
// 退回方式
@ -260,12 +231,6 @@ export const useDictionaryStore = defineStore({
this.izstatusList = generateOptions2(list, 'codeno', 'name')
return this.izstatusList
},
// 审核状态(任务审核模块)
async fetchizApprovalStatusList() {
const list = await getizApprovalStatusList()
this.izApprovalStatusList = generateOptions2(list, 'codeno', 'name')
return this.izApprovalStatusList
},
},
})

@ -11,22 +11,17 @@ export const useTaskStore = defineStore({
approvalList: [],
packageid: '',
immersion: false,
inFile: false, // 是否进入文件夹
}),
getters: {
getActiveId: (state: TaskState) => state.activeId,
getPackageid: (state: TaskState) => state.packageid,
getCurrentIndex: (state: TaskState) => state.currentIndex,
getApprovalList: (state: TaskState) => state.approvalList,
getInFile: (state: TaskState) => state.inFile,
},
actions: {
setApprovalList(list: any[]) {
this.approvalList = list
},
setInFile(flag: any) {
this.inFile = flag
},
setActive(index: number, taskId?: string) {
this.currentIndex = index
const task = this.approvalList[index]

@ -124,11 +124,6 @@ export const useUserStore = defineStore({
// 默认设置为第一个租户
const firstTenant = data.tenantList.length > 0 ? data.tenantList[0] : null
const tenantId = firstTenant ? firstTenant.id : ''
data.frontmenuTList.forEach(ele=>{
if(ele.description === 'AI工单'){
ele.description = '图审审批管理'
}
})
storage.set(CURRENT_USER, data, ex)
storage.set(TENANT_ID, tenantId)
this.setUserInfo(data)

@ -1,8 +1,8 @@
import { getPackageList } from '@/api/work/work'
import { store } from '@/store'
import { useMessage } from 'naive-ui'
import { defineStore } from 'pinia'
import type { OrderState, PackageListItem } from '/#/workorder'
import { useMessage } from 'naive-ui'
import { getPackageList } from '@/api/work/work'
import { store } from '@/store'
export const useWorkOrderStore = defineStore({
id: 'work-order',
@ -11,9 +11,6 @@ export const useWorkOrderStore = defineStore({
activeId: '',
packageList: [],
immersion: false,
name: '',
dataId: '',
approvalList: [],
}),
getters: {
getActiveId: (state: OrderState) => state.activeId,
@ -24,11 +21,10 @@ export const useWorkOrderStore = defineStore({
setOrderList(list: PackageListItem[]) {
this.packageList = list
},
setActive(index: number, orderId?: string, dataId?: string) {
setActive(index: number, orderId?: string) {
this.currentIndex = index
const order = this.packageList[index]
this.activeId = orderId || order?.checkDuplicateId
this.dataId = dataId || order.id;
this.activeId = orderId || order?.id
},
forward() {
const len = this.packageList.length
@ -49,7 +45,8 @@ export const useWorkOrderStore = defineStore({
},
async fetchOrderList(pagination, keyword) {
const res = await getPackageList(pagination, keyword)
if (res.data && res.data.length > 0) {
if (res.data&&res.data.length > 0) {
this.packageList.push(...res.data)
if (!this.activeId)
this.setActive(0)

@ -33,15 +33,13 @@ export function checkStatus(status: number, msg: string): void {
$message.error('网络请求超时')
break
case 500:
// 若服务出现问题 则无法执行后续操作,故此处判断提示为登录失败
// $message.error('服务器错误,请联系管理员!')
$message.error('登录失败,请联系管理员!')
$message.error('服务器错误,请联系管理员!')
break
case 501:
$message.error('网络未实现')
break
case 502:
$message.error('网络错误,请重试')
$message.error('网络错误')
break
case 503:
$message.error('服务不可用,服务器暂时过载或维护!')

@ -201,7 +201,7 @@ const transform: AxiosTransform = {
// eslint-disable-next-line ts/no-use-before-define
const instance = http.getAxios()
const config = response.config
const whitelist = ['/api/captcha/captchatoken', '/api/captcha/captchaImage', '/api/backstage/adminlogin', '/api/oauthweb/token','/api/web/smslogin/login','/api/web/smslogin/sendcode','/api/ocr/sUser/selectSUser']
const whitelist = ['/api/captcha/captchatoken', '/api/captcha/captchaImage', '/api/backstage/adminlogin', '/api/oauthweb/token']
const expirationTime = storage.get(TOKEN_EXPIRATION_TIME)
// console.log('剩余失效时间(分):', (expirationTime - Date.now()) / 1000 / 60, config.url)
@ -264,7 +264,7 @@ const transform: AxiosTransform = {
if (err && err.includes('Network Error')) {
$dialog.info({
title: '网络异常',
content: '网络错误,请重试!',
content: '请检查您的网络连接是否正常',
positiveText: '确定',
// negativeText: '取消',
closable: false,

@ -1,180 +1,156 @@
<script lang="ts" setup>
import {
computed,
inject,
nextTick,
onBeforeMount,
onMounted,
reactive,
ref,
shallowRef,
unref,
watch,
} from "vue";
import { CustomFilterModalVue, FilterModal, NewFilterModal } from "@/views/final/comp";
import Search from "@/views/home/aside/comp/Search.vue";
import AdvanceFilter from "@/views/home/aside/comp/AdvanceFilter.vue";
import { getViewportOffset } from "@/utils/domUtils";
import { useWindowSizeFn } from "@/hooks/event/useWindowSizeFn";
import { useFinal } from "@/store/modules/final";
import type { Filter } from "/#/home";
import type { AsideEntity } from "@/config/aside";
import { asideMap } from "@/config/final";
import type { AsideConfig } from "/#/api";
import emitter from "@/utils/mitt";
const emit = defineEmits(["inputChange"]);
const finalStore = useFinal();
import { computed, nextTick, onBeforeMount, onMounted, reactive, ref, shallowRef, unref, watch } from 'vue'
import { CustomFilterModalVue, FilterModal, NewFilterModal } from '@/views/final/comp'
import Search from '@/views/home/aside/comp/Search.vue'
import AdvanceFilter from '@/views/home/aside/comp/AdvanceFilter.vue'
import { getViewportOffset } from '@/utils/domUtils'
import { useWindowSizeFn } from '@/hooks/event/useWindowSizeFn'
import { useFinal } from '@/store/modules/final'
import type { Filter } from '/#/home'
import type { AsideEntity } from '@/config/aside'
import { asideMap } from '@/config/final'
import type { AsideConfig } from '/#/api'
import emitter from '@/utils/mitt'
const finalStore = useFinal()
//
const asideValue: Record<keyof typeof asideMap, any> = reactive({});
const asideValue: Record<keyof typeof asideMap, any> = reactive({})
// :
const asideVisible: Partial<Record<keyof AsideConfig, boolean>> = reactive({});
const asideVisible: Partial<Record<keyof AsideConfig, boolean>> = reactive({})
//
const showItems = shallowRef<{ key: string; config: AsideEntity }[]>([]);
const showItems = shallowRef<{ key: string, config: AsideEntity }[]>([])
Object.keys(asideMap).forEach((key) => {
const { defaultValue, inFilterList } = asideMap[key];
if (inFilterList !== false) asideValue[key] = defaultValue;
});
const { defaultValue, inFilterList } = asideMap[key]
if (inFilterList !== false)
asideValue[key] = defaultValue
})
const filterModalRef = ref(null);
const newFilterModalRef = ref(null);
const customModalRef = ref(null);
const filterModalRef = ref(null)
const newFilterModalRef = ref(null)
const customModalRef = ref(null)
function showModal(modalRef: any) {
const modal = unref(modalRef)! as any;
modal.showModal();
const modal = unref(modalRef)! as any
modal.showModal()
}
const mousetrap = inject("mousetrap") as any;
mousetrap.bind("[", collapseHandler);
onMounted(() => {
nextTick(() => {
computeSlideHeight();
});
});
computeSlideHeight()
})
})
const collapse = ref(false);
const collapse = ref(false)
function collapseHandler() {
collapse.value = !collapse.value;
collapse.value = !collapse.value
}
const asideWidth = computed(() => {
return collapse.value ? 0 : 308;
});
return collapse.value ? 0 : 308
})
const asideHeight = ref(500);
const asideHeight = ref(500)
const asideStyle = computed(() => {
return {
width: `${asideWidth.value}px`,
height: `${asideHeight.value}px`,
};
});
}
})
const collapseIcon = computed(() => {
return collapse.value ? "expand-cir" : "collapse-cir";
});
return collapse.value ? 'expand-cir' : 'collapse-cir'
})
function computeSlideHeight() {
const headEl = document.querySelector(".aside-header")!;
const { bottomIncludeBody } = getViewportOffset(headEl);
const height = bottomIncludeBody;
asideHeight.value = height - 24;
const headEl = document.querySelector('.aside-header')!
const { bottomIncludeBody } = getViewportOffset(headEl)
const height = bottomIncludeBody
asideHeight.value = height - 24
}
useWindowSizeFn(computeSlideHeight, 280);
useWindowSizeFn(computeSlideHeight, 280)
onBeforeMount(async () => {
finalStore.fetchCustomConfig();
});
finalStore.fetchCustomConfig()
})
finalStore.$subscribe(() => {
const customConfig = finalStore.getCustomConfig;
const customConfig = finalStore.getCustomConfig
if (customConfig === null) return;
if (customConfig === null)
return
const showKeys: string[] = [...customConfig];
const defaultKeys = Object.keys(asideMap).filter(
(key) => asideMap[key].isDefaultFilter
);
showKeys.unshift(...defaultKeys);
const showKeys: string[] = [...customConfig]
const defaultKeys = Object.keys(asideMap).filter(key => asideMap[key].isDefaultFilter)
showKeys.unshift(...defaultKeys)
Object.keys(asideMap).forEach((key) => {
//
if (key.startsWith("iz"))
asideVisible[key] =
asideMap[key] && (showKeys.includes(key) || asideMap[key].isDefaultFilter);
});
if (key.startsWith('iz'))
asideVisible[key] = asideMap[key] && (showKeys.includes(key) || asideMap[key].isDefaultFilter)
})
const items = showKeys.reduce((acc, key) => {
if (asideMap[key]) {
const config = {
key,
config: asideMap[key],
};
return [...acc, config];
} else {
return acc;
}
return [...acc, config]
}
}, []);
else {
return acc
}
}, [])
showItems.value = items;
});
showItems.value = items
})
watch(asideVisible, (newVal) => {
Object.keys(asideValue).forEach((key) => {
if (newVal[key] === false) asideValue[key] = asideMap[key].defaultValue;
});
});
if (newVal[key] === false)
asideValue[key] = asideMap[key].defaultValue
})
})
const asideEnter = ref(false);
const asideEnter = ref(false)
const showCollapse = computed(() => {
return collapse.value ? true : asideEnter.value;
});
return collapse.value ? true : asideEnter.value
})
const showSearch = ref(false);
const showSearch = ref(false)
function setShowSearch(value: boolean) {
showSearch.value = value;
if(!value){
inputChange('')
}
showSearch.value = value
}
// key
function scrollHandler(key: string) {
const element = document.querySelector(`#${key}`);
element?.scrollIntoView(true);
const element = document.querySelector(`#${key}`)
element?.scrollIntoView(true)
}
function filterHandler(searchId: string) {
emitter.emit("filter-final", searchId);
emitter.emit('filter-final', searchId)
}
function editFilter(filter: any) {
const modal = unref(newFilterModalRef)! as any;
modal.showModal();
modal.edit(filter);
const modal = unref(newFilterModalRef)! as any
modal.showModal()
modal.edit(filter)
}
watch(asideValue, (newVal) => {
finalStore.setAsideValue(newVal);
});
const inputChange = (keyword) => {
emit("inputChange", keyword);
};
finalStore.setAsideValue(newVal)
})
</script>
<template>
<div
class="aside"
:style="asideStyle"
@mouseenter="asideEnter = true"
@mouseleave="asideEnter = false"
>
<div class="aside" :style="asideStyle" @mouseenter="asideEnter = true" @mouseleave="asideEnter = false">
<div v-show="showCollapse" class="aside-collapse">
<div class="aside-collapse-btn" @click="collapseHandler">
<SvgIcon :name="collapseIcon" size="40" />
@ -183,40 +159,23 @@ const inputChange = (keyword) => {
<n-scrollbar trigger="none">
<div class="aside-header">
<!-- 搜索跳转模块 -->
<Search
v-show="showSearch"
@select="scrollHandler"
@close="setShowSearch(false)"
@inputChange="inputChange"
/>
<Search v-show="showSearch" @select="scrollHandler" @close="setShowSearch(false)" />
<!-- 高级筛选 -->
<AdvanceFilter
v-show="!showSearch"
:type="1"
@select="filterHandler"
@update:search="setShowSearch(true)"
@show-custom="showModal(customModalRef)"
@show-filter="showModal(filterModalRef)"
v-show="!showSearch" :type="1" @select="filterHandler" @update:search="setShowSearch(true)"
@show-custom="showModal(customModalRef)" @show-filter="showModal(filterModalRef)"
/>
</div>
<component
:is="item.config.component"
v-for="(item, index) in showItems"
:id="item.key"
:key="index"
v-model:value="asideValue[item.key]"
:label="item.config.label"
:is="item.config.component" v-for="(item, index) in showItems" :id="item.key" :key="index"
v-model:value="asideValue[item.key]" :label="item.config.label"
/>
<!-- 筛选 -->
<CustomFilterModalVue ref="customModalRef" />
<!-- 过滤列表 -->
<FilterModal
ref="filterModalRef"
@edit-filter="editFilter"
@show-new-filter="showModal(newFilterModalRef)"
/>
<FilterModal ref="filterModalRef" @edit-filter="editFilter" @show-new-filter="showModal(newFilterModalRef)" />
<!-- 新增过滤 -->
<NewFilterModal ref="newFilterModalRef" />
</n-scrollbar>
@ -228,7 +187,7 @@ const inputChange = (keyword) => {
display: flex;
position: relative;
flex-direction: column;
background: #fff;
background: #FFF;
border: 1px solid #efeff5;
border-radius: 3px;
box-sizing: border-box;
@ -265,17 +224,11 @@ const inputChange = (keyword) => {
right: -20px;
}
::v-deep(.n-collapse
.n-collapse-item.n-collapse-item--right-arrow-placement
.n-collapse-item__header
.n-collapse-item-arrow) {
::v-deep(.n-collapse .n-collapse-item.n-collapse-item--right-arrow-placement .n-collapse-item__header .n-collapse-item-arrow) {
margin-left: 8px;
}
::v-deep(.n-collapse
.n-collapse-item
.n-collapse-item__header
.n-collapse-item__header-main) {
::v-deep(.n-collapse .n-collapse-item .n-collapse-item__header .n-collapse-item__header-main) {
font-weight: bold;
justify-content: space-between;
}
@ -288,18 +241,11 @@ const inputChange = (keyword) => {
border-top: 0px;
}
::v-deep(.n-collapse
.n-collapse-item
.n-collapse-item__content-wrapper
.n-collapse-item__content-inner) {
::v-deep(.n-collapse .n-collapse-item .n-collapse-item__content-wrapper .n-collapse-item__content-inner) {
padding-top: 10px;
}
::v-deep(.n-scrollbar
> .n-scrollbar-rail.n-scrollbar-rail--vertical
> .n-scrollbar-rail__scrollbar, .n-scrollbar
+ .n-scrollbar-rail.n-scrollbar-rail--vertical
> .n-scrollbar-rail__scrollbar) {
::v-deep(.n-scrollbar > .n-scrollbar-rail.n-scrollbar-rail--vertical > .n-scrollbar-rail__scrollbar, .n-scrollbar + .n-scrollbar-rail.n-scrollbar-rail--vertical > .n-scrollbar-rail__scrollbar) {
width: 0px;
}
}

@ -1,10 +1,10 @@
<script lang="ts" setup>
import { debounce, difference } from 'lodash-es'
import { computed, ref, watch } from 'vue'
import { VueDraggable } from 'vue-draggable-plus'
import { setFilter } from '@/api/home/filter'
import { asideMap } from '@/config/final'
import { useFinal } from '@/store/modules/final'
import { debounce, difference } from 'lodash-es'
import { computed, ref, watch } from 'vue'
import { VueDraggable } from 'vue-draggable-plus'
const show = ref(false)
const checkAll = ref(false)
@ -25,11 +25,11 @@ const offList = ref<any[]>([])
const onList = ref<any[]>([])
const allCount = computed(() => {
return `全部筛选(共${offList.value.length}个)`
return `全部筛选(共${offList.value.length - 1}个)`
})
const selectCount = computed(() => {
return `已选筛选(共${onList.value.length}个)`
return `全部筛选(共${onList.value.length}个)`
})
defineExpose({
@ -118,12 +118,9 @@ finalStore.$subscribe(() => {
async function handleSumbit(e: MouseEvent) {
e.preventDefault()
const param = onList.value
.filter(item => !asideMap[item.id].isDefaultFilter)
.map((item) => {
return item.id
})
.join(',')
const param = onList.value.filter(item => !asideMap[item.id].isDefaultFilter).map((item) => {
return item.id
}).join(',')
await setFilter({ searchcount: param, type: 1 })
finalStore.fetchCustomConfig()
@ -147,11 +144,11 @@ function onCheckChange(checked: any, item: any) {
const index = selectIds.value.indexOf(item.id)
item.checked = checked
const currentIndex = offList.value.findIndex(v => v.id == item.id)
offList.value[currentIndex].checked = item.checked
if (index === -1 && checked)
selectIds.value.push(item.id)
else selectIds.value.splice(index, 1)
else
selectIds.value.splice(index, 1)
}
const showIds = computed(() => {
@ -167,10 +164,7 @@ watch(
return
const action = newVal > oldVal ? 'add' : 'remove'
const diff
= action === 'add'
? difference(selectIds.value, showIds.value)
: difference(showIds.value, selectIds.value)
const diff = action === 'add' ? difference(selectIds.value, showIds.value) : difference(showIds.value, selectIds.value)
if (diff.length === 0)
return
@ -249,58 +243,38 @@ const rightInputHandler = debounce((keyword) => {
<template>
<n-modal v-model:show="show" transform-origin="center" :mask-closable="false">
<n-card
class="cardstyle"
:bordered="false"
size="huge"
role="dialog"
aria-modal="true"
>
<n-card class="cardstyle" :bordered="false" size="huge" role="dialog" aria-modal="true">
<div class="wrapper">
<span class="wrapper-title" style="color: #333333;">自定义筛选</span>
<span class="wrapper-title">自定义筛选</span>
<div class="wrapper-bar">
<div class="wrapper-info" style="background-color: #F8F8F8;">
<span :style="{ 'margin-left': '18px' ,'color':'#333333'}">筛选项信息</span>
<div class="wrapper-info">
<span :style="{ 'margin-left': '18px' }">筛选项信息</span>
</div>
</div>
<n-grid cols="24" class="mt-4 proCard" responsive="screen" :x-gap="24">
<n-grid-item span="11">
<NCard
:title="allCount"
class="dragcardStyle"
:segmented="{ content: true, footer: true }"
size="small"
:title="allCount" class="dragcardStyle" :segmented="{ content: true, footer: true }" size="small"
:bordered="false"
>
<div>
<n-input placeholder="搜索关键" @input="leftInputHandler">
<n-input placeholder="搜索关键" @input="leftInputHandler">
<template #suffix>
<SvgIcon size="14px" name="magnifying-1" color="#999999" />
<SvgIcon size="14px" name="magnifying-1" />
</template>
</n-input>
<n-scrollbar
style="max-height: 500px; border: 1px solid #cad2dd; border-radius: 2px"
>
<n-scrollbar style="max-height: 500px;border: 1px solid #cad2dd;border-radius: 2px;">
<div class="draggable-ul">
<div class="draggable-li" style="color:#666666">
<n-checkbox
v-model:checked="checkAll"
label="全选"
@update:checked="onCheckAllChange"
/>
<div class="draggable-li">
<n-checkbox v-model:checked="checkAll" label="全部" @update:checked="onCheckAllChange" />
</div>
<div
v-for="item in offList"
v-show="item.name.includes(offKeyword)"
:key="item.id"
:class="{ 'disable-check': item.fix }"
class="draggable-li"
v-for="item in offList" v-show="item.name.includes(offKeyword)" :key="item.id"
:class="{ 'disable-check': item.fix }" class="draggable-li"
>
<n-checkbox
v-model:checked="item.checked"
:label="item.name"
:disabled="item.fix"
v-model:checked="item.checked" :label="item.name" :disabled="item.fix"
@update:checked="onCheckChange($event, item)"
/>
</div>
@ -309,55 +283,34 @@ const rightInputHandler = debounce((keyword) => {
</div>
</NCard>
</n-grid-item>
<n-grid-item style="display: flex; align-items: center" span="2">
<n-grid-item style="display: flex;align-items: center;" span="2">
<SvgIcon size="20" name="switchsvg" />
</n-grid-item>
<n-grid-item span="11">
<NCard
:title="selectCount"
class="dragcardStyle"
:segmented="{ content: true, footer: true }"
size="small"
:title="selectCount" class="dragcardStyle" :segmented="{ content: true, footer: true }" size="small"
:bordered="false"
>
<template #header-extra>
<span class="textbtnStyle" @click="clearDragSource"></span>
</template>
<div>
<!-- j -->
<n-input placeholder="搜索关键词" @input="rightInputHandler">
<n-input placeholder="搜索关键字" @input="rightInputHandler">
<template #suffix>
<SvgIcon size="14px" name="magnifying-1" color="#999999" />
<SvgIcon size="14px" name="magnifying-1" />
</template>
</n-input>
<n-scrollbar
style="max-height: 500px; border: 1px solid #cad2dd; border-radius: 2px"
class="scroll"
>
<VueDraggable
v-model="onList"
class="draggable-ul"
filter=".draggable-li[draggable='false']"
:animation="150"
group="shared"
>
<n-scrollbar style="max-height: 500px;border: 1px solid #cad2dd;border-radius: 2px;" class="scroll">
<VueDraggable v-model="onList" class="draggable-ul" filter=".draggable-li[draggable='false']" :animation="150" group="shared">
<div
v-for="item in onList"
v-show="item.name.includes(onKeyword)"
:key="item.id"
:draggable="!item.fix"
:class="{ fix: item.fix }"
class="cursor-move draggable-li"
v-for="item in onList" v-show="item.name.includes(onKeyword)" :key="item.id" :draggable="!item.fix"
:class="{ fix: item.fix }" class="cursor-move draggable-li"
>
<!-- v-show="!item.fix" 判断是否为固定值 -->
<SvgIcon name="drag" size="14" />
<SvgIcon v-show="!item.fix" name="drag" size="24" />
<span class="ml-2">{{ item.name }}</span>
<SvgIcon
v-if="!item.fix"
size="16px"
style="display: block; margin-left: auto; cursor: pointer"
name="clear"
@click="removeHandler(item.id)"
v-if="!item.fix" size="16px" style="display:block;margin-left: auto;cursor: pointer;"
name="clear" @click="removeHandler(item.id)"
/>
</div>
</VueDraggable>
@ -370,9 +323,9 @@ const rightInputHandler = debounce((keyword) => {
<template #footer>
<div class="wrapper-footer">
<n-button type="info" @click="handleSumbit">
</n-button>
<n-button secondary style="margin-left: 15px" @click="closeModal">
<n-button secondary style="margin-left:15px" @click="closeModal">
取消
</n-button>
</div>
@ -389,7 +342,6 @@ const rightInputHandler = debounce((keyword) => {
&-title {
font-weight: bold;
font-size: 16px;
color: #333333;
}
&-bar {
@ -406,10 +358,9 @@ const rightInputHandler = debounce((keyword) => {
&-info {
font-weight: bold;
position: relative;
font-size: 14px;
&:before {
background-color: #1980ff;
background-color: #1980FF;
content: "";
width: 5px;
border-radius: 2px;
@ -428,21 +379,18 @@ const rightInputHandler = debounce((keyword) => {
.cardstyle {
width: 620px;
height: 800px;
--n-padding-bottom: 16px;
--n-padding-bottom: 20px;
--n-padding-left: 24px;
--n-padding-right: 24px;
--n-padding-top: 20px;
}
.textbtnStyle {
cursor: pointer;
color: #1980ff;
color: #1980FF;
}
.draggable-ul {
width: 100%;
overflow: hidden;
background: #f8f8f8;
.draggable-li {
width: 100%;
@ -464,25 +412,6 @@ const rightInputHandler = debounce((keyword) => {
::v-deep(.n-card > .n-card-header) {
--n-padding-top: 0px;
--n-padding-bottom: 12px;
}
::v-deep(.n-card > .n-card-header .n-card-header__main) {
font-weight: lighter !important;
font-size: 14px;
color: #666666;
}
::v-deep(.n-scrollbar) {
border-top: none !important;
}
::v-deep(.n-button--info-type) {
background: #507afd !important;
}
::v-deep(.n-card__footer) {
padding: 0 16px 16px 16px !important;
}
::v-deep(.n-button--default-type) {
border: 1px solid #cad2dd !important;
color: #333333;
background: #ffffff;
--n-padding-bottom: 12px
}
</style>

@ -52,7 +52,7 @@ onMounted(async () => {
};
if (item.fix) {
mustList.push(item);
if (!userFieldFixed?.length && !userFieldUnFixed?.length) {
if (!userFieldFixed?.length && !userFieldUnFixed?.length) {
fixLeftList.value.push(item);
}
}
@ -64,6 +64,7 @@ onMounted(async () => {
}
offList.value.push(item);
});
});
const allCount = computed(() => {
@ -198,27 +199,13 @@ const selectIds = ref<string[]>([]);
function onCheckAllChange(value) {
const ids: string[] = [];
for (const item of offList.value) {
if (!item.fix) {
item.checked = value;
ids.push(item.id);
}
}
if (value) {
offList.value.map((v) => {
if (!v.checked) {
onList.value.push(v);
}
});
} else {
onList.value = [];
fixLeftList.value = [];
offList.value.map((v) => {
if (v.fix) {
fixLeftList.value.push(v);
}
});
}
selectIds.value = value ? ids : [];
}
@ -324,20 +311,6 @@ function removeHandler(id: string, type: "fix" | "unfix") {
fixLeftList.value[index].checked = false;
}
}
const indeterminate = computed(() => {
let baseNum = 0;
offList.value.map((v) => {
if (v.fix) {
baseNum += 1;
}
});
return (
onList.value.length + fixLeftList.value.length - baseNum > 0 &&
offList.value.length - baseNum >
onList.value.length + fixLeftList.value.length - baseNum
);
});
</script>
<template>
@ -368,16 +341,15 @@ const indeterminate = computed(() => {
<div>
<n-input placeholder="搜索关键字">
<template #suffix>
<SvgIcon size="14px" name="magnifying-1" color="#999999" />
<SvgIcon size="14px" name="magnifying-1" />
</template>
</n-input>
<div class="draggable-ul left-wrap">
<div class="draggable-li" :class="{ checkAll: indeterminate }">
<div class="draggable-ul">
<div class="draggable-li">
<n-checkbox
v-model:checked="checkAll"
label="全部"
@update:checked="onCheckAllChange"
:indeterminate="indeterminate"
/>
</div>
<div class="content">
@ -409,7 +381,7 @@ const indeterminate = computed(() => {
:bordered="false"
>
<template #header-extra>
<span class="textbtnStyle" @click="clearDragSource"></span>
<span class="textbtnStyle" @click="clearDragSource"></span>
</template>
<div>
<n-input placeholder="搜索关键字">
@ -431,15 +403,18 @@ const indeterminate = computed(() => {
:class="{ fix: item.fix }"
class="cursor-move draggable-item"
>
<SvgIcon name="drag" size="14" color="#666666" />
<span class="ml-2">{{ item.name }}</span>
<!-- <SvgIcon
<SvgIcon
v-if="!item.fix"
size="16px"
style="display: block; margin-left: auto; cursor: pointer"
style="
display: block;
margin-left: auto;
cursor: pointer;
"
name="clear"
@click="removeHandler(item.id, 'fix')"
/> -->
/>
</div>
</VueDraggable>
<div>不固定</div>
@ -455,12 +430,15 @@ const indeterminate = computed(() => {
:class="{ fix: item.fix }"
class="cursor-move draggable-item"
>
<SvgIcon name="drag" size="14" color="#666666" />
<span class="ml-2">{{ item.name }}</span>
<SvgIcon
v-if="!item.fix"
size="16px"
style="display: block; margin-left: auto; cursor: pointer"
style="
display: block;
margin-left: auto;
cursor: pointer;
"
name="clear"
@click="removeHandler(item.id, 'unfix')"
/>
@ -475,7 +453,7 @@ const indeterminate = computed(() => {
<template #footer>
<div class="wrapper-footer">
<n-button type="info" @click="handleSumbit"> </n-button>
<n-button type="info" @click="handleSumbit"> </n-button>
<n-button secondary style="margin-left: 15px" @click="closeModal">
取消
</n-button>
@ -489,8 +467,6 @@ const indeterminate = computed(() => {
.wrapper {
display: flex;
flex-direction: column;
border-bottom: 1px solid #e8e8e8;
padding-bottom: 32px;
&-title {
font-weight: bold;
@ -498,6 +474,7 @@ const indeterminate = computed(() => {
}
&-bar {
background-color: #e8e8e8;
width: 100%;
margin-top: 20px;
}
@ -510,9 +487,6 @@ const indeterminate = computed(() => {
&-info {
font-weight: bold;
position: relative;
color: #333333;
font-size: 14px;
background: #f8f8f8;
&:before {
background-color: #1980ff;
@ -533,17 +507,13 @@ const indeterminate = computed(() => {
.cardstyle {
width: 820px;
// --n-padding-bottom: 20px;
--n-padding-bottom: 20px;
--n-padding-left: 24px;
--n-padding-right: 24px;
--n-padding-top: 20px;
// padding: 20px 24px 0 24px !important
}
.textbtnStyle {
cursor: pointer;
color: #507AFD;
color: #1980ff;
}
.drag-wrapper {
@ -570,11 +540,10 @@ const indeterminate = computed(() => {
}
.draggable-item {
padding: 11px 16px;
padding: 10px 16px;
color: #333;
display: flex;
align-items: center;
// border-bottom: 1px solid #e8e8e8;
}
.disable-check {
@ -582,7 +551,9 @@ const indeterminate = computed(() => {
}
}
::v-deep(.n-card.n-card--content-segmented > .n-card__content:not(:first-child)) {
::v-deep(
.n-card.n-card--content-segmented > .n-card__content:not(:first-child)
) {
border: 0px;
}
@ -590,38 +561,4 @@ const indeterminate = computed(() => {
--n-padding-top: 0px;
--n-padding-bottom: 12px;
}
.left-wrap {
border: 1px solid #cbd3de;
}
::v-deep(.n-card > .n-card-header .n-card-header__main) {
font-weight: lighter !important;
font-size: 14px;
color: #666666;
}
::v-deep(.n-scrollbar) {
border-top: none !important;
}
::v-deep(.n-button--info-type) {
background: #507afd !important;
}
::v-deep(.n-button--default-type){
border: 1px solid #cad2dd !important;
}
// ::v-deep(.n-card__content){
// padding: 20px 24px 0 24px !important;
// }
::v-deep(.checkAll .n-checkbox.n-checkbox--indeterminate .n-checkbox-box) {
background: none;
border: none;
}
::v-deep(.checkAll .n-checkbox-box__border) {
border: 1px solid #e8e8e8 !important;
}
::v-deep(.checkAll .n-checkbox-icon) {
border: 3px solid #fff;
background: #1980ff;
}
::v-deep(.checkAll .n-checkbox-icon svg) {
display: none !important;
}
</style>

@ -8,7 +8,6 @@ import {
reactive,
ref,
unref,
computed,
} from "vue";
import { NDataTable } from "naive-ui";
import type { DataTableColumns, DataTableRowKey } from "naive-ui";
@ -27,7 +26,6 @@ const emit = defineEmits<{
}>();
const show = ref(false);
const checkedRowKeys = ref([]);
const cardStyle = {
width: "800px",
@ -74,7 +72,6 @@ const columns: DataTableColumns<RowData> = [
{
title: "创建时间",
key: "createtime",
sorter: (row1, row2) => new Date(row1?.createtime).getTime() - new Date(row2?.createtime).getTime()
},
{
title: "更新者",
@ -87,12 +84,11 @@ const columns: DataTableColumns<RowData> = [
];
const loading = ref(true);
const total = ref(0);
const pagination = reactive({
page: 1,
pageCount: 1,
pageSize: 10,
showSizePicker: true,
showSizePicker:true,
pageSizes: [
{
label: "10 每页",
@ -112,7 +108,6 @@ const pagination = reactive({
},
],
showQuickJumper: true,
prefix: () => `${total.value} 条数据`,
});
const tableData = ref<Array<RowData>>([]);
const keyword = ref("");
@ -122,8 +117,7 @@ async function query(page: number, pageSize: number) {
search_searchname: { value: keyword.value, op: "like", type: "string" },
};
const result = await getConditionList({ pageNo: page, pageSize }, searchParam, 1);
const { data, pageCount, total: totalCount } = result;
total.value = totalCount;
const { data, pageCount } = result;
tableData.value = data;
pagination.page = page;
pagination.pageCount = pageCount;
@ -150,28 +144,29 @@ function handleCheck(rowKeys: DataTableRowKey[]) {
selectionIds.value = rowKeys;
}
function select(key: number, id: string) {
function select(key: number) {
switch (key) {
case 1:
editSelection(id);
editSelection();
break;
case 2:
deleteSelection(id);
deleteSelection();
break;
default:
break;
}
}
function editSelection(id = "") {
function editSelection() {
// eslint-disable-next-line dot-notation
// const $message = window["$message"];
// if (selectionIds.value.length === 0 || selectionIds.value.length > 1) {
// $message.error("");
// return;
// }
const $message = window["$message"];
const selectedId = id;
if (selectionIds.value.length === 0 || selectionIds.value.length > 1) {
$message.error("请选中一条过滤");
return;
}
const selectedId = selectionIds.value[0];
const selectedFilter = tableData.value.find((item: any) => {
return item.id === selectedId;
});
@ -180,24 +175,23 @@ function editSelection(id = "") {
closeModal();
}
function deleteSelection(id = "") {
function deleteSelection() {
// eslint-disable-next-line dot-notation
const $message = window["$message"];
if (selectionIds.value.length === 0) {
deleteCondition({ ids: id }).then(() => {
query(pagination.page, pagination.pageSize);
});
$message.error("至少选中一条过滤");
return;
}
deleteCondition({ ids: selectionIds.value.join(",") }).then(() => {
selectionIds.value = [];
query(pagination.page, pagination.pageSize);
});
}
async function handlePageChange(currentPage) {
if (loading.value) return;
pagination.page = currentPage;
const { pageSize } = pagination;
await query(currentPage, pageSize);
}
@ -210,9 +204,10 @@ async function handlePageSizeChange(currentPageSize) {
await query(page, currentPageSize);
}
function handleClick() {
emit("showNewFilter");
// show.value = false;
show.value = false;
}
let sortTable: Sortable | null = null;
@ -286,10 +281,6 @@ const inputHandler = debounce((word) => {
keyword.value = word;
query(1, 5);
}, 300);
const showSearch = computed(() => {
return selectionIds.value.length > 0;
});
</script>
<template>
@ -299,7 +290,6 @@ const showSearch = computed(() => {
transform-origin="center"
display-directive="if"
@after-leave="afterLeave"
:mask-closable="false"
>
<n-card
:style="cardStyle"
@ -315,7 +305,7 @@ const showSearch = computed(() => {
<span :style="{ 'margin-left': '18px' }">基本信息</span>
</div>
</div>
<div class="wrapper-form" v-if="!showSearch">
<div class="wrapper-form">
<n-input
:style="{ width: '360px', border: '1px solid #cad2dd' }"
placeholder="请输入过滤条件名称搜索"
@ -332,28 +322,6 @@ const showSearch = computed(() => {
</template>
</n-button>
</div>
<div class="wrapper-form" v-else>
<div class="del_btn">
<n-button icon-placement="left" size="medium">
<template #icon>
<SvgIcon name="delete-history" size="16" />
</template>
删除</n-button
>
</div>
<div class="msg">
<span
>已选中
<span style="color: #507afd; font-size: 16px">{{
selectionIds.length
}}</span>
</span
>
<a @click="selectionIds = []">清空</a>
</div>
</div>
<div class="wrapper-table">
<NDataTable
ref="tableRef"
@ -365,9 +333,9 @@ const showSearch = computed(() => {
:pagination="pagination"
:row-key="rowKey"
@update:page="handlePageChange"
@update-page-size="handlePageSizeChange"
@update-page-size="handlePageSizeChange"
@update:checked-row-keys="handleCheck"
:checked-row-keys="selectionIds"
/>
</div>
</div>
@ -409,15 +377,6 @@ const showSearch = computed(() => {
width: 300px;
border: 1px solid gray;
}
.del_btn {
}
.msg {
a {
margin-left: 30px;
cursor: pointer;
color: #507afd;
}
}
}
&-table {

@ -1,200 +1,197 @@
<script lang="ts" setup>
import { reactive, ref, unref } from "vue";
import * as XLSX from "xlsx";
import { arrayEquals } from "@/utils/index";
import { generateUuid } from "@/utils/uuid";
import { reactive, ref, unref } from 'vue'
import * as XLSX from 'xlsx'
import { arrayEquals } from '@/utils/index'
import { generateUuid } from '@/utils/uuid'
const props = defineProps<{
onSuccess: Function;
headerConfig: string[];
}>();
onSuccess: Function
headerConfig: string[]
}>()
interface ExcelData {
header: string[] | null;
content: any[] | null;
header: string[] | null
content: any[] | null
}
interface ParseResults {
fileName: string;
results: any[];
uuid: string;
fileName: string
results: any[]
uuid: string
}
const cardStyle = {
width: "620px",
"--n-padding-bottom": "10px",
"--n-padding-left": "0px",
};
const inputRef = ref(null);
let loading = false;
const excelData: ExcelData = { header: null, content: null };
const excelDatas: ParseResults[] = reactive([]);
'width': '620px',
'--n-padding-bottom': '10px',
'--n-padding-left': '0px',
}
const inputRef = ref(null)
let loading = false
const excelData: ExcelData = { header: null, content: null }
const excelDatas: ParseResults[] = reactive([])
function generateData(content) {
excelData.header = props.headerConfig;
excelData.content = content;
props.onSuccess && props.onSuccess(excelData);
excelData.header = props.headerConfig
excelData.content = content
props.onSuccess && props.onSuccess(excelData)
}
function handleDrop(e) {
e.stopPropagation();
e.preventDefault();
if (loading) return;
const files = e.dataTransfer.files;
const rawFiles = Array.from(files);
e.stopPropagation()
e.preventDefault()
if (loading)
return
const files = e.dataTransfer.files
const rawFiles = Array.from(files)
// eslint-disable-next-line dot-notation
const $message = window["$message"];
const $message = window['$message']
if (!isExcel(rawFiles)) {
$message.error("Only supports upload .xlsx, .xls, .csv suffix files");
return false;
$message.error('Only supports upload .xlsx, .xls, .csv suffix files')
return false
}
uploadFiles(rawFiles);
e.stopPropagation();
e.preventDefault();
uploadFiles(rawFiles)
e.stopPropagation()
e.preventDefault()
}
async function uploadFiles(files) {
const inputEl: HTMLInputElement | null = unref(inputRef);
inputEl!.value = "";
const inputEl: HTMLInputElement | null = unref(inputRef)
inputEl!.value = ''
loading = true;
loading = true
for (const file of files) {
const fileData = await readFileData(file);
const message = validate(fileData);
const fileData = await readFileData(file)
const message = validate(fileData)
// TODO
if (message === undefined || true) {
const uuid = generateUuid();
const uuid = generateUuid()
excelDatas.push({
fileName: file.name,
results: (fileData as any).results,
uuid,
});
})
}
}
loading = false;
loading = false
}
function commitData() {
const mergeResults: any[] = [];
const mergeResults: any[] = []
if (excelDatas.length === 0) return;
if (excelDatas.length === 0)
return
excelDatas.forEach((item) => {
mergeResults.push(...item.results);
});
mergeResults.push(...item.results)
})
generateData(mergeResults);
generateData(mergeResults)
}
function validate(fileData) {
const { header } = fileData;
const { header } = fileData
//
const equal = arrayEquals(header, props.headerConfig);
const equal = arrayEquals(header, props.headerConfig)
if (!equal) return "表头不匹配";
if (!equal)
return '表头不匹配'
// TODO
}
function readFileData(file) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
const reader = new FileReader()
reader.onload = (e) => {
const data = e.target!.result;
const workbook = XLSX.read(data, { type: "array" });
const firstSheetName = workbook.SheetNames[0];
const worksheet = workbook.Sheets[firstSheetName];
const header = getHeaderRow(worksheet);
const results = XLSX.utils.sheet_to_json(worksheet);
resolve({ header, results });
};
reader.readAsArrayBuffer(file);
});
const data = e.target!.result
const workbook = XLSX.read(data, { type: 'array' })
const firstSheetName = workbook.SheetNames[0]
const worksheet = workbook.Sheets[firstSheetName]
const header = getHeaderRow(worksheet)
const results = XLSX.utils.sheet_to_json(worksheet)
resolve({ header, results })
}
reader.readAsArrayBuffer(file)
})
}
function handleDragover(e) {
e.stopPropagation();
e.preventDefault();
e.dataTransfer.dropEffect = "copy";
e.stopPropagation()
e.preventDefault()
e.dataTransfer.dropEffect = 'copy'
}
function handleUpload() {
(inputRef.value as any).click();
(inputRef.value as any).click()
}
function handleClick(e) {
const files = e.target.files;
const rawFiles = Array.from(files);
uploadFiles(rawFiles);
const files = e.target.files
const rawFiles = Array.from(files)
uploadFiles(rawFiles)
}
function getHeaderRow(sheet) {
const headers: string[] = [];
const range = XLSX.utils.decode_range(sheet["!ref"]);
let C;
const R = range.s.r;
const headers: string[] = []
const range = XLSX.utils.decode_range(sheet['!ref'])
let C
const R = range.s.r
/* start in the first row */
for (C = range.s.c; C <= range.e.c; ++C) {
/* walk every column in the range */
const cell = sheet[XLSX.utils.encode_cell({ c: C, r: R })];
for (C = range.s.c; C <= range.e.c; ++C) { /* walk every column in the range */
const cell = sheet[XLSX.utils.encode_cell({ c: C, r: R })]
/* find the cell in the first row */
let hdr = `UNKNOWN ${C}`; // <-- replace with your desired default
if (cell && cell.t) hdr = XLSX.utils.format_cell(cell);
headers.push(hdr);
let hdr = `UNKNOWN ${C}` // <-- replace with your desired default
if (cell && cell.t)
hdr = XLSX.utils.format_cell(cell)
headers.push(hdr)
}
return headers;
return headers
}
function isExcel(files) {
return files.every((file) => {
return /\.(xlsx|xls|csv)$/.test(file.name);
});
return /\.(xlsx|xls|csv)$/.test(file.name)
})
}
const show = ref(false);
const show = ref(false)
function showModal() {
show.value = true;
show.value = true
}
function closeModal() {
show.value = false;
show.value = false
}
async function handleSumbit(e: MouseEvent) {
e.preventDefault();
commitData();
closeModal();
e.preventDefault()
commitData()
closeModal()
}
defineExpose({
showModal,
});
})
function removeHandler(id: string) {
const index = excelDatas.findIndex((item) => item.uuid === id);
excelDatas.splice(index, 1);
const index = excelDatas.findIndex(item => item.uuid === id)
excelDatas.splice(index, 1)
}
function afterLeave() {
excelDatas.length = 0;
excelDatas.length = 0
}
</script>
<template>
<n-modal v-model:show="show" transform-origin="center" @after-leave="afterLeave">
<n-card
:style="cardStyle"
:bordered="false"
size="huge"
role="dialog"
aria-modal="true"
>
<n-card :style="cardStyle" :bordered="false" size="huge" role="dialog" aria-modal="true">
<div class="wrapper">
<div class="wrapper-header">
<span class="wrapper-left">批量导入</span>
@ -206,41 +203,17 @@ function afterLeave() {
</div>
<n-divider />
<div class="wrapper-content">
<div
class="wrapper-content-dragger"
@drop="handleDrop"
@dragover="handleDragover"
@dragenter="handleDragover"
>
<input
ref="inputRef"
class="excel-upload-input"
type="file"
accept=".xlsx, .xls,.csv"
@change="handleClick"
/>
<SvgIcon
style="margin-top: 32px; margin-bottom: 13px"
size="45"
name="upload"
@click="handleUpload"
/>
<span class="wrapper-tip1">点击或拖拽审批文件到这里上传</span>
<span style="margin-top: 3px; margin-bottom: 19px" class="wrapper-tip2"
>支持上传格式.xls .xlsx .csv的文件</span
>
<div class="wrapper-content-dragger" @drop="handleDrop" @dragover="handleDragover" @dragenter="handleDragover">
<input ref="inputRef" class="excel-upload-input" type="file" accept=".xlsx, .xls,.csv" @change="handleClick">
<SvgIcon style="margin-top: 30px;" size="45" name="upload" @click="handleUpload" />
<span style="margin-top: 20px;" class="wrapper-tip1">点击或拖拽审批文件到这里上传</span>
<span style="margin-top: 15px;margin-bottom: 20px;" class="wrapper-tip2">支持上传格式.xls .xlsx .csv的文件</span>
</div>
<div
v-for="(item, index) in excelDatas"
:key="index"
class="wrapper-content-files"
>
<div v-for="(item, index) in excelDatas" :key="index" class="wrapper-content-files">
<div>{{ item.fileName }}</div>
<div>
<SvgIcon
size="16px"
style="display: block; margin-left: auto; cursor: pointer"
name="clear"
size="16px" style="display: block; margin-left: auto; cursor: pointer" name="clear"
@click="removeHandler(item.uuid)"
/>
</div>
@ -249,7 +222,9 @@ function afterLeave() {
</div>
<template #footer>
<div class="footer">
<n-button type="info" @click="handleSumbit"> </n-button>
<n-button type="info" @click="handleSumbit">
确认
</n-button>
</div>
</template>
</n-card>
@ -262,41 +237,34 @@ function afterLeave() {
display: flex;
justify-content: space-between;
align-items: center;
padding: 6px 0 0 24px;
// padding: 10px;
padding: 10px;
}
&-left {
font-weight: bold;
font-size: 16px;
font-family: PingFang SC, PingFang SC-Medium;
font-weight: bolder;
text-align: left;
color: #222222;
line-height: 24px;
}
&-right {
&-close {
width: 12px;
height: 12px;
width: 18px;
height: 18px;
cursor: pointer;
margin-right: 25px;
color: #999999;
}
&-icon {
background: #000;
display: inline-block;
width: 12px;
width: 18px;
height: 1px;
transform: rotate(45deg);
-webkit-transform: rotate(45deg);
margin-bottom: 8px;
&:after {
content: "";
content: '';
display: block;
width: 12px;
width: 18px;
height: 1px;
background: #000;
transform: rotate(-90deg);
@ -306,18 +274,19 @@ function afterLeave() {
}
&-content {
margin: 33px 24px 0 25px;
margin-top: 20px;
&-dragger {
display: flex;
flex-direction: column;
align-items: center;
border: 1px dashed #1980ff;
// width: 600px;
border: 1px dashed #1980FF;
width: 600px;
margin: 0 auto;
font-size: 14px;
font-weight: bold;
border-radius: 2px;
text-align: center;
background: rgba(202, 210, 221, 0.1);
}
&-files {
@ -328,6 +297,7 @@ function afterLeave() {
justify-content: space-between;
}
}
}
.excel-upload-input {
@ -354,19 +324,4 @@ function afterLeave() {
margin-top: 0px;
margin-bottom: 0px;
}
.wrapper-tip1 {
font-size: 14px;
font-family: PingFang SC, PingFang SC-Regular;
font-weight: lighter;
color: #666666;
line-height: 24px;
}
.wrapper-tip2 {
font-size: 12px;
font-family: PingFang SC, PingFang SC-Regular;
font-weight: lighter;
text-align: left;
color: #999999;
line-height: 22px;
}
</style>

@ -28,25 +28,19 @@ const actions = computed(() => {
</script>
<template>
<div :data-id="id" class="wrap">
<div
v-for="(action, index) in actions" :key="index"
class="normal"
:class="{ gap: index !== 0, reject: action.key === 'reject' }" text @click="(trigger(action) as any)"
<div :data-id="id">
<n-button
v-for="(action, index) in actions" :key="index" class="normal"
:class="{ gap: index !== 0, reject: index === 1 }" text @click="(trigger(action) as any)"
>
{{ action.label }}
</div>
</n-button>
</div>
</template>
<style scoped>
.wrap{
display: flex;
align-items: center;
}
.normal {
color: #507AFD;
cursor: pointer;
color: #507AFD
}
.gap {

@ -84,10 +84,10 @@ const formRef = ref<FormInst | null>(null)
const formValue = reactive<FormType>({
name: null,
logic: 'and',
logic: null,
conditions: [{
type: null,
operator: 'eq',
operator: null,
result: null,
}],
})
@ -150,7 +150,7 @@ function unformatValue(searchfield: string, searchvalue: any) {
function createCondition() {
formValue.conditions.push({
type: null,
operator: 'eq',
operator: null,
result: null,
})
}
@ -227,7 +227,7 @@ function leaveHandler() {
formValue.conditions = [
{
type: null,
operator: 'eq',
operator: null,
result: null,
},
]
@ -255,7 +255,7 @@ defineExpose({
</script>
<template>
<n-modal v-model:show="show" transform-origin="center" @after-leave="leaveHandler" :mask-closable="false">
<n-modal v-model:show="show" transform-origin="center" @after-leave="leaveHandler">
<n-card :style="cardStyle" :bordered="false" size="huge" role="dialog" aria-modal="true">
<div class="wrapper">
<span class="wrapper-title">{{ modalTitle }}</span>
@ -269,7 +269,7 @@ defineExpose({
<n-form-item path="name" label="标题">
<n-input v-model:value="formValue.name" :style="{ width: '780px' }" @keydown.enter.prevent />
</n-form-item>
<n-form-item path="logic" label="逻辑关系" v-show="false">
<n-form-item path="logic" label="逻辑关系">
<n-select filterable v-model:value="formValue.logic" placeholder="请选择逻辑关系" :options="logicOptions" />
</n-form-item>
<n-form-item
@ -278,7 +278,6 @@ defineExpose({
>
<n-select filterable
v-model:value="item.type" placeholder="请选择筛选项名称" :options="typeOptions"
@change="item.result = ''"
/>
<n-select filterable
v-model:value="item.operator" style="margin-left: 8px;" placeholder="请选择"
@ -309,7 +308,7 @@ defineExpose({
<template #footer>
<div class="wrapper-footer">
<n-button type="info" @click="handleSumbit">
</n-button>
<n-button secondary style="margin-left:15px" @click="closeModal">
取消

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save