@@ -0,0 +1,8 @@ | |||||
<template> | |||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" | |||||
fill="currentColor" class="bi bi-eye-fill" viewBox="0 0 16 16"> | |||||
<path d="M10.5 8a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0z"/> | |||||
<path d="M0 8s3-5.5 8-5.5S16 8 16 8s-3 5.5-8 5.5S0 8 0 8zm8 3.5a3.5 3.5 0 | |||||
1 0 0-7 3.5 3.5 0 0 0 0 7z"/> | |||||
</svg> | |||||
</template> |
@@ -0,0 +1,55 @@ | |||||
<template> | |||||
<div id="overlay" v-if="selected"> | |||||
<img @click="$emit('close')" class="cancel icon" | |||||
src="../../images/cancel-icon2.svg" alt=""/> | |||||
<div class="overlay-item"> | |||||
<img v-if="selected.service.site == 'youtube'" class="icon" | |||||
src="../../images/youtube-icon.svg" alt=""/> | |||||
<img v-if="selected.service.site == 'instagram'" class="icon" | |||||
src="../../images/instagram-icon.svg" alt=""/> | |||||
<img v-if="selected.service.site == 'twitter'" class="icon" | |||||
src="../../images/twitter.svg" alt=""/> | |||||
<img v-if="selected.service.site == 'tiktok'" class="icon" | |||||
src="../../images/tik-tok.svg" alt=""/> | |||||
<h3>{{selected.service.name}}</h3> | |||||
<div class="details"> | |||||
<ul> | |||||
<li><b>Status:</b> <span>{{selected.status}}</span></li> | |||||
<li><b>Quantity:</b> <span>{{selected.quantity}}</span></li> | |||||
<li><b>Remaining:</b> <span>{{selected.remaining}}</span></li> | |||||
<li><b>URL:</b> <span>{{selected.url}}</span></li> | |||||
</ul> | |||||
</div> | |||||
<div v-if="selected.status == 'processing' || selected.status == | |||||
'error'" class="change-url"> | |||||
<h4>URL</h4> | |||||
<div><input :value="selected.url" type="url" id="url"></div> | |||||
<button @click="saveUrl" :disabled="loading">Save | |||||
<loading-icon v-if="loading"></loading-icon></button> | |||||
<p id="overlay-error">{{errorMessage}}</p> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</template> | |||||
<script> | |||||
import LoadingIcon from '../icons/loading.vue' | |||||
function saveURL() { | |||||
} | |||||
export default { | |||||
data() { | |||||
return {loading: false, errorMessage: ''} | |||||
}, | |||||
components: {LoadingIcon}, | |||||
methods: {saveURL}, | |||||
props: ['selected', 'token'], | |||||
} | |||||
</script> |
@@ -31,12 +31,12 @@ | |||||
orders.slice(historyPage*10-10, historyPage*10)'> | orders.slice(historyPage*10-10, historyPage*10)'> | ||||
<td>{{order.updated_at}}</td> | <td>{{order.updated_at}}</td> | ||||
<td>{{order.id}}</td> | <td>{{order.id}}</td> | ||||
<td>{{order.service.name.length > 20 ? order.service.name.substring(0, | |||||
19) + '...' : order.service.name}}</td> | |||||
<td>{{order.service.name}}</td> | |||||
<td :class="order.status" | <td :class="order.status" | ||||
class="status"><span>{{order.status.charAt(0).toUpperCase() + | class="status"><span>{{order.status.charAt(0).toUpperCase() + | ||||
order.status.slice(1)}}</span></td> | order.status.slice(1)}}</span></td> | ||||
<td>{{order.quantity}}</td> | <td>{{order.quantity}}</td> | ||||
<td> <eye @click="select(order)"></eye> </td> | |||||
</tr> | </tr> | ||||
</tbody> | </tbody> | ||||
</table> | </table> | ||||
@@ -46,10 +46,16 @@ | |||||
<img @click="moveHistory(true)" class="nav-btn right" | <img @click="moveHistory(true)" class="nav-btn right" | ||||
src="../../images/arrow-right-circle-fill.svg" alt=""/> | src="../../images/arrow-right-circle-fill.svg" alt=""/> | ||||
</section> | </section> | ||||
<order-item @close="close" :selected="selected" :token="token"></order-item> | |||||
</div> | </div> | ||||
</template> | </template> | ||||
<script> | <script> | ||||
import Eye from '../icons/eye-fill.vue' | |||||
import OrderItem from './order-item.vue' | |||||
function togglePending(event) { | function togglePending(event) { | ||||
event.target.parentNode.parentNode.classList.toggle('selected') | event.target.parentNode.parentNode.classList.toggle('selected') | ||||
} | } | ||||
@@ -69,11 +75,20 @@ function moveHistory(forward) { | |||||
} | } | ||||
} | } | ||||
function close() { | |||||
this.selected = null | |||||
} | |||||
function select(order) { | |||||
this.selected = order | |||||
} | |||||
export default { | export default { | ||||
data() {return {historyPage: 1}}, | |||||
components: {Eye, OrderItem}, | |||||
data() {return {historyPage: 1, selected: null}}, | |||||
methods: { | methods: { | ||||
togglePending, moveHistory | |||||
togglePending, moveHistory, close, select | |||||
}, | }, | ||||
props: ['orders'] | |||||
props: ['orders', 'token'], | |||||
} | } | ||||
</script> | </script> |
@@ -4,7 +4,9 @@ | |||||
<transition name="fade" mode="out-in"> | <transition name="fade" mode="out-in"> | ||||
<div v-if="active === ''" id="main"> | <div v-if="active === ''" id="main"> | ||||
<section class="welcome-pane"><h3>Welcome, {{user.name}}!</h3></section> | <section class="welcome-pane"><h3>Welcome, {{user.name}}!</h3></section> | ||||
<section class="credits-pane"><img src="../../images/coin-stack.svg" alt="wallet" class="icon"/><p>Credits: {{(user.credits/100).toLocaleString('en')}}</p></section> | |||||
<section class="credits-pane"><img src="../../images/coin-stack.svg" | |||||
alt="wallet" class="icon"/><p>Credits: | |||||
{{(user.credits/100).toLocaleString('en')}}</p></section> | |||||
<section class="alerts-pane"><h4>News and Announcements</h4> | <section class="alerts-pane"><h4>News and Announcements</h4> | ||||
<p>We've just launched. Thanks for joining us! Some features are still | <p>We've just launched. Thanks for joining us! Some features are still | ||||
being tested. If you experience a delay in credits being added to your | being tested. If you experience a delay in credits being added to your | ||||
@@ -29,11 +31,14 @@ | |||||
</section> | </section> | ||||
</div> | </div> | ||||
<past-orders :orders="orders" v-else-if="active === '#orders'" id="main"> | |||||
<past-orders :token="token" :orders="orders" v-else-if="active === '#orders'" | |||||
id="main"> | |||||
</past-orders> | </past-orders> | ||||
<new-order :preferred="user.payment_method" :token="token" :active="active" :credits="user.credits" v-else-if="active === | |||||
'#new-order' || active === '#credits'" id="main" @update-user='getUser' @update-orders='getOrders'> | |||||
<new-order :preferred="user.payment_method" :token="token" :active="active" | |||||
:credits="user.credits" v-else-if="active === | |||||
'#new-order' || active === '#credits'" id="main" @update-user='getUser' | |||||
@update-orders='getOrders'> | |||||
</new-order> | </new-order> | ||||
<div id="main" v-else-if="active === '#exit'"> | <div id="main" v-else-if="active === '#exit'"> | ||||
@@ -758,8 +758,7 @@ main.panel { | |||||
section { | section { | ||||
padding: 5px; | padding: 5px; | ||||
border-radius: 4px; | border-radius: 4px; | ||||
min-height: 3em; | |||||
margin-bottom: 1em; | |||||
margin-bottom: 2em; | |||||
} | } | ||||
h4 { | h4 { | ||||
@@ -789,13 +788,23 @@ main.panel { | |||||
opacity: 0; | opacity: 0; | ||||
} | } | ||||
.recent-pane, .history-pane{ | |||||
min-width: 20em; | |||||
overflow: scroll; | |||||
section.recent-pane, section.history-pane{ | |||||
display: flex; | |||||
flex-flow: wrap; | |||||
justify-content: space-between; | |||||
width: 100%; | |||||
height: fit-content; | |||||
overflow-x: scroll; | |||||
h4 { | |||||
width: 100%; | |||||
} | |||||
table { | table { | ||||
border-spacing: 4px; | border-spacing: 4px; | ||||
margin: auto; | margin: auto; | ||||
text-align: center; | text-align: center; | ||||
min-width: 30em; | |||||
width: 100%; | width: 100%; | ||||
} | } | ||||
@@ -829,6 +838,18 @@ main.panel { | |||||
td.canceled { | td.canceled { | ||||
color: vars.getColor('red-alert'); | color: vars.getColor('red-alert'); | ||||
} | } | ||||
.bi-eye-fill { | |||||
color: grey; | |||||
} | |||||
.nav-btn.right { | |||||
margin-right: 20px; | |||||
} | |||||
.nav-btn.left { | |||||
margin-left: 20px; | |||||
} | |||||
} | } | ||||
.pending-pane { | .pending-pane { | ||||
@@ -880,28 +901,14 @@ main.panel { | |||||
transition: all 0.2s; | transition: all 0.2s; | ||||
.nav-btn { | .nav-btn { | ||||
width: 1.5em; | width: 1.5em; | ||||
transform: translateY(1.5em); | |||||
// transform: translateY(1.5em); | |||||
} | } | ||||
.nav-btn.right { | |||||
bottom: 0px; | |||||
right: 1em; | |||||
position: absolute; | |||||
display: block; | |||||
margin-left: auto; | |||||
} | |||||
.nav-btn.left { | |||||
bottom: 0px; | |||||
left: 1em; | |||||
position: absolute; | |||||
display: block; | |||||
margin-right: auto; | |||||
} | |||||
.nav-legend { | .nav-legend { | ||||
color: grey; | color: grey; | ||||
transform: translateX(-1.5em); | |||||
// transform: translateX(-1.5em); | |||||
text-align: center; | text-align: center; | ||||
position: absolute; | |||||
// position: absolute; | |||||
width: 3em; | width: 3em; | ||||
left: 50%; | left: 50%; | ||||
} | } | ||||
@@ -1157,6 +1164,10 @@ main.panel { | |||||
text-align: center; | text-align: center; | ||||
} | } | ||||
li { | |||||
margin: 1em 0; | |||||
} | |||||
} | } | ||||
button .loading-icon { | button .loading-icon { | ||||
@@ -145,7 +145,7 @@ Route::post('/hooks/pm-transaction', | |||||
//Payment attempt is over | //Payment attempt is over | ||||
Route::get('/panel/clear-paying', | Route::get('/panel/clear-paying', | ||||
[UserController::class, 'clearPaying']); | |||||
[UserController::class, 'clearPaying'])->middleware(['auth', 'verified']); | |||||
Route::post('/panel/support', | Route::post('/panel/support', | ||||
[Ticket::class, 'send']); | |||||
[Ticket::class, 'send'])->middleware(['auth', 'verified']); |
@@ -1 +0,0 @@ | |||||
1431874711 |