My SMM panel
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 
 

118 行
3.3 KiB

  1. <template>
  2. <template v-if="!loading">
  3. <sidebar :role="user.role" :active="active"></sidebar>
  4. <transition name="fade" mode="out-in">
  5. <div v-if="active === ''" id="main">
  6. <section class="welcome-pane"><h3>Welcome, {{user.name}}!</h3></section>
  7. <section class="credits-pane"><img src="../../images/coin-stack.svg" alt="wallet" class="icon"/><p>Credits: {{(user.credits/100).toLocaleString('en')}}</p></section>
  8. <section class="alerts-pane"><h4>News and Announcements</h4>
  9. <p>We've just launched. Thanks for joining us.</p>
  10. </section>
  11. <section class="recent-pane"><h4>Recent Activity</h4>
  12. <table>
  13. <thead><th>Date</th><th>Name</th><th>Status</th> <th>Quantity</th></thead>
  14. <tbody>
  15. <tr v-bind:key='order.id' v-for='order in orders.slice(0, 10)'>
  16. <template v-if="order.status != 'pending'">
  17. <td>{{order.updated_at}}</td>
  18. <td>{{order.service.name}}</td>
  19. <td :class="order.status"
  20. class="status"><span>{{order.status.charAt(0).toUpperCase() +
  21. order.status.slice(1)}}</span></td>
  22. <td>{{order.quantity}}</td>
  23. </template>
  24. </tr>
  25. </tbody>
  26. </table>
  27. </section>
  28. </div>
  29. <PastOrders :orders="orders" v-else-if="active === '#orders'" id="main">
  30. </PastOrders>
  31. <NewOrder :preferred="user.payment_method" :token="token" :active="active" :credits="user.credits" v-else-if="active ===
  32. '#new-order' || active === '#credits'" id="main" @update-user='getUser' @update-orders='getOrders'>
  33. </NewOrder>
  34. <div id="main" v-else-if="active === '#exit'">
  35. <section class="logout-pane">
  36. <h3>Are you sure you want to logout?</h3>
  37. <a href="/logout">Logout</a>
  38. </section>
  39. </div>
  40. <settings :token="token" :user="user" class="settings-page" id="main"
  41. v-else-if="active === '#settings'">
  42. </settings>
  43. <transaction-end :token="token" :user="user" :active="active" v-else-if="active ==
  44. '#transaction-complete' || active == '#transaction-failed'">
  45. </transaction-end>
  46. </transition>
  47. </template>
  48. </template>
  49. <script>
  50. import Sidebar from './sidebar.vue'
  51. import Settings from './settings.vue'
  52. import PastOrders from './orders.vue'
  53. import NewOrder from './services.vue'
  54. import TransactionEnd from './transaction-endpoint.vue'
  55. function getServices() {
  56. return fetch("/panel/services", {
  57. method: 'GET',
  58. headers: {'Content-Type': 'application/json',
  59. 'Accept': 'application/json',
  60. 'X-XSRF-TOKEN': this.token}
  61. }).then(response => {
  62. response.json().then(data => {this.services = data})
  63. })
  64. }
  65. function getUser() {
  66. return fetch("/panel/user", {
  67. method: 'GET',
  68. headers: {'Content-Type': 'application/json',
  69. 'Accept': 'application/json',
  70. 'X-XSRF-TOKEN': this.token},
  71. }).then(response => {
  72. return response.json()
  73. }).then(data => {
  74. this.user = data
  75. })
  76. }
  77. function getOrders() {
  78. return fetch("/panel/orders", {
  79. method: 'GET',
  80. headers: {'Content-Type': 'application/json',
  81. 'Accept': 'application/json',
  82. 'X-XSRF-TOKEN': this.token},
  83. }).then(response => {
  84. return response.json()
  85. }).then(data => {
  86. this.orders = data
  87. })
  88. }
  89. export default {
  90. components: {
  91. Sidebar, Settings, PastOrders, NewOrder,
  92. TransactionEnd
  93. },
  94. data() {
  95. return {active: window.location.hash, user: null,
  96. token: null, orders: null, loading: true,}
  97. },
  98. methods: {getUser, getServices, getOrders, },
  99. created() {
  100. let loaders = []
  101. loaders.push(this.getUser())
  102. loaders.push(this.getServices())
  103. loaders.push(this.getOrders())
  104. Promise.all(loaders).then(() => {
  105. this.loading = false
  106. })
  107. }
  108. }
  109. </script>