global.js 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585
  1. var bimSupport = "BIM資源網";
  2. var pageHeader = "";
  3. var list = new Array();
  4. var objectFilter = [];
  5. var usageFilter = [];
  6. var listObj = new Object();
  7. var table = [];
  8. const vm = Vue.createApp({
  9. data() {
  10. return {
  11. banner: bimSupport,
  12. pageHeader: pageHeader,
  13. list: list,
  14. table: table,
  15. }
  16. }
  17. });
  18. vm.component('side-bar', {
  19. data() {
  20. return {
  21. banner: bimSupport,
  22. }
  23. },
  24. template: `<aside id="sidebar-left" class="sidebar-left">
  25. <div class="sidebar-header">
  26. <div class="sidebar-title"> 導覽 </div>
  27. <div class="sidebar-toggle hidden-xs" data-toggle-class="sidebar-left-collapsed" data-target="html" data-fire-event="sidebar-left-toggle"> <i class="fa fa-bars" aria-label="Toggle sidebar"></i> </div>
  28. </div>
  29. <div class="nano">
  30. <div class="nano-content">
  31. <nav id="menu" class="nav-main" role="navigation">
  32. <ul class="nav nav-main">
  33. <li>
  34. <a href="home.php"> <i class="fa fa-home" aria-hidden="true"></i> <span>首頁</span> </a>
  35. </li>
  36. <li class="nav-parent nav-active nav-expanded">
  37. <a> <i class="fa fa-cloud" aria-hidden="true"></i> <span>{{banner}}</span> </a>
  38. <ul class="nav nav-children">
  39. <side-bar-list href="component-list.php" fa="fa fa-briefcase" span="BIM元件庫"></side-bar-list>
  40. <side-bar-list href="api-list.php" fa="fa fa-gear" span="BIM程式庫"></side-bar-list>
  41. <side-bar-list href="video-list.php" fa="fa fa-video-camera" span="亞新教育訓練平台"></side-bar-list>
  42. <side-bar-list href="other-list.php" fa="fa fa-tasks" span="BIM相關資源"></side-bar-list>
  43. </ul>
  44. </li>
  45. </ul>
  46. </nav>
  47. </div>
  48. </div>
  49. </aside>`
  50. });
  51. vm.component('header-menu', {
  52. data() {
  53. return {
  54. banner: bimSupport,
  55. userName: userName,
  56. role:role,
  57. }
  58. },
  59. template: `<header class="header">
  60. <div class="logo-container">
  61. <div class="banner-txt">{{banner}}</div>
  62. <div class="visible-xs toggle-sidebar-left" data-toggle-class="sidebar-left-opened" data-target="html" data-fire-event="sidebar-left-opened">
  63. <i class="fa fa-bars" aria-label="Toggle sidebar"></i>
  64. </div>
  65. </div>
  66. <!-- start: search & user box -->
  67. <div class="header-right"> <span class="separator"></span>
  68. <ul class="notifications">
  69. <li>
  70. <a href="#" class="dropdown-toggle notification-icon" data-toggle="dropdown">
  71. <i class="fa fa-bell"></i>
  72. <span id="warning-count" class="badge">0</span>
  73. </a>
  74. <div class="dropdown-menu notification-menu">
  75. <div class="notification-title">
  76. <span id="warning-count2" class="pull-right label label-default">0</span>
  77. 警告
  78. </div>
  79. <div class="content">
  80. <ul>
  81. <li id="warning-style" style="display: none;">
  82. <a href="warning.php" class="clearfix">
  83. <div class="image">
  84. <i class="fa fa-warning bg-danger"></i>
  85. </div>
  86. <span class="title">人員進入危險區域</span>
  87. <span class="message">現在</span>
  88. </a>
  89. </li>
  90. <div id="warning-none">No warning</div>
  91. </ul>
  92. </div>
  93. </div>
  94. </li>
  95. <li>
  96. <a href="/Front-Page/home.php" class="notification-icon" data-toggle="tooltip" title="綜合登入入口" data-placement="bottom">
  97. <i class="fa fa-home"></i>
  98. </a>
  99. </li>
  100. </ul><span class="separator"></span>
  101. <div id="userbox" class="userbox">
  102. <a href="#" data-toggle="dropdown">
  103. <figure class="profile-picture"> <img src="/Common/assets/images/!logged-user.jpg" alt="Joseph Doe" class="img-circle" data-lock-picture="/Common/assets/images/!logged-user.jpg" /> </figure>
  104. <div class="profile-info" data-lock-name="John Doe" data-lock-email="johndoe@JSOFT.com"> <span class="name">{{userName}}</span> <span class="role">{{role}}</span> </div> <i class="fa custom-caret"></i>
  105. </a>
  106. <div class="dropdown-menu">
  107. <ul class="list-unstyled">
  108. <li class="divider"></li>
  109. <li> <a role="menuitem" tabindex="-1" href="/Common/script/php/Logout.php"><i class="fa fa-power-off"></i> Logout</a> </li>
  110. </ul>
  111. </div>
  112. </div>
  113. </div>
  114. <!-- end: search & user box -->
  115. </header>`
  116. });
  117. vm.component('inner-menu', {
  118. template: `<div class="inner-menu-toggle">
  119. <a href="#" class="inner-menu-expand" data-open="inner-menu">
  120. Show Bar <i class="fa fa-chevron-right"></i>
  121. </a>
  122. </div>
  123. <menu id="content-menu" class="inner-menu" role="menu">
  124. <div class="nano">
  125. <div class="nano-content">
  126. <div class="inner-menu-toggle-inside">
  127. <a href="#" class="inner-menu-collapse">
  128. <i class="fa fa-chevron-up visible-xs-inline"></i><i class="fa fa-chevron-left hidden-xs-inline"></i> Hide Bar
  129. </a>
  130. <a href="#" class="inner-menu-expand" data-open="inner-menu">
  131. Show Bar <i class="fa fa-chevron-down"></i>
  132. </a>
  133. </div>
  134. <div class="inner-menu-content">
  135. <slot name="inner-upload"></slot>
  136. <slot name="inner-equipment"></slot>
  137. </div>
  138. </div>
  139. </div>
  140. </menu>`
  141. });
  142. vm.component('inner-menu-li', {
  143. template: `<li>
  144. <a v-bind:href="href" v-bind:class = "GetLocation?'menu-item active':'menu-item'"><i class="fa fa-gears"></i>{{name}}</a>
  145. </li>`,
  146. computed: {
  147. GetLocation() {
  148. var url_href = window.location.href;
  149. var url = new URL(url_href);
  150. var type = url.searchParams.get("type");
  151. if (type != null) {
  152. if (this.href.includes(type)) {
  153. return true;
  154. } else {
  155. return false;
  156. }
  157. }
  158. }
  159. },
  160. props: {
  161. href: String,
  162. name: String,
  163. }
  164. });
  165. vm.component('search-bar', {
  166. template: `<li style="padding-top: 10px;">
  167. <div class="input-group input-search" style="table-layout: auto;">
  168. <input type="search" class="form-control" name="q" id="quicksearch" placeholder="Search...">
  169. <span class="input-group-btn">
  170. <button class="btn btn-default" type="submit" id="searchBtn"><i class="fa fa-search"></i></button>
  171. </span>
  172. </div>
  173. </li>`,
  174. });
  175. vm.component('filter-bar', {
  176. template: `<li class="right">
  177. <ul class="button-group nav nav-pills nav-pills-primary" data-filter-group="type">
  178. <li>
  179. <label>Filter:</label>
  180. </li>
  181. <li class="active">
  182. <button id="switch" class="btn btn-default">篩選<span id="caret" class="caret"></span></button>
  183. </li>
  184. </ul>
  185. </li>`,
  186. });
  187. vm.component('filter-content', {
  188. template: `<div id="filter-content" class="panel-body" style="display:none;">
  189. <label style="padding: 10px 15px;">元件版本:</label>
  190. <div class="btn-group">
  191. <div id="options">
  192. <div id="revitVersion" class="option-set" data-group="year">
  193. </div>
  194. </div>
  195. </div>
  196. </div>`,
  197. });
  198. vm.component('filter-content2', {
  199. data() {
  200. return {
  201. usageFilter: usageFilter,
  202. objectFilter: objectFilter,
  203. }
  204. },
  205. template: `<div id="filter-content" class="panel-body" style="display:none;">
  206. <div class="filters">
  207. <div class="ui-group">
  208. <ul class="button-group nav nav-pills nav-pills-primary" data-filter-group="software">
  209. <li style="padding: 10px 15px;">
  210. <label>開發類型:</label>
  211. </li>
  212. <li class="active">
  213. <a class="button" data-filter="">any</a>
  214. </li>
  215. <li>
  216. <a class="button" data-filter=".Dynamo">Dynamo</a>
  217. </li>
  218. <li>
  219. <a class="button" data-filter=".Revit">Revit</a>
  220. </li>
  221. </ul>
  222. </div>
  223. </div>
  224. <div class="filters">
  225. <div class="ui-group">
  226. <ul class="button-group nav nav-pills nav-pills-primary" data-filter-group="object">
  227. <li style="padding: 10px 15px;">
  228. <label>物件:</label>
  229. </li>
  230. <li class="active">
  231. <a class="button" data-filter="">any</a>
  232. </li>
  233. <filter-li v-for="item in objectFilter" v-bind:object="item"></filter-li>
  234. </ul>
  235. </div>
  236. </div>
  237. <div class="filters">
  238. <div class="ui-group">
  239. <ul class="button-group nav nav-pills nav-pills-primary" data-filter-group="usage">
  240. <li style="padding: 10px 15px;">
  241. <label>功能:</label>
  242. </li>
  243. <li class="active">
  244. <a class="button" data-filter="">any</a>
  245. </li>
  246. <filter-li v-for="item in usageFilter" v-bind:object="item"></filter-li>
  247. </ul>
  248. </div>
  249. </div>
  250. </div>`,
  251. });
  252. vm.component('filter-li', {
  253. template: `<li><a class="button" v-bind:data-filter="addDot">{{object}}</a></li>`,
  254. props: {
  255. object: String,
  256. },
  257. computed: {
  258. addDot() {
  259. return "." + this.object;
  260. }
  261. },
  262. });
  263. vm.component('side-bar-list', {
  264. template: `<li v-bind:class = "GetLocation?'nav-active':''">
  265. <a v-bind:href="href">
  266. <i v-bind:class="fa" aria-hidden="true"></i><span>{{span}}</span>
  267. </a>
  268. </li>`,
  269. computed: {
  270. GetLocation() {
  271. var pathname = window.location.pathname.split('/');
  272. var type = pathname[pathname.length - 1]
  273. if (this.href.includes(type)) {
  274. return true;
  275. } else {
  276. return false;
  277. }
  278. }
  279. },
  280. props: {
  281. span: String,
  282. fa: String,
  283. href: String,
  284. },
  285. });
  286. vm.component('upload-component', {
  287. template: `<a class="modal-with-form btn btn-block btn-primary btn-md pt-sm pb-sm text-md" href="#modalForm2">
  288. <i class="fa fa-upload mr-xs"></i>
  289. 上傳元件
  290. </a>
  291. <div id="modalForm2" class="modal-block modal-block-primary mfp-hide">
  292. <section class="panel form-wizard" id="w1">
  293. <header class="panel-heading">
  294. <h2 class="panel-title">上傳BIM元件</h2>
  295. </header>
  296. <div class="panel-body panel-body-nopadding">
  297. <div class="wizard-tabs">
  298. <ul class="wizard-steps">
  299. <li class="active">
  300. <a href="#w1-account" data-toggle="tab" class="text-center">
  301. <span class="badge hidden-xs">1</span>
  302. 選擇檔案及類別
  303. </a>
  304. </li>
  305. <li>
  306. <a href="#w1-profile" data-toggle="tab" class="text-center">
  307. <span class="badge hidden-xs">2</span>
  308. 填寫詳細資料
  309. </a>
  310. </li>
  311. </ul>
  312. </div>
  313. <form class="form-horizontal" novalidate="novalidate">
  314. <div class="tab-content">
  315. <div id="w1-account" class="tab-pane active">
  316. <div class="form-group">
  317. <label class="col-md-1 control-label">rfa上傳</label>
  318. <div class="col-md-6">
  319. <div class="fileupload fileupload-new" data-provides="fileupload">
  320. <div class="input-append">
  321. <div class="uneditable-input">
  322. <i class="fa fa-file fileupload-exists"></i>
  323. <span class="fileupload-preview"></span>
  324. </div>
  325. <span class="btn btn-default btn-file">
  326. <span class="fileupload-exists">變更檔案</span>
  327. <span class="fileupload-new">選擇檔案</span>
  328. <input type="file" />
  329. </span>
  330. <a href="#" class="btn btn-default fileupload-exists" data-dismiss="fileupload">移除檔案</a>
  331. </div>
  332. </div>
  333. </div>
  334. </div>
  335. <div class="form-group">
  336. <label class="col-md-1 control-label">glb上傳</label>
  337. <div class="col-md-6">
  338. <div class="fileupload fileupload-new" data-provides="fileupload">
  339. <div class="input-append">
  340. <div class="uneditable-input">
  341. <i class="fa fa-file fileupload-exists"></i>
  342. <span class="fileupload-preview"></span>
  343. </div>
  344. <span class="btn btn-default btn-file">
  345. <span class="fileupload-exists">變更檔案</span>
  346. <span class="fileupload-new">選擇檔案</span>
  347. <input type="file" />
  348. </span>
  349. <a href="#" class="btn btn-default fileupload-exists" data-dismiss="fileupload">移除檔案</a>
  350. </div>
  351. </div>
  352. </div>
  353. </div>
  354. <div class="form-group">
  355. <label class="col-sm-1 control-label">設備類別</label>
  356. <div class="col-sm-3">
  357. <select class="form-control mb-md" id="typeSelect">
  358. <option value="">請選擇設備類別</option>
  359. </select>
  360. </div>
  361. </div>
  362. </div>
  363. <div id="w1-profile" class="tab-pane">
  364. <div class="form-group">
  365. 尚未選擇設備類別
  366. </div>
  367. </div>
  368. </div>
  369. </form>
  370. </div>
  371. <div class="panel-footer">
  372. <ul class="pager">
  373. <li class="previous disabled">
  374. <a><i class="fa fa-angle-left"></i> 上一步</a>
  375. </li>
  376. <li class="finish hidden pull-right modal-confirm">
  377. <a>完成送出</a>
  378. </li>
  379. <li class="next">
  380. <a>下一步 <i class="fa fa-angle-right"></i></a>
  381. </li>
  382. </ul>
  383. </div>
  384. </section>
  385. </div>`,
  386. });
  387. vm.component('equipment-list', {
  388. data() {
  389. return {
  390. jsonData: jsonData,
  391. userName: userName,
  392. url: "component-favorite.php?userName=" + userName,
  393. }
  394. },
  395. template: `
  396. <div class="sidebar-widget m-none">
  397. <div class="widget-header clearfix">
  398. <h6 class="title pull-left mt-xs">類別</h6>
  399. </div>
  400. <div class="widget-content">
  401. <nav id="menu" class="nav-main" role="navigation">
  402. <ul class="nav nav-main">
  403. <special-li v-for="item in jsonData" v-bind:name="item.category_name" v-bind:children="item.children" v-bind:parent="item.category_name"></special-li>
  404. <hr class="separator" />
  405. <li>
  406. <a v-bind:href="url" class="menu-item"><i class="fa fa-gears"></i>清單列表</a>
  407. </li>
  408. </ul>
  409. </nav>
  410. </div>
  411. </div>`,
  412. });
  413. vm.component('special-li', {
  414. template: `
  415. <li class="nav-parent">
  416. <a class="dropdown-btn" v-bind:href="hrefLink(parent)" v-bind:name="parent">{{name}}</a>
  417. <ul class="nav nav-children" style="background: inherit; padding-left: 15px;">
  418. <special-li2 v-for="item in children" v-bind:href="item.component_name" v-bind:name="item.component_name" v-bind:parent="parent"></special-li2>
  419. </ul>
  420. </li>
  421. `,
  422. props: {
  423. name: String,
  424. children: Array,
  425. parent: String
  426. },
  427. methods: {
  428. hrefLink(parent) {
  429. return 'component-list.php?parent=' + parent;
  430. }
  431. }
  432. });
  433. vm.component('special-li2', {
  434. template: `
  435. <li>
  436. <a v-bind:href="hrefLink(href, parent)" class="menu-item" v-bind:name="parent">{{name}}</a>
  437. </li>
  438. `,
  439. props: {
  440. href: String,
  441. name: String,
  442. parent: String
  443. },
  444. methods: {
  445. hrefLink(name, parent) {
  446. return 'component-list.php?type=' + name + '&parent=' + parent;
  447. }
  448. }
  449. });
  450. vm.component('api-list', {
  451. data() {
  452. return {
  453. jsonData: jsonData,
  454. userName: userName,
  455. url: "component-favorite.php?userName=" + userName,
  456. }
  457. },
  458. template: `<div class="sidebar-widget m-none">
  459. <div class="widget-header clearfix">
  460. <h6 class="title pull-left mt-xs">適用性</h6>
  461. </div>
  462. <div class="widget-content">
  463. <ul class="mg-folders">
  464. <inner-menu-li href="api-list.php?type=土建" name="土建"></inner-menu-li>
  465. <inner-menu-li href="api-list.php?type=土開" name="土開"></inner-menu-li>
  466. <inner-menu-li href="api-list.php?type=軌道" name="軌道"></inner-menu-li>
  467. <inner-menu-li href="api-list.php?type=機電" name="機電"></inner-menu-li>
  468. <inner-menu-li href="api-list.php?type=資訊" name="資訊"></inner-menu-li>
  469. <inner-menu-li href="api-list.php?type=通用" name="通用"></inner-menu-li>
  470. </ul>
  471. </div>
  472. <hr class="separator" />
  473. <div class="widget-header clearfix">
  474. <h6 class="title pull-left mt-xs">其他</h6>
  475. </div>
  476. <div class="widget-content">
  477. <ul class="mg-folders">
  478. <inner-menu-li href="api-list.php" name="所有程式清單"></inner-menu-li>
  479. <inner-menu-li href="api-list.php?type=未分類" name="未分類"></inner-menu-li>
  480. </ul>
  481. </div>
  482. </div>`,
  483. });
  484. vm.component('other-list', {
  485. data() {
  486. return {
  487. jsonData: jsonData,
  488. userName: userName,
  489. url: "component-favorite.php?userName=" + userName,
  490. }
  491. },
  492. template: `<div class="sidebar-widget m-none">
  493. <div class="widget-header clearfix">
  494. <h6 class="title pull-left mt-xs">類別</h6>
  495. </div>
  496. <div class="widget-content">
  497. <ul class="mg-folders">
  498. <inner-menu-li href="other-list.php?type=收費建議" name="收費建議"></inner-menu-li>
  499. <inner-menu-li href="other-list.php?type=契約需求範例" name="契約需求範例"></inner-menu-li>
  500. <inner-menu-li href="other-list.php?type=驗收標準" name="驗收標準"></inner-menu-li>
  501. <inner-menu-li href="other-list.php?type=BIM專案管理" name="BIM專案管理"></inner-menu-li>
  502. <inner-menu-li href="other-list.php?type=樣板" name="樣板"></inner-menu-li>
  503. <inner-menu-li href="other-list.php?type=其他" name="其他"></inner-menu-li>
  504. </ul>
  505. </div>
  506. <hr class="separator" />
  507. </div>`,
  508. });
  509. vm.component('isotope-item', {
  510. data() {
  511. return {
  512. list: list,
  513. filClass: "isotope-item col-sm-6 col-md-4 col-lg-3 ",
  514. }
  515. },
  516. props: {
  517. name: String,
  518. folder: String,
  519. id: Number,
  520. object: String,
  521. usage: String,
  522. software: String,
  523. detail: String,
  524. source: String,
  525. operate: String,
  526. viewTimes: Number,
  527. downloadTimes: Number,
  528. },
  529. computed: {
  530. addClass() {
  531. return this.filClass + " " + this.object + " " + this.usage + " " + this.software;
  532. }
  533. },
  534. methods: {
  535. bindHref(software, name, folder) {
  536. return 'assets/API/Universal/' + software + '/' + folder + '/' + name + '.png';
  537. },
  538. hrefLink(id) {
  539. return 'api-detail.php?object=' + id;
  540. }
  541. },
  542. template: `<div v-bind:class="addClass">
  543. <div class="thumbnail">
  544. <a class="name" v-bind:href="hrefLink(id)">{{name}}</a>
  545. <div class="mg-description"><small style="display:none;">{{detail}}</small><small class="operate" style="display:none;">{{operate}}</small><small class="source" style="display:none;">{{source}}</small><small class="pull-right text-muted software" >{{software}}</small></div>
  546. <div class="thumb-preview">
  547. <div class="thumb-image"></div>
  548. <div><img v-bind:href="bindHref(software,name,folder)" v-bind:src="bindHref(software,name,folder)" class="img-responsive" alt="Project" onerror="this.src='assets/images/not-found-image.jpg'" style="transform: scale(1);"></div>
  549. </div>
  550. <p class="viewTimes" hidden>{{viewTimes}}</p>
  551. <p class="downloadTimes" hidden>{{downloadTimes}}</p>
  552. </div>
  553. </div>`,
  554. });