api.jsp 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621
  1. <%@page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
  2. <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  3. <script type="text/javascript" src="<c:url value='/resources/js/admin/api.js' />"></script>
  4. <!-- API 관리 -->
  5. <div class="main-wrapper">
  6. <div class="title-bar">
  7. <span class="title">API 관리</span>
  8. </div>
  9. <div id="wrapper">
  10. <div class="col-md-3">
  11. <div class="left-content">
  12. <div class="form-group text-center">
  13. <div class="btn-group" role="group" aria-label="...">
  14. <button type="button" class="btn btn-default btn-sm" id="btnCreateNode" title="메뉴추가">
  15. <span class="glyphicon glyphicon-plus">&nbsp;추가</span>
  16. </button>
  17. <button type="button" class="btn btn-default btn-sm" id="btnRemoveNode" title="메뉴삭제">
  18. <span class="glyphicon glyphicon-minus">&nbsp;삭제</span>
  19. </button>
  20. <button type="button" class="btn btn-default btn-sm" id="btnDeselectNode" title="선택해제">
  21. <span class="glyphicon glyphicon-remove">&nbsp;해제</span>
  22. </button>
  23. </div>
  24. </div>
  25. <div id="apiTreeView">
  26. </div>
  27. </div>
  28. </div>
  29. <div class="col-md-9">
  30. <div class="right-content row">
  31. <div class="form-group col-md-12" id="apiMsg">
  32. * API를 선택해주세요.
  33. </div>
  34. <div id="apiContent" style="display: none">
  35. <div class="form-group col-md-12 text-right">
  36. <div class="btn-group" role="group" aria-label="...">
  37. <button type="button" class="btn btn-default btn-sm" id="btnSaveNode" title="저장">
  38. <span class="glyphicon glyphicon-ok">&nbsp;저장</span>
  39. </button>
  40. <button type="button" class="btn btn-default btn-sm" id="btnCacheInit" title="캐시초기화">
  41. <span class="glyphicon glyphicon-refresh">&nbsp;초기화</span>
  42. </button>
  43. </div>
  44. </div>
  45. <div class="col-md-12">
  46. <div class="panel panel-default">
  47. <div class="panel-body">
  48. <div class="col-md-12">
  49. <div class="form-group content-box-title">
  50. <label>정보</label>
  51. </div>
  52. </div>
  53. <div class="form-group col-md-12">
  54. <div class="col-md-2 content-title text-right">
  55. <label class="">아이디</label>
  56. </div>
  57. <div class="col-md-4">
  58. <input type="text" class="form-control input-sm" id="txtId" placeholder="아이디 자동생성" readonly/>
  59. </div>
  60. <div class="col-md-2 content-title text-right">
  61. <label>이름</label>
  62. </div>
  63. <div class="col-md-4">
  64. <input type="text" class="form-control input-sm" id="txtName" placeholder="">
  65. </div>
  66. </div>
  67. <div class="form-group col-md-12">
  68. <div class="col-md-2 content-title text-right">
  69. <label>API URL</label>
  70. </div>
  71. <div class="col-md-10">
  72. <div class="input-group">
  73. <span class="input-group-addon input-group-no-style" id="spanCatPathName">@</span>
  74. <input type="text" class="form-control input-sm" aria-describedby="spanCatPathName" id="txtApiUrl">
  75. </div>
  76. </div>
  77. </div>
  78. <div class="form-group col-md-12">
  79. <div class="col-md-2 content-title text-right">
  80. <label>API타입</label>
  81. </div>
  82. <div class="col-md-3 pdr0">
  83. <select class="form-control input-sm" id="sltApiType">
  84. <option value="">선택</option>
  85. <c:forEach var="item" items="${apiTypes}">
  86. <option value="${item}">${item}</option>
  87. </c:forEach>
  88. </select>
  89. </div>
  90. <div class="col-md-1 text-right">
  91. <button type="button" class="btn btn-default btn-sm" id="btnApiTypeHelp" data-toggle="modal" data-target="#modal_apiTypeHelp" title="도움말">
  92. <span class="glyphicon glyphicon-question-sign"></span>
  93. </button>
  94. </div>
  95. <div class="col-md-2 content-title text-right">
  96. <label>연산유형</label>
  97. </div>
  98. <div class="col-md-4">
  99. <select class="form-control input-sm" id="sltHttpMethodType">
  100. <option value="">선택</option>
  101. <c:forEach var="item" items="${httpMethodTypes}">
  102. <option value="${item}">${item}</option>
  103. </c:forEach>
  104. </select>
  105. </div>
  106. </div>
  107. <div class="form-group col-md-12">
  108. <div class="col-md-2 content-title text-right">
  109. <label>응답결과 타입</label>
  110. </div>
  111. <div class="col-md-4">
  112. <select class="form-control input-sm" id="sltResultType">
  113. <option value="">선택</option>
  114. <c:forEach var="item" items="${resultTypes}">
  115. <option value="${item}">${item}</option>
  116. </c:forEach>
  117. </select>
  118. </div>
  119. <div class="col-md-2 content-title text-right">
  120. <label>데이터소스</label>
  121. </div>
  122. <div class="col-md-4">
  123. <select class="form-control input-sm" id="sltDataSourceName">
  124. <option value="">선택</option>
  125. <c:forEach var="item" items="${dataSourceNames}">
  126. <option value="${item}">${item}</option>
  127. </c:forEach>
  128. </select>
  129. </div>
  130. </div>
  131. </div>
  132. </div>
  133. </div>
  134. <div class="col-md-12" id="rowWebService" style="display:none">
  135. <div class="panel panel-default">
  136. <div class="panel-body">
  137. <div class="col-md-12">
  138. <div class="form-group content-box-title">
  139. <label>웹서비스 요청</label>
  140. </div>
  141. <div class="form-group col-md-12 pd0">
  142. <div class="col-md-2 content-title text-right">
  143. <label>URL</label>
  144. </div>
  145. <div class="col-md-10">
  146. <input type="text" class="form-control input-sm" id="txtTargetUrlAddr"/>
  147. </div>
  148. </div>
  149. <div class="form-group col-md-12 pd0">
  150. <div class="col-md-2 content-title text-right">
  151. <label>헤더정보</label>
  152. </div>
  153. <div class="col-md-10">
  154. <div class="text-right">
  155. <button type="button" class="btn btn-default btn-sm" id="btnHeaderInfo" title="편집">
  156. <span class="glyphicon glyphicon-edit">&nbsp;편집</span>
  157. </button>
  158. </div>
  159. <table class="table table-bordered table-hover">
  160. <thead>
  161. <tr>
  162. <td class="table-header">이름</td>
  163. <td class="table-header">값</td>
  164. </tr>
  165. </thead>
  166. <tbody id="table_header_view">
  167. </tbody>
  168. </table>
  169. </div>
  170. </div>
  171. </div>
  172. </div>
  173. </div>
  174. </div>
  175. <div class="col-md-12" id="rowProcedure" style="display: none">
  176. <div class="panel panel-default">
  177. <div class="panel-body">
  178. <div class="col-md-12">
  179. <div class="form-group content-box-title">
  180. <label>Procedure</label>
  181. </div>
  182. <div class="form-group col-md-12 pd0">
  183. <div class="col-md-2 content-title text-right">
  184. <label>Procedure</label>
  185. </div>
  186. <div class="col-md-10">
  187. <input type="text" class="form-control input-sm" id="txtProcedure"/>
  188. </div>
  189. </div>
  190. </div>
  191. </div>
  192. </div>
  193. </div>
  194. <div class="col-md-12" id="rowQueryMsg" style="display: none">
  195. <div class="panel panel-default">
  196. <div class="panel-body">
  197. <div class="col-md-12">
  198. <div class="form-group content-box-title">
  199. <label>SQL</label>
  200. </div>
  201. <div class="form-group col-md-12 pd0">
  202. <div class="col-md-2 content-title text-right">
  203. <label>SQL</label>
  204. </div>
  205. <div class="col-md-10">
  206. <textarea class="form-control input-sm" rows="3" id="txtQueryMsg"></textarea>
  207. </div>
  208. </div>
  209. </div>
  210. </div>
  211. </div>
  212. </div>
  213. <div class="col-md-12">
  214. <div class="panel panel-default">
  215. <div class="panel-body">
  216. <div class="col-md-12">
  217. <div class="form-group content-box-title">
  218. <label>파라미터</label>
  219. </div>
  220. <div class="form-group col-md-12 pd0">
  221. <div class="col-md-2 content-title text-right">
  222. <label></label>
  223. </div>
  224. <div class="col-md-10">
  225. <div class="text-right">
  226. <button type="button" class="btn btn-default btn-sm" id="btnParameter" title="편집">
  227. <span class="glyphicon glyphicon-edit">&nbsp;편집</span>
  228. </button>
  229. <button type="button" class="btn btn-default btn-sm" id="btnTest" title="테스트">
  230. <span class="glyphicon glyphicon-expand">&nbsp;테스트</span>
  231. </button>
  232. </div>
  233. <table class="table table-bordered table-hover">
  234. <thead>
  235. <tr>
  236. <td class="table-header">no</td>
  237. <td class="table-header">이름</td>
  238. <td class="table-header">타입</td>
  239. <td class="table-header">샘플 파라미터</td>
  240. <td class="table-header">설명</td>
  241. </tr>
  242. </thead>
  243. <tbody id="table_param_view">
  244. </tbody>
  245. </table>
  246. </div>
  247. </div>
  248. </div>
  249. </div>
  250. </div>
  251. </div>
  252. <div class="col-md-12">
  253. <div class="panel panel-default">
  254. <div class="panel-body">
  255. <div class="form-group col-md-12 mgt5">
  256. <div class="col-md-2 content-title text-right">
  257. <label>결과샘플</label>
  258. </div>
  259. <div class="col-md-10">
  260. <textarea class="form-control input-sm" id="txtResSampleCl" rows="3"></textarea>
  261. </div>
  262. </div>
  263. <div class="form-group col-md-12">
  264. <div class="col-md-2 content-title text-right">
  265. <label>설명<br/>(<span id="descLength">0</span>/500bytes)</label>
  266. </div>
  267. <div class="col-md-10">
  268. <textarea class="form-control input-sm" id="txtApiDesc" rows="3"></textarea>
  269. </div>
  270. </div>
  271. </div>
  272. </div>
  273. </div>
  274. <div class="col-md-12">
  275. <div class="panel panel-default">
  276. <div class="panel-body">
  277. <div class="form-group col-md-12 mgt5">
  278. <div class="col-md-2 content-title text-right">
  279. <label class="">최초 생성일</label>
  280. </div>
  281. <div class="col-md-4">
  282. <span class="form-control input-sm" id="spanCreateDt"></span>
  283. </div>
  284. <div class="col-md-2 content-title text-right">
  285. <label>최초 생성자</label>
  286. </div>
  287. <div class="col-md-4">
  288. <span class="form-control input-sm" id="spanCreateId"></span>
  289. </div>
  290. </div>
  291. <div class="form-group col-md-12">
  292. <div class="col-md-2 content-title text-right">
  293. <label class="">최종 변경일</label>
  294. </div>
  295. <div class="col-md-4">
  296. <span class="form-control input-sm" id="spanUpdateDt"></span>
  297. </div>
  298. <div class="col-md-2 content-title text-right">
  299. <label>최종 변경자</label>
  300. </div>
  301. <div class="col-md-4">
  302. <span class="form-control input-sm" id="spanUpdateId"></span>
  303. </div>
  304. </div>
  305. </div>
  306. </div>
  307. </div>
  308. </div>
  309. </div>
  310. </div>
  311. </div>
  312. </div>
  313. <!-- Modal -->
  314. <div class="modal fade" id="addItemModal_header" tabindex="-1" role="dialog">
  315. <div class="modal-dialog" role="document" style="width: 800px">
  316. <div class="modal-content">
  317. <div class="modal-header">
  318. ⊙ 헤더 정보
  319. </div>
  320. <div class="modal-body">
  321. <div class="row">
  322. <div class="col-md-5 content-table">
  323. <table class="table table-bordered table-hover table-row-click">
  324. <thead>
  325. <tr>
  326. <td class="table-header">이름</td>
  327. <td class="table-header max-width-sm">값</td>
  328. <td class="table-header">
  329. <button type="button" class="btn btn-primary btn-xs" id="btnNewItem_header">
  330. <span class="glyphicon glyphicon-plus">&nbsp;추가</span>
  331. </button>
  332. </td>
  333. </tr>
  334. </thead>
  335. <tbody id="table_header">
  336. </tbody>
  337. </table>
  338. </div>
  339. <div class="col-md-7">
  340. <div class="col-md-12 pd0">
  341. <div class="panel panel-default">
  342. <div class="panel-body">
  343. <div class="col-md-12" id="modalHeaderDetailEmpty">
  344. <div class="form-group col-md-12 pd0">
  345. <div class="col-md-12 pd0">
  346. * 헤더 정보를 선택해주세요.
  347. </div>
  348. </div>
  349. </div>
  350. <div id="modalHeaderDetail">
  351. <div class="col-md-12">
  352. <div class="row content-box-title">
  353. <div class="col-md-12 detail-content-title">
  354. <label>정보</label>
  355. </div>
  356. </div>
  357. <div class="form-group col-md-12 pd0">
  358. <div class="col-md-3 content-title">
  359. <label>이름</label>
  360. </div>
  361. <div class="col-md-9 pd0">
  362. <select class="form-control input-sm" id="sltHeader">
  363. <c:forEach var="item" items="${wsHeaderTypes}">
  364. <option value="${item.value}">${item.value}</option>
  365. </c:forEach>
  366. </select>
  367. </div>
  368. </div>
  369. <div class="form-group col-md-12 pd0">
  370. <div class="col-md-3 content-title">
  371. <label>값</label>
  372. </div>
  373. <div class="col-md-9 pd0">
  374. <input type="text" class="form-control input-sm" id="txtHeaderValue" placeholder="">
  375. </div>
  376. </div>
  377. <div class="form-group col-md-12 pd0">
  378. <div class="col-md-12 pd0 text-center">
  379. <button type="button" class="btn btn-default btn-sm" id="saveItem_header">
  380. <span class="glyphicon glyphicon-ok">&nbsp;저장</span>
  381. </button>
  382. </div>
  383. </div>
  384. </div>
  385. </div>
  386. </div>
  387. </div>
  388. </div>
  389. </div>
  390. </div>
  391. </div>
  392. <div class="modal-footer text-center">
  393. <button type="button" class="btn btn-default btn-sm" id="btnConfirmItem_header">
  394. <span class="glyphicon glyphicon-ok-circle">&nbsp;적용</span>
  395. </button>
  396. <button type="button" class="btn btn-default btn-sm" data-dismiss="modal">
  397. <span class="glyphicon glyphicon-remove-circle">&nbsp;취소</span>
  398. </button>
  399. </div>
  400. </div>
  401. </div>
  402. </div>
  403. <div class="modal fade" id="addItemModal_param" tabindex="-1" role="dialog">
  404. <div class="modal-dialog" role="document" style="width: 800px">
  405. <div class="modal-content">
  406. <div class="modal-header">
  407. ⊙ 파라미터 편집 &nbsp;&nbsp;
  408. <button type="button" class="btn btn-default btn-sm btn-test" id="btnTest_inModal">
  409. <span class="glyphicon glyphicon-expand">&nbsp;테스트</span>
  410. </button>
  411. </div>
  412. <div class="modal-body">
  413. <div class="row">
  414. <div class="col-md-5 content-table">
  415. <table class="table table-bordered table-hover table-row-click">
  416. <thead>
  417. <tr>
  418. <td class="table-header">이름</td>
  419. <!-- <td class="table-header">타입</td> -->
  420. <td class="table-header">샘플 파라미터</td>
  421. <!-- <td class="table-header">설명</td> -->
  422. <td class="table-header">
  423. <button type="button" class="btn btn-primary btn-xs" id="btnNewItem_param">
  424. <span class="glyphicon glyphicon-plus">&nbsp;추가</span>
  425. </button>
  426. </td>
  427. </tr>
  428. </thead>
  429. <tbody id="table_param">
  430. </tbody>
  431. </table>
  432. </div>
  433. <div class="col-md-7">
  434. <div class="col-md-12 pd0">
  435. <div class="panel panel-default">
  436. <div class="panel-body">
  437. <div class="col-md-12" id="modalParamDetailEmpty">
  438. <div class="form-group col-md-12 pd0">
  439. <div class="col-md-12 pd0">
  440. * 파라미터 정보를 선택해주세요.
  441. </div>
  442. </div>
  443. </div>
  444. <div id="modalParamDetail">
  445. <div class="col-md-12">
  446. <div class="row content-box-title">
  447. <div class="col-md-12 detail-content-title">
  448. <label>정보</label>
  449. </div>
  450. </div>
  451. <div class="form-group col-md-12 pd0">
  452. <div class="col-md-3 content-title">
  453. <label>이름</label>
  454. </div>
  455. <div class="col-md-9 pd0">
  456. <input type="text" class="form-control input-sm" id="txtParam" placeholder="">
  457. </div>
  458. </div>
  459. <div class="form-group col-md-12 pd0">
  460. <div class="col-md-3 content-title">
  461. <label>타입</label>
  462. </div>
  463. <div class="col-md-9 pd0">
  464. <select class="form-control input-sm" id="sltParam">
  465. <c:forEach var="item" items="${reqParamTypes}">
  466. <option value="${item}">${item}</option>
  467. </c:forEach>
  468. </select>
  469. </div>
  470. </div>
  471. <div class="form-group col-md-12 pd0">
  472. <div class="col-md-3 content-title">
  473. <label>샘플 파라미터</label>
  474. </div>
  475. <div class="col-md-9 pd0">
  476. <input type="text" class="form-control input-sm" id="txtSampleParam" placeholder="">
  477. </div>
  478. </div>
  479. <div class="form-group col-md-12 pd0">
  480. <div class="col-md-3 content-title">
  481. <label>설명</label>
  482. </div>
  483. <div class="col-md-9 pd0">
  484. <textarea class="form-control input-sm" rows="5" id="txtParamDesc"></textarea>
  485. </div>
  486. </div>
  487. <div class="form-group col-md-12 pd0">
  488. <div class="col-md-12 pd0 text-center">
  489. <button type="button" class="btn btn-default btn-sm" id="saveItem_param">
  490. <span class="glyphicon glyphicon-ok">&nbsp;저장</span>
  491. </button>
  492. </div>
  493. </div>
  494. </div>
  495. </div>
  496. </div>
  497. </div>
  498. </div>
  499. </div>
  500. </div>
  501. </div>
  502. <div class="modal-footer text-center">
  503. <button type="button" class="btn btn-default btn-sm" id="btnConfirmItem_param">
  504. <span class="glyphicon glyphicon-ok-circle">&nbsp;적용</span>
  505. </button>
  506. <button type="button" class="btn btn-default btn-sm" data-dismiss="modal">
  507. <span class="glyphicon glyphicon-remove-circle">&nbsp;취소</span>
  508. </button>
  509. </div>
  510. </div>
  511. </div>
  512. </div>
  513. <div class="modal fade" id="modal_apiTypeHelp" tabindex="-1" role="dialog">
  514. <div class="modal-dialog" role="document" style="width: 800px;">
  515. <div class="modal-content">
  516. <div class="modal-body" style="height: 600px; overflow: auto;">
  517. <div class="col-md-12">
  518. <div class="panel panel-default">
  519. <div class="panel-body">
  520. <div class="col-md-12">
  521. <div class="form-group content-box-title">
  522. <label>* WEB_SERVICE *</label>
  523. </div>
  524. <div class="form-group col-md-12 pd0">
  525. &nbsp;응답결과는 요청헤더의 Content-Type, Accept 순으로 확인해서 마지막으로 만나는 것이 최종 응답유형이된다.
  526. 예를들어 Content-Type이 XML이고, Accept는 JSON이라면 최종적으로 JSON이 응답유형이 된다. <br/><br/>
  527. 이 응답 유형이 JSON인 경우에 한해서 응답결과타입(MAP, LIST, INT)이 유효한데, INT는 사용되지 않는다. <br/><br/>
  528. 응답결과는 XML, JSON, URL-ENCODE가 준비되어 있으며 이외의 경우에는 Map에 key를 text로 하여 응답결과를 붙여서 반환한다.
  529. 응답결과가 XML이면 JSON객체로 반환한다. <br/><br/>
  530. 응답결과가 JSON이고, 응답결과타입이 LIST인 경우 리턴타입은 List&lt;Map&lt;String, Object&gt;&gt; 이다. <br/>
  531. 응답결과가 JSON이고, 응답결과타입이 MAP인 경우 리턴타입은 Map&lt;String, Object&gt;이다. <br/>
  532. URL-ENCODE의 경우 리턴타입은 MultiValueMap&lt;String, String&gt; 이다.
  533. </div>
  534. </div>
  535. </div>
  536. </div>
  537. </div>
  538. <div class="col-md-12">
  539. <div class="panel panel-default">
  540. <div class="panel-body">
  541. <div class="col-md-12">
  542. <div class="form-group content-box-title">
  543. <label>* SQL *</label>
  544. </div>
  545. <div class="form-group col-md-12 pd0">
  546. &nbsp;HttpMethod타입에 따라서 질의문이 실행되는데 HttpMethod타입이 GET인 경우와 그렇지 않은 경우로 분류된다. <br/>
  547. GET인 경우 응답결과타입이 MAP인 경우, queryForMap형태로 질의문이 실행된다. 즉, 결과가 1개인 SELECT문이 적합하다. <br/>
  548. LIST인 경우에는 queryForList형태로 질의문이 실행되므로, 결과가 2개 이상인 SELECT문에 적합하다. INT는 부적절한 응답결과타입이다. <br/><br/>
  549. HttpMethod타입이 GET이 아닌경우, INT가 아니면 부적절한 응답결과 타입이며 질의문은 INSERT, UPDATE, DELETE문이 적합한다. 반환되는 값은 해당 질의문에 의해 영향받은 row의 갯수이다.
  550. </div>
  551. </div>
  552. </div>
  553. </div>
  554. </div>
  555. <div class="col-md-12">
  556. <div class="panel panel-default">
  557. <div class="panel-body">
  558. <div class="col-md-12">
  559. <div class="form-group content-box-title">
  560. <label>* PROCEDURE *</label>
  561. </div>
  562. <div class="form-group col-md-12 pd0">
  563. &nbsp;Procedure 입력란(Api.targetName) 작성이 필요한다. 지정하는 형태는 다음과 같다.<br/>
  564. (1) {procedure name}<br/>
  565. (2) {schema name}.{procedure name}<br/>
  566. (3) {schema name}.{catalog name}.{procedure name}<br/>
  567. 이외의 경우는 부적절한 형태이다.
  568. 실행결과는 응답결과타입에 상관없이 Map&lt;String, Object&gt;이다.
  569. </div>
  570. </div>
  571. </div>
  572. </div>
  573. </div>
  574. <!-- <div class="row col-md-12">
  575. <div class="panel panel-default">
  576. <div class="panel-body">
  577. <div class="col-md-12">
  578. <div class="row content-box-title">
  579. <label>* myBatis *</label>
  580. </div>
  581. <div class="row col-md-12 pd0">
  582. </div>
  583. </div>
  584. </div>
  585. </div>
  586. </div> -->
  587. </div>
  588. <div class="modal-footer text-center">
  589. <button type="button" class="btn btn-default btn-sm" data-dismiss="modal">
  590. <span class="glyphicon glyphicon-ok-circle">&nbsp;확인</span>
  591. </button>
  592. </div>
  593. </div>
  594. </div>
  595. </div>
  596. <div class="modal fade" id="modal_testResult" tabindex="-1" role="dialog">
  597. <div class="modal-dialog" role="document">
  598. <div class="modal-content">
  599. <div class="modal-header">
  600. ⊙ 테스트 결과
  601. </div>
  602. <div class="modal-body">
  603. </div>
  604. <div class="modal-footer text-center">
  605. <button type="button" class="btn btn-default" data-dismiss="modal">
  606. <span class="glyphicon glyphicon-ok-circle">&nbsp;확인</span>
  607. </button>
  608. </div>
  609. </div>
  610. </div>
  611. </div>
  612. <script type="text/javascript">
  613. $(document).ready(function() {
  614. var api = new mplus_admin_api();
  615. api.init();
  616. });
  617. </script>