Browse Source

Merge branch 'master' of http://git.dayaedu.com/lex/dy-admin-live

lex-xin 3 years ago
parent
commit
91721ee501

+ 253 - 2
package-lock.json

@@ -1427,8 +1427,15 @@
     "@types/node": {
       "version": "17.0.17",
       "resolved": "https://registry.npmmirror.com/@types/node/-/node-17.0.17.tgz",
-      "integrity": "sha512-e8PUNQy1HgJGV3iU/Bp2+D/DXh3PYeyli8LgIwsQcs1Ar1LoaWHSIT6Rw+H2rNJmiq6SNWiDytfx8+gYj7wDHw==",
-      "dev": true
+      "integrity": "sha512-e8PUNQy1HgJGV3iU/Bp2+D/DXh3PYeyli8LgIwsQcs1Ar1LoaWHSIT6Rw+H2rNJmiq6SNWiDytfx8+gYj7wDHw=="
+    },
+    "@types/qrcode": {
+      "version": "1.4.2",
+      "resolved": "https://registry.npmjs.org/@types/qrcode/-/qrcode-1.4.2.tgz",
+      "integrity": "sha512-7uNT9L4WQTNJejHTSTdaJhfBSCN73xtXaHFyBJ8TSwiLhe4PRuTue7Iph0s2nG9R/ifUaSnGhLUOZavlBEqDWQ==",
+      "requires": {
+        "@types/node": "*"
+      }
     },
     "@types/resolve": {
       "version": "1.17.1",
@@ -2060,6 +2067,31 @@
         "lodash.transform": "^4.6.0"
       }
     },
+    "cliui": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+      "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
+      "requires": {
+        "string-width": "^4.2.0",
+        "strip-ansi": "^6.0.0",
+        "wrap-ansi": "^6.2.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "5.0.1",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+          "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
+        },
+        "strip-ansi": {
+          "version": "6.0.1",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+          "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+          "requires": {
+            "ansi-regex": "^5.0.1"
+          }
+        }
+      }
+    },
     "clone": {
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
@@ -2254,6 +2286,11 @@
         "ms": "2.1.2"
       }
     },
+    "decamelize": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+    },
     "decode-uri-component": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
@@ -2320,6 +2357,11 @@
         }
       }
     },
+    "dijkstrajs": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.2.tgz",
+      "integrity": "sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg=="
+    },
     "doctypes": {
       "version": "1.1.0",
       "resolved": "https://registry.npmmirror.com/doctypes/-/doctypes-1.1.0.tgz",
@@ -2421,12 +2463,22 @@
         "@emmetio/css-abbreviation": "^2.1.4"
       }
     },
+    "emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+    },
     "emojis-list": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
       "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
       "dev": true
     },
+    "encode-utf8": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz",
+      "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw=="
+    },
     "encoding": {
       "version": "0.1.13",
       "resolved": "https://registry.npmmirror.com/encoding/-/encoding-0.1.13.tgz",
@@ -2802,6 +2854,15 @@
       "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz",
       "integrity": "sha1-mzERErxsYSehbgFsbF1/GeCAXFs="
     },
+    "find-up": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+      "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+      "requires": {
+        "locate-path": "^5.0.0",
+        "path-exists": "^4.0.0"
+      }
+    },
     "for-in": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
@@ -2853,6 +2914,11 @@
       "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
       "dev": true
     },
+    "get-caller-file": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+      "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
+    },
     "get-intrinsic": {
       "version": "1.1.1",
       "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
@@ -3219,6 +3285,11 @@
       "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
       "dev": true
     },
+    "is-fullwidth-code-point": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
+    },
     "is-glob": {
       "version": "4.0.3",
       "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
@@ -3543,6 +3614,14 @@
         }
       }
     },
+    "locate-path": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+      "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+      "requires": {
+        "p-locate": "^4.1.0"
+      }
+    },
     "lodash": {
       "version": "4.17.21",
       "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
@@ -3978,6 +4057,27 @@
         "wrappy": "1"
       }
     },
+    "p-limit": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+      "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+      "requires": {
+        "p-try": "^2.0.0"
+      }
+    },
+    "p-locate": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+      "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+      "requires": {
+        "p-limit": "^2.2.0"
+      }
+    },
+    "p-try": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+      "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
+    },
     "parse-node-version": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz",
@@ -3990,6 +4090,11 @@
       "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
       "dev": true
     },
+    "path-exists": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+      "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
+    },
     "path-is-absolute": {
       "version": "1.0.1",
       "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
@@ -4026,6 +4131,11 @@
       "dev": true,
       "optional": true
     },
+    "pngjs": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz",
+      "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw=="
+    },
     "posix-character-classes": {
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
@@ -4327,6 +4437,17 @@
       "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
       "dev": true
     },
+    "qrcode": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.0.tgz",
+      "integrity": "sha512-9MgRpgVc+/+47dFvQeD6U2s0Z92EsKzcHogtum4QB+UNd025WOJSHvn/hjk9xmzj7Stj95CyUAs31mrjxliEsQ==",
+      "requires": {
+        "dijkstrajs": "^1.0.1",
+        "encode-utf8": "^1.0.3",
+        "pngjs": "^5.0.0",
+        "yargs": "^15.3.1"
+      }
+    },
     "qs": {
       "version": "6.10.3",
       "resolved": "https://registry.npmmirror.com/qs/-/qs-6.10.3.tgz",
@@ -4498,12 +4619,22 @@
       "integrity": "sha512-i/wKzvcx7Er8tZnvqSxWuNO5ZGggu2UgZAqj/RyZ0si7lBTXL7kZiI/dWxzxnQjaY7s5HEy1qK21Do4Ncr6cVw==",
       "dev": true
     },
+    "require-directory": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+      "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
+    },
     "require-from-string": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
       "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
       "dev": true
     },
+    "require-main-filename": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+      "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
+    },
     "resolve": {
       "version": "1.22.0",
       "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.0.tgz",
@@ -4608,6 +4739,11 @@
         "randombytes": "^2.1.0"
       }
     },
+    "set-blocking": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+      "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+    },
     "set-value": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
@@ -4820,6 +4956,31 @@
       "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz",
       "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY="
     },
+    "string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "requires": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "5.0.1",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+          "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
+        },
+        "strip-ansi": {
+          "version": "6.0.1",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+          "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+          "requires": {
+            "ansi-regex": "^5.0.1"
+          }
+        }
+      }
+    },
     "string.prototype.matchall": {
       "version": "4.0.6",
       "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz",
@@ -5788,6 +5949,11 @@
         "is-symbol": "^1.0.3"
       }
     },
+    "which-module": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+      "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
+    },
     "with": {
       "version": "7.0.2",
       "resolved": "https://registry.npmmirror.com/with/-/with-7.0.2.tgz",
@@ -6006,17 +6172,102 @@
         "workbox-core": "6.4.2"
       }
     },
+    "wrap-ansi": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+      "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+      "requires": {
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "5.0.1",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+          "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
+        },
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+        },
+        "strip-ansi": {
+          "version": "6.0.1",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+          "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+          "requires": {
+            "ansi-regex": "^5.0.1"
+          }
+        }
+      }
+    },
     "wrappy": {
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz",
       "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
       "dev": true
     },
+    "y18n": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+      "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="
+    },
     "yallist": {
       "version": "4.0.0",
       "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz",
       "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
       "dev": true
+    },
+    "yargs": {
+      "version": "15.4.1",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
+      "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
+      "requires": {
+        "cliui": "^6.0.0",
+        "decamelize": "^1.2.0",
+        "find-up": "^4.1.0",
+        "get-caller-file": "^2.0.1",
+        "require-directory": "^2.1.1",
+        "require-main-filename": "^2.0.0",
+        "set-blocking": "^2.0.0",
+        "string-width": "^4.2.0",
+        "which-module": "^2.0.0",
+        "y18n": "^4.0.0",
+        "yargs-parser": "^18.1.2"
+      }
+    },
+    "yargs-parser": {
+      "version": "18.1.3",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+      "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+      "requires": {
+        "camelcase": "^5.0.0",
+        "decamelize": "^1.2.0"
+      },
+      "dependencies": {
+        "camelcase": {
+          "version": "5.3.1",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+          "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
+        }
+      }
     }
   }
 }

+ 2 - 0
package.json

@@ -11,6 +11,7 @@
   "dependencies": {
     "@rongcloud/imlib-next": "^5.1.1",
     "@rongcloud/plugin-rtc": "^5.3.1",
+    "@types/qrcode": "^1.4.2",
     "clean-deep": "^3.4.0",
     "copy-to-clipboard": "^3.3.1",
     "dayjs": "^1.10.7",
@@ -19,6 +20,7 @@
     "js-cookie": "^3.0.1",
     "mitt": "^3.0.0",
     "nprogress": "^0.2.0",
+    "qrcode": "^1.5.0",
     "query-string": "^7.1.1",
     "umi-request": "^1.4.0",
     "vue": "^3.2.25",

+ 1 - 0
src/components/live-broadcast/action-bar.tsx

@@ -218,6 +218,7 @@ export default defineComponent({
         </div>
         {/* <ElButton onClick={RuntimeUtils.shareScreenVideo}>屏幕共享</ElButton> */}
         <ElDialog width="510px"
+        destroy-on-close
           append-to-body modelValue={this.shareVisiable} title="分享" before-close={() => { this.shareVisiable = false }}>
             <Share onClose={()=>this.shareVisiable = false}/>
         </ElDialog>

+ 66 - 0
src/components/live-broadcast/groupChat.module.less

@@ -0,0 +1,66 @@
+.shareWrap {
+    background-color: #f9f9f9;
+    padding: 15px;
+}
+
+.chioseBox {
+    :global {
+        .el-checkbox__inner {
+            width: 20px;
+            height: 20px;
+            border-radius: 50%;
+
+            &::after {
+                height: 8px;
+                left: 6px;
+                position: absolute;
+                top: 3px;
+                width: 4px;
+            }
+        }
+    }
+}
+
+.cell {
+    height: 63px;
+    background: #ffffff;
+    padding: 10px 18px;
+    display: flex;
+    flex-direction: row;
+    align-items: center;
+    cursor: pointer;
+    margin-bottom: 10px;
+}
+
+.dotle {
+    width: 42px;
+    height: 43px;
+    background: var(--el-color-primary);
+    border-radius: 4px;
+    line-height: 42px;
+    text-align: center;
+    color: #fff;
+    margin-left: 17px;
+    font-size: 14px;
+}
+
+.teamInfo {
+    font-size: 14px;
+    margin-left: 8px;
+
+    .title {
+        font-weight: 500;
+        color: #1a1a1a;
+        line-height: 22px;
+    }
+
+    .subInfo {
+        color: #666666;
+        line-height: 22px;
+    }
+}
+
+.tableWrap {
+    max-height: 500px;
+    overflow-y: scroll;
+}

+ 88 - 0
src/components/live-broadcast/groupChat.tsx

@@ -0,0 +1,88 @@
+import { defineComponent, ref } from 'vue'
+import { ElButton, ElFormItem, ElForm, ElRadio, ElMessage, ElCheckboxGroup, ElCheckbox, ElInput } from 'element-plus'
+import { state } from '/src/state'
+import request from "/src/helpers/request";
+import { removeMedia } from './helpers'
+import styles from './groupChat.module.less'
+
+
+export default defineComponent({
+    name: 'LiveBroadcastGroupChat',
+    data() {
+        return {
+            searchForm: {
+                search: "",
+            },
+            checkList: [],
+            tableList: [],
+        }
+    },
+    async mounted() {
+        this.getList()
+    },
+
+    beforeUnmount() {
+
+    },
+    methods: {
+        onReSet() {
+            this.searchForm.search = "";
+            this.checkList = [];
+            this.search();
+        },
+        search() {
+            this.getList();
+        },
+        async getList() {
+            try {
+                const res: any = await request('/api-web/imGroup/queryGroupList', {
+                    params: {
+                        ...this.searchForm
+                    }
+                })
+                this.tableList = res.data;
+            } catch (e) {
+                console.log(e)
+            }
+
+        },
+        resectCheck(id: number) {
+            if (this.checkList.indexOf(id) == -1) {
+                this.checkList.push(id);
+            } else {
+                this.checkList.splice(this.checkList.indexOf(id), 1);
+            }
+        },
+    },
+    render() {
+        return (
+            <div >
+                <ElForm model={this.searchForm} ref="form" inline={true} class={styles.form}>
+                    <ElFormItem>
+                        <ElInput clearable placeholder="群聊名称/乐团编号" modelValue={this.searchForm.search} onInput={val => this.searchForm.search = val}></ElInput>
+                    </ElFormItem>
+                    <ElFormItem>
+                        <ElButton type="primary" onClick={this.search}>搜索</ElButton>
+                        <ElButton type="danger" onClick={this.onReSet}>重置</ElButton>
+                    </ElFormItem>
+                </ElForm>
+                <div class={styles.tableWrap}>
+                    <ElCheckboxGroup modelValue={this.checkList}>
+                        {this.tableList.map((item: any) => {
+                            return <div class={styles.cell} onClick={() => this.resectCheck(item.id)}>
+                                <ElCheckbox class={styles.chioseBox} label={item.id} onChange={() => this.resectCheck(item.id)}><br
+                                /></ElCheckbox>
+                                <div class={styles.dotle}>{item.type == "MUSIC" ? "乐团" : "VIP"}</div>
+                                <div class={styles.teamInfo}>
+                                    <p class={styles.title}>{ item.name }</p>
+                                    <p class={styles.subInfo}>{ item.memo }(共{item.memberNum }人)</p>
+                                </div>
+                            </div>
+                        })}
+
+                    </ElCheckboxGroup>
+                </div>
+            </div>
+        )
+    }
+})

+ 15 - 6
src/components/live-broadcast/preview.tsx

@@ -2,7 +2,7 @@ import { defineComponent } from 'vue'
 import { ElButton, ElFormItem, ElForm, ElRadio } from 'element-plus'
 import runtime, * as RuntimeUtils from './runtime'
 import styles from './preview.module.less'
-
+import QRCode from 'qrcode';
 import icon1 from './images/icon1.png'
 import icon2 from './images/icon2.png'
 import icon3 from './images/icon3.png'
@@ -13,7 +13,7 @@ import start from './images/start.png'
 
 export default defineComponent({
     name: 'LiveBroadcastSharePreview',
-    props: ['form'],
+    props: ['form','url'],
     data() {
         return {
             detail: {
@@ -21,9 +21,18 @@ export default defineComponent({
                 liveStartTime: '',
                 liveRemark: '',
             },
-            url: "http://www.baidu.com",
         }
     },
+    mounted() {
+        let canvas = document.getElementById('canvas');
+        let text = this.url;
+        QRCode.toCanvas(canvas, text, {width:80},function (error) {
+            if (error){
+                console.error(error);
+            } 
+            console.log('QRCode success!')
+        })
+    },
     methods: {
         copyText() {
 
@@ -55,7 +64,7 @@ export default defineComponent({
                             <img class={styles.logo} src={logo} alt="" />
                             <div class={styles.code}>
                                 <div>
-                                <canvas id='canvas' style="width: 100% margin:0"></canvas>
+                                    <canvas id='canvas' height="80" width="80" style="width: 80px; margin:0"></canvas>
                                 </div>
                             </div>
                         </div >
@@ -80,7 +89,7 @@ export default defineComponent({
                             <img class={styles.logo} src={logo} alt="" />
                             <div class={styles.code}>
                                 <div>
-                                <canvas id='canvas' style="width: 100% margin:0"></canvas>
+                                    <canvas id='canvas' height="80" width="80" style="width: 80px; margin:0"></canvas>
                                 </div>
                             </div>
                         </div>
@@ -106,7 +115,7 @@ export default defineComponent({
                             <img class={styles.logo} src={logo} alt="" />
                             <div class={styles.code}>
                                 <div>
-                                    <canvas id='canvas' style="width: 100% margin:0"></canvas>
+                                    <canvas id='canvas' height="80" width="80" style="width: 80px; margin:0"></canvas>
                                 </div>
                             </div>
                         </div>

+ 52 - 27
src/components/live-broadcast/share.tsx

@@ -1,20 +1,20 @@
-import { defineComponent } from 'vue'
-import { ElButton, ElFormItem, ElForm, ElRadio,ElMessage } from 'element-plus'
+import { defineComponent, DefineComponent, ref, Ref } from 'vue'
+import { ElButton, ElFormItem, ElForm, ElRadio, ElMessage } from 'element-plus'
 import runtime, * as RuntimeUtils from './runtime'
 import styles from './share.module.less'
 import request from "/src/helpers/request";
 import { vaildStudentUrl } from "/src/helpers/validate";
 import { toPng } from "html-to-image";
 import copy from "copy-to-clipboard";
-// import groupChat from './'
+import GroupChat from './groupChat'
 import Preview from './preview'
+const GroupChatRef: Ref<DefineComponent<{}, {}, any> | null> = ref(null)
 export default defineComponent({
- 
     name: 'LiveBroadcastShare',
-    props:{
-        onClose:{
+    props: {
+        onClose: {
             type: Function,
-            default: () => {}
+            default: () => { }
         }
     },
     data() {
@@ -24,7 +24,7 @@ export default defineComponent({
                 roomTitle: '',
                 liveStartTime: '',
                 liveRemark: '',
-                roomUid:''
+                roomUid: ''
             },
             url: ''
         }
@@ -58,24 +58,49 @@ export default defineComponent({
         },
         shareImage() {
             var node = document.getElementById("preview");
-            toPng(node)
-              .then((dataUrl) => {
-                var img = new Image();
-                img.src = dataUrl;
-                // 在这里下载
-                let link = document.createElement("a");
-                let fname = this.detail.roomTitle || "分享图片文件.png"; //下载文件的名字
-                link.href = dataUrl;
-                link.setAttribute("download", fname);
-                document.body.appendChild(link);
-                link.click();
-                 this.$emit('close')
-              })
-              .catch(function (error) {
-                console.error("oops, something went wrong!", error);
-              });
+            if (node) {
+                toPng(node)
+                    .then((dataUrl) => {
+                        var img = new Image();
+                        img.src = dataUrl;
+                        // 在这里下载
+                        let link = document.createElement("a");
+                        let fname = this.detail.roomTitle || "分享图片文件.png"; //下载文件的名字
+                        link.href = dataUrl;
+                        link.setAttribute("download", fname);
+                        document.body.appendChild(link);
+                        link.click();
+                        this.onClose()
+                    })
+                    .catch(function (error) {
+                        console.error("oops, something went wrong!", error);
+                    });
+            }
+
+        },
+        async shareChat() {
+
+            let checkList = GroupChatRef.value?.checkList || [];
+            if (!(checkList.length > 0)) {
+                ElMessage.error("请至少选择一个群聊");
+                return;
+            }
+            try {
+                let obj = {
+                    groupIds: checkList.join(","),
+                    roomUid: this.detail.roomUid,
+                }
+                const res = await request.get('/api-web/imLiveBroadcastRoom/shareGroup', {
+                    params: {
+                       ...obj
+                    }
+                });
+                ElMessage.success('分享成功')
+                this.onClose()
+            } catch (e) {
+                console.log(e);
+            }
         },
-        shareChat() { },
         changeRafdio(value: string) {
             this.form.shareType = value;
         }
@@ -105,14 +130,14 @@ export default defineComponent({
                 </div >
                 {this.form.shareType === '2' ? <div class={styles.codeWrap} >
                     <div class={styles.shareWrap}>
-                        <Preview form={this.detail} />
+                        <Preview form={this.detail} url={this.url} />
                     </div>
                     <div class={styles.shareBtn} onClick={this.shareImage}>复制分享内容</div>
                 </div> : null
                 }
                 {this.form.shareType == '3' ? <div class={styles.shareWrap}>
                     <div class={styles.groupWrap} >
-                        {/* <GroupChat /> */}
+                        <GroupChat ref={GroupChatRef} />
                     </div>
                     <div class={styles.shareBtn} onClick={this.shareChat}>发送分享信息</div>
                 </div> : null