Browse Source

Merge remote-tracking branch 'origin/dev_suwenjiang' into dev_suwenjiang

suwenjiang 2 months ago
parent
commit
857a9ef9cf
5 changed files with 122 additions and 5 deletions
  1. 1 0
      package.json
  2. 15 4
      pnpm-lock.yaml
  3. 1 1
      src/pages/scan/test/_index.vue
  4. 47 0
      src/pages/test/index.vue
  5. 58 0
      src/utils/sortStringToAZ.js

+ 1 - 0
package.json

@@ -23,6 +23,7 @@
     "html5-qrcode": "^2.3.8",
     "jsqr": "^1.4.0",
     "lodash-es": "^4.17.21",
+    "mockjs": "^1.1.0",
     "nuxt": "^3.13.0",
     "nuxt-swiper": "^2.0.0",
     "pinia": "^2.2.2",

+ 15 - 4
pnpm-lock.yaml

@@ -38,6 +38,9 @@ importers:
       lodash-es:
         specifier: ^4.17.21
         version: 4.17.21
+      mockjs:
+        specifier: ^1.1.0
+        version: 1.1.0
       nuxt:
         specifier: ^3.13.0
         version: 3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.4)(ioredis@5.4.1)(magicast@0.3.5)(rollup@4.22.5)(sass@1.79.4)(terser@5.34.1)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)(terser@5.34.1))
@@ -1575,18 +1578,18 @@ packages:
     resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==}
 
   commander@2.20.3:
-    resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+    resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==, tarball: https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz}
 
   commander@4.1.1:
-    resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
+    resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==, tarball: https://registry.npmmirror.com/commander/-/commander-4.1.1.tgz}
     engines: {node: '>= 6'}
 
   commander@7.2.0:
-    resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
+    resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==, tarball: https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz}
     engines: {node: '>= 10'}
 
   commander@8.3.0:
-    resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
+    resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==, tarball: https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz}
     engines: {node: '>= 12'}
 
   commondir@1.0.1:
@@ -2475,6 +2478,10 @@ packages:
   mlly@1.7.3:
     resolution: {integrity: sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==}
 
+  mockjs@1.1.0:
+    resolution: {integrity: sha512-eQsKcWzIaZzEZ07NuEyO4Nw65g0hdWAyurVol1IPl1gahRwY+svqzfgfey8U8dahLwG44d6/RwEzuK52rSa/JQ==, tarball: https://registry.npmmirror.com/mockjs/-/mockjs-1.1.0.tgz}
+    hasBin: true
+
   mri@1.2.0:
     resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
     engines: {node: '>=4'}
@@ -6342,6 +6349,10 @@ snapshots:
       pkg-types: 1.2.1
       ufo: 1.5.4
 
+  mockjs@1.1.0:
+    dependencies:
+      commander: 8.3.0
+
   mri@1.2.0: {}
 
   mrmime@2.0.0: {}

+ 1 - 1
src/pages/scan/_index.vue → src/pages/scan/test/_index.vue

@@ -175,7 +175,7 @@ onUnmounted(() => {
             accept="image/*"
             :multiple="false"
             :max-count="1"
-        ><img src="~/assets/img/scan/pic.png" height="32" width="32" alt=""/>
+        ><img src="../../../assets/img/scan/pic.png" height="32" width="32" alt=""/>
         </van-uploader>
       </div>
     </div>

+ 47 - 0
src/pages/test/index.vue

@@ -0,0 +1,47 @@
+<template>
+  <div>
+    <van-index-bar :index-list="sortStringToAZ.sortIndex">
+      <template v-for="item in list">
+        <van-index-anchor :index="item[0]" />
+        <template v-for="o in item[1]">
+          <van-cell :title="o.userInfo.name" />
+        </template>
+      </template>
+    </van-index-bar>
+  </div>
+</template>
+<script setup>
+import Mock from 'mockjs'
+
+const list = ref(new Map([]));
+const initData = async () => {
+  try {
+    const {originalData} = Mock.mock({
+      'originalData|100': [
+        {
+          userInfo: {
+            'name|1': '@cname'
+          }
+        }
+      ]
+    })
+    originalData.push(...[
+      {name: '重庆'},
+      {name: ''},
+      {name: ' a2'},
+      {name: 'ddf'},
+      {name: '~'},
+    ])
+    const {sortListMap} = sortStringToAZ.sort(originalData, 'userInfo.name')
+
+    console.log(sortListMap, 'sortListMap')
+    list.value = sortListMap
+  } catch (e) {
+      console.log(e, 'ee')
+  }
+}
+onMounted(() => {
+  initData()
+})
+</script>
+<style scoped lang="scss"></style>

+ 58 - 0
src/utils/sortStringToAZ.js

@@ -0,0 +1,58 @@
+import {polyphonic} from "pinyin-pro";
+
+const sortIndex = [
+    'A', 'B', 'C', 'D', 'E',
+    'F', 'G', 'H', 'I', 'J',
+    'K', 'L', 'M', 'N', 'O',
+    'P', 'Q', 'R', 'S', 'T',
+    'U', 'V', 'W', 'X', 'Y', 'Z', '#'
+]
+const getNestedValue = (obj, path) => {
+    const keys = path.split('.');
+    let current = obj;
+
+    for (let key of keys) {
+        if (current && typeof current === 'object' && key in current) {
+            current = current[key];
+        } else {
+            return undefined;
+        }
+    }
+    return current;
+}
+const sort = (originalData = [], byString = 'label') => {
+    try {
+
+        const list = originalData.filter(o => !!getNestedValue(o, byString)).map(o => {
+            let indexLetter = polyphonic(getNestedValue(o, byString).substring(0, 1), {
+                toneType: 'none',
+                pattern: 'first'
+            }).join('').substring(0, 1).replace(/\s+/g, '').toLocaleUpperCase()
+            return {
+                ...o,
+                indexLetter: sortIndex.includes(indexLetter) ? indexLetter : '#'
+            }
+        })
+        list.sort((a, b) => {
+            const aValue = a.indexLetter === '#' ? 'ZZ' : a.indexLetter;
+            const bValue = a.indexLetter === '#' ? 'ZZ' : b.indexLetter;
+            return aValue.localeCompare(bValue);
+        });
+
+        const listMap = new Map([]);
+        sortIndex.forEach(o => {
+            listMap.set(o, list.filter(k => k.indexLetter === o))
+        })
+        return {
+            sortList: list,
+            sortListMap: listMap
+        }
+    } catch (e) {
+        console.log(e, 'sortStringToAZ')
+    }
+}
+
+export const sortStringToAZ = {
+    sortIndex,
+    sort
+}