Просмотр исходного кода

Merge branch 'master' of http://39.108.216.210:3000/web/measure into master

yangyj 1 год назад
Родитель
Сommit
2ec948df1c
40 измененных файлов с 951 добавлено и 496 удалено
  1. 1 0
      .gitignore
  2. 9 9
      package.json
  3. 0 0
      public/plugins/element-plus/index.css
  4. 0 0
      public/plugins/element-plus/theme-chalk/el-table.css
  5. 0 0
      public/plugins/element-plus/theme-chalk/index.css
  6. 24 24
      public/plugins/element-plus/theme-chalk/src/common/var.scss
  7. 7 4
      public/plugins/element-plus/theme-chalk/src/dialog.scss
  8. 36 33
      public/plugins/element-plus/theme-chalk/src/form.scss
  9. 48 44
      public/plugins/element-plus/theme-chalk/src/input.scss
  10. 7 4
      public/plugins/element-plus/theme-chalk/src/message-box.scss
  11. 9 9
      public/plugins/element-plus/theme-chalk/src/select.scss
  12. 4 0
      public/plugins/element-plus/theme-chalk/src/table.scss
  13. 7 4
      public/plugins/element-plus/theme-chalk/src/tour.scss
  14. 0 0
      public/plugins/element-plus/v2.5.6
  15. 122 8
      public/plugins/remixicon/remixicon.css
  16. BIN
      public/plugins/remixicon/remixicon.eot
  17. 32 12
      public/plugins/remixicon/remixicon.svg
  18. 2 2
      public/plugins/remixicon/remixicon.symbol.svg
  19. BIN
      public/plugins/remixicon/remixicon.ttf
  20. BIN
      public/plugins/remixicon/remixicon.woff
  21. BIN
      public/plugins/remixicon/remixicon.woff2
  22. 0 0
      public/plugins/remixicon/v4.2.0
  23. 1 1
      public/version.json
  24. 47 0
      src/api/modules/project.js
  25. 64 0
      src/components/hc-pdfs/pdfs.vue
  26. 55 2
      src/components/hc-tasks-user/index.vue
  27. 15 0
      src/components/hc-tasks-user/style.scss
  28. 2 3
      src/components/index.js
  29. 1 1
      src/components/view-report/view-report.vue
  30. 1 1
      src/config/index.json
  31. 31 70
      src/layout/modules/Cascader.vue
  32. 26 2
      src/plugins/HcTopMenu.js
  33. 120 7
      src/store/modules/app.js
  34. 117 58
      src/views/debit-pay/admin/components/middlepay/addModal.vue
  35. 11 5
      src/views/home/auth.vue
  36. 8 21
      src/views/home/pdf.vue
  37. 1 0
      src/views/project/debit/contract/components/unit/row-data.vue
  38. 1 1
      src/views/tasks/flow.vue
  39. 7 3
      src/views/user/auth.vue
  40. 135 168
      yarn.lock

+ 1 - 0
.gitignore

@@ -3,6 +3,7 @@ node_modules
 .idea
 .vscode
 .DS_Store
+.fleet
 
 dist
 zip

+ 9 - 9
package.json

@@ -21,27 +21,27 @@
         "dayjs": "^1.11.10",
         "echarts": "^5.5.0",
         "element-plus": "2.5.6",
-        "hc-vue3-ui": "^3.1.3",
-        "js-base64": "^3.7.6",
+        "hc-vue3-ui": "^3.1.8",
+        "js-base64": "^3.7.7",
         "js-fast-way": "^0.4.6",
         "js-md5": "^0.8.3",
         "nprogress": "^0.2.0",
         "pinia": "^2.1.7",
         "split.js": "^1.6.5",
-        "vue": "3.4.19",
-        "vue-router": "^4.2.5",
+        "vue": "3.4.20",
+        "vue-router": "^4.3.0",
         "vuedraggable": "^4.1.0"
     },
     "devDependencies": {
         "@iconify-json/iconoir": "^1.1.41",
-        "@iconify-json/ri": "^1.1.19",
+        "@iconify-json/ri": "^1.1.20",
         "@unocss/eslint-config": "^0.58.5",
         "@vitejs/plugin-vue": "^4.5.2",
-        "@vue/compiler-sfc": "^3.4.15",
-        "archiver": "^6.0.1",
+        "@vue/compiler-sfc": "^3.4.20",
+        "archiver": "^6.0.2",
         "bignumber.js": "^9.1.2",
-        "eslint": "^8.56.0",
-        "eslint-plugin-vue": "^9.21.1",
+        "eslint": "^8.57.0",
+        "eslint-plugin-vue": "^9.22.0",
         "sass": "^1.71.1",
         "unocss": "^0.58.5",
         "unocss-preset-extra": "^0.5.3",

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
public/plugins/element-plus/index.css


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
public/plugins/element-plus/theme-chalk/el-table.css


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
public/plugins/element-plus/theme-chalk/index.css


+ 24 - 24
public/plugins/element-plus/theme-chalk/src/common/var.scss

@@ -452,43 +452,43 @@ $select-dropdown: map.merge(
 
 $select-wrapper-padding: () !default;
 $select-wrapper-padding: map.merge(
-    (
-      'large': 8px 16px,
-      'default': 4px 12px,
-      'small': 2px 8px,
-    ),
-    $select-wrapper-padding
+  (
+    'large': 8px 16px,
+    'default': 4px 12px,
+    'small': 2px 8px,
+  ),
+  $select-wrapper-padding
 );
 
 $select-near-margin-left: () !default;
 $select-near-margin-left: map.merge(
-    (
-      'large': -8px,
-      'default': -8px,
-      'small': -6px,
-    ),
-    $select-near-margin-left
+  (
+    'large': -8px,
+    'default': -8px,
+    'small': -6px,
+  ),
+  $select-near-margin-left
 );
 
 $select-item-gap: () !default;
 $select-item-gap: map.merge(
-    (
-      'large': 6px,
-      'default': 6px,
-      'small': 4px,
-    ),
-    $select-item-gap
+  (
+    'large': 6px,
+    'default': 6px,
+    'small': 4px,
+  ),
+  $select-item-gap
 );
 
 // the same height of el-tag
 $select-item-height: () !default;
 $select-item-height: map.merge(
-    (
-      'large': 24px,
-      'default': 24px,
-      'small': 20px,
-    ),
-    $select-item-height
+  (
+    'large': 24px,
+    'default': 24px,
+    'small': 20px,
+  ),
+  $select-item-height
 );
 
 // Alert

+ 7 - 4
public/plugins/element-plus/theme-chalk/src/dialog.scss

@@ -57,10 +57,13 @@
     padding-bottom: getCssVar('dialog', 'padding-primary');
 
     &.show-close {
-      padding-right: calc(getCssVar('dialog', 'padding-primary') + var(
-              #{getCssVarName('message-close-size')},
-              map.get($message, 'close-size')
-      ));
+      padding-right: calc(
+        getCssVar('dialog', 'padding-primary') +
+          var(
+            #{getCssVarName('message-close-size')},
+            map.get($message, 'close-size')
+          )
+      );
     }
   }
 

+ 36 - 33
public/plugins/element-plus/theme-chalk/src/form.scss

@@ -7,52 +7,52 @@
 
 $form-item-margin-bottom: () !default;
 $form-item-margin-bottom: map.merge(
-    (
-      'large': 22px,
-      'default': 18px,
-      'small': 18px,
-    ),
-    $form-item-margin-bottom
+  (
+    'large': 22px,
+    'default': 18px,
+    'small': 18px,
+  ),
+  $form-item-margin-bottom
 );
 
 $form-item-line-height: () !default;
 $form-item-line-height: map.merge(
-    (
-      'large': 40px,
-      'default': 32px,
-      'small': 24px,
-    ),
-    $form-item-line-height
+  (
+    'large': 40px,
+    'default': 32px,
+    'small': 24px,
+  ),
+  $form-item-line-height
 );
 
 $form-item-error-padding-top: () !default;
 $form-item-error-padding-top: map.merge(
-    (
-      'large': 4px,
-      'default': 2px,
-      'small': 2px,
-    ),
-    $form-item-error-padding-top
+  (
+    'large': 4px,
+    'default': 2px,
+    'small': 2px,
+  ),
+  $form-item-error-padding-top
 );
 
 $form-item-label-top-line-height: () !default;
 $form-item-label-top-line-height: map.merge(
-    (
-      'large': 22px,
-      'default': 22px,
-      'small': 20px,
-    ),
-    $form-item-label-top-line-height
+  (
+    'large': 22px,
+    'default': 22px,
+    'small': 20px,
+  ),
+  $form-item-label-top-line-height
 );
 
 $form-item-label-top-margin-bottom: () !default;
 $form-item-label-top-margin-bottom: map.merge(
-    (
-      'large': 12px,
-      'default': 8px,
-      'small': 4px,
-    ),
-    $form-item-label-top-margin-bottom
+  (
+    'large': 12px,
+    'default': 8px,
+    'small': 4px,
+  ),
+  $form-item-label-top-margin-bottom
 );
 
 @include b(form) {
@@ -196,7 +196,7 @@ $form-item-label-top-margin-bottom: map.merge(
       &.asterisk-left {
         > .#{$namespace}-form-item__label:before,
         > .#{$namespace}-form-item__label-wrap
-        > .#{$namespace}-form-item__label:before {
+          > .#{$namespace}-form-item__label:before {
           content: '*';
           color: getCssVar('color-danger');
           margin-right: 4px;
@@ -205,7 +205,7 @@ $form-item-label-top-margin-bottom: map.merge(
       &.asterisk-right {
         > .#{$namespace}-form-item__label:after,
         > .#{$namespace}-form-item__label-wrap
-        > .#{$namespace}-form-item__label:after {
+          > .#{$namespace}-form-item__label:after {
           content: '*';
           color: getCssVar('color-danger');
           margin-left: 4px;
@@ -218,7 +218,10 @@ $form-item-label-top-margin-bottom: map.merge(
     .#{$namespace}-input__wrapper,
     .#{$namespace}-textarea__inner,
     .#{$namespace}-select__wrapper {
-      &, &:hover, &:focus, &.is-focus {
+      &,
+      &:hover,
+      &:focus,
+      &.is-focus {
         box-shadow: 0 0 0 1px getCssVar('color-danger') inset;
       }
     }

+ 48 - 44
public/plugins/element-plus/theme-chalk/src/input.scss

@@ -6,22 +6,22 @@
 
 @mixin inset-prepend-border($color) {
   box-shadow: 1px 0 0 0 $color inset, 0 1px 0 0 $color inset,
-  0 -1px 0 0 $color inset;
+    0 -1px 0 0 $color inset;
 }
 
 @mixin inset-append-border($color) {
   box-shadow: 0 1px 0 0 $color inset, 0 -1px 0 0 $color inset,
-  -1px 0 0 0 $color inset;
+    -1px 0 0 0 $color inset;
 }
 
 @mixin inset-prepend-input-border($color) {
   box-shadow: 1px 0 0 0 $color inset, 1px 0 0 0 $color, 0 1px 0 0 $color inset,
-  0 -1px 0 0 $color inset !important;
+    0 -1px 0 0 $color inset !important;
 }
 
 @mixin inset-append-input-border($color) {
   box-shadow: -1px 0 0 0 $color, -1px 0 0 0 $color inset, 0 1px 0 0 $color inset,
-  0 -1px 0 0 $color inset !important;
+    0 -1px 0 0 $color inset !important;
 }
 
 @mixin mixed-input-border($color) {
@@ -50,32 +50,32 @@
     font-size: inherit;
     font-family: inherit;
     color: var(
-        #{getCssVarName('input-text-color')},
-        map.get($input, 'text-color')
+      #{getCssVarName('input-text-color')},
+      map.get($input, 'text-color')
     );
     background-color: var(
-        #{getCssVarName('input-bg-color')},
-        map.get($input, 'bg-color')
+      #{getCssVarName('input-bg-color')},
+      map.get($input, 'bg-color')
     );
     background-image: none;
     -webkit-appearance: none;
     @include inset-input-border(
-        var(
-            #{getCssVarName('input-border-color')},
-            map.get($input, 'border-color')
-        )
+      var(
+        #{getCssVarName('input-border-color')},
+        map.get($input, 'border-color')
+      )
     );
     border-radius: getCssVarWithDefault(
-        'input-border-radius',
-        map.get($input, 'border-radius')
+      'input-border-radius',
+      map.get($input, 'border-radius')
     );
     transition: getCssVar('transition-box-shadow');
     border: none;
 
     &::placeholder {
       color: getCssVarWithDefault(
-          'input-placeholder-color',
-          map.get($input, 'placeholder-color')
+        'input-placeholder-color',
+        map.get($input, 'placeholder-color')
       );
     }
 
@@ -172,22 +172,22 @@
     justify-content: center;
     padding: $border-width map.get($input-padding-horizontal, 'default')-$border-width;
     background-color: var(
-        #{getCssVarName('input-bg-color')},
-        map.get($input, 'bg-color')
+      #{getCssVarName('input-bg-color')},
+      map.get($input, 'bg-color')
     );
     background-image: none;
     border-radius: getCssVarWithDefault(
-        'input-border-radius',
-        map.get($input, 'border-radius')
+      'input-border-radius',
+      map.get($input, 'border-radius')
     );
     cursor: text;
     transition: getCssVar('transition-box-shadow');
     transform: translate3d(0, 0, 0);
     @include inset-input-border(
-        var(
-            #{getCssVarName('input-border-color')},
-            map.get($input, 'border-color')
-        )
+      var(
+        #{getCssVarName('input-border-color')},
+        map.get($input, 'border-color')
+      )
     );
 
     &:hover {
@@ -202,19 +202,21 @@
   @include e(inner) {
     // use map.get as default value for date picker range
     @include set-css-var-value(
-        'input-inner-height',
-        calc(
-          var(#{getCssVarName('input-height')},
-            #{map.get($input-height, 'default')}) - $border-width * 2
-        )
+      'input-inner-height',
+      calc(
+        var(
+            #{getCssVarName('input-height')},
+            #{map.get($input-height, 'default')}
+          ) - $border-width * 2
+      )
     );
 
     width: 100%;
     flex-grow: 1;
     -webkit-appearance: none;
     color: var(
-        #{getCssVarName('input-text-color')},
-        map.get($input, 'text-color')
+      #{getCssVarName('input-text-color')},
+      map.get($input, 'text-color')
     );
     font-size: inherit;
     height: getCssVar('input-inner-height');
@@ -231,8 +233,8 @@
 
     &::placeholder {
       color: getCssVarWithDefault(
-          'input-placeholder-color',
-          map.get($input, 'placeholder-color')
+        'input-placeholder-color',
+        map.get($input, 'placeholder-color')
       );
     }
 
@@ -255,8 +257,8 @@
       height: 100%;
       text-align: center;
       color: var(
-          #{getCssVarName('input-icon-color')},
-          map.get($input, 'icon-color')
+        #{getCssVarName('input-icon-color')},
+        map.get($input, 'icon-color')
       );
       transition: all getCssVar('transition-duration');
       pointer-events: none;
@@ -304,10 +306,10 @@
   @include when(active) {
     .#{$namespace}-input__wrapper {
       @include mixed-input-border(
-          var(
-              #{getCssVarName('input-focus-color')},
-              map.get($input, 'focus-color')
-          )
+        var(
+          #{getCssVarName('input-focus-color')},
+          map.get($input, 'focus-color')
+        )
       );
     }
   }
@@ -359,11 +361,13 @@
 
       @include e(inner) {
         @include set-css-var-value(
-            'input-inner-height',
-            calc(
-              var(#{getCssVarName('input-height')},
-                #{map.get($input-height, $size)}) - $border-width * 2
-            )
+          'input-inner-height',
+          calc(
+            var(
+                #{getCssVarName('input-height')},
+                #{map.get($input-height, $size)}
+              ) - $border-width * 2
+          )
         );
       }
     }

+ 7 - 4
public/plugins/element-plus/theme-chalk/src/message-box.scss

@@ -63,10 +63,13 @@
     padding-bottom: getCssVar('messagebox-padding-primary');
 
     &.show-close {
-      padding-right: calc(getCssVar('messagebox-padding-primary') + var(
-              #{getCssVarName('message-close-size')},
-              map.get($message, 'close-size')
-      ));
+      padding-right: calc(
+        getCssVar('messagebox-padding-primary') +
+          var(
+            #{getCssVarName('message-close-size')},
+            map.get($message, 'close-size')
+          )
+      );
     }
   }
 

+ 9 - 9
public/plugins/element-plus/theme-chalk/src/select.scss

@@ -88,8 +88,8 @@
     flex-shrink: 0;
     gap: map.get($select-item-gap, 'default');
     color: var(
-        #{getCssVarName('input-icon-color')},
-        map.get($input, 'icon-color')
+      #{getCssVarName('input-icon-color')},
+      map.get($input, 'icon-color')
     );
   }
 
@@ -99,8 +99,8 @@
     flex-shrink: 0;
     gap: map.get($select-item-gap, 'default');
     color: var(
-        #{getCssVarName('input-icon-color')},
-        map.get($input, 'icon-color')
+      #{getCssVarName('input-icon-color')},
+      map.get($input, 'icon-color')
     );
   }
 
@@ -159,8 +159,8 @@
     width: 100%;
     @include utils-ellipsis;
     color: var(
-        #{getCssVarName('input-text-color')},
-        map.get($input, 'text-color')
+      #{getCssVarName('input-text-color')},
+      map.get($input, 'text-color')
     );
 
     @include when(transparent) {
@@ -171,9 +171,9 @@
 
   @include e(popper) {
     @include picker-popper(
-        map.get($select-dropdown, 'bg-color'),
-        map.get($select-dropdown, 'border'),
-        map.get($select-dropdown, 'shadow')
+      map.get($select-dropdown, 'bg-color'),
+      map.get($select-dropdown, 'border'),
+      map.get($select-dropdown, 'shadow')
     );
   }
 

+ 4 - 0
public/plugins/element-plus/theme-chalk/src/table.scss

@@ -556,6 +556,10 @@
       }
     }
 
+    tr > td.hover-cell {
+      background-color: getCssVar('table-row-hover-bg-color');
+    }
+
     tr.current-row > td.#{$namespace}-table__cell {
       background-color: getCssVar('table-current-row-bg-color');
     }

+ 7 - 4
public/plugins/element-plus/theme-chalk/src/tour.scss

@@ -93,10 +93,13 @@
       padding-bottom: getCssVar('tour-padding-primary');
 
       &.show-close {
-        padding-right: calc(getCssVar('tour-padding-primary') + var(
-                #{getCssVarName('message-close-size')},
-                map.get($message, 'close-size')
-        ));
+        padding-right: calc(
+          getCssVar('tour-padding-primary') +
+            var(
+              #{getCssVarName('message-close-size')},
+              map.get($message, 'close-size')
+            )
+        );
       }
     }
 

+ 0 - 0
public/plugins/element-plus/v2.5.4 → public/plugins/element-plus/v2.5.6


+ 122 - 8
public/plugins/remixicon/remixicon.css

@@ -1,21 +1,21 @@
 /*
-* Remix Icon v4.1.0
+* Remix Icon v4.2.0
 * https://remixicon.com
 * https://github.com/Remix-Design/RemixIcon
 *
 * Copyright RemixIcon.com
 * Released under the Apache License Version 2.0
 *
-* Date: 2024-01-14
+* Date: 2024-02-25
 */
 @font-face {
   font-family: "remixicon";
-  src: url('remixicon.eot?t=1705244689813'); /* IE9*/
-  src: url('remixicon.eot?t=1705244689813#iefix') format('embedded-opentype'), /* IE6-IE8 */
-  url("remixicon.woff2?t=1705244689813") format("woff2"),
-  url("remixicon.woff?t=1705244689813") format("woff"),
-  url('remixicon.ttf?t=1705244689813') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
-  url('remixicon.svg?t=1705244689813#remixicon') format('svg'); /* iOS 4.1- */
+  src: url('remixicon.eot?t=1708865856766'); /* IE9*/
+  src: url('remixicon.eot?t=1708865856766#iefix') format('embedded-opentype'), /* IE6-IE8 */
+  url("remixicon.woff2?t=1708865856766") format("woff2"),
+  url("remixicon.woff?t=1708865856766") format("woff"),
+  url('remixicon.ttf?t=1708865856766') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
+  url('remixicon.svg?t=1708865856766#remixicon') format('svg'); /* iOS 4.1- */
   font-display: swap;
 }
 
@@ -2779,4 +2779,118 @@
 .ri-rewind-start-mini-line:before { content: "\f4ae"; }
 .ri-scroll-to-bottom-fill:before { content: "\f4af"; }
 .ri-scroll-to-bottom-line:before { content: "\f4b0"; }
+.ri-add-large-fill:before { content: "\f4b1"; }
+.ri-add-large-line:before { content: "\f4b2"; }
+.ri-aed-electrodes-fill:before { content: "\f4b3"; }
+.ri-aed-electrodes-line:before { content: "\f4b4"; }
+.ri-aed-fill:before { content: "\f4b5"; }
+.ri-aed-line:before { content: "\f4b6"; }
+.ri-alibaba-cloud-fill:before { content: "\f4b7"; }
+.ri-alibaba-cloud-line:before { content: "\f4b8"; }
+.ri-align-item-bottom-fill:before { content: "\f4b9"; }
+.ri-align-item-bottom-line:before { content: "\f4ba"; }
+.ri-align-item-horizontal-center-fill:before { content: "\f4bb"; }
+.ri-align-item-horizontal-center-line:before { content: "\f4bc"; }
+.ri-align-item-left-fill:before { content: "\f4bd"; }
+.ri-align-item-left-line:before { content: "\f4be"; }
+.ri-align-item-right-fill:before { content: "\f4bf"; }
+.ri-align-item-right-line:before { content: "\f4c0"; }
+.ri-align-item-top-fill:before { content: "\f4c1"; }
+.ri-align-item-top-line:before { content: "\f4c2"; }
+.ri-align-item-vertical-center-fill:before { content: "\f4c3"; }
+.ri-align-item-vertical-center-line:before { content: "\f4c4"; }
+.ri-apps-2-add-fill:before { content: "\f4c5"; }
+.ri-apps-2-add-line:before { content: "\f4c6"; }
+.ri-close-large-fill:before { content: "\f4c7"; }
+.ri-close-large-line:before { content: "\f4c8"; }
+.ri-collapse-diagonal-2-fill:before { content: "\f4c9"; }
+.ri-collapse-diagonal-2-line:before { content: "\f4ca"; }
+.ri-collapse-diagonal-fill:before { content: "\f4cb"; }
+.ri-collapse-diagonal-line:before { content: "\f4cc"; }
+.ri-dashboard-horizontal-fill:before { content: "\f4cd"; }
+.ri-dashboard-horizontal-line:before { content: "\f4ce"; }
+.ri-expand-diagonal-2-fill:before { content: "\f4cf"; }
+.ri-expand-diagonal-2-line:before { content: "\f4d0"; }
+.ri-expand-diagonal-fill:before { content: "\f4d1"; }
+.ri-expand-diagonal-line:before { content: "\f4d2"; }
+.ri-firebase-fill:before { content: "\f4d3"; }
+.ri-firebase-line:before { content: "\f4d4"; }
+.ri-flip-horizontal-2-fill:before { content: "\f4d5"; }
+.ri-flip-horizontal-2-line:before { content: "\f4d6"; }
+.ri-flip-horizontal-fill:before { content: "\f4d7"; }
+.ri-flip-horizontal-line:before { content: "\f4d8"; }
+.ri-flip-vertical-2-fill:before { content: "\f4d9"; }
+.ri-flip-vertical-2-line:before { content: "\f4da"; }
+.ri-flip-vertical-fill:before { content: "\f4db"; }
+.ri-flip-vertical-line:before { content: "\f4dc"; }
+.ri-formula:before { content: "\f4dd"; }
+.ri-function-add-fill:before { content: "\f4de"; }
+.ri-function-add-line:before { content: "\f4df"; }
+.ri-goblet-2-fill:before { content: "\f4e0"; }
+.ri-goblet-2-line:before { content: "\f4e1"; }
+.ri-golf-ball-fill:before { content: "\f4e2"; }
+.ri-golf-ball-line:before { content: "\f4e3"; }
+.ri-group-3-fill:before { content: "\f4e4"; }
+.ri-group-3-line:before { content: "\f4e5"; }
+.ri-heart-add-2-fill:before { content: "\f4e6"; }
+.ri-heart-add-2-line:before { content: "\f4e7"; }
+.ri-id-card-fill:before { content: "\f4e8"; }
+.ri-id-card-line:before { content: "\f4e9"; }
+.ri-information-off-fill:before { content: "\f4ea"; }
+.ri-information-off-line:before { content: "\f4eb"; }
+.ri-java-fill:before { content: "\f4ec"; }
+.ri-java-line:before { content: "\f4ed"; }
+.ri-layout-grid-2-fill:before { content: "\f4ee"; }
+.ri-layout-grid-2-line:before { content: "\f4ef"; }
+.ri-layout-horizontal-fill:before { content: "\f4f0"; }
+.ri-layout-horizontal-line:before { content: "\f4f1"; }
+.ri-layout-vertical-fill:before { content: "\f4f2"; }
+.ri-layout-vertical-line:before { content: "\f4f3"; }
+.ri-menu-fold-2-fill:before { content: "\f4f4"; }
+.ri-menu-fold-2-line:before { content: "\f4f5"; }
+.ri-menu-fold-3-fill:before { content: "\f4f6"; }
+.ri-menu-fold-3-line:before { content: "\f4f7"; }
+.ri-menu-fold-4-fill:before { content: "\f4f8"; }
+.ri-menu-fold-4-line:before { content: "\f4f9"; }
+.ri-menu-unfold-2-fill:before { content: "\f4fa"; }
+.ri-menu-unfold-2-line:before { content: "\f4fb"; }
+.ri-menu-unfold-3-fill:before { content: "\f4fc"; }
+.ri-menu-unfold-3-line:before { content: "\f4fd"; }
+.ri-menu-unfold-4-fill:before { content: "\f4fe"; }
+.ri-menu-unfold-4-line:before { content: "\f4ff"; }
+.ri-mobile-download-fill:before { content: "\f500"; }
+.ri-mobile-download-line:before { content: "\f501"; }
+.ri-nextjs-fill:before { content: "\f502"; }
+.ri-nextjs-line:before { content: "\f503"; }
+.ri-nodejs-fill:before { content: "\f504"; }
+.ri-nodejs-line:before { content: "\f505"; }
+.ri-pause-large-fill:before { content: "\f506"; }
+.ri-pause-large-line:before { content: "\f507"; }
+.ri-play-large-fill:before { content: "\f508"; }
+.ri-play-large-line:before { content: "\f509"; }
+.ri-play-reverse-large-fill:before { content: "\f50a"; }
+.ri-play-reverse-large-line:before { content: "\f50b"; }
+.ri-police-badge-fill:before { content: "\f50c"; }
+.ri-police-badge-line:before { content: "\f50d"; }
+.ri-prohibited-2-fill:before { content: "\f50e"; }
+.ri-prohibited-2-line:before { content: "\f50f"; }
+.ri-shopping-bag-4-fill:before { content: "\f510"; }
+.ri-shopping-bag-4-line:before { content: "\f511"; }
+.ri-snowflake-fill:before { content: "\f512"; }
+.ri-snowflake-line:before { content: "\f513"; }
+.ri-square-root:before { content: "\f514"; }
+.ri-stop-large-fill:before { content: "\f515"; }
+.ri-stop-large-line:before { content: "\f516"; }
+.ri-tailwind-css-fill:before { content: "\f517"; }
+.ri-tailwind-css-line:before { content: "\f518"; }
+.ri-tooth-fill:before { content: "\f519"; }
+.ri-tooth-line:before { content: "\f51a"; }
+.ri-video-off-fill:before { content: "\f51b"; }
+.ri-video-off-line:before { content: "\f51c"; }
+.ri-video-on-fill:before { content: "\f51d"; }
+.ri-video-on-line:before { content: "\f51e"; }
+.ri-webhook-fill:before { content: "\f51f"; }
+.ri-webhook-line:before { content: "\f520"; }
+.ri-weight-fill:before { content: "\f521"; }
+.ri-weight-line:before { content: "\f522"; }
 

BIN
public/plugins/remixicon/remixicon.eot


Разница между файлами не показана из-за своего большого размера
+ 32 - 12
public/plugins/remixicon/remixicon.svg


Разница между файлами не показана из-за своего большого размера
+ 2 - 2
public/plugins/remixicon/remixicon.symbol.svg


BIN
public/plugins/remixicon/remixicon.ttf


BIN
public/plugins/remixicon/remixicon.woff


BIN
public/plugins/remixicon/remixicon.woff2


+ 0 - 0
public/plugins/remixicon/v4.1.0 → public/plugins/remixicon/v4.2.0


+ 1 - 1
public/version.json

@@ -1,3 +1,3 @@
 {
-  "value": "20240221114738"
+  "value": "20240228102129"
 }

+ 47 - 0
src/api/modules/project.js

@@ -0,0 +1,47 @@
+import { HcApi } from '../request/index'
+export default {
+    //获取项目和合同段
+    async getProjectAndContract() {
+        return HcApi({
+            url: '/api/blade-business/userViewProjectContract/queryUserViewProjectAndContract',
+            method: 'get',
+            params: {},
+        })
+    },
+    //获取默认项目
+    async getDefaultProject(form) {
+        return HcApi({
+            url: '/api/blade-business/defaultProject/queryUserDefault',
+            method: 'get',
+            params: form,
+        })
+    },
+    //获取项目详情
+    async getProjectInfo(id) {
+        return HcApi({
+            url: '/api/blade-manager/projectInfo/detail',
+            method: 'get',
+            params: {
+                id: id ? id + '' : '',
+            },
+        })
+    },
+    //获取合同段详情
+    async getContractInfo(id) {
+        return HcApi({
+            url: '/api/blade-manager/contractInfo/detail',
+            method: 'get',
+            params: {
+                id: id ? id + '' : '',
+            },
+        })
+    },
+    //设置默认项目
+    async setDefaultProject(form) {
+        return HcApi({
+            url: '/api/blade-business/defaultProject/save',
+            method: 'post',
+            data: form,
+        })
+    },
+}

+ 64 - 0
src/components/hc-pdfs/pdfs.vue

@@ -0,0 +1,64 @@
+<template>
+    <hc-pdf :src="pdfUrl" :download="isDownload" :print="isPrint" />
+</template>
+
+<script setup>
+import { onMounted, ref, watch } from 'vue'
+import { btnAuth, decode } from '~uti/btn-auth'
+import { isNullES } from 'js-fast-way'
+
+const props = defineProps({
+    url: {
+        type: String,
+        default: ''
+    },
+    code: {
+        type: String,
+        default: ''
+    },
+})
+
+defineOptions({
+    name: 'HcPdfs',
+})
+
+//监听
+const queryUrl = ref(props.url)
+const queryCode = ref(props.code)
+watch(() => [props.url, props.code], ([url, code]) => {
+    queryUrl.value = url
+    queryCode.value = code
+    setPdfSrcData()
+})
+
+//渲染完成
+const isDownload = ref(false)
+const isPrint = ref(false)
+onMounted(() => {
+    isDownload.value = btnAuth('measure-pdf-download')
+    isPrint.value = btnAuth('measure-pdf-print')
+    setPdfSrcData()
+})
+
+//设置PDF地址
+const pdfUrl = ref('')
+const setPdfSrcData = () => {
+    const url = queryUrl.value, code = queryCode.value
+    //如果url和code都为空,不做处理
+    if (isNullES(url) && isNullES(code)) {
+        return
+    }
+    //如果url不为空,code为空,以url为准
+    if (!isNullES(url) && isNullES(code)) {
+        pdfUrl.value = url
+        return
+    }
+    //如果url为空,code不为空,以code为准
+    if (isNullES(url) && !isNullES(code)) {
+        pdfUrl.value = decode(code ?? '')
+        return
+    }
+    //两个都有的情况下,以code为准
+    pdfUrl.value = decode(code ?? '')
+}
+</script>

+ 55 - 2
src/components/hc-tasks-user/index.vue

@@ -13,6 +13,25 @@
         <!-- 选择任务人 -->
         <el-dialog v-model="showModal" title="选择任务人" width="62rem" class="hc-modal-border hc-modal-nop" draggable destroy-on-close append-to-body>
             <div class="hc-tasks-user-modal-content-box">
+                <div v-if="UserDataList.length > 0 || isShowTaskName" class="tasks-name-box">
+                    <p class="mb-2">创建任务人流程</p>
+                    <div class="flex pt-2">
+                        <el-input v-model="taskNameinput" placeholder="请输入" size="default" class="mr-4" />  
+                        <el-button type="primary" size="default" @click="addTaskName">添加</el-button>
+                    </div>
+                    <div class="task-list-box">
+                        <div v-for="(item, index) in taskNameList" class="task-list-box-item">
+                            <el-tooltip :content="item.type === 2 ? '流程审批' : '平行审批'" placement="right">
+                                <el-button size="default">
+                                    {{ item.title }}
+                                    <HcIcon v-if="item.type === 1" name="links" class="ml-2" @click="item.type = 2" />
+                                    <HcIcon v-if="item.type === 2" name="exchange-2" class="ml-2" @click="item.type = 1" />
+                                    <HcIcon name="close" class="ml-2" @click="delTask(index)" />
+                                </el-button>
+                            </el-tooltip>
+                        </div>
+                    </div>
+                </div>
                 <div class="tree-box">
                     <el-scrollbar>
                         <ElTree class="hc-tree-node-box" :props="ElTreeProps" :data="ElTreeData" node-key="roleId" highlight-current accordion :default-expanded-keys="[0]" @node-click="ElTreeNodeClick" />
@@ -127,10 +146,14 @@ const props = defineProps({
         type: [String, Number],
         default: '',
     },
+    isShowTaskName:{
+        type:Boolean,
+        default:false,
+    },
 })
-
 //事件
 const emit = defineEmits(['change'])
+const isShowTaskName = ref(props.isShowTaskName)
 //变量
 const showModal = ref(false)
 const sequenceModal = ref(false)
@@ -153,10 +176,12 @@ watch(() => [
     props.users,
     props.projectId,
     props.contractId,
-], ([users, pid, cid]) => {
+    props.isShowTaskName,
+], ([users, pid, cid, ishow]) => {
     projectId.value = pid
     contractId.value = cid
     setUserDataList(users)
+    isShowTaskName.value = ishow
 })
 
 //渲染完成
@@ -281,6 +306,34 @@ const sureSignUserClick = () => {
         window.$message?.warning('请先选择任务人员,或点击取消')
     }
 }
+const taskNameinput = ref('')
+const taskNameList = ref([
+    {
+    title:'任务1',
+    type:1,
+    },
+    {
+    title:'任务2',
+    type:2,
+    },
+])
+const addTaskName = ()=>{
+    if (taskNameinput.value) {
+            taskNameList.value.push({
+            title:taskNameinput.value,
+            type:1,
+        })
+        taskNameinput.value = ''
+    } else {
+        window.$message.warning('请输入任务名称')
+    }
+    
+}
+
+const delTask = (index)=>{
+    console.log(index, 'index')
+    taskNameList.value.splice(index, 1)
+}
 </script>
 
 <style lang="scss" scoped>

+ 15 - 0
src/components/hc-tasks-user/style.scss

@@ -31,6 +31,21 @@
     position: relative;
     display: flex;
     height: 460px;
+    .tasks-name-box{
+        flex: 1;
+        border: 2px solid #EEEEEE;
+        padding: 20px;
+        .task-list-box{
+            
+            overflow-y: auto;
+            height: calc(100% - 40px);
+      
+            .task-list-box-item{
+                margin-top: 15px;
+             
+            }
+        }
+    }
     .tree-box {
         flex: 1;
         user-select: none;

+ 2 - 3
src/components/index.js

@@ -10,7 +10,7 @@ import HcSearchInput from './search-input/search-input.vue'
 import HcTasksUser from './hc-tasks-user/index.vue'
 import HcViewReport from './view-report/view-report.vue'
 import HcGradientCard from './gradient-card/index.vue'
-
+import HcPdfs from './hc-pdfs/pdfs.vue'
 
 //注册全局组件
 export const setupComponents = (App) => {
@@ -26,6 +26,5 @@ export const setupComponents = (App) => {
     App.component('HcSearchInput', HcSearchInput)
     App.component('HcTasksUser', HcTasksUser)
     App.component('HcViewReport', HcViewReport)
-
-
+    App.component('HcPdfs', HcPdfs)
 }

+ 1 - 1
src/components/view-report/view-report.vue

@@ -29,7 +29,7 @@
                     <template #extra>
                         <el-button hc-btn type="warning" @click="backClick">返回</el-button>
                     </template>
-                    <hc-pdf src="http://bladex-chongqing-info.oss-cn-hangzhou.aliyuncs.com//upload/20230504/911982ba85e66cfa58fb02d5a738bb2b.pdf" />
+                    <hc-pdfs url="http://bladex-chongqing-info.oss-cn-hangzhou.aliyuncs.com//upload/20230504/911982ba85e66cfa58fb02d5a738bb2b.pdf" />
                 </hc-new-card>
             </div>
         </div>

+ 1 - 1
src/config/index.json

@@ -1,6 +1,6 @@
 {
     "version": "20230607160059",
-    "target": "http://192.168.0.125:8090",
+    "target": "http://192.168.0.109:8090",
     "smsPhone": "",
     "vite": {
         "port": 5180,

+ 31 - 70
src/layout/modules/Cascader.vue

@@ -1,11 +1,11 @@
 <template>
     <div class="hc-header-cascader-box">
         <div class="project-name-box">
-            {{ projectInfo.projectAlias }} / {{ contractInfo.name }}
+            {{ projectInfo?.projectAlias }} / {{ contractInfo?.name }}
         </div>
         <el-cascader
             ref="ElCascaderRef"
-            v-model="projectValue" class="hc-header-cascader"
+            v-model="contractId" class="hc-header-cascader"
             :clearable="userInfo?.role_id === '1123598816738675201'"
             :filterable="userInfo?.role_id === '1123598816738675201'"
             :options="projectContract"
@@ -18,8 +18,8 @@
 <script setup>
 import { onMounted, ref, watch } from 'vue'
 import { useAppStore } from '~src/store'
-import { getArrValue } from 'js-fast-way'
 import { initProjectContract } from '~sto/app'
+import { isNullES } from 'js-fast-way'
 
 //事件
 const emit = defineEmits(['change', 'send'])
@@ -28,86 +28,47 @@ const emit = defineEmits(['change', 'send'])
 const store = useAppStore()
 const userInfo = ref(store.getUserInfo)
 
-//项目合同段
-const projectInfo = ref({})
-const contractInfo = ref({})
-const projectContract = ref([])
-const projectValue = ref(null)
 const projectProps = ref({
     value: 'id',
     label: 'projectAlias',
     children: 'contractInfoList',
 })
 
+//项目合同段
+const projectContract = ref(store.projectContract)
+const projectInfo = ref(store.projectInfo)
+const contractInfo = ref(store.contractInfo)
+const contractId = ref(store.contractId)
+
 //监听
-watch(() => store.getProjectContract, (val) => {
-    projectContractData(getArrValue(val))
+watch(() => [
+    store.projectContract,
+    store.projectInfo,
+    store.contractInfo,
+    store.projectId,
+    store.contractId,
+], ([arr, project, contract, pid, cid]) => {
+    projectContract.value = arr
+    projectInfo.value = project
+    contractInfo.value = contract
+    contractId.value = cid
+    setSend(pid, cid)
 })
 
 //渲染完成
-onMounted(() => {
-    initProjectContract()
-    const info = store.getProjectContract || []
-    projectContractData(info)
+onMounted(async () => {
+    await initProjectContract()
+    setSend(store.projectId, store.contractId)
 })
 
-//处理项目合同段数据
-const projectContractData = (projectContractData) => {
-    if (projectContractData.length > 0) {
-        //处理别名
-        projectContractData.forEach(item => {
-            let contractArr = item['contractInfoList'] || []
-            contractArr.forEach(items => {
-                items['projectAlias'] = items['name']
-            })
-        })
-        //处理其他数据
-        projectContract.value = projectContractData
-        const projectId = store.getProjectId //项目ID
-        const contractId = store.getContractId //合同段ID
-        const UserProjectInfo = store.getProjectInfo
-        const UserContractInfo = store.getContractInfo
-        //查询缓存的选中ID是否存在
-        const pid = projectContractData.findIndex(item => Number(item.id) === Number(projectId))
-        const contractList = projectContractData[pid]?.contractInfoList || []
-        const cid = contractList.findIndex(item => Number(item.id) === Number(contractId))
-        //如果缓存的选中ID不存在
-        if (cid === -1) {
-            //取项目数组中的第一个数据
-            let letProjectInfo = projectContractData[0]
-            let contractInfoList = letProjectInfo?.contractInfoList || []
-            let letContractInfo = contractInfoList[0] || {}
-            projectValue.value = letContractInfo?.id
-            projectInfo.value = letProjectInfo
-            contractInfo.value = letContractInfo
-            //设置缓存
-            store.setProjectInfo(letProjectInfo)
-            store.setContractInfo(letContractInfo)
-            store.setProjectId(letProjectInfo?.id)
-            store.setContractId(letContractInfo?.id)
-            emit('send', {
-                projectId: letProjectInfo?.id,
-                contractId: letContractInfo?.id,
-            })
-        } else {
-            projectValue.value = String(contractId)
-            projectInfo.value = UserProjectInfo
-            contractInfo.value = UserContractInfo
-            emit('send', {
-                projectId: projectId,
-                contractId: contractId,
-            })
-        }
-    } else {
-        projectContract.value = []
-        projectValue.value = null
-        projectInfo.value = {}
-        contractInfo.value = {}
-        emit('send', {
-            projectId: '',
-            contractId: '',
-        })
+const setSend = (pid, cid) => {
+    if (isNullES(pid) || isNullES(cid)) {
+        return
     }
+    emit('send', {
+        projectId: pid,
+        contractId: cid,
+    })
 }
 
 //项目被选择

+ 26 - 2
src/plugins/HcTopMenu.js

@@ -1,4 +1,8 @@
-import { getArrValue } from 'js-fast-way'
+import { getToken } from 'hc-vue3-ui'
+import { getTenantDetail } from '~api/other'
+import { getStoreValue } from '~src/utils/storage'
+import { isPathUrl } from '~uti/tools'
+import { getArrValue, getObjValue, newWindow } from 'js-fast-way'
 
 export default class HcTopMenu {
 
@@ -21,6 +25,26 @@ export default class HcTopMenu {
     }
 
     static async setMenuItem(item) {
-        return getArrValue(item?.children)
+        if (isPathUrl(item?.path)) {
+            let token = getToken(), domain = item?.path
+            const tenantId = getStoreValue('tenantId') ?? ''
+            const projectId = getStoreValue('projectId') ?? ''
+            const contractId = getStoreValue('contractId') ?? ''
+            if (item?.code === 'to-client-url' || item?.code === 'to-archives-url') {
+                if (tenantId === '000000' || !tenantId) {
+                    domain = item?.path
+                } else {
+                    const { error, code, data } = await getTenantDetail(tenantId)
+                    if (!error && code === 200) {
+                        const url = getObjValue(data).domainUrl
+                        domain = url ? url : item?.path
+                    }
+                }
+            }
+            //跳转到新页面
+            newWindow(`${domain}/#/auth?token=${token}&tid=${tenantId}&pid=${projectId}&cid=${contractId}`)
+        } else {
+            return getArrValue(item?.children)
+        }
     }
 }

+ 120 - 7
src/store/modules/app.js

@@ -1,27 +1,140 @@
 import pinia from '~src/store/init'
 import { useAppStore } from '~src/store'
 import { getButtons } from '~api/menu'
-import { getProjectAndContract } from '~api/user'
-import { ArrToOneObj, getArrValue, getObjVal } from 'js-fast-way'
+import projectApi from '~api/project'
 import { getStoreValue } from '~src/utils/storage'
+import { ArrToOneObj, getArrValue, getObjVal, getObjValue, isNullES } from 'js-fast-way'
 
 const store = useAppStore(pinia)
 
 //项目合同段初始化
 export const initProjectContract = async () => {
     const value = getStoreValue('projectContract')
-    const arr = getArrValue(value)
-    if (arr.length <= 0) {
-        const { error, data } = await getProjectAndContract()
+    if (!value || value.length <= 0) {
+        const { error, data } = await getProjectContract()
         if (error) return Promise.reject('error')
-        const datas = getArrValue(data)
-        store.setProjectContract(datas)
         return Promise.resolve(data)
     } else {
         return Promise.resolve(value)
     }
 }
 
+//获取默认项目信息
+export const getProjectContract = async () => {
+    const { error, data } = await projectApi.getProjectAndContract()
+    let projectList = await getProjectArr(error, data)
+    if (projectList.length <= 0) {
+        return { error: true, data: [] }
+    }
+    //获取缓存的项目合同段数据
+    const isStore = await getStoreProjecInfo(projectList)
+    if (!isStore) {
+        const isDefault = await getDefaultProject(projectList)
+        if (!isDefault) return { error: true, data: [] }
+    }
+    //获取按钮权限
+    await initButtons()
+    //返回数据
+    return { error: false, data: projectList }
+}
+
+//根据缓存获取项目合同段数据
+const getStoreProjecInfo = async (arr) => {
+    const projectId = store.projectId //项目ID
+    const contractId = store.contractId //合同段ID
+    //查询缓存的选中ID是否存在
+    const pid = arr.findIndex(item => Number(item.id) === Number(projectId))
+    const contractList = getArrValue(arr[pid]?.contractInfoList)
+    const cid = contractList.findIndex(item => Number(item.id) === Number(contractId))
+    //如果缓存的选中ID不存在
+    if (cid === -1) {
+        return false
+    }
+    //获取项目合同段数据
+    const projectInfo = await getProjectInfo(projectId)
+    const contractInfo = await getContractInfo(contractId)
+    if (isNullES(projectInfo) || isNullES(contractInfo)) {
+        return false
+    }
+    setProjectStore(projectInfo, contractInfo)
+    return true
+}
+
+//获取默认项目信息
+const getDefaultProject = async (projectList) => {
+    const { error, status, data } = await projectApi.getDefaultProject()
+    if (!error && status === 200 && !isNullES(data)) {
+        const { projectId, contractId } = getObjValue(data)
+        if (!projectId || !contractId) {
+            return false
+        }
+        const projectInfo = await getProjectInfo(projectId)
+        const contractInfo = await getContractInfo(contractId)
+        if (isNullES(projectInfo) || isNullES(contractInfo)) {
+            return false
+        }
+        setProjectStore(projectInfo, contractInfo)
+        return true
+    }
+    //获取第一个项目的第一个合同段数据
+    const contractList = getArrValue(projectList[0]?.contractInfoList)
+    const projectInfo = projectList[0]
+    const contractInfo = contractList[0]
+    //缓存数据
+    setProjectStore(projectInfo, contractInfo)
+    return true
+}
+
+//缓存数据
+const setProjectStore = (project, contract) => {
+    store.setProjectInfo(project)
+    store.setProjectId(project.id)
+    store.setContractInfo(contract)
+    store.setContractId(contract.id)
+}
+
+const getProjectArr = async (error, data) => {
+    let projectList = getArrValue(data)
+    if (error || projectList.length <= 0) {
+        window.$message?.error('没有相关项目权限')
+        return []
+    }
+    //处理合同段的别名
+    projectList.forEach(item => {
+        item['name'] = item['projectName']
+        let contractArr = item['contractInfoList'] || []
+        contractArr.forEach(items => {
+            items['projectAlias'] = items['name']
+        })
+    })
+    //过滤空合同段的项目合同段数据
+    const projectArr = projectList.filter(({ contractInfoList }) => {
+        const contractList = getArrValue(contractInfoList)
+        return contractList.length > 0
+    })
+    if (projectArr.length <= 0) {
+        window.$message?.error('没有相关项目权限')
+        return []
+    }
+    store.setProjectContract(projectArr)
+    //返回数据
+    return projectArr
+}
+
+//获取项目信息
+const getProjectInfo = async (projectId) => {
+    const { data } = await projectApi.getProjectInfo(projectId)
+    const item = getObjValue(data)
+    item['name'] = item['projectName']
+    return item
+}
+
+//获取合同段信息
+const getContractInfo = async (contractId) => {
+    const { data } = await projectApi.getContractInfo(contractId)
+    return getObjValue(data)
+}
+
 //按钮初始化
 export const initButtons = async () => {
     const value = getStoreValue('buttons')

+ 117 - 58
src/views/debit-pay/admin/components/middlepay/addModal.vue

@@ -89,7 +89,7 @@
                                 <span>添加清单</span>
                             </el-button>
                         </template>
-                        <hc-table is-new :index-style="{ width: 60 }" :is-stripe="false" :column="addTableColumn" :datas="addTableData" :row-style="addTableRowStyle">
+                        <hc-table :key="tableKey" is-new :index-style="{ width: 60 }" :is-stripe="false" :column="addTableColumn" :datas="addTableData" :row-style="addTableRowStyle">
                             <template #currentPrice="{ row }">
                                 <hc-table-input v-model="row.currentPrice" disabled />
                             </template>
@@ -102,8 +102,8 @@
                             <template #containChangeTotal="{ row }">
                                 <hc-table-input v-model="row.containChangeTotal" :disabled="isView" @blur="containChangeTotalBlur(row)" />
                             </template>
-                            <template #upPayRatio="{ row }">
-                                <hc-table-input v-model="row.upPayRatio" :disabled="isView" @blur="unPayRatioBlur(row)" />
+                            <template #payRatio="{ row }">
+                                <hc-table-input v-model="row.payRatio" :disabled="isView" @blur="unPayRatioBlur(row)" />
                             </template>
                             <template #currentMeterMoney="{ row }">
                                 <hc-table-input v-model="row.currentMeterMoney" disabled />
@@ -272,7 +272,36 @@ const baseFormRules = {
         message: '请选择业务日期',
     },
 }
+const isRelationData = ref(false)//是否管理质检资料
+const tableKey = ref(getRandom())
+//监听
+watch(() => baseForm.value.fileList, (list) => {
+    console.log(list, 'list')
+    tableKey.value = getRandom()
+    // 验证数组中的对象是否包含名为 'selectId' 的字段
+const fieldName = 'selectId'
+
+const containsField = list.some(obj => obj.hasOwnProperty(fieldName))
+
+if (containsField) {
+  isRelationData.value = true//关联质检资料后最大支付比例变为100
+  addTableData.value.forEach((ele)=>{
+    ele.upPayRatio = 100
+  })
+} else {
+  isRelationData.value = false
+  addTableData.value.forEach((ele)=>{
+    ele.upPayRatio = ele.oldupPayRatio || '0.00'
+  })
+}
+nextTick(()=>{
+    console.log(isComparedRaVal.value, 'isComparedRaVal.value ')
+    if (isComparedRaVal.value === 1 ) {
+        window.$message.warning('累计计量金额超出支付比列,如需计量100%,请完成关联对应的质保资料')
+    }
+})
 
+}, { deep: true })
 //获取数据详情
 const selectId = ref('')
 const getDataDetail = async () => {
@@ -290,6 +319,9 @@ const getDataDetail = async () => {
     baseForm.value = res
     addTableData.value = getArrValue(res.formList)
     selectId.value = arrToKey(res.fileList, 'selectId', ',')
+    addTableData.value.forEach((ele)=>{
+        ele.oldupPayRatio = ele.upPayRatio
+    })
 }
 
 //数据格式
@@ -336,7 +368,7 @@ const getNodeDivide = async (nodeId) => {
  const getCurrentNodeAllFormData = async (nodeId) => {
     const { data } = await mainApi.getCurrentNodeAllForm({ contractId:  cid.value, contractPeriodId:baseForm.value.contractPeriodId, contractUnitId:nodeId })
  addTableData.value = getArrValue(data)
- 
+
 }
 
 //获取变更令
@@ -422,15 +454,15 @@ const addTableColumn = ref([
     { key: 'resolveTotal', name: '分解数量', width: '100' },
     { key: 'changeTotal', name: '变更后数量', width: '100' },
     { key: 'currentMeterTotal', name: '本期计量数量', width: '140' },
-    { key: 'upPayRatio', name: '支付比例', width: '140' },
+    { key: 'payRatio', name: '支付比例(%)', width: '140' },
     { key: 'containChangeTotal', name: '含变更数量', width: '100' },
     { key: 'currentMeterMoney', name: '本期计量金额', width: '120' },
-    { key: 'allMeterTotal', name: '累计计量', width: '100' },
+    { key: 'allMeterTotal', name: '累计计量', width: '100' },
     { key: 'otherMeterTotal', name: '基数', width: '80' },
     { key: 'action', name: '操作', fixed: 'right', width: 80, align: 'center' },
 ])
 const addTableData = ref([])
-
+const isComparedRaVal = ref(-1)
 //计算本期计量金额
 const currentMeterTotalBlur = (row) => {
     //如果为空
@@ -450,31 +482,11 @@ const currentMeterTotalBlur = (row) => {
             meterMoney = (BigNumber(meterMoney).plus(table[i].currentMeterMoney)).toString()
         }
         baseForm.value.meterMoney = meterMoney
+        //计算本期支付比例
+        //本期支 付比例=本期计量数量/变更后数量
+        row.payRatio = BigNumber(currentMeterTotal).dividedBy(row.changeTotal).toString() * 100
+        compareRowUnpayRatio(row, 1)
 
-
-     
-     //  累计计量金额 > 最高支付金额   变红
-    // 当前行多返回一个字段otherPayMoney 代表其他期计量金额
-    // 累计计量金额 = 其他期计量金额+(本期计量金额*支付比例)
-    // 当前行多返回一个字段upPayMoney 代表最高支付金额
-    let otherPayMoney = new BigNumber(row.otherPayMoney )//其他期计量金额
-    let currentMeterMoney = new BigNumber(row.currentMeterMoney )//本期计量金额
-    let upPayRatio = new BigNumber(row.upPayRatio ).dividedBy(100)//支付比例
-    let upPayRatioMoney = (otherPayMoney.plus((currentMeterMoney.multipliedBy(upPayRatio)).toNumber()))//累计计量金额
-    let upPayMoney = new BigNumber(row.upPayMoney)//最高支付金额
-    const isComparedmoney = upPayRatioMoney.comparedTo(upPayMoney)
-    //a 大于 b = 1,a 等于 b = 0,a 小于 b = -1, a 或 b 的值异常时 = null
-        if (isComparedmoney === 1 || isComparedmoney === null) {
-            isCanSave.value = true
-          
-           window.$message.warning('累计计量金额超出支付比列,如需计量100%,请完成关联对应的质保资料')
-            return '--el-table-tr-bg-color: #fe0000; --el-table-row-hover-bg-color: #fe0000; color: white;'
-            
-        
-        } else {
-            isCanSave.value = false
-           
-        }
     })
 }
 
@@ -489,39 +501,80 @@ const containChangeTotalBlur = (row) => {
         row.containChangeTotal = val
     })
 }
-const unPayRatioBlur = (row)=>{
-    nextTick(()=>{
-             
-     //  累计计量金额 > 最高支付金额   变红
-    // 当前行多返回一个字段otherPayMoney 代表其他期计量金额
-    // 累计计量金额 = 其他期计量金额+(本期计量金额*支付比例)
-    // 当前行多返回一个字段upPayMoney 代表最高支付金额
-    let otherPayMoney = new BigNumber(row.otherPayMoney )//其他期计量金额
-    let currentMeterMoney = new BigNumber(row.currentMeterMoney )//本期计量金额
-    let upPayRatio = new BigNumber(row.upPayRatio ).dividedBy(100)//支付比例
-    let upPayRatioMoney = (otherPayMoney.plus((currentMeterMoney.multipliedBy(upPayRatio)).toNumber()))//累计计量金额
-    let upPayMoney = new BigNumber(row.upPayMoney)//最高支付金额
-    const isComparedmoney = upPayRatioMoney.comparedTo(upPayMoney)
-    //a 大于 b = 1,a 等于 b = 0,a 小于 b = -1, a 或 b 的值异常时 = null
-        if (isComparedmoney === 1 || isComparedmoney === null) {
-            isCanSave.value = true
-          
-           window.$message.warning('累计计量金额超出支付比列,如需计量100%,请完成关联对应的质保资料')
-            return '--el-table-tr-bg-color: #fe0000; --el-table-row-hover-bg-color: #fe0000; color: white;'
-            
-        
+const compareRowUnpayRatio = (row, type)=>{
+          // 计算方式:
+        //本期支 付比例=本期计量数量/变更后数量
+        //本期支付比例=本期计量数量/变更后数量
+        //本期计量数量=本期支付比例*变更后数量
+        // 会返回最大支付比例   upPayRatio
+        //     和其他期支付比例 otherPayRatio
+
+        // 每次填写完 本期计量数量或者支付比例后
+        // 就去对比:本期支付比例+其他期支付比例
+        //             是否大于最大支付比例
+        // 如果大于,则提示
+           let payRatio = new BigNumber(row.payRatio )//本期支付比例
+           let upPayRatio = new BigNumber(row.upPayRatio )//最大支付比例
+           let otherPayRatio = new BigNumber(row.otherPayRatio )//其他期支付比例
+           let result = BigNumber(payRatio).plus(otherPayRatio)//本期支付比例+其他期支付比例
+           const isComparedRa = result.comparedTo(upPayRatio)
+           isComparedRaVal.value = isComparedRa
+
+            if (isComparedRa === 1 ) {
+                isCanSave.value = true
+                if (type === 1) {
+                    window.$message.warning('累计计量金额超出支付比列,如需计量100%,请完成关联对应的质保资料')
+                } else if (type === 2) {
+                    return isComparedRa
+                }
+
         } else {
             isCanSave.value = false
-           
+
         }
+}
+const unPayRatioBlur = (row)=>{
+    nextTick(()=>{
+        console.log(row, 'rowzhifubili')
+        let payRatio = new BigNumber(row.payRatio )//本期支付比例
+        let changeTotal = new BigNumber(row.changeTotal )//变更后数量
+        // 本期计量数量=本期支付比例*变更后数量
+        row.currentMeterTotal = (payRatio.dividedBy(100).multipliedBy(changeTotal)).toString()
+        row.currentMeterMoney = (BigNumber(row.currentMeterTotal).multipliedBy(row.currentPrice)).toString()//本期计量金额额
+        row.allMeterTotal = (BigNumber(row.currentMeterTotal).plus(row.otherMeterTotal)).toString()
+         // 就去对比:本期支付比例+其他期支付比例
+        //   是否大于最大支付比例
+        compareRowUnpayRatio(row, 1)
+
+        //计算总计量金额
+        let meterMoney = 0, table = addTableData.value
+        for (let i = 0; i < table.length; i++) {
+            meterMoney = (BigNumber(meterMoney).plus(table[i].currentMeterMoney)).toString()
+        }
+        baseForm.value.meterMoney = meterMoney
+
+
     })
-    
+
 }
 //判断是否红色
 const isCanSave = ref(false)
 
 const addTableRowStyle = ({ row }) => {
+    console.log(row, 'xuan')
+    //本期支付比例+其他期支付比例
+     //  是否大于最大支付比例
+      const isComparedRa = compareRowUnpayRatio(row, 2)
+        if (isComparedRa === 1 ) {
+            isCanSave.value = true
+
+            return '--el-table-tr-bg-color: #fe0000; --el-table-row-hover-bg-color: #fe0000; color: white;'
 
+
+        } else {
+            isCanSave.value = false
+
+        }
     // 判断施工图数量是否大于合同数据
     //      大于:如果超计= 1并且 划分=1
     //          不显示红色,否则显示
@@ -587,7 +640,7 @@ const addBillBaseModalClick = () => {
     } else {
         window.$message.warning('请选择最底层节点')
     }
-    
+
     addBillBaseModalShow.value = true
     billBaseIds.value = arrToId(addTableData.value)
 }
@@ -694,6 +747,7 @@ const addModalClose = () => {
     baseForm.value = { fileList: [], pictureUrl: '' }
     addTableData.value = []
     selectId.value = ''
+    isComparedRaVal.value = null
     setStoreValue('checkRows', [])
     emit('close')
 }
@@ -710,21 +764,26 @@ const associateQual = ()=>{
     } else {
         window.$message.warning('请选择最底层节点')
     }
-    
+
 }
 const closeQual = ()=>{
     qualityMoadal.value = false
 }
 const finishModal = (rows, cancelcheck)=>{
+    console.log(rows, 'rows')
     let fileList = []
     rows.forEach(ele => {
         const isPush = isArrIndex( baseForm.value.fileList, 'selectId', ele.selectId)
         if (!isPush) {
+            if (!ele.evisaPdfUrl && !ele.pdfUrl) {
+                window.$message.warning('该节点没有资料信息')
+                return
+            }
             fileList.push({
                 fileName:ele.dataName,
-                filePdfUrl:ele.evisaPdfUrl ? ele.evisaPdfUrl : ele.pdfUrl,	
+                filePdfUrl:ele.evisaPdfUrl ? ele.evisaPdfUrl : ele.pdfUrl,
                 fileType:1,
-                fileUrl:ele.evisaPdfUrl ? ele.evisaPdfUrl : ele.pdfUrl,	
+                fileUrl:ele.evisaPdfUrl ? ele.evisaPdfUrl : ele.pdfUrl,
                 selectId:ele.selectId,
             })
         }

+ 11 - 5
src/views/home/auth.vue

@@ -28,19 +28,25 @@ const router = useRouter()
 const useRoutes = useRoute()
 const store = useAppStore()
 
+//先清理下缓存
+store.clearStoreData()
+
 //变量
 const loading = ref(true)
 const isErrorShow = ref(false)
 
 //渲染完成
 onMounted(() => {
-    //先清理下缓存
-    store.clearStoreData()
-    // http://档案的域名/#/auth-token?token=xxxxxxx
-    const { token, tenantid } = getObjValue(useRoutes.query)
+    // http://档案的域名/#/auth-token?token=xxx&tid=xxx&pid=xxx&cid=xxx
+    const { token, tid, pid, cid } = getObjValue(useRoutes.query)
     if (!isNullES(token)) {
         isErrorShow.value = false
-        setLoginByTokenData(token, tenantid)
+        //缓存数据
+        store.setTokenVal(token)
+        store.setProjectId(pid)
+        store.setContractId(cid)
+        //处理授权登录
+        setLoginByTokenData(token, tid)
     } else {
         loading.value = false
         isErrorShow.value = true

+ 8 - 21
src/views/home/pdf.vue

@@ -1,40 +1,27 @@
 <template>
     <div class="hc-pdf-page-box">
-        <hc-pdf :src="pdfUrl" :download="isDownload" :print="isPrint" />
+        <hc-pdfs :url="pdfUrl" :code="pdfCode"/>
     </div>
 </template>
 
 <script setup>
-import { isNullES } from 'js-fast-way'
 import { onMounted, ref } from 'vue'
 import { useRoute } from 'vue-router'
-import { btnAuth, decode } from '~uti/btn-auth'
 
 //初始变量
 const useRoutes = useRoute()
-const isDownload = ref(btnAuth('measure-pdf-download'))
-const isPrint = ref(btnAuth('measure-pdf-print'))
+
+defineOptions({
+    name: 'Pdf',
+})
 
 //渲染完成
 const pdfUrl = ref('')
+const pdfCode = ref('')
 onMounted(() => {
     const { url, code } = useRoutes.query
-    //如果url和code都为空,不做处理
-    if (isNullES(url) && isNullES(code)) {
-        return
-    }
-    //如果url不为空,code为空,以url为准
-    if (!isNullES(url) && isNullES(code)) {
-        pdfUrl.value = url
-        return
-    }
-    //如果url为空,code不为空,以code为准
-    if (isNullES(url) && !isNullES(code)) {
-        pdfUrl.value = decode(code ?? '')
-        return
-    }
-    //两个都有的情况下,以code为准
-    pdfUrl.value = decode(code ?? '')
+    pdfUrl.value = url
+    pdfCode.value = code
 })
 </script>
 

+ 1 - 0
src/views/project/debit/contract/components/unit/row-data.vue

@@ -258,6 +258,7 @@ watch(isShow, (val) => {
     if (val) {
         // getNodeType()
         getStakeype()
+        tableData.value = getArrValue(props.curTreeData.decompositionList)
     }
 })
 

+ 1 - 1
src/views/tasks/flow.vue

@@ -22,7 +22,7 @@
                     <el-input v-model="flowFormData.fixedFlowName" placeholder="请输入流程名称" />
                 </el-form-item>
                 <el-form-item label="任务人" prop="linkUserJoinString">
-                    <hc-tasks-user :contract-id="contractId" :project-id="projectId" :users="flowFormData.linkUserJoinString" ui="w-full" @change="tasksUserChange" />
+                    <hc-tasks-user :contract-id="contractId" :project-id="projectId" :users="flowFormData.linkUserJoinString" ui="w-full" :is-show-task-name="true" @change="tasksUserChange" />
                 </el-form-item>
             </el-form>
             <template #footer>

+ 7 - 3
src/views/user/auth.vue

@@ -38,12 +38,16 @@ const isErrorShow = ref(false)
 onMounted(() => {
     //先清理下缓存
     store.clearStoreData()
-    // 域名后加  /#/auth?token=xxxxxxx&tenantid=xxxxxxx
-    const { token, tenantid } = getObjValue(useRoutes.query)
+    // 域名后加  /#/auth?token=xxx&tid=xxx&pid=xxx&cid=xxx
+    const { token, tid, pid, cid } = getObjValue(useRoutes.query)
     if (token) {
         isErrorShow.value = false
+        //缓存数据
         store.setTokenVal(token)
-        queryCurrentUserData(tenantid)
+        store.setProjectId(pid)
+        store.setContractId(cid)
+        //处理授权登录
+        queryCurrentUserData(tid)
     } else {
         loading.value = false
         isErrorShow.value = true

+ 135 - 168
yarn.lock

@@ -225,7 +225,7 @@
     chalk "^2.4.2"
     js-tokens "^4.0.0"
 
-"@babel/parser@^7.22.15", "@babel/parser@^7.23.6":
+"@babel/parser@^7.22.15":
   version "7.23.6"
   resolved "http://39.108.216.210:9000/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b"
   integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==
@@ -478,10 +478,10 @@
     minimatch "^3.1.2"
     strip-json-comments "^3.1.1"
 
-"@eslint/js@8.56.0":
-  version "8.56.0"
-  resolved "http://39.108.216.210:9000/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b"
-  integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==
+"@eslint/js@8.57.0":
+  version "8.57.0"
+  resolved "http://39.108.216.210:9000/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f"
+  integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==
 
 "@floating-ui/core@^1.5.3":
   version "1.5.3"
@@ -503,13 +503,13 @@
   resolved "http://39.108.216.210:9000/@floating-ui/utils/-/utils-0.2.1.tgz#16308cea045f0fc777b6ff20a9f25474dd8293d2"
   integrity sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==
 
-"@humanwhocodes/config-array@^0.11.13":
-  version "0.11.13"
-  resolved "http://39.108.216.210:9000/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297"
-  integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==
+"@humanwhocodes/config-array@^0.11.14":
+  version "0.11.14"
+  resolved "http://39.108.216.210:9000/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b"
+  integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==
   dependencies:
-    "@humanwhocodes/object-schema" "^2.0.1"
-    debug "^4.1.1"
+    "@humanwhocodes/object-schema" "^2.0.2"
+    debug "^4.3.1"
     minimatch "^3.0.5"
 
 "@humanwhocodes/module-importer@^1.0.1":
@@ -517,10 +517,10 @@
   resolved "http://39.108.216.210:9000/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
   integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
 
-"@humanwhocodes/object-schema@^2.0.1":
-  version "2.0.1"
-  resolved "http://39.108.216.210:9000/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044"
-  integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==
+"@humanwhocodes/object-schema@^2.0.2":
+  version "2.0.2"
+  resolved "http://39.108.216.210:9000/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917"
+  integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==
 
 "@iconify-json/iconoir@^1.1.41":
   version "1.1.41"
@@ -529,10 +529,10 @@
   dependencies:
     "@iconify/types" "*"
 
-"@iconify-json/ri@^1.1.19":
-  version "1.1.19"
-  resolved "http://39.108.216.210:9000/@iconify-json/ri/-/ri-1.1.19.tgz#2dcab4564605e0f137a7745555e4cc1959eb8e65"
-  integrity sha512-S9usTucQOY//J3LGIGZ+A6i8AYGCStDcLKjmWzI2UPnWJo+Xd5dESMQGkhOI5BlG3W4AtH6RmiXcpbPy3krmjQ==
+"@iconify-json/ri@^1.1.20":
+  version "1.1.20"
+  resolved "http://39.108.216.210:9000/@iconify-json/ri/-/ri-1.1.20.tgz#6621dfc91fa119c1b941a0685d213f22480157ca"
+  integrity sha512-yScIGjLFBCJKWKskQTWRjNI2Awoq+VRDkRxEsCQvSfdz41n+xkRtFG2K6J1OVI90ClRHfjFC8VJ2+WzxxyFjTQ==
   dependencies:
     "@iconify/types" "*"
 
@@ -979,136 +979,94 @@
   resolved "http://39.108.216.210:9000/@vitejs/plugin-vue/-/plugin-vue-4.6.2.tgz#057d2ded94c4e71b94e9814f92dcd9306317aa46"
   integrity sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==
 
-"@vue/compiler-core@3.4.15":
-  version "3.4.15"
-  resolved "http://39.108.216.210:9000/@vue/compiler-core/-/compiler-core-3.4.15.tgz#be20d1bbe19626052500b48969302cb6f396d36e"
-  integrity sha512-XcJQVOaxTKCnth1vCxEChteGuwG6wqnUHxAm1DO3gCz0+uXKaJNx8/digSz4dLALCy8n2lKq24jSUs8segoqIw==
-  dependencies:
-    "@babel/parser" "^7.23.6"
-    "@vue/shared" "3.4.15"
-    entities "^4.5.0"
-    estree-walker "^2.0.2"
-    source-map-js "^1.0.2"
-
-"@vue/compiler-core@3.4.19":
-  version "3.4.19"
-  resolved "http://39.108.216.210:9000/@vue/compiler-core/-/compiler-core-3.4.19.tgz#3161b1ede69da00f3ce8155dfab907a3eaa0515e"
-  integrity sha512-gj81785z0JNzRcU0Mq98E56e4ltO1yf8k5PQ+tV/7YHnbZkrM0fyFyuttnN8ngJZjbpofWE/m4qjKBiLl8Ju4w==
+"@vue/compiler-core@3.4.20":
+  version "3.4.20"
+  resolved "http://39.108.216.210:9000/@vue/compiler-core/-/compiler-core-3.4.20.tgz#1fc69daaff164ef804fe700896952dd2ce2ff082"
+  integrity sha512-l7M+xUuL8hrGtRLkrf+62d9zucAdgqNBTbJ/NufCOIuJQhauhfyAKH9ra/qUctCXcULwmclGAVpvmxjbBO30qg==
   dependencies:
     "@babel/parser" "^7.23.9"
-    "@vue/shared" "3.4.19"
+    "@vue/shared" "3.4.20"
     entities "^4.5.0"
     estree-walker "^2.0.2"
     source-map-js "^1.0.2"
 
-"@vue/compiler-dom@3.4.15":
-  version "3.4.15"
-  resolved "http://39.108.216.210:9000/@vue/compiler-dom/-/compiler-dom-3.4.15.tgz#753f5ed55f78d33dff04701fad4d76ff0cf81ee5"
-  integrity sha512-wox0aasVV74zoXyblarOM3AZQz/Z+OunYcIHe1OsGclCHt8RsRm04DObjefaI82u6XDzv+qGWZ24tIsRAIi5MQ==
-  dependencies:
-    "@vue/compiler-core" "3.4.15"
-    "@vue/shared" "3.4.15"
-
-"@vue/compiler-dom@3.4.19":
-  version "3.4.19"
-  resolved "http://39.108.216.210:9000/@vue/compiler-dom/-/compiler-dom-3.4.19.tgz#2457e57e978f431e3b5fd11fc50a3e92d5816f9a"
-  integrity sha512-vm6+cogWrshjqEHTzIDCp72DKtea8Ry/QVpQRYoyTIg9k7QZDX6D8+HGURjtmatfgM8xgCFtJJaOlCaRYRK3QA==
+"@vue/compiler-dom@3.4.20":
+  version "3.4.20"
+  resolved "http://39.108.216.210:9000/@vue/compiler-dom/-/compiler-dom-3.4.20.tgz#a1fd73e9c940021645679cde77caf7a0a51efaa9"
+  integrity sha512-/cSBGL79HFBYgDnqCNKErOav3bPde3n0sJwJM2Z09rXlkiowV/2SG1tgDAiWS1CatS4Cvo0o74e1vNeCK1R3RA==
   dependencies:
-    "@vue/compiler-core" "3.4.19"
-    "@vue/shared" "3.4.19"
+    "@vue/compiler-core" "3.4.20"
+    "@vue/shared" "3.4.20"
 
-"@vue/compiler-sfc@3.4.19":
-  version "3.4.19"
-  resolved "http://39.108.216.210:9000/@vue/compiler-sfc/-/compiler-sfc-3.4.19.tgz#33b238ded6d63e51f6a7048b742626f6007df129"
-  integrity sha512-LQ3U4SN0DlvV0xhr1lUsgLCYlwQfUfetyPxkKYu7dkfvx7g3ojrGAkw0AERLOKYXuAGnqFsEuytkdcComei3Yg==
+"@vue/compiler-sfc@3.4.20", "@vue/compiler-sfc@^3.4.20":
+  version "3.4.20"
+  resolved "http://39.108.216.210:9000/@vue/compiler-sfc/-/compiler-sfc-3.4.20.tgz#854ea80a61645f282d4783f744b42fd3fc5bcfd0"
+  integrity sha512-nPuTZz0yxTPzjyYe+9nQQsFYImcz/57UX8N3jyhl5oIUUs2jqqAMaULsAlJwve3qNYfjQzq0bwy3pqJrN9ecZw==
   dependencies:
     "@babel/parser" "^7.23.9"
-    "@vue/compiler-core" "3.4.19"
-    "@vue/compiler-dom" "3.4.19"
-    "@vue/compiler-ssr" "3.4.19"
-    "@vue/shared" "3.4.19"
+    "@vue/compiler-core" "3.4.20"
+    "@vue/compiler-dom" "3.4.20"
+    "@vue/compiler-ssr" "3.4.20"
+    "@vue/shared" "3.4.20"
     estree-walker "^2.0.2"
-    magic-string "^0.30.6"
-    postcss "^8.4.33"
-    source-map-js "^1.0.2"
-
-"@vue/compiler-sfc@^3.4.15":
-  version "3.4.15"
-  resolved "http://39.108.216.210:9000/@vue/compiler-sfc/-/compiler-sfc-3.4.15.tgz#4e5811e681955fcec886cebbec483f6ae463a64b"
-  integrity sha512-LCn5M6QpkpFsh3GQvs2mJUOAlBQcCco8D60Bcqmf3O3w5a+KWS5GvYbrrJBkgvL1BDnTp+e8q0lXCLgHhKguBA==
-  dependencies:
-    "@babel/parser" "^7.23.6"
-    "@vue/compiler-core" "3.4.15"
-    "@vue/compiler-dom" "3.4.15"
-    "@vue/compiler-ssr" "3.4.15"
-    "@vue/shared" "3.4.15"
-    estree-walker "^2.0.2"
-    magic-string "^0.30.5"
-    postcss "^8.4.33"
+    magic-string "^0.30.7"
+    postcss "^8.4.35"
     source-map-js "^1.0.2"
 
-"@vue/compiler-ssr@3.4.15":
-  version "3.4.15"
-  resolved "http://39.108.216.210:9000/@vue/compiler-ssr/-/compiler-ssr-3.4.15.tgz#a910a5b89ba4f0a776e40b63d69bdae2f50616cf"
-  integrity sha512-1jdeQyiGznr8gjFDadVmOJqZiLNSsMa5ZgqavkPZ8O2wjHv0tVuAEsw5hTdUoUW4232vpBbL/wJhzVW/JwY1Uw==
+"@vue/compiler-ssr@3.4.20":
+  version "3.4.20"
+  resolved "http://39.108.216.210:9000/@vue/compiler-ssr/-/compiler-ssr-3.4.20.tgz#3602bd176dc82c2aff3261761d04df3023ecb938"
+  integrity sha512-b3gFQPiHLvI12C56otzBPpQhZ5kgkJ5RMv/zpLjLC2BIFwX5GktDqYQ7xg0Q2grP6uFI8al3beVKvAVxFtXmIg==
   dependencies:
-    "@vue/compiler-dom" "3.4.15"
-    "@vue/shared" "3.4.15"
-
-"@vue/compiler-ssr@3.4.19":
-  version "3.4.19"
-  resolved "http://39.108.216.210:9000/@vue/compiler-ssr/-/compiler-ssr-3.4.19.tgz#1f8ee06005ebbaa354f8783fad84e9f7ea4a69c2"
-  integrity sha512-P0PLKC4+u4OMJ8sinba/5Z/iDT84uMRRlrWzadgLA69opCpI1gG4N55qDSC+dedwq2fJtzmGald05LWR5TFfLw==
-  dependencies:
-    "@vue/compiler-dom" "3.4.19"
-    "@vue/shared" "3.4.19"
+    "@vue/compiler-dom" "3.4.20"
+    "@vue/shared" "3.4.20"
 
 "@vue/devtools-api@^6.5.0":
   version "6.5.1"
   resolved "http://39.108.216.210:9000/@vue/devtools-api/-/devtools-api-6.5.1.tgz#7f71f31e40973eeee65b9a64382b13593fdbd697"
   integrity sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==
 
-"@vue/reactivity@3.4.19":
-  version "3.4.19"
-  resolved "http://39.108.216.210:9000/@vue/reactivity/-/reactivity-3.4.19.tgz#8cf335d97d07881d8184cb23289289dc18b03f60"
-  integrity sha512-+VcwrQvLZgEclGZRHx4O2XhyEEcKaBi50WbxdVItEezUf4fqRh838Ix6amWTdX0CNb/b6t3Gkz3eOebfcSt+UA==
+"@vue/devtools-api@^6.5.1":
+  version "6.6.1"
+  resolved "http://39.108.216.210:9000/@vue/devtools-api/-/devtools-api-6.6.1.tgz#7c14346383751d9f6ad4bea0963245b30220ef83"
+  integrity sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA==
+
+"@vue/reactivity@3.4.20":
+  version "3.4.20"
+  resolved "http://39.108.216.210:9000/@vue/reactivity/-/reactivity-3.4.20.tgz#584910882d8af382900cc77ce8166ffd87921fd2"
+  integrity sha512-P5LJcxUkG6inlHr6MHVA4AVFAmRYJQ7ONGWJILNjMjoYuEXFhYviSCb9BEMyszSG/1kWCZbtWQlKSLasFRpThw==
   dependencies:
-    "@vue/shared" "3.4.19"
+    "@vue/shared" "3.4.20"
 
-"@vue/runtime-core@3.4.19":
-  version "3.4.19"
-  resolved "http://39.108.216.210:9000/@vue/runtime-core/-/runtime-core-3.4.19.tgz#ef10357fdf3afdf68523b55424541000105e2aeb"
-  integrity sha512-/Z3tFwOrerJB/oyutmJGoYbuoadphDcJAd5jOuJE86THNZji9pYjZroQ2NFsZkTxOq0GJbb+s2kxTYToDiyZzw==
+"@vue/runtime-core@3.4.20":
+  version "3.4.20"
+  resolved "http://39.108.216.210:9000/@vue/runtime-core/-/runtime-core-3.4.20.tgz#680630c7fdf9fee09be6b32f22cc753cecb68c34"
+  integrity sha512-MPvsQpGAxoBqLHjqopt4YPtUYBpq0K6oAWDTwIR1CTNZ3y9O/J2ZVh+i2JpxKNYwANJBiZ20O99NE20uisB7xw==
   dependencies:
-    "@vue/reactivity" "3.4.19"
-    "@vue/shared" "3.4.19"
+    "@vue/reactivity" "3.4.20"
+    "@vue/shared" "3.4.20"
 
-"@vue/runtime-dom@3.4.19":
-  version "3.4.19"
-  resolved "http://39.108.216.210:9000/@vue/runtime-dom/-/runtime-dom-3.4.19.tgz#079141e31d9f47515b9595f29843d51011f88739"
-  integrity sha512-IyZzIDqfNCF0OyZOauL+F4yzjMPN2rPd8nhqPP2N1lBn3kYqJpPHHru+83Rkvo2lHz5mW+rEeIMEF9qY3PB94g==
+"@vue/runtime-dom@3.4.20":
+  version "3.4.20"
+  resolved "http://39.108.216.210:9000/@vue/runtime-dom/-/runtime-dom-3.4.20.tgz#3eebd867385d759cc333fb761365655987e78969"
+  integrity sha512-OkbPVP69H+8m74543zMAAx/LIkajxufYyow41gc0s5iF0uplT5uTQ4llDYu1GeJZEI8wjL5ueiPQruk4qwOMmA==
   dependencies:
-    "@vue/runtime-core" "3.4.19"
-    "@vue/shared" "3.4.19"
+    "@vue/runtime-core" "3.4.20"
+    "@vue/shared" "3.4.20"
     csstype "^3.1.3"
 
-"@vue/server-renderer@3.4.19":
-  version "3.4.19"
-  resolved "http://39.108.216.210:9000/@vue/server-renderer/-/server-renderer-3.4.19.tgz#e6f8ff5268d0758766ca9835375218924d5f0eb6"
-  integrity sha512-eAj2p0c429RZyyhtMRnttjcSToch+kTWxFPHlzGMkR28ZbF1PDlTcmGmlDxccBuqNd9iOQ7xPRPAGgPVj+YpQw==
+"@vue/server-renderer@3.4.20":
+  version "3.4.20"
+  resolved "http://39.108.216.210:9000/@vue/server-renderer/-/server-renderer-3.4.20.tgz#1f59b76ba8a711cbf56ed2b004fe44c1ef861b6e"
+  integrity sha512-w3VH2GuwxQHA6pJo/HCV22OfVC8Mw4oeHQM+vKeqtRK0OPE1Wilnh+P/SDVGGxPjJsGmyfphi0dbw8UKZQJH9w==
   dependencies:
-    "@vue/compiler-ssr" "3.4.19"
-    "@vue/shared" "3.4.19"
+    "@vue/compiler-ssr" "3.4.20"
+    "@vue/shared" "3.4.20"
 
-"@vue/shared@3.4.15":
-  version "3.4.15"
-  resolved "http://39.108.216.210:9000/@vue/shared/-/shared-3.4.15.tgz#e7d2ea050c667480cb5e1a6df2ac13bcd03a8f30"
-  integrity sha512-KzfPTxVaWfB+eGcGdbSf4CWdaXcGDqckoeXUh7SB3fZdEtzPCK2Vq9B/lRRL3yutax/LWITz+SwvgyOxz5V75g==
-
-"@vue/shared@3.4.19":
-  version "3.4.19"
-  resolved "http://39.108.216.210:9000/@vue/shared/-/shared-3.4.19.tgz#28105147811bcf1e6612bf1c9ab0c6d91ada019c"
-  integrity sha512-/KliRRHMF6LoiThEy+4c1Z4KB/gbPrGjWwJR+crg2otgrf/egKzRaCPvJ51S5oetgsgXLfc4Rm5ZgrKHZrtMSw==
+"@vue/shared@3.4.20":
+  version "3.4.20"
+  resolved "http://39.108.216.210:9000/@vue/shared/-/shared-3.4.20.tgz#13b7d1e2a3752bbc032b38f53dba5c2f430eea7e"
+  integrity sha512-KTEngal0aiUvNJ6I1Chk5Ew5XqChsFsxP4GKAYXWb99zKJWjNU72p2FWEOmZWHxHcqtniOJsgnpd3zizdpfEag==
 
 "@vueuse/core@^9.1.0":
   version "9.13.0"
@@ -1191,10 +1149,10 @@ archiver-utils@^4.0.1:
     normalize-path "^3.0.0"
     readable-stream "^3.6.0"
 
-archiver@^6.0.1:
-  version "6.0.1"
-  resolved "http://39.108.216.210:9000/archiver/-/archiver-6.0.1.tgz#d56968d4c09df309435adb5a1bbfc370dae48133"
-  integrity sha512-CXGy4poOLBKptiZH//VlWdFuUC1RESbdZjGjILwBuZ73P7WkAUN0htfSfBq/7k6FRFlpu7bg4JOkj1vU9G6jcQ==
+archiver@^6.0.2:
+  version "6.0.2"
+  resolved "http://39.108.216.210:9000/archiver/-/archiver-6.0.2.tgz#f45e7598dfe48e834ac8c7a0c37033f826f5a639"
+  integrity sha512-UQ/2nW7NMl1G+1UnrLypQw1VdT9XZg/ECcKPq7l+STzStrSivFIXIp34D8M5zeNGW5NoOupdYCHv6VySCPNNlw==
   dependencies:
     archiver-utils "^4.0.1"
     async "^3.2.4"
@@ -1463,7 +1421,7 @@ dayjs@^1.11.10, dayjs@^1.11.3:
   resolved "http://39.108.216.210:9000/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0"
   integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==
 
-debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
+debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4:
   version "4.3.4"
   resolved "http://39.108.216.210:9000/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
   integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
@@ -1596,16 +1554,16 @@ escape-string-regexp@^4.0.0:
   resolved "http://39.108.216.210:9000/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
   integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
 
-eslint-plugin-vue@^9.21.1:
-  version "9.21.1"
-  resolved "http://39.108.216.210:9000/eslint-plugin-vue/-/eslint-plugin-vue-9.21.1.tgz#da5629efa48527cec98278dca0daa90fada4caf7"
-  integrity sha512-XVtI7z39yOVBFJyi8Ljbn7kY9yHzznKXL02qQYn+ta63Iy4A9JFBw6o4OSB9hyD2++tVT+su9kQqetUyCCwhjw==
+eslint-plugin-vue@^9.22.0:
+  version "9.22.0"
+  resolved "http://39.108.216.210:9000/eslint-plugin-vue/-/eslint-plugin-vue-9.22.0.tgz#e8a625adb0b6ce3b65635dd74fec8345146f8e26"
+  integrity sha512-7wCXv5zuVnBtZE/74z4yZ0CM8AjH6bk4MQGm7hZjUC2DBppKU5ioeOk5LGSg/s9a1ZJnIsdPLJpXnu1Rc+cVHg==
   dependencies:
     "@eslint-community/eslint-utils" "^4.4.0"
     natural-compare "^1.4.0"
     nth-check "^2.1.1"
-    postcss-selector-parser "^6.0.13"
-    semver "^7.5.4"
+    postcss-selector-parser "^6.0.15"
+    semver "^7.6.0"
     vue-eslint-parser "^9.4.2"
     xml-name-validator "^4.0.0"
 
@@ -1622,16 +1580,16 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4
   resolved "http://39.108.216.210:9000/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
   integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
 
-eslint@^8.56.0:
-  version "8.56.0"
-  resolved "http://39.108.216.210:9000/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15"
-  integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==
+eslint@^8.57.0:
+  version "8.57.0"
+  resolved "http://39.108.216.210:9000/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668"
+  integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==
   dependencies:
     "@eslint-community/eslint-utils" "^4.2.0"
     "@eslint-community/regexpp" "^4.6.1"
     "@eslint/eslintrc" "^2.1.4"
-    "@eslint/js" "8.56.0"
-    "@humanwhocodes/config-array" "^0.11.13"
+    "@eslint/js" "8.57.0"
+    "@humanwhocodes/config-array" "^0.11.14"
     "@humanwhocodes/module-importer" "^1.0.1"
     "@nodelib/fs.walk" "^1.2.8"
     "@ungap/structured-clone" "^1.2.0"
@@ -1915,10 +1873,10 @@ has-flag@^4.0.0:
   resolved "http://39.108.216.210:9000/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
   integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
 
-hc-vue3-ui@^3.1.3:
-  version "3.1.3"
-  resolved "http://39.108.216.210:9000/hc-vue3-ui/-/hc-vue3-ui-3.1.3.tgz#4c44e77d0fcb8e1b29afb84968ae7c799133b269"
-  integrity sha512-OdQUP0byC/9SI8eFck+TsnT9ojphSlSShZqOsS18mmVv1ad0neK8raPZJngYSecvR8wJ7k4Vel1ilnfDfldLzw==
+hc-vue3-ui@^3.1.8:
+  version "3.1.8"
+  resolved "http://39.108.216.210:9000/hc-vue3-ui/-/hc-vue3-ui-3.1.8.tgz#07cd8c4656887ee94e3db07af6e895299fcce300"
+  integrity sha512-JUIMn4jlkaxcg2xEFp6Kq//Pe1IgUyebIAWHYMH+R6xLbUmCm1vWTtcmVy7/HzKVd0QLGWjpxHwNBcvW95VVGA==
 
 human-signals@^2.1.0:
   version "2.1.0"
@@ -2010,10 +1968,10 @@ jiti@^1.20.0:
   resolved "http://39.108.216.210:9000/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d"
   integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==
 
-js-base64@^3.7.6:
-  version "3.7.6"
-  resolved "http://39.108.216.210:9000/js-base64/-/js-base64-3.7.6.tgz#6ccb5d761b48381fd819f9ce04998866dbcbbc99"
-  integrity sha512-NPrWuHFxFUknr1KqJRDgUQPexQF0uIJWjeT+2KjEePhitQxQEx5EJBG1lVn5/hc8aLycTpXrDOgPQ6Zq+EDiTA==
+js-base64@^3.7.7:
+  version "3.7.7"
+  resolved "http://39.108.216.210:9000/js-base64/-/js-base64-3.7.7.tgz#e51b84bf78fbf5702b9541e2cb7bfcb893b43e79"
+  integrity sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==
 
 js-fast-way@^0.4.6:
   version "0.4.6"
@@ -2143,14 +2101,7 @@ lru-cache@^6.0.0:
   dependencies:
     yallist "^4.0.0"
 
-magic-string@^0.30.5:
-  version "0.30.5"
-  resolved "http://39.108.216.210:9000/magic-string/-/magic-string-0.30.5.tgz#1994d980bd1c8835dc6e78db7cbd4ae4f24746f9"
-  integrity sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==
-  dependencies:
-    "@jridgewell/sourcemap-codec" "^1.4.15"
-
-magic-string@^0.30.6:
+magic-string@^0.30.6, magic-string@^0.30.7:
   version "0.30.7"
   resolved "http://39.108.216.210:9000/magic-string/-/magic-string-0.30.7.tgz#0cecd0527d473298679da95a2d7aeb8c64048505"
   integrity sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==
@@ -2420,7 +2371,7 @@ pkg-types@^1.0.3:
     mlly "^1.2.0"
     pathe "^1.1.0"
 
-postcss-selector-parser@^6.0.13:
+postcss-selector-parser@^6.0.15:
   version "6.0.15"
   resolved "http://39.108.216.210:9000/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz#11cc2b21eebc0b99ea374ffb9887174855a01535"
   integrity sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==
@@ -2437,6 +2388,15 @@ postcss@^8.4.27, postcss@^8.4.33:
     picocolors "^1.0.0"
     source-map-js "^1.0.2"
 
+postcss@^8.4.35:
+  version "8.4.35"
+  resolved "http://39.108.216.210:9000/postcss/-/postcss-8.4.35.tgz#60997775689ce09011edf083a549cea44aabe2f7"
+  integrity sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==
+  dependencies:
+    nanoid "^3.3.7"
+    picocolors "^1.0.0"
+    source-map-js "^1.0.2"
+
 prelude-ls@^1.2.1:
   version "1.2.1"
   resolved "http://39.108.216.210:9000/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
@@ -2565,6 +2525,13 @@ semver@^7.3.6, semver@^7.5.4:
   dependencies:
     lru-cache "^6.0.0"
 
+semver@^7.6.0:
+  version "7.6.0"
+  resolved "http://39.108.216.210:9000/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d"
+  integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==
+  dependencies:
+    lru-cache "^6.0.0"
+
 shebang-command@^2.0.0:
   version "2.0.0"
   resolved "http://39.108.216.210:9000/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
@@ -2837,23 +2804,23 @@ vue-eslint-parser@^9.4.2:
     lodash "^4.17.21"
     semver "^7.3.6"
 
-vue-router@^4.2.5:
-  version "4.2.5"
-  resolved "http://39.108.216.210:9000/vue-router/-/vue-router-4.2.5.tgz#b9e3e08f1bd9ea363fdd173032620bc50cf0e98a"
-  integrity sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==
+vue-router@^4.3.0:
+  version "4.3.0"
+  resolved "http://39.108.216.210:9000/vue-router/-/vue-router-4.3.0.tgz#d5913f27bf68a0a178ee798c3c88be471811a235"
+  integrity sha512-dqUcs8tUeG+ssgWhcPbjHvazML16Oga5w34uCUmsk7i0BcnskoLGwjpa15fqMr2Fa5JgVBrdL2MEgqz6XZ/6IQ==
   dependencies:
-    "@vue/devtools-api" "^6.5.0"
+    "@vue/devtools-api" "^6.5.1"
 
-vue@3.4.19:
-  version "3.4.19"
-  resolved "http://39.108.216.210:9000/vue/-/vue-3.4.19.tgz#f9ae0a44db86628548736ff04152830726a97263"
-  integrity sha512-W/7Fc9KUkajFU8dBeDluM4sRGc/aa4YJnOYck8dkjgZoXtVsn3OeTGni66FV1l3+nvPA7VBFYtPioaGKUmEADw==
+vue@3.4.20:
+  version "3.4.20"
+  resolved "http://39.108.216.210:9000/vue/-/vue-3.4.20.tgz#1d08d3ea8c5c294c15cd61aee2b78dc5f621ff7f"
+  integrity sha512-xF4zDKXp67NjgORFX/HOuaiaKYjgxkaToK0KWglFQEYlCw9AqgBlj1yu5xa6YaRek47w2IGiuvpvrGg/XuQFCw==
   dependencies:
-    "@vue/compiler-dom" "3.4.19"
-    "@vue/compiler-sfc" "3.4.19"
-    "@vue/runtime-dom" "3.4.19"
-    "@vue/server-renderer" "3.4.19"
-    "@vue/shared" "3.4.19"
+    "@vue/compiler-dom" "3.4.20"
+    "@vue/compiler-sfc" "3.4.20"
+    "@vue/runtime-dom" "3.4.20"
+    "@vue/server-renderer" "3.4.20"
+    "@vue/shared" "3.4.20"
 
 vuedraggable@^4.1.0:
   version "4.1.0"

Некоторые файлы не были показаны из-за большого количества измененных файлов