wyling 3 år sedan
förälder
incheckning
d73dfbc6ef
100 ändrade filer med 16610 tillägg och 9267 borttagningar
  1. 9 2
      node_modules/yargs/locales/es.json
  2. 39 23
      node_modules/yargs/locales/fr.json
  3. 9 2
      node_modules/yargs/locales/hi.json
  4. 9 2
      node_modules/yargs/locales/hu.json
  5. 9 2
      node_modules/yargs/locales/id.json
  6. 9 2
      node_modules/yargs/locales/it.json
  7. 15 6
      node_modules/yargs/locales/ja.json
  8. 9 2
      node_modules/yargs/locales/ko.json
  9. 9 2
      node_modules/yargs/locales/nb.json
  10. 9 2
      node_modules/yargs/locales/nl.json
  11. 9 4
      node_modules/yargs/locales/nn.json
  12. 9 2
      node_modules/yargs/locales/pl.json
  13. 9 2
      node_modules/yargs/locales/pt.json
  14. 8 2
      node_modules/yargs/locales/pt_BR.json
  15. 9 2
      node_modules/yargs/locales/ru.json
  16. 9 2
      node_modules/yargs/locales/th.json
  17. 9 2
      node_modules/yargs/locales/tr.json
  18. 9 2
      node_modules/yargs/locales/zh_CN.json
  19. 9 2
      node_modules/yargs/locales/zh_TW.json
  20. 95 47
      node_modules/yargs/package.json
  21. 0 1215
      node_modules/yargs/yargs.js
  22. 16213 222
      package-lock.json
  23. 96 9
      package.json
  24. 0 171
      pages.json
  25. 0 250
      pages/browserecord/index.vue
  26. 0 108
      pages/cinema/cinemalist.vue
  27. 0 36
      pages/cinema/citylist.vue
  28. 0 345
      pages/cinema/orderdes.vue
  29. 0 490
      pages/cinema/placeorder.vue
  30. 0 335
      pages/cinema/schedulelist.vue
  31. 0 319
      pages/cinema/selectseat.vue
  32. 0 250
      pages/collectionList/index.vue
  33. 0 41
      pages/dianying/dianying.vue
  34. 0 449
      pages/index/components/applist.vue
  35. 0 414
      pages/index/components/cinema.vue
  36. 0 106
      pages/index/components/find/index.vue
  37. 0 439
      pages/index/components/home.vue
  38. 0 82
      pages/index/components/login.vue
  39. 0 299
      pages/index/components/topic/index.vue
  40. 0 288
      pages/index/components/user.vue
  41. 0 143
      pages/index/index.vue
  42. 0 438
      pages/question/mockExam.vue
  43. 0 434
      pages/question/random.vue
  44. 0 477
      pages/question/sequential.vue
  45. 0 431
      pages/question/wrongTitle.vue
  46. 0 134
      pages/user/order.vue
  47. 0 118
      pages/userset/index.vue
  48. 0 20
      pages/webview/webview.vue
  49. BIN
      static/.DS_Store
  50. BIN
      static/imgs/banner.png
  51. BIN
      static/imgs/bf.png
  52. BIN
      static/imgs/bg.png
  53. BIN
      static/imgs/bgbzicon.png
  54. BIN
      static/imgs/bxh.png
  55. BIN
      static/imgs/ctsc.png
  56. BIN
      static/imgs/fx.png
  57. BIN
      static/imgs/fxh.png
  58. BIN
      static/imgs/gd.png
  59. BIN
      static/imgs/jx.png
  60. BIN
      static/imgs/llzj.png
  61. BIN
      static/imgs/lxkf.png
  62. BIN
      static/imgs/mockicon.png
  63. BIN
      static/imgs/order-icon.png
  64. BIN
      static/imgs/sc.png
  65. BIN
      static/imgs/sequentialicon.png
  66. BIN
      static/imgs/share.png
  67. BIN
      static/imgs/shmr.png
  68. BIN
      static/imgs/sjcs.png
  69. BIN
      static/imgs/sq.png
  70. BIN
      static/imgs/sz.png
  71. BIN
      static/imgs/true.png
  72. BIN
      static/imgs/wd.png
  73. BIN
      static/imgs/wdh.png
  74. BIN
      static/imgs/wdsc.png
  75. BIN
      static/imgs/wdsz.png
  76. BIN
      static/imgs/wxtb.png
  77. BIN
      static/imgs/wyjs.png
  78. BIN
      static/imgs/yjfk.png
  79. BIN
      static/imgs/ysc.png
  80. BIN
      static/imgs/zf.png
  81. BIN
      static/imgs/zt.png
  82. BIN
      static/imgs/zth.png
  83. BIN
      static/imgs/zz.png
  84. BIN
      static/logo.png
  85. 0 10
      store/getters.js
  86. 0 17
      store/index.js
  87. 0 30
      store/modules/cinema.js
  88. 0 101
      store/modules/user.js
  89. 0 76
      uni.scss
  90. 0 2
      uni_modules/uni-badge/changelog.md
  91. 0 156
      uni_modules/uni-badge/components/uni-badge/uni-badge.vue
  92. 0 83
      uni_modules/uni-badge/package.json
  93. 0 43
      uni_modules/uni-badge/readme.md
  94. 0 2
      uni_modules/uni-grid/changelog.md
  95. 0 127
      uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.vue
  96. 0 141
      uni_modules/uni-grid/components/uni-grid/uni-grid.vue
  97. 0 82
      uni_modules/uni-grid/package.json
  98. 0 88
      uni_modules/uni-grid/readme.md
  99. 0 2
      uni_modules/uni-icons/changelog.md
  100. 0 132
      uni_modules/uni-icons/components/uni-icons/icons.js

+ 9 - 2
node_modules/yargs/locales/es.json

@@ -8,12 +8,19 @@
   "number": "número",
   "array": "tabla",
   "required": "requerido",
+  "default": "defecto",
   "default:": "defecto:",
   "choices:": "selección:",
   "aliases:": "alias:",
   "generated-value": "valor-generado",
-  "Not enough non-option arguments: got %s, need at least %s": "Hacen falta argumentos no-opcionales: Número recibido %s, necesita por lo menos %s",
-  "Too many non-option arguments: got %s, maximum of %s": "Demasiados argumentos no-opcionales: Número recibido %s, máximo es %s",
+  "Not enough non-option arguments: got %s, need at least %s": {
+    "one": "Hacen falta argumentos no-opcionales: Número recibido %s, necesita por lo menos %s",
+    "other": "Hacen falta argumentos no-opcionales: Número recibido %s, necesita por lo menos %s"
+  },
+  "Too many non-option arguments: got %s, maximum of %s": {
+    "one": "Demasiados argumentos no-opcionales: Número recibido %s, máximo es %s",
+    "other": "Demasiados argumentos no-opcionales: Número recibido %s, máximo es %s"
+  },
   "Missing argument value: %s": {
     "one": "Falta argumento: %s",
     "other": "Faltan argumentos: %s"

+ 39 - 23
node_modules/yargs/locales/fr.json

@@ -1,37 +1,53 @@
 {
-  "Commands:": "Commandes:",
-  "Options:": "Options:",
-  "Examples:": "Exemples:",
+  "Commands:": "Commandes :",
+  "Options:": "Options :",
+  "Examples:": "Exemples :",
   "boolean": "booléen",
-  "count": "comptage",
-  "string": "chaine de caractère",
+  "count": "compteur",
+  "string": "chaîne de caractères",
   "number": "nombre",
   "array": "tableau",
   "required": "requis",
-  "default:": "défaut:",
-  "choices:": "choix:",
+  "default": "défaut",
+  "default:": "défaut :",
+  "choices:": "choix :",
+  "aliases:": "alias :",
   "generated-value": "valeur générée",
-  "Not enough non-option arguments: got %s, need at least %s": "Pas assez d'arguments non-option: reçu %s, besoin d'au moins %s",
-  "Too many non-option arguments: got %s, maximum of %s": "Trop d'arguments non-option: reçu %s, maximum %s",
+  "Not enough non-option arguments: got %s, need at least %s": {
+    "one": "Pas assez d'arguments (hors options) : reçu %s, besoin d'au moins %s",
+    "other": "Pas assez d'arguments (hors options) : reçus %s, besoin d'au moins %s"
+  },
+  "Too many non-option arguments: got %s, maximum of %s": {
+    "one": "Trop d'arguments (hors options) : reçu %s, maximum de %s",
+    "other": "Trop d'arguments (hors options) : reçus %s, maximum de %s"
+  },
   "Missing argument value: %s": {
-    "one": "Argument manquant: %s",
-    "other": "Arguments manquants: %s"
+    "one": "Argument manquant : %s",
+    "other": "Arguments manquants : %s"
   },
   "Missing required argument: %s": {
-    "one": "Argument requis manquant: %s",
-    "other": "Arguments requis manquants: %s"
+    "one": "Argument requis manquant : %s",
+    "other": "Arguments requis manquants : %s"
   },
   "Unknown argument: %s": {
-    "one": "Argument inconnu: %s",
-    "other": "Arguments inconnus: %s"
+    "one": "Argument inconnu : %s",
+    "other": "Arguments inconnus : %s"
+  },
+  "Unknown command: %s": {
+    "one": "Commande inconnue : %s",
+    "other": "Commandes inconnues : %s"
   },
-  "Invalid values:": "Valeurs invalides:",
-  "Argument: %s, Given: %s, Choices: %s": "Argument: %s, Donné: %s, Choix: %s",
-  "Argument check failed: %s": "Echec de la vérification de l'argument: %s",
-  "Implications failed:": "Arguments dépendants manquants:",
-  "Not enough arguments following: %s": "Pas assez d'arguments suivant: %s",
-  "Invalid JSON config file: %s": "Fichier de configuration JSON invalide: %s",
+  "Invalid values:": "Valeurs invalides :",
+  "Argument: %s, Given: %s, Choices: %s": "Argument : %s, donné : %s, choix : %s",
+  "Argument check failed: %s": "Echec de la vérification de l'argument : %s",
+  "Implications failed:": "Arguments dépendants manquants :",
+  "Not enough arguments following: %s": "Pas assez d'arguments après : %s",
+  "Invalid JSON config file: %s": "Fichier de configuration JSON invalide : %s",
   "Path to JSON config file": "Chemin du fichier de configuration JSON",
-  "Show help": "Affiche de l'aide",
-  "Show version number": "Affiche le numéro de version"
+  "Show help": "Affiche l'aide",
+  "Show version number": "Affiche le numéro de version",
+  "Did you mean %s?": "Vouliez-vous dire %s ?",
+  "Arguments %s and %s are mutually exclusive" : "Les arguments %s et %s sont mutuellement exclusifs",
+  "Positionals:": "Arguments positionnels :",
+  "command": "commande"
 }

+ 9 - 2
node_modules/yargs/locales/hi.json

@@ -8,12 +8,19 @@
   "number": "अंक",
   "array": "सरणी",
   "required": "आवश्यक",
+  "default": "डिफॉल्ट",
   "default:": "डिफॉल्ट:",
   "choices:": "विकल्प:",
   "aliases:": "उपनाम:",
   "generated-value": "उत्पन्न-मूल्य",
-  "Not enough non-option arguments: got %s, need at least %s": "पर्याप्त गैर-विकल्प तर्क प्राप्त नहीं: %s प्राप्त, कम से कम %s की आवश्यकता है",
-  "Too many non-option arguments: got %s, maximum of %s": "बहुत सारे गैर-विकल्प तर्क: %s प्राप्त, अधिकतम %s मान्य",
+  "Not enough non-option arguments: got %s, need at least %s": {
+    "one": "पर्याप्त गैर-विकल्प तर्क प्राप्त नहीं: %s प्राप्त, कम से कम %s की आवश्यकता है",
+    "other": "पर्याप्त गैर-विकल्प तर्क प्राप्त नहीं: %s प्राप्त, कम से कम %s की आवश्यकता है"
+  },
+  "Too many non-option arguments: got %s, maximum of %s": {
+    "one": "बहुत सारे गैर-विकल्प तर्क: %s प्राप्त, अधिकतम %s मान्य",
+    "other": "बहुत सारे गैर-विकल्प तर्क: %s प्राप्त, अधिकतम %s मान्य"
+  },
   "Missing argument value: %s": {
     "one": "कुछ तर्को के मूल्य गुम हैं: %s",
     "other": "कुछ तर्को के मूल्य गुम हैं: %s"

+ 9 - 2
node_modules/yargs/locales/hu.json

@@ -8,12 +8,19 @@
   "number": "szám",
   "array": "tömb",
   "required": "kötelező",
+  "default": "alapértelmezett",
   "default:": "alapértelmezett:",
   "choices:": "lehetőségek:",
   "aliases:": "aliaszok:",
   "generated-value": "generált-érték",
-  "Not enough non-option arguments: got %s, need at least %s": "Nincs elég nem opcionális argumentum: %s van, legalább %s kell",
-  "Too many non-option arguments: got %s, maximum of %s": "Túl sok nem opciánlis argumentum van: %s van, maximum %s lehet",
+  "Not enough non-option arguments: got %s, need at least %s": {
+    "one": "Nincs elég nem opcionális argumentum: %s van, legalább %s kell",
+    "other": "Nincs elég nem opcionális argumentum: %s van, legalább %s kell"
+  },
+  "Too many non-option arguments: got %s, maximum of %s": {
+    "one": "Túl sok nem opciánlis argumentum van: %s van, maximum %s lehet",
+    "other": "Túl sok nem opciánlis argumentum van: %s van, maximum %s lehet"
+  },
   "Missing argument value: %s": {
     "one": "Hiányzó argumentum érték: %s",
     "other": "Hiányzó argumentum értékek: %s"

+ 9 - 2
node_modules/yargs/locales/id.json

@@ -9,12 +9,19 @@
   "string": "string",
   "array": "larik",
   "required": "diperlukan",
+  "default": "bawaan",
   "default:": "bawaan:",
   "aliases:": "istilah lain:",
   "choices:": "pilihan:",
   "generated-value": "nilai-yang-dihasilkan",
-  "Not enough non-option arguments: got %s, need at least %s": "Argumen wajib kurang: hanya %s, minimal %s",
-  "Too many non-option arguments: got %s, maximum of %s": "Terlalu banyak argumen wajib: ada %s, maksimal %s",
+  "Not enough non-option arguments: got %s, need at least %s": {
+    "one": "Argumen wajib kurang: hanya %s, minimal %s",
+    "other": "Argumen wajib kurang: hanya %s, minimal %s"
+  },
+  "Too many non-option arguments: got %s, maximum of %s": {
+    "one": "Terlalu banyak argumen wajib: ada %s, maksimal %s",
+    "other": "Terlalu banyak argumen wajib: ada %s, maksimal %s"
+  },
   "Missing argument value: %s": {
     "one": "Kurang argumen: %s",
     "other": "Kurang argumen: %s"

+ 9 - 2
node_modules/yargs/locales/it.json

@@ -8,12 +8,19 @@
   "number": "numero",
   "array": "vettore",
   "required": "richiesto",
+  "default": "predefinito",
   "default:": "predefinito:",
   "choices:": "scelte:",
   "aliases:": "alias:",
   "generated-value": "valore generato",
-  "Not enough non-option arguments: got %s, need at least %s": "Numero insufficiente di argomenti non opzione: inseriti %s, richiesti almeno %s",
-  "Too many non-option arguments: got %s, maximum of %s": "Troppi argomenti non opzione: inseriti %s, massimo possibile %s",
+  "Not enough non-option arguments: got %s, need at least %s": {
+    "one": "Numero insufficiente di argomenti non opzione: inseriti %s, richiesti almeno %s",
+    "other": "Numero insufficiente di argomenti non opzione: inseriti %s, richiesti almeno %s"
+  },
+  "Too many non-option arguments: got %s, maximum of %s": {
+    "one": "Troppi argomenti non opzione: inseriti %s, massimo possibile %s",
+    "other": "Troppi argomenti non opzione: inseriti %s, massimo possibile %s"
+  },
   "Missing argument value: %s": {
     "one": "Argomento mancante: %s",
     "other": "Argomenti mancanti: %s"

+ 15 - 6
node_modules/yargs/locales/ja.json

@@ -8,15 +8,22 @@
   "number": "数値",
   "array": "配列",
   "required": "必須",
+  "default": "デフォルト",
   "default:": "デフォルト:",
   "choices:": "選択してください:",
   "aliases:": "エイリアス:",
   "generated-value": "生成された値",
-  "Not enough non-option arguments: got %s, need at least %s": "オプションではない引数が %s 個では不足しています。少なくとも %s 個の引数が必要です:",
-  "Too many non-option arguments: got %s, maximum of %s": "オプションではない引数が %s 個では多すぎます。最大で %s 個までです:",
+  "Not enough non-option arguments: got %s, need at least %s": {
+    "one": "オプションではない引数が %s 個では不足しています。少なくとも %s 個の引数が必要です:",
+    "other": "オプションではない引数が %s 個では不足しています。少なくとも %s 個の引数が必要です:"
+  },
+  "Too many non-option arguments: got %s, maximum of %s": {
+    "one": "オプションではない引数が %s 個では多すぎます。最大で %s 個までです:",
+    "other": "オプションではない引数が %s 個では多すぎます。最大で %s 個までです:"
+  },
   "Missing argument value: %s": {
-    "one": "引数が見つかりません: %s",
-    "other": "引数が見つかりません: %s"
+    "one": "引数の値が見つかりません: %s",
+    "other": "引数の値が見つかりません: %s"
   },
   "Missing required argument: %s": {
     "one": "必須の引数が見つかりません: %s",
@@ -27,7 +34,7 @@
     "other": "未知の引数です: %s"
   },
   "Invalid values:": "不正な値です:",
-  "Argument: %s, Given: %s, Choices: %s": "引数は %s です。指定できるのは %s つです。選択してください: %s",
+  "Argument: %s, Given: %s, Choices: %s": "引数は %s です。与えられた値: %s, 選択してください: %s",
   "Argument check failed: %s": "引数のチェックに失敗しました: %s",
   "Implications failed:": "オプションの組み合わせで不正が生じました:",
   "Not enough arguments following: %s": "次の引数が不足しています。: %s",
@@ -38,5 +45,7 @@
   "Did you mean %s?": "もしかして %s?",
   "Arguments %s and %s are mutually exclusive" : "引数 %s と %s は同時に指定できません",
   "Positionals:": "位置:",
-  "command": "コマンド"
+  "command": "コマンド",
+  "deprecated": "非推奨",
+  "deprecated: %s": "非推奨: %s"
 }

+ 9 - 2
node_modules/yargs/locales/ko.json

@@ -8,12 +8,19 @@
   "number": "숫자",
   "array": "배열",
   "required": "필수",
+  "default": "기본",
   "default:": "기본:",
   "choices:": "선택:",
   "aliases:": "별칭:",
   "generated-value": "생성된 값",
-  "Not enough non-option arguments: got %s, need at least %s": "옵션이 아닌 인자가 충분치 않습니다: %s개를 받았지만, 적어도 %s개는 필요합니다",
-  "Too many non-option arguments: got %s, maximum of %s": "옵션이 아닌 인자가 너무 많습니다: %s개를 받았지만, %s개 이하여야 합니다",
+  "Not enough non-option arguments: got %s, need at least %s": {
+    "one": "옵션이 아닌 인자가 충분치 않습니다: %s개를 받았지만, 적어도 %s개는 필요합니다",
+    "other": "옵션이 아닌 인자가 충분치 않습니다: %s개를 받았지만, 적어도 %s개는 필요합니다"
+  },
+  "Too many non-option arguments: got %s, maximum of %s": {
+    "one": "옵션이 아닌 인자가 너무 많습니다: %s개를 받았지만, %s개 이하여야 합니다",
+    "other": "옵션이 아닌 인자가 너무 많습니다: %s개를 받았지만, %s개 이하여야 합니다"
+  },
   "Missing argument value: %s": {
     "one": "인자값을 받지 못했습니다: %s",
     "other": "인자값들을 받지 못했습니다: %s"

+ 9 - 2
node_modules/yargs/locales/nb.json

@@ -8,11 +8,18 @@
   "number": "nummer",
   "array": "matrise",
   "required": "obligatorisk",
+  "default": "standard",
   "default:": "standard:",
   "choices:": "valg:",
   "generated-value": "generert-verdi",
-  "Not enough non-option arguments: got %s, need at least %s": "Ikke nok ikke-alternativ argumenter: fikk %s, trenger minst %s",
-  "Too many non-option arguments: got %s, maximum of %s": "For mange ikke-alternativ argumenter: fikk %s, maksimum %s",
+  "Not enough non-option arguments: got %s, need at least %s": {
+    "one": "Ikke nok ikke-alternativ argumenter: fikk %s, trenger minst %s",
+    "other": "Ikke nok ikke-alternativ argumenter: fikk %s, trenger minst %s"
+  },
+  "Too many non-option arguments: got %s, maximum of %s": {
+    "one": "For mange ikke-alternativ argumenter: fikk %s, maksimum %s",
+    "other": "For mange ikke-alternativ argumenter: fikk %s, maksimum %s"
+  },
   "Missing argument value: %s": {
     "one": "Mangler argument verdi: %s",
     "other": "Mangler argument verdier: %s"

+ 9 - 2
node_modules/yargs/locales/nl.json

@@ -8,12 +8,19 @@
   "number": "getal",
   "array": "lijst",
   "required": "verplicht",
+  "default": "standaard",
   "default:": "standaard:",
   "choices:": "keuzes:",
   "aliases:": "aliassen:",
   "generated-value": "gegenereerde waarde",
-  "Not enough non-option arguments: got %s, need at least %s": "Niet genoeg niet-optie-argumenten: %s gekregen, minstens %s nodig",
-  "Too many non-option arguments: got %s, maximum of %s": "Te veel niet-optie-argumenten: %s gekregen, maximum is %s",
+  "Not enough non-option arguments: got %s, need at least %s": {
+    "one": "Niet genoeg niet-optie-argumenten: %s gekregen, minstens %s nodig",
+    "other": "Niet genoeg niet-optie-argumenten: %s gekregen, minstens %s nodig"
+  },
+  "Too many non-option arguments: got %s, maximum of %s": {
+    "one": "Te veel niet-optie-argumenten: %s gekregen, maximum is %s",
+    "other": "Te veel niet-optie-argumenten: %s gekregen, maximum is %s"
+  },
   "Missing argument value: %s": {
     "one": "Missende argumentwaarde: %s",
     "other": "Missende argumentwaarden: %s"

+ 9 - 4
node_modules/yargs/locales/nn.json

@@ -8,13 +8,18 @@
   "number": "nummer",
   "array": "matrise",
   "required": "obligatorisk",
+  "default": "standard",
   "default:": "standard:",
   "choices:": "val:",
   "generated-value": "generert-verdi",
-  "Not enough non-option arguments: got %s, need at least %s":
-    "Ikkje nok ikkje-alternativ argument: fekk %s, treng minst %s",
-  "Too many non-option arguments: got %s, maximum of %s":
-    "For mange ikkje-alternativ argument: fekk %s, maksimum %s",
+  "Not enough non-option arguments: got %s, need at least %s": {
+    "one": "Ikkje nok ikkje-alternativ argument: fekk %s, treng minst %s",
+    "other": "Ikkje nok ikkje-alternativ argument: fekk %s, treng minst %s"
+  },
+  "Too many non-option arguments: got %s, maximum of %s": {
+    "one": "For mange ikkje-alternativ argument: fekk %s, maksimum %s",
+    "other": "For mange ikkje-alternativ argument: fekk %s, maksimum %s"
+  },
   "Missing argument value: %s": {
     "one": "Manglar argumentverdi: %s",
     "other": "Manglar argumentverdiar: %s"

+ 9 - 2
node_modules/yargs/locales/pl.json

@@ -8,12 +8,19 @@
   "number": "liczba",
   "array": "tablica",
   "required": "wymagany",
+  "default": "domyślny",
   "default:": "domyślny:",
   "choices:": "dostępne:",
   "aliases:": "aliasy:",
   "generated-value": "wygenerowana-wartość",
-  "Not enough non-option arguments: got %s, need at least %s": "Niewystarczająca ilość argumentów: otrzymano %s, wymagane co najmniej %s",
-  "Too many non-option arguments: got %s, maximum of %s": "Zbyt duża ilość argumentów: otrzymano %s, wymagane co najwyżej %s",
+  "Not enough non-option arguments: got %s, need at least %s": {
+    "one": "Niewystarczająca ilość argumentów: otrzymano %s, wymagane co najmniej %s",
+    "other": "Niewystarczająca ilość argumentów: otrzymano %s, wymagane co najmniej %s"
+  },
+  "Too many non-option arguments: got %s, maximum of %s": {
+    "one": "Zbyt duża ilość argumentów: otrzymano %s, wymagane co najwyżej %s",
+    "other": "Zbyt duża ilość argumentów: otrzymano %s, wymagane co najwyżej %s"
+  },
   "Missing argument value: %s": {
     "one": "Brak wartości dla argumentu: %s",
     "other": "Brak wartości dla argumentów: %s"

+ 9 - 2
node_modules/yargs/locales/pt.json

@@ -8,11 +8,18 @@
   "number": "número",
   "array": "arranjo",
   "required": "requerido",
+  "default": "padrão",
   "default:": "padrão:",
   "choices:": "escolhas:",
   "generated-value": "valor-gerado",
-  "Not enough non-option arguments: got %s, need at least %s": "Argumentos insuficientes não opcionais: Argumento %s, necessário pelo menos %s",
-  "Too many non-option arguments: got %s, maximum of %s": "Excesso de argumentos não opcionais: recebido %s, máximo de %s",
+  "Not enough non-option arguments: got %s, need at least %s": {
+    "one": "Argumentos insuficientes não opcionais: Argumento %s, necessário pelo menos %s",
+    "other": "Argumentos insuficientes não opcionais: Argumento %s, necessário pelo menos %s"
+  },
+  "Too many non-option arguments: got %s, maximum of %s": {
+    "one": "Excesso de argumentos não opcionais: recebido %s, máximo de %s",
+    "other": "Excesso de argumentos não opcionais: recebido %s, máximo de %s"
+  },
   "Missing argument value: %s": {
     "one": "Falta valor de argumento: %s",
     "other": "Falta valores de argumento: %s"

+ 8 - 2
node_modules/yargs/locales/pt_BR.json

@@ -12,8 +12,14 @@
   "choices:": "opções:",
   "aliases:": "sinônimos:",
   "generated-value": "valor-gerado",
-  "Not enough non-option arguments: got %s, need at least %s": "Argumentos insuficientes: Argumento %s, necessário pelo menos %s",
-  "Too many non-option arguments: got %s, maximum of %s": "Excesso de argumentos: recebido %s, máximo de %s",
+  "Not enough non-option arguments: got %s, need at least %s": {
+    "one": "Argumentos insuficientes: Argumento %s, necessário pelo menos %s",
+    "other": "Argumentos insuficientes: Argumento %s, necessário pelo menos %s"
+  },
+  "Too many non-option arguments: got %s, maximum of %s": {
+    "one": "Excesso de argumentos: recebido %s, máximo de %s",
+    "other": "Excesso de argumentos: recebido %s, máximo de %s"
+  },
   "Missing argument value: %s": {
     "one": "Falta valor de argumento: %s",
     "other": "Falta valores de argumento: %s"

+ 9 - 2
node_modules/yargs/locales/ru.json

@@ -8,12 +8,19 @@
   "number": "число",
   "array": "массив",
   "required": "необходимо",
+  "default": "по умолчанию",
   "default:": "по умолчанию:",
   "choices:": "возможности:",
   "aliases:": "алиасы:",
   "generated-value": "генерированное значение",
-  "Not enough non-option arguments: got %s, need at least %s": "Недостаточно неопционных аргументов: есть %s, нужно как минимум %s",
-  "Too many non-option arguments: got %s, maximum of %s": "Слишком много неопционных аргументов: есть %s, максимум допустимо %s",
+  "Not enough non-option arguments: got %s, need at least %s": {
+    "one": "Недостаточно неопционных аргументов: есть %s, нужно как минимум %s",
+    "other": "Недостаточно неопционных аргументов: есть %s, нужно как минимум %s"
+  },
+  "Too many non-option arguments: got %s, maximum of %s": {
+    "one": "Слишком много неопционных аргументов: есть %s, максимум допустимо %s",
+    "other": "Слишком много неопционных аргументов: есть %s, максимум допустимо %s"
+  },
   "Missing argument value: %s": {
     "one": "Не хватает значения аргумента: %s",
     "other": "Не хватает значений аргументов: %s"

+ 9 - 2
node_modules/yargs/locales/th.json

@@ -8,12 +8,19 @@
   "number": "ตัวเลข",
   "array": "อาเรย์",
   "required": "จำเป็น",
+  "default": "ค่าเริ่มต้",
   "default:": "ค่าเริ่มต้น",
   "choices:": "ตัวเลือก",
   "aliases:": "เอเลียส",
   "generated-value": "ค่าที่ถูกสร้างขึ้น",
-  "Not enough non-option arguments: got %s, need at least %s": "ใส่อาร์กิวเมนต์ไม่ครบตามจำนวนที่กำหนด: ใส่ค่ามาจำนวน %s ค่า, แต่ต้องการอย่างน้อย %s ค่า",
-  "Too many non-option arguments: got %s, maximum of %s": "ใส่อาร์กิวเมนต์เกินจำนวนที่กำหนด: ใส่ค่ามาจำนวน %s ค่า, แต่ต้องการมากที่สุด %s ค่า",
+  "Not enough non-option arguments: got %s, need at least %s": {
+    "one": "ใส่อาร์กิวเมนต์ไม่ครบตามจำนวนที่กำหนด: ใส่ค่ามาจำนวน %s ค่า, แต่ต้องการอย่างน้อย %s ค่า",
+    "other": "ใส่อาร์กิวเมนต์ไม่ครบตามจำนวนที่กำหนด: ใส่ค่ามาจำนวน %s ค่า, แต่ต้องการอย่างน้อย %s ค่า"
+  },
+  "Too many non-option arguments: got %s, maximum of %s": {
+    "one": "ใส่อาร์กิวเมนต์เกินจำนวนที่กำหนด: ใส่ค่ามาจำนวน %s ค่า, แต่ต้องการมากที่สุด %s ค่า",
+    "other": "ใส่อาร์กิวเมนต์เกินจำนวนที่กำหนด: ใส่ค่ามาจำนวน %s ค่า, แต่ต้องการมากที่สุด %s ค่า"
+  },
   "Missing argument value: %s": {
     "one": "ค่าอาร์กิวเมนต์ที่ขาดไป: %s",
     "other": "ค่าอาร์กิวเมนต์ที่ขาดไป: %s"

+ 9 - 2
node_modules/yargs/locales/tr.json

@@ -8,12 +8,19 @@
   "number": "numara",
   "array": "array",
   "required": "zorunlu",
+  "default": "varsayılan",
   "default:": "varsayılan:",
   "choices:": "seçimler:",
   "aliases:": "takma adlar:",
   "generated-value": "oluşturulan-değer",
-  "Not enough non-option arguments: got %s, need at least %s": "Seçenek dışı argümanlar yetersiz: %s bulundu, %s gerekli",
-  "Too many non-option arguments: got %s, maximum of %s": "Seçenek dışı argümanlar gereğinden fazla: %s bulundu, azami %s",
+  "Not enough non-option arguments: got %s, need at least %s": {
+    "one": "Seçenek dışı argümanlar yetersiz: %s bulundu, %s gerekli",
+    "other": "Seçenek dışı argümanlar yetersiz: %s bulundu, %s gerekli"
+  },
+  "Too many non-option arguments: got %s, maximum of %s": {
+    "one": "Seçenek dışı argümanlar gereğinden fazla: %s bulundu, azami %s",
+    "other": "Seçenek dışı argümanlar gereğinden fazla: %s bulundu, azami %s"
+  },
   "Missing argument value: %s": {
     "one": "Eksik argüman değeri: %s",
     "other": "Eksik argüman değerleri: %s"

+ 9 - 2
node_modules/yargs/locales/zh_CN.json

@@ -8,11 +8,18 @@
   "number": "数字",
   "array": "数组",
   "required": "必需",
+  "default": "默认值",
   "default:": "默认值:",
   "choices:": "可选值:",
   "generated-value": "生成的值",
-  "Not enough non-option arguments: got %s, need at least %s": "缺少 non-option 参数:传入了 %s 个, 至少需要 %s 个",
-  "Too many non-option arguments: got %s, maximum of %s": "non-option 参数过多:传入了 %s 个, 最大允许 %s 个",
+  "Not enough non-option arguments: got %s, need at least %s": {
+    "one": "缺少 non-option 参数:传入了 %s 个, 至少需要 %s 个",
+    "other": "缺少 non-option 参数:传入了 %s 个, 至少需要 %s 个"
+  },
+  "Too many non-option arguments: got %s, maximum of %s": {
+    "one": "non-option 参数过多:传入了 %s 个, 最大允许 %s 个",
+    "other": "non-option 参数过多:传入了 %s 个, 最大允许 %s 个"
+  },
   "Missing argument value: %s": {
     "one": "没有给此选项指定值:%s",
     "other": "没有给这些选项指定值:%s"

+ 9 - 2
node_modules/yargs/locales/zh_TW.json

@@ -8,12 +8,19 @@
   "number": "數字",
   "array": "陣列",
   "required": "必須",
+  "default": "預設值",
   "default:": "預設值:",
   "choices:": "可選值:",
   "aliases:": "別名:",
   "generated-value": "生成的值",
-  "Not enough non-option arguments: got %s, need at least %s": "non-option 引數不足:只傳入了 %s 個, 至少要 %s 個",
-  "Too many non-option arguments: got %s, maximum of %s": "non-option 引數過多:傳入了 %s 個, 但最多 %s 個",
+  "Not enough non-option arguments: got %s, need at least %s": {
+    "one": "non-option 引數不足:只傳入了 %s 個, 至少要 %s 個",
+    "other": "non-option 引數不足:只傳入了 %s 個, 至少要 %s 個"
+  },
+  "Too many non-option arguments: got %s, maximum of %s": {
+    "one": "non-option 引數過多:傳入了 %s 個, 但最多 %s 個",
+    "other": "non-option 引數過多:傳入了 %s 個, 但最多 %s 個"
+  },
   "Missing argument value: %s": {
     "one": "此引數無指定值:%s",
     "other": "這些引數無指定值:%s"

+ 95 - 47
node_modules/yargs/package.json

@@ -1,27 +1,31 @@
 {
-  "_from": "yargs@^13.2.4",
-  "_id": "yargs@13.3.2",
+  "_from": "yargs@^16.0.0",
+  "_id": "yargs@16.2.0",
   "_inBundle": false,
-  "_integrity": "sha1-rX/+/sGqWVZayRX4Lcyzipwxot0=",
+  "_integrity": "sha1-HIK/D2tqZur85+8w43b0mhJHf2Y=",
   "_location": "/yargs",
-  "_phantomChildren": {},
+  "_phantomChildren": {
+    "emoji-regex": "8.0.0",
+    "strip-ansi": "6.0.0",
+    "wrap-ansi": "7.0.0"
+  },
   "_requested": {
     "type": "range",
     "registry": true,
-    "raw": "yargs@^13.2.4",
+    "raw": "yargs@^16.0.0",
     "name": "yargs",
     "escapedName": "yargs",
-    "rawSpec": "^13.2.4",
+    "rawSpec": "^16.0.0",
     "saveSpec": null,
-    "fetchSpec": "^13.2.4"
+    "fetchSpec": "^16.0.0"
   },
   "_requiredBy": [
-    "/qrcode"
+    "/cli-highlight"
   ],
-  "_resolved": "https://registry.nlark.com/yargs/download/yargs-13.3.2.tgz?cache=0&sync_timestamp=1620086644940&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyargs%2Fdownload%2Fyargs-13.3.2.tgz",
-  "_shasum": "ad7ffefec1aa59565ac915f82dccb38a9c31a2dd",
-  "_spec": "yargs@^13.2.4",
-  "_where": "F:\\uniapp\\sqxp-uniapp\\node_modules\\qrcode",
+  "_resolved": "https://registry.nlark.com/yargs/download/yargs-16.2.0.tgz?cache=0&sync_timestamp=1620086465147&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyargs%2Fdownload%2Fyargs-16.2.0.tgz",
+  "_shasum": "1c82bf0f6b6a66eafce7ef30e376f49a12477f66",
+  "_spec": "yargs@^16.0.0",
+  "_where": "G:\\Code\\myUnipp\\vue2-jsshq\\node_modules\\cli-highlight",
   "bugs": {
     "url": "https://github.com/yargs/yargs/issues"
   },
@@ -33,46 +37,74 @@
     }
   ],
   "dependencies": {
-    "cliui": "^5.0.0",
-    "find-up": "^3.0.0",
-    "get-caller-file": "^2.0.1",
+    "cliui": "^7.0.2",
+    "escalade": "^3.1.1",
+    "get-caller-file": "^2.0.5",
     "require-directory": "^2.1.1",
-    "require-main-filename": "^2.0.0",
-    "set-blocking": "^2.0.0",
-    "string-width": "^3.0.0",
-    "which-module": "^2.0.0",
-    "y18n": "^4.0.0",
-    "yargs-parser": "^13.1.2"
+    "string-width": "^4.2.0",
+    "y18n": "^5.0.5",
+    "yargs-parser": "^20.2.2"
   },
   "deprecated": false,
   "description": "yargs the modern, pirate-themed, successor to optimist.",
   "devDependencies": {
+    "@types/chai": "^4.2.11",
+    "@types/mocha": "^8.0.0",
+    "@types/node": "^14.11.2",
+    "@wessberg/rollup-plugin-ts": "^1.3.2",
+    "c8": "^7.0.0",
     "chai": "^4.2.0",
-    "chalk": "^2.4.2",
-    "coveralls": "^3.0.3",
+    "chalk": "^4.0.0",
+    "coveralls": "^3.0.9",
     "cpr": "^3.0.1",
-    "cross-spawn": "^6.0.4",
-    "es6-promise": "^4.2.5",
+    "cross-env": "^7.0.2",
+    "cross-spawn": "^7.0.0",
+    "gts": "^3.0.0",
     "hashish": "0.0.4",
-    "mocha": "^5.2.0",
-    "nyc": "^14.1.0",
-    "rimraf": "^2.6.3",
-    "standard": "^12.0.1",
-    "standard-version": "^6.0.1",
-    "which": "^1.3.1",
+    "mocha": "^8.0.0",
+    "rimraf": "^3.0.2",
+    "rollup": "^2.23.0",
+    "rollup-plugin-cleanup": "^3.1.1",
+    "standardx": "^5.0.0",
+    "typescript": "^4.0.2",
+    "which": "^2.0.0",
     "yargs-test-extends": "^1.0.1"
   },
-  "engine": {
-    "node": ">=6"
+  "engines": {
+    "node": ">=10"
+  },
+  "exports": {
+    "./package.json": "./package.json",
+    ".": [
+      {
+        "import": "./index.mjs",
+        "require": "./index.cjs"
+      },
+      "./index.cjs"
+    ],
+    "./helpers": {
+      "import": "./helpers/helpers.mjs",
+      "require": "./helpers/index.js"
+    },
+    "./yargs": [
+      {
+        "require": "./yargs"
+      },
+      "./yargs"
+    ]
   },
   "files": [
-    "index.js",
-    "yargs.js",
-    "lib",
+    "browser.mjs",
+    "index.cjs",
+    "helpers/*.js",
+    "helpers/*",
+    "index.mjs",
+    "yargs",
+    "build",
     "locales",
-    "completion.sh.hbs",
-    "completion.zsh.hbs",
-    "LICENSE"
+    "LICENSE",
+    "lib/platform-shims/*.mjs",
+    "!*.d.ts"
   ],
   "homepage": "https://yargs.js.org/",
   "keywords": [
@@ -85,22 +117,38 @@
     "command"
   ],
   "license": "MIT",
-  "main": "./index.js",
+  "main": "./index.cjs",
+  "module": "./index.mjs",
   "name": "yargs",
   "repository": {
     "type": "git",
     "url": "git+https://github.com/yargs/yargs.git"
   },
   "scripts": {
-    "coverage": "nyc report --reporter=text-lcov | coveralls",
-    "pretest": "standard",
-    "release": "standard-version",
-    "test": "nyc --cache mocha --require ./test/before.js --timeout=12000 --check-leaks"
+    "build:cjs": "rollup -c rollup.config.cjs",
+    "check": "gts lint && npm run check:js",
+    "check:js": "standardx '**/*.mjs' && standardx '**/*.cjs' && standardx './*.mjs' && standardx './*.cjs'",
+    "clean": "gts clean",
+    "compile": "rimraf build && tsc",
+    "coverage": "c8 report --check-coverage",
+    "fix": "gts fix && npm run fix:js",
+    "fix:js": "standardx --fix '**/*.mjs' && standardx --fix '**/*.cjs' && standardx --fix './*.mjs' && standardx --fix './*.cjs'",
+    "postbuild:cjs": "rimraf ./build/index.cjs.d.ts",
+    "postcompile": "npm run build:cjs",
+    "posttest": "npm run check",
+    "prepare": "npm run compile",
+    "pretest": "npm run compile -- -p tsconfig.test.json && cross-env NODE_ENV=test npm run build:cjs",
+    "test": "c8 mocha ./test/*.cjs --require ./test/before.cjs --timeout=12000 --check-leaks",
+    "test:esm": "c8 mocha ./test/esm/*.mjs --check-leaks"
   },
-  "standard": {
+  "standardx": {
     "ignore": [
-      "**/example/**"
+      "build",
+      "helpers",
+      "**/example/**",
+      "**/platform-shims/esm.mjs"
     ]
   },
-  "version": "13.3.2"
+  "type": "module",
+  "version": "16.2.0"
 }

+ 0 - 1215
node_modules/yargs/yargs.js

@@ -1,1215 +0,0 @@
-'use strict'
-const argsert = require('./lib/argsert')
-const fs = require('fs')
-const Command = require('./lib/command')
-const Completion = require('./lib/completion')
-const Parser = require('yargs-parser')
-const path = require('path')
-const Usage = require('./lib/usage')
-const Validation = require('./lib/validation')
-const Y18n = require('y18n')
-const objFilter = require('./lib/obj-filter')
-const setBlocking = require('set-blocking')
-const applyExtends = require('./lib/apply-extends')
-const { globalMiddlewareFactory } = require('./lib/middleware')
-const YError = require('./lib/yerror')
-
-exports = module.exports = Yargs
-function Yargs (processArgs, cwd, parentRequire) {
-  processArgs = processArgs || [] // handle calling yargs().
-
-  const self = {}
-  let command = null
-  let completion = null
-  let groups = {}
-  let globalMiddleware = []
-  let output = ''
-  let preservedGroups = {}
-  let usage = null
-  let validation = null
-
-  const y18n = Y18n({
-    directory: path.resolve(__dirname, './locales'),
-    updateFiles: false
-  })
-
-  self.middleware = globalMiddlewareFactory(globalMiddleware, self)
-
-  if (!cwd) cwd = process.cwd()
-
-  self.scriptName = function scriptName (scriptName) {
-    self.$0 = scriptName
-    return self
-  }
-
-  // ignore the node bin, specify this in your
-  // bin file with #!/usr/bin/env node
-  if (/\b(node|iojs|electron)(\.exe)?$/.test(process.argv[0])) {
-    self.$0 = process.argv.slice(1, 2)
-  } else {
-    self.$0 = process.argv.slice(0, 1)
-  }
-
-  self.$0 = self.$0
-    .map((x, i) => {
-      const b = rebase(cwd, x)
-      return x.match(/^(\/|([a-zA-Z]:)?\\)/) && b.length < x.length ? b : x
-    })
-    .join(' ').trim()
-
-  if (process.env._ !== undefined && process.argv[1] === process.env._) {
-    self.$0 = process.env._.replace(
-      `${path.dirname(process.execPath)}/`, ''
-    )
-  }
-
-  // use context object to keep track of resets, subcommand execution, etc
-  // submodules should modify and check the state of context as necessary
-  const context = { resets: -1, commands: [], fullCommands: [], files: [] }
-  self.getContext = () => context
-
-  // puts yargs back into an initial state. any keys
-  // that have been set to "global" will not be reset
-  // by this action.
-  let options
-  self.resetOptions = self.reset = function resetOptions (aliases) {
-    context.resets++
-    aliases = aliases || {}
-    options = options || {}
-    // put yargs back into an initial state, this
-    // logic is used to build a nested command
-    // hierarchy.
-    const tmpOptions = {}
-    tmpOptions.local = options.local ? options.local : []
-    tmpOptions.configObjects = options.configObjects ? options.configObjects : []
-
-    // if a key has been explicitly set as local,
-    // we should reset it before passing options to command.
-    const localLookup = {}
-    tmpOptions.local.forEach((l) => {
-      localLookup[l] = true
-      ;(aliases[l] || []).forEach((a) => {
-        localLookup[a] = true
-      })
-    })
-
-    // preserve all groups not set to local.
-    preservedGroups = Object.keys(groups).reduce((acc, groupName) => {
-      const keys = groups[groupName].filter(key => !(key in localLookup))
-      if (keys.length > 0) {
-        acc[groupName] = keys
-      }
-      return acc
-    }, {})
-    // groups can now be reset
-    groups = {}
-
-    const arrayOptions = [
-      'array', 'boolean', 'string', 'skipValidation',
-      'count', 'normalize', 'number',
-      'hiddenOptions'
-    ]
-
-    const objectOptions = [
-      'narg', 'key', 'alias', 'default', 'defaultDescription',
-      'config', 'choices', 'demandedOptions', 'demandedCommands', 'coerce'
-    ]
-
-    arrayOptions.forEach((k) => {
-      tmpOptions[k] = (options[k] || []).filter(k => !localLookup[k])
-    })
-
-    objectOptions.forEach((k) => {
-      tmpOptions[k] = objFilter(options[k], (k, v) => !localLookup[k])
-    })
-
-    tmpOptions.envPrefix = options.envPrefix
-    options = tmpOptions
-
-    // if this is the first time being executed, create
-    // instances of all our helpers -- otherwise just reset.
-    usage = usage ? usage.reset(localLookup) : Usage(self, y18n)
-    validation = validation ? validation.reset(localLookup) : Validation(self, usage, y18n)
-    command = command ? command.reset() : Command(self, usage, validation, globalMiddleware)
-    if (!completion) completion = Completion(self, usage, command)
-
-    completionCommand = null
-    output = ''
-    exitError = null
-    hasOutput = false
-    self.parsed = false
-
-    return self
-  }
-  self.resetOptions()
-
-  // temporary hack: allow "freezing" of reset-able state for parse(msg, cb)
-  let frozen
-  function freeze () {
-    frozen = {}
-    frozen.options = options
-    frozen.configObjects = options.configObjects.slice(0)
-    frozen.exitProcess = exitProcess
-    frozen.groups = groups
-    usage.freeze()
-    validation.freeze()
-    command.freeze()
-    frozen.strict = strict
-    frozen.completionCommand = completionCommand
-    frozen.output = output
-    frozen.exitError = exitError
-    frozen.hasOutput = hasOutput
-    frozen.parsed = self.parsed
-  }
-  function unfreeze () {
-    options = frozen.options
-    options.configObjects = frozen.configObjects
-    exitProcess = frozen.exitProcess
-    groups = frozen.groups
-    output = frozen.output
-    exitError = frozen.exitError
-    hasOutput = frozen.hasOutput
-    self.parsed = frozen.parsed
-    usage.unfreeze()
-    validation.unfreeze()
-    command.unfreeze()
-    strict = frozen.strict
-    completionCommand = frozen.completionCommand
-    parseFn = null
-    parseContext = null
-    frozen = undefined
-  }
-
-  self.boolean = function (keys) {
-    argsert('<array|string>', [keys], arguments.length)
-    populateParserHintArray('boolean', keys)
-    return self
-  }
-
-  self.array = function (keys) {
-    argsert('<array|string>', [keys], arguments.length)
-    populateParserHintArray('array', keys)
-    return self
-  }
-
-  self.number = function (keys) {
-    argsert('<array|string>', [keys], arguments.length)
-    populateParserHintArray('number', keys)
-    return self
-  }
-
-  self.normalize = function (keys) {
-    argsert('<array|string>', [keys], arguments.length)
-    populateParserHintArray('normalize', keys)
-    return self
-  }
-
-  self.count = function (keys) {
-    argsert('<array|string>', [keys], arguments.length)
-    populateParserHintArray('count', keys)
-    return self
-  }
-
-  self.string = function (keys) {
-    argsert('<array|string>', [keys], arguments.length)
-    populateParserHintArray('string', keys)
-    return self
-  }
-
-  self.requiresArg = function (keys) {
-    argsert('<array|string>', [keys], arguments.length)
-    populateParserHintObject(self.nargs, false, 'narg', keys, 1)
-    return self
-  }
-
-  self.skipValidation = function (keys) {
-    argsert('<array|string>', [keys], arguments.length)
-    populateParserHintArray('skipValidation', keys)
-    return self
-  }
-
-  function populateParserHintArray (type, keys, value) {
-    keys = [].concat(keys)
-    keys.forEach((key) => {
-      key = sanitizeKey(key)
-      options[type].push(key)
-    })
-  }
-
-  self.nargs = function (key, value) {
-    argsert('<string|object|array> [number]', [key, value], arguments.length)
-    populateParserHintObject(self.nargs, false, 'narg', key, value)
-    return self
-  }
-
-  self.choices = function (key, value) {
-    argsert('<object|string|array> [string|array]', [key, value], arguments.length)
-    populateParserHintObject(self.choices, true, 'choices', key, value)
-    return self
-  }
-
-  self.alias = function (key, value) {
-    argsert('<object|string|array> [string|array]', [key, value], arguments.length)
-    populateParserHintObject(self.alias, true, 'alias', key, value)
-    return self
-  }
-
-  // TODO: actually deprecate self.defaults.
-  self.default = self.defaults = function (key, value, defaultDescription) {
-    argsert('<object|string|array> [*] [string]', [key, value, defaultDescription], arguments.length)
-    if (defaultDescription) options.defaultDescription[key] = defaultDescription
-    if (typeof value === 'function') {
-      if (!options.defaultDescription[key]) options.defaultDescription[key] = usage.functionDescription(value)
-      value = value.call()
-    }
-    populateParserHintObject(self.default, false, 'default', key, value)
-    return self
-  }
-
-  self.describe = function (key, desc) {
-    argsert('<object|string|array> [string]', [key, desc], arguments.length)
-    populateParserHintObject(self.describe, false, 'key', key, true)
-    usage.describe(key, desc)
-    return self
-  }
-
-  self.demandOption = function (keys, msg) {
-    argsert('<object|string|array> [string]', [keys, msg], arguments.length)
-    populateParserHintObject(self.demandOption, false, 'demandedOptions', keys, msg)
-    return self
-  }
-
-  self.coerce = function (keys, value) {
-    argsert('<object|string|array> [function]', [keys, value], arguments.length)
-    populateParserHintObject(self.coerce, false, 'coerce', keys, value)
-    return self
-  }
-
-  function populateParserHintObject (builder, isArray, type, key, value) {
-    if (Array.isArray(key)) {
-      const temp = Object.create(null)
-      // an array of keys with one value ['x', 'y', 'z'], function parse () {}
-      key.forEach((k) => {
-        temp[k] = value
-      })
-      builder(temp)
-    } else if (typeof key === 'object') {
-      // an object of key value pairs: {'x': parse () {}, 'y': parse() {}}
-      Object.keys(key).forEach((k) => {
-        builder(k, key[k])
-      })
-    } else {
-      key = sanitizeKey(key)
-      // a single key value pair 'x', parse() {}
-      if (isArray) {
-        options[type][key] = (options[type][key] || []).concat(value)
-      } else {
-        options[type][key] = value
-      }
-    }
-  }
-
-  // TODO(bcoe): in future major versions move more objects towards
-  // Object.create(null):
-  function sanitizeKey (key) {
-    if (key === '__proto__') return '___proto___'
-    return key
-  }
-
-  function deleteFromParserHintObject (optionKey) {
-    // delete from all parsing hints:
-    // boolean, array, key, alias, etc.
-    Object.keys(options).forEach((hintKey) => {
-      const hint = options[hintKey]
-      if (Array.isArray(hint)) {
-        if (~hint.indexOf(optionKey)) hint.splice(hint.indexOf(optionKey), 1)
-      } else if (typeof hint === 'object') {
-        delete hint[optionKey]
-      }
-    })
-    // now delete the description from usage.js.
-    delete usage.getDescriptions()[optionKey]
-  }
-
-  self.config = function config (key, msg, parseFn) {
-    argsert('[object|string] [string|function] [function]', [key, msg, parseFn], arguments.length)
-    // allow a config object to be provided directly.
-    if (typeof key === 'object') {
-      key = applyExtends(key, cwd)
-      options.configObjects = (options.configObjects || []).concat(key)
-      return self
-    }
-
-    // allow for a custom parsing function.
-    if (typeof msg === 'function') {
-      parseFn = msg
-      msg = null
-    }
-
-    key = key || 'config'
-    self.describe(key, msg || usage.deferY18nLookup('Path to JSON config file'))
-    ;(Array.isArray(key) ? key : [key]).forEach((k) => {
-      options.config[k] = parseFn || true
-    })
-
-    return self
-  }
-
-  self.example = function (cmd, description) {
-    argsert('<string> [string]', [cmd, description], arguments.length)
-    usage.example(cmd, description)
-    return self
-  }
-
-  self.command = function (cmd, description, builder, handler, middlewares) {
-    argsert('<string|array|object> [string|boolean] [function|object] [function] [array]', [cmd, description, builder, handler, middlewares], arguments.length)
-    command.addHandler(cmd, description, builder, handler, middlewares)
-    return self
-  }
-
-  self.commandDir = function (dir, opts) {
-    argsert('<string> [object]', [dir, opts], arguments.length)
-    const req = parentRequire || require
-    command.addDirectory(dir, self.getContext(), req, require('get-caller-file')(), opts)
-    return self
-  }
-
-  // TODO: deprecate self.demand in favor of
-  // .demandCommand() .demandOption().
-  self.demand = self.required = self.require = function demand (keys, max, msg) {
-    // you can optionally provide a 'max' key,
-    // which will raise an exception if too many '_'
-    // options are provided.
-    if (Array.isArray(max)) {
-      max.forEach((key) => {
-        self.demandOption(key, msg)
-      })
-      max = Infinity
-    } else if (typeof max !== 'number') {
-      msg = max
-      max = Infinity
-    }
-
-    if (typeof keys === 'number') {
-      self.demandCommand(keys, max, msg, msg)
-    } else if (Array.isArray(keys)) {
-      keys.forEach((key) => {
-        self.demandOption(key, msg)
-      })
-    } else {
-      if (typeof msg === 'string') {
-        self.demandOption(keys, msg)
-      } else if (msg === true || typeof msg === 'undefined') {
-        self.demandOption(keys)
-      }
-    }
-
-    return self
-  }
-
-  self.demandCommand = function demandCommand (min, max, minMsg, maxMsg) {
-    argsert('[number] [number|string] [string|null|undefined] [string|null|undefined]', [min, max, minMsg, maxMsg], arguments.length)
-
-    if (typeof min === 'undefined') min = 1
-
-    if (typeof max !== 'number') {
-      minMsg = max
-      max = Infinity
-    }
-
-    self.global('_', false)
-
-    options.demandedCommands._ = {
-      min,
-      max,
-      minMsg,
-      maxMsg
-    }
-
-    return self
-  }
-
-  self.getDemandedOptions = () => {
-    argsert([], 0)
-    return options.demandedOptions
-  }
-
-  self.getDemandedCommands = () => {
-    argsert([], 0)
-    return options.demandedCommands
-  }
-
-  self.implies = function (key, value) {
-    argsert('<string|object> [number|string|array]', [key, value], arguments.length)
-    validation.implies(key, value)
-    return self
-  }
-
-  self.conflicts = function (key1, key2) {
-    argsert('<string|object> [string|array]', [key1, key2], arguments.length)
-    validation.conflicts(key1, key2)
-    return self
-  }
-
-  self.usage = function (msg, description, builder, handler) {
-    argsert('<string|null|undefined> [string|boolean] [function|object] [function]', [msg, description, builder, handler], arguments.length)
-
-    if (description !== undefined) {
-      // .usage() can be used as an alias for defining
-      // a default command.
-      if ((msg || '').match(/^\$0( |$)/)) {
-        return self.command(msg, description, builder, handler)
-      } else {
-        throw new YError('.usage() description must start with $0 if being used as alias for .command()')
-      }
-    } else {
-      usage.usage(msg)
-      return self
-    }
-  }
-
-  self.epilogue = self.epilog = function (msg) {
-    argsert('<string>', [msg], arguments.length)
-    usage.epilog(msg)
-    return self
-  }
-
-  self.fail = function (f) {
-    argsert('<function>', [f], arguments.length)
-    usage.failFn(f)
-    return self
-  }
-
-  self.check = function (f, _global) {
-    argsert('<function> [boolean]', [f, _global], arguments.length)
-    validation.check(f, _global !== false)
-    return self
-  }
-
-  self.global = function global (globals, global) {
-    argsert('<string|array> [boolean]', [globals, global], arguments.length)
-    globals = [].concat(globals)
-    if (global !== false) {
-      options.local = options.local.filter(l => globals.indexOf(l) === -1)
-    } else {
-      globals.forEach((g) => {
-        if (options.local.indexOf(g) === -1) options.local.push(g)
-      })
-    }
-    return self
-  }
-
-  self.pkgConf = function pkgConf (key, rootPath) {
-    argsert('<string> [string]', [key, rootPath], arguments.length)
-    let conf = null
-    // prefer cwd to require-main-filename in this method
-    // since we're looking for e.g. "nyc" config in nyc consumer
-    // rather than "yargs" config in nyc (where nyc is the main filename)
-    const obj = pkgUp(rootPath || cwd)
-
-    // If an object exists in the key, add it to options.configObjects
-    if (obj[key] && typeof obj[key] === 'object') {
-      conf = applyExtends(obj[key], rootPath || cwd)
-      options.configObjects = (options.configObjects || []).concat(conf)
-    }
-
-    return self
-  }
-
-  const pkgs = {}
-  function pkgUp (rootPath) {
-    const npath = rootPath || '*'
-    if (pkgs[npath]) return pkgs[npath]
-    const findUp = require('find-up')
-
-    let obj = {}
-    try {
-      let startDir = rootPath || require('require-main-filename')(parentRequire || require)
-
-      // When called in an environment that lacks require.main.filename, such as a jest test runner,
-      // startDir is already process.cwd(), and should not be shortened.
-      // Whether or not it is _actually_ a directory (e.g., extensionless bin) is irrelevant, find-up handles it.
-      if (!rootPath && path.extname(startDir)) {
-        startDir = path.dirname(startDir)
-      }
-
-      const pkgJsonPath = findUp.sync('package.json', {
-        cwd: startDir
-      })
-      obj = JSON.parse(fs.readFileSync(pkgJsonPath))
-    } catch (noop) {}
-
-    pkgs[npath] = obj || {}
-    return pkgs[npath]
-  }
-
-  let parseFn = null
-  let parseContext = null
-  self.parse = function parse (args, shortCircuit, _parseFn) {
-    argsert('[string|array] [function|boolean|object] [function]', [args, shortCircuit, _parseFn], arguments.length)
-    if (typeof args === 'undefined') {
-      return self._parseArgs(processArgs)
-    }
-
-    // a context object can optionally be provided, this allows
-    // additional information to be passed to a command handler.
-    if (typeof shortCircuit === 'object') {
-      parseContext = shortCircuit
-      shortCircuit = _parseFn
-    }
-
-    // by providing a function as a second argument to
-    // parse you can capture output that would otherwise
-    // default to printing to stdout/stderr.
-    if (typeof shortCircuit === 'function') {
-      parseFn = shortCircuit
-      shortCircuit = null
-    }
-    // completion short-circuits the parsing process,
-    // skipping validation, etc.
-    if (!shortCircuit) processArgs = args
-
-    freeze()
-    if (parseFn) exitProcess = false
-
-    const parsed = self._parseArgs(args, shortCircuit)
-    if (parseFn) parseFn(exitError, parsed, output)
-    unfreeze()
-
-    return parsed
-  }
-
-  self._getParseContext = () => parseContext || {}
-
-  self._hasParseCallback = () => !!parseFn
-
-  self.option = self.options = function option (key, opt) {
-    argsert('<string|object> [object]', [key, opt], arguments.length)
-    if (typeof key === 'object') {
-      Object.keys(key).forEach((k) => {
-        self.options(k, key[k])
-      })
-    } else {
-      if (typeof opt !== 'object') {
-        opt = {}
-      }
-
-      options.key[key] = true // track manually set keys.
-
-      if (opt.alias) self.alias(key, opt.alias)
-
-      const demand = opt.demand || opt.required || opt.require
-
-      // deprecated, use 'demandOption' instead
-      if (demand) {
-        self.demand(key, demand)
-      }
-
-      if (opt.demandOption) {
-        self.demandOption(key, typeof opt.demandOption === 'string' ? opt.demandOption : undefined)
-      }
-
-      if ('conflicts' in opt) {
-        self.conflicts(key, opt.conflicts)
-      }
-
-      if ('default' in opt) {
-        self.default(key, opt.default)
-      }
-
-      if ('implies' in opt) {
-        self.implies(key, opt.implies)
-      }
-
-      if ('nargs' in opt) {
-        self.nargs(key, opt.nargs)
-      }
-
-      if (opt.config) {
-        self.config(key, opt.configParser)
-      }
-
-      if (opt.normalize) {
-        self.normalize(key)
-      }
-
-      if ('choices' in opt) {
-        self.choices(key, opt.choices)
-      }
-
-      if ('coerce' in opt) {
-        self.coerce(key, opt.coerce)
-      }
-
-      if ('group' in opt) {
-        self.group(key, opt.group)
-      }
-
-      if (opt.boolean || opt.type === 'boolean') {
-        self.boolean(key)
-        if (opt.alias) self.boolean(opt.alias)
-      }
-
-      if (opt.array || opt.type === 'array') {
-        self.array(key)
-        if (opt.alias) self.array(opt.alias)
-      }
-
-      if (opt.number || opt.type === 'number') {
-        self.number(key)
-        if (opt.alias) self.number(opt.alias)
-      }
-
-      if (opt.string || opt.type === 'string') {
-        self.string(key)
-        if (opt.alias) self.string(opt.alias)
-      }
-
-      if (opt.count || opt.type === 'count') {
-        self.count(key)
-      }
-
-      if (typeof opt.global === 'boolean') {
-        self.global(key, opt.global)
-      }
-
-      if (opt.defaultDescription) {
-        options.defaultDescription[key] = opt.defaultDescription
-      }
-
-      if (opt.skipValidation) {
-        self.skipValidation(key)
-      }
-
-      const desc = opt.describe || opt.description || opt.desc
-      self.describe(key, desc)
-      if (opt.hidden) {
-        self.hide(key)
-      }
-
-      if (opt.requiresArg) {
-        self.requiresArg(key)
-      }
-    }
-
-    return self
-  }
-  self.getOptions = () => options
-
-  self.positional = function (key, opts) {
-    argsert('<string> <object>', [key, opts], arguments.length)
-    if (context.resets === 0) {
-      throw new YError(".positional() can only be called in a command's builder function")
-    }
-
-    // .positional() only supports a subset of the configuration
-    // options available to .option().
-    const supportedOpts = ['default', 'defaultDescription', 'implies', 'normalize',
-      'choices', 'conflicts', 'coerce', 'type', 'describe',
-      'desc', 'description', 'alias']
-    opts = objFilter(opts, (k, v) => {
-      let accept = supportedOpts.indexOf(k) !== -1
-      // type can be one of string|number|boolean.
-      if (k === 'type' && ['string', 'number', 'boolean'].indexOf(v) === -1) accept = false
-      return accept
-    })
-
-    // copy over any settings that can be inferred from the command string.
-    const fullCommand = context.fullCommands[context.fullCommands.length - 1]
-    const parseOptions = fullCommand ? command.cmdToParseOptions(fullCommand) : {
-      array: [],
-      alias: {},
-      default: {},
-      demand: {}
-    }
-    Object.keys(parseOptions).forEach((pk) => {
-      if (Array.isArray(parseOptions[pk])) {
-        if (parseOptions[pk].indexOf(key) !== -1) opts[pk] = true
-      } else {
-        if (parseOptions[pk][key] && !(pk in opts)) opts[pk] = parseOptions[pk][key]
-      }
-    })
-    self.group(key, usage.getPositionalGroupName())
-    return self.option(key, opts)
-  }
-
-  self.group = function group (opts, groupName) {
-    argsert('<string|array> <string>', [opts, groupName], arguments.length)
-    const existing = preservedGroups[groupName] || groups[groupName]
-    if (preservedGroups[groupName]) {
-      // we now only need to track this group name in groups.
-      delete preservedGroups[groupName]
-    }
-
-    const seen = {}
-    groups[groupName] = (existing || []).concat(opts).filter((key) => {
-      if (seen[key]) return false
-      return (seen[key] = true)
-    })
-    return self
-  }
-  // combine explicit and preserved groups. explicit groups should be first
-  self.getGroups = () => Object.assign({}, groups, preservedGroups)
-
-  // as long as options.envPrefix is not undefined,
-  // parser will apply env vars matching prefix to argv
-  self.env = function (prefix) {
-    argsert('[string|boolean]', [prefix], arguments.length)
-    if (prefix === false) options.envPrefix = undefined
-    else options.envPrefix = prefix || ''
-    return self
-  }
-
-  self.wrap = function (cols) {
-    argsert('<number|null|undefined>', [cols], arguments.length)
-    usage.wrap(cols)
-    return self
-  }
-
-  let strict = false
-  self.strict = function (enabled) {
-    argsert('[boolean]', [enabled], arguments.length)
-    strict = enabled !== false
-    return self
-  }
-  self.getStrict = () => strict
-
-  let parserConfig = {}
-  self.parserConfiguration = function parserConfiguration (config) {
-    argsert('<object>', [config], arguments.length)
-    parserConfig = config
-    return self
-  }
-  self.getParserConfiguration = () => parserConfig
-
-  self.showHelp = function (level) {
-    argsert('[string|function]', [level], arguments.length)
-    if (!self.parsed) self._parseArgs(processArgs) // run parser, if it has not already been executed.
-    if (command.hasDefaultCommand()) {
-      context.resets++ // override the restriction on top-level positoinals.
-      command.runDefaultBuilderOn(self, true)
-    }
-    usage.showHelp(level)
-    return self
-  }
-
-  let versionOpt = null
-  self.version = function version (opt, msg, ver) {
-    const defaultVersionOpt = 'version'
-    argsert('[boolean|string] [string] [string]', [opt, msg, ver], arguments.length)
-
-    // nuke the key previously configured
-    // to return version #.
-    if (versionOpt) {
-      deleteFromParserHintObject(versionOpt)
-      usage.version(undefined)
-      versionOpt = null
-    }
-
-    if (arguments.length === 0) {
-      ver = guessVersion()
-      opt = defaultVersionOpt
-    } else if (arguments.length === 1) {
-      if (opt === false) { // disable default 'version' key.
-        return self
-      }
-      ver = opt
-      opt = defaultVersionOpt
-    } else if (arguments.length === 2) {
-      ver = msg
-      msg = null
-    }
-
-    versionOpt = typeof opt === 'string' ? opt : defaultVersionOpt
-    msg = msg || usage.deferY18nLookup('Show version number')
-
-    usage.version(ver || undefined)
-    self.boolean(versionOpt)
-    self.describe(versionOpt, msg)
-    return self
-  }
-
-  function guessVersion () {
-    const obj = pkgUp()
-
-    return obj.version || 'unknown'
-  }
-
-  let helpOpt = null
-  self.addHelpOpt = self.help = function addHelpOpt (opt, msg) {
-    const defaultHelpOpt = 'help'
-    argsert('[string|boolean] [string]', [opt, msg], arguments.length)
-
-    // nuke the key previously configured
-    // to return help.
-    if (helpOpt) {
-      deleteFromParserHintObject(helpOpt)
-      helpOpt = null
-    }
-
-    if (arguments.length === 1) {
-      if (opt === false) return self
-    }
-
-    // use arguments, fallback to defaults for opt and msg
-    helpOpt = typeof opt === 'string' ? opt : defaultHelpOpt
-    self.boolean(helpOpt)
-    self.describe(helpOpt, msg || usage.deferY18nLookup('Show help'))
-    return self
-  }
-
-  const defaultShowHiddenOpt = 'show-hidden'
-  options.showHiddenOpt = defaultShowHiddenOpt
-  self.addShowHiddenOpt = self.showHidden = function addShowHiddenOpt (opt, msg) {
-    argsert('[string|boolean] [string]', [opt, msg], arguments.length)
-
-    if (arguments.length === 1) {
-      if (opt === false) return self
-    }
-
-    const showHiddenOpt = typeof opt === 'string' ? opt : defaultShowHiddenOpt
-    self.boolean(showHiddenOpt)
-    self.describe(showHiddenOpt, msg || usage.deferY18nLookup('Show hidden options'))
-    options.showHiddenOpt = showHiddenOpt
-    return self
-  }
-
-  self.hide = function hide (key) {
-    argsert('<string|object>', [key], arguments.length)
-    options.hiddenOptions.push(key)
-    return self
-  }
-
-  self.showHelpOnFail = function showHelpOnFail (enabled, message) {
-    argsert('[boolean|string] [string]', [enabled, message], arguments.length)
-    usage.showHelpOnFail(enabled, message)
-    return self
-  }
-
-  var exitProcess = true
-  self.exitProcess = function (enabled) {
-    argsert('[boolean]', [enabled], arguments.length)
-    if (typeof enabled !== 'boolean') {
-      enabled = true
-    }
-    exitProcess = enabled
-    return self
-  }
-  self.getExitProcess = () => exitProcess
-
-  var completionCommand = null
-  self.completion = function (cmd, desc, fn) {
-    argsert('[string] [string|boolean|function] [function]', [cmd, desc, fn], arguments.length)
-
-    // a function to execute when generating
-    // completions can be provided as the second
-    // or third argument to completion.
-    if (typeof desc === 'function') {
-      fn = desc
-      desc = null
-    }
-
-    // register the completion command.
-    completionCommand = cmd || 'completion'
-    if (!desc && desc !== false) {
-      desc = 'generate completion script'
-    }
-    self.command(completionCommand, desc)
-
-    // a function can be provided
-    if (fn) completion.registerFunction(fn)
-
-    return self
-  }
-
-  self.showCompletionScript = function ($0) {
-    argsert('[string]', [$0], arguments.length)
-    $0 = $0 || self.$0
-    _logger.log(completion.generateCompletionScript($0, completionCommand))
-    return self
-  }
-
-  self.getCompletion = function (args, done) {
-    argsert('<array> <function>', [args, done], arguments.length)
-    completion.getCompletion(args, done)
-  }
-
-  self.locale = function (locale) {
-    argsert('[string]', [locale], arguments.length)
-    if (arguments.length === 0) {
-      guessLocale()
-      return y18n.getLocale()
-    }
-    detectLocale = false
-    y18n.setLocale(locale)
-    return self
-  }
-
-  self.updateStrings = self.updateLocale = function (obj) {
-    argsert('<object>', [obj], arguments.length)
-    detectLocale = false
-    y18n.updateLocale(obj)
-    return self
-  }
-
-  let detectLocale = true
-  self.detectLocale = function (detect) {
-    argsert('<boolean>', [detect], arguments.length)
-    detectLocale = detect
-    return self
-  }
-  self.getDetectLocale = () => detectLocale
-
-  var hasOutput = false
-  var exitError = null
-  // maybe exit, always capture
-  // context about why we wanted to exit.
-  self.exit = (code, err) => {
-    hasOutput = true
-    exitError = err
-    if (exitProcess) process.exit(code)
-  }
-
-  // we use a custom logger that buffers output,
-  // so that we can print to non-CLIs, e.g., chat-bots.
-  const _logger = {
-    log () {
-      const args = []
-      for (let i = 0; i < arguments.length; i++) args.push(arguments[i])
-      if (!self._hasParseCallback()) console.log.apply(console, args)
-      hasOutput = true
-      if (output.length) output += '\n'
-      output += args.join(' ')
-    },
-    error () {
-      const args = []
-      for (let i = 0; i < arguments.length; i++) args.push(arguments[i])
-      if (!self._hasParseCallback()) console.error.apply(console, args)
-      hasOutput = true
-      if (output.length) output += '\n'
-      output += args.join(' ')
-    }
-  }
-  self._getLoggerInstance = () => _logger
-  // has yargs output an error our help
-  // message in the current execution context.
-  self._hasOutput = () => hasOutput
-
-  self._setHasOutput = () => {
-    hasOutput = true
-  }
-
-  let recommendCommands
-  self.recommendCommands = function (recommend) {
-    argsert('[boolean]', [recommend], arguments.length)
-    recommendCommands = typeof recommend === 'boolean' ? recommend : true
-    return self
-  }
-
-  self.getUsageInstance = () => usage
-
-  self.getValidationInstance = () => validation
-
-  self.getCommandInstance = () => command
-
-  self.terminalWidth = () => {
-    argsert([], 0)
-    return typeof process.stdout.columns !== 'undefined' ? process.stdout.columns : null
-  }
-
-  Object.defineProperty(self, 'argv', {
-    get: () => self._parseArgs(processArgs),
-    enumerable: true
-  })
-
-  self._parseArgs = function parseArgs (args, shortCircuit, _skipValidation, commandIndex) {
-    let skipValidation = !!_skipValidation
-    args = args || processArgs
-
-    options.__ = y18n.__
-    options.configuration = self.getParserConfiguration()
-
-    // Deprecated
-    let pkgConfig = pkgUp()['yargs']
-    if (pkgConfig) {
-      console.warn('Configuring yargs through package.json is deprecated and will be removed in the next major release, please use the JS API instead.')
-      options.configuration = Object.assign({}, pkgConfig, options.configuration)
-    }
-
-    const parsed = Parser.detailed(args, options)
-    let argv = parsed.argv
-    if (parseContext) argv = Object.assign({}, argv, parseContext)
-    const aliases = parsed.aliases
-
-    argv.$0 = self.$0
-    self.parsed = parsed
-
-    try {
-      guessLocale() // guess locale lazily, so that it can be turned off in chain.
-
-      // while building up the argv object, there
-      // are two passes through the parser. If completion
-      // is being performed short-circuit on the first pass.
-      if (shortCircuit) {
-        return argv
-      }
-
-      // if there's a handler associated with a
-      // command defer processing to it.
-      if (helpOpt) {
-        // consider any multi-char helpOpt alias as a valid help command
-        // unless all helpOpt aliases are single-char
-        // note that parsed.aliases is a normalized bidirectional map :)
-        const helpCmds = [helpOpt]
-          .concat(aliases[helpOpt] || [])
-          .filter(k => k.length > 1)
-        // check if help should trigger and strip it from _.
-        if (~helpCmds.indexOf(argv._[argv._.length - 1])) {
-          argv._.pop()
-          argv[helpOpt] = true
-        }
-      }
-
-      const handlerKeys = command.getCommands()
-      const requestCompletions = completion.completionKey in argv
-      const skipRecommendation = argv[helpOpt] || requestCompletions
-      const skipDefaultCommand = skipRecommendation && (handlerKeys.length > 1 || handlerKeys[0] !== '$0')
-
-      if (argv._.length) {
-        if (handlerKeys.length) {
-          let firstUnknownCommand
-          for (let i = (commandIndex || 0), cmd; argv._[i] !== undefined; i++) {
-            cmd = String(argv._[i])
-            if (~handlerKeys.indexOf(cmd) && cmd !== completionCommand) {
-              // commands are executed using a recursive algorithm that executes
-              // the deepest command first; we keep track of the position in the
-              // argv._ array that is currently being executed.
-              return command.runCommand(cmd, self, parsed, i + 1)
-            } else if (!firstUnknownCommand && cmd !== completionCommand) {
-              firstUnknownCommand = cmd
-              break
-            }
-          }
-
-          // run the default command, if defined
-          if (command.hasDefaultCommand() && !skipDefaultCommand) {
-            return command.runCommand(null, self, parsed)
-          }
-
-          // recommend a command if recommendCommands() has
-          // been enabled, and no commands were found to execute
-          if (recommendCommands && firstUnknownCommand && !skipRecommendation) {
-            validation.recommendCommands(firstUnknownCommand, handlerKeys)
-          }
-        }
-
-        // generate a completion script for adding to ~/.bashrc.
-        if (completionCommand && ~argv._.indexOf(completionCommand) && !requestCompletions) {
-          if (exitProcess) setBlocking(true)
-          self.showCompletionScript()
-          self.exit(0)
-        }
-      } else if (command.hasDefaultCommand() && !skipDefaultCommand) {
-        return command.runCommand(null, self, parsed)
-      }
-
-      // we must run completions first, a user might
-      // want to complete the --help or --version option.
-      if (requestCompletions) {
-        if (exitProcess) setBlocking(true)
-
-        // we allow for asynchronous completions,
-        // e.g., loading in a list of commands from an API.
-        const completionArgs = args.slice(args.indexOf(`--${completion.completionKey}`) + 1)
-        completion.getCompletion(completionArgs, (completions) => {
-          ;(completions || []).forEach((completion) => {
-            _logger.log(completion)
-          })
-
-          self.exit(0)
-        })
-        return argv
-      }
-
-      // Handle 'help' and 'version' options
-      // if we haven't already output help!
-      if (!hasOutput) {
-        Object.keys(argv).forEach((key) => {
-          if (key === helpOpt && argv[key]) {
-            if (exitProcess) setBlocking(true)
-
-            skipValidation = true
-            self.showHelp('log')
-            self.exit(0)
-          } else if (key === versionOpt && argv[key]) {
-            if (exitProcess) setBlocking(true)
-
-            skipValidation = true
-            usage.showVersion()
-            self.exit(0)
-          }
-        })
-      }
-
-      // Check if any of the options to skip validation were provided
-      if (!skipValidation && options.skipValidation.length > 0) {
-        skipValidation = Object.keys(argv).some(key => options.skipValidation.indexOf(key) >= 0 && argv[key] === true)
-      }
-
-      // If the help or version options where used and exitProcess is false,
-      // or if explicitly skipped, we won't run validations.
-      if (!skipValidation) {
-        if (parsed.error) throw new YError(parsed.error.message)
-
-        // if we're executed via bash completion, don't
-        // bother with validation.
-        if (!requestCompletions) {
-          self._runValidation(argv, aliases, {}, parsed.error)
-        }
-      }
-    } catch (err) {
-      if (err instanceof YError) usage.fail(err.message, err)
-      else throw err
-    }
-
-    return argv
-  }
-
-  self._runValidation = function runValidation (argv, aliases, positionalMap, parseErrors) {
-    if (parseErrors) throw new YError(parseErrors.message || parseErrors)
-    validation.nonOptionCount(argv)
-    validation.requiredArguments(argv)
-    if (strict) validation.unknownArguments(argv, aliases, positionalMap)
-    validation.customChecks(argv, aliases)
-    validation.limitedChoices(argv)
-    validation.implications(argv)
-    validation.conflicting(argv)
-  }
-
-  function guessLocale () {
-    if (!detectLocale) return
-
-    try {
-      const { env } = process
-      const locale = env.LC_ALL || env.LC_MESSAGES || env.LANG || env.LANGUAGE || 'en_US'
-      self.locale(locale.replace(/[.:].*/, ''))
-    } catch (err) {
-      // if we explode looking up locale just noop
-      // we'll keep using the default language 'en'.
-    }
-  }
-
-  // an app should almost always have --version and --help,
-  // if you *really* want to disable this use .help(false)/.version(false).
-  self.help()
-  self.version()
-
-  return self
-}
-
-// rebase an absolute path to a relative one with respect to a base directory
-// exported for tests
-exports.rebase = rebase
-function rebase (base, dir) {
-  return path.relative(base, dir)
-}

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 16213 - 222
package-lock.json


+ 96 - 9
package.json

@@ -1,18 +1,105 @@
 {
-  "name": "sqxp-uniapp",
-  "version": "1.0.0",
-  "description": "",
-  "main": "main.js",
+  "name": "vue2-jsshq",
+  "version": "0.1.0",
+  "private": true,
   "scripts": {
-    "test": "echo \"Error: no test specified\" && exit 1"
+    "serve": "npm run dev:h5",
+    "build": "npm run build:h5",
+    "build:app-plus": "cross-env NODE_ENV=production UNI_PLATFORM=app-plus vue-cli-service uni-build",
+    "build:custom": "cross-env NODE_ENV=production uniapp-cli custom",
+    "build:h5": "cross-env NODE_ENV=production UNI_PLATFORM=h5 vue-cli-service uni-build",
+    "build:mp-360": "cross-env NODE_ENV=production UNI_PLATFORM=mp-360 vue-cli-service uni-build",
+    "build:mp-alipay": "cross-env NODE_ENV=production UNI_PLATFORM=mp-alipay vue-cli-service uni-build",
+    "build:mp-baidu": "cross-env NODE_ENV=production UNI_PLATFORM=mp-baidu vue-cli-service uni-build",
+    "build:mp-kuaishou": "cross-env NODE_ENV=production UNI_PLATFORM=mp-kuaishou vue-cli-service uni-build",
+    "build:mp-qq": "cross-env NODE_ENV=production UNI_PLATFORM=mp-qq vue-cli-service uni-build",
+    "build:mp-toutiao": "cross-env NODE_ENV=production UNI_PLATFORM=mp-toutiao vue-cli-service uni-build",
+    "build:mp-weixin": "cross-env NODE_ENV=production UNI_PLATFORM=mp-weixin vue-cli-service uni-build --watch",
+    "build:quickapp-native": "cross-env NODE_ENV=production UNI_PLATFORM=quickapp-native vue-cli-service uni-build",
+    "build:quickapp-webview": "cross-env NODE_ENV=production UNI_PLATFORM=quickapp-webview vue-cli-service uni-build",
+    "build:quickapp-webview-huawei": "cross-env NODE_ENV=production UNI_PLATFORM=quickapp-webview-huawei vue-cli-service uni-build",
+    "build:quickapp-webview-union": "cross-env NODE_ENV=production UNI_PLATFORM=quickapp-webview-union vue-cli-service uni-build",
+    "dev:app-plus": "cross-env NODE_ENV=development UNI_PLATFORM=app-plus vue-cli-service uni-build --watch",
+    "dev:custom": "cross-env NODE_ENV=development uniapp-cli custom",
+    "dev:h5": "cross-env NODE_ENV=development UNI_PLATFORM=h5 vue-cli-service uni-serve",
+    "dev:mp-360": "cross-env NODE_ENV=development UNI_PLATFORM=mp-360 vue-cli-service uni-build --watch",
+    "dev:mp-alipay": "cross-env NODE_ENV=development UNI_PLATFORM=mp-alipay vue-cli-service uni-build --watch",
+    "dev:mp-baidu": "cross-env NODE_ENV=development UNI_PLATFORM=mp-baidu vue-cli-service uni-build --watch",
+    "dev:mp-kuaishou": "cross-env NODE_ENV=development UNI_PLATFORM=mp-kuaishou vue-cli-service uni-build --watch",
+    "dev:mp-qq": "cross-env NODE_ENV=development UNI_PLATFORM=mp-qq vue-cli-service uni-build --watch",
+    "dev:mp-toutiao": "cross-env NODE_ENV=development UNI_PLATFORM=mp-toutiao vue-cli-service uni-build --watch",
+    "dev:mp-weixin": "cross-env NODE_ENV=development UNI_PLATFORM=mp-weixin vue-cli-service uni-build --watch",
+    "dev:quickapp-native": "cross-env NODE_ENV=development UNI_PLATFORM=quickapp-native vue-cli-service uni-build --watch",
+    "dev:quickapp-webview": "cross-env NODE_ENV=development UNI_PLATFORM=quickapp-webview vue-cli-service uni-build --watch",
+    "dev:quickapp-webview-huawei": "cross-env NODE_ENV=development UNI_PLATFORM=quickapp-webview-huawei vue-cli-service uni-build --watch",
+    "dev:quickapp-webview-union": "cross-env NODE_ENV=development UNI_PLATFORM=quickapp-webview-union vue-cli-service uni-build --watch",
+    "info": "node node_modules/@dcloudio/vue-cli-plugin-uni/commands/info.js",
+    "serve:quickapp-native": "node node_modules/@dcloudio/uni-quickapp-native/bin/serve.js",
+    "test:android": "cross-env UNI_PLATFORM=app-plus UNI_OS_NAME=android jest -i",
+    "test:h5": "cross-env UNI_PLATFORM=h5 jest -i",
+    "test:ios": "cross-env UNI_PLATFORM=app-plus UNI_OS_NAME=ios jest -i",
+    "test:mp-baidu": "cross-env UNI_PLATFORM=mp-baidu jest -i",
+    "test:mp-weixin": "cross-env UNI_PLATFORM=mp-weixin jest -i"
   },
-  "keywords": [],
-  "author": "",
-  "license": "ISC",
   "dependencies": {
+    "@dcloudio/uni-app-plus": "^2.0.0-31920210514002",
+    "@dcloudio/uni-h5": "^2.0.0-31920210514002",
+    "@dcloudio/uni-helper-json": "*",
+    "@dcloudio/uni-i18n": "^2.0.0-31920210514002",
+    "@dcloudio/uni-mp-360": "^2.0.0-31920210514002",
+    "@dcloudio/uni-mp-alipay": "^2.0.0-31920210514002",
+    "@dcloudio/uni-mp-baidu": "^2.0.0-31920210514002",
+    "@dcloudio/uni-mp-kuaishou": "^2.0.0-31920210514002",
+    "@dcloudio/uni-mp-qq": "^2.0.0-31920210514002",
+    "@dcloudio/uni-mp-toutiao": "^2.0.0-31920210514002",
+    "@dcloudio/uni-mp-vue": "^2.0.0-31920210514002",
+    "@dcloudio/uni-mp-weixin": "^2.0.0-31920210514002",
+    "@dcloudio/uni-quickapp-native": "^2.0.0-31920210514002",
+    "@dcloudio/uni-quickapp-webview": "^2.0.0-31920210514002",
+    "@dcloudio/uni-stat": "^2.0.0-31920210514002",
+    "@vue/shared": "^3.0.0",
     "axios-miniprogram-adapter": "^0.3.2",
+    "axios-mock-adapter": "^1.19.0",
+    "core-js": "^3.6.5",
     "crypto-js": "^4.0.0",
+    "dayjs": "^1.10.5",
+    "flyio": "^0.6.2",
+    "mockjs": "^1.1.0",
+    "node-sass": "^4.14.1",
     "qrcode": "^1.4.4",
-    "qs": "^6.10.1"
+    "qs": "^6.10.1",
+    "regenerator-runtime": "^0.12.1",
+    "sass-loader": "^7.3.1",
+    "vue": "^2.6.11",
+    "vuex": "^3.2.0"
+  },
+  "devDependencies": {
+    "@babel/runtime": "~7.12.0",
+    "@dcloudio/types": "*",
+    "@dcloudio/uni-automator": "^2.0.0-31920210514002",
+    "@dcloudio/uni-cli-shared": "^2.0.0-31920210514002",
+    "@dcloudio/uni-migration": "^2.0.0-31920210514002",
+    "@dcloudio/uni-template-compiler": "^2.0.0-31920210514002",
+    "@dcloudio/vue-cli-plugin-hbuilderx": "^2.0.0-31920210514002",
+    "@dcloudio/vue-cli-plugin-uni": "^2.0.0-31920210514002",
+    "@dcloudio/vue-cli-plugin-uni-optimize": "^2.0.0-31920210514002",
+    "@dcloudio/webpack-uni-mp-loader": "^2.0.0-31920210514002",
+    "@dcloudio/webpack-uni-pages-loader": "^2.0.0-31920210514002",
+    "@vue/cli-plugin-babel": "~4.5.0",
+    "@vue/cli-service": "~4.5.0",
+    "babel-plugin-import": "^1.11.0",
+    "cross-env": "^7.0.2",
+    "jest": "^25.4.0",
+    "mini-types": "*",
+    "miniprogram-api-typings": "*",
+    "postcss-comment": "^2.0.0",
+    "vue-template-compiler": "^2.6.11"
+  },
+  "browserslist": [
+    "Android >= 4",
+    "ios >= 8"
+  ],
+  "uni-app": {
+    "scripts": {}
   }
 }

+ 0 - 171
pages.json

@@ -1,171 +0,0 @@
-{
-	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
-		{
-			"path": "pages/index/index",
-			"style": {
-				"navigationBarTitleText": "极速生活圈",
-				"navigationStyle": "custom",
-				"disableScroll": true
-			}
-		},
-		{
-			"path": "pages/userset/index",
-			"style": {
-				"navigationBarTitleText": "我的设置"
-			}
-		},
-		{
-			"path": "pages/collectionList/index",
-			"style": {
-				"navigationBarTitleText": "我的收藏"
-			}
-		},
-		{
-			"path": "pages/browserecord/index",
-			"style": {
-				"navigationBarTitleText": "浏览足迹"
-			}
-		},
-		{
-			"path": "pages/question/sequential",
-			"style": {
-				"navigationBarTitleText": "顺序测试",
-				"disableScroll": true
-			}
-		},
-		{
-			"path": "pages/question/random",
-			"style": {
-				"navigationBarTitleText": "随机测试",
-				"disableScroll": true
-			}
-		},
-		{
-			"path": "pages/question/wrongTitle",
-			"style": {
-				"navigationBarTitleText": "错题收藏",
-				"disableScroll": true
-			}
-		},
-		{
-			"path": "pages/question/mockExam",
-			"style": {
-				"navigationBarTitleText": "模拟考试",
-				"disableScroll": true
-			}
-		},
-		{
-			"path": "pages/webview/webview",
-			"style": {
-				"navigationBarTitleText": "",
-				"enablePullDownRefresh": false
-			}
-
-		},
-		{
-			"path": "pages/dianying/dianying",
-			"style": {
-				"navigationBarTitleText": "",
-				"enablePullDownRefresh": false
-			}
-
-		},
-		{
-			"path": "pages/cinema/cinemalist",
-			"style": {
-				"navigationBarTitleText": "影院列表",
-				"enablePullDownRefresh": false
-			}
-
-		},
-		{
-			"path": "pages/cinema/schedulelist",
-			"style": {
-				"navigationBarTitleText": "",
-				"enablePullDownRefresh": false,
-				"backgroundColor": "#ffffff"
-			}
-
-		}, {
-			"path": "pages/cinema/selectseat",
-			"style": {
-				"navigationBarTitleText": "",
-				"enablePullDownRefresh": false
-			}
-
-		}, {
-			"path": "pages/cinema/placeorder",
-			"style": {
-				"navigationBarTitleText": "付款",
-				"enablePullDownRefresh": false
-			}
-
-		}, {
-			"path": "pages/user/order",
-			"style": {
-				"navigationBarTitleText": "全部订单",
-				"enablePullDownRefresh": false
-			}
-
-		}, {
-			"path": "pages/cinema/orderdes",
-			"style": {
-				"navigationBarTitleText": "订单详情",
-				"enablePullDownRefresh": false
-			}
-
-		}, {
-			"path": "pages/cinema/citylist",
-			"style": {
-				"navigationBarTitleText": "选择城市",
-				"enablePullDownRefresh": false
-			}
-
-		}
-	],
-	"globalStyle": {
-		"navigationBarTextStyle": "black",
-		"navigationBarTitleText": "",
-		"navigationBarBackgroundColor": "#F8F8F8",
-		"backgroundColor": "#F8F8F8",
-		"usingComponents": {
-			"van-tabbar": "/wxcomponents/vant/tabbar/index",
-			"van-tabbar-item": "/wxcomponents/vant/tabbar-item/index",
-			"van-search": "/wxcomponents/vant/search/index",
-			"van-icon": "/wxcomponents/vant/icon/index",
-			"van-toast": "/wxcomponents/vant/toast/index",
-			"van-row": "/wxcomponents/vant/row/index",
-			"van-col": "/wxcomponents/vant/col/index",
-			"van-transition": "/wxcomponents/vant/transition/index",
-			"van-image": "/wxcomponents/vant/image/index",
-			"van-checkbox": "/wxcomponents/vant/checkbox/index",
-			"van-checkbox-group": "/wxcomponents/vant/checkbox-group/index",
-			"van-radio": "/wxcomponents/vant/radio/index",
-			"van-radio-group": "/wxcomponents/vant/radio-group/index",
-			"van-cell": "/wxcomponents/vant/cell/index",
-			"van-cell-group": "/wxcomponents/vant/cell-group/index",
-			"van-switch": "/wxcomponents/vant/switch/index",
-			"van-popup": "/wxcomponents/vant/popup/index",
-			"van-skeleton": "/wxcomponents/vant/skeleton/index",
-			"van-field": "/wxcomponents/vant/field/index",
-			"van-area": "/wxcomponents/vant/area/index",
-			"van-button": "/wxcomponents/vant/button/index",
-			"van-divider": "/wxcomponents/vant/divider/index",
-			"van-count-down": "/wxcomponents/vant/count-down/index",
-			"van-dialog": "/wxcomponents/vant/dialog/index",
-			"van-tab": "/wxcomponents/vant/tab/index",
-			"van-tabs": "/wxcomponents/vant/tabs/index",
-			"van-share-sheet": "/wxcomponents/vant/share-sheet/index",
-			"van-index-bar": "/wxcomponents/vant/index-bar/index",
-			"van-index-anchor": "/wxcomponents/vant/index-anchor/index"
-		}
-	},
-	"condition": { //模式配置,仅开发期间生效
-		"current": 0, //当前激活的模式(list 的索引项)
-		"list": [{
-			"name": "", //模式名称
-			"path": "", //启动页面,必选
-			"query": "" //启动参数,在页面的onLoad函数里面得到
-		}]
-	}
-}

+ 0 - 250
pages/browserecord/index.vue

@@ -1,250 +0,0 @@
-<template>
-	<view class="content">
-		<loadSke :loading='loading' :list='applist'>
-			<view class='list-item' v-for="(item, index) in applist" :key="index" @click="goMiniApp({appId:item.appletAddress},item)">
-				<image class="avatar" mode="aspectFill" :src="item.appletLogoFileUrl || '/static/imgs/shmr.png'">
-					<view class="item-right">
-						<view class="top">
-							<van-icon class="icon" name="/static/imgs/zf.png" size='14' />
-							<van-icon class="icon" name="/static/imgs/bxh.png" @tap.stop='delSc(index)' size='12' />
-						</view>
-						<view class="center">
-							<text class="details">{{item.appletIntroduce || '该商家暂无描述,敬请期待!'}}</text>
-						</view>
-						<view class="bottom">
-							<text class="title">{{item.corporateName}}</text>
-						</view>
-					</view>
-			</view>
-		</loadSke>
-	</view>
-
-</template>
-
-<script>
-	import loadSke from '@/components/skeleton/index/index.vue'
-	import {
-		getBrowseRecordInfoList,
-		BrowseRecordDel
-	} from '@/api/applist.js'
-	export default {
-		components:{
-			loadSke
-		},
-		data() {
-			return {
-				active: 0,
-				current: 0,
-				mode: 'round',
-				applist: {},
-				loading:true,
-				pageNum: 1,
-				pageSize: 10,
-				total: 1,
-			}
-		},
-		mounted() {
-			this.initAppList()
-		},
-		onReachBottom(){
-			if(this.total-this.pageNum*this.pageSize<=0){
-				return
-			}
-			this.pageNum++
-			getBrowseRecordInfoList({
-				pageNum: this.pageNum,
-				pageSize: this.pageSize
-			}).then(res => {
-				this.applist = this.applist.concat(res.rows)
-			})
-		},
-		methods: {
-			initAppList() {
-				getBrowseRecordInfoList({
-					pageNum: this.pageNum,
-					pageSize: this.pageSize
-				}).then(res => {
-					this.applist = res.rows
-					this.total = res.total
-					this.$nextTick(()=>{
-						this.loading=false
-					})
-				})
-			},
-			delSc(index) {
-				BrowseRecordDel(this.applist[index].id).then(res => {
-					if (res.code == 200) {
-						this.$set(this.applist[index], 'collectionStatus', '0')
-						this.Toast('取消收藏成功!');
-						delete this.applist.splice(index, 1)
-					}
-				})
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.content {
-		padding-bottom: 1rpx;
-	}
-
-	.swiper-box {
-		position: sticky;
-		top: 0px;
-		left: 0;
-		height: 422rpx;
-		z-index: 9;
-	}
-
-	.sticky-top {
-		position: sticky;
-		top: 192rpx;
-		left: 0;
-		margin: 30rpx 30rpx;
-		border-radius: 20rpx;
-		overflow: hidden;
-		background-color: #4fc08d;
-		z-index: 10;
-		display: flex;
-		justify-content: center;
-		align-items: center;
-		// border-top-left-radius: 14px;
-		// border-top-right-radius: 14px;
-		padding-right: 3%;
-
-		.top-search {
-			flex: 1;
-		}
-	}
-
-	.sticky {
-		position: sticky;
-		top: 295rpx;
-		left: 0;
-		background-color: #fff;
-		z-index: 9;
-		margin: 30rpx 30rpx;
-		border-radius: 20rpx;
-
-		.grid {
-			display: flex;
-			justify-content: space-between;
-			padding: 1% 2%;
-			margin-bottom: 2%;
-			border-bottom-left-radius: 10px;
-			border-bottom-right-radius: 10px;
-
-			.grid-item {
-				width: 50px;
-				height: 60px;
-				display: flex;
-				justify-content: center;
-				flex-direction: column;
-				align-items: center;
-				font-size: 12px;
-			}
-		}
-	}
-
-	.list-item {
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		background-color: #FFFFFF;
-		height: 170rpx;
-		padding: 34rpx 20rpx;
-		margin: 24rpx 30rpx;
-		border-radius: 20rpx;
-
-		.avatar {
-			flex-shrink: 0;
-			width: 161rpx;
-			height: 161rpx;
-			margin-right: 16rpx;
-		}
-
-		.item-right {
-			flex: 1;
-			display: flex;
-			flex-direction: column;
-			justify-content: space-between;
-			height: 200rpx;
-
-			.top {
-				.icon {
-					margin-top: -20rpx;
-					padding: 20rpx;
-				}
-
-				display: flex;
-				justify-content: flex-end;
-			}
-
-			.center {
-				align-self: flex-start;
-
-				.details {
-					width: 436rpx;
-					height: 70rpx;
-					font-size: 26rpx;
-					font-family: PingFang SC;
-					font-weight: 400;
-					color: #0F0404;
-					display: -webkit-box;
-					margin-bottom: 20rpx;
-					overflow: hidden;
-					text-overflow: ellipsis;
-					word-wrap: break-word;
-					white-space: normal !important;
-					-webkit-line-clamp: 2;
-					-webkit-box-orient: vertical;
-				}
-			}
-
-
-			.bottom {
-				display: flex;
-				justify-content: space-between;
-				align-items: center;
-
-				.title {
-					padding: 3rpx 12rpx;
-					height: 30rpx;
-					background: #FFE6E6;
-					border: 1rpx solid #E31818;
-					border-radius: 2rpx;
-					font-size: 20rpx;
-					font-family: PingFang SC;
-					font-weight: 400;
-					color: #E31818;
-					line-height: 20rpx;
-					display: flex;
-					justify-content: center;
-					align-items: center;
-				}
-
-				.right {
-					width: 170rpx;
-					display: flex;
-					justify-content: space-between;
-					align-items: center;
-					font-size: 22rpx;
-					font-family: PingFang SC;
-					font-weight: 400;
-					color: #999999;
-					line-height: 35rpx;
-
-					.flex {
-						display: flex;
-						justify-content: center;
-
-						.icon {
-							margin-right: 5rpx;
-						}
-					}
-				}
-			}
-		}
-	}
-</style>

+ 0 - 108
pages/cinema/cinemalist.vue

@@ -1,108 +0,0 @@
-<template>
-	<view>
-		<van-tabs :active='active' :swipe-threshold='3' animated sticky id='tabs'>
-			<van-tab :title="getDay(dateItem)+' '+dateItem.slice(5)" v-for='(dateItem,dateIndex) in showDate' :key='index'>
-				<loadSke :loading='cinemaLoading' :list='cinemaList[dateItem]'>
-					<view class="cinema-box" v-for="(item,index) in cinemaList[dateItem]" :key='index' @click='goPage(`/pages/cinema/schedulelist?cinemaId=${item.cinemaId}&filmId=${filmId}`)'>
-						<view class="tit">
-							<text>{{item.cinemaName}}</text>
-							<text class="text-2">{{item.distance}}</text>
-						</view>
-						<text class="address">{{item.address}}</text>
-					</view>
-				</loadSke>
-			</van-tab>
-		</van-tabs>
-	</view>
-</template>
-
-<script>
-	import {
-		getCinemaList,
-		getShowList,
-		getShowDate
-	} from '@/api/cinema.js'
-	export default {
-		data: () => ({
-			active: 0,
-			cinemaList: {},
-			cinemaLoading: true,
-			dateLoading: true,
-			filmId: null,
-			cityId: null,
-			location: null,
-			showDate: []
-		}),
-		onLoad: function(option) {
-			this.filmId = option.filmId
-			this.cityId = option.cityId
-			this.location = option.location.split(',')
-		},
-		mounted() {
-			this.init()
-		},
-		methods: {
-			async init() {
-				let showDateRes = await getShowDate({
-					cityId: this.cityId,
-					filmId: this.filmId,
-				})
-				this.showDate = showDateRes.data.data.dateList
-				this.dateLoading = false
-				this.$nextTick(() => {
-					this.selectComponent('#tabs').resize();
-				})
-				this.showDate.forEach(async val => {
-					let showListRes = await getShowList({
-						cityId: this.cityId,
-						filmId: this.filmId,
-						latitude: this.location[1],
-						longitude: this.location[0],
-						page: 1,
-						limit: 30,
-						date: val
-					})
-					this.$set(this.cinemaList, val, showListRes.data.data.list)
-					this.cinemaLoading = false
-				})
-
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	.cinema-box {
-		padding: 30rpx;
-		border-top: 1rpx solid #E8E8E8;
-		background-color: #FFFFFF;
-		display: flex;
-		flex-direction: column;
-
-		.tit {
-			display: flex;
-			justify-content: space-between;
-
-			.text-1 {
-				font-size: 30rpx;
-				color: #0F0404;
-			}
-
-			.text-2 {
-				font-size: 26rpx;
-				color: #999999;
-				white-space: nowrap;
-			}
-		}
-
-		.address {
-			margin-top: 20rpx;
-			width: 600rpx;
-			font-size: 26rpx;
-			color: #666666;
-			white-space: nowrap;
-			overflow: hidden;
-			text-overflow: ellipsis;
-		}
-	}
-</style>

+ 0 - 36
pages/cinema/citylist.vue

@@ -1,36 +0,0 @@
-<template>
-	<view>
-		<van-index-bar>
-			<loading v-if="loading" />
-			<view v-for="(item,index) in cityList" :key='index'>
-				<van-index-anchor :index="index" />
-				<van-cell @click='selectCity(sonitem)' :title="sonitem.regionName" v-for="(sonitem,sonindex) in item" :key='sonindex' />
-			</view>
-		</van-index-bar>
-	</view>
-</template>
-
-<script>
-	export default {
-		data: () => ({
-			cityList: [],
-			loading: true
-		}),
-		onLoad: async function(option) {
-			let data = await this.goPageGetData()
-			this.cityList = data.cityList
-			this.loading = false
-		},
-		methods: {
-			selectCity(obj) {
-				this.$store.commit('SET_CITYOBJ', obj)
-				this.$store.commit('SET_CITYID', obj.cityId)
-				uni.navigateBack()
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-
-</style>

+ 0 - 345
pages/cinema/orderdes.vue

@@ -1,345 +0,0 @@
-<template>
-	<view>
-		<loadSke :loading='loading'>
-			<view class="remind">请到影院现场柜台或取票机取票</view>
-			<view class="des-box">
-				<loadSke :loading='qrcodeLoading'>
-					<view v-if="ticketType==2">
-						<view v-if="orderDes.orderDataJson.filmMcpData" class="code-box">
-							<view class="code">
-								<text>取票码</text>
-								<text>{{orderDes.orderDataJson.filmMcpData.ticket.slice(4)}}</text>
-							</view>
-							<image class="qrcode" :src="filmDes.qrcode" mode="widthFix"></image>
-						</view>
-						<view v-else class="code-box">
-							<image src="https://t1-1305573081.cos.ap-shanghai.myqcloud.com/wxapp/static/imgs/%E8%AE%A2%E5%8D%95%E5%85%B3%E9%97%AD.png"
-							 class="qrcode-loading" mode="widthFix"></image>
-						</view>
-					</view>
-					<view v-else-if="ticketType!=2">
-						<view v-if="filmDes.orderStatus < 4" class="code-box">
-							<image src="https://t1-1305573081.cos.ap-shanghai.myqcloud.com/wxapp/static/imgs/%E7%94%B5%E5%BD%B1%E7%A5%A8%E7%AD%89%E5%BE%85.png"
-							 class="qrcode-loading" mode="widthFix"></image>
-						</view>
-						<view v-else-if="filmDes.orderStatus != 10" class="code-box"  v-for="(item,index) in filmDes.qrcode" :key='index'>
-							<view class="code">
-								<text>取票码</text>
-								<text>{{item.code}}</text>
-							</view>
-							<image class="qrcode" :src="item.qrcode" mode="widthFix"></image>
-						</view>
-						<view v-else class="code-box">
-							<image src="https://t1-1305573081.cos.ap-shanghai.myqcloud.com/wxapp/static/imgs/%E8%AE%A2%E5%8D%95%E5%85%B3%E9%97%AD.png"
-							 class="qrcode-loading" mode="widthFix"></image>
-						</view>
-					</view>
-				</loadSke>
-				<view class="order-num">
-					<text>订单号:{{orderDes.outTradeNo}}</text>
-					<text>{{filmDes.orderStatusStr}}</text>
-				</view>
-				<view class="des">
-					<text class="film-name">{{orderDes.orderDataJson.cinemaData.filmName}}</text>
-					<view class="film-time">
-						<text>时间</text>
-						<text>{{orderDes.orderDataJson.cinemaData.showTime}}</text>
-					</view>
-					<view class="film-address">
-						<text>影院</text>
-						<text>{{orderDes.orderDataJson.cinemaData.cinemaName}}</text>
-					</view>
-					<view class="film-video">
-						<text>影厅</text>
-						<text>{{orderDes.orderDataJson.cinemaData.hallName}}</text>
-					</view>
-					<view class="film-seat">
-						<text>座位</text>
-						<view class="seat-box">
-							<text v-for="(item,index) in seatList" :key='index'>{{item}}</text>
-						</view>
-					</view>
-				</view>
-				<view class="price">
-					<text>总价</text>
-					<text>¥{{orderDes.total/100}}</text>
-				</view>
-			</view>
-		</loadSke>
-	</view>
-</template>
-
-<script>
-	import {
-		getWxOrder
-	} from '@/api/order.js'
-	import {
-		orderQuery
-	} from '@/api/cinema.js'
-	import QRCode from 'qrcode'
-	export default {
-		data: () => ({
-			orderDes: {},
-			seatList: [],
-			outTradeNo: null,
-			loading: true,
-			pollingTiemId: null,
-			filmDes: {},
-			qrcode: null,
-			qrcodeLoading: true,
-			ticketType: null
-		}),
-		onLoad: function(option) {
-			this.outTradeNo = option.outTradeNo
-		},
-		mounted() {
-			this.init()
-		},
-		computed: {},
-		methods: {
-			async init() {
-				let orderRes = await getWxOrder(this.outTradeNo)
-				orderRes.data.orderDataJson = JSON.parse(orderRes.data.orderDataJson)
-				this.orderDes = orderRes.data
-				this.seatList = this.orderDes.orderDataJson.wxOrderCreateDTO.seat.split(',')
-				this.ticketType = this.orderDes.orderDataJson.wxOrderCreateDTO.ticketType
-				if (this.ticketType == 2) {
-					if (this.orderDes.orderDataJson.filmMcpData) {
-						this.qrcode = await this.qrcodeGenerate(this.orderDes.orderDataJson.filmMcpData.ticket.slice(4))
-					}
-				}
-				if (this.ticketType != 2) {
-					let filmRes = await orderQuery({
-						thirdOrderId: this.outTradeNo
-					})
-					this.filmDes = filmRes.data.data
-					if (this.filmDes.orderStatus < 4) {
-						this.polling()
-					} else if (this.filmDes.orderStatus < 10) {
-						this.qrcodeShow()
-					}
-				}
-				this.loading = false
-				this.qrcodeLoading = false
-			},
-			polling() {
-				this.pollingTiemId = setInterval(async () => {
-					let filmRes = await orderQuery({
-						thirdOrderId: this.outTradeNo
-					})
-					this.filmDes = filmRes.data.data
-					if (this.filmDes.orderStatus == 4 || this.filmDes.orderStatus == 5) {
-						clearInterval(this.pollingTiemId)
-						this.qrcodeShow()
-					}
-				}, 3000)
-			},
-			qrcodeShow() {
-				let qrcode = []
-				this.filmDes.ticketCode.forEach(async val => {
-					if (val.type == 1) {
-						let qr = await this.qrcodeGenerate(val.code)
-						qrcode.push({
-							qrcode: qr,
-							code: val.code
-						})
-					}
-				})
-				this.$set(this.filmDes, 'qrcode', qrcode)
-			},
-			async qrcodeGenerate(data) {
-				let qrcodeRes = await QRCode.toString(data, {
-					margin: 0,
-					errorCorrectionLevel: 'H'
-				});
-				return 'data:image/svg+xml;base64,' + Buffer(qrcodeRes).toString('base64');
-			}
-		},
-		beforeDestroy() {
-			clearInterval(this.pollingTiemId)
-		}
-	}
-</script>
-
-<style lang="scss">
-	.remind {
-		margin-top: 36rpx;
-		font-size: 26rpx;
-		font-weight: 400;
-		color: #0F0404;
-		text-align: center;
-	}
-
-	.des-box {
-		width: 564rpx;
-		background: #FFFFFF;
-		border-radius: 20rpx;
-		margin: auto;
-		margin-top: 30rpx;
-
-		.code-box {
-			display: flex;
-			flex-direction: column;
-			align-items: center;
-			padding-bottom: 38rpx;
-
-			.code {
-				margin-top: 43rpx;
-
-				text {
-					font-size: 26rpx;
-					font-weight: 400;
-					color: #666666;
-					margin-right: 20rpx;
-
-					&:nth-child(2) {
-						color: #0F0404;
-					}
-				}
-			}
-
-			.qrcode {
-				margin-top: 43rpx;
-				width: 260rpx;
-				height: 260rpx;
-			}
-
-			.qrcode-loading {
-				margin-top: 43rpx;
-				width: 100%;
-			}
-		}
-
-		.order-num {
-			display: flex;
-			justify-content: space-between;
-			align-items: center;
-			padding: 34rpx 31rpx;
-			border-top: 1rpx dashed #D9D9D9;
-			border-bottom: 1rpx dashed #D9D9D9;
-			position: relative;
-
-			&::after {
-				content: '';
-				width: 24rpx;
-				height: 24rpx;
-				border-radius: 50%;
-				background-color: #F1F1F1;
-				position: absolute;
-				top: 0;
-				left: 0;
-				transform: translate(-50%, -50%);
-			}
-
-			&::before {
-				content: '';
-				width: 24rpx;
-				height: 24rpx;
-				border-radius: 50%;
-				background-color: #F1F1F1;
-				position: absolute;
-				top: 0;
-				right: 0;
-				transform: translate(50%, -50%);
-			}
-
-			text {
-				&:nth-child(1) {
-					width: 60%;
-					word-break: break-all;
-					font-size: 26rpx;
-					font-weight: 400;
-					color: #666666;
-				}
-
-				&:nth-child(2) {
-					padding: 10rpx;
-					display: flex;
-					justify-content: center;
-					align-items: center;
-					background: #FFE5E5;
-					border: 1rpx solid #E31818;
-					border-radius: 20rpx;
-					font-size: 20rpx;
-					font-weight: 400;
-					color: #E31818;
-				}
-			}
-		}
-
-		.des {
-			padding: 45rpx 30rpx;
-			border-bottom: 1rpx dashed #D9D9D9;
-			display: flex;
-			flex-direction: column;
-
-			.film-name {
-				font-size: 30rpx;
-				font-weight: 400;
-				color: #0F0404;
-			}
-
-			text {
-				font-size: 26rpx;
-				font-weight: 400;
-				color: #666666;
-				margin-right: 20rpx;
-				white-space: nowrap;
-			}
-
-			.film-time {
-				text:nth-child(2) {
-					color: #999999;
-				}
-			}
-
-			.film-address {
-				text:nth-child(2) {
-					color: #999999;
-				}
-			}
-
-			.film-video {
-				text:nth-child(2) {
-					color: #999999;
-				}
-			}
-
-			.film-seat {
-				display: flex;
-				justify-content: flex-start;
-				align-items: stretch;
-				margin-top: 10rpx;
-
-				.seat-box {
-					display: flex;
-					flex-wrap: wrap;
-
-					text {
-						height: 40rpx;
-						padding: 4rpx 15rpx;
-						margin-bottom: 10rpx;
-						background: #EBEBEB;
-						border-radius: 4rpx;
-						color: #999999;
-					}
-				}
-			}
-		}
-
-		.price {
-			padding: 40rpx 30rpx;
-
-			text {
-				font-size: 26rpx;
-				font-weight: 400;
-				color: #666666;
-				margin-right: 20rpx;
-
-				&:nth-child(2) {
-					color: #E31818;
-				}
-			}
-		}
-	}
-</style>

+ 0 - 490
pages/cinema/placeorder.vue

@@ -1,490 +0,0 @@
-<template>
-	<view>
-		<view class="film-des">
-			<image class="left-img" :src="filmDes.pic" mode="widthFix"></image>
-			<view class="right-box">
-				<view class="film-name">
-					{{showItem.filmName}}
-				</view>
-				<view class="film-time">
-					{{showItem.showTime}}<br />
-					{{showItem.cinemaName}}<br />
-					{{showItem.hallName}}
-				</view>
-				<view class="film-caveat">
-					<view class="item">
-						<van-icon name="clear" color='#E31818' />
-						不支持退票
-					</view>
-					<view class="item">
-						<van-icon name="clear" color='#E31818' />
-						不支持改签
-					</view>
-				</view>
-			</view>
-		</view>
-		<view class="select-des">
-			<view class="tit-text">
-				选择购票方式
-			</view>
-			<van-radio-group :value="radioType" @change="radioOnChange">
-				<view class="options-box">
-					<view class="left-box">
-						<image class="img" src="https://t1-1305573081.cos.ap-shanghai.myqcloud.com/wxapp/static/imgs/%E7%89%B9%E6%83%A0%E8%B4%AD%E7%A5%A8.png"
-						 mode="widthFix"></image>
-						<view class="text-box">
-							<text class="top">特惠购票</text>
-							<text class="bottom">固定折扣,快速出票</text>
-						</view>
-					</view>
-					<view class="right-box">
-						<view class="text-box">
-							<text class="top">¥{{aPrice}}/张</text>
-							<text class="bottom">优惠 ¥{{aDiscount}}元</text>
-						</view>
-						<van-radio :name="1" checked-color="#07c160"></van-radio>
-					</view>
-				</view>
-				<view class="options-box">
-					<view class="left-box">
-						<image class="img" src="https://t1-1305573081.cos.ap-shanghai.myqcloud.com/wxapp/static/imgs/%E5%BF%AB%E9%80%9F%E8%B4%AD%E7%A5%A8.png"
-						 mode="widthFix"></image>
-						<view class="text-box">
-							<text class="top">快速购票</text>
-							<text class="bottom">无需等待,即买即兑</text>
-						</view>
-					</view>
-					<view class="right-box">
-						<view class="text-box">
-							<text class="top">¥{{(showItem.netPrice/100).toFixed(2)}}/张</text>
-						</view>
-						<van-radio :name="2" checked-color="#07c160"></van-radio>
-					</view>
-				</view>
-				<view class="options-box">
-					<view class="left-box">
-						<image class="img" src="https://t1-1305573081.cos.ap-shanghai.myqcloud.com/wxapp/static/imgs/%E7%AB%9E%E4%BB%B7.png"
-						 mode="widthFix"></image>
-						<view class="text-box">
-							<text class="top">竞价购买</text>
-							<text class="bottom">为您网罗最低的折扣,约耗时几分钟</text>
-						</view>
-					</view>
-					<view class="right-box">
-						<view class="text-box">
-							<text class="top">等待竞价</text>
-						</view>
-						<van-radio :name="3" checked-color="#07c160" disabled></van-radio>
-					</view>
-				</view>
-			</van-radio-group>
-		</view>
-		<view class="seat-select">
-			<text class="tit-text">无座时接受系统调座</text>
-			<van-switch :checked="acceptChangeSeat==1" @change="onChange" size="24px" />
-		</view>
-		<view class="seat-des">
-			<view class="tit-text">
-				购票须知
-			</view>
-			<view class="seat-box">
-				<view class="left">
-					座位:
-				</view>
-				<view class="right">
-					<view class="item" v-for="(item,index) in seatResult" :key='index'>
-						<text class="top">{{item.seatNo}}</text>
-						<text class="bottom">¥{{aPrice}}</text>
-					</view>
-				</view>
-			</view>
-		</view>
-		<view class="buy-des">
-			<view class="left">
-				<text class="one">总价:</text>
-				<text class="two">¥{{allPrice}}</text>
-				<text class="three">优惠¥{{allDiscount}}元</text>
-			</view>
-			<view class="right">
-				<text class="text">{{seatResult.length}}张</text>
-				<button class="btn" type="default" @click="buy">去支付</button>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import {
-		prepareOrder
-	} from '@/api/cinema.js'
-	export default {
-		data: () => ({
-			showItem: {},
-			seatResult: [],
-			radioType: 1,
-			acceptChangeSeat: 0,
-			orderRes: {}
-		}),
-		onLoad: async function(option) {
-			let data = await this.goPageGetData()
-			this.showItem = data.showItem
-			this.seatResult = data.seatResult.map((val) => {
-				return JSON.parse(val)
-			})
-		},
-		computed: {
-			filmDes() {
-				let des = {}
-				this.$store.state.cinema.filmList.forEach((val) => {
-					if (val.filmId == this.showItem.filmId) {
-						des = val
-					}
-				})
-				return des;
-			},
-			filmDiscount() {
-				return this.$store.state.cinema.filmDiscount;
-			},
-			discountRule() {
-				return this.$store.state.cinema.discountRule;
-			},
-			aPrice() {
-				let discountRule = (this.showItem.netPrice > 3900 ? this.discountRule.upDiscountRate : this.discountRule.downDiscountRate)
-				let filmDiscount = this.filmDiscount
-				let netPrice = this.showItem.netPrice / 100
-				return (netPrice * discountRule * filmDiscount).toFixed(2)
-			},
-			aDiscount() {
-				let discountRule = (this.showItem.netPrice > 3900 ? this.discountRule.upDiscountRate : this.discountRule.downDiscountRate)
-				let filmDiscount = this.filmDiscount
-				let netPrice = this.showItem.netPrice / 100
-				return (netPrice - netPrice * discountRule * filmDiscount).toFixed(2)
-			},
-			allPrice() {
-				let discountRule = (this.showItem.netPrice > 3900 ? this.discountRule.upDiscountRate : this.discountRule.downDiscountRate)
-				let filmDiscount = this.filmDiscount
-				let netPrice = this.showItem.netPrice / 100
-				if (this.radioType == 1) {
-					return (this.seatResult.length * netPrice * discountRule * filmDiscount).toFixed(2)
-				}
-				if (this.radioType == 2) {
-					return (this.seatResult.length * netPrice).toFixed(2)
-				}
-			},
-			allDiscount() {
-				let discountRule = (this.showItem.netPrice > 3900 ? this.discountRule.upDiscountRate : this.discountRule.downDiscountRate)
-				let filmDiscount = this.filmDiscount
-				let netPrice = this.showItem.netPrice / 100
-				if (this.radioType == 1) {
-					return (this.seatResult.length * (netPrice - netPrice * discountRule * filmDiscount)).toFixed(2)
-				}
-				if (this.radioType == 2) {
-					return (this.seatResult.length * (netPrice - netPrice)).toFixed(2)
-				}
-			},
-		},
-		methods: {
-			radioOnChange(e) {
-				this.orderRes = {}
-				this.radioType = e.detail
-			},
-			onChange({
-				detail
-			}) {
-				// 需要手动对 checked 状态进行更新
-				if (detail) {
-					this.acceptChangeSeat = 1
-				} else {
-					this.acceptChangeSeat = 0
-				}
-			},
-			async buy() {
-				//已有订单则直接请求历史数据
-				if (this.orderRes.code == 200) {
-					let payRes = await wx.requestPayment(this.orderRes.data)
-					console.log(payRes)
-					return false
-				}
-
-				let seat = [],
-					seatId = [],
-					seatNo = []
-				this.seatResult.forEach(val => {
-					seat.push(val.seatNo)
-					seatNo.push(val.seatNo)
-					seatId.push(val.seatId)
-				})
-				prepareOrder({
-					acceptChangeSeat: this.acceptChangeSeat,
-					seat: seat.join(','),
-					seatId: seatId.join('|'),
-					seatNo: seatNo.join('|'),
-					showId: this.showItem.showId,
-					cinemaId: this.showItem.cinemaId,
-					goodsPictureUrl: this.filmDes.pic,
-					goodsType: '1',
-					ticketType: this.radioType
-				}).then(async res => {
-					this.orderRes = res
-					let payRes = await wx.requestPayment(this.orderRes.data)
-					if (payRes.errMsg == 'requestPayment:ok') {
-						this.goPage(`/pages/cinema/orderdes?outTradeNo=${this.orderRes.data.outTradeNo}`, 'reLaunch')
-					}
-					console.log(payRes)
-				})
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.film-des {
-		padding: 40rpx 30rpx;
-		margin-top: 20rpx;
-		background-color: #FFFFFF;
-		display: flex;
-
-		.left-img {
-			width: 170rpx;
-			height: 236rpx;
-			margin-right: 20rpx;
-		}
-
-		.right-box {
-			display: flex;
-			flex-direction: column;
-			justify-content: space-between;
-
-			.film-name {
-				font-size: 30rpx;
-				font-weight: 400;
-				color: #0F0404;
-			}
-
-			.film-time {
-				font-size: 26rpx;
-				font-weight: 400;
-				color: #666666;
-				line-height: 39rpx;
-			}
-
-			.film-caveat {
-				display: flex;
-
-				.item {
-					display: flex;
-					align-items: center;
-					margin-right: 33rpx;
-					font-size: 26rpx;
-					font-weight: 400;
-					color: #0F0404;
-				}
-			}
-		}
-	}
-
-	.select-des {
-		background-color: #FFFFFF;
-		margin-top: 20rpx;
-		padding-bottom: 1rpx;
-
-		.tit-text {
-			padding: 30rpx;
-			font-size: 26rpx;
-			font-weight: 400;
-			color: #0F0404;
-			border-bottom: 1rpx solid #E8E8E8;
-		}
-
-		.options-box {
-			display: flex;
-			justify-content: space-between;
-			align-items: center;
-			margin: 30rpx;
-
-			.left-box {
-				display: flex;
-
-				.img {
-					width: 66rpx;
-					height: 66rpx;
-					margin-right: 20rpx;
-				}
-
-				.text-box {
-					display: flex;
-					flex-direction: column;
-
-					.top {
-						font-size: 26rpx;
-						font-weight: 400;
-						color: #0F0404;
-					}
-
-					.bottom {
-						font-size: 22rpx;
-						font-weight: 400;
-						color: #666666;
-					}
-				}
-			}
-
-			.right-box {
-				display: flex;
-				align-items: center;
-
-				.text-box {
-					display: flex;
-					flex-direction: column;
-					justify-content: space-around;
-					align-items: flex-end;
-					margin-right: 23rpx;
-
-					.top {
-						font-size: 26rpx;
-						font-weight: 400;
-						color: #E31818;
-					}
-
-					.bottom {
-						font-size: 20rpx;
-						font-weight: 400;
-						color: #605A5A;
-					}
-				}
-			}
-		}
-	}
-
-	.seat-select {
-		background-color: #FFFFFF;
-		margin-top: 20rpx;
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		padding: 20rpx 30rpx;
-
-		.tit-text {
-			font-size: 26rpx;
-			font-weight: 400;
-			color: #E31818;
-		}
-	}
-
-	.seat-des {
-		background-color: #FFFFFF;
-		margin-top: 20rpx;
-
-		.tit-text {
-			font-size: 26rpx;
-			font-weight: 400;
-			color: #0F0404;
-			padding: 30rpx;
-			border-bottom: 1rpx solid #E8E8E8;
-		}
-
-		.seat-box {
-			display: flex;
-			justify-content: flex-start;
-			padding: 10rpx 30rpx;
-
-			.left {
-				white-space: nowrap;
-				height: 96rpx;
-				margin-top: 10rpx;
-			}
-
-			.right {
-				display: flex;
-				flex-wrap: wrap;
-				justify-content: flex-start;
-				align-items: center;
-
-				.item {
-					width: 134rpx;
-					height: 96rpx;
-					margin: 10rpx;
-					background: #EBEBEB;
-					border-radius: 10rpx;
-					display: flex;
-					flex-direction: column;
-					justify-content: center;
-					align-items: center;
-
-					.top {
-						font-size: 26rpx;
-						font-weight: 400;
-						color: #666666;
-					}
-
-					.bottom {
-						font-size: 22rpx;
-						font-weight: 400;
-						color: #E31923;
-					}
-				}
-			}
-		}
-	}
-
-	.buy-des {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		background-color: #FFFFFF;
-		width: 100vw;
-		box-sizing: border-box;
-		position: fixed;
-		bottom: 0;
-		padding: 15rpx 30rpx;
-		padding-bottom: calc(10px + env(safe-area-inset-bottom)/2);
-
-		.left {
-			display: flex;
-			justify-content: space-between;
-			align-items: center;
-			width: 50%;
-
-			.one {
-				font-size: 26rpx;
-				color: #0F0404;
-			}
-
-			.two {
-				font-size: 36rpx;
-				color: #E31919;
-			}
-
-			.three {
-				font-size: 22rpx;
-				color: #E86125;
-			}
-		}
-
-		.right {
-			width: 40%;
-			display: flex;
-			justify-content: space-between;
-			align-items: center;
-
-			.text {
-				font-size: 26rpx;
-				color: #0F0404;
-			}
-
-			.btn {
-				margin: 0;
-				width: 200rpx;
-				height: 80rpx;
-				background: linear-gradient(90deg, #E31818, #ED3E24, #ED4F24);
-				border-radius: 40rpx;
-				font-size: 30rpx;
-				color: #FFFFFF;
-				display: flex;
-				justify-content: center;
-				align-items: center;
-				white-space: nowrap;
-			}
-		}
-	}
-</style>

+ 0 - 335
pages/cinema/schedulelist.vue

@@ -1,335 +0,0 @@
-<template>
-	<page-meta>
-		<navigation-bar :title="filmList[filmId].name" background-color="#FFFFFF" front-color="#000000" />
-	</page-meta>
-	<view class="schedulelist">
-		<loadSke :loading='listLoading'>
-			<view class="des-box">
-				<view class="address">
-					{{cinemaName}}
-				</view>
-				<swiper class="swiper-box" :current="current" previous-margin='200rpx' next-margin='200rpx' @change='swiperChange'>
-					<swiper-item v-for="(item,index) in scheduleListKey" :key='index' class="swiper-item">
-						<image class="image" :class="{imgBig:current==index}" :src="filmList[item].pic" mode="heightFix" :draggable="false" />
-					</swiper-item>
-				</swiper>
-				<view class="film-name">
-					{{filmList[filmId].name}}
-				</view>
-				<view class="film-des">
-					{{filmList[filmId].duration}}分钟 | {{filmList[filmId].filmTypes}} | {{filmList[filmId].cast}}
-				</view>
-			</view>
-
-
-			<view class="schedule-box">
-				<van-tabs :active='tabActive' :swipe-threshold='3' animated swipeable id="tabs" @change='tabsChange'>
-					<van-tab class='schedule-tab' :title="getDay(index)+' '+index.slice(5)" v-for='(item,index) in scheduleItem' :key='index'>
-						<view v-for="(sonItem,sonIndex) in item" :key='sonItem.showId' class="schedule-des" @click="clickBuy(sonItem)">
-							<view class="left-box">
-								<view class="item-box">
-									<text>{{sonItem.showTime.slice(11,16)}}</text>
-									<text class="bottom-text">{{sonItem.duration}}分钟</text>
-								</view>
-								<view class="type-box">
-									<text>{{sonItem.planType}}</text>
-									<text class="bottom-text">{{sonItem.hallName}}</text>
-								</view>
-							</view>
-							<view class="right-box">
-								<view class="price-box">
-									<text>{{(sonItem.netPrice/100*(sonItem.netPrice>3900?discountRule.upDiscountRate:discountRule.downDiscountRate)*filmDiscount).toFixed(2)}}元</text>
-									<text class="bottom-text old-price">{{sonItem.netPrice/100}}元</text>
-								</view>
-								<button v-if='discontinued(sonItem.stopSellTime)'>购 票</button>
-								<button v-else type="default" style="background: linear-gradient(90deg, #c0c0c0, #c0c0c0, #c0c0c0);">停 售</button>
-							</view>
-						</view>
-					</van-tab>
-				</van-tabs>
-			</view>
-		</loadSke>
-	</view>
-</template>
-
-<script>
-	import {
-		getScheduleList,
-		getfilmInfo
-	} from '@/api/cinema.js'
-	export default {
-		data: () => ({
-			listLoading: true,
-			tabActive: 0,
-			current: 0,
-			cinemaId: null,
-			filmId: null,
-			cinemaName: '',
-			scheduleList: {},
-			scheduleListKey: null,
-			discountRule: {},
-			scheduleItem: {}
-		}),
-		computed: {
-			filmList() {
-				let list = {}
-				this.$store.state.cinema.filmList.map((val) => {
-					list[val.filmId] = val
-				})
-				return list;
-			},
-			filmDiscount() {
-				return this.$store.state.cinema.filmDiscount;
-			}
-		},
-		onLoad: function(option) {
-			this.cinemaId = option.cinemaId;
-			this.filmId = option.filmId;
-		},
-		mounted() {
-			this.init()
-		},
-		methods: {
-			clickBuy(item) {
-				let flag = this.discontinued(item.stopSellTime)
-				if (flag) {
-					this.goPage(`/pages/cinema/selectseat`, null, {
-						showItem: item
-					})
-				}
-				return
-			},
-			init() {
-				this.listLoading = true
-				getScheduleList({
-					cinemaId: this.cinemaId
-				}).then(res => {
-					this.scheduleList = {}
-					this.discountRule = res.data.data.discountRule
-					this.$store.commit('SET_DISCOUNTRULE', res.data.data.discountRule)
-					this.cinemaName = res.data.data.list[0].cinemaName
-					res.data.data.list.map((val) => {
-						this.scheduleList[val.filmId] || (this.scheduleList[val.filmId] = {})
-						this.scheduleList[val.filmId][val.showDate] || (this.scheduleList[val.filmId][val.showDate] = [])
-						this.scheduleList[val.filmId][val.showDate].push(val)
-					})
-					this.scheduleListKey = Object.keys(this.scheduleList);
-					//定位影片位置
-					(this.filmId == 'undefined') && (this.filmId = this.scheduleListKey[0])
-					this.scheduleItem = this.scheduleList[this.filmId]
-					this.current = this.scheduleListKey.indexOf(this.filmId)
-					this.listLoading = false
-					setTimeout(() => {
-						this.selectComponent('#tabs').resize();
-					}, 500)
-				})
-			},
-			discontinued(date) {
-				let flag = (new Date(date.replace(/-/g, "/")).getTime() - new Date().getTime() - 1000 * 60 * 60) > 0
-				return flag
-			},
-			swiperChange(e) {
-				this.current = e.detail.current
-				this.filmId = this.scheduleListKey[this.current]
-				this.scheduleItem = {}
-				this.$nextTick(() => {
-					this.scheduleItem = this.scheduleList[this.filmId]
-					this.$nextTick(() => {
-						this.tabActive = 0
-						this.selectComponent('#tabs').resize();
-					})
-				})
-			},
-			tabsChange(e) {
-				this.tabActive = e.detail.index
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.button-box {
-		width: 100%;
-		height: 100rpx;
-		display: flex;
-		justify-content: space-around;
-		align-items: stretch;
-		background-color: #ffffff;
-
-		.problem-type {
-			display: flex;
-			justify-content: center;
-			align-items: center;
-		}
-
-		.active {
-			border-bottom: 2px solid red;
-		}
-	}
-
-	.des-box {
-		background-image: url(https://t1-1305573081.cos.ap-shanghai.myqcloud.com/wxapp/static/imgs/filmBg.png);
-		padding: 35rpx 30rpx;
-		box-sizing: border-box;
-		width: 100%;
-		height: 690rpx;
-
-		.address {
-			font-size: 30rpx;
-			font-weight: bold;
-			color: #FFFFFF;
-		}
-
-		.swiper-box {
-			margin: auto;
-			margin-top: 60rpx;
-			padding: 0 45rpx;
-			box-sizing: border-box;
-			width: 100%;
-			height: 270rpx;
-
-			.swiper-item {
-				display: flex;
-				justify-content: center;
-				align-items: center;
-			}
-
-			.image {
-				height: 86%;
-			}
-
-			.imgBig {
-				height: 100% !important;
-			}
-		}
-
-		.film-name {
-			margin-top: 53rpx;
-			text-align: center;
-			font-size: 30rpx;
-			font-weight: bold;
-			color: #FFFFFF;
-		}
-
-		.film-des {
-			margin-top: 19rpx;
-			text-align: center;
-			font-size: 22rpx;
-			font-weight: 400;
-			color: #FFFFFF;
-			width: 100%;
-			overflow: hidden;
-			white-space: nowrap;
-			text-overflow: ellipsis;
-		}
-	}
-
-	.schedule-box {
-		width: 100vw;
-		min-height: calc(100vh - 690rpx + 122rpx - 10px - env(safe-area-inset-bottom)/2);
-		padding-bottom: calc(10px + env(safe-area-inset-bottom)/2);
-		background-color: #FFFFFF;
-		border-radius: 50rpx 50rpx 0px 0px;
-		margin-top: -122rpx;
-		overflow: hidden;
-
-		.schedule-tab {
-			overflow-y: auto;
-		}
-
-		.schedule-des {
-			display: flex;
-			justify-content: space-between;
-			align-items: center;
-			padding: 0 30rpx;
-			margin-top: 50rpx;
-
-			.bottom-text {
-				font-size: 22rpx;
-				font-weight: 400;
-				color: #999999;
-				width: 100rpx;
-				text-align: center;
-				white-space: nowrap;
-				overflow: hidden;
-				text-overflow: ellipsis;
-			}
-
-			.left-box {
-				width: 50%;
-				display: flex;
-				justify-content: space-around;
-				align-items: stretch;
-
-				.item-box {
-					display: flex;
-					flex-direction: column;
-					justify-content: space-between;
-					align-items: center;
-
-					&:first-child {
-						font-size: 40rpx;
-						font-weight: 400;
-						color: #0F0404;
-					}
-				}
-
-				.type-box {
-					display: flex;
-					flex-direction: column;
-					justify-content: space-between;
-					align-items: center;
-
-					&:first-child {
-						font-size: 26rpx;
-						font-weight: 400;
-						color: #0F0404;
-					}
-
-					:last-child {
-						width: 220rpx !important;
-					}
-				}
-			}
-
-			.right-box {
-				width: 45%;
-				display: flex;
-				justify-content: space-around;
-				align-items: center;
-
-				.price-box {
-					display: flex;
-					flex-direction: column;
-					justify-content: space-between;
-					align-items: center;
-
-					&:first-child {
-						font-size: 36rpx;
-						font-weight: 400;
-						color: #E31919;
-					}
-
-					.old-price {
-						text-decoration: line-through;
-					}
-				}
-
-				button {
-					margin: 0;
-					width: 126rpx;
-					height: 60rpx;
-					background: linear-gradient(90deg, #E31818, #ED3E24, #ED4F24);
-					border-radius: 30rpx;
-					font-size: 26rpx;
-					font-weight: 400;
-					color: #FFFFFF;
-					white-space: nowrap;
-					display: flex;
-					justify-content: center;
-					align-items: center;
-				}
-			}
-		}
-	}
-</style>

+ 0 - 319
pages/cinema/selectseat.vue

@@ -1,319 +0,0 @@
-<template>
-	<page-meta>
-		<navigation-bar :title="showItem.filmName" background-color="#FFFFFF" front-color="#000000" />
-	</page-meta>
-	<view>
-		<view class="seatSelection-box">
-			<view class="top-box">
-				<view class="address">
-					{{showItem.cinemaName}}
-				</view>
-				<view class="logo-box">
-					<view class="item">
-						<view class="seat selectable"></view>可选
-					</view>
-					<view class="item">
-						<view class="seat selected"></view>已选
-					</view>
-					<view class="item">
-						<view class="seat notSelect"></view>已售
-					</view>
-				</view>
-			</view>
-			<movable-area scale-area class="movable-area">
-				<movable-view scale out-of-bounds direction='all' scale-max="3" @scale='scaleChange'>
-					<view class="movable-box">
-						<view class="screen-box">
-							<image class="screen" src="https://t1-1305573081.cos.ap-shanghai.myqcloud.com/wxapp/static/imgs/%E9%93%B6%E5%B9%95.png"
-							 mode="widthFix"></image>
-							<text class="screen-name">{{showItem.hallName}}</text>
-						</view>
-						<loadSke :loading='loading'>
-							<view class="seat-box" :style="{'--col':collong}">
-								<van-checkbox-group :value="seatResult" @change="groupOnChange" :max="max">
-									<view class="col" v-for="(rowitem,rowindex) in rowlong" :key='rowindex'>
-										<view v-for="(colitem,colindex) in collong" :key='colindex'>
-											<van-checkbox use-icon-slot v-if="seatSet(rowindex,colindex,seatList)==='N'" :name="JSON.stringify(seatList[rowindex+1][colindex+1])">
-												<view class="seat" :class="{selected:selected(rowindex,colindex,seatResult)}" slot="icon"></view>
-											</van-checkbox>
-											<view v-else-if="seatSet(rowindex,colindex,seatList)==='LK'" class="seat notSelect"></view>
-											<view v-else class="seat noneSeat"></view>
-										</view>
-									</view>
-								</van-checkbox-group>
-							</view>
-						</loadSke>
-					</view>
-				</movable-view>
-			</movable-area>
-		</view>
-
-		<view class="bottom-box">
-			<view class="buy-des">
-				<view class="film-des">
-					{{showItem.showTime}}
-				</view>
-				<view class="item-box">
-					<view class="seat-item" v-for="(item,index) in seatResult" :key='index'>
-						<view class="">
-							{{JSON.parse(item).seatNo}}
-						</view>
-						<van-icon name="cross" @click='remove(item)' />
-					</view>
-				</view>
-			</view>
-			<view class="price-box">
-				<view class="left-box">
-					总共:{{seatResult.length}}张
-				</view>
-				<button v-if="seatResult.length>0" class="btn" type="default" @click="goPage(`/pages/cinema/placeorder`,null,{seatResult:seatResult,showItem:showItem})">下一步</button>
-				<button v-else class="btn" style="background: linear-gradient(90deg, #c0c0c0, #c0c0c0, #c0c0c0);" type="default">下一步</button>
-			</view>
-		</view>
-
-	</view>
-</template>
-
-<script>
-	import {
-		getSeat
-	} from '@/api/cinema.js'
-	export default {
-		data: () => ({
-			showItem: null,
-			seatList: null,
-			rowlong: 0,
-			collong: 0,
-			seatResult: [],
-			max: null,
-			loading: true
-		}),
-		onLoad: async function(option) {
-			let data = await this.goPageGetData()
-			this.showItem = data.showItem
-		},
-		mounted() {
-			this.init()
-		},
-		methods: {
-			scaleChange(e) {
-				console.log(e)
-			},
-			groupOnChange(e) {
-				this.seatResult = e.detail
-			},
-			remove(item) {
-				this.seatResult.splice(this.seatResult.indexOf(item), 1)
-			},
-			seatSet(row, col, list) {
-				if (!list) {
-					return false
-				} else if (list[row + 1]) {
-					if (list[row + 1][col + 1])
-						return list[row + 1][col + 1].status
-				}
-			},
-			selected(row, col, seatResult) {
-				let flag = false
-				seatResult.forEach((val) => {
-					if (JSON.parse(val).columnNo == col + 1 && JSON.parse(val).rowNo == row + 1)
-						flag = true
-				})
-				return flag
-			},
-			loveSeat(row, col, list) {
-				return ''
-			},
-			async init() {
-				let seatRes = await getSeat({
-					showId: this.showItem.showId
-				})
-				console.log(seatRes)
-				this.max = seatRes.data.data.seatData.restrictions
-				seatRes.data.data.seatData.seats.forEach((val) => {
-					this.seatList || (this.seatList = {})
-					this.seatList[val.rowNo] || (this.seatList[val.rowNo] = {})
-					// this.$set(this.seatList[val.rowNo], val.columnNo, val)
-					if (parseInt(val.rowNo) > this.rowlong) {
-						this.rowlong = parseInt(val.rowNo)
-					}
-					if (parseInt(val.columnNo) > this.collong) {
-						this.collong = parseInt(val.columnNo)
-					}
-					this.seatList[val.rowNo][val.columnNo] = val
-				})
-				this.$nextTick(() => {
-					this.loading = false
-				})
-				console.log(this.seatList)
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	.movable-area {
-		width: 100vw;
-		min-height: 500rpx;
-	}
-
-	.movable-box {
-		width: 100vw;
-		min-height: 500rpx;
-	}
-
-	.seatSelection-box {
-		box-sizing: border-box;
-
-		.top-box {
-			padding: 30rpx;
-			box-sizing: border-box;
-
-			.address {
-				font-size: 30rpx;
-				font-weight: 400;
-				color: #0F0404;
-			}
-
-			.logo-box {
-				margin-top: 43rpx;
-				width: 50%;
-				display: flex;
-				justify-content: space-between;
-				align-items: center;
-
-				.item {
-					display: flex;
-					justify-content: center;
-					align-items: center;
-				}
-
-
-			}
-		}
-
-
-		.seat {
-			width: 26rpx;
-			height: 26rpx;
-			border: 1rpx solid #D9D9D9;
-			border-radius: 4rpx;
-			background: #FFFFFF;
-		}
-
-		.noneSeat {
-			opacity: 0;
-		}
-
-		.notSelect {
-			opacity: 1;
-			background: #FB3D46;
-		}
-
-		.selected {
-			opacity: 1;
-			background: #47CB79;
-		}
-
-
-
-		.screen-box {
-			position: relative;
-			margin-top: 47rpx;
-
-			.screen {
-				width: 100%;
-			}
-
-			.screen-name {
-				position: absolute;
-				left: 50%;
-				top: 30rpx;
-				transform: translateX(-50%);
-				white-space: nowrap;
-				font-size: 22rpx;
-				font-weight: 400;
-				color: #999999;
-			}
-		}
-
-		.seat-box {
-			margin-top: 50rpx;
-			width: calc(var(--col) * 30rpx);
-			margin: auto;
-
-			.col {
-				display: flex;
-				justify-content: space-around;
-				align-items: center;
-				margin-top: 15rpx;
-			}
-		}
-	}
-
-	.bottom-box {
-		position: fixed;
-		width: 100vw;
-		bottom: 0;
-
-		.buy-des {
-			background-color: #FFFFFF;
-			padding: 30rpx;
-
-			.film-des {
-				font-size: 26rpx;
-				font-weight: 400;
-				color: #666666;
-			}
-
-			.item-box {
-				display: flex;
-				justify-content: flex-start;
-				flex-wrap: wrap;
-
-				.seat-item {
-					display: flex;
-					justify-content: space-between;
-					align-items: center;
-					width: 200rpx;
-					background: #E6E6E6;
-					border-radius: 10rpx;
-					margin: 20rpx 20rpx 0rpx 0rpx;
-					padding: 20rpx;
-					box-sizing: border-box;
-				}
-			}
-		}
-
-		.price-box {
-			display: flex;
-			justify-content: space-between;
-			align-items: center;
-			background-color: #FFFFFF;
-			padding: 15rpx 30rpx;
-			padding-bottom: calc(15rpx + 10px + env(safe-area-inset-bottom)/2);
-			margin-top: 20rpx;
-
-			.left-box {
-				font-size: 26rpx;
-				font-weight: 400;
-				color: #0F0404;
-			}
-
-			.btn {
-				margin: 0;
-				width: 200rpx;
-				height: 80rpx;
-				background: linear-gradient(90deg, #E31818, #ED3E24, #ED4F24);
-				border-radius: 40rpx;
-				font-size: 30rpx;
-				font-weight: 400;
-				color: #FFFFFF;
-				display: flex;
-				justify-content: center;
-				align-items: center;
-				white-space: nowrap;
-			}
-		}
-	}
-</style>

+ 0 - 250
pages/collectionList/index.vue

@@ -1,250 +0,0 @@
-<template>
-	<view class="content">
-		<loadSke :loading='loading' :list='applist'>
-			<view class='list-item' v-for="(item, index) in applist" :key="index" @click="goMiniApp({appId:item.appletAddress},item)">
-				<image class="avatar" mode="aspectFill" :src="item.appletLogoFileUrl || '/static/imgs/shmr.png'">
-					<view class="item-right">
-						<view class="top">
-							<van-icon class="icon" name="/static/imgs/zf.png" size='14' />
-							<van-icon class="icon" name="/static/imgs/bxh.png" @tap.stop='delSc(index)' size='12' />
-						</view>
-						<view class="center">
-							<text class="details">{{item.appletIntroduce || '该商家暂无描述,敬请期待!'}}</text>
-						</view>
-						<view class="bottom">
-							<text class="title">{{item.corporateName}}</text>
-						</view>
-					</view>
-			</view>
-		</loadSke>
-	</view>
-
-</template>
-
-<script>
-	import loadSke from '@/components/skeleton/index/index.vue'
-	import {
-		collectionList,
-		delFavorites
-	} from '@/api/applist.js'
-	export default {
-		components: {
-			loadSke
-		},
-		data() {
-			return {
-				active: 0,
-				current: 0,
-				mode: 'round',
-				applist: {},
-				loading: true,
-				pageNum: 1,
-				pageSize: 10,
-				total: 1,
-			}
-		},
-		mounted() {
-			this.initAppList()
-		},
-		onReachBottom(){
-			if(this.total-this.pageNum*this.pageSize<=0){
-				return
-			}
-			this.pageNum++
-			collectionList({
-				pageNum: this.pageNum,
-				pageSize: this.pageSize
-			}).then(res => {
-				this.applist = this.applist.concat(res.rows)
-			})
-		},
-		methods: {
-			initAppList() {
-				collectionList({
-					pageNum: this.pageNum,
-					pageSize: this.pageSize
-				}).then(res => {
-					this.applist = res.rows
-					this.total = res.total
-					this.$nextTick(() => {
-						this.loading = false
-					})
-				})
-			},
-			delSc(index) {
-				delFavorites(this.applist[index].customerId).then(res => {
-					if (res.code == 200) {
-						this.$set(this.applist[index], 'collectionStatus', '0')
-						this.Toast('取消收藏成功!');
-						delete this.applist.splice(index, 1)
-					}
-				})
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.content {
-		padding-bottom: 1rpx;
-	}
-
-	.swiper-box {
-		position: sticky;
-		top: 0px;
-		left: 0;
-		height: 422rpx;
-		z-index: 9;
-	}
-
-	.sticky-top {
-		position: sticky;
-		top: 192rpx;
-		left: 0;
-		margin: 30rpx 30rpx;
-		border-radius: 20rpx;
-		overflow: hidden;
-		background-color: #4fc08d;
-		z-index: 10;
-		display: flex;
-		justify-content: center;
-		align-items: center;
-		// border-top-left-radius: 14px;
-		// border-top-right-radius: 14px;
-		padding-right: 3%;
-
-		.top-search {
-			flex: 1;
-		}
-	}
-
-	.sticky {
-		position: sticky;
-		top: 295rpx;
-		left: 0;
-		background-color: #fff;
-		z-index: 9;
-		margin: 30rpx 30rpx;
-		border-radius: 20rpx;
-
-		.grid {
-			display: flex;
-			justify-content: space-between;
-			padding: 1% 2%;
-			margin-bottom: 2%;
-			border-bottom-left-radius: 10px;
-			border-bottom-right-radius: 10px;
-
-			.grid-item {
-				width: 50px;
-				height: 60px;
-				display: flex;
-				justify-content: center;
-				flex-direction: column;
-				align-items: center;
-				font-size: 12px;
-			}
-		}
-	}
-
-	.list-item {
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		background-color: #FFFFFF;
-		height: 170rpx;
-		padding: 34rpx 20rpx;
-		margin: 24rpx 30rpx;
-		border-radius: 20rpx;
-
-		.avatar {
-			flex-shrink: 0;
-			width: 161rpx;
-			height: 161rpx;
-			margin-right: 16rpx;
-		}
-
-		.item-right {
-			flex: 1;
-			display: flex;
-			flex-direction: column;
-			justify-content: space-between;
-			height: 200rpx;
-
-			.top {
-				.icon {
-					margin-top: -20rpx;
-					padding: 20rpx;
-				}
-
-				display: flex;
-				justify-content: flex-end;
-			}
-
-			.center {
-				align-self: flex-start;
-
-				.details {
-					width: 436rpx;
-					height: 70rpx;
-					font-size: 26rpx;
-					font-family: PingFang SC;
-					font-weight: 400;
-					color: #0F0404;
-					display: -webkit-box;
-					margin-bottom: 20rpx;
-					overflow: hidden;
-					text-overflow: ellipsis;
-					word-wrap: break-word;
-					white-space: normal !important;
-					-webkit-line-clamp: 2;
-					-webkit-box-orient: vertical;
-				}
-			}
-
-
-			.bottom {
-				display: flex;
-				justify-content: space-between;
-				align-items: center;
-
-				.title {
-					padding: 3rpx 12rpx;
-					height: 30rpx;
-					background: #FFE6E6;
-					border: 1rpx solid #E31818;
-					border-radius: 2rpx;
-					font-size: 20rpx;
-					font-family: PingFang SC;
-					font-weight: 400;
-					color: #E31818;
-					line-height: 20rpx;
-					display: flex;
-					justify-content: center;
-					align-items: center;
-				}
-
-				.right {
-					width: 170rpx;
-					display: flex;
-					justify-content: space-between;
-					align-items: center;
-					font-size: 22rpx;
-					font-family: PingFang SC;
-					font-weight: 400;
-					color: #999999;
-					line-height: 35rpx;
-
-					.flex {
-						display: flex;
-						justify-content: center;
-
-						.icon {
-							margin-right: 5rpx;
-						}
-					}
-				}
-			}
-		}
-	}
-</style>

+ 0 - 41
pages/dianying/dianying.vue

@@ -1,41 +0,0 @@
-<template>
-	<view>
-		<swiper class="swiper-box" :current="current" autoplay circular>
-			<swiper-item>
-				<image class="image" src="http://image.jppt.com.cn/zzjs/2021-04-09/others/1617954376809.jpg" mode="aspectFill"
-				 :draggable="false" @click="goMiniApp({appletAddress:'wxb47185e82704dda8'})" />
-			</swiper-item>
-			<swiper-item>
-				<image class="image" src="http://image.jppt.com.cn/zzjs/2021-04-12/others/1618190238218.jpg"
-				 mode="aspectFill" :draggable="false" @click="goUrl('/pages/webview/webview')" />
-			</swiper-item>
-			<swiper-item>
-				<image class="image" src="http://image.jppt.com.cn/zzjs/2021-04-12/others/1618190251643.jpg"
-				 mode="aspectFill" :draggable="false" @click="goUrl('/pages/webview/webview')" />
-			</swiper-item>
-		</swiper>
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-				
-			}
-		},
-		methods: {
-			
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.swiper-box {
-		height: 622rpx;
-		.image {
-			width: 100%;
-			height: 100%;
-		}
-	}
-</style>

+ 0 - 449
pages/index/components/applist.vue

@@ -1,449 +0,0 @@
-<template>
-	<scroll-view scroll-y class="content" @scrolltolower='onBottom'>
-		<topbar />
-		<view class="back">
-			<view class="sticky">
-				<van-search class='top-search' shape="round" background="#fff" placeholder="请输入搜索关键词" @search="onSearch" @change='onSearchChange' />
-				<view class="grid">
-					<view class="grid-item" :class="{border:listType==0}" @click="listType=0">
-						<van-icon name="/static/imgs/jx.png" size="30px" />
-						<text class="text">精选</text>
-					</view>
-					<view class="grid-item" :class="{border:listType==item.id}" @click="listType=item.id" v-for="(item,index) in typeList"
-					 :key='index'>
-						<van-icon :name="item.fileUrl || '/static/imgs/wxtb.png'" size="30px" />
-						<text class="text">{{item.productName}}</text>
-					</view>
-					<view class="grid-item" :class="{border:listType==5}" @click="moreShow=!moreShow,typeMore()">
-						<van-icon v-if='moreShow' name="/static/imgs/sq.png" size="30px" />
-						<van-icon v-else name="/static/imgs/gd.png" size="30px" />
-						<text class="text">{{moreShow?'收起':'更多'}}</text>
-					</view>
-				</view>
-			</view>
-
-			<loadSke :loading='loading' :list='applist'>
-				<view class='list-item' v-for="(item, index) in applist" :key="index" @click="clickJumpType(item)">
-					<image class="avatar" mode="aspectFit" :src="item.appletLogoFileUrl || '/static/imgs/shmr.png'" />
-					<view class="top">
-						<van-icon class="icon" v-if="item.collectionStatus=='0'" @tap.stop='addSc(index)' name="star-o" color='#999999' />
-						<van-icon class="icon" v-else @tap.stop='delSc(index)' name="star" color='#dfdf00' />
-						<van-icon class="icon" name="ellipsis" size='20' color='#999999' @tap.stop='showShare=true' />
-					</view>
-					<view class="item-right">
-						<view class="bottom">
-							<text class="title">{{item.corporateName}}</text>
-							<text class="type">{{itemType(item)}}</text>
-							<view class="right" v-if="false">
-								<view class="flex">
-									<van-icon class="icon" name="/static/imgs/评论.png" size='15' />
-									<text>54</text>
-								</view>
-								<view class="flex">
-									<van-icon class="icon" name="/static/imgs/好评率.png" size='15' />
-									<text>99%</text>
-								</view>
-							</view>
-						</view>
-						<view class="center" v-if="item.appletIntroduce">
-							<text class="details">{{item.appletIntroduce || `Appid: ${item.appletAddress}`}}</text>
-						</view>
-
-					</view>
-				</view>
-				<view v-if="bottomLoading" class="bottom-loading">
-					正在加载中...
-				</view>
-				<view class="ad-box list-item">
-					<ad unit-id="adunit-d8c1548cc9663765"></ad>
-				</view>
-				<view class="ad-box list-item">
-					<ad-custom unit-id="adunit-66504f2e91ee7be4"></ad-custom>
-				</view>
-			</loadSke>
-
-
-
-		</view>
-
-
-
-		<van-share-sheet :show="showShare" :options="options" @select="onSelect" @close='shareClose' />
-	</scroll-view>
-
-</template>
-
-<script>
-	import {
-		debounce
-	} from '@/utils/utils.js'
-	import {
-		typeList,
-		getTypeAppList,
-		addFavorites,
-		delFavorites,
-		BrowseRecordAdd,
-		getCarouselChartList
-	} from '@/api/applist.js'
-	export default {
-		data() {
-			return {
-				comname: 'xueche',
-				active: 0,
-				tabActive: 0,
-				info: [{
-					"id": 12,
-					"pictureName": "山泉心品",
-					"fileId": "77",
-					"fileUrl": "http://image.jppt.com.cn/zzjs/2021-04-09/others/1617954376809.jpg",
-					"jumpUrl": "{\"appId\":\"wxb47185e82704dda8\"}",
-					"jumpUrlType": "goMiniApp",
-					"status": 0
-				}],
-				current: 0,
-				mode: 'round',
-				applist: [],
-				typeList: {},
-				listType: 0,
-				loading: true,
-				showShare: false,
-				moreShow: false,
-				options: [{
-					name: '微信',
-					icon: 'wechat',
-					openType: 'share'
-				}],
-				pageNum: 1,
-				pageSize: 10,
-				total: 1,
-				customerName: '',
-				bottomLoading: false
-			}
-		},
-		mounted() {
-			this.initAppList()
-		},
-		watch: {
-			listType(val) {
-				this.customerName = ''
-				this.pageNum = 1
-				this.loading = true
-				getTypeAppList(val, {
-					pageNum: this.pageNum,
-					pageSize: this.pageSize
-				}).then(res => {
-					this.applist = res.rows
-					this.total = res.total
-					this.$nextTick(() => {
-						this.loading = false
-					})
-				})
-			}
-		},
-		methods: {
-			itemType(item) {
-				if (item.jumpUrlType == 'goMiniApp') {
-					return '小程序'
-				}
-				if (item.jumpUrlType == 'goPage') {
-					return '子页面'
-				}
-				if (item.jumpUrlType == 'goWebView') {
-					return 'WEB'
-				}
-			},
-			onSearchChange(e) {
-				this.customerName = e.detail
-			},
-			onSearch(e) {
-				this.pageNum = 1
-				this.loading = true
-				getTypeAppList(this.listType, {
-					pageNum: this.pageNum,
-					pageSize: this.pageSize,
-					customerName: e.detail
-				}).then(res => {
-					this.applist = res.rows
-					this.total = res.total
-					this.$nextTick(() => {
-						this.loading = false
-					})
-				})
-			},
-			initAppList() {
-				typeList({
-					pid: 0
-				}).then(res => {
-					this.typeList = res.rows.slice(0, 8)
-				})
-				getTypeAppList(0, {
-					pageNum: 1,
-					pageSize: 10
-				}).then(res => {
-					this.applist = res.rows
-					this.total = res.total
-					this.$nextTick(() => {
-						this.loading = false
-					})
-				})
-			},
-			onBottom() {
-				if(this.bottomLoading) return
-				if (this.total - this.pageNum * this.pageSize <= 0) {
-					return
-				}
-				this.bottomLoading=true
-				this.pageNum++
-				getTypeAppList(this.listType, {
-					pageNum: this.pageNum,
-					pageSize: this.pageSize,
-					customerName: this.customerName
-				}).then(res => {
-					this.applist = this.applist.concat(res.rows)
-					this.$nextTick(()=>{
-						this.bottomLoading=false
-					})
-				})
-			},
-			typeMore() {
-				if (this.moreShow) {
-					typeList({
-						pid: 0
-					}).then(res => {
-						this.typeList = res.rows
-					})
-				} else {
-					this.typeList = this.typeList.slice(0, 8)
-				}
-			},
-			addSc(index) {
-				addFavorites(this.applist[index].id).then(res => {
-					if (res.code == 200) {
-						this.$set(this.applist[index], 'collectionStatus', '1')
-						this.Toast('收藏成功!');
-					}
-				})
-			},
-			delSc(index) {
-				delFavorites(this.applist[index].id).then(res => {
-					if (res.code == 200) {
-						this.$set(this.applist[index], 'collectionStatus', '0')
-						this.Toast('取消收藏成功!');
-					}
-				})
-			},
-			shareClose() {
-				this.showShare = false;
-			},
-			onSelect(event) {
-				this.Toast(event.detail.name);
-				this.onClose();
-			},
-			getAppList() {
-				featuredAppList({
-					pageNum: 1,
-					pageSize: 10
-				}).then(res => {
-					console.log(res)
-					this.applist = res.rows
-					this.$nextTick(() => {
-						this.loading = false
-					})
-				})
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.bottom-loading {
-		text-align: center;
-		padding: 10rpx;
-	}
-
-	.ad-box {
-		margin: 40rpx;
-		box-sizing: border-box;
-		display: flex;
-		justify-content: center !important;
-		align-items: center;
-	}
-
-	.content {
-		padding-bottom: 1rpx;
-		height: 100%;
-	}
-
-	.swiper-box {
-		width: 100vw;
-		height: 56.25vw;
-
-		.image {
-			width: 100%;
-			height: 100%;
-		}
-	}
-
-	.sticky {
-		position: sticky;
-		top: 0rpx;
-		left: 0;
-		background-color: #fff;
-		z-index: 9;
-		margin-bottom: 20rpx;
-
-		.grid {
-			display: flex;
-			flex-wrap: wrap;
-			justify-content: flex-start;
-			overflow: auto;
-
-			.grid-item {
-				flex-shrink: 0;
-				width: 20%;
-				height: 130rpx;
-				display: flex;
-				justify-content: center;
-				flex-direction: column;
-				align-items: center;
-				text-align: center;
-				font-size: 34rpx;
-				padding: 10rpx;
-				box-sizing: border-box;
-				position: relative;
-
-				.text {
-					font-size: .8em;
-					margin-top: 5rpx;
-					color: #999999;
-					font-weight: 400;
-				}
-			}
-
-			.border::after {
-				content: '';
-				position: absolute;
-				bottom: 5rpx;
-				width: 30rpx;
-				height: 5rpx;
-				background-color: red;
-			}
-		}
-	}
-
-	.list-item {
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		background-color: #FFFFFF;
-		padding: 20rpx;
-		margin: 2rpx 0rpx;
-		position: relative;
-
-		.avatar {
-			flex-shrink: 0;
-			width: 100rpx;
-			height: 100rpx;
-			border-radius: 50%;
-			border: 1px solid #1989FA;
-			margin-right: 16rpx;
-		}
-
-		.top {
-			display: flex;
-			justify-content: flex-end;
-			position: absolute;
-			top: 10rpx;
-			right: 0;
-
-			.icon {
-				margin-top: -20rpx;
-				padding: 20rpx;
-			}
-		}
-
-		.item-right {
-			flex: 1;
-			display: flex;
-			flex-direction: column;
-			justify-content: space-between;
-			// height: 200rpx;
-
-
-
-			.center {
-				align-self: flex-start;
-
-				.details {
-					width: 436rpx;
-					// height: 70rpx;
-					font-size: 26rpx;
-					font-family: PingFang SC;
-					font-weight: 400;
-					color: #999999;
-					display: -webkit-box;
-					margin-bottom: 20rpx;
-					overflow: hidden;
-					text-overflow: ellipsis;
-					word-wrap: break-word;
-					white-space: normal !important;
-					-webkit-line-clamp: 2;
-					-webkit-box-orient: vertical;
-				}
-			}
-
-
-			.bottom {
-				display: flex;
-				justify-content: flex-start;
-				align-items: center;
-				margin: 20rpx 0;
-
-				.title {
-					max-width: 300rpx;
-					white-space: nowrap;
-					text-overflow: ellipsis;
-					overflow: hidden;
-					word-break: break-all;
-					font-family: PingFang SC;
-					font-weight: 400;
-				}
-
-				.type {
-					margin-left: 10rpx;
-					padding: 3rpx 12rpx;
-					height: 30rpx;
-					border: 2rpx solid #999999;
-					border-radius: 20rpx;
-					font-size: 20rpx;
-					color: #999999;
-					line-height: 20rpx;
-					display: flex;
-					justify-content: center;
-					align-items: center;
-				}
-
-				.right {
-					width: 170rpx;
-					display: flex;
-					justify-content: space-between;
-					align-items: center;
-					font-size: 22rpx;
-					font-family: PingFang SC;
-					font-weight: 400;
-					color: #999999;
-					line-height: 35rpx;
-
-					.flex {
-						display: flex;
-						justify-content: center;
-
-						.icon {
-							margin-right: 5rpx;
-						}
-					}
-				}
-			}
-		}
-	}
-</style>

+ 0 - 414
pages/index/components/cinema.vue

@@ -1,414 +0,0 @@
-<template>
-	<scroll-view scroll-y class="cinema">
-		<view class='topbar'>
-			<topbar>
-				<view class="topbar-box">
-					<view class="left-box" @click="goPage(`/pages/cinema/citylist?cityList=${JSON.stringify(cityList)}`,null,{cityList:cityList})">
-						<van-icon name="location" />
-						<text>{{address}}</text>
-						<van-icon name="arrow-down" />
-					</view>
-					<van-search class='top-search' shape="round" background="#fff" placeholder="请输入电影名称" @search="onSearch" @change='onSearchChange' />
-				</view>
-			</topbar>
-		</view>
-		<view class="tabs-box">
-			<van-tabs :active='tabActive' animated sticky offset-top='87' @change='tabsChange'>
-				<van-tab title="热映">
-					<loadSke :loading='hotLoading' :list='hotList'>
-						<view class="flex-box">
-							<view @click="goPage(`/pages/cinema/cinemalist?filmId=${item.filmId}&cityId=${cityId}&location=${location}`)"
-							 class="film-box" v-for="(item,index) in hotList" :key='item.filmId'>
-								<image :src="item.pic" mode="scaleToFill" class="img" draggable></image>
-								<view class="bottom-box">
-									<view class="tit">
-										<text class="text-1">{{item.name}}</text>
-										<text class="text-2">{{item.grade ?'评分'+item.grade : '暂无评分'}}</text>
-									</view>
-									<view class="des-box">
-										<view class="des">{{item.filmTypes}}</view>
-										<view class="des">{{item.cast}}</view>
-									</view>
-			
-									<button type="default" class="buy">
-										购 票
-									</button>
-								</view>
-							</view>
-						</view>
-					</loadSke>
-				</van-tab>
-				<van-tab title="影院">
-					<loadSke :loading='cinemaLoading' :list='cinemaList'>
-						<view class="cinema-box" v-for="(item,index) in cinemaList" :key='item.cinemaId' @click='goPage(`/pages/cinema/schedulelist?cinemaId=${item.cinemaId}&filmId=${filmId}`)'>
-							<view class="tit">
-								<text>{{item.cinemaName}}</text>
-								<text class="text-2">{{item.distance}}km</text>
-							</view>
-							<text class="address">{{item.address}}</text>
-						</view>
-					</loadSke>
-				</van-tab>
-				<van-tab title="即将上映">
-					<loadSke :loading='soonLoading'>
-						<view class="soon-box" v-for="(ObjItem,ObjIndex) in soonList" :key='ObjIndex'>
-							<view class="tit-text">
-								<van-icon class='icon' name="https://t1-1305573081.cos.ap-shanghai.myqcloud.com/wxapp/static/imgs/%E6%97%A5%E6%9C%9F.png" />
-								{{ObjIndex}}
-							</view>
-							<view class="flex-box">
-								<view class="film-box" v-for="(item,index) in ObjItem" :key='item.filmId'>
-									<image :src="item.pic" mode="scaleToFill" class="img" draggable></image>
-									<view class="bottom-box">
-										<view class="tit">
-											<text class="text-1">{{item.name}}</text>
-											<text class="text-2">{{item.grade ?'评分'+item.grade : '暂无评分'}}</text>
-										</view>
-										<view class="des-box">
-											<view class="des">{{item.filmTypes}}</view>
-											<view class="des">{{item.cast}}</view>
-										</view>
-									</view>
-								</view>
-							</view>
-						</view>
-					</loadSke>
-				</van-tab>
-			</van-tabs>
-		</view>
-		
-	</scroll-view>
-</template>
-
-
-<script>
-	import loadSke from '@/components/skeleton/index/index.vue'
-	import {
-		getPayData
-	} from '@/api/pay.js'
-	import {
-		amapRegeo
-	} from '@/api/amap.js'
-	import {
-		getHotList,
-		getSoonList,
-		getCityList,
-		getInfo,
-		getFilmDiscount,
-		getCinemaList
-	} from '@/api/cinema.js'
-	export default {
-		components: {
-			loadSke
-		},
-		data: () => ({
-			tabActive: 0,
-			hotList: [],
-			soonList: {},
-			hotLoading: true,
-			soonLoading: true,
-			location: [119.131390, 26.150210],
-			cityList: [],
-			address: '定位中',
-			cinemaList: {},
-			cinemaLoading: true
-		}),
-		async mounted() {
-			this.setFilmDiscount()
-			await this.getLocation()
-			this.address = this.$store.state.cinema.cityObj.regionName;
-			this.init()
-			this.cinemaListInit()
-		},
-		computed: {
-			cityId() {
-				return this.$store.state.cinema.cityId;
-			}
-		},
-		watch: {
-			cityId() {
-				this.address = this.$store.state.cinema.cityObj.regionName;
-				this.init()
-				this.cinemaListInit()
-			}
-		},
-		methods: {
-			onSearch(e){
-				console.log(e)
-			},
-			onSearchChange(e){
-				console.log(e)
-			},
-			tabsChange(e) {
-				this.tabActive = e.detail.index
-			},
-			setFilmDiscount() {
-				getFilmDiscount().then(res => {
-					this.$store.commit('SET_FILMDISCOUNT', res.data)
-				})
-			},
-			async getLocation() {
-				let location = await wx.getLocation()
-				this.location = [location.longitude.toFixed(6), location.latitude.toFixed(6)]
-				let address = await amapRegeo({
-					location: this.location.toString()
-				})
-				let cityListRes = await getCityList()
-				let cityList = cityListRes.data.data.list
-				let cityObj = {}
-				cityList.map((val) => {
-					cityObj[val.pinYin] || (cityObj[val.pinYin] = [])
-					cityObj[val.pinYin].push(val)
-					if (val.regionName == address.regeocode.addressComponent.city.slice(0, -1)) {
-						this.selectCity(val)
-					}
-				})
-				this.cityList = cityObj
-			},
-			async init() {
-				this.hotLoading = true
-				this.soonLoading = true
-				let hotListRes = await getHotList({
-					cityId: this.cityId
-				})
-				this.hotList = hotListRes.data.data.list
-				this.$nextTick(()=>{
-					this.hotLoading = false
-				})
-
-				let soonListRes = await getSoonList({
-					cityId: this.cityId
-				})
-				let soonListObj = {}
-				soonListRes.data.data.list.forEach((val) => {
-					soonListObj[val.publishDate.slice(0, 10)] || (soonListObj[val.publishDate.slice(0, 10)] = [])
-					soonListObj[val.publishDate.slice(0, 10)].push(val)
-				})
-				this.soonList = soonListObj
-				this.$store.commit('SET_FILMLIST', this.hotList.concat(soonListRes.data.data.list))
-				this.$nextTick(()=>{
-					this.soonLoading = false
-				})
-			},
-			async cinemaListInit() {
-				this.cinemaLoading = true
-				let showListRes = await getCinemaList({
-					cityId: this.cityId,
-					latitude: this.location[1],
-					longitude: this.location[0],
-				})
-				showListRes.data.data.list.map(val => {
-					val.distance = (Math.sqrt((val.latitude - this.location[1]) ** 2 + (val.longitude - this.location[0]) ** 2) *
-						111).toFixed(2)
-					return val
-				})
-				showListRes.data.data.list.sort(function(a, b) {
-					return a.distance - b.distance
-				})
-				this.cinemaList = showListRes.data.data.list
-				this.cinemaLoading = false
-			},
-			selectCity(obj) {
-				this.$store.commit('SET_CITYOBJ', obj)
-				this.$store.commit('SET_CITYID', obj.cityId)
-			}
-		}
-	}
-</script>
-
-<style scoped lang="scss">
-	.cinema{
-		height: 100%;
-		position: relative;
-	}
-	
-	.topbar {
-		position: fixed;
-		top: 0;
-		left: 0;
-		right: 0;
-		z-index: 1;
-		.topbar-box {
-			display: flex;
-			align-items: center;
-		
-			.left-box {
-				min-width: 150rpx;
-				display: flex;
-				justify-content: center;
-				align-items: center;
-				margin-left: 20rpx;
-				text{
-					white-space: nowrap;
-				}
-			}
-		}
-	}
-	
-	.tabs-box{
-		margin-top: 160rpx;
-	}
-
-	
-
-	.cinema-box {
-		padding: 30rpx;
-		border-top: 1rpx solid #E8E8E8;
-		background-color: #FFFFFF;
-		display: flex;
-		flex-direction: column;
-
-		.tit {
-			display: flex;
-			justify-content: space-between;
-
-			.text-1 {
-				font-size: 30rpx;
-				color: #0F0404;
-			}
-
-			.text-2 {
-				font-size: 26rpx;
-				color: #999999;
-				white-space: nowrap;
-			}
-		}
-
-		.address {
-			margin-top: 20rpx;
-			width: 600rpx;
-			font-size: 26rpx;
-			color: #666666;
-			white-space: nowrap;
-			overflow: hidden;
-			text-overflow: ellipsis;
-		}
-	}
-
-	.tab {
-		display: flex;
-		justify-content: space-around;
-		align-items: stretch;
-		background-color: #FFFFFF;
-		position: sticky;
-		top: 0;
-		left: 0;
-		z-index: 1;
-
-		.text {
-			padding: 30rpx 0;
-			font-size: 30rpx;
-			color: #0F0404;
-
-		}
-
-		.hover {
-			border-bottom: 6rpx solid red;
-		}
-
-		.location-box {
-			padding: 30rpx 0;
-			font-size: 30rpx;
-			color: #0F0404;
-			display: flex;
-			justify-content: center;
-			align-items: center;
-		}
-
-	}
-
-	.flex-box {
-		display: flex;
-		justify-content: space-between;
-		flex-wrap: wrap;
-		background: #FFFFFF;
-		margin-top: 1rpx;
-		padding: 0rpx 20rpx;
-		padding-bottom: 20rpx;
-
-		.film-box {
-			width: 334rpx;
-			border-radius: 20rpx;
-			overflow: hidden;
-			background: #FFFFFF;
-			margin: 30rpx 11rpx 0;
-			box-shadow: 0px 2px 16px 0px rgba(68, 6, 6, 0.2);
-
-			.img {
-				width: 100%;
-				height: 456rpx;
-			}
-
-			.bottom-box {
-				padding: 30rpx 20rpx;
-
-				.tit {
-					display: flex;
-					justify-content: space-between;
-
-					.text-1 {
-						width: 200rpx;
-						font-size: 26rpx;
-						overflow: hidden;
-						text-overflow: ellipsis;
-						white-space: nowrap;
-					}
-
-					.text-2 {
-						font-size: 26rpx;
-						color: #ED4F24;
-						white-space: nowrap;
-					}
-				}
-
-				.des-box {
-					margin-top: 20rpx;
-
-					.des {
-						width: 100%;
-						font-size: 22rpx;
-						color: #666666;
-						overflow: hidden;
-						text-overflow: ellipsis;
-						white-space: nowrap;
-					}
-				}
-
-				.buy {
-					margin-top: 30rpx;
-					width: 126rpx;
-					height: 60rpx;
-					background: linear-gradient(90deg, #E31818, #ED3E24, #ED4F24);
-					border-radius: 30rpx;
-					font-size: 26rpx;
-					font-weight: 400;
-					color: #FFFFFF;
-					display: flex;
-					justify-content: center;
-					align-items: center;
-					white-space: nowrap;
-				}
-			}
-
-		}
-
-	}
-
-	.soon-box {
-		margin-top: 20rpx;
-
-		.tit-text {
-			background-color: #FFF0E5;
-			padding: 28rpx 55rpx;
-			font-size: 26rpx;
-			font-weight: bold;
-			color: #0F0404;
-			display: flex;
-			align-items: center;
-
-			.icon {
-				margin-right: 20rpx;
-			}
-		}
-	}
-</style>

+ 0 - 106
pages/index/components/find/index.vue

@@ -1,106 +0,0 @@
-<template>
-	<view class="content">
-		<swiper class="swiper-box" :current="current" autoplay circular>
-			<swiper-item v-for="(item, index) in info" :key="index">
-				<view :class="item.colorClass" class="swiper-item">
-					<image class="image" :src="item.url" mode="aspectFill" :draggable="false" @click="onBanner(index)" />
-				</view>
-			</swiper-item>
-		</swiper>
-
-		<view class="">
-			<component is="xueche" class="animation-fade"></component>
-		</view>
-
-	</view>
-	</view>
-</template>
-
-<script>
-	import xueche from '@/components/home/index'
-	export default {
-		components: {
-			xueche
-		},
-		data() {
-			return {
-				active: 0,
-				info: [{
-						colorClass: 'uni-bg-red',
-						url: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/094a9dc0-50c0-11eb-b680-7980c8a877b8.jpg',
-						content: '内容 A'
-					},
-					{
-						colorClass: 'uni-bg-green',
-						url: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/094a9dc0-50c0-11eb-b680-7980c8a877b8.jpg',
-						content: '内容 B'
-					},
-					{
-						colorClass: 'uni-bg-blue',
-						url: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/094a9dc0-50c0-11eb-b680-7980c8a877b8.jpg',
-						content: '内容 C'
-					}
-				],
-				current: 0,
-				mode: 'round',
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	.content {
-		background-color: #F1F1F1;
-	}
-
-
-	.swiper-box {
-		width: 100vw;
-		height: 56.25vw;
-
-		.image {
-			width: 100%;
-		}
-	}
-
-
-	.sticky-top {
-		position: sticky;
-		top: 0px;
-		left: 0;
-		background-color: #4fc08d;
-		z-index: 10;
-		display: flex;
-		justify-content: center;
-		align-items: center;
-		// border-top-left-radius: 14px;
-		// border-top-right-radius: 14px;
-		padding-right: 3%;
-
-		.top-search {
-			flex: 1;
-		}
-	}
-
-	.sticky-bottom {
-		position: sticky;
-		bottom: 0;
-		left: 0;
-		background-color: #fff;
-		z-index: 10;
-	}
-
-	.fadeIn {
-		animation: fadeIn 5s linear 2s infinite alternate;
-	}
-
-	@keyframes fadeIn {
-		from {
-			opacity: 0;
-		}
-
-		to {
-			opacity: 1;
-		}
-	}
-</style>

+ 0 - 439
pages/index/components/home.vue

@@ -1,439 +0,0 @@
-<template>
-	<scroll-view class="home" scroll-y @scrolltolower='onBottom'>
-		<!-- <van-tabs >
-		  <van-tab title="标签 1">内容 1</van-tab>
-		  <van-tab title="标签 2">内容 2</van-tab>
-		  <van-tab title="标签 3">内容 3</van-tab>
-		  <van-tab title="标签 4">内容 4</van-tab>
-		</van-tabs> -->
-		<view class="top-list">
-			<image class="background-img" style="width: 100vw;" src="https://t1-1305573081.cos.ap-shanghai.myqcloud.com/wxapp/static/imgs/%E9%A1%B6%E9%83%A8%E8%83%8C%E6%99%AF3.png"
-			 mode="widthFix"></image>
-			<topbar class="topbar-slot">
-				<view>
-					<text style="color: #FFFFFF;">极速生活圈</text>
-				</view>
-			</topbar>
-
-			<loadSke :loading='topLoading' :list='bannerList'>
-				<swiper class="swiper-box" :current="current" autoplay circular indicator-dots>
-					<swiper-item v-for="(item,index) in bannerList" :key='index'>
-						<image @click="clickJumpType(item)" class="image" :src="item.fileUrl" mode="scaleToFill" :draggable="false" />
-					</swiper-item>
-				</swiper>
-
-				<view class="eat-box">
-					<view class="eat" v-for="(item,index) in couponList" :key='index' @click="clickJumpType(item)">
-						<image :src="item.fileUrl" mode="scaleToFill" class="img"></image>
-						<view class="text-box">
-							<text class="text-1">{{item.pictureName}}</text>
-							<text class="text-2">{{item.dataDescribe.split(' ')[0]}}</text>
-							<text class="text-3">{{item.dataDescribe.split(' ')[1]}}</text>
-						</view>
-					</view>
-				</view>
-
-				<view class="menu-box">
-					<view class="menu" v-for="(item,index) in menuList" :key='index' @click="clickJumpType(item)">
-						<image :src="item.fileUrl" mode="scaleToFill" class="img"></image>
-						<text class="text-1">{{item.pictureName}}</text>
-						<text class="text-2">{{item.dataDescribe || '暂无描述'}}</text>
-					</view>
-				</view>
-			</loadSke>
-		</view>
-
-		<view class="bottom-ad" v-for="(item,index) in bottomAD" :key='index' @click="clickJumpType(item)">
-			<image style="width: 100%;" :src="item.fileUrl" mode="widthFix"></image>
-			<text>今日仅剩{{dynamicQuantity(index)}}个</text>
-			<button>免费领取</button>
-		</view>
-
-		<view class="item-box">
-			<view class="item-titBox">
-				<text class="item-tit">限时特价</text>
-				<!-- <text class="item-tit-right" @tap='go()'>更多视频 ></text> -->
-			</view>
-			<loadSke :loading='pddLoading' :list='pddList'>
-				<view class="flex-box">
-					<view class="film-box" v-for="(item,index) in pddList" :key='index' @click="goMiniApp(JSON.stringify({appId:item.we_app_info.app_id,path:item.we_app_info.page_path}))">
-						<image :src="item.goods_image_url" mode="widthFix" class="img" draggable></image>
-						<view class="bottom-box">
-							<view class="tit">
-								<text class="text-1">{{item.goods_name}}</text>
-							</view>
-							<view class="des-box">
-								<view class="des">{{item.unified_tags}}</view>
-							</view>
-							<view class="buy-box">
-								<text class="price">{{'¥'+(item.min_group_price)/100}}</text>
-								<button type="default" class="buy">活动价 {{'¥'+(item.min_group_price-item.coupon_discount)/100}}</button>
-							</view>
-						</view>
-					</view>
-					<view v-if="pddDataLoading" class="bottom-loading">
-						正在加载中...
-					</view>
-				</view>
-			</loadSke>
-		</view>
-	</scroll-view>
-</template>
-
-<script>
-	import {
-		getHomePageDataList,
-		getPDD,
-		getPddWxData
-	} from '@/api/home.js'
-	export default {
-		data: () => ({
-			bannerList: [],
-			couponList: [],
-			menuList: [],
-			bottomAD: [],
-			topLoading: true,
-			pddList: [],
-			pddLoading: true,
-			limit: 6,
-			page: 0,
-			pddDataLoading: false
-		}),
-		mounted() {
-			this.init()
-		},
-		methods: {
-			onBottom() {
-				if (this.pddDataLoading) return
-				this.pddDataLoading = true
-				this.page++
-				getPddWxData({
-					limit: this.limit,
-					offset: this.page * this.limit
-				}).then(res => {
-					this.pddList = this.pddList.concat(res)
-					this.$nextTick(() => {
-						this.pddLoading = false
-						this.pddDataLoading = false
-					})
-				})
-			},
-			dynamicQuantity(index) {
-				index++
-				let x = new Date().getHours() / 3
-				let num = ((x - 8) ** 2) + index * (8 - x) * 1 + index * 3 + 1
-				return parseInt(num)
-			},
-			init() {
-				getHomePageDataList().then(res => {
-					this.bannerList = res.data.carouselChart
-					this.couponList = res.data.coupon.slice(0, 4)
-					this.menuList = res.data.menu
-					this.bottomAD = res.data.bottomAD
-					this.$nextTick(() => {
-						this.topLoading = false
-					})
-				})
-				getPddWxData({
-					limit: this.limit,
-					offset: this.page * this.limit
-				}).then(res => {
-					this.pddList = res
-					this.$nextTick(() => {
-						this.pddLoading = false
-					})
-				})
-			}
-		}
-	}
-</script>
-
-<style scoped lang="scss">
-	.home{
-		height: 100%;
-	}
-	
-	.top-list {
-		padding: 30rpx;
-		padding-top: 0;
-		box-sizing: border-box;
-		width: 100%;
-		background-color: #FFFFFF;
-		position: relative;
-
-		.topbar-slot {
-			z-index: 1;
-			align-self: center;
-			display: flex;
-			justify-content: center;
-		}
-
-		.background-img {
-			position: absolute;
-			top: 0;
-			left: 0;
-		}
-
-		.swiper-box {
-			width: 690rpx;
-			height: 342rpx;
-			overflow: hidden;
-
-			.image {
-				width: 100%;
-				height: 100%;
-				border-radius: 10px;
-			}
-		}
-
-		.eat-box {
-			margin-top: 30rpx;
-			display: flex;
-			justify-content: space-between;
-
-			.eat {
-				width: 158rpx;
-				height: 240rpx;
-				position: relative;
-
-				.img {
-					width: 100%;
-					height: 100%;
-				}
-
-				.text-box {
-					display: flex;
-					flex-direction: column;
-					justify-content: center;
-					align-items: center;
-					position: absolute;
-					bottom: 10rpx;
-					left: 50%;
-					width: 100%;
-					transform: translateX(-50%);
-
-					.text-1 {
-						font-size: 24rpx;
-						color: #0F0404;
-						text-align: center;
-					}
-
-					.text-2 {
-						margin-top: 5rpx;
-						font-size: 20rpx;
-						color: #FE3232;
-						text-align: center;
-					}
-
-					.text-3 {
-						font-size: 20rpx;
-						color: #666666;
-						text-align: center;
-					}
-				}
-
-			}
-		}
-
-		.menu-box {
-			display: flex;
-			justify-content: flex-start;
-			flex-wrap: wrap;
-			margin: 0 -10rpx;
-
-			.menu {
-				width: 20%;
-				padding: 0 10rpx;
-				box-sizing: border-box;
-				// height: 121rpx;
-				margin-top: 40rpx;
-				display: flex;
-				flex-direction: column;
-				justify-content: space-between;
-				align-items: center;
-
-				.img {
-					flex-shrink: 0;
-					width: 83rpx;
-					height: 83rpx;
-					border-radius: 50%;
-				}
-
-				.text-1 {
-					margin-top: 10rpx;
-					font-size: 24rpx;
-					color: #0F0404;
-					text-align: center;
-					overflow: hidden;
-					text-overflow: ellipsis;
-					white-space: nowrap;
-				}
-
-				.text-2 {
-					font-size: 20rpx;
-					color: #666666;
-					text-align: center;
-					overflow: hidden;
-					text-overflow: ellipsis;
-					white-space: nowrap;
-				}
-			}
-		}
-
-
-	}
-
-	.bottom-ad {
-		margin-top: -15rpx;
-		position: relative;
-
-		&:nth-child(2) {
-			margin-top: 20rpx;
-		}
-
-		text {
-			position: absolute;
-			top: 104rpx;
-			left: 220rpx;
-			padding: 10rpx 15rpx;
-			background: #FFE1D9;
-			font-size: 22rpx;
-			font-family: PingFang SC;
-			font-weight: 400;
-			color: #A40303;
-		}
-
-		button {
-			position: absolute;
-			top: 67rpx;
-			right: 40rpx;
-			display: inline-block;
-			margin: 0;
-			padding: 0rpx 26rpx;
-			background: linear-gradient(90deg, #E31818, #ED3E24, #ED4F24);
-			border-radius: 30rpx;
-			font-size: 26rpx;
-			font-family: PingFang SC;
-			font-weight: 400;
-			color: #FFFFFF;
-		}
-	}
-
-	.item-box {
-		background-color: #fff;
-		// margin-top: 40rpx;
-
-		.item-titBox {
-			display: flex;
-			justify-content: space-between;
-			align-items: center;
-			padding: 20rpx;
-			border-bottom: 1rpx solid #e8e8e8;
-
-			.item-tit {
-				border-left: 8rpx solid #E31818;
-				font-size: 30rpx;
-				padding: 11rpx;
-				margin-left: 20rpx;
-			}
-
-			.item-tit-right {
-				font-size: 26rpx;
-				color: #666666;
-				line-height: 58rpx;
-				padding: 11rpx;
-			}
-		}
-
-		.flex-box {
-			width: 100%;
-			display: flex;
-			justify-content: center;
-			align-items: flex-start;
-			// flex-direction: column;
-			flex-wrap: wrap;
-			background-color: #F8F8F8;
-			padding-bottom: 20rpx;
-
-			.film-box {
-				width: 334rpx;
-				border-radius: 20rpx;
-				overflow: hidden;
-				background: #FFFFFF;
-				margin: 30rpx 11rpx 0;
-
-				.img {
-					width: 100%;
-				}
-
-				.bottom-box {
-					padding: 30rpx 20rpx;
-
-					.tit {
-						display: flex;
-						justify-content: space-between;
-
-						.text-1 {
-							width: 100%;
-							font-size: 26rpx;
-							overflow: hidden;
-							text-overflow: ellipsis;
-							// white-space: nowrap;
-						}
-					}
-
-					.des-box {
-						margin-top: 10rpx;
-
-						.des {
-							width: 100%;
-							font-size: 22rpx;
-							color: #666666;
-							overflow: hidden;
-							text-overflow: ellipsis;
-							white-space: nowrap;
-						}
-					}
-
-					.buy-box {
-						margin-top: 20rpx;
-						display: flex;
-						justify-content: flex-start;
-						align-items: center;
-
-						.price {
-							// color: #E31818;
-							text-decoration: line-through;
-							font-size: 34rpx;
-						}
-
-						.buy {
-							height: 40rpx;
-							background: linear-gradient(90deg, #E31818, #ED3E24, #ED4F24);
-							border-radius: 20rpx;
-							margin-left: 10rpx;
-							font-size: 20rpx;
-							color: #FFFFFF;
-							display: flex;
-							justify-content: center;
-							align-items: center;
-							white-space: nowrap;
-						}
-					}
-
-				}
-
-			}
-
-		}
-
-		.bottom-loading{
-			margin-top: 5rpx;
-			padding: 10rpx;
-		}
-	}
-
-	.ad-video {
-		margin-top: 40rpx;
-	}
-</style>

+ 0 - 82
pages/index/components/login.vue

@@ -1,82 +0,0 @@
-<template>
-	<view class="login">
-		<loadSke :loading='getUserInfo'>
-			<view class="user-info">
-				<view class="avatar">
-					<open-data type="userAvatarUrl"></open-data>
-				</view>
-				<view class="nickname">
-					<open-data type="userNickName"></open-data>
-				</view>
-				<button open-type="getUserProfile" @tap="getUserProfile">授权用户头像信息</button>
-			</view>
-		</loadSke>
-	</view>
-</template>
-
-<script>
-	import loadSke from '@/components/skeleton/login.vue'
-	export default {
-		components: {
-			loadSke
-		},
-		props: ['login'],
-		data: () => ({
-			getUserInfo: true
-		}),
-		async created() {
-			this.init()
-		},
-		methods: {
-			async init() {
-				if (true) {
-					let loginRes = await this.$store.dispatch('Login')
-					if (loginRes.code == 200) {
-						this.$emit('update:login', true)
-					}else{
-						this.Toast('登录失败');
-						this.$emit('update:login', true)
-					}
-				} else {
-					this.getUserInfo = false
-				}
-			},
-			getUserProfile: function(e) {
-				wx.getUserProfile({
-					desc: '业务需要',
-					success: res => {
-						console.log(res)
-					}
-				})
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.login {
-		width: 100vw;
-		height: 80vh;
-		display: flex;
-		justify-content: center;
-		align-items: center;
-
-		.user-info {
-			display: flex;
-			flex-direction: column;
-			justify-content: center;
-			align-items: center;
-
-			.avatar {
-				border-radius: 50%;
-				width: 100px;
-				height: 100px;
-				overflow: hidden;
-			}
-
-			.nickname {
-				text-align: center;
-			}
-		}
-	}
-</style>

+ 0 - 299
pages/index/components/topic/index.vue

@@ -1,299 +0,0 @@
-<template>
-	<view class="topic">
-		<view class="tit-box">
-			<text class="tit-tit">咸蛋黄酱,这是什么神仙食物</text>
-			<view class="author">
-				<van-icon class='icon' name="/static/imgs/zz.png" size="26rpx" />
-				<text class="tit-author">幸福天使&ensp;&ensp;{{new Date().toJSON().slice(0,10)}}</text>
-			</view>
-			<swiper class="swiper-box" :indicator-dots="true" :autoplay="true" :interval="3000" :duration="1000" circular>
-				<swiper-item v-for="(item,index) in 3" :key='index'>
-					<image class="swiper-image" src="https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/094a9dc0-50c0-11eb-b680-7980c8a877b8.jpg"
-					 mode="aspectFit" :draggable="false" />
-				</swiper-item>
-			</swiper>
-			<text class="tit-text">\t&ensp;&ensp;&ensp;&ensp;不管什么零食,沾上了“咸蛋黄”三个字就让人无法自拔,总是舔完手指还觉得不满足。最近集市上了款咸蛋黄酱,可以一勺一勺挖着吃,吃过的人都表示,这是什么神仙食物啊!同事告诉我,这一罐等于12颗咸蛋黄,只用正宗高邮咸鸭蛋,腌制30天以上的,所以吃起来才这么油亮粉沙、咸香浓郁。咸蛋黄酱是百搭食材,炒什么都好吃,还可以当做各种蘸料。甚至搭配米饭,不用其他多余的东西,一勺就能干掉半碗饭。自从这么吃过一回后,它的地位已经和我最爱的韩式拌饭不相上下了。好吃不贵,记得多买两罐,以免吃完还想吃。
-
-				&ensp;&ensp;&ensp;&ensp;最近集市上了款咸蛋黄酱,可以一勺一勺挖着吃,吃过的人都表示,这是什么神仙食物啊!同事告诉我,这一罐等于12颗咸蛋黄,只用正宗高邮咸鸭蛋,腌制30天以上的,所以吃起来才这么油亮粉沙、咸香浓郁。咸蛋黄酱是百搭食材,炒什么都好吃,还可以当做各种蘸料。甚至搭配米饭,不用其他多余的东西,一勺就能干掉半碗饭。自从这么吃过一回后,它的地位已经和我最爱的韩式拌饭不相上下了。好吃不贵,记得多买两罐,以免吃完还想吃。`</text>
-		</view>
-		<view class="productList">
-			<view v-for="(item,index) in 3" :key='index' class="productItem">
-				<image class="productList-image" src="https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/094a9dc0-50c0-11eb-b680-7980c8a877b8.jpg"
-				 mode="aspectFit" :draggable="false" />
-				<view class="productList-right">
-					<text class="tit">流水咸蛋黄酱210克</text>
-					<text class="des">细腻流沙,香浓咸鲜</text>
-					<text class="price">¥19.00 </text>
-					<button class="btn">去购买</button>
-				</view>
-			</view>
-		</view>
-		<view class="share">
-			<button class="btn">
-				<van-icon class='icon' name="/static/imgs/share.png" size="26px" />
-				分享给好友</button>
-		</view>
-		<view class="comment">
-			<view class="comment-tit">
-				<text class="tit-left">精选评论</text>
-				<text class="tit-right">全部评论 ></text>
-			</view>
-			<view v-for="(item,index) in 3" :key='index' class="comment-list">
-				<view class="comment-user">
-					<image class="user-ava" src="https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/094a9dc0-50c0-11eb-b680-7980c8a877b8.jpg"
-					 mode=""></image>
-					<view class="user-right">
-						<text class="user-name">终极吃货</text>
-						<view class="user-des">
-							<text class="time">{{new Date().toJSON()}}</text>
-							<text class="up">100点赞</text>
-						</view>
-					</view>
-				</view>
-				<view class="comment-des">
-					<text>咸蛋黄酱是百搭食材,炒什么都好吃,还可以当做各种蘸料。自从这么吃过一回后,它的地位已经和我最爱的韩式拌饭不相上下了。</text>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-</script>
-
-<style lang="scss" scoped>
-	.topic {
-		background: #F5F5F5;
-	}
-
-	.tit-box {
-		display: flex;
-		flex-direction: column;
-		background: #FFFFFF;
-		padding: 30rpx;
-
-		.tit-tit {
-			height: 46rpx;
-			font-size: 44rpx;
-			font-family: PingFang SC;
-			font-weight: bold;
-			color: #000000;
-			margin-bottom: 24rpx;
-		}
-
-		.author {
-			display: flex;
-			align-items: center;
-			margin-bottom: 43rpx;
-
-			.tit-author {
-				font-size: 26rpx;
-				font-family: PingFang SC;
-				font-weight: 400;
-				color: #666666;
-				margin-left: 5rpx;
-			}
-		}
-
-
-		.swiper-box {
-			width: 680rpx;
-			height: 382.5rpx;
-			margin-bottom: 30rpx;
-			background-color: #000000;
-
-			.swiper-image {
-				width: 100%;
-				height: 100%;
-			}
-		}
-
-		.tit-text {
-			font-size: 32rpx;
-			font-family: PingFang SC;
-			font-weight: 400;
-			color: #0F0404;
-			line-height: 48rpx;
-		}
-	}
-
-	.productList {
-		margin-top: 20rpx;
-		background: #FFFFFF;
-		margin-bottom: 30rpx;
-		padding: 0 30rpx;
-
-		.productItem {
-			display: flex;
-			justify-content: flex-start;
-			align-items: center;
-			padding: 30rpx 0;
-			border-bottom: 1rpx solid #E8E8E8;
-
-			&:last-child {
-				border-bottom: none !important;
-			}
-
-			.productList-image {
-				flex-shrink: 0;
-				width: 220rpx;
-				height: 220rpx;
-				border-radius: 10rpx;
-				background-color: #C8C7CC;
-			}
-
-			.productList-right {
-				box-sizing: border-box;
-				padding: 20rpx;
-				width: 470rpx;
-				display: flex;
-				flex-direction: column;
-
-				.tit {
-					height: 30rpx;
-					font-size: 30rpx;
-					font-family: PingFang SC;
-					font-weight: 400;
-					color: #0F0404;
-					margin-bottom: 18rpx;
-				}
-
-				.des {
-					height: 27rpx;
-					font-size: 26rpx;
-					font-family: PingFang SC;
-					font-weight: 400;
-					color: #666666;
-					margin-bottom: 20rpx;
-				}
-
-				.price {
-					height: 34rpx;
-					font-size: 26rpx;
-					font-family: Adobe Heiti Std;
-					font-weight: normal;
-					color: #E31818;
-					margin-bottom: 31rpx;
-				}
-
-				.btn {
-					width: 138rpx;
-					height: 50rpx;
-					background: linear-gradient(90deg, #E31818, #ED3E24, #ED4F24);
-					border-radius: 25rpx;
-					font-size: 26rpx;
-					font-family: PingFang SC;
-					font-weight: 400;
-					color: #FFFFFF;
-					line-height: 20rpx;
-					margin: 0;
-					display: flex;
-					align-items: center;
-				}
-			}
-		}
-	}
-
-
-	.share {
-		margin-bottom: 30rpx;
-		padding: 0 30rpx 10rpx;
-
-		.btn {
-			height: 100rpx;
-			background: linear-gradient(90deg, #E31818, #ED3E24, #ED4F24);
-			border-radius: 100rpx;
-			font-size: 32rpx;
-			font-family: PingFang SC;
-			font-weight: 400;
-			color: #FFFFFF;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			box-shadow: 0rpx 5rpx 10rpx #E31818;
-
-			.icon {
-				margin-right: 22rpx;
-			}
-		}
-	}
-
-	.comment {
-		padding: 30rpx;
-		background-color: #FFFFFF;
-
-		.comment-tit {
-			display: flex;
-			justify-content: space-between;
-			align-items: center;
-			padding-bottom: 15rpx;
-
-			.tit-left {
-				border-left: 8rpx solid #E31818;
-				font-size: 30rpx;
-				line-height: 58rpx;
-				padding: 0 11rpx;
-				color: #0F0404;
-			}
-
-			.tit-right {
-				font-size: 26rpx;
-				color: #999999;
-				line-height: 58rpx;
-				padding: 11rpx;
-			}
-		}
-
-		.comment-list {
-			border-top: 1rpx solid #e8e8e8;
-			padding-top: 32rpx;
-
-			.comment-user {
-				display: flex;
-				align-items: center;
-
-				.user-ava {
-					width: 80rpx;
-					height: 80rpx;
-					border-radius: 50%;
-					margin-right: 21rpx;
-				}
-
-				.user-right {
-					flex: 1;
-					display: flex;
-					flex-direction: column;
-					justify-content: space-between;
-					height: 70rpx;
-
-					.user-name {
-						font-size: 26rpx;
-						font-family: PingFang SC;
-						font-weight: 400;
-						color: #0F0404;
-						line-height: 20rpx;
-					}
-
-					.user-des {
-						display: flex;
-						justify-content: space-between;
-						font-size: 26rpx;
-						font-family: PingFang SC;
-						font-weight: 400;
-						color: #999999;
-					}
-				}
-			}
-
-			.comment-des {
-				font-size: 26rpx;
-				font-family: PingFang SC;
-				font-weight: 400;
-				color: #666666;
-				line-height: 39rpx;
-				padding: 23rpx 0;
-			}
-		}
-
-	}
-</style>

+ 0 - 288
pages/index/components/user.vue

@@ -1,288 +0,0 @@
-<template>
-	<scroll-view scroll-y class="content">
-		<view class="top">
-			<view class="avabox">
-				<van-image round class='img' width="200rpx" height="200rpx" :src="userData.headImage" />
-				<view class="avatitbox">
-					<text>{{userData.nickName}}</text>
-					<text v-if="userData.gzptUserId">{{studentInfo.logincode}}</text>
-					<view class="sync-btn" @tap='getUserProfile'>点击同步用户头像昵称</view>
-					<!-- <text v-else @click="idCardShow=!idCardShow">未绑定身份证点击绑定</text> -->
-				</view>
-			</view>
-		</view>
-
-		<view class="serviceBox">
-			<view class="tit">
-				<text>我的服务</text>
-			</view>
-			<view class="btnBox">
-				<button class="item-box" :plain='true' @click="goPage('/pages/user/order')">
-					<van-icon name="/static/imgs/order-icon.png" size="22px" />
-					<text class="text">我的订单</text>
-				</button>
-				<button class="item-box" :plain='true' @click="goPage('/pages/collectionList/index')">
-					<van-icon name="/static/imgs/wdsc.png" size="22px" />
-					<text class="text">我的收藏</text>
-				</button>
-				<button class="item-box" :plain='true' @click="goPage('/pages/browserecord/index')">
-					<van-icon name="/static/imgs/llzj.png" size="22px" />
-					<text class="text">浏览足迹</text>
-				</button>
-				<button class="item-box" :plain='true' open-type='feedback'>
-					<van-icon name="/static/imgs/yjfk.png" size="22px" />
-					<text class="text">意见反馈</text>
-				</button>
-			</view>
-
-		</view>
-
-		<view class="serviceBox">
-			<view class="tit">
-				<text>我的信息</text>
-			</view>
-			<van-cell title="我的设置" icon="/static/imgs/wdsz.png" is-link @tap="goPage('/pages/userset/index')" />
-			<button class="server" open-type="contact" :plain='true'>
-				<van-cell title="联系客服" icon="/static/imgs/lxkf.png" is-link />
-			</button>
-
-		</view>
-		
-		<view class="ad-box serviceBox">
-			<ad unit-id="adunit-d8c1548cc9663765"></ad>
-		</view>
-		
-		<van-popup :show="idCardShow" round>
-			<view class="idCard">
-				<van-divider contentPosition="center">绑定身份证信息</van-divider>
-				<van-cell-group>
-					<van-field :value="idCard" @change='idCardput' label="身份证" maxlength='18' placeholder="请输入身份证号" />
-					<van-field :value="password" @change='passwordput' type="password" label="密码" placeholder="请输入密码" />
-					<van-cell title="归属驾校地区" :value="area" @click='popup=!popup' />
-				</van-cell-group>
-				<view class="btn-box">
-					<van-button @click='idCardShow=!idCardShow' type="default">取消绑定</van-button>
-					<van-button @click='submitBinding' type="info" :loading='loading' loading-text="绑定中..">确认绑定</van-button>
-				</view>
-			</view>
-		</van-popup>
-		<van-popup :show="popup" position="bottom">
-			<van-area :columns-placeholder="['请选择', '请选择']" value="35" @cancel='popup=!popup' @confirm='popup=!popup' :area-list="areaList"
-			 @change='regionSelection' columns-num='2' />
-		</van-popup>
-	</scroll-view>
-</template>
-
-<script>
-	import square from '@/components/square/index.vue'
-	import md5 from 'crypto-js/md5'
-	import Toast from '@/wxcomponents/vant/toast/toast';
-	import {
-		login,
-		getInfo,
-		bindUserCard,
-		updateUserInfo
-	} from '@/api/login.js'
-	import {
-		getStudentInfo
-	} from '@/api/studytime.js'
-	export default {
-		components: {
-			square
-		},
-		data() {
-			return {
-				loading: false,
-				idCardShow: false,
-				popup: false,
-				idCard: null,
-				password: null,
-				areaCode: null,
-				area: "请点击选择地区",
-				areaList: {
-					province_list: {
-						35: '福建省',
-					},
-					city_list: {
-						3501: '福州市',
-						3502: '厦门市',
-						3503: '莆田市',
-						3504: '三明市',
-						3505: '泉州市',
-						3506: '漳州市',
-						3507: '南平市',
-						3508: '龙岩市',
-						3509: '宁德市',
-					}
-				}
-			}
-		},
-		computed: {
-			userData() {
-				return this.$store.state.user.userInfo;
-			}
-		},
-		mounted() {
-			this.initUserInfo()
-		},
-		methods: {
-			async initUserInfo() {
-				await this.$store.dispatch('GetInfo')
-			},
-			idCardput(e) {
-				this.idCard = e.detail
-			},
-			passwordput(e) {
-				this.password = e.detail
-			},
-			submitBinding() {
-				console.log(this.areaCode, this.idCard, this.password)
-				this.loading = true
-				bindUserCard({
-					city: this.areaCode,
-					logincode: this.idCard,
-					password: md5(this.password).toString()
-				}).then((res) => {
-					if (res.code == 200) {
-						Toast.success('绑定成功');
-						this.idCardShow = false
-					} else if (res.code == 502) {
-						Toast.fail(res.msg);
-					} else {
-						Toast.fail('系统内部错误');
-					}
-					this.loading = false
-				})
-			},
-			regionSelection(e) {
-				console.log(e)
-				this.area = `${e.detail.values[0].name}  ${e.detail.values[1].name}`
-				this.areaCode = e.detail.values[1].code
-			},
-			async getUserProfile(e) {
-				let userInfo = await wx.getUserProfile({
-					desc: '业务需要'
-				})
-				let updateRes = await updateUserInfo({
-					headImage: userInfo.userInfo.avatarUrl,
-					nickName: userInfo.userInfo.nickName
-				})
-				if (updateRes.code == 200) {
-					// this.$store.dispatch('GetInfo')
-					this.$store.state.user.userInfo.headImage=userInfo.userInfo.avatarUrl
-					this.$store.state.user.userInfo.nickName=userInfo.userInfo.nickName
-				}
-			}
-		}
-
-	}
-</script>
-
-<style lang="scss" scoped>
-	.ad-box{
-		margin: 40rpx;
-		padding: 20rpx;
-		display: flex;
-		justify-content: center;
-		align-items: center;
-	}
-	
-	.server {
-		border: none;
-		background-color: none;
-		margin: 0;
-		padding: 0;
-		text-align: left;
-		display: flexbox;
-	}
-
-	.idCard {
-		width: 600rpx;
-		padding: 30rpx;
-		margin: auto;
-		display: flex;
-		flex-direction: column;
-		justify-content: center;
-		align-items: center;
-	}
-
-	.btn-box {
-		margin-top: 40rpx;
-		width: 100%;
-		display: flex;
-		justify-content: space-between;
-	}
-
-	.content {
-		height: 100%;
-	}
-
-	.top {
-		padding-top: 100rpx;
-		background-image: url("/static/imgs/bg.png");
-		background-size: 100% 100%;
-		background-repeat: no-repeat;
-
-		.avabox {
-			display: flex;
-			padding: 10%;
-
-			.img {
-				border-radius: 50%;
-			}
-
-			.sync-btn {
-				margin-top: 20rpx;
-				height: 40rpx;
-			}
-
-			.avatitbox {
-				flex: 1;
-				display: flex;
-				flex-direction: column;
-				justify-content: space-between;
-				padding: 30rpx;
-				color: #FFFFFF;
-				height: 100rpx;
-			}
-		}
-	}
-
-
-
-
-	.serviceBox {
-		background-color: #fff;
-		margin: 30rpx;
-		border-radius: 10rpx;
-
-		.tit {
-			padding: 26rpx;
-			border-bottom: 1rpx solid #E8E8E8;
-		}
-
-		.btnBox {
-			display: flex;
-			justify-content: space-between;
-			align-items: center;
-
-			.item-box {
-				display: flex;
-				flex-direction: column;
-				justify-content: space-between;
-				align-items: center;
-				width: 200rpx;
-				margin-top: 20rpx;
-				padding: 20rpx;
-				border: none;
-
-				.text {
-					font-size: 26rpx;
-					font-family: PingFang SC;
-					font-weight: 400;
-					color: #666666;
-				}
-			}
-		}
-	}
-</style>

+ 0 - 143
pages/index/index.vue

@@ -1,143 +0,0 @@
-<template>
-	<page-meta>
-		<navigation-bar :title="title" background-color="#FFFFFF" front-color="#000000" />
-	</page-meta>
-	<view v-if="!login">
-		<login :login.sync='login' />
-	</view>
-	<view v-else>
-
-		<swiper class="swiper-box" :current-item-id="active" @change='swiperChange' easing-function="easeInCubic">
-			<swiper-item class="swiper-item" item-id='home'>
-				<home v-if="activeObj.home" ref='home' />
-			</swiper-item>
-			<swiper-item class="swiper-item" item-id='cinema'>
-				<cinema v-if="activeObj.cinema" ref='cinema' />
-			</swiper-item>
-			<swiper-item class="swiper-item" item-id='applist'>
-				<applist v-if="activeObj.applist" ref='applist' />
-			</swiper-item>
-			<swiper-item class="swiper-item" item-id='user'>
-				<user v-if="activeObj.user" ref='user' />
-			</swiper-item>
-		</swiper>
-
-		<!-- <home v-if="activeObj.home" v-show="active=='home'" ref='home' />
-		<cinema v-if="activeObj.cinema" v-show="active=='cinema'" ref='cinema'/>
-		<applist v-if="activeObj.applist" v-show="active=='applist'" ref='applist' />
-		<user v-if="activeObj.user" v-show="active=='user'"  ref='user' /> -->
-
-		<van-tabbar :active="active" @change="onChange" :placeholder='true' active-color="#E31818" inactive-color="#999999">
-			<van-tabbar-item name='home' icon='wap-home'>
-				<!-- <van-icon slot="icon" name="/static/imgs/fxh.png" /> -->
-				<!-- <van-icon slot="icon-active" name="/static/imgs/fx.png" /> -->
-				首页
-			</van-tabbar-item>
-			<van-tabbar-item name='cinema' icon='video'>
-				<!-- <van-icon slot="icon" name="/static/imgs/fxh.png" /> -->
-				<!-- <van-icon slot="icon-active" name="/static/imgs/fx.png" /> -->
-				电影
-			</van-tabbar-item>
-			<van-tabbar-item name='applist' icon='search'>
-				<!-- <van-icon slot="icon" name="/static/imgs/zth.png" /> -->
-				<!-- <van-icon slot="icon-active" name="/static/imgs/zt.png" /> -->
-				发现
-			</van-tabbar-item>
-			<van-tabbar-item name='user' icon='manager'>
-				<!-- <van-icon slot="icon" name="/static/imgs/wdh.png" /> -->
-				<!-- <van-icon slot="icon-active" name="/static/imgs/wd.png" /> -->
-				我的
-			</van-tabbar-item>
-		</van-tabbar>
-	</view>
-
-
-	<van-toast id="van-toast" />
-</template>
-
-<script>
-	import applist from './components/applist.vue'
-	import find from './components/find/index.vue'
-	import user from './components/user.vue'
-	import topic from './components/topic/index.vue'
-	import login from './components/login.vue'
-	import home from './components/home.vue'
-	import cinema from './components/cinema.vue'
-	export default {
-		components: {
-			applist,
-			find,
-			user,
-			topic,
-			login,
-			home,
-			cinema
-		},
-		data() {
-			return {
-				login: false,
-				active: 'home',
-				activeObj: {},
-			}
-		},
-		onLoad: function(option) {
-			if (option.active) {
-				this.active = option.active
-			}
-			this.activeObj[this.active] = true
-		},
-		onShareAppMessage: function() {},
-		onReachBottom() {
-			if (this.active == 'home') {
-				this.$refs.home.onBottom()
-			}
-			if (this.active == 'applist') {
-				this.$refs.applist.onBottom()
-			}
-		},
-		computed: {
-			title() {
-				if (!this.login) return '登录'
-				switch (this.active) {
-					case 'home':
-						return '首页';
-					case 'cinema':
-						return '电影';
-					case 'applist':
-						return '发现';
-					case 'user':
-						return '我的';
-				}
-			}
-		},
-		methods: {
-			onChange(event) {
-				// event.detail 的值为当前选中项的索引
-				this.active = event.detail
-				this.activeObj[this.active] = true
-				// wx.startPullDownRefresh()
-				// this.$nextTick(function() {
-				// 	wx.stopPullDownRefresh()
-				// })
-			},
-			swiperChange(event){
-				this.active = event.detail.currentItemId
-				this.activeObj[this.active] = true
-				// wx.startPullDownRefresh()
-				// this.$nextTick(function() {
-				// 	wx.stopPullDownRefresh()
-				// })
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	.swiper-box {
-		height: calc(100vh - 100rpx - env(safe-area-inset-bottom));
-
-		.swiper-item {
-			// overflow: auto;
-		}
-	}
-</style>

+ 0 - 438
pages/question/mockExam.vue

@@ -1,438 +0,0 @@
-<template>
-	<view class="content"  :class="{night:nightFlag}">
-		<view class="top-box">
-			<view class="icon"></view>
-			<selectSwitch class='btn' @change="changeSwitch" :defaultSwitch='kemu==1'  :switchList="['科一题目','科四题目']" checked_bj_color='#E31818' />
-			<van-icon class='set' name="/static/imgs/sz.png" size='20' @click='show=true' />
-		</view>
-		<van-popup :show="show" @close="show=false" position="bottom">
-			<van-cell title="选完跳转下一题 " clickable :data-index="index" @click="answerjump=!answerjump">
-				<van-switch slot="right-icon" :checked="answerjump" size="24px" active-color="#16CC16" />
-			</van-cell>
-			<van-cell title="夜间模式" clickable :data-index="index" @click="nightFlag=!nightFlag">
-				<van-switch slot="right-icon" :checked="nightFlag" size="24px" active-color="#16CC16" />
-			</van-cell>
-		</van-popup>
-
-		<van-skeleton class='skeleton' avatar row="6" :row-width="['100%','40%','70%','70%','70%','70%']" avatar-shape='square'
-		 :loading="loading">
-			<swiper class="swiper-box" :current="swiperIndex" @change="swiperChange" circular>
-				<swiper-item v-for="(itembox,indexbox) in questionList" :key='indexbox'>
-					<view class="swiper-item">
-						<view class="topic-box">
-							<view class="topic-right">
-								<view class="topic-top">
-									<view class="topic-left">
-										<text class="topic-type">{{questionType(itembox.type)}}</text>
-										<van-icon name="star-o" size='20' />
-									</view>
-									<!-- <rich-text class="topic-tit" :nodes="itembox.id+'、'+itembox.question"></rich-text> -->
-									<view class="topic-tit" v-html="(indexbox+1)+'、'+itembox.question"></view>
-								</view>
-								<video v-if="itembox.videoUrl" class="topic-img" :muted='true' :loop='true' :autoplay='true' :controls='false'
-								 :src="encodeURI(itembox.mediaUrl)"></video>
-								<image v-if="itembox.sinaimg" class="topic-img" :src="itembox.mediaUrl" mode="aspectFit"></image>
-								<view class="topic-opt" v-if='itembox.type==2'>
-									<van-radio-group :value="userAnswer[itembox.id]">
-										<van-cell-group>
-											<van-cell :class='{answer:(itembox.answerTrue.includes(index+1) && (answerflag))}' v-for="(item,index) in choiceList"
-											 :key="index" :title="itembox[item]" v-show='itembox[item]' clickable :data-index="index+1" @click="singleToggle($event,itembox)">
-												<van-icon v-if="(itembox.answerTrue.includes(index+1) && (answerflag))" slot="icon" name="/static/imgs/true.png"
-												 size='20' />
-												<van-radio slot="right-icon" :ref="`checkboxes${itembox.id}`" checked-color="#1464cc" :name="index+1" />
-											</van-cell>
-										</van-cell-group>
-									</van-radio-group>
-									<!-- <button @click="submit(itembox)" class="submit" type="default" v-show="!(answerflag || completeAnswer[itembox.id])">提交答案</button> -->
-								</view>
-								<view class="topic-opt" v-if='itembox.type==1'>
-									<van-radio-group :value="userAnswer[itembox.id]">
-										<van-cell-group>
-											<van-cell :class='{answer:(itembox.answerTrue.includes(index+1) && (answerflag))}' v-for="(item,index) in 2"
-											 :key="index" :title="index?'错误':'正确'" clickable :data-index="index+1" @click="singleToggle($event,itembox)">
-												<van-icon v-if="(itembox.answerTrue.includes(index+1) && (answerflag))" slot="icon" name="/static/imgs/true.png"
-												 size='20' />
-												<van-radio slot="right-icon" :ref="`checkboxes${itembox.id}`" checked-color="#1464cc" :name="index+1" />
-											</van-cell>
-										</van-cell-group>
-									</van-radio-group>
-									<!-- <button @click="submit(itembox)" class="submit" type="default" v-show="!(answerflag || completeAnswer[itembox.id])">提交答案</button> -->
-								</view>
-								<view class="topic-opt" v-else-if='itembox.type==3'>
-									<van-checkbox-group :value="userAnswer[itembox.id]" @change="onChange($event,itembox)">
-										<van-cell-group>
-											<van-cell :class='{answer:(itembox.answerTrue.includes(index+1) && (answerflag))}' v-for="(item,index) in choiceList"
-											 :key="index" :title="itembox[item]" v-show='itembox[item]' clickable @click='toggle($event,itembox)'
-											 :data-index="index">
-												<van-icon v-if="(itembox.answerTrue.includes(index+1) && (answerflag))" slot="icon" name="/static/imgs/true.png"
-												 size='20' />
-												<van-checkbox shape="square" catch:tap="noop" slot="right-icon" :ref="`checkboxes${itembox.id}`"
-												 checked-color="#1464cc" :name="index+1" />
-											</van-cell>
-										</van-cell-group>
-									</van-checkbox-group>
-									<!-- <button @click="submit(itembox)" class="submit" type="default" v-show="!(answerflag)">提交答案</button> -->
-								</view>
-							</view>
-						</view>
-						<view v-show="answerflag">
-							<view class="flag">
-								<text v-if="itembox.type==2" class="result">正确答案: {{itembox[choiceList[itembox.answerTrue-1]]}}</text>
-								<text v-else-if="itembox.type==1" class="result">正确答案: {{itembox.answerTrue==1?'正确':'错误'}}</text>
-								<text v-else-if="itembox.type==3" class="result">正确答案: {{itembox.answerTrue.split('').map((key)=>{
-									return itembox[choiceList[key-1]]
-								})}}</text>
-							</view>
-							<view class="parsing">
-								<view class="item-titBox">
-									<text class="item-tit">题目解析</text>
-								</view>
-								<view class="parsing-text">
-									<text class="item-tit">{{itembox.explain1 ? itembox.explain1 : "无"}}</text>
-								</view>
-							</view>
-						</view>
-					</view>
-				</swiper-item>
-			</swiper>
-			<view class="carryOut" v-if="!answerflag">
-				<van-count-down id='count' :auto-start='false' :time="remainingTime * 60 * 1000" />
-				<button @click="statistics" class="carryOut-btn" type="default">我要交卷</button>
-			</view>
-			<van-dialog id="van-dialog" />
-		</van-skeleton>
-
-
-	</view>
-</template>
-
-<script>
-	import selectSwitch from "@/components/xuan-switch/xuan-switch.vue";
-	import Dialog from '@/wxcomponents/vant/dialog/dialog';
-	import {
-		questionListRandom
-	} from "@/api/answer.js"
-	export default {
-		components: {
-			selectSwitch
-		},
-		data() {
-			return {
-				loading: true,
-				answerflag: false,
-				answerjump: true,
-				nightFlag: false,
-				kemu: uni.getStorageSync('kemu') || 1,
-				completeAnswer: {},
-				show: false,
-				checked: true,
-				radio: null,
-				result: [],
-				userAnswer: {},
-				questionList: {},
-				choiceList: ['an1', 'an2', 'an3', 'an4', 'an5', 'an6', 'an7'],
-				swiperIndex: 0,
-				shakeIndex: 0,
-				pageNum: 1,
-				shake: 0,
-				trueNum: 0,
-				errorBox: [],
-				remainingTime: 60,
-				startDate:new Date().getTime(),
-			}
-		},
-		watch: {
-			kemu(val) {
-				uni.setStorageSync('kemu', val)
-				this.pageNum = 1
-				this.listInit()
-			}
-		},
-		mounted() {
-			this.listInit()
-		},
-		methods: {
-			async listInit() {
-				this.loading=true
-				await questionListRandom({
-					num: 5,
-					kemu: this.kemu
-				}).then((res) => {
-					this.questionList = res.rows
-					this.$nextTick(() => {
-						this.loading = false
-						this.selectComponent('#count').start()
-					})
-				})
-				await questionListRandom({
-					num: 95,
-					kemu: this.kemu
-				}).then((res) => {
-					this.questionList = this.questionList.concat(res.rows)
-				})
-			},
-			questionType(index) {
-				switch (index) {
-					case 1:
-						return '判断';
-					case 2:
-						return '单选';
-					case 3:
-						return '多选';
-				}
-			},
-			swiperChange(e) {
-				this.swiperIndex = e.detail.current
-			},
-			onChange(event, itembox) {
-				if (this.completeAnswer[itembox.id] || this.answerflag) {
-					return
-				}
-				this.$set(this.userAnswer, itembox.id, event.detail)
-			},
-			singleToggle(event, itembox) {
-				if (this.completeAnswer[itembox.id] || this.answerflag) {
-					return
-				}
-				const {
-					index
-				} = event.currentTarget.dataset;
-				this.$set(this.userAnswer, itembox.id, index)
-				if (this.answerjump) {
-					let index = this.swiperIndex
-					this.swiperIndex = ++index % 100
-				}
-			},
-			toggle(event, itembox) {
-				const {
-					index
-				} = event.currentTarget.dataset;
-				const checkbox = this.$refs[`checkboxes${itembox.id}`][index];
-				checkbox.toggle();
-			},
-			noop() {},
-			submit(itembox, index) {
-				this.$set(this.completeAnswer, itembox.id, true)
-				let flag = (this.userAnswer[itembox.id] + '').split(',').sort().join('') == itembox.answerTrue.split('').sort().join(
-					'')
-				if (flag) {
-					this.trueNum += 1
-				} else {
-					this.errorBox.push(index + 1)
-				}
-			},
-			statistics() {
-				this.questionList.map((itembox, index) => {
-					this.submit(itembox, index)
-				})
-				this.selectComponent('#count').pause()
-				Dialog.alert({
-					title: '模拟考试结果',
-					message: `考试结果: ${this.trueNum}分\n答题用时: ${this.calcTime()}\n答错题目: \n${this.errorBox}`,
-					messageAlign: 'left',
-					confirmButtonText: '查看答案及解析'
-				}).then(() => {
-					this.answerflag = true
-				});
-			},
-			calcTime(){
-				let time=new Date().getTime()-this.startDate
-				return new Date(time).toJSON().slice(11,-5)
-			},
-			changeSwitch(e) {
-				if (e) {
-					this.kemu = 1
-				} else {
-					this.kemu = 4
-				}
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.carryOut {
-		position: fixed;
-		bottom: 120rpx;
-		left: 50%;
-		transform: translateX(-50%);
-		display: flex;
-		flex-direction: column;
-		justify-content: center;
-		align-items: center;
-
-		.carryOut-btn {
-			height: 80rpx;
-			background: linear-gradient(90deg, #E31818, #ED3E24, #ED4F24);
-			border-radius: 35rpx;
-			display: flex;
-			justify-content: center;
-			align-items: center;
-			color: #FFFFFF;
-		}
-	}
-
-	/deep/ .answer .van-cell {
-		background-color: #16CC16 !important;
-		color: #ffffff;
-	}
-
-	/deep/ .van-cell {
-		// background-color: #16CC16 !important;
-		margin: 10rpx;
-		border-radius: 20rpx;
-	}
-
-	.content {
-		width: 100%;
-		height: 100vh;
-		background-color: #FFFFFF;
-	}
-
-	.skeleton {
-		// margin: 0rpx 20rpx;
-	}
-
-	.swiper-box {
-		height: calc(100vh - 120rpx);
-		margin: 0rpx 20rpx;
-
-		swiper-item {
-			overflow: auto;
-		}
-	}
-
-	.top-box {
-		height: 60rpx;
-		padding: 30rpx;
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-
-		.icon {
-			width: 60rpx;
-		}
-
-		.btn {}
-
-		.set {
-			color: red;
-		}
-	}
-
-	.topic-box {
-		// padding: 20rpx;
-		display: flex;
-		justify-content: center;
-
-		// border: 2px solid red;
-		.topic-top {
-			display: flex;
-			// border: 2px solid red;
-			padding: 10rpx;
-
-			.topic-left {
-				display: flex;
-				flex-direction: column;
-
-				.topic-type {
-					background: #E31818;
-					border-radius: 10rpx;
-					// border: 2px solid red;
-					color: #FFFFFF;
-					width: 66rpx;
-					height: 30rpx;
-					display: flex;
-					justify-content: center;
-					align-items: center;
-					border-radius: 15px 15px 0px 15px;
-					padding: 10rpx;
-					margin-bottom: 18rpx;
-				}
-			}
-
-			.topic-tit {
-				padding: 10rpx;
-			}
-
-		}
-
-		.topic-right {
-			flex: 1;
-			display: flex;
-			flex-direction: column;
-			padding: 0 10rpx;
-
-			.topic-img {
-				padding: 10rpx;
-				margin: auto;
-				width: 500rpx;
-				height: 250rpx;
-				// border: 2px solid red;
-			}
-
-			.topic-opt {
-				// border: 2px solid red;
-				padding: 30rpx 5rpx;
-
-				.submit {
-					margin: auto;
-					margin-top: 150rpx;
-
-					height: 80rpx;
-					background: linear-gradient(90deg, #E31818, #ED3E24, #ED4F24);
-					border-radius: 35rpx;
-					display: flex;
-					justify-content: center;
-					align-items: center;
-					color: #FFFFFF;
-				}
-			}
-		}
-
-	}
-
-	.flag {
-		// border: 2px solid red;
-		padding: 30rpx 5rpx;
-		display: flex;
-		justify-content: center;
-
-		.result {
-			display: inline-block;
-			background-color: #16CC16;
-			// border: 2px solid red;
-			width: 690rpx;
-			// height: 70rpx;
-			padding: 20rpx;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			border-radius: 20rpx;
-			color: #ffffff;
-		}
-	}
-
-	.item-titBox {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		padding: 20rpx;
-		border-bottom: 1rpx solid #e8e8e8;
-
-		.item-tit {
-			border-left: 8rpx solid #E31818;
-			font-size: 30rpx;
-			// line-height: 38rpx;
-			padding: 0 11rpx;
-		}
-
-
-	}
-
-	.parsing-text {
-		padding: 30rpx;
-		// border: 2px solid red;
-
-	}
-</style>

+ 0 - 434
pages/question/random.vue

@@ -1,434 +0,0 @@
-<template>
-	<view class="content"  :class="{night:nightFlag}">
-		<view class="top-box">
-			<view class="icon"></view>
-			<selectSwitch class='btn' @change="changeSwitch" :defaultSwitch='kemu==1'  :switchList="['科一题目','科四题目']" checked_bj_color='#E31818' />
-			<van-icon class='set' name="/static/imgs/sz.png" size='20' @click='show=true' />
-		</view>
-		<van-popup :show="show" @close="show=false" position="bottom">
-			<van-cell title="背题模式" clickable :data-index="index" @click="answerflag=!answerflag">
-				<van-switch slot="right-icon" :checked="answerflag" size="24px" active-color="#16CC16" />
-				<!-- <selectSwitch slot="right-icon" @change="changeSwitch" :switchList="['答题模式','背题模式']" checked_bj_color='#E31818' /> -->
-			</van-cell>
-			<van-cell title="答对跳转下一题 " clickable :data-index="index" @click="answerjump=!answerjump">
-				<van-switch slot="right-icon" :checked="answerjump" size="24px" active-color="#16CC16" />
-			</van-cell>
-			<!-- 			<van-cell title="答错展示题目解析" clickable :data-index="index" @click="checked=!checked">
-				<van-switch slot="right-icon" :checked="checked" size="24px" active-color="#16CC16" />
-			</van-cell> -->
-			<van-cell title="错误震动提醒" clickable :data-index="index" @click="checked=!checked">
-				<van-switch slot="right-icon" :checked="checked" size="24px" active-color="#16CC16" />
-			</van-cell>
-			<van-cell title="夜间模式" clickable :data-index="index" @click="nightFlag=!nightFlag">
-				<van-switch slot="right-icon" :checked="nightFlag" size="24px" active-color="#16CC16" />
-			</van-cell>
-			<!-- 			<van-cell title="主题选择" clickable :data-index="index" @click="checked=!checked">
-				<van-switch slot="right-icon" :checked="checked" size="24px" active-color="#16CC16" />
-			</van-cell>
-			<van-cell title="字体选择" clickable :data-index="index" @click="checked=!checked">
-				<van-switch slot="right-icon" :checked="checked" size="24px" active-color="#16CC16" />
-			</van-cell> -->
-		</van-popup>
-
-		<van-skeleton class='skeleton' avatar row="6" :row-width="['100%','40%','70%','70%','70%','70%']" avatar-shape='square'
-		 :loading="loading">
-			<swiper class="swiper-box" :current="swiperIndex" @change="swiperChange" circular>
-				<swiper-item v-for="(itembox,indexbox) in questionList" :key='indexbox'>
-					<view class="swiper-item">
-						<view class="topic-box">
-							<view class="topic-right">
-								<view class="topic-top">
-									<view class="topic-left">
-										<text class="topic-type">{{questionType(itembox.type)}}</text>
-										<van-icon name="star-o" size='20' @tap='markQuestion(itembox.id)'/>
-									</view>
-									<!-- <rich-text class="topic-tit" :nodes="itembox.id+'、'+itembox.question"></rich-text> -->
-									<view class="topic-tit" v-html="itembox.id+'、'+itembox.question"></view>
-								</view>
-								<video v-if="itembox.videoUrl" class="topic-img" :muted='true' :loop='true' :autoplay='true' :controls='false'
-								 :src="encodeURI(itembox.mediaUrl)"></video>
-								<image v-if="itembox.sinaimg" class="topic-img" :src="itembox.mediaUrl" mode="aspectFit"></image>
-								<view class="topic-opt" v-if='itembox.type==2'>
-									<van-radio-group :value="userAnswer[itembox.id]">
-										<van-cell-group>
-											<van-cell :class='{answer:(itembox.answerTrue.includes(index+1) && (answerflag || completeAnswer[itembox.id]))}'
-											 v-for="(item,index) in choiceList" :key="index" :title="itembox[item]" v-show='itembox[item]' clickable
-											 :data-index="index+1" @click="singleToggle($event,itembox)">
-												<van-icon v-if="(itembox.answerTrue.includes(index+1) && (answerflag || completeAnswer[itembox.id]))" slot="icon"
-												 name="/static/imgs/true.png" size='20' />
-												<van-radio slot="right-icon" :ref="`checkboxes${itembox.id}`" checked-color="#1464cc" :name="index+1" />
-											</van-cell>
-										</van-cell-group>
-									</van-radio-group>
-									<!-- <button @click="submit(itembox)" class="submit" type="default" v-show="!(answerflag || completeAnswer[itembox.id])">提交答案</button> -->
-								</view>
-								<view class="topic-opt" v-if='itembox.type==1'>
-									<van-radio-group :value="userAnswer[itembox.id]">
-										<van-cell-group>
-											<van-cell :class='{answer:(itembox.answerTrue.includes(index+1) && (answerflag || completeAnswer[itembox.id]))}'
-											 v-for="(item,index) in 2" :key="index" :title="index?'错误':'正确'" clickable :data-index="index+1" @click="singleToggle($event,itembox)">
-												<van-icon v-if="(itembox.answerTrue.includes(index+1) && (answerflag || completeAnswer[itembox.id]))" slot="icon"
-												 name="/static/imgs/true.png" size='20' />
-												<van-radio slot="right-icon" :ref="`checkboxes${itembox.id}`" checked-color="#1464cc" :name="index+1" />
-											</van-cell>
-										</van-cell-group>
-									</van-radio-group>
-									<!-- <button @click="submit(itembox)" class="submit" type="default" v-show="!(answerflag || completeAnswer[itembox.id])">提交答案</button> -->
-								</view>
-								<view class="topic-opt" v-else-if='itembox.type==3'>
-									<van-checkbox-group :value="userAnswer[itembox.id]" @change="onChange($event,itembox)">
-										<van-cell-group>
-											<van-cell :class='{answer:(itembox.answerTrue.includes(index+1) && (answerflag || completeAnswer[itembox.id]))}'
-											 v-for="(item,index) in choiceList" :key="index" :title="itembox[item]" v-show='itembox[item]' clickable
-											 @click='toggle($event,itembox)' :data-index="index">
-												<van-icon v-if="(itembox.answerTrue.includes(index+1) && (answerflag || completeAnswer[itembox.id]))" slot="icon"
-												 name="/static/imgs/true.png" size='20' />
-												<van-checkbox shape="square" catch:tap="noop" slot="right-icon" :ref="`checkboxes${itembox.id}`"
-												 checked-color="#1464cc" :name="index+1" />
-											</van-cell>
-										</van-cell-group>
-									</van-checkbox-group>
-									<button @click="submit(itembox)" class="submit" type="default" v-show="!(answerflag || completeAnswer[itembox.id])">提交答案</button>
-								</view>
-							</view>
-						</view>
-						<view v-show="answerflag || completeAnswer[itembox.id]">
-							<view class="flag">
-								<text v-if="itembox.type==2" class="result">正确答案: {{itembox[choiceList[itembox.answerTrue-1]]}}</text>
-								<text v-else-if="itembox.type==1" class="result">正确答案: {{itembox.answerTrue==1?'正确':'错误'}}</text>
-								<text v-else-if="itembox.type==3" class="result">正确答案: {{itembox.answerTrue.split('').map((key)=>{
-									return itembox[choiceList[key-1]]
-								})}}</text>
-							</view>
-							<view class="parsing">
-								<view class="item-titBox">
-									<text class="item-tit">题目解析</text>
-								</view>
-								<view class="parsing-text">
-									<text class="item-tit">{{itembox.explain1 ? itembox.explain1 : "无"}}</text>
-								</view>
-							</view>
-						</view>
-					</view>
-				</swiper-item>
-			</swiper>
-		</van-skeleton>
-
-
-	</view>
-</template>
-
-<script>
-	import selectSwitch from "@/components/xuan-switch/xuan-switch.vue";
-	import {
-		questionListRandom,
-		questionErrorAdd,
-		questionErrorDel
-	} from "@/api/answer.js"
-	export default {
-		components: {
-			selectSwitch
-		},
-		data() {
-			return {
-				loading: true,
-				answerflag: false,
-				answerjump: true,
-				nightFlag: false,
-				kemu: uni.getStorageSync('kemu') || 1,
-				completeAnswer: {},
-				show: false,
-				checked: true,
-				radio: null,
-				result: [],
-				userAnswer: {},
-				questionList: {},
-				choiceList: ['an1', 'an2', 'an3', 'an4', 'an5', 'an6', 'an7'],
-				swiperIndex: 0,
-				shakeIndex: 0,
-				pageNum: 1,
-				shake: 0,
-			}
-		},
-		watch: {
-			kemu(val) {
-				uni.setStorageSync('kemu', val)
-				this.pageNum = 1
-				this.listInit()
-			}
-		},
-		mounted() {
-			this.listInit()
-		},
-		methods: {
-			async listInit() {
-				this.loading=true
-				await questionListRandom({
-					num: 20,
-					kemu: this.kemu
-				}).then((res) => {
-					this.questionList = res.rows
-					this.$nextTick(() => {
-						this.loading = false
-					})
-				})
-			},
-			questionType(index) {
-				switch (index) {
-					case 1:
-						return '判断';
-					case 2:
-						return '单选';
-					case 3:
-						return '多选';
-				}
-			},
-			markQuestion(id){
-				questionErrorAdd(id).then((res)=>{
-					
-				})
-			},
-			swiperChange(e) {
-				let aShake = e.detail.current - this.shakeIndex
-				this.shake += aShake ** 2 != 1 ? -aShake / Math.abs(aShake) : aShake;
-				this.swiperIndex = e.detail.current
-				this.shakeIndex = e.detail.current
-				if (e.detail.current % 10 == 0) {
-					if (Math.abs(this.shake) < 10) {
-						this.shake = 0
-						return
-					}
-					this.pageNum += 1;
-					questionListRandom({
-						num: 10,
-						kemu: this.kemu
-					}).then((res) => {
-						this.shake = 0
-						if (e.detail.current == 20) {
-							this.questionList = res.rows.concat(this.questionList.slice(10))
-						}
-						if (e.detail.current == 10) {
-							this.questionList = this.questionList.slice(0, 20).concat(res.rows)
-						}
-						if (e.detail.current == 0) {
-							this.questionList = this.questionList.slice(0, 10).concat(res.rows).concat(this.questionList.slice(20))
-						}
-					})
-				}
-			},
-			onChange(event, itembox) {
-				if (this.completeAnswer[itembox.id] || this.answerflag) {
-					return
-				}
-				this.$set(this.userAnswer, itembox.id, event.detail)
-			},
-			singleToggle(event, itembox) {
-				if (this.completeAnswer[itembox.id] || this.answerflag) {
-					return
-				}
-				const {
-					index
-				} = event.currentTarget.dataset;
-				this.$set(this.userAnswer, itembox.id, index)
-				setTimeout(() => {
-					this.submit(itembox)
-				}, 0)
-			},
-			toggle(event, itembox) {
-				const {
-					index
-				} = event.currentTarget.dataset;
-				const checkbox = this.$refs[`checkboxes${itembox.id}`][index];
-				checkbox.toggle();
-			},
-			noop() {},
-			submit(itembox) {
-				this.$set(this.completeAnswer, itembox.id, true)
-				let flag = (this.userAnswer[itembox.id] + '').split(',').sort().join('') == itembox.answerTrue.split('').sort().join(
-					'')
-				if (flag) {
-					wx.vibrateShort();
-					if (this.answerjump) {
-						let index = this.swiperIndex
-						this.swiperIndex = ++index % 30
-					}
-				} else {
-					wx.vibrateLong();
-				}
-			},
-			changeSwitch(e) {
-				if (e) {
-					this.kemu = 1
-				} else {
-					this.kemu = 4
-				}
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	/deep/ .answer .van-cell {
-		background-color: #16CC16 !important;
-		color: #ffffff;
-	}
-
-	/deep/ .van-cell {
-		// background-color: #16CC16 !important;
-		margin: 10rpx;
-		border-radius: 20rpx;
-	}
-
-	.content {
-		width: 100%;
-		height: 100vh;
-		background-color: #FFFFFF;
-	}
-
-	.skeleton {
-		// margin: 0rpx 20rpx;
-	}
-
-	.swiper-box {
-		height: calc(100vh - 120rpx);
-		margin: 0rpx 20rpx;
-
-		swiper-item {
-			overflow: auto;
-		}
-	}
-
-	.top-box {
-		height: 60rpx;
-		padding: 30rpx;
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-
-		.icon {
-			width: 60rpx;
-		}
-
-		.btn {}
-
-		.set {
-			color: red;
-		}
-	}
-
-	.topic-box {
-		// padding: 20rpx;
-		display: flex;
-		justify-content: center;
-
-		// border: 2px solid red;
-		.topic-top {
-			display: flex;
-			// border: 2px solid red;
-			padding: 10rpx;
-
-			.topic-left {
-				display: flex;
-				flex-direction: column;
-
-				.topic-type {
-					background: #E31818;
-					border-radius: 10rpx;
-					// border: 2px solid red;
-					color: #FFFFFF;
-					width: 66rpx;
-					height: 30rpx;
-					display: flex;
-					justify-content: center;
-					align-items: center;
-					border-radius: 15px 15px 0px 15px;
-					padding: 10rpx;
-					margin-bottom: 18rpx;
-				}
-			}
-
-			.topic-tit {
-				padding: 10rpx;
-			}
-
-		}
-
-		.topic-right {
-			flex: 1;
-			display: flex;
-			flex-direction: column;
-			padding: 0 10rpx;
-
-			.topic-img {
-				padding: 10rpx;
-				margin: auto;
-				width: 500rpx;
-				height: 250rpx;
-				// border: 2px solid red;
-			}
-
-			.topic-opt {
-				// border: 2px solid red;
-				padding: 30rpx 5rpx;
-
-				.submit {
-					margin: auto;
-					margin-top: 150rpx;
-
-					height: 80rpx;
-					background: linear-gradient(90deg, #E31818, #ED3E24, #ED4F24);
-					border-radius: 35rpx;
-					display: flex;
-					justify-content: center;
-					align-items: center;
-					color: #FFFFFF;
-				}
-			}
-		}
-
-	}
-
-	.flag {
-		// border: 2px solid red;
-		padding: 30rpx 5rpx;
-		display: flex;
-		justify-content: center;
-
-		.result {
-			display: inline-block;
-			background-color: #16CC16;
-			// border: 2px solid red;
-			width: 690rpx;
-			// height: 70rpx;
-			padding: 20rpx;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			border-radius: 20rpx;
-			color: #ffffff;
-		}
-	}
-
-	.item-titBox {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		padding: 20rpx;
-		border-bottom: 1rpx solid #e8e8e8;
-
-		.item-tit {
-			border-left: 8rpx solid #E31818;
-			font-size: 30rpx;
-			// line-height: 38rpx;
-			padding: 0 11rpx;
-		}
-
-
-	}
-
-	.parsing-text {
-		padding: 30rpx;
-		// border: 2px solid red;
-
-	}
-</style>

+ 0 - 477
pages/question/sequential.vue

@@ -1,477 +0,0 @@
-<template>
-	<view class="content" :class="{night:nightFlag}">
-		<view class="top-box">
-			<view class="icon"></view>
-			<selectSwitch class='btn' @change="changeSwitch" :defaultSwitch='kemu==1' :switchList="['科一题目','科四题目']"
-			 checked_bj_color='#E31818' />
-			<van-icon class='set' name="/static/imgs/sz.png" size='20' @click='show=true' />
-		</view>
-		<van-popup :show="show" @close="show=false" position="bottom">
-			<van-cell title="背题模式" clickable :data-index="index" @click="answerflag=!answerflag">
-				<van-switch slot="right-icon" :checked="answerflag" size="24px" active-color="#16CC16" />
-				<!-- <selectSwitch slot="right-icon" @change="changeSwitch" :switchList="['答题模式','背题模式']" checked_bj_color='#E31818' /> -->
-			</van-cell>
-			<van-cell title="答对跳转下一题 " clickable :data-index="index" @click="answerjump=!answerjump">
-				<van-switch slot="right-icon" :checked="answerjump" size="24px" active-color="#16CC16" />
-			</van-cell>
-			<!-- 			<van-cell title="答错展示题目解析" clickable :data-index="index" @click="checked=!checked">
-				<van-switch slot="right-icon" :checked="checked" size="24px" active-color="#16CC16" />
-			</van-cell> -->
-			<van-cell title="错误震动提醒" clickable :data-index="index" @click="checked=!checked">
-				<van-switch slot="right-icon" :checked="checked" size="24px" active-color="#16CC16" />
-			</van-cell>
-			<van-cell title="夜间模式" clickable :data-index="index" @click="nightFlag=!nightFlag">
-				<van-switch slot="right-icon" :checked="nightFlag" size="24px" active-color="#16CC16" />
-			</van-cell>
-			<!-- 			<van-cell title="主题选择" clickable :data-index="index" @click="checked=!checked">
-				<van-switch slot="right-icon" :checked="checked" size="24px" active-color="#16CC16" />
-			</van-cell>
-			<van-cell title="字体选择" clickable :data-index="index" @click="checked=!checked">
-				<van-switch slot="right-icon" :checked="checked" size="24px" active-color="#16CC16" />
-			</van-cell> -->
-		</van-popup>
-
-		<van-skeleton class='skeleton' avatar row="6" :row-width="['100%','40%','70%','70%','70%','70%']" avatar-shape='square'
-		 :loading="loading">
-			<swiper class="swiper-box" :current="swiperIndex" @change="swiperChange" circular>
-				<swiper-item v-for="(itembox,indexbox) in questionList" :key='indexbox'>
-					<view class="swiper-item">
-						<view class="topic-box">
-							<view class="topic-right">
-								<view class="topic-top">
-									<view class="topic-left">
-										<text class="topic-type">{{questionType(itembox.type)}}</text>
-										<van-icon name="star-o" size='20' />
-									</view>
-									<!-- <rich-text class="topic-tit" :nodes="itembox.id+'、'+itembox.question"></rich-text> -->
-									<view class="topic-tit" v-html="itembox.id+'、'+itembox.question"></view>
-								</view>
-								<video v-if="itembox.videoUrl" class="topic-img" :muted='true' :loop='true' :autoplay='true' :controls='false'
-								 :src="encodeURI(itembox.mediaUrl)"></video>
-								<image v-if="itembox.sinaimg" class="topic-img" :src="itembox.mediaUrl" mode="aspectFit"></image>
-								<view class="topic-opt" v-if='itembox.type==2'>
-									<van-radio-group :value="userAnswer[itembox.id]">
-										<van-cell-group>
-											<van-cell :class='{answer:(itembox.answerTrue.includes(index+1) && (answerflag || completeAnswer[itembox.id]))}'
-											 v-for="(item,index) in choiceList" :key="index" :title="itembox[item]" v-show='itembox[item]' clickable
-											 :data-index="index+1" @click="singleToggle($event,itembox)">
-												<van-icon v-if="(itembox.answerTrue.includes(index+1) && (answerflag || completeAnswer[itembox.id]))" slot="icon"
-												 name="/static/imgs/true.png" size='20' />
-												<van-radio slot="right-icon" :ref="`checkboxes${itembox.id}`" checked-color="#1464cc" :name="index+1" />
-											</van-cell>
-										</van-cell-group>
-									</van-radio-group>
-									<!-- <button @click="submit(itembox)" class="submit" type="default" v-show="!(answerflag || completeAnswer[itembox.id])">提交答案</button> -->
-								</view>
-								<view class="topic-opt" v-if='itembox.type==1'>
-									<van-radio-group :value="userAnswer[itembox.id]">
-										<van-cell-group>
-											<van-cell :class='{answer:(itembox.answerTrue.includes(index+1) && (answerflag || completeAnswer[itembox.id]))}'
-											 v-for="(item,index) in 2" :key="index" :title="index?'错误':'正确'" clickable :data-index="index+1" @click="singleToggle($event,itembox)">
-												<van-icon v-if="(itembox.answerTrue.includes(index+1) && (answerflag || completeAnswer[itembox.id]))" slot="icon"
-												 name="/static/imgs/true.png" size='20' />
-												<van-radio slot="right-icon" :ref="`checkboxes${itembox.id}`" checked-color="#1464cc" :name="index+1" />
-											</van-cell>
-										</van-cell-group>
-									</van-radio-group>
-									<!-- <button @click="submit(itembox)" class="submit" type="default" v-show="!(answerflag || completeAnswer[itembox.id])">提交答案</button> -->
-								</view>
-								<view class="topic-opt" v-else-if='itembox.type==3'>
-									<van-checkbox-group :value="userAnswer[itembox.id]" @change="onChange($event,itembox)">
-										<van-cell-group>
-											<van-cell :class='{answer:(itembox.answerTrue.includes(index+1) && (answerflag || completeAnswer[itembox.id]))}'
-											 v-for="(item,index) in choiceList" :key="index" :title="itembox[item]" v-show='itembox[item]' clickable
-											 @click='toggle($event,itembox)' :data-index="index">
-												<van-icon v-if="(itembox.answerTrue.includes(index+1) && (answerflag || completeAnswer[itembox.id]))" slot="icon"
-												 name="/static/imgs/true.png" size='20' />
-												<van-checkbox shape="square" catch:tap="noop" slot="right-icon" :ref="`checkboxes${itembox.id}`"
-												 checked-color="#1464cc" :name="index+1" />
-											</van-cell>
-										</van-cell-group>
-									</van-checkbox-group>
-									<button @click="submit(itembox)" class="submit" type="default" v-show="!(answerflag || completeAnswer[itembox.id])">提交答案</button>
-								</view>
-							</view>
-						</view>
-						<view v-show="answerflag || completeAnswer[itembox.id]">
-							<view class="flag">
-								<text v-if="itembox.type==2" class="result">正确答案: {{itembox[choiceList[itembox.answerTrue-1]]}}</text>
-								<text v-else-if="itembox.type==1" class="result">正确答案: {{itembox.answerTrue==1?'正确':'错误'}}</text>
-								<text v-else-if="itembox.type==3" class="result">正确答案: {{itembox.answerTrue.split('').map((key)=>{
-									return itembox[choiceList[key-1]]
-								})}}</text>
-							</view>
-							<view class="parsing">
-								<view class="item-titBox">
-									<text class="item-tit">题目解析</text>
-								</view>
-								<view class="parsing-text">
-									<text class="item-tit">{{itembox.explain1 ? itembox.explain1 : "无"}}</text>
-								</view>
-							</view>
-						</view>
-					</view>
-				</swiper-item>
-			</swiper>
-		</van-skeleton>
-
-
-	</view>
-</template>
-
-<script>
-	import selectSwitch from "@/components/xuan-switch/xuan-switch.vue";
-	import {
-		questionList
-	} from "@/api/answer.js"
-	export default {
-		components: {
-			selectSwitch
-		},
-		data() {
-			return {
-				loading: true,
-				answerflag: false,
-				answerjump: true,
-				nightFlag: false,
-				kemu: uni.getStorageSync('kemu') || 1,
-				completeAnswer: {},
-				show: false,
-				checked: true,
-				radio: null,
-				result: [],
-				userAnswer: {},
-				questionList: {},
-				choiceList: ['an1', 'an2', 'an3', 'an4', 'an5', 'an6', 'an7'],
-				swiperIndex: 0,
-				shakeIndex: 0,
-				pageNum: uni.getStorageSync('pageNum') || 1,
-				shake: 0,
-			}
-		},
-		watch: {
-			kemu(val) {
-				uni.setStorageSync('kemu', val)
-				this.pageNum = 1
-				this.listInit()
-			}
-		},
-		mounted() {
-			this.listInit()
-		},
-		methods: {
-			async listInit() {
-				this.loading = true
-				await questionList({
-					pageNum: this.pageNum,
-					pageSize: 10,
-					kemu: this.kemu
-				}).then((res) => {
-					this.questionList = res.rows
-					this.$nextTick(() => {
-						this.loading = false
-					})
-				})
-				await questionList({
-					pageNum: this.pageNum + 1,
-					pageSize: 10,
-					kemu: this.kemu
-				}).then((res) => {
-					this.questionList = this.questionList.concat(res.rows)
-				})
-				await questionList({
-					orderByClause: (this.pageNum - 2) > 0 ? 'asc' : 'desc',
-					pageNum: (this.pageNum - 2) > 0 ? (this.pageNum - 2) : Math.abs(this.pageNum - 3),
-					pageSize: 10,
-					kemu: this.kemu
-				}).then((res) => {
-					(this.pageNum - 2) > 0 || res.rows.reverse()
-					this.questionList = this.questionList.concat(res.rows)
-				})
-				await questionList({
-					orderByClause: (this.pageNum - 1) > 0 ? 'asc' : 'desc',
-					pageNum: (this.pageNum - 1) > 0 ? (this.pageNum - 1) : Math.abs(this.pageNum - 2),
-					pageSize: 10,
-					kemu: this.kemu
-				}).then((res) => {
-					(this.pageNum - 1) > 0 || res.rows.reverse()
-					this.questionList = this.questionList.concat(res.rows)
-				})
-			},
-			questionType(index) {
-				switch (index) {
-					case 1:
-						return '判断';
-					case 2:
-						return '单选';
-					case 3:
-						return '多选';
-				}
-			},
-			swiperChange(e) {
-				let aShake = e.detail.current - this.shakeIndex
-				this.shake += aShake ** 2 != 1 ? -aShake / Math.abs(aShake) : aShake;
-				this.swiperIndex = e.detail.current
-				this.shakeIndex = e.detail.current
-				if (e.detail.current % 10 == 0) {
-					if (Math.abs(this.shake) < 10) {
-						this.shake = 0
-						return
-					}
-					let ascFlag = this.shake / Math.abs(this.shake);
-					this.pageNum += ascFlag
-					questionList({
-						orderByClause: (this.pageNum + ascFlag) > 0 ? 'asc' : 'desc',
-						pageNum: (this.pageNum + ascFlag) > 0 ? (this.pageNum + ascFlag) : Math.abs(this.pageNum + ascFlag - 1),
-						pageSize: 10,
-						kemu: this.kemu
-					}).then((res) => {
-						uni.setStorageSync('pageNum', this.pageNum)
-						this.shake = 0
-						if (ascFlag > 0) {
-							if (e.detail.current == 30) {
-								this.questionList = res.rows.concat(this.questionList.slice(10))
-							}
-							if (e.detail.current == 20) {
-								this.questionList = this.questionList.slice(0, 30).concat(res.rows)
-							}
-							if (e.detail.current == 10) {
-								this.questionList = this.questionList.slice(0, 20).concat(res.rows).concat(this.questionList.slice(30))
-							}
-							if (e.detail.current == 0) {
-								this.questionList = this.questionList.slice(0, 10).concat(res.rows).concat(this.questionList.slice(20))
-							}
-						} else {
-							(this.pageNum + ascFlag) > 0 || res.rows.reverse()
-							if (e.detail.current == 0) {
-								this.questionList = this.questionList.slice(0, 20).concat(res.rows).concat(this.questionList.slice(30))
-							}
-							if (e.detail.current == 30) {
-								this.questionList = this.questionList.slice(0, 10).concat(res.rows).concat(this.questionList.slice(20))
-							}
-							if (e.detail.current == 20) {
-								this.questionList = res.rows.concat(this.questionList.slice(10))
-							}
-							if (e.detail.current == 10) {
-								this.questionList = this.questionList.slice(0, 30).concat(res.rows)
-							}
-						}
-					})
-				}
-			},
-			onChange(event, itembox) {
-				if (this.completeAnswer[itembox.id] || this.answerflag) {
-					return
-				}
-				this.$set(this.userAnswer, itembox.id, event.detail)
-			},
-			singleToggle(event, itembox) {
-				if (this.completeAnswer[itembox.id] || this.answerflag) {
-					return
-				}
-				const {
-					index
-				} = event.currentTarget.dataset;
-				this.$set(this.userAnswer, itembox.id, index)
-				setTimeout(() => {
-					this.submit(itembox)
-				}, 0)
-			},
-			toggle(event, itembox) {
-				const {
-					index
-				} = event.currentTarget.dataset;
-				const checkbox = this.$refs[`checkboxes${itembox.id}`][index];
-				checkbox.toggle();
-			},
-			noop() {},
-			submit(itembox) {
-				this.$set(this.completeAnswer, itembox.id, true)
-				let flag = (this.userAnswer[itembox.id] + '').split(',').sort().join('') == itembox.answerTrue.split('').sort().join(
-					'')
-				if (flag) {
-					wx.vibrateShort();
-					if (this.answerjump) {
-						let index = this.swiperIndex
-						this.swiperIndex = ++index % 40
-					}
-				} else {
-					wx.vibrateLong();
-				}
-			},
-			changeSwitch(e) {
-				if (e) {
-					this.kemu = 1
-				} else {
-					this.kemu = 4
-				}
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	/deep/ .answer .van-cell {
-		background-color: #16CC16 !important;
-		color: #ffffff;
-	}
-
-	/deep/ .van-cell {
-		// background-color: #16CC16 !important;
-		margin: 10rpx;
-		border-radius: 20rpx;
-	}
-
-	.content {
-		width: 100%;
-		height: 100vh;
-		background-color: #FFFFFF;
-	}
-
-	.skeleton {
-		// margin: 0rpx 20rpx;
-	}
-
-	.swiper-box {
-		height: calc(100vh - 120rpx);
-		margin: 0rpx 20rpx;
-
-		swiper-item {
-			overflow: auto;
-		}
-	}
-
-	.top-box {
-		height: 60rpx;
-		padding: 30rpx;
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-
-		.icon {
-			width: 60rpx;
-		}
-
-		.btn {}
-
-		.set {
-			color: red;
-		}
-	}
-
-	.topic-box {
-		// padding: 20rpx;
-		display: flex;
-		justify-content: center;
-
-		// border: 2px solid red;
-		.topic-top {
-			display: flex;
-			// border: 2px solid red;
-			padding: 10rpx;
-
-			.topic-left {
-				display: flex;
-				flex-direction: column;
-
-				.topic-type {
-					background: #E31818;
-					border-radius: 10rpx;
-					// border: 2px solid red;
-					color: #FFFFFF;
-					width: 66rpx;
-					height: 30rpx;
-					display: flex;
-					justify-content: center;
-					align-items: center;
-					border-radius: 15px 15px 0px 15px;
-					padding: 10rpx;
-					margin-bottom: 18rpx;
-				}
-			}
-
-			.topic-tit {
-				padding: 10rpx;
-			}
-
-		}
-
-		.topic-right {
-			flex: 1;
-			display: flex;
-			flex-direction: column;
-			padding: 0 10rpx;
-
-			.topic-img {
-				padding: 10rpx;
-				margin: auto;
-				width: 500rpx;
-				height: 250rpx;
-				// border: 2px solid red;
-			}
-
-			.topic-opt {
-				// border: 2px solid red;
-				padding: 30rpx 5rpx;
-
-				.submit {
-					margin: auto;
-					margin-top: 150rpx;
-
-					height: 80rpx;
-					background: linear-gradient(90deg, #E31818, #ED3E24, #ED4F24);
-					border-radius: 35rpx;
-					display: flex;
-					justify-content: center;
-					align-items: center;
-					color: #FFFFFF;
-				}
-			}
-		}
-
-	}
-
-	.flag {
-		// border: 2px solid red;
-		padding: 30rpx 5rpx;
-		display: flex;
-		justify-content: center;
-
-		.result {
-			display: inline-block;
-			background-color: #16CC16;
-			// border: 2px solid red;
-			width: 690rpx;
-			// height: 70rpx;
-			padding: 20rpx;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			border-radius: 20rpx;
-			color: #ffffff;
-		}
-	}
-
-	.item-titBox {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		padding: 20rpx;
-		border-bottom: 1rpx solid #e8e8e8;
-
-		.item-tit {
-			border-left: 8rpx solid #E31818;
-			font-size: 30rpx;
-			// line-height: 38rpx;
-			padding: 0 11rpx;
-		}
-
-
-	}
-
-	.parsing-text {
-		padding: 30rpx;
-		// border: 2px solid red;
-
-	}
-</style>

+ 0 - 431
pages/question/wrongTitle.vue

@@ -1,431 +0,0 @@
-<template>
-	<view class="content" :class="{night:nightFlag}">
-		<view class="top-box">
-			<view class="icon"></view>
-			<selectSwitch class='btn' @change="changeSwitch" :defaultSwitch='kemu==1'  :switchList="['科一题目','科四题目']" checked_bj_color='#E31818' />
-			<van-icon class='set' name="/static/imgs/sz.png" size='20' @click='show=true' />
-		</view>
-		<van-popup :show="show" @close="show=false" position="bottom">
-			<van-cell title="背题模式" clickable :data-index="index" @click="answerflag=!answerflag">
-				<van-switch slot="right-icon" :checked="answerflag" size="24px" active-color="#16CC16" />
-				<!-- <selectSwitch slot="right-icon" @change="changeSwitch" :switchList="['答题模式','背题模式']" checked_bj_color='#E31818' /> -->
-			</van-cell>
-			<van-cell title="答对跳转下一题 " clickable :data-index="index" @click="answerjump=!answerjump">
-				<van-switch slot="right-icon" :checked="answerjump" size="24px" active-color="#16CC16" />
-			</van-cell>
-			<!-- 			<van-cell title="答错展示题目解析" clickable :data-index="index" @click="checked=!checked">
-				<van-switch slot="right-icon" :checked="checked" size="24px" active-color="#16CC16" />
-			</van-cell> -->
-			<van-cell title="错误震动提醒" clickable :data-index="index" @click="checked=!checked">
-				<van-switch slot="right-icon" :checked="checked" size="24px" active-color="#16CC16" />
-			</van-cell>
-			<van-cell title="夜间模式" clickable :data-index="index" @click="nightFlag=!nightFlag">
-				<van-switch slot="right-icon" :checked="nightFlag" size="24px" active-color="#16CC16" />
-			</van-cell>
-			<!-- <van-cell title="字体选择" clickable :data-index="index" @click="checked=!checked">
-				<van-switch slot="right-icon" :checked="checked" size="24px" active-color="#16CC16" />
-			</van-cell> -->
-		</van-popup>
-
-		<van-skeleton class='skeleton' avatar row="6" :row-width="['100%','40%','70%','70%','70%','70%']" avatar-shape='square'
-		 :loading="loading">
-			<swiper class="swiper-box" :current="swiperIndex" @change="swiperChange" circular>
-				<swiper-item v-for="(itembox,indexbox) in questionList" :key='indexbox'>
-					<view class="swiper-item">
-						<view class="topic-box">
-							<view class="topic-right">
-								<view class="topic-top">
-									<view class="topic-left">
-										<text class="topic-type">{{questionType(itembox.type)}}</text>
-										<van-icon name="star-o" size='20' />
-									</view>
-									<!-- <rich-text class="topic-tit" :nodes="itembox.id+'、'+itembox.question"></rich-text> -->
-									<view class="topic-tit" v-html="itembox.id+'、'+itembox.question"></view>
-								</view>
-								<video v-if="itembox.videoUrl" class="topic-img" :muted='true' :loop='true' :autoplay='true' :controls='false'
-								 :src="encodeURI(itembox.mediaUrl)"></video>
-								<image v-if="itembox.sinaimg" class="topic-img" :src="itembox.mediaUrl" mode="aspectFit"></image>
-								<view class="topic-opt" v-if='itembox.type==2'>
-									<van-radio-group :value="userAnswer[itembox.id]">
-										<van-cell-group>
-											<van-cell :class='{answer:(itembox.answerTrue.includes(index+1) && (answerflag || completeAnswer[itembox.id]))}'
-											 v-for="(item,index) in choiceList" :key="index" :title="itembox[item]" v-show='itembox[item]' clickable
-											 :data-index="index+1" @click="singleToggle($event,itembox)">
-												<van-icon v-if="(itembox.answerTrue.includes(index+1) && (answerflag || completeAnswer[itembox.id]))" slot="icon"
-												 name="/static/imgs/true.png" size='20' />
-												<van-radio slot="right-icon" :ref="`checkboxes${itembox.id}`" checked-color="#1464cc" :name="index+1" />
-											</van-cell>
-										</van-cell-group>
-									</van-radio-group>
-									<!-- <button @click="submit(itembox)" class="submit" type="default" v-show="!(answerflag || completeAnswer[itembox.id])">提交答案</button> -->
-								</view>
-								<view class="topic-opt" v-if='itembox.type==1'>
-									<van-radio-group :value="userAnswer[itembox.id]">
-										<van-cell-group>
-											<van-cell :class='{answer:(itembox.answerTrue.includes(index+1) && (answerflag || completeAnswer[itembox.id]))}'
-											 v-for="(item,index) in 2" :key="index" :title="index?'错误':'正确'" clickable :data-index="index+1" @click="singleToggle($event,itembox)">
-												<van-icon v-if="(itembox.answerTrue.includes(index+1) && (answerflag || completeAnswer[itembox.id]))" slot="icon"
-												 name="/static/imgs/true.png" size='20' />
-												<van-radio slot="right-icon" :ref="`checkboxes${itembox.id}`" checked-color="#1464cc" :name="index+1" />
-											</van-cell>
-										</van-cell-group>
-									</van-radio-group>
-									<!-- <button @click="submit(itembox)" class="submit" type="default" v-show="!(answerflag || completeAnswer[itembox.id])">提交答案</button> -->
-								</view>
-								<view class="topic-opt" v-else-if='itembox.type==3'>
-									<van-checkbox-group :value="userAnswer[itembox.id]" @change="onChange($event,itembox)">
-										<van-cell-group>
-											<van-cell :class='{answer:(itembox.answerTrue.includes(index+1) && (answerflag || completeAnswer[itembox.id]))}'
-											 v-for="(item,index) in choiceList" :key="index" :title="itembox[item]" v-show='itembox[item]' clickable
-											 @click='toggle($event,itembox)' :data-index="index">
-												<van-icon v-if="(itembox.answerTrue.includes(index+1) && (answerflag || completeAnswer[itembox.id]))" slot="icon"
-												 name="/static/imgs/true.png" size='20' />
-												<van-checkbox shape="square" catch:tap="noop" slot="right-icon" :ref="`checkboxes${itembox.id}`"
-												 checked-color="#1464cc" :name="index+1" />
-											</van-cell>
-										</van-cell-group>
-									</van-checkbox-group>
-									<button @click="submit(itembox)" class="submit" type="default" v-show="!(answerflag || completeAnswer[itembox.id])">提交答案</button>
-								</view>
-							</view>
-						</view>
-						<view v-show="answerflag || completeAnswer[itembox.id]">
-							<view class="flag">
-								<text v-if="itembox.type==2" class="result">正确答案: {{itembox[choiceList[itembox.answerTrue-1]]}}</text>
-								<text v-else-if="itembox.type==1" class="result">正确答案: {{itembox.answerTrue==1?'正确':'错误'}}</text>
-								<text v-else-if="itembox.type==3" class="result">正确答案: {{itembox.answerTrue.split('').map((key)=>{
-									return itembox[choiceList[key-1]]
-								})}}</text>
-							</view>
-							<view class="parsing">
-								<view class="item-titBox">
-									<text class="item-tit">题目解析</text>
-								</view>
-								<view class="parsing-text">
-									<text class="item-tit">{{itembox.explain1 ? itembox.explain1 : "无"}}</text>
-								</view>
-							</view>
-						</view>
-					</view>
-				</swiper-item>
-			</swiper>
-		</van-skeleton>
-
-
-	</view>
-</template>
-
-<script>
-	import selectSwitch from "@/components/xuan-switch/xuan-switch.vue";
-	import {
-		questionErrorList
-	} from "@/api/answer.js"
-	export default {
-		components: {
-			selectSwitch
-		},
-		data() {
-			return {
-				loading: true,
-				answerflag: false,
-				answerjump: true,
-				nightFlag: false,
-				kemu: uni.getStorageSync('kemu') || 1,
-				completeAnswer: {},
-				show: false,
-				checked: true,
-				radio: null,
-				result: [],
-				userAnswer: {},
-				questionList: {},
-				choiceList: ['an1', 'an2', 'an3', 'an4', 'an5', 'an6', 'an7'],
-				swiperIndex: 0,
-				shakeIndex: 0,
-				pageNum: 1,
-				shake: 0,
-			}
-		},
-		watch: {
-			kemu(val) {
-				uni.setStorageSync('kemu', val)
-				this.pageNum = 1
-				this.listInit()
-			}
-		},
-		mounted() {
-			this.listInit()
-		},
-		methods: {
-			async listInit() {
-				this.loading=true
-				await questionErrorList({
-					pageNum: this.pageNum,
-					pageSize: 20,
-					kemu: this.kemu
-				}).then((res) => {
-					if (res.rows.length == 0) {
-						res.rows[0] = {
-							question: "暂无错题"
-						}
-					}
-					this.questionList = res.rows
-					this.$nextTick(() => {
-						this.loading = false
-					})
-				})
-			},
-			questionType(index) {
-				switch (index) {
-					case 1:
-						return '判断';
-					case 2:
-						return '单选';
-					case 3:
-						return '多选';
-				}
-			},
-			swiperChange(e) {
-				let aShake = e.detail.current - this.shakeIndex
-				this.shake += aShake ** 2 != 1 ? -aShake / Math.abs(aShake) : aShake;
-				this.swiperIndex = e.detail.current
-				this.shakeIndex = e.detail.current
-				if (e.detail.current % 10 == 0) {
-					if (Math.abs(this.shake) < 10) {
-						this.shake = 0
-						return
-					}
-					this.pageNum += 1;
-					questionList({
-						pageNum: this.pageNum + 1,
-						pageSize: 10,
-						kemu: this.kemu
-					}).then((res) => {
-						this.shake = 0
-						if (e.detail.current == 20) {
-							this.questionList = res.rows.concat(this.questionList.slice(10))
-						}
-						if (e.detail.current == 10) {
-							this.questionList = this.questionList.slice(0, 20).concat(res.rows)
-						}
-						if (e.detail.current == 0) {
-							this.questionList = this.questionList.slice(0, 10).concat(res.rows).concat(this.questionList.slice(20))
-						}
-					})
-				}
-			},
-			onChange(event, itembox) {
-				if (this.completeAnswer[itembox.id] || this.answerflag) {
-					return
-				}
-				this.$set(this.userAnswer, itembox.id, event.detail)
-			},
-			singleToggle(event, itembox) {
-				if (this.completeAnswer[itembox.id] || this.answerflag) {
-					return
-				}
-				const {
-					index
-				} = event.currentTarget.dataset;
-				this.$set(this.userAnswer, itembox.id, index)
-				setTimeout(() => {
-					this.submit(itembox)
-				}, 0)
-			},
-			toggle(event, itembox) {
-				const {
-					index
-				} = event.currentTarget.dataset;
-				const checkbox = this.$refs[`checkboxes${itembox.id}`][index];
-				checkbox.toggle();
-			},
-			noop() {},
-			submit(itembox) {
-				this.$set(this.completeAnswer, itembox.id, true)
-				let flag = (this.userAnswer[itembox.id] + '').split(',').sort().join('') == itembox.answerTrue.split('').sort().join(
-					'')
-				if (flag) {
-					wx.vibrateShort();
-					if (this.answerjump) {
-						let index = this.swiperIndex
-						this.swiperIndex = ++index % this.questionList.length
-					}
-				} else {
-					wx.vibrateLong();
-				}
-			},
-			changeSwitch(e) {
-				if (e) {
-					this.kemu = 1
-				} else {
-					this.kemu = 4
-				}
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	/deep/ .answer .van-cell {
-		background-color: #16CC16 !important;
-		color: #ffffff;
-	}
-
-	/deep/ .van-cell {
-		// background-color: #16CC16 !important;
-		margin: 10rpx;
-		border-radius: 20rpx;
-	}
-
-	.content {
-		width: 100%;
-		height: 100vh;
-		background-color: #FFFFFF;
-	}
-
-	.skeleton {
-		// margin: 0rpx 20rpx;
-	}
-
-	.swiper-box {
-		height: calc(100vh - 120rpx);
-		margin: 0rpx 20rpx;
-
-		swiper-item {
-			overflow: auto;
-		}
-	}
-
-	.top-box {
-		height: 60rpx;
-		padding: 30rpx;
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-
-		.icon {
-			width: 60rpx;
-		}
-
-		.btn {}
-
-		.set {
-			color: red;
-		}
-	}
-
-	.topic-box {
-		// padding: 20rpx;
-		display: flex;
-		justify-content: center;
-
-		// border: 2px solid red;
-		.topic-top {
-			display: flex;
-			// border: 2px solid red;
-			padding: 10rpx;
-
-			.topic-left {
-				display: flex;
-				flex-direction: column;
-
-				.topic-type {
-					background: #E31818;
-					border-radius: 10rpx;
-					// border: 2px solid red;
-					color: #FFFFFF;
-					width: 66rpx;
-					height: 30rpx;
-					display: flex;
-					justify-content: center;
-					align-items: center;
-					border-radius: 15px 15px 0px 15px;
-					padding: 10rpx;
-					margin-bottom: 18rpx;
-				}
-			}
-
-			.topic-tit {
-				padding: 10rpx;
-			}
-
-		}
-
-		.topic-right {
-			flex: 1;
-			display: flex;
-			flex-direction: column;
-			padding: 0 10rpx;
-
-			.topic-img {
-				padding: 10rpx;
-				margin: auto;
-				width: 500rpx;
-				height: 250rpx;
-				// border: 2px solid red;
-			}
-
-			.topic-opt {
-				// border: 2px solid red;
-				padding: 30rpx 5rpx;
-
-				.submit {
-					margin: auto;
-					margin-top: 150rpx;
-
-					height: 80rpx;
-					background: linear-gradient(90deg, #E31818, #ED3E24, #ED4F24);
-					border-radius: 35rpx;
-					display: flex;
-					justify-content: center;
-					align-items: center;
-					color: #FFFFFF;
-				}
-			}
-		}
-
-	}
-
-	.flag {
-		// border: 2px solid red;
-		padding: 30rpx 5rpx;
-		display: flex;
-		justify-content: center;
-
-		.result {
-			display: inline-block;
-			background-color: #16CC16;
-			// border: 2px solid red;
-			width: 690rpx;
-			// height: 70rpx;
-			padding: 20rpx;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			border-radius: 20rpx;
-			color: #ffffff;
-		}
-	}
-
-	.item-titBox {
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		padding: 20rpx;
-		border-bottom: 1rpx solid #e8e8e8;
-
-		.item-tit {
-			border-left: 8rpx solid #E31818;
-			font-size: 30rpx;
-			// line-height: 38rpx;
-			padding: 0 11rpx;
-		}
-
-
-	}
-
-	.parsing-text {
-		padding: 30rpx;
-		// border: 2px solid red;
-
-	}
-</style>

+ 0 - 134
pages/user/order.vue

@@ -1,134 +0,0 @@
-<template>
-	<view>
-		<van-tabs :active="active" @change="onChange" animated sticky>
-			<van-tab title="近7日订单">
-				<loadSke :loading='orderLoading'>
-					<view class="order-item" v-for="(item,index) in orderList" :key='item' @click="goPage(`/pages/cinema/orderdes?outTradeNo=${item.outTradeNo}`)">
-						<image class="img" :src="item.goodsPictureUrl" mode="widthFix"></image>
-						<view class="des-box">
-							<text>订单名称:{{item.orderDataJson.cinemaData.filmName}}</text>
-							<text>订单日期:{{item.createTime}}</text>
-							<text> </text>
-							<text>订单价格:{{item.total/100}}</text>
-						</view>
-						<van-icon class='icon' name="arrow" />
-					</view>
-				</loadSke>
-			</van-tab>
-			<van-tab title="历史订单">
-				<loadSke :loading='orderLoading2'>
-					<view class="order-item ios-bottom" v-for="(item,index) in orderList2" :key='item' @click="goPage(`/pages/cinema/orderdes?outTradeNo=${item.outTradeNo}`)">
-						<image class="img" :src="item.goodsPictureUrl" mode="widthFix"></image>
-						<view class="des-box">
-							<text>订单名称:{{item.orderDataJson.cinemaData.filmName}}</text>
-							<text>订单日期:{{item.createTime}}</text>
-							<text> </text>
-							<text>订单价格:{{item.total/100}}</text>
-						</view>
-						<van-icon class='icon' name="arrow" />
-					</view>
-				</loadSke>
-			</van-tab>
-		</van-tabs>
-	</view>
-</template>
-
-<script>
-	import {
-		getOrderList
-	} from '@/api/order.js'
-	import {
-		orderQuery
-	} from '@/api/cinema.js'
-	export default {
-		data: () => ({
-			active: 0,
-			orderLoading: true,
-			orderLoading2: true,
-			orderList: {},
-			orderList2: {}
-		}),
-		mounted() {
-			this.init()
-			this.init2()
-			orderQuery({
-				thirdOrderId: '12021053117040103901269463601171'
-			})
-		},
-		methods: {
-			async init() {
-				let orderListRes = await getOrderList({
-					days: 7,
-					pageNum: 1,
-					pageSize: 10
-				})
-				orderListRes.rows.map(val => {
-					val.orderDataJson = JSON.parse(val.orderDataJson)
-					return val
-				})
-				this.orderList = orderListRes.rows
-				this.orderLoading = false
-			},
-			async init2() {
-				let orderListRes = await getOrderList({
-					pageNum: 1,
-					pageSize: 10
-				})
-				orderListRes.rows.map(val => {
-					val.orderDataJson = JSON.parse(val.orderDataJson)
-					return val
-				})
-				this.orderList2 = orderListRes.rows
-				this.orderLoading2 = false
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	.ios-bottom{
-		padding-bottom: calc(10px + env(safe-area-inset-bottom)/2);
-	}
-	.order-item {
-		background-color: #FFFFFF;
-		margin-top: 10rpx;
-		padding: 30rpx;
-		display: flex;
-		justify-content: flex-start;
-		align-items: stretch;
-		position: relative;
-
-		&:nth-child(1) {
-			margin-top: 20rpx;
-		}
-
-		.img {
-			width: 112rpx;
-			height: 156rpx;
-			margin-right: 50rpx;
-		}
-
-		.des-box {
-			display: flex;
-			flex-direction: column;
-			justify-content: space-between;
-
-			text {
-				font-size: 26rpx;
-				font-weight: 400;
-				color: #666666;
-			}
-
-			text:nth-child(2) {
-				color: #0F0404 !important;
-			}
-		}
-
-		.icon {
-			position: absolute;
-			right: 30rpx;
-			top: 50%;
-			transform: translateY(-50%);
-		}
-	}
-</style>

+ 0 - 118
pages/userset/index.vue

@@ -1,118 +0,0 @@
-<template>
-	<view class="">
-		<van-cell center title="我的昵称" :value="userData.nickName"/>
-		<van-cell title="我的头像" center>
-		  <image class="image-ava" slot="right-icon" :src="userData.headImage">
-		</van-cell>
-		<van-popup :show="idCardShow" round>
-			<view class="idCard">
-				<van-divider contentPosition="center">绑定身份证信息</van-divider>
-				<van-cell-group>
-					<van-field :value="idCard" @change='idCardput' label="身份证" maxlength='18' placeholder="请输入身份证号" />
-					<van-field :value="password" @change='passwordput' type="password" label="密码" placeholder="请输入密码" />
-					<van-cell title="归属驾校地区" :value="area" @click='popup=!popup' />
-				</van-cell-group>
-				<view class="btn-box">
-					<van-button @click='idCardShow=!idCardShow' type="default">取消绑定</van-button>
-					<van-button @click='submitBinding' type="info" :loading='loading' loading-text="绑定中..">确认绑定</van-button>
-				</view>
-			</view>
-		</van-popup>
-		<van-popup :show="popup" position="bottom">
-			<van-area :columns-placeholder="['请选择', '请选择']" value="35" @cancel='popup=!popup' @confirm='popup=!popup' :area-list="areaList"
-			 @change='regionSelection' columns-num='2' />
-		</van-popup>
-	</view>
-</template>
-
-<script>
-	import md5 from 'crypto-js/md5'
-	import {
-		login,
-		getInfo,
-		bindUserCard
-	} from '@/api/login.js'
-	export default {
-		data() {
-			return {
-				loading: false,
-				idCardShow: false,
-				popup: false,
-				idCard: null,
-				password: null,
-				areaCode: null,
-				area: "请点击选择地区",
-				areaList: {
-					province_list: {
-						35: '福建省',
-					},
-					city_list: {
-						3501: '福州市',
-						3502: '厦门市',
-						3503: '莆田市',
-						3504: '三明市',
-						3505: '泉州市',
-						3506: '漳州市',
-						3507: '南平市',
-						3508: '龙岩市',
-						3509: '宁德市',
-					}
-				}
-			}
-		},
-		computed: {
-			userData() {
-				return this.$store.getters.userInfo;
-			}
-		},
-		methods: {
-			regionSelection(e) {
-				console.log(e)
-				this.area = `${e.detail.values[0].name}  ${e.detail.values[1].name}`
-				this.areaCode = e.detail.values[1].code
-			},
-			idCardput(e) {
-				this.idCard = e.detail
-			},
-			passwordput(e) {
-				this.password = e.detail
-			},
-			submitBinding() {
-				console.log(this.areaCode, this.idCard, this.password)
-				this.loading = true
-				bindUserCard({
-					city: this.areaCode,
-					logincode: this.idCard,
-					password: md5(this.password).toString()
-				}).then((res) => {
-					if (res.code == 200) {
-						Toast.success('绑定成功');
-						this.idCardShow = false
-					} else if (res.code == 502) {
-						Toast.fail(res.msg);
-					} else {
-						Toast.fail('系统内部错误');
-					}
-					this.loading = false
-				})
-			},
-		}
-	}
-</script>
-
-<style>
-	.idCard {
-		width: 600rpx;
-		padding: 30rpx;
-		margin: auto;
-		display: flex;
-		flex-direction: column;
-		justify-content: center;
-		align-items: center;
-	}
-	.image-ava{
-		width: 100rpx;
-		height: 100rpx;
-		border-radius: 50%;
-	}
-</style>

+ 0 - 20
pages/webview/webview.vue

@@ -1,20 +0,0 @@
-<template>
-	<web-view :src="decodeURIComponent(src)"></web-view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-				src: encodeURIComponent('https://sqxh.zzxcx.net')
-			};
-		},
-		onLoad: function (option) {
-		    this.src = option.src;
-		}
-	}
-</script>
-
-<style lang="scss">
-
-</style>

BIN
static/.DS_Store


BIN
static/imgs/banner.png


BIN
static/imgs/bf.png


BIN
static/imgs/bg.png


BIN
static/imgs/bgbzicon.png


BIN
static/imgs/bxh.png


BIN
static/imgs/ctsc.png


BIN
static/imgs/fx.png


BIN
static/imgs/fxh.png


BIN
static/imgs/gd.png


BIN
static/imgs/jx.png


BIN
static/imgs/llzj.png


BIN
static/imgs/lxkf.png


BIN
static/imgs/mockicon.png


BIN
static/imgs/order-icon.png


BIN
static/imgs/sc.png


BIN
static/imgs/sequentialicon.png


BIN
static/imgs/share.png


BIN
static/imgs/shmr.png


BIN
static/imgs/sjcs.png


BIN
static/imgs/sq.png


BIN
static/imgs/sz.png


BIN
static/imgs/true.png


BIN
static/imgs/wd.png


BIN
static/imgs/wdh.png


BIN
static/imgs/wdsc.png


BIN
static/imgs/wdsz.png


BIN
static/imgs/wxtb.png


BIN
static/imgs/wyjs.png


BIN
static/imgs/yjfk.png


BIN
static/imgs/ysc.png


BIN
static/imgs/zf.png


BIN
static/imgs/zt.png


BIN
static/imgs/zth.png


BIN
static/imgs/zz.png


BIN
static/logo.png


+ 0 - 10
store/getters.js

@@ -1,10 +0,0 @@
-const getters = {
-  token: state => state.user.token,
-  userInfo: state => state.user.userInfo,
-  avatar: state => state.user.avatar,
-  name: state => state.user.name,
-  introduction: state => state.user.introduction,
-  roles: state => state.user.roles,
-  permissions: state => state.user.permissions
-}
-export default getters

+ 0 - 17
store/index.js

@@ -1,17 +0,0 @@
-import Vue from 'vue'
-import Vuex from 'vuex'
-import user from './modules/user'
-import cinema from './modules/cinema.js'
-import getters from './getters'
-
-Vue.use(Vuex)
-
-const store = new Vuex.Store({
-  modules: {
-    user,
-	cinema
-  },
-  getters
-})
-
-export default store

+ 0 - 30
store/modules/cinema.js

@@ -1,30 +0,0 @@
-const cinema = {
-	state: {
-		filmList: null,
-		filmDiscount: 1,
-		discountRule: {},
-		cityId: null,
-		cityObj:{}
-	},
-
-	mutations: {
-		SET_FILMLIST: (state, filmList) => {
-			state.filmList = filmList
-		},
-		SET_FILMDISCOUNT: (state, filmDiscount) => {
-			state.filmDiscount = filmDiscount
-		},
-		SET_DISCOUNTRULE: (state, discountRule) => {
-			state.discountRule = discountRule
-		},
-		SET_CITYID: (state, cityId) => {
-			state.cityId = cityId
-		},
-		SET_CITYOBJ: (state, cityObj) => {
-			state.cityObj = cityObj
-		}
-	}
-
-}
-
-export default cinema

+ 0 - 101
store/modules/user.js

@@ -1,101 +0,0 @@
-import {
-	login,
-	logout,
-	getInfo
-} from '@/api/login'
-import {
-	getToken,
-	setToken,
-	removeToken
-} from '@/utils/auth'
-
-const user = {
-	state: {
-		token: getToken(),
-		userInfo: '',
-		name: '',
-		avatar: '',
-		roles: [],
-		permissions: []
-	},
-
-	mutations: {
-		SET_TOKEN: (state, token) => {
-			state.token = token
-		},
-		SET_USERINFO: (state, userInfo) => {
-			state.userInfo = userInfo
-		},
-		SET_NAME: (state, name) => {
-			state.name = name
-		},
-		SET_AVATAR: (state, avatar) => {
-			state.avatar = avatar
-		},
-		SET_ROLES: (state, roles) => {
-			state.roles = roles
-		},
-		SET_PERMISSIONS: (state, permissions) => {
-			state.permissions = permissions
-		}
-	},
-
-	actions: {
-		// 登录
-		Login({
-			commit
-		}, userInfo) {
-			console.log('开始登录')
-			return new Promise((resolve, reject) => {
-				login().then(res => {
-					setToken(res.data.token)
-					commit('SET_TOKEN', res.data.token)
-					resolve(res)
-				}).catch(error => {
-					reject(error)
-				})
-			})
-		},
-
-		// 获取用户信息
-		GetInfo({
-			commit,
-			state
-		}) {
-			return new Promise((resolve, reject) => {
-				getInfo().then(res => {
-					commit('SET_USERINFO', res.data.student)
-					resolve(res)
-				}).catch(error => {
-					reject(error)
-				})
-			})
-		},
-
-		// 退出系统
-		// LogOut({ commit, state }) {
-		//   return new Promise((resolve, reject) => {
-		//     logout(state.token).then(() => {
-		//       commit('SET_TOKEN', '')
-		//       commit('SET_ROLES', [])
-		//       commit('SET_PERMISSIONS', [])
-		//       removeToken()
-		//       resolve()
-		//     }).catch(error => {
-		//       reject(error)
-		//     })
-		//   })
-		// },
-
-		// 前端 登出
-		// FedLogOut({ commit }) {
-		//   return new Promise(resolve => {
-		//     commit('SET_TOKEN', '')
-		//     removeToken()
-		//     resolve()
-		//   })
-		// }
-	}
-}
-
-export default user

+ 0 - 76
uni.scss

@@ -1,76 +0,0 @@
-/**
- * 这里是uni-app内置的常用样式变量
- *
- * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
- * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
- *
- */
-
-/**
- * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
- *
- * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
- */
-
-/* 颜色变量 */
-
-/* 行为相关颜色 */
-$uni-color-primary: #007aff;
-$uni-color-success: #4cd964;
-$uni-color-warning: #f0ad4e;
-$uni-color-error: #dd524d;
-
-/* 文字基本颜色 */
-$uni-text-color:#333;//基本色
-$uni-text-color-inverse:#fff;//反色
-$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息
-$uni-text-color-placeholder: #808080;
-$uni-text-color-disable:#c0c0c0;
-
-/* 背景颜色 */
-$uni-bg-color:#ffffff;
-$uni-bg-color-grey:#f8f8f8;
-$uni-bg-color-hover:#f1f1f1;//点击状态颜色
-$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色
-
-/* 边框颜色 */
-$uni-border-color:#c8c7cc;
-
-/* 尺寸变量 */
-
-/* 文字尺寸 */
-$uni-font-size-sm:24rpx;
-$uni-font-size-base:28rpx;
-$uni-font-size-lg:32rpx;
-
-/* 图片尺寸 */
-$uni-img-size-sm:40rpx;
-$uni-img-size-base:52rpx;
-$uni-img-size-lg:80rpx;
-
-/* Border Radius */
-$uni-border-radius-sm: 4rpx;
-$uni-border-radius-base: 6rpx;
-$uni-border-radius-lg: 12rpx;
-$uni-border-radius-circle: 50%;
-
-/* 水平间距 */
-$uni-spacing-row-sm: 10px;
-$uni-spacing-row-base: 20rpx;
-$uni-spacing-row-lg: 30rpx;
-
-/* 垂直间距 */
-$uni-spacing-col-sm: 8rpx;
-$uni-spacing-col-base: 16rpx;
-$uni-spacing-col-lg: 24rpx;
-
-/* 透明度 */
-$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
-
-/* 文章场景相关 */
-$uni-color-title: #2C405A; // 文章标题颜色
-$uni-font-size-title:40rpx;
-$uni-color-subtitle: #555555; // 二级标题颜色
-$uni-font-size-subtitle:36rpx;
-$uni-color-paragraph: #3F536E; // 文章段落颜色
-$uni-font-size-paragraph:30rpx;

+ 0 - 2
uni_modules/uni-badge/changelog.md

@@ -1,2 +0,0 @@
-## 1.0.6(2021-02-04)
-- 调整为uni_modules目录规范

+ 0 - 156
uni_modules/uni-badge/components/uni-badge/uni-badge.vue

@@ -1,156 +0,0 @@
-<template>
-	<text v-if="text" :class="inverted ? 'uni-badge--' + type + ' uni-badge--' + size + ' uni-badge--' + type + '-inverted' : 'uni-badge--' + type + ' uni-badge--' + size"
-	 :style="badgeStyle" class="uni-badge" @click="onClick()">{{ text }}</text>
-</template>
-
-<script>
-	/**
-	 * Badge 数字角标
-	 * @description 数字角标一般和其它控件(列表、9宫格等)配合使用,用于进行数量提示,默认为实心灰色背景
-	 * @tutorial https://ext.dcloud.net.cn/plugin?id=21
-	 * @property {String} text 角标内容
-	 * @property {String} type = [default|primary|success|warning|error] 颜色类型
-	 * 	@value default 灰色
-	 * 	@value primary 蓝色
-	 * 	@value success 绿色
-	 * 	@value warning 黄色
-	 * 	@value error 红色
-	 * @property {String} size = [normal|small] Badge 大小
-	 * 	@value normal 一般尺寸
-	 * 	@value small 小尺寸
-	 * @property {String} inverted = [true|false] 是否无需背景颜色
-	 * @event {Function} click 点击 Badge 触发事件
-	 * @example <uni-badge text="1"></uni-badge>
-	 */
-	export default {
-		name: 'UniBadge',
-		props: {
-			type: {
-				type: String,
-				default: 'default'
-			},
-			inverted: {
-				type: Boolean,
-				default: false
-			},
-			text: {
-				type: [String, Number],
-				default: ''
-			},
-			size: {
-				type: String,
-				default: 'normal'
-			}
-		},
-		data() {
-			return {
-				badgeStyle: ''
-			};
-		},
-		watch: {
-			text() {
-				this.setStyle()
-			}
-		},
-		mounted() {
-			this.setStyle()
-		},
-		methods: {
-			setStyle() {
-				this.badgeStyle = `width: ${String(this.text).length * 8 + 12}px`
-			},
-			onClick() {
-				this.$emit('click');
-			}
-		}
-	};
-</script>
-
-<style lang="scss" scoped>
-	$bage-size: 12px;
-	$bage-small: scale(0.8);
-	$bage-height: 20px;
-
-	.uni-badge {
-		/* #ifndef APP-PLUS */
-		display: flex;
-		box-sizing: border-box;
-		overflow: hidden;
-		/* #endif */
-		justify-content: center;
-		flex-direction: row;
-		height: $bage-height;
-		line-height: $bage-height;
-		color: $uni-text-color;
-		border-radius: 100px;
-		background-color: $uni-bg-color-hover;
-		background-color: transparent;
-		text-align: center;
-		font-family: 'Helvetica Neue', Helvetica, sans-serif;
-		font-size: $bage-size;
-		padding: 0px 6px;
-		/* #ifdef H5 */
-		cursor: pointer;
-		/* #endif */
-	}
-
-	.uni-badge--inverted {
-		padding: 0 5px 0 0;
-		color: $uni-bg-color-hover;
-	}
-
-	.uni-badge--default {
-		color: $uni-text-color;
-		background-color: $uni-bg-color-hover;
-	}
-
-	.uni-badge--default-inverted {
-		color: $uni-text-color-grey;
-		background-color: transparent;
-	}
-
-	.uni-badge--primary {
-		color: $uni-text-color-inverse;
-		background-color: $uni-color-primary;
-	}
-
-	.uni-badge--primary-inverted {
-		color: $uni-color-primary;
-		background-color: transparent;
-	}
-
-	.uni-badge--success {
-		color: $uni-text-color-inverse;
-		background-color: $uni-color-success;
-	}
-
-	.uni-badge--success-inverted {
-		color: $uni-color-success;
-		background-color: transparent;
-	}
-
-	.uni-badge--warning {
-		color: $uni-text-color-inverse;
-		background-color: $uni-color-warning;
-	}
-
-	.uni-badge--warning-inverted {
-		color: $uni-color-warning;
-		background-color: transparent;
-	}
-
-	.uni-badge--error {
-		color: $uni-text-color-inverse;
-		background-color: $uni-color-error;
-	}
-
-	.uni-badge--error-inverted {
-		color: $uni-color-error;
-		background-color: transparent;
-	}
-
-	.uni-badge--small {
-		transform: $bage-small;
-		transform-origin: center center;
-	}
-</style>

+ 0 - 83
uni_modules/uni-badge/package.json

@@ -1,83 +0,0 @@
-{
-  "id": "uni-badge",
-  "displayName": "Badge 数字角标",
-  "version": "1.0.6",
-  "description": "数字角标(徽章)组件,在元素周围展示消息提醒,一般用于列表、九宫格、按钮等地方。",
-  "keywords": [
-    "",
-    "badge",
-    "uni-ui",
-    "数字角标",
-    "徽章"
-],
-  "repository": "https://github.com/dcloudio/uni-ui",
-  "engines": {
-    "HBuilderX": ""
-  },
-  "directories": {
-    "example": "../../temps/example"
-  },
-  "dcloudext": {
-    "category": [
-      "前端组件",
-      "通用组件"
-    ],
-    "sale": {
-      "regular": {
-        "price": "0.00"
-      },
-      "sourcecode": {
-        "price": "0.00"
-      }
-    },
-    "contact": {
-      "qq": ""
-    },
-    "declaration": {
-      "ads": "无",
-      "data": "无",
-      "permissions": "无"
-    },
-    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
-  },
-  "uni_modules": {
-    "dependencies": [],
-    "encrypt": [],
-    "platforms": {
-      "cloud": {
-        "tcb": "y",
-        "aliyun": "y"
-      },
-      "client": {
-        "App": {
-          "app-vue": "u",
-          "app-nvue": "u"
-        },
-        "H5-mobile": {
-          "Safari": "u",
-          "Android Browser": "u",
-          "微信浏览器(Android)": "u",
-          "QQ浏览器(Android)": "u"
-        },
-        "H5-pc": {
-          "Chrome": "u",
-          "IE": "u",
-          "Edge": "u",
-          "Firefox": "u",
-          "Safari": "u"
-        },
-        "小程序": {
-          "微信": "u",
-          "阿里": "u",
-          "百度": "u",
-          "字节跳动": "u",
-          "QQ": "u"
-        },
-        "快应用": {
-          "华为": "u",
-          "联盟": "u"
-        }
-      }
-    }
-  }
-}

+ 0 - 43
uni_modules/uni-badge/readme.md

@@ -1,43 +0,0 @@
-
-
-## Badge 数字角标
-> 代码块: `uBadge`
-
-
-数字角标一般和其它控件(列表、9宫格等)配合使用,用于进行数量提示,默认为实心灰色背景,
-
-### 安装方式
-
-本组件符合[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)规范,`HBuilderX 2.5.5`起,只需将本组件导入项目,在页面`template`中即可直接使用,无需在页面中`import`和注册`components`。
-
-如需通过`npm`方式使用`uni-ui`组件,另见文档:[https://ext.dcloud.net.cn/plugin?id=55](https://ext.dcloud.net.cn/plugin?id=55)
-
-### 基本用法
-
-在 ``template`` 中使用组件
-
-```html
-<uni-badge text="1"></uni-badge>
-<uni-badge text="2" type="purple" @click="bindClick"></uni-badge>
-<uni-badge text="3" type="primary" :inverted="true"></uni-badge>
-```
-
-
-## API
-
-### Badge Props
-
-|属性名		|类型		|默认值	|说明																											|
-|:-:		|:-:		|:-:	|:-:					 																						|
-|text		|String		|-		|角标内容																										|
-|type		|String		|default|颜色类型,可选值:default(灰色)、primary(蓝色)、success(绿色)、warning(黄色)、error(红色)|
-|size		|String		|normal|Badge 大小,可取值:normal、small|
-|inverted	|Boolean	|false	|是否无需背景颜色,为 true 时,背景颜色将变为文字的字体颜色														|
-
-### Badge Events
-
-|事件名	|事件说明			|返回参数	|
-|:-:	|:-:				|:-:		|
-|@click	|点击 Badge 触发事件| -			|
-
-

+ 0 - 2
uni_modules/uni-grid/changelog.md

@@ -1,2 +0,0 @@
-## 1.2.3(2021-02-05)
-- 调整为uni_modules目录规范

+ 0 - 127
uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.vue

@@ -1,127 +0,0 @@
-<template>
-	<view v-if="width" :style="'width:'+width+';'+(square?'height:'+width:'')" class="uni-grid-item">
-		<view :class="{ 'uni-grid-item--border': showBorder,  'uni-grid-item--border-top': showBorder && index < column, 'uni-highlight': highlight }"
-		 :style="{'border-right-color': borderColor ,'border-bottom-color': borderColor ,'border-top-color': borderColor }"
-		 class="uni-grid-item__box" @click="_onClick">
-			<slot />
-		</view>
-	</view>
-</template>
-
-<script>
-	/**
-	 * GridItem 宫格
-	 * @description 宫格组件
-	 * @tutorial https://ext.dcloud.net.cn/plugin?id=27
-	 * @property {Number} index 子组件的唯一标识 ,点击gird会返回当前的标识
-	 */
-	export default {
-		name: 'UniGridItem',
-		inject: ['grid'],
-		props: {
-			index: {
-				type: Number,
-				default: 0
-			}
-		},
-		data() {
-			return {
-				column: 0,
-				showBorder: true,
-				square: true,
-				highlight: true,
-				left: 0,
-				top: 0,
-				openNum: 2,
-				width: 0,
-				borderColor: '#e5e5e5'
-			}
-		},
-		created() {
-			this.column = this.grid.column
-			this.showBorder = this.grid.showBorder
-			this.square = this.grid.square
-			this.highlight = this.grid.highlight
-			this.top = this.hor === 0 ? this.grid.hor : this.hor
-			this.left = this.ver === 0 ? this.grid.ver : this.ver
-			this.borderColor = this.grid.borderColor
-			this.grid.children.push(this)
-			// this.grid.init()
-			this.width = this.grid.width
-		},
-		beforeDestroy() {
-			this.grid.children.forEach((item, index) => {
-				if (item === this) {
-					this.grid.children.splice(index, 1)
-				}
-			})
-		},
-		methods: {
-			_onClick() {
-				this.grid.change({
-					detail: {
-						index: this.index
-					}
-				})
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.uni-grid-item {
-		/* #ifndef APP-NVUE */
-		height: 100%;
-		display: flex;
-		/* #endif */
-		/* #ifdef H5 */
-		cursor: pointer;
-		/* #endif */
-	}
-
-	.uni-grid-item__box {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		width: 100%;
-		/* #endif */
-		position: relative;
-		flex: 1;
-		flex-direction: column;
-		// justify-content: center;
-		// align-items: center;
-	}
-
-	.uni-grid-item--border {
-		position: relative;
-		/* #ifdef APP-NVUE */
-		border-bottom-color: $uni-border-color;
-		border-bottom-style: solid;
-		border-bottom-width: 0.5px;
-		border-right-color: $uni-border-color;
-		border-right-style: solid;
-		border-right-width: 0.5px;
-		/* #endif */
-		/* #ifndef APP-NVUE */
-		z-index: 0;
-		border-bottom: 1px $uni-border-color solid;
-		border-right: 1px $uni-border-color solid;
-		/* #endif */
-	}
-	.uni-grid-item--border-top {
-		position: relative;
-		/* #ifdef APP-NVUE */
-		border-top-color: $uni-border-color;
-		border-top-style: solid;
-		border-top-width: 0.5px;
-		/* #endif */
-		/* #ifndef APP-NVUE */
-		border-top: 1px $uni-border-color solid;
-		z-index: 0;
-		/* #endif */
-	}
-
-
-	.uni-highlight:active {
-		background-color: $uni-bg-color-hover;
-	}
-</style>

+ 0 - 141
uni_modules/uni-grid/components/uni-grid/uni-grid.vue

@@ -1,141 +0,0 @@
-<template>
-	<view class="uni-grid-wrap">
-		<view :id="elId" ref="uni-grid" class="uni-grid" :class="{ 'uni-grid--border': showBorder }" :style="{ 'border-left-color':borderColor}">
-			<slot />
-		</view>
-	</view>
-</template>
-
-<script>
-	// #ifdef APP-NVUE
-	const dom = uni.requireNativePlugin('dom');
-	// #endif
-
-	/**
-	 * Grid 宫格
-	 * @description 宫格组件
-	 * @tutorial https://ext.dcloud.net.cn/plugin?id=27
-	 * @property {Number} column 每列显示个数
-	 * @property {String} borderColor 边框颜色
-	 * @property {Boolean} showBorder 是否显示边框
-	 * @property {Boolean} square 是否方形显示
-	 * @property {Boolean} Boolean 点击背景是否高亮
-	 * @event {Function} change 点击 grid 触发,e={detail:{index:0}},index 为当前点击 gird 下标
-	 */
-	export default {
-		name: 'UniGrid',
-		props: {
-			// 每列显示个数
-			column: {
-				type: Number,
-				default: 3
-			},
-			// 是否显示边框
-			showBorder: {
-				type: Boolean,
-				default: true
-			},
-			// 边框颜色
-			borderColor: {
-				type: String,
-				default: '#e5e5e5'
-			},
-			// 是否正方形显示,默认为 true
-			square: {
-				type: Boolean,
-				default: true
-			},
-			highlight: {
-				type: Boolean,
-				default: true
-			}
-		},
-		provide() {
-			return {
-				grid: this
-			}
-		},
-		data() {
-			const elId = `Uni_${Math.ceil(Math.random() * 10e5).toString(36)}`
-			return {
-				elId,
-				width: 0
-			}
-		},
-		created() {
-			this.children = []
-		},
-		mounted() {
-			this.$nextTick(()=>{
-				this.init()
-			})
-		},
-		methods: {
-			init() {
-				setTimeout(() => {
-					this._getSize((width) => {
-						this.children.forEach((item, index) => {
-							item.width = width
-						})
-					})
-				}, 50)
-			},
-			change(e) {
-				this.$emit('change', e)
-			},
-			_getSize(fn) {
-				// #ifndef APP-NVUE
-				uni.createSelectorQuery()
-					.in(this)
-					.select(`#${this.elId}`)
-					.boundingClientRect()
-					.exec(ret => {
-						this.width = parseInt((ret[0].width - 1) / this.column) + 'px'
-						fn(this.width)
-					})
-				// #endif
-				// #ifdef APP-NVUE
-				dom.getComponentRect(this.$refs['uni-grid'], (ret) => {
-					this.width = parseInt((ret.size.width - 1) / this.column) + 'px'
-					fn(this.width)
-				})
-				// #endif
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.uni-grid-wrap {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex: 1;
-		flex-direction: column;
-		/* #ifdef H5 */
-		width: 100%;
-		/* #endif */
-	}
-
-	.uni-grid {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		// flex: 1;
-		flex-direction: row;
-		flex-wrap: wrap;
-	}
-
-	.uni-grid--border {
-		position: relative;
-		/* #ifdef APP-NVUE */
-		border-left-color: $uni-border-color;
-		border-left-style: solid;
-		border-left-width: 0.5px;
-		/* #endif */
-		/* #ifndef APP-NVUE */
-		z-index: 1;
-		border-left: 1px $uni-border-color solid;
-		/* #endif */
-	}
-</style>

+ 0 - 82
uni_modules/uni-grid/package.json

@@ -1,82 +0,0 @@
-{
-  "id": "uni-grid",
-  "displayName": "Grid 宫格",
-  "version": "1.2.3",
-  "description": "Grid 宫格组件,提供移动端常见的宫格布局,如九宫格。",
-  "keywords": [
-    "grid",
-    "uni-ui",
-    "九宫格",
-    "表格"
-],
-  "repository": "https://github.com/dcloudio/uni-ui",
-  "engines": {
-    "HBuilderX": ""
-  },
-  "directories": {
-    "example": "../../temps/example_temps"
-  },
-  "dcloudext": {
-    "category": [
-      "前端组件",
-      "通用组件"
-    ],
-    "sale": {
-      "regular": {
-        "price": "0.00"
-      },
-      "sourcecode": {
-        "price": "0.00"
-      }
-    },
-    "contact": {
-      "qq": ""
-    },
-    "declaration": {
-      "ads": "无",
-      "data": "无",
-      "permissions": "无"
-    },
-    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
-  },
-  "uni_modules": {
-    "dependencies": [],
-    "encrypt": [],
-    "platforms": {
-      "cloud": {
-        "tcb": "y",
-        "aliyun": "y"
-      },
-      "client": {
-        "App": {
-          "app-vue": "y",
-          "app-nvue": "y"
-        },
-        "H5-mobile": {
-          "Safari": "y",
-          "Android Browser": "y",
-          "微信浏览器(Android)": "y",
-          "QQ浏览器(Android)": "y"
-        },
-        "H5-pc": {
-          "Chrome": "y",
-          "IE": "y",
-          "Edge": "y",
-          "Firefox": "y",
-          "Safari": "y"
-        },
-        "小程序": {
-          "微信": "y",
-          "阿里": "y",
-          "百度": "y",
-          "字节跳动": "y",
-          "QQ": "y"
-        },
-        "快应用": {
-          "华为": "u",
-          "联盟": "u"
-        }
-      }
-    }
-  }
-}

+ 0 - 88
uni_modules/uni-grid/readme.md

@@ -1,88 +0,0 @@
-
-
-## Grid 宫格
-> 代码块: `uGrid`
-
-
-宫格组件。
-
-### 安装方式
-
-本组件符合[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)规范,`HBuilderX 2.5.5`起,只需将本组件导入项目,在页面`template`中即可直接使用,无需在页面中`import`和注册`components`。
-
-如需通过`npm`方式使用`uni-ui`组件,另见文档:[https://ext.dcloud.net.cn/plugin?id=55](https://ext.dcloud.net.cn/plugin?id=55)
-
-> 为了避免错误使用,给大家带来不好的开发体验,请在使用组件前仔细阅读下面的注意事项,可以帮你避免一些错误。
-> - 删除组件自带圆点角标效果,完全交给用户实现,示例有简单角标效果实现
-> - Grid 组件仅在自定义组件模式下支持
-> - column 属性最大值最好不要超过 5 个,如果超过,需要注意内容显示
-> - 支付宝小程序平台需要在支付宝小程序开发者工具里开启 component2 编译模式,开启方式: `详情 --> 项目配置 --> 启用 component2 编译`
-> - 为了避免高度显示错误组件内必须要有内容
-
-
-### 基本用法
-
-在 ``template`` 中使用组件
-
-```html
-<!-- 一般用法 -->
-<uni-grid :column="3">
-	<uni-grid-item>
-		<text class="text">文本</text>
-	</uni-grid-item>
-	<uni-grid-item>
-		<text class="text">文本</text>
-	</uni-grid-item>
-	<uni-grid-item>
-		<text class="text">文本</text>
-	</uni-grid-item>
-</uni-grid>
-
-<!-- 不带边框并矩形显示 -->
-<uni-grid :column="3" :showBorder="false"  :square="false">
-	<uni-grid-item>
-		<text class="text">文本</text>
-	</uni-grid-item>
-	<uni-grid-item>
-		<text class="text">文本</text>
-	</uni-grid-item>
-	<uni-grid-item>
-		<text class="text">文本</text>
-	</uni-grid-item>
-	<uni-grid-item>
-		<text class="text">文本</text>
-	</uni-grid-item>
-	<uni-grid-item>
-		<text class="text">文本</text>
-	</uni-grid-item>
-	<uni-grid-item>
-		<text class="text">文本</text>
-	</uni-grid-item>
-</uni-grid>
-```
-
-## API
-
-### Grid Props
-
-**uni-grid 属性说明:**
-
-|属性名		|类型	|默认值	|说明				|
-|:-:		|:-:	|:-:	|:-:				|
-|column		|Number	|3		|每列显示个数		|
-|borderColor|String	|#d0dee5|边框颜色			|
-|showBorder	|Boolean|true	|是否显示边框		|
-|square		|Boolean|true	|是否方形显示		|
-|highlight	|Boolean|true	|点击背景是否高亮	|
-
-### Grid Events
-|事件名	|说明			|返回值											|
-|:-:	|:-:			|:-:											|
-|@change|点击 grid 触发	|e={detail:{index:0}},index 为当前点击 gird 下标|
-
-
-### GridItem Props
-
-|属性名|类型		|默认值	|说明										|
-|:-:	|:-:		|:-:	|:-:										|
-|index|Number	|-		|子组件的唯一标识 ,点击gird会返回当前的标识|

+ 0 - 2
uni_modules/uni-icons/changelog.md

@@ -1,2 +0,0 @@
-## 1.1.4(2021-02-05)
-- 调整为uni_modules目录规范

+ 0 - 132
uni_modules/uni-icons/components/uni-icons/icons.js

@@ -1,132 +0,0 @@
-export default {
-	"pulldown": "\ue588",
-	"refreshempty": "\ue461",
-	"back": "\ue471",
-	"forward": "\ue470",
-	"more": "\ue507",
-	"more-filled": "\ue537",
-	"scan": "\ue612",
-	"qq": "\ue264",
-	"weibo": "\ue260",
-	"weixin": "\ue261",
-	"pengyouquan": "\ue262",
-	"loop": "\ue565",
-	"refresh": "\ue407",
-	"refresh-filled": "\ue437",
-	"arrowthindown": "\ue585",
-	"arrowthinleft": "\ue586",
-	"arrowthinright": "\ue587",
-	"arrowthinup": "\ue584",
-	"undo-filled": "\ue7d6",
-	"undo": "\ue406",
-	"redo": "\ue405",
-	"redo-filled": "\ue7d9",
-	"bars": "\ue563",
-	"chatboxes": "\ue203",
-	"camera": "\ue301",
-	"chatboxes-filled": "\ue233",
-	"camera-filled": "\ue7ef",
-	"cart-filled": "\ue7f4",
-	"cart": "\ue7f5",
-	"checkbox-filled": "\ue442",
-	"checkbox": "\ue7fa",
-	"arrowleft": "\ue582",
-	"arrowdown": "\ue581",
-	"arrowright": "\ue583",
-	"smallcircle-filled": "\ue801",
-	"arrowup": "\ue580",
-	"circle": "\ue411",
-	"eye-filled": "\ue568",
-	"eye-slash-filled": "\ue822",
-	"eye-slash": "\ue823",
-	"eye": "\ue824",
-	"flag-filled": "\ue825",
-	"flag": "\ue508",
-	"gear-filled": "\ue532",
-	"reload": "\ue462",
-	"gear": "\ue502",
-	"hand-thumbsdown-filled": "\ue83b",
-	"hand-thumbsdown": "\ue83c",
-	"hand-thumbsup-filled": "\ue83d",
-	"heart-filled": "\ue83e",
-	"hand-thumbsup": "\ue83f",
-	"heart": "\ue840",
-	"home": "\ue500",
-	"info": "\ue504",
-	"home-filled": "\ue530",
-	"info-filled": "\ue534",
-	"circle-filled": "\ue441",
-	"chat-filled": "\ue847",
-	"chat": "\ue263",
-	"mail-open-filled": "\ue84d",
-	"email-filled": "\ue231",
-	"mail-open": "\ue84e",
-	"email": "\ue201",
-	"checkmarkempty": "\ue472",
-	"list": "\ue562",
-	"locked-filled": "\ue856",
-	"locked": "\ue506",
-	"map-filled": "\ue85c",
-	"map-pin": "\ue85e",
-	"map-pin-ellipse": "\ue864",
-	"map": "\ue364",
-	"minus-filled": "\ue440",
-	"mic-filled": "\ue332",
-	"minus": "\ue410",
-	"micoff": "\ue360",
-	"mic": "\ue302",
-	"clear": "\ue434",
-	"smallcircle": "\ue868",
-	"close": "\ue404",
-	"closeempty": "\ue460",
-	"paperclip": "\ue567",
-	"paperplane": "\ue503",
-	"paperplane-filled": "\ue86e",
-	"person-filled": "\ue131",
-	"contact-filled": "\ue130",
-	"person": "\ue101",
-	"contact": "\ue100",
-	"images-filled": "\ue87a",
-	"phone": "\ue200",
-	"images": "\ue87b",
-	"image": "\ue363",
-	"image-filled": "\ue877",
-	"location-filled": "\ue333",
-	"location": "\ue303",
-	"plus-filled": "\ue439",
-	"plus": "\ue409",
-	"plusempty": "\ue468",
-	"help-filled": "\ue535",
-	"help": "\ue505",
-	"navigate-filled": "\ue884",
-	"navigate": "\ue501",
-	"mic-slash-filled": "\ue892",
-	"search": "\ue466",
-	"settings": "\ue560",
-	"sound": "\ue590",
-	"sound-filled": "\ue8a1",
-	"spinner-cycle": "\ue465",
-	"download-filled": "\ue8a4",
-	"personadd-filled": "\ue132",
-	"videocam-filled": "\ue8af",
-	"personadd": "\ue102",
-	"upload": "\ue402",
-	"upload-filled": "\ue8b1",
-	"starhalf": "\ue463",
-	"star-filled": "\ue438",
-	"star": "\ue408",
-	"trash": "\ue401",
-	"phone-filled": "\ue230",
-	"compose": "\ue400",
-	"videocam": "\ue300",
-	"trash-filled": "\ue8dc",
-	"download": "\ue403",
-	"chatbubble-filled": "\ue232",
-	"chatbubble": "\ue202",
-	"cloud-download": "\ue8e4",
-	"cloud-upload-filled": "\ue8e5",
-	"cloud-upload": "\ue8e6",
-	"cloud-download-filled": "\ue8e9",
-	"headphones":"\ue8bf",
-	"shop":"\ue609"
-}

Vissa filer visades inte eftersom för många filer har ändrats