소스 검색

Upadet 活动详情添加二维码

Yue 2 년 전
부모
커밋
592c380da4

+ 2 - 0
SERVER/YanZhongXYH/xyh-system/src/main/resources/mapper/amActivity/AmActivityApplyMapper.xml

@@ -55,6 +55,8 @@
                      ap.cost_status,
                      ap.cost_audit_user,
                      ap.cost_time,
+                     ap.is_attend,
+                     ap.attend_time,
                      ap.create_by,
                      ap.del_flag,
                      ap.create_time,

+ 1 - 0
UI/XYH.APP/src/api/_login.ts

@@ -69,6 +69,7 @@ class loginApi {
       url: "/xcxLogin/" + code,
       isToken: false,
       needProcess: false,
+      login: false,
     })
   }
 }

+ 3 - 3
UI/XYH.APP/src/pages/mine/index.vue

@@ -110,17 +110,17 @@ onMounted(init)
         <view class="fs-20 font-bold mb-5">
           {{ helpCount }}
         </view>
-        <view class="fs-16">我的互助</view>
+        <view class="fs-16">互助</view>
       </view>
       <view class="w-100 flex-column d-fc text-vb" @click="route.navigate('myActivity', { active: 0 })">
         <view class="fs-20 font-bold mb-5">
           {{ activityCount }}
         </view>
-        <view class="fs-16">我的活动</view>
+        <view class="fs-16">活动</view>
       </view>
       <view class="w-100 flex-column d-fc text-vb" @click="onActivityScan">
         <i class="iconfont icon-scan fs-26 mb-5"></i>
-        <view class="fs-16">活动签到</view>
+        <view class="fs-16">扫码</view>
       </view>
     </view>
     <view v-if="ready" class="">

+ 1 - 0
UI/XYH.VUE/package.json

@@ -34,6 +34,7 @@
 		"vite-plugin-svg-icons": "^2.0.1",
 		"vue": "^3.3.4",
 		"vue-cropper": "1.0.3",
+		"vue-qr": "^4.0.9",
 		"vue-router": "^4.2.4",
 		"vue3-treeselect-ts": "^0.0.4"
 	},

+ 125 - 62
UI/XYH.VUE/pnpm-lock.yaml

@@ -68,6 +68,9 @@ dependencies:
   vue-cropper:
     specifier: 1.0.3
     version: registry.npmmirror.com/vue-cropper@1.0.3
+  vue-qr:
+    specifier: ^4.0.9
+    version: 4.0.9
   vue-router:
     specifier: ^4.2.4
     version: registry.npmmirror.com/vue-router@4.2.4(vue@3.3.4)
@@ -1231,6 +1234,22 @@ packages:
     engines: {node: '>=8'}
     dev: true
 
+  /balanced-match@1.0.2:
+    resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, tarball: https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz}
+
+  /brace-expansion@1.1.11:
+    resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==, tarball: https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz}
+    dependencies:
+      balanced-match: 1.0.2
+      concat-map: registry.npmmirror.com/concat-map@0.0.1
+    dev: true
+
+  /brace-expansion@2.0.1:
+    resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==, tarball: https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz}
+    dependencies:
+      balanced-match: 1.0.2
+    dev: false
+
   /braces@2.3.2:
     resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==, tarball: https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz}
     engines: {node: '>=0.10.0'}
@@ -1340,6 +1359,13 @@ packages:
       ms: 2.1.2
     dev: true
 
+  /decompress-response@6.0.0:
+    resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==, tarball: https://registry.npmmirror.com/decompress-response/-/decompress-response-6.0.0.tgz}
+    engines: {node: '>=10'}
+    dependencies:
+      mimic-response: 3.1.0
+    dev: false
+
   /define-lazy-prop@2.0.0:
     resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==, tarball: https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz}
     engines: {node: '>=8'}
@@ -1512,6 +1538,9 @@ packages:
     dependencies:
       to-regex-range: 5.0.1
 
+  /fs.realpath@1.0.0:
+    resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==, tarball: https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz}
+
   /fsevents@2.3.3:
     resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, tarball: https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz}
     engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
@@ -1535,6 +1564,28 @@ packages:
     resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==, tarball: https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz}
     dev: true
 
+  /glob@7.2.3:
+    resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==, tarball: https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz}
+    dependencies:
+      fs.realpath: 1.0.0
+      inflight: 1.0.6
+      inherits: 2.0.4
+      minimatch: 3.1.2
+      once: 1.4.0
+      path-is-absolute: registry.npmmirror.com/path-is-absolute@1.0.1
+    dev: true
+
+  /glob@8.1.0:
+    resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==, tarball: https://registry.npmmirror.com/glob/-/glob-8.1.0.tgz}
+    engines: {node: '>=12'}
+    dependencies:
+      fs.realpath: 1.0.0
+      inflight: 1.0.6
+      inherits: 2.0.4
+      minimatch: 5.1.6
+      once: 1.4.0
+    dev: false
+
   /globby@11.1.0:
     resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==, tarball: https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz}
     engines: {node: '>=10'}
@@ -1564,6 +1615,15 @@ packages:
     engines: {node: '>= 4'}
     dev: true
 
+  /inflight@1.0.6:
+    resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==, tarball: https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz}
+    dependencies:
+      once: 1.4.0
+      wrappy: 1.0.2
+
+  /inherits@2.0.4:
+    resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, tarball: https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz}
+
   /is-docker@2.2.1:
     resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==, tarball: https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz}
     engines: {node: '>=8'}
@@ -1612,6 +1672,10 @@ packages:
       supports-color: 8.1.1
     dev: true
 
+  /js-binary-schema-parser@2.0.3:
+    resolution: {integrity: sha512-xezGJmOb4lk/M1ZZLTR/jaBHQ4gG/lqQnJqdIv4721DMggsa1bDVlHXNeHYogaIEHD9vCRv0fcL4hMA+Coarkg==, tarball: https://registry.npmmirror.com/js-binary-schema-parser/-/js-binary-schema-parser-2.0.3.tgz}
+    dev: false
+
   /json-parse-even-better-errors@2.3.1:
     resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, tarball: https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz}
     dev: true
@@ -1747,6 +1811,24 @@ packages:
       mime-db: 1.52.0
     dev: true
 
+  /mimic-response@3.1.0:
+    resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==, tarball: https://registry.npmmirror.com/mimic-response/-/mimic-response-3.1.0.tgz}
+    engines: {node: '>=10'}
+    dev: false
+
+  /minimatch@3.1.2:
+    resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, tarball: https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz}
+    dependencies:
+      brace-expansion: 1.1.11
+    dev: true
+
+  /minimatch@5.1.6:
+    resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==, tarball: https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz}
+    engines: {node: '>=10'}
+    dependencies:
+      brace-expansion: 2.0.1
+    dev: false
+
   /ms@2.0.0:
     resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==, tarball: https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz}
 
@@ -1786,6 +1868,11 @@ packages:
     resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==, tarball: https://registry.npmmirror.com/node-releases/-/node-releases-2.0.13.tgz}
     dev: true
 
+  /once@1.4.0:
+    resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, tarball: https://registry.npmmirror.com/once/-/once-1.4.0.tgz}
+    dependencies:
+      wrappy: 1.0.2
+
   /open@8.4.2:
     resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==, tarball: https://registry.npmmirror.com/open/-/open-8.4.2.tgz}
     engines: {node: '>=12'}
@@ -1795,6 +1882,10 @@ packages:
       is-wsl: 2.2.0
     dev: true
 
+  /parenthesis@3.1.8:
+    resolution: {integrity: sha512-KF/U8tk54BgQewkJPvB4s/US3VQY68BRDpH638+7O/n58TpnwiwnOtGIOsT2/i+M78s61BBpeC83STB88d8sqw==, tarball: https://registry.npmmirror.com/parenthesis/-/parenthesis-3.1.8.tgz}
+    dev: false
+
   /path-type@4.0.0:
     resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==, tarball: https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz}
     engines: {node: '>=8'}
@@ -1892,6 +1983,18 @@ packages:
       randombytes: 2.1.0
     dev: true
 
+  /simple-concat@1.0.1:
+    resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==, tarball: https://registry.npmmirror.com/simple-concat/-/simple-concat-1.0.1.tgz}
+    dev: false
+
+  /simple-get@4.0.1:
+    resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==, tarball: https://registry.npmmirror.com/simple-get/-/simple-get-4.0.1.tgz}
+    dependencies:
+      decompress-response: 6.0.0
+      once: 1.4.0
+      simple-concat: 1.0.1
+    dev: false
+
   /slash@3.0.0:
     resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==, tarball: https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz}
     engines: {node: '>=8'}
@@ -1917,6 +2020,12 @@ packages:
     engines: {node: '>= 8'}
     dev: true
 
+  /string-split-by@1.0.0:
+    resolution: {integrity: sha512-KaJKY+hfpzNyet/emP81PJA9hTVSfxNLS9SFTWxdCnnW1/zOOwiV248+EfoX7IQFcBaOp4G5YE6xTJMF+pLg6A==, tarball: https://registry.npmmirror.com/string-split-by/-/string-split-by-1.0.0.tgz}
+    dependencies:
+      parenthesis: 3.1.8
+    dev: false
+
   /string-width@4.2.3:
     resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, tarball: https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz}
     engines: {node: '>=8'}
@@ -1965,21 +2074,10 @@ packages:
       jest-worker: 27.5.1
       schema-utils: 3.3.0
       serialize-javascript: 6.0.1
-      terser: 5.19.2
+      terser: 5.26.0
       webpack: 5.88.2
     dev: true
 
-  /terser@5.19.2:
-    resolution: {integrity: sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==, tarball: https://registry.npmmirror.com/terser/-/terser-5.19.2.tgz}
-    engines: {node: '>=10'}
-    hasBin: true
-    dependencies:
-      '@jridgewell/source-map': 0.3.5
-      acorn: 8.10.0
-      commander: 2.20.3
-      source-map-support: 0.5.21
-    dev: true
-
   /terser@5.26.0:
     resolution: {integrity: sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==, tarball: https://registry.npmmirror.com/terser/-/terser-5.26.0.tgz}
     engines: {node: '>=10'}
@@ -2069,6 +2167,15 @@ packages:
       - supports-color
     dev: true
 
+  /vue-qr@4.0.9:
+    resolution: {integrity: sha512-pAISV94T0MNEYA3NGjykUpsXRE2QfaNxlu9ZhEL6CERgqNc21hJYuP3hRVzAWfBQlgO18DPmZTbrFerJC3+Ikw==, tarball: https://registry.npmmirror.com/vue-qr/-/vue-qr-4.0.9.tgz}
+    dependencies:
+      glob: 8.1.0
+      js-binary-schema-parser: 2.0.3
+      simple-get: 4.0.1
+      string-split-by: 1.0.0
+    dev: false
+
   /watchpack@2.4.0:
     resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==, tarball: https://registry.npmmirror.com/watchpack/-/watchpack-2.4.0.tgz}
     engines: {node: '>=10.13.0'}
@@ -2131,6 +2238,9 @@ packages:
       strip-ansi: 6.0.1
     dev: true
 
+  /wrappy@1.0.2:
+    resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, tarball: https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz}
+
   /y18n@5.0.8:
     resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==, tarball: https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz}
     engines: {node: '>=10'}
@@ -6124,12 +6234,6 @@ packages:
       universalify: registry.npmmirror.com/universalify@2.0.0
     dev: true
 
-  registry.npmmirror.com/fs.realpath@1.0.0:
-    resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz}
-    name: fs.realpath
-    version: 1.0.0
-    dev: true
-
   registry.npmmirror.com/function-bind@1.1.1:
     resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz}
     name: function-bind
@@ -6231,19 +6335,6 @@ packages:
       is-glob: 4.0.3
     dev: true
 
-  registry.npmmirror.com/glob@7.2.3:
-    resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz}
-    name: glob
-    version: 7.2.3
-    dependencies:
-      fs.realpath: registry.npmmirror.com/fs.realpath@1.0.0
-      inflight: registry.npmmirror.com/inflight@1.0.6
-      inherits: registry.npmmirror.com/inherits@2.0.4
-      minimatch: registry.npmmirror.com/minimatch@3.1.2
-      once: registry.npmmirror.com/once@1.4.0
-      path-is-absolute: registry.npmmirror.com/path-is-absolute@1.0.1
-    dev: true
-
   registry.npmmirror.com/global-dirs@0.1.1:
     resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/global-dirs/-/global-dirs-0.1.1.tgz}
     name: global-dirs
@@ -6529,7 +6620,7 @@ packages:
       domhandler: registry.npmmirror.com/domhandler@2.4.2
       domutils: registry.npmmirror.com/domutils@1.7.0
       entities: registry.npmmirror.com/entities@1.1.2
-      inherits: registry.npmmirror.com/inherits@2.0.4
+      inherits: 2.0.4
       readable-stream: registry.npmmirror.com/readable-stream@3.6.2
     dev: false
 
@@ -6626,20 +6717,6 @@ packages:
     engines: {node: '>=12'}
     dev: true
 
-  registry.npmmirror.com/inflight@1.0.6:
-    resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz}
-    name: inflight
-    version: 1.0.6
-    dependencies:
-      once: registry.npmmirror.com/once@1.4.0
-      wrappy: registry.npmmirror.com/wrappy@1.0.2
-    dev: true
-
-  registry.npmmirror.com/inherits@2.0.4:
-    resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz}
-    name: inherits
-    version: 2.0.4
-
   registry.npmmirror.com/ini@1.3.8:
     resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz}
     name: ini
@@ -7903,14 +7980,6 @@ packages:
       es-abstract: registry.npmmirror.com/es-abstract@1.22.1
     dev: true
 
-  registry.npmmirror.com/once@1.4.0:
-    resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/once/-/once-1.4.0.tgz}
-    name: once
-    version: 1.4.0
-    dependencies:
-      wrappy: registry.npmmirror.com/wrappy@1.0.2
-    dev: true
-
   registry.npmmirror.com/onetime@5.1.2:
     resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz}
     name: onetime
@@ -8535,7 +8604,7 @@ packages:
     version: 3.6.2
     engines: {node: '>= 6'}
     dependencies:
-      inherits: registry.npmmirror.com/inherits@2.0.4
+      inherits: 2.0.4
       string_decoder: registry.npmmirror.com/string_decoder@1.3.0
       util-deprecate: registry.npmmirror.com/util-deprecate@1.0.2
 
@@ -8688,7 +8757,7 @@ packages:
     version: 3.0.2
     hasBin: true
     dependencies:
-      glob: registry.npmmirror.com/glob@7.2.3
+      glob: 7.2.3
     dev: true
 
   registry.npmmirror.com/rollup@2.79.1:
@@ -10299,12 +10368,6 @@ packages:
       strip-ansi: registry.npmmirror.com/strip-ansi@6.0.1
     dev: true
 
-  registry.npmmirror.com/wrappy@1.0.2:
-    resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz}
-    name: wrappy
-    version: 1.0.2
-    dev: true
-
   registry.npmmirror.com/write-file-atomic@5.0.1:
     resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz}
     name: write-file-atomic

+ 177 - 76
UI/XYH.VUE/src/views/amActivity/activity/index.vue

@@ -2,7 +2,7 @@
 import dayjs from "dayjs"
 import apis from "@a"
 import { permissionNames } from "@@/services/PermissionNames"
-
+import vueQr from "vue-qr/src/packages/vue-qr.vue"
 //const { activity_audit_status } = useDict("activity_audit_status")
 
 const tableRef = ref()
@@ -417,6 +417,10 @@ function handleAudit(row: any) {
 }
 const applyDetailTotal = ref(0)
 const applyDetailList = ref<any[]>([])
+const qrCode = ref({
+	logo: "/media/yzxyh.png",
+	size: 200
+})
 function handleDetail(row: any) {
 	detailType.value = "D"
 	apis.amActivity.activityApi.getActivity(row.activityId).then((res) => {
@@ -455,6 +459,14 @@ function submitDetail() {
 	}
 }
 
+function handleDownloadQr(id: string) {
+	let myImg = document.querySelector("#" + id + " img") as HTMLImageElement
+	let url = myImg?.src
+	let a = document.createElement("a")
+	a.href = url
+	a.download = `${detailData.value?.title || ""}——${id == "apply-qr" ? "报名" : "签到"}二维码` //下载图名称
+	a.click()
+}
 function handleClose(row: any) {
 	message
 		.confirm("是否确认关闭 [" + row.title + "] 的活动,结束后不可恢复?")
@@ -521,19 +533,27 @@ function handleAplly(row: any) {
 	currrentApplyId.value = row.activityId
 	handleQueryApply()
 }
+
+const applyAudit = ref("")
+const applyCost = ref("")
+const applyAttend = ref("")
+
 function handleQueryApply() {
-	apis.amActivity.activityApi
-		.listApply({
-			activityId: currrentApplyId.value,
-			pageNum: 1,
-			pageSize: 10000,
-			orderByColumn: "auditStatus",
-			isAsc: "ascending"
-		})
-		.then((res: any) => {
-			applyAuditList.value = res.rows
-			applyModalRef.value.show()
-		})
+	const params = {
+		activityId: currrentApplyId.value,
+		auditStatus: applyAudit.value,
+		costStatus: applyCost.value,
+		isAttend: applyAttend.value,
+		pageNum: 1,
+		pageSize: 10000,
+		orderByColumn: "auditStatus",
+		isAsc: "ascending"
+	}
+
+	apis.amActivity.activityApi.listApply(params).then((res: any) => {
+		applyAuditList.value = res.rows
+		applyModalRef.value.show()
+	})
 }
 function handleApllyAudit(item: any, status: string) {
 	const text = status === "1" ? "通过" : "拒绝"
@@ -794,12 +814,47 @@ onMounted(init)
 						detailType == 'D' && detailData.auditStatus != '0' && applyDetailList.length > 0
 					"
 					class="d-flex flex-column align-item-center py-5">
+					<div class="d-flex justify-content-center mb-3">
+						<div class="px-15 d-flex flex-column" id="apply-qr">
+							<div class="w-100 text-center text-primary fs-4">
+								<span class="fw-bold">报名</span>
+								二维码
+							</div>
+							<vue-qr
+								ref="qrCode"
+								:text="`AD@${detailData.activityId}`"
+								:logoSrc="qrCode.logo"
+								:logoCornerRadius="`50%`"
+								color-dark="#0e9489"
+								:width="qrCode.size"
+								:height="qrCode.size"></vue-qr>
+							<el-button type="primary" @click="handleDownloadQr('apply-qr')">保存</el-button>
+						</div>
+						<div class="px-15 d-flex flex-column" id="attend-qr">
+							<div class="w-100 text-center text-primary fs-4">
+								<span class="fw-bold">签到</span>
+								二维码
+							</div>
+							<vue-qr
+								ref="qrCode"
+								:text="`AAD@${detailData.activityId}`"
+								:logoSrc="qrCode.logo"
+								color-dark="#0e9489"
+								:width="qrCode.size"
+								:height="qrCode.size"></vue-qr>
+							<el-button type="primary" @click="handleDownloadQr('attend-qr')">保存</el-button>
+						</div>
+					</div>
+					<div class="text-danger text-center mb-3">注意:二维码需要小程序内部扫码功能扫码</div>
+
 					<div class="d-flex align-items-center justify-content-between mb-2">
 						<dl class="mb-0">
 							<dt>报名详情:</dt>
 							<dd>{{ applyDetailTotal }} 人报名</dd>
 						</dl>
-						<el-button type="primary" @click="handleAplly(detailData)">审核报名</el-button>
+						<el-button class="me-2" type="primary" @click="handleAplly(detailData)">
+							审核报名
+						</el-button>
 					</div>
 					<div class="d-flex flex-wrap px-20">
 						<VbSymbol
@@ -825,70 +880,116 @@ onMounted(init)
 			"
 			append-to-body>
 			<template #body>
-				<div class="d-flex flex-wrap justify-content-center">
-					<div
-						class="d-flex my-2 p-3 mx-2 align-items-center"
-						style="border-radius: 8px; background-color: #f2f2f2"
-						v-for="(v, i) in applyAuditList"
-						:key="i">
-						<div class="w-80px d-flex justify-content-center me-2">
-							<VbSymbol
-								class="position-relative m-1"
-								:size="50"
-								shape="circle"
-								:src="formatUrl(v.avatar)"
-								:text="v.name"></VbSymbol>
-						</div>
-						<div class="w-100 d-flex flex-column">
-							<span class="d-flex align-items-center">
-								<span class="me-2">{{ v.name }}</span>
-								<el-tag v-if="v.auditStatus == '0'">待审核</el-tag>
-								<el-tag
-									type="success"
-									v-else-if="v.auditStatus == '1' && activity.needCost == '1' && v.cost > 0">
-									付费:{{ v.cost }}
-								</el-tag>
-								<el-tag
-									type="danger"
-									v-else-if="v.auditStatus == '1' && activity.needCost == '1' && v.cost <= 0">
-									未付费
-								</el-tag>
-								<el-tag type="success" v-else-if="v.auditStatus == '1'">已审核</el-tag>
-								<el-tag type="danger" v-else-if="v.auditStatus == '2'">已拒绝</el-tag>
-							</span>
-							<span class="my-1">{{ v.createTime }}</span>
-						</div>
-						<div
-							v-if="activity.isClose == '0'"
-							class="d-flex w-80px pe-2 flex-column justify-content-around">
-							<el-button
-								type="primary"
-								size="small"
-								class="my-1 mx-0 w-100"
-								@click="handleApllyAudit(v, '1')"
-								v-if="v.auditStatus != '1'">
-								通过
-							</el-button>
-							<el-button
-								type="danger"
-								size="small"
-								class="my-1 mx-0 w-100"
-								@click="handleApllyAudit(v, '2')"
-								v-if="v.auditStatus != '2'">
-								拒绝
-							</el-button>
-							<el-button
-								type="success"
-								size="small"
-								class="my-1 mx-0 w-100"
-								@click="handleApllyCost(v)"
-								v-if="activity.needCost == '1' && v.auditStatus == '1'">
-								付费
-							</el-button>
-						</div>
-					</div>
+				<div class="w-100 px-10">
+					<div v-if="applyAuditList.length">人员数量:{{ applyAuditList.length }} 人</div>
+					<el-row :gutter="20" class="apply-detail">
+						<el-col :span="8" class="justify-content-center">
+							<vb-select
+								v-model="applyAudit"
+								type="radio"
+								@change="handleQueryApply"
+								:data="[
+									{ label: '全部', value: '' },
+									{ label: '未审核', value: '0' },
+									{ label: '已审核', value: '1' }
+								]"></vb-select>
+						</el-col>
+						<el-col :span="8" class="justify-content-center">
+							<vb-select
+								v-model="applyCost"
+								type="radio"
+								@change="handleQueryApply"
+								:data="[
+									{ label: '全部', value: '' },
+									{ label: '未付费', value: '0' },
+									{ label: '已付费', value: '1' }
+								]"></vb-select>
+						</el-col>
+						<el-col :span="8" class="justify-content-center">
+							<vb-select
+								v-model="applyAttend"
+								type="radio"
+								@change="handleQueryApply"
+								:data="[
+									{ label: '全部', value: '' },
+									{ label: '未签到', value: '0' },
+									{ label: '已签到', value: '1' }
+								]"></vb-select>
+						</el-col>
+					</el-row>
+					<el-row :gutter="15">
+						<el-col :span="12" class="p-2" v-for="(v, i) in applyAuditList" :key="i">
+							<div
+								class="d-flex align-items-center p-2"
+								style="border-radius: 8px; background-color: #f2f2f2">
+								<div class="w-80px d-flex justify-content-center me-2">
+									<VbSymbol
+										class="position-relative m-1"
+										:size="50"
+										shape="circle"
+										:src="formatUrl(v.avatar)"
+										:text="v.name"></VbSymbol>
+								</div>
+								<div class="w-100 d-flex flex-column">
+									<span class="d-flex align-items-center">
+										<span class="me-2">{{ v.name }}</span>
+										<el-tag v-if="v.auditStatus == '0'">待审核</el-tag>
+										<template v-else-if="v.auditStatus == '1'">
+											<el-tag type="success" v-if="activity.needCost == '1' && v.costStatus == '1'">
+												付费:{{ v.cost }}
+											</el-tag>
+											<el-tag
+												type="danger"
+												v-else-if="activity.needCost == '1' && v.costStatus == '0'">
+												未付费
+											</el-tag>
+											<el-tag type="success" v-else>已审核</el-tag>
+											<el-tag type="success" class="ms-1" v-if="v.isAttend == '1'">已签到</el-tag>
+										</template>
+
+										<el-tag type="danger" v-else-if="v.auditStatus == '2'">已拒绝</el-tag>
+									</span>
+									<span class="my-1">{{ v.createTime }}</span>
+								</div>
+								<div
+									v-if="activity.isClose == '0'"
+									class="d-flex w-80px pe-2 flex-column justify-content-around">
+									<el-button
+										type="primary"
+										size="small"
+										class="my-1 mx-0 w-100"
+										@click="handleApllyAudit(v, '1')"
+										v-if="v.auditStatus != '1'">
+										通过
+									</el-button>
+									<el-button
+										type="danger"
+										size="small"
+										class="my-1 mx-0 w-100"
+										@click="handleApllyAudit(v, '2')"
+										v-if="v.auditStatus != '2'">
+										拒绝
+									</el-button>
+									<el-button
+										type="success"
+										size="small"
+										class="my-1 mx-0 w-100"
+										@click="handleApllyCost(v)"
+										v-if="activity.needCost == '1' && v.auditStatus == '1'">
+										付费
+									</el-button>
+								</div>
+							</div>
+						</el-col>
+					</el-row>
 				</div>
 			</template>
 		</VbModal>
 	</div>
 </template>
+
+<style>
+.apply-detail .el-radio {
+	margin-right: 12px;
+}
+</style>