index.html 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Vue.js markdown editor example</title>
  6. <link rel="stylesheet" href="css/style.css">
  7. <script src="js/util.js"></script>
  8. <script src="js/moment.js"></script>
  9. <script src="js/vue.js"></script>
  10. </head>
  11. <body>
  12. <div id="app">
  13. <textarea v-model="input" cols="80" rows="20"></textarea>
  14. <button v-on:click="send">send</button>
  15. <table border="1">
  16. <tr v-for="x in cData">
  17. <td>{{x.type}}</td>
  18. <td>{{x.ts}}</td>
  19. <td>
  20. <pre>{{JSON.stringify(x.entry, null, 2)}}</pre>
  21. </td>
  22. </tr>
  23. </table>
  24. <ul id="loglist">
  25. <li v-for="(item, index) in log.slice().reverse()">
  26. {{ ts2txt(item.ts) }} - {{ item.entry.message }} -
  27. <pre>{{ JSON.stringify(item.entry) }}</pre>
  28. </li>
  29. </ul>
  30. </div>
  31. <script type="application/javascript">
  32. new Vue({
  33. el: '#app',
  34. data: {
  35. input: '// rde.writeCmd("set_digital_out(2,True)");\n' +
  36. '// rde.writeCmd("movej([-1.95,-1.58,-1.16,-1.15,-1.55,1.25], a=1.0, v=0.1)");\n' +
  37. '//rde.writeCmd("freedrive_mode()");\n' +
  38. 'def asdf():\n' +
  39. ' set_digital_out(3, True) \n' +
  40. ' set_digital_out(4, True) \n' +
  41. 'end',
  42. log: [],
  43. lastID: -1,
  44. doBits: [],
  45. cData: {}
  46. },
  47. created: function () {
  48. setInterval(this.update, 200);
  49. },
  50. watch: {
  51. doBits: (newValue, oldValue) => {
  52. let diff1 = newValue.filter(x => !oldValue.includes(x));
  53. let diff2 = oldValue.filter(x => !newValue.includes(x));
  54. for (const x of diff1) {
  55. fetch('/digital/' + x, {method: "POST", body: 'True'})
  56. .then(function (response) {
  57. return response;
  58. });
  59. }
  60. for (const x of diff2) {
  61. fetch('/digital/' + x, {method: "POST", body: 'False'})
  62. .then(function (response) {
  63. return response;
  64. });
  65. }
  66. }
  67. },
  68. methods: {
  69. send: function (event) {
  70. fetch('/cmd', {method: "POST", body: this.input})
  71. .then(function (response) {
  72. return response;
  73. });
  74. },
  75. ts2txt: function (ts) {
  76. return moment(ts).format('YYYY-MM-DD hh:mm ss.SSS ')
  77. },
  78. handlePackage: function (package) {
  79. Vue.set(this.$data.cData, package.type, package)
  80. switch (package.type) {
  81. case 'Message':
  82. break;
  83. case 'MasterBoardData':
  84. let bits = package.entry.digitalOutputBits;
  85. for (let i = 0; i < 8; i++) {
  86. if (bits & (1 << i)) {
  87. this.$data.doBits.push('' + (i + 1));
  88. }
  89. }
  90. break;
  91. case 'ModeData':
  92. break;
  93. case 'ToolData':
  94. break;
  95. case 'ToolCommInfo':
  96. break;
  97. case 'JointDataList':
  98. break;
  99. case 'CartesianInfo':
  100. break;
  101. case 'ForceModeData':
  102. break;
  103. case 'AdditionalInfo':
  104. break;
  105. case 'KinematicsInfo':
  106. break;
  107. case 'ConfigurationData':
  108. break;
  109. case 'ProgramStateMessage':
  110. break;
  111. case 'ModbusInfoMessage':
  112. break;
  113. case 'RobotMessageError':
  114. break;
  115. default:
  116. console.log('unknown package:' + package.type);
  117. }
  118. },
  119. update: function (event) {
  120. fetch('/log/' + this.lastID, {method: "GET"})
  121. .then(handleErrors)
  122. .then((response) => {
  123. return response.json();
  124. })
  125. .then((myJson) => {
  126. for (const entry of myJson.entries) {
  127. this.handlePackage(entry);
  128. }
  129. this.$data.log = this.$data.log.concat(myJson.entries);
  130. this.$data.lastID = myJson.lastID;
  131. let len = this.$data.log.length;
  132. this.$data.log.splice(0, len - 200);
  133. })
  134. .catch(error => {
  135. this.$data.lastID = 0;
  136. this.$data.log = [];
  137. console.log(error)
  138. });
  139. }
  140. }
  141. })
  142. </script>
  143. </body>
  144. </html>