Data.cshtml 4.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. @page
  2. @model RestaurantWeb2.Pages.DataModel
  3. <!DOCTYPE html>
  4. <html><head><meta charset="utf-8"/><title>@Model.Table</title>
  5. <style>
  6. *{box-sizing:border-box;margin:0;padding:0;}
  7. body{font-family:Arial,sans-serif;background:#fff;color:#222;}
  8. nav{border-bottom:1px solid #ddd;padding:10px 24px;display:flex;gap:4px;align-items:center;}
  9. nav a{color:#222;text-decoration:none;padding:5px 12px;border-radius:3px;font-size:14px;}
  10. nav a:hover{background:#f0f0f0;}
  11. nav a.active{font-weight:bold;border-bottom:2px solid #333;}
  12. nav .right{margin-left:auto;font-size:12px;color:#999;}
  13. .wrap{padding:24px;max-width:960px;}
  14. h1{font-size:20px;margin-bottom:16px;font-weight:bold;}
  15. table{width:100%;border-collapse:collapse;font-size:13px;}
  16. th{background:#f8f8f8;border:1px solid #e0e0e0;padding:8px 10px;text-align:left;font-weight:bold;}
  17. td{border:1px solid #e0e0e0;padding:7px 10px;}
  18. tr:hover td{background:#fafafa;}
  19. input[type=text],input[type=number],input[type=date],input{padding:5px 8px;border:1px solid #ccc;border-radius:3px;font-size:13px;}
  20. .btn{padding:5px 12px;border:1px solid #ccc;border-radius:3px;cursor:pointer;font-size:12px;text-decoration:none;display:inline-block;background:#fff;color:#333;box-shadow:none;}
  21. .btn:hover{background:#f5f5f5;}
  22. .btn-primary{background:#333;color:#fff;border-color:#333;}
  23. .btn-primary:hover{background:#555;}
  24. .btn-danger{color:#c0392b;border-color:#e0c0c0;}
  25. .btn-danger:hover{background:#fff0f0;}
  26. .toolbar{display:flex;gap:8px;align-items:center;margin-bottom:14px;}
  27. .form-box{border:1px solid #e0e0e0;padding:16px;border-radius:4px;max-width:400px;margin-bottom:20px;background:#fafafa;}
  28. .form-box label{display:block;font-size:11px;color:#888;margin-bottom:2px;text-transform:uppercase;}
  29. .form-box input{width:100%;margin-bottom:10px;}
  30. .form-title{font-size:14px;font-weight:bold;margin-bottom:12px;}
  31. .ok{color:#27ae60;margin-bottom:10px;font-size:13px;}
  32. .er{color:#c0392b;margin-bottom:10px;font-size:13px;}
  33. </style></head><body>
  34. <nav>
  35. <a href="/data?table=Персонал" class="@(Model.Table=="Персонал"?"active":"")">Персонал</a>
  36. <a href="/data?table=Блюда" class="@(Model.Table=="Блюда"?"active":"")">Блюда</a>
  37. <a href="/data?table=Склад" class="@(Model.Table=="Склад"?"active":"")">Склад</a>
  38. <a href="/data?table=Заказы" class="@(Model.Table=="Заказы"?"active":"")">Заказы</a>
  39. <span class="right">@Model.Role</span>
  40. </nav>
  41. <div class="wrap">
  42. <h1>@Model.Table</h1>
  43. @if(Model.Msg != "") { <div class="@(Model.IsErr?"er":"ok")">@Model.Msg</div> }
  44. @if(Model.ShowForm && Model.Role != "waiter") {
  45. <div class="form-box">
  46. <div class="form-title">@(Model.EditId>0?"Редактировать запись":"Новая запись")</div>
  47. <form method="post">
  48. <input type="hidden" name="table" value="@Model.Table"/>
  49. <input type="hidden" name="editId" value="@Model.EditId"/>
  50. @for(int i=1;i<Model.Cols.Count;i++){
  51. <label>@Model.Cols[i]</label>
  52. <input name="f@(i)" value="@(i-1<Model.Vals.Count?Model.Vals[i-1]:"")"/>
  53. }
  54. <div style="display:flex;gap:8px;margin-top:4px;">
  55. <button type="submit" class="btn btn-primary">Сохранить</button>
  56. <a href="/data?table=@Model.Table" class="btn">Отмена</a>
  57. </div>
  58. </form>
  59. </div>
  60. }
  61. <div class="toolbar">
  62. @if(Model.Role != "waiter"){
  63. <a href="/data?table=@Model.Table&action=add" class="btn btn-primary">+ Добавить</a>
  64. }
  65. <form method="get" style="display:flex;gap:6px;margin:0;">
  66. <input type="hidden" name="table" value="@Model.Table"/>
  67. <input name="search" value="@Model.Search" placeholder="Поиск..." style="width:180px;"/>
  68. <button type="submit" class="btn">Найти</button>
  69. @if(!string.IsNullOrEmpty(Model.Search)){<a href="/data?table=@Model.Table" class="btn">✕</a>}
  70. </form>
  71. </div>
  72. <table>
  73. <tr>@foreach(var c in Model.Cols){<th>@c</th>}
  74. @if(Model.Role!="waiter"){<th style="width:80px;">Действия</th>}</tr>
  75. @foreach(var row in Model.Rows){
  76. <tr>@foreach(var cell in row){<td>@cell</td>}
  77. @if(Model.Role!="waiter"){
  78. <td>
  79. <a href="/data?table=@Model.Table&action=edit&id=@row[0]" class="btn" style="margin-right:4px;">Редактировать</a>
  80. @if(Model.Role=="admin"){
  81. <a href="/data?table=@Model.Table&action=delete&id=@row[0]" class="btn btn-danger" onclick="return confirm('Удалить?')">Удалить</a>
  82. }
  83. </td>
  84. }
  85. </tr>
  86. }
  87. </table>
  88. </div>
  89. </body></html>