UIClient.vue 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <template>
  2. <div class="hello">
  3. <h1>Demo Message Client UI v1</h1>
  4. <p>
  5. <button @click="connect">connect</button>
  6. <input type="text" v-model="url">
  7. </p>
  8. <ul>
  9. <transition-group name="fade">
  10. <li v-for="(client,i) in clients" :key="i">
  11. <div> isConnected {{ client.socket.connected }} <a href="#" @click.prevent="disconnect(i)">disconnect</a> </div>
  12. </li>
  13. </transition-group>
  14. </ul>
  15. </div>
  16. </template>
  17. <script lang="ts">
  18. import { TestSocketIoClient } from "../assets/js/__transport.socketio"
  19. import { Component, Prop, Vue } from 'vue-property-decorator';
  20. @Component
  21. export default class UiClient extends Vue {
  22. @Prop() private msg!: string;
  23. clients: TestSocketIoClient[] = [];
  24. url = 'http://swopt.com:3011';
  25. disconnect(idx: number) {
  26. console.info(idx)
  27. this.clients[idx].disconnect()
  28. }
  29. connect(): void {
  30. const client = new TestSocketIoClient()
  31. client.connect(this.url)
  32. this.clients.push(client)
  33. }
  34. }
  35. </script>
  36. <!-- Add "scoped" attribute to limit CSS to this component only -->
  37. <style scoped>
  38. .fade-enter-active, .fade-leave-active {
  39. /* transition: translate scale opacity 0.5s ease-out; */
  40. transition: all 0.3s ease-out;
  41. }
  42. .fade-enter, .fade-leave-to {
  43. transform: scale(0.5) translateY(-49px) translateX(-103px);
  44. box-shadow: none;
  45. opacity: 0;
  46. }
  47. button + button {
  48. margin-left: 1em;
  49. }
  50. ul {
  51. margin: 0px;
  52. padding: 0px;
  53. display: flex;
  54. flex-direction: row;
  55. flex-wrap: wrap;
  56. }
  57. ul li {
  58. list-style: none;
  59. box-shadow: #989795a6 1px 3px 13px;
  60. /* border: 2px solid gray; */
  61. margin: .2em;
  62. display: inline-block;
  63. width: 200px;
  64. height: 100px;
  65. border-radius: .5em;
  66. padding: 10px;
  67. }
  68. </style>