camera - v2 old.html 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  6. <meta http-equiv="Pragma" content="no-cache"/>
  7. <meta http-equiv="Cache-Control" content="no-cache, must-revalidate"/>
  8. <meta http-equiv="Expires" content="0"/>
  9. <title>数据大屏:数据大屏教学现场</title>
  10. <link rel="stylesheet" href="demo1.css">
  11. <script>
  12. document.write(
  13. "<link type='text/css' href='./demo.css?version=" +
  14. new Date().getTime() +
  15. "' rel='stylesheet' />",
  16. );
  17. </script>
  18. <script src="./vue.js"></script>
  19. </head>
  20. <body>
  21. <div class="main">
  22. <div class="main-header">
  23. <div class="sy"
  24. onclick="redirectToUrl('http://172.16.0.63:28080/visualpro/preview.html?id=003fe9f6a92b47bc924fe04f59fd6acb')">
  25. <div>首页</div>
  26. </div>
  27. <div class="jyjx"
  28. onclick="redirectToUrl('http://172.16.0.63:28080/visualpro/preview.html?id=7f0176157e93423e9b4e48cae1c186f3')">
  29. <div>教育教学</div>
  30. </div>
  31. <div class="zsxx"
  32. onclick="redirectToUrl('http://172.16.0.63:28080/visualpro/preview.html?id=e67784d9632c44099e03b56256df7e5d')">
  33. <div>招生信息</div>
  34. </div>
  35. <div class="jyxx"
  36. onclick="redirectToUrl('http://172.16.0.63:28080/visualpro/preview.html?id=22a2c238d23e4eb0a80bd2e4f047ba90')">
  37. <div>就业信息</div>
  38. </div>
  39. <div class="zwhq"
  40. onclick="redirectToUrl('http://172.16.0.63:28080/visualpro/preview.html?id=2a864f38d2964ebdb63db7257a48c330')">
  41. <div>总务后勤</div>
  42. </div>
  43. <div class="jsxx"
  44. onclick="redirectToUrl('http://172.16.0.63:28080/visualpro/preview.html?id=83f18d8a43a24be79a041e4cec596fa3')">
  45. <div>教师信息</div>
  46. </div>
  47. <div class="xsxx"
  48. onclick="redirectToUrl('http://172.16.0.63:28080/visualpro/preview.html?id=5f656466368442ee88abfe34a42a3dd8')">
  49. <div>学生信息</div>
  50. </div>
  51. <div class="shfw"
  52. onclick="redirectToUrl('http://172.16.0.63:28080/visualpro/preview.html?id=170f4fae167d4b2eb7578073cb713fb1')">
  53. <div>社会服务</div>
  54. </div>
  55. <div class="jxxc">
  56. <div>教学现场</div>
  57. </div>
  58. </div>
  59. <div class="main-container">
  60. <div class="menu-container" id="menu-container">
  61. <div class="campus-tabs">
  62. <div class="campus-tab campus-tab-active" id="xqxq-tab" onclick="switchCampus('西溪校区')">
  63. <div>西溪校区</div>
  64. </div>
  65. <div class="campus-tab" id="laxq-tab" onclick="switchCampus('临安校区')">
  66. <div>临安校区</div>
  67. </div>
  68. </div>
  69. <div class="title-item">摄像头列表</div>
  70. <div v-for="(item,index) in message" :key="index">
  71. <div class="menu-title">
  72. <img src="./icon%202.png" alt=""> <span>{{item.buildname}}</span>
  73. </div>
  74. <div class="class-container">
  75. <div class="class-item" v-for="(item1,index1) in item.classes" :key="index1"
  76. @click="handleClick(item1)">
  77. <div>
  78. <img src="./03.png" alt="">
  79. </div>
  80. <div>{{item1.classname}}</div>
  81. </div>
  82. </div>
  83. </div>
  84. </div>
  85. <div class="video-container">
  86. <div class="title-item">
  87. 视频区域
  88. <select class="sel2" onchange="changeWndNum(this.value);">
  89. <option value="1" selected>1x1</option>
  90. <option value="2">2x2</option>
  91. <option value="3">3x3</option>
  92. <option value="4">4x4</option>
  93. <option value="1*2">1x2</option>
  94. <option value="2*1">2x1</option>
  95. </select>
  96. </div>
  97. <div class="left">
  98. <div id="divPlugin" class="plugin"></div>
  99. <!-- 隐藏的输入元素,供JavaScript使用 -->
  100. <div style="display:none;">
  101. <input id="loginip" type="text" class="txt" value=""/>
  102. <input id="port" type="text" class="txt" value=""/>
  103. <input id="username" type="text" class="txt" value=""/>
  104. <input id="password" type="password" class="txt" value=""/>
  105. <input id="deviceport" type="text" class="txt"/>
  106. <input id="rtspport" type="text" class="txt"/>
  107. <select id="ip" class="sel" onchange="getChannelInfo();getDevicePort();"></select>
  108. <select id="channels" class="sel"></select>
  109. <select id="streamtype" class="sel">
  110. <option value="1" selected>主码流</option>
  111. <option value="2">子码流</option>
  112. <option value="3">第三码流</option>
  113. <option value="4">转码码流</option>
  114. </select>
  115. </div>
  116. </div>
  117. </div>
  118. </div>
  119. </div>
  120. <script src="./jquery-1.7.1.min.js"></script>
  121. <script id="videonode" src="./codebase/webVideoCtrl.js"></script>
  122. <script src="./cn/demo.js"></script>
  123. <script>
  124. function redirectToUrl(url) {
  125. // console.log(url);
  126. window.location.href = url;
  127. }
  128. // 当前选中的校区
  129. var currentCampus = '西溪校区';
  130. // 切换校区
  131. function switchCampus(campus) {
  132. currentCampus = campus;
  133. // 更新tab样式
  134. if (campus === '西溪校区') {
  135. $('#xqxq-tab').addClass('campus-tab-active');
  136. $('#laxq-tab').removeClass('campus-tab-active');
  137. } else {
  138. $('#laxq-tab').addClass('campus-tab-active');
  139. $('#xqxq-tab').removeClass('campus-tab-active');
  140. }
  141. // 重新加载摄像头列表
  142. loadCameraList(campus);
  143. }
  144. // 加载摄像头列表
  145. function loadCameraList(campus) {
  146. var requestBody = new FormData();
  147. var requestData = {
  148. condition: {
  149. xq: campus
  150. },
  151. requiredItems: "jxlmc,sxtmc,ipdz,dk,zh,mm,xq,pp"
  152. };
  153. requestBody.append('requestBody', JSON.stringify(requestData));
  154. $.ajax({
  155. url: 'http://172.16.0.63:28080/dmp-res-api/restservice/20241028113645823630',
  156. type: 'POST',
  157. contentType: false,
  158. data: requestBody,
  159. processData: false,
  160. success: function(response) {
  161. let a = response;
  162. console.log(a);
  163. let obj = [];
  164. for (let i = 0; i < a.resultData.length; i++) {
  165. //判断data中是否有值,没有就添加,有就跳过
  166. let flag = false;
  167. let index = 0;
  168. for (let j = 0; j < obj.length; j++) {
  169. if (obj[j].buildname == a.resultData[i].jxlmc) {
  170. flag = true;
  171. index = j;
  172. break;
  173. }
  174. }
  175. if (flag) {
  176. obj[index].classes.push({
  177. classname: a.resultData[i].sxtmc,
  178. ip: a.resultData[i].ipdz || '',
  179. port: a.resultData[i].dk || '',
  180. username: a.resultData[i].zh || '',
  181. password: a.resultData[i].mm || '',
  182. brand: a.resultData[i].pp || '',
  183. campus: a.resultData[i].xq || campus
  184. })
  185. }
  186. if (!flag) {
  187. obj.push({
  188. buildname: a.resultData[i].jxlmc,
  189. classes: [{
  190. classname: a.resultData[i].sxtmc,
  191. ip: a.resultData[i].ipdz || '',
  192. port: a.resultData[i].dk || '',
  193. username: a.resultData[i].zh || '',
  194. password: a.resultData[i].mm || '',
  195. brand: a.resultData[i].pp || '',
  196. campus: a.resultData[i].xq || campus
  197. }]
  198. })
  199. }
  200. }
  201. console.log(obj)
  202. app.$data.message = obj;
  203. },
  204. error: function(xhr, status, error) {
  205. console.error('Error:', error);
  206. }
  207. });
  208. }
  209. var app = new Vue({
  210. el: '#menu-container',
  211. data: {
  212. message:[],
  213. },
  214. mounted: function () {
  215. console.log("mounted");
  216. },
  217. created: function(){
  218. console.log("created");
  219. // 初始化校区tab样式
  220. $('#xqxq-tab').addClass('campus-tab-active');
  221. $('#laxq-tab').removeClass('campus-tab-active');
  222. // 加载默认校区(西溪校区)的摄像头列表
  223. loadCameraList('西溪校区');
  224. },
  225. methods: {
  226. handleClick(cameraInfo) {
  227. // cameraInfo包含:ip, port, username, password, brand等
  228. // 所有信息都从接口获取,不再使用写死的默认值
  229. if (!cameraInfo.ip) {
  230. console.error('摄像头IP地址为空,无法登录');
  231. alert('摄像头信息不完整,无法登录');
  232. return;
  233. }
  234. clickLogout();
  235. setTimeout(function () {
  236. // 使用接口返回的值,不再使用默认值
  237. $('#loginip').val(cameraInfo.ip);
  238. $('#port').val(cameraInfo.port || '');
  239. $('#username').val(cameraInfo.username || '');
  240. $('#password').val(cameraInfo.password || '');
  241. clickLogin(cameraInfo.ip);
  242. }, 200);
  243. }
  244. }
  245. })
  246. </script>
  247. </body>
  248. </html>