setting.html 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490
  1. <include file="Common/header" />
  2. <link rel="stylesheet" type="text/css" href="__PUBLIC__/css/tab-tpl.css?v=1">
  3. <style type="text/css">
  4. .member-desc{
  5. width: 300px;
  6. margin: 0 auto;
  7. }
  8. </style>
  9. <div class="tab-header"></div>
  10. <div class="container tab-doc-container">
  11. <div class="tab-doc-title-box">
  12. <span class="dn"></span>
  13. <h3 >项目设置 &nbsp;&nbsp;<small><a href="javascript:history.go(-1)">返回</a></small></h3>
  14. </div>
  15. <div class="tab-doc-body" >
  16. <div class="tab-doc-content" >
  17. <ul class="nav nav-tabs" id="myTab">
  18. <li><a href="#base-info" data-toggle="tab">基础信息</a></li>
  19. <li><a href="#member" data-toggle="tab">成员管理</a></li>
  20. <li><a href="#adv-seting" data-toggle="tab">高级设置</a></li>
  21. <li><a href="#item-api" data-toggle="tab">开放API</a></li>
  22. </ul>
  23. <div class="tab-content">
  24. <div class="tab-pane" id="base-info" >
  25. <form class="form-horizontal">
  26. <div class="control-group">
  27. <label class="control-label" for="">项目名:</label>
  28. <div class="controls">
  29. <input type="text" id="item_name" placeholder="">
  30. </div>
  31. </div>
  32. <div class="control-group">
  33. <label class="control-label" for="">项目描述:</label>
  34. <div class="controls">
  35. <input type="text" id="item_description" placeholder="">
  36. </div>
  37. </div>
  38. <div class="control-group" style="display:none">
  39. <label class="control-label" for="">个性域名:</label>
  40. <div class="controls">
  41. <input type="text" id="item_domain" placeholder="">
  42. </div>
  43. </div>
  44. <div class="control-group">
  45. <label class="control-label" for="inputPassword">访问密码:</label>
  46. <div class="controls">
  47. <input type="password" id="password" placeholder="(可选)私有项目请设置访问密码">
  48. </div>
  49. </div>
  50. <div class="control-group">
  51. <div class="controls">
  52. <button type="submit" id="item_save" class="btn">保存</button>
  53. </div>
  54. </div>
  55. </form>
  56. </div>
  57. <div class="tab-pane" id="member">
  58. <p><button id="add-member-btn" class="btn ">新增成员</button></p>
  59. <table class="table table-hover">
  60. <thead>
  61. <tr>
  62. <th style="width:80px;">用户名</th>
  63. <th style="width:80px;">添加时间</th>
  64. <th style="width:80px;">权限</th>
  65. <th style="width:80px;">操作</th>
  66. </tr>
  67. </thead>
  68. <tbody id="member-list">
  69. </tbody>
  70. </table>
  71. </div>
  72. <div class="tab-pane" id="adv-seting">
  73. <div style="width:300px;margin:0 auto;padding-top:20px;">
  74. <p><button id="attorn-btn" class="btn ">转让</button></p>
  75. <p><small>你可以将项目转让给他人</small></p>
  76. <hr>
  77. <p><button id="delete-item-btn" class="btn btn-danger">删除</button></p>
  78. <p><small>删除后将不可恢复</small></p>
  79. <hr>
  80. </div>
  81. </div>
  82. <div class="tab-pane" id="item-api">
  83. <form class="form-horizontal">
  84. <div class="control-group">
  85. <label class="control-label" for="">api_key:</label>
  86. <div class="controls">
  87. <!-- <input type="text" id="api_key" style="width:260px;" placeholder="" disabled> -->
  88. <code id="api_key" ></code>
  89. </div>
  90. </div>
  91. <div class="control-group">
  92. <label class="control-label" for="">api_token:</label>
  93. <div class="controls">
  94. <!-- <input type="text" id="api_token" placeholder="" style="width:260px;" disabled> -->
  95. <code id="api_token" ></code>
  96. </div>
  97. </div>
  98. <div class="control-group">
  99. <div class="controls">
  100. <button type="submit" id="reset_api_token" class="btn">重新生成api_token</button>
  101. </div>
  102. </div>
  103. </form>
  104. <div style="width:450px;margin:0 auto;padding-top:20px;">
  105. <p>showdoc开放文档编辑的API,供使用者更加方便地操作文档数据。利用开放API,你可以自动化地完成很多事</p>
  106. <p>关于API详细用法,请参考我们的<a href="https://www.showdoc.cc/page/102098" target="_blank">API文档</a></p>
  107. <hr>
  108. </div>
  109. </div>
  110. </div>
  111. </div>
  112. </div>
  113. <input type="hidden" id="item_id" value="{$item_id}">
  114. <!-- 转让项目的弹窗 -->
  115. <div id="attorn-modal" class="modal hide fade">
  116. <div class="">
  117. <div class="modal-header">
  118. <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
  119. <h4>转让项目</h4>
  120. </div>
  121. <div class="">
  122. <form class="form-horizontal">
  123. <div class="control-group">
  124. <label class="control-label" for="inputEmail">{$Think.Lang.username}</label>
  125. <div class="controls">
  126. <input type="text" id="attorn_username" placeholder="{$Think.Lang.receiver_name}" value="">
  127. </div>
  128. </div>
  129. <div class="control-group">
  130. <label class="control-label" for="inputEmail">{$Think.Lang.verify_identity}</label>
  131. <div class="controls">
  132. <input type="password" id="attorn_password" placeholder="{$Think.Lang.your_password}" value="">
  133. </div>
  134. </div>
  135. <div class="control-group">
  136. <div class="controls">
  137. <button type="submit" class="btn" id="attorn_save">{$Think.Lang.attorn}</button>
  138. </div>
  139. </div>
  140. </form>
  141. </div>
  142. </div>
  143. <div class="modal-footer">
  144. <a href="#" class="btn exist-attorn" data-dismiss="modal" aria-hidden="true" >{$Think.Lang.close}</a>
  145. </div>
  146. </div>
  147. <!-- 删除项目的弹窗 -->
  148. <div id="delete-item-modal" class="modal hide fade">
  149. <div class="">
  150. <div class="modal-header">
  151. <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
  152. <h4>删除项目</h4>
  153. </div>
  154. <div class="">
  155. <form class="form-horizontal">
  156. <div class="control-group">
  157. <label class="control-label" for="inputEmail">{$Think.Lang.verify_identity}</label>
  158. <div class="controls">
  159. <input type="password" id="delete_item_password" placeholder="{$Think.Lang.your_password}" value="">
  160. </div>
  161. </div>
  162. <div class="control-group">
  163. <div class="controls">
  164. <button type="submit" class="btn" id="delete_item_save">{$Think.Lang.delete}</button>
  165. </div>
  166. </div>
  167. </form>
  168. </div>
  169. </div>
  170. <div class="modal-footer">
  171. <a href="#" class="btn exist-attorn" data-dismiss="modal" aria-hidden="true" >{$Think.Lang.close}</a>
  172. </div>
  173. </div>
  174. <!-- 添加成员的弹窗 -->
  175. <div id="member-modal" class="modal hide fade">
  176. <!-- 编辑框 -->
  177. <div class="">
  178. <div class="modal-header">
  179. <h4>{$Think.Lang.new_member}</h4>
  180. </div>
  181. <div class="">
  182. <form class="form-horizontal">
  183. <div class="control-group">
  184. <label class="control-label" for="inputEmail">{$Think.Lang.username}</label>
  185. <div class="controls">
  186. <input type="text" id="member_username" placeholder="{$Think.Lang.username}" value="">
  187. </div>
  188. </div>
  189. <div class="control-group">
  190. <div class="controls">
  191. <label class="checkbox">
  192. <input type="checkbox" id="member_group_id">{$Think.Lang.member_group_id}
  193. </label>
  194. </div>
  195. </div>
  196. <div class="control-group">
  197. <div class="controls">
  198. <button type="submit" class="btn" id="member_save">{$Think.Lang.save}</button>
  199. </div>
  200. </div>
  201. </form>
  202. <div class="member-desc">
  203. <p>权限说明:
  204. <br>默认成员可以新建/编辑项目页面,删除时将只能删除自己新建/编辑的页面。
  205. <br>勾选只读属性后,该成员对所有页面都只能查看,无法新增/编辑/删除</p>
  206. </div>
  207. </div>
  208. </div>
  209. <div class="modal-footer">
  210. <a href="#" class="btn " data-dismiss="modal" aria-hidden="true">{$Think.Lang.close}</a>
  211. </div>
  212. </div>
  213. <include file="Common/footer" />
  214. <script type="text/javascript">
  215. $(function(){
  216. $('a[data-toggle="tab"]').on('shown', function (e) {
  217. //e.target // activated tab
  218. //e.relatedTarget // previous tab
  219. console.log($(e.target).attr("href"));
  220. })
  221. //展示第一个tab
  222. $("#myTab a:first").tab("show");
  223. var item_id = $("#item_id").val() ;
  224. //获取基础信息
  225. get_base_info() ;
  226. function get_base_info(){
  227. $.get(
  228. DocConfig.server+"/api/item/detail",
  229. {"item_id":item_id},
  230. function(data){
  231. if (data.error_code === 0 ) {
  232. //console.log(data.data);
  233. $("#item_name").val(data.data.item_name);
  234. $("#item_description").val(data.data.item_description);
  235. $("#item_domain").val(data.data.item_domain);
  236. $("#password").val(data.data.password);
  237. }else{
  238. layer.alert(data.error_message);
  239. }
  240. },
  241. "json"
  242. );
  243. }
  244. //保存项目基础信息
  245. $("#item_save").click(function(){
  246. var item_name = $("#item_name").val();
  247. var item_description = $("#item_description").val();
  248. var item_domain = $("#item_domain").val();
  249. var password = $("#password").val();
  250. $.post(
  251. DocConfig.server+"/api/item/update",
  252. {"item_id":item_id,"item_name":item_name,"item_description":item_description,"item_domain":item_domain,"password":password},
  253. function(data){
  254. if (data.error_code === 0 ) {
  255. layer.msg('保存成功',{"time":1000});
  256. get_base_info() ;
  257. }else{
  258. layer.alert(data.error_message);
  259. }
  260. },
  261. "json"
  262. );
  263. return false;
  264. });
  265. //点击转让按钮,弹出modal
  266. $("#attorn-btn").click(function(){
  267. $('#attorn-modal').modal({
  268. "backdrop":'static'
  269. });
  270. });
  271. //监听转让
  272. $("#attorn_save").click(function(){
  273. var username = $("#attorn_username").val();
  274. var password = $("#attorn_password").val();
  275. $.post(
  276. DocConfig.server+"/api/item/attorn",
  277. {"username": username ,"item_id": item_id , "password": password },
  278. function(data){
  279. if (data.error_code == 0) {
  280. layer.msg('转让成功,正在跳转回主页..',{"time":3000});
  281. //跳转
  282. setTimeout(function(){
  283. window.location.href="?s=/home/item/index";
  284. },3000)
  285. }else{
  286. layer.alert(data.error_message);
  287. }
  288. },
  289. "json"
  290. );
  291. return false;
  292. });
  293. //删除项目
  294. $("#delete-item-btn").click(function(){
  295. $('#delete-item-modal').modal({
  296. "backdrop":'static'
  297. });
  298. });
  299. //监听删除
  300. $("#delete_item_save").click(function(){
  301. var password = $("#delete_item_password").val();
  302. $.post(
  303. DocConfig.server+"/api/item/delete",
  304. {"item_id": item_id , "password": password },
  305. function(data){
  306. if (data.error_code == 0) {
  307. layer.msg('删除成功,正在跳转回主页..',{"time":3000});
  308. //跳转
  309. setTimeout(function(){
  310. window.location.href="?s=/home/item/index";
  311. },3000)
  312. }else{
  313. layer.alert(data.error_message);
  314. }
  315. },
  316. "json"
  317. );
  318. return false;
  319. });
  320. //点击添加成员,弹出modal
  321. $("#add-member-btn").click(function(){
  322. $('#member-modal').modal({
  323. "backdrop":'static'
  324. });
  325. });
  326. //获取成员列表
  327. get_member_list();
  328. function get_member_list(){
  329. $.get(
  330. DocConfig.server+"/api/member/getList",
  331. {"item_id":item_id},
  332. function(data){
  333. $("#member-list").html('');
  334. if (data.error_code === 0 ) {
  335. //console.log(data.data);
  336. var json = data.data ;
  337. if (json.length > 0 ) {
  338. for (var i = 0; i < json.length; i++) {
  339. var html = '<tr>'
  340. +'<td><div class="type-parent">'+json[i].username+'</div></td>'
  341. +'<td><div class="type-parent">'+json[i].addtime+'</div></td>'
  342. +'<td><div class="type-parent">'+json[i].member_group+'</div></td>'
  343. +'<td><a href="#" class="member-delete" data-id="'+json[i].item_member_id+'">删除</a></td>'
  344. +'</tr>';
  345. $("#member-list").append(html);
  346. };
  347. };
  348. }else{
  349. layer.alert(data.error_message);
  350. }
  351. },
  352. "json"
  353. );
  354. }
  355. //添加成员
  356. $("#member_save").click(function(){
  357. var username = $("#member_username").val();
  358. var member_group_id = $("#member_group_id").is(':checked') ? 0 : 1 ;
  359. $.post(
  360. DocConfig.server+"/api/member/save",
  361. {"item_id": item_id , "username": username ,"member_group_id":member_group_id },
  362. function(data){
  363. if (data.error_code == 0) {
  364. $('#member-modal').modal('hide');
  365. $("#member_username").val('');
  366. $("#member_group_id").removeAttr("checked");
  367. layer.msg('添加成功',{"time":1000});
  368. get_member_list();
  369. }else{
  370. layer.alert(data.error_message);
  371. }
  372. },
  373. "json"
  374. );
  375. return false;
  376. });
  377. //删除成员
  378. $("#member-list").on("click",'.member-delete',function(){
  379. if (!confirm("确定删除成员吗")) { return false;};
  380. var item_member_id = $(this).data("id");
  381. $.post(
  382. DocConfig.server+"/api/member/delete",
  383. {"item_id": item_id , "item_member_id": item_member_id },
  384. function(data){
  385. if (data.error_code == 0) {
  386. layer.msg('删除成功',{"time":1000});
  387. get_member_list();
  388. }else{
  389. layer.alert(data.error_message);
  390. }
  391. },
  392. "json"
  393. );
  394. return false;
  395. })
  396. //获取item api_key信息
  397. get_api_info() ;
  398. function get_api_info(){
  399. $.get(
  400. DocConfig.server+"/api/item/getKey",
  401. {"item_id":item_id},
  402. function(data){
  403. if (data.error_code === 0 ) {
  404. //console.log(data.data);
  405. $("#api_key").html(data.data.api_key);
  406. $("#api_token").html(data.data.api_token);
  407. }else{
  408. layer.alert(data.error_message);
  409. }
  410. },
  411. "json"
  412. );
  413. }
  414. $("#reset_api_token").click(function(){
  415. $.post(
  416. DocConfig.server+"/api/item/resetKey",
  417. {"item_id":item_id},
  418. function(data){
  419. if (data.error_code === 0 ) {
  420. //console.log(data.data);
  421. $("#api_key").html(data.data.api_key);
  422. $("#api_token").html(data.data.api_token);
  423. }else{
  424. layer.alert(data.error_message);
  425. }
  426. },
  427. "json"
  428. );
  429. return false;
  430. });
  431. });
  432. </script>