Index.cshtml 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422
  1. 
  2. @{
  3. ViewData["Title"] = "Index";
  4. Layout = "~/Views/Shared/_Layout.cshtml";
  5. }
  6. @using SuperCms.Controllers;
  7. @using SuperCms.Models;
  8. @{
  9. int pageNow = 1;
  10. if (Model.page != null)
  11. {
  12. pageNow = int.Parse(Model.page);
  13. }
  14. }
  15. @model ConfigViewModel
  16. <input type="hidden" id="table-type" name="table-type" value="@Model.tableType" />
  17. <div class="app-content content">
  18. <div class="content-wrapper">
  19. <div class="content-header row">
  20. <div class="content-header-left col-md-6 col-xs-12 mb-1">
  21. @*<h2 class="content-header-title">Message configuration</h2>*@
  22. </div>
  23. <div class="content-header-right breadcrumbs-right breadcrumbs-top col-md-6 col-xs-12">
  24. <div class="breadcrumb-wrapper col-xs-12">
  25. <ol class="breadcrumb">
  26. @*<li class="breadcrumb-item">
  27. <a href="Index">Admin</a>
  28. </li>*@
  29. @*<li class="breadcrumb-item">
  30. <a href="/Config">Tables</a>
  31. </li>*@
  32. </ol>
  33. </div>
  34. </div>
  35. </div>
  36. <div class="content-body">
  37. <!-- Basic form layout section start -->
  38. <section id="basic-form-layouts">
  39. <div class="row service-height">
  40. <div class="col-md-12">
  41. <div class="card">
  42. <div class="card-header">
  43. <h4 class="card-title" id="basic-layout-form">Toolbars</h4>
  44. <a class="heading-elements-toggle"><i class="icon-ellipsis font-medium-3"></i></a>
  45. <div class="heading-elements">
  46. <ul class="list-inline mb-0">
  47. <li><a data-action="collapse"><i class="icon-minus4"></i></a></li>
  48. <li><a data-action="expand"><i class="icon-expand2"></i></a></li>
  49. </ul>
  50. </div>
  51. </div>
  52. <div class="card-content collapse show">
  53. <div class="card-body ">
  54. <div class="card-block">
  55. <div class="form-body">
  56. @*<div class="row">
  57. <div class="col-md-4">
  58. <div class="form-group">
  59. <label for="serviceCode">Action</label>
  60. <div>
  61. <button type="button" class="btn btn-primary" onclick="filterData()" id="btnSearch">
  62. <i class="icon-search"></i> Filter
  63. </button>
  64. <button type="button" class="btn btn-amber" onclick="searchData()" id="btnSearch">
  65. <i class="icon-search"></i> Search
  66. </button>
  67. <button type="button" class="btn btn-danger" onclick="exportData(null, null)" id="btnSearch">
  68. <i class="icon-search"></i> Export
  69. </button>
  70. </div>
  71. </div>
  72. </div>
  73. </div>*@
  74. <div class="row">
  75. <div class="col-md-4">
  76. <div class="form-group">
  77. <label for="serviceCode">Cấu hình</label>
  78. <select id="telco" name="telco" class="form-control" onchange="tableTypeClick(this.value)">
  79. <option value="@Model.tableType">@UtilsController.convertNameTable(Model.tableType)</option>
  80. @{
  81. for (int i = 1; i <= 6; i++)
  82. {
  83. if (i.ToString() != Model.tableType)
  84. {
  85. <option value="@i.ToString()">@UtilsController.convertNameTable(i.ToString())</option>
  86. }
  87. }
  88. }
  89. </select>
  90. </div>
  91. </div>
  92. <div class="col-md-4">
  93. <div class="form-group">
  94. <label for="serviceCode">Action</label>
  95. <div>
  96. <button type="button" class="btn btn-primary button-style" onclick="addConfigData(@Model.tableType)" id="btnAdd">
  97. <i class="icon-search"></i> Add
  98. </button>
  99. @*<button type="button" class="btn btn-cyan button-style" onclick="filterConfigData(@Model.tableType)" id="btnFilter">
  100. <i class="icon-search"></i> Filter
  101. </button>
  102. <button type="button" class="btn btn-amber button-style" onclick="searchConfigData(@Model.tableType)" id="btnSearch">
  103. <i class="icon-search"></i> Search
  104. </button>*@
  105. </div>
  106. </div>
  107. </div>
  108. </div>
  109. </div>
  110. </div>
  111. </div>
  112. </div>
  113. </div>
  114. </div>
  115. <div class="col-12">
  116. <div class="card">
  117. <div class="row card-content" style="margin:0;">
  118. <div class="col-md-12 table-responsive">
  119. <table id="db-table-detail-report-month" class="table table-hover mb-0 ps-container ps-theme-default">
  120. @{
  121. if (Model.tableType == UtilsController.Constant.BOTS)
  122. {
  123. <thead>
  124. <tr>
  125. <th>No.</th>
  126. <th>Name</th>
  127. <th>Description</th>
  128. <th>Last Update</th>
  129. <th>Status</th>
  130. <th>Action</th>
  131. </tr>
  132. </thead>
  133. <tbody>
  134. @{
  135. // get the newest data folowing by each service
  136. for (int j = 0; j < Model.bots.data.Count; j++)
  137. {
  138. BotStructure bot = Model.bots.data[j];
  139. <tr class="@(j%2==0? "oven-column" : "")">
  140. <td class="text-truncate">@(j + 1)</td>
  141. <td class="text-truncate">@bot.name</td>
  142. <td class="text-truncate">@bot.description</td>
  143. <td class="text-truncate">@bot.updateDate</td>
  144. <td class="text-truncate">@UtilsController.convertBotStatus(int.Parse(bot.status))</td>
  145. <td class="text-truncate">
  146. <img class="icon-style edit-btn" value="@bot.id" src="~/img/icons8-edit-96.png" />
  147. <img class="icon-style delete-btn" value="@bot.id" src="~/img/icons8-delete-bin-96.png" />
  148. </td>
  149. </tr>
  150. }
  151. }
  152. </tbody>
  153. }
  154. else if (Model.tableType == UtilsController.Constant.GROUPS)
  155. {
  156. <thead>
  157. <tr>
  158. <th>No.</th>
  159. <th>Code</th>
  160. <th>Name</th>
  161. <th>Last Update</th>
  162. <th>Status</th>
  163. <th>Action</th>
  164. </tr>
  165. </thead>
  166. <tbody>
  167. @{
  168. // get the newest data folowing by each service
  169. for (int j = 0; j < Model.groups.data.Count; j++)
  170. {
  171. GroupStructure group = Model.groups.data[j];
  172. <tr class="@(j%2==0? "oven-column" : "")">
  173. <td class="text-truncate">@(j + 1)</td>
  174. <td class="text-truncate">@group.name</td>
  175. <td class="text-truncate">@group.description</td>
  176. <td class="text-truncate">@group.updateDate</td>
  177. <td class="text-truncate">@UtilsController.convertGroupStatus(int.Parse(group.status))</td>
  178. <td class="text-truncate">
  179. <img class="icon-style edit-btn" value="@group.id" src="~/img/icons8-edit-96.png" />
  180. <img class="icon-style delete-btn" value="@group.id" src="~/img/icons8-delete-bin-96.png" />
  181. </td>
  182. </tr>
  183. }
  184. }
  185. </tbody>
  186. }
  187. else if (Model.tableType == UtilsController.Constant.SCHEDULES)
  188. {
  189. <thead>
  190. <tr>
  191. <th>No.</th>
  192. <th>Name</th>
  193. <th>Description</th>
  194. <th>Last Update</th>
  195. <th>Status</th>
  196. <th>Action</th>
  197. </tr>
  198. </thead>
  199. <tbody>
  200. @{
  201. // get the newest data folowing by each service
  202. for (int j = 0; j < Model.schedules.data.Count; j++)
  203. {
  204. ScheduleStructure schedule = Model.schedules.data[j];
  205. GroupStructure group = Model.groups.data.Find(x => x.id == schedule.groupID);
  206. BotStructure bot = Model.bots.data.Find(x => x.id == schedule.botID);
  207. <tr class="@(j%2==0? "oven-column" : "")">
  208. <td class="text-truncate">@(j + 1)</td>
  209. <td class="text-truncate">@schedule.name</td>
  210. <td class="text-truncate">@schedule.description</td>
  211. <td class="text-truncate">@schedule.updateDate</td>
  212. <td class="text-truncate">@UtilsController.convertScheduleStatus(int.Parse(schedule.status))</td>
  213. <td class="text-truncate">
  214. <img class="icon-style edit-btn" value="@schedule.id" src="~/img/icons8-edit-96.png" />
  215. <img class="icon-style delete-btn" value="@schedule.id" src="~/img/icons8-delete-bin-96.png" />
  216. </td>
  217. </tr>
  218. }
  219. }
  220. </tbody>
  221. }
  222. else if (Model.tableType == UtilsController.Constant.CONFIGS)
  223. {
  224. <thead>
  225. <tr>
  226. <th>No.</th>
  227. <th>Key</th>
  228. <th>Value</th>
  229. <th>Last Update</th>
  230. <th>Action</th>
  231. </tr>
  232. </thead>
  233. <tbody>
  234. @{
  235. // get the newest data folowing by each service
  236. for (int j = 0; j < Model.configs.data.Count; j++)
  237. {
  238. Config config = Model.configs.data[j];
  239. <tr class="@(j%2==0? "oven-column" : "")">
  240. <td class="text-truncate">@(j + 1)</td>
  241. <td class="text-truncate">@config.key</td>
  242. <td class="text-truncate">@config.value</td>
  243. <td class="text-truncate">@config.updateDate</td>
  244. <td class="text-truncate">
  245. <img class="icon-style edit-btn" value="@config.id" src="~/img/icons8-edit-96.png" />
  246. <img class="icon-style delete-btn" value="@config.id" src="~/img/icons8-delete-bin-96.png" />
  247. </td>
  248. </tr>
  249. }
  250. }
  251. </tbody>
  252. }
  253. else if (Model.tableType == UtilsController.Constant.SENDMAIL)
  254. {
  255. <thead>
  256. <tr>
  257. <th>No.</th>
  258. <th>Telco ID</th>
  259. <th>Company ID</th>
  260. <th>Service ID</th>
  261. <th>Time send</th>
  262. <th>Status</th>
  263. <th>Action</th>
  264. </tr>
  265. </thead>
  266. <tbody>
  267. @{
  268. // get the newest data folowing by each service
  269. for (int j = 0; j < Model.sendMails.data.Count; j++)
  270. {
  271. SendMail sendMail = Model.sendMails.data[j];
  272. <tr class="@(j%2==0? "oven-column" : "")">
  273. <td class="text-truncate">@(j + 1)</td>
  274. <td class="text-truncate">@sendMail.telcoId</td>
  275. <td class="text-truncate">@sendMail.companyId</td>
  276. <td class="text-truncate">@sendMail.serviceId</td>
  277. <td class="text-truncate">@sendMail.timeSend</td>
  278. <td class="text-truncate">@sendMail.status</td>
  279. <td class="text-truncate">
  280. <img class="icon-style edit-btn" value="@sendMail.id" src="~/img/icons8-edit-96.png" />
  281. <img class="icon-style delete-btn" value="@sendMail.id" src="~/img/icons8-delete-bin-96.png" />
  282. </td>
  283. </tr>
  284. }
  285. }
  286. </tbody>
  287. }
  288. else if (Model.tableType == UtilsController.Constant.SERVICE_CONFIG)
  289. {
  290. <thead>
  291. <tr>
  292. <th>No.</th>
  293. <th>Telco</th>
  294. <th>Company</th>
  295. <th>Service</th>
  296. <th>Money</th>
  297. <th>Action</th>
  298. </tr>
  299. </thead>
  300. <tbody>
  301. @{
  302. // get the newest data folowing by each service
  303. for (int j = 0; j < Model.services.data.Count; j++)
  304. {
  305. ConnConfig connConfig = Model.services.data[j];
  306. ConnCompany company = Model.companies.data.Find(x => x.id == connConfig.companyID);
  307. <tr class="@(j%2==0? "oven-column" : "")">
  308. <td class="text-truncate">@(j + 1)</td>
  309. <td class="text-truncate">@connConfig.telco</td>
  310. <td class="text-truncate">@company.name</td>
  311. <td class="text-truncate">@connConfig.serviceName</td>
  312. <td class="text-truncate">@connConfig.money</td>
  313. <td class="text-truncate">
  314. <img class="icon-style edit-btn" value="@connConfig.id" src="~/img/icons8-edit-96.png" />
  315. <img class="icon-style delete-btn" value="@connConfig.id" src="~/img/icons8-delete-bin-96.png" />
  316. </td>
  317. </tr>
  318. }
  319. }
  320. </tbody>
  321. }
  322. }
  323. </table>
  324. <style>
  325. .pagination-style {
  326. max-width: 1200px;
  327. margin: auto;
  328. position: relative;
  329. padding: 0;
  330. float: none;
  331. padding-right: 0;
  332. text-align: center;
  333. }
  334. .pagination-active {
  335. background: #337ab7 !important;
  336. color: white !important;
  337. }
  338. .pagination-disable {
  339. pointer-events: none;
  340. }
  341. </style>
  342. @{
  343. int totalPage = Model.totalPage != null ? int.Parse(Model.totalPage) : 1;
  344. <div class="category-post-pagination col-xs-12 pagination-style">
  345. @{
  346. <ul class="pagination clearfix pagination-ul">
  347. <li class="pagination-prev">
  348. <a href="/Config?tableType=@Model.tableType&page=1">‹‹</a>
  349. </li>
  350. <li class="pagination-prev @(pageNow == 1 ? "disabled pagination-disable" : "")">
  351. <a href="/Config?tableType=@Model.tableType&page=@(pageNow-1)">‹</a>
  352. </li>
  353. @{
  354. if (totalPage <= 4)
  355. {
  356. for (int k = 1; k <= totalPage; k++)
  357. {
  358. <li class="@(pageNow == k ? "current" : "")">
  359. <a class="@(pageNow == k ? "pagination-active" : "")" href="/Config?tableType=@Model.tableType&page=@k">@k</a>
  360. </li>
  361. }
  362. }
  363. else if (pageNow <= totalPage - 4)
  364. {
  365. for (int k = pageNow; (k <= pageNow + 4 && k <= totalPage); k++)
  366. {
  367. <li class="@(pageNow == k ? "current" : "")">
  368. <a class="@(pageNow == k ? "pagination-active" : "")" href="/Config?tableType=@Model.tableType&page=@k">@k</a>
  369. </li>
  370. }
  371. }
  372. else
  373. {
  374. for (int k = totalPage - 4; k <= totalPage; k++)
  375. {
  376. <li class="@(pageNow == k ? "current" : "")">
  377. <a class="@(pageNow == k ? "pagination-active" : "")" href="/Config?tableType=@Model.tableType&page=@k">@k</a>
  378. </li>
  379. }
  380. }
  381. }
  382. <li class="pagination-next @(pageNow == totalPage ? "disabled pagination-disable" : "")">
  383. <a href="/Config?tableType=@Model.tableType&page=@(pageNow+1)">›</a>
  384. </li>
  385. <li class="pagination-next ">
  386. <a href="/Config?tableType=@Model.tableType&page=@totalPage">››</a>
  387. </li>
  388. </ul>
  389. }
  390. </div>
  391. }
  392. </div>
  393. </div>
  394. </div>
  395. </div>
  396. </div>
  397. </section>
  398. <!-- // Basic form layout section end -->
  399. </div>
  400. </div>
  401. </div>
  402. <form action="/Config" method="post" id="config-form">
  403. <input type="hidden" id="tableType" class="tableType" name="tableType" value="" />
  404. </form>