mirror of
https://github.com/lnbits/lnbits-legend.git
synced 2025-02-24 14:51:05 +01:00
359 lines
11 KiB
HTML
359 lines
11 KiB
HTML
{% extends "base.html" %} {% from "macros.jinja" import window_vars with context
|
|
%} {% block scripts %} {{ window_vars(user) }}
|
|
<script src="/withdraw/static/js/index.js"></script>
|
|
{% endblock %} {% block page %}
|
|
<div class="row q-col-gutter-md">
|
|
<div class="col-12 col-md-7 q-gutter-y-md">
|
|
<q-card>
|
|
<q-card-section>
|
|
<q-btn
|
|
unelevated
|
|
color="deep-purple"
|
|
@click="simpleformDialog.show = true"
|
|
>Quick vouchers</q-btn
|
|
>
|
|
<q-btn unelevated color="deep-purple" @click="formDialog.show = true"
|
|
>Advanced withdraw link(s)</q-btn
|
|
>
|
|
</q-card-section>
|
|
</q-card>
|
|
|
|
<q-card>
|
|
<q-card-section>
|
|
<div class="row items-center no-wrap q-mb-md">
|
|
<div class="col">
|
|
<h5 class="text-subtitle1 q-my-none">Withdraw links</h5>
|
|
</div>
|
|
<div class="col-auto">
|
|
<q-btn flat color="grey" @click="exportCSV">Export to CSV</q-btn>
|
|
</div>
|
|
</div>
|
|
<q-table
|
|
dense
|
|
flat
|
|
:data="sortedWithdrawLinks"
|
|
row-key="id"
|
|
:columns="withdrawLinksTable.columns"
|
|
:pagination.sync="withdrawLinksTable.pagination"
|
|
>
|
|
{% raw %}
|
|
<template v-slot:header="props">
|
|
<q-tr :props="props">
|
|
<q-th auto-width></q-th>
|
|
<q-th v-for="col in props.cols" :key="col.name" :props="props">
|
|
{{ col.label }}
|
|
</q-th>
|
|
<q-th auto-width></q-th>
|
|
</q-tr>
|
|
</template>
|
|
<template v-slot:body="props">
|
|
<q-tr :props="props">
|
|
<q-td auto-width>
|
|
<q-btn
|
|
unelevated
|
|
dense
|
|
size="xs"
|
|
icon="launch"
|
|
:color="($q.dark.isActive) ? 'grey-7' : 'grey-5'"
|
|
type="a"
|
|
:href="props.row.withdraw_url"
|
|
target="_blank"
|
|
>
|
|
<q-tooltip> shareable link </q-tooltip></q-btn
|
|
>
|
|
<q-btn
|
|
unelevated
|
|
dense
|
|
size="xs"
|
|
icon="web_asset"
|
|
:color="($q.dark.isActive) ? 'grey-7' : 'grey-5'"
|
|
type="a"
|
|
:href="'/withdraw/img/' + props.row.id"
|
|
target="_blank"
|
|
><q-tooltip> embeddable image </q-tooltip></q-btn
|
|
>
|
|
<q-btn
|
|
unelevated
|
|
dense
|
|
size="xs"
|
|
icon="visibility"
|
|
:color="($q.dark.isActive) ? 'grey-7' : 'grey-5'"
|
|
@click="openQrCodeDialog(props.row.id)"
|
|
><q-tooltip> view LNURL </q-tooltip></q-btn
|
|
>
|
|
</q-td>
|
|
<q-td v-for="col in props.cols" :key="col.name" :props="props">
|
|
{{ col.value }}
|
|
</q-td>
|
|
<q-td auto-width>
|
|
<q-btn
|
|
flat
|
|
dense
|
|
size="xs"
|
|
@click="openUpdateDialog(props.row.id)"
|
|
icon="edit"
|
|
color="light-blue"
|
|
></q-btn>
|
|
<q-btn
|
|
flat
|
|
dense
|
|
size="xs"
|
|
@click="deleteWithdrawLink(props.row.id)"
|
|
icon="cancel"
|
|
color="pink"
|
|
></q-btn>
|
|
</q-td>
|
|
</q-tr>
|
|
</template>
|
|
{% endraw %}
|
|
</q-table>
|
|
</q-card-section>
|
|
</q-card>
|
|
</div>
|
|
|
|
<div class="col-12 col-md-5 q-gutter-y-md">
|
|
<q-card>
|
|
<q-card-section>
|
|
<h6 class="text-subtitle1 q-my-none">
|
|
LNbits LNURL-withdraw extension
|
|
</h6>
|
|
</q-card-section>
|
|
<q-card-section class="q-pa-none">
|
|
<q-separator></q-separator>
|
|
<q-list>
|
|
{% include "withdraw/_api_docs.html" %}
|
|
<q-separator></q-separator>
|
|
{% include "withdraw/_lnurl.html" %}
|
|
</q-list>
|
|
</q-card-section>
|
|
</q-card>
|
|
</div>
|
|
|
|
<q-dialog v-model="formDialog.show" position="top" @hide="closeFormDialog">
|
|
<q-card class="q-pa-lg q-pt-xl lnbits__dialog-card">
|
|
<q-form @submit="sendFormData" class="q-gutter-md">
|
|
<q-select
|
|
filled
|
|
dense
|
|
emit-value
|
|
v-model="formDialog.data.wallet"
|
|
:options="g.user.walletOptions"
|
|
label="Wallet *"
|
|
>
|
|
</q-select>
|
|
<q-input
|
|
filled
|
|
dense
|
|
v-model.trim="formDialog.data.title"
|
|
type="text"
|
|
label="Link title *"
|
|
></q-input>
|
|
<q-input
|
|
filled
|
|
dense
|
|
v-model.number="formDialog.data.min_withdrawable"
|
|
type="number"
|
|
label="Min withdrawable (sat) *"
|
|
></q-input>
|
|
<q-input
|
|
filled
|
|
dense
|
|
v-model.number="formDialog.data.max_withdrawable"
|
|
type="number"
|
|
label="Max withdrawable (sat) *"
|
|
></q-input>
|
|
<q-input
|
|
filled
|
|
dense
|
|
v-model.number="formDialog.data.uses"
|
|
type="number"
|
|
:default="1"
|
|
label="Amount of uses *"
|
|
></q-input>
|
|
<div class="row q-col-gutter-none">
|
|
<div class="col-8">
|
|
<q-input
|
|
filled
|
|
dense
|
|
v-model.number="formDialog.data.wait_time"
|
|
type="number"
|
|
:default="1"
|
|
label="Time between withdrawals *"
|
|
>
|
|
</q-input>
|
|
</div>
|
|
<div class="col-4 q-pl-xs">
|
|
<q-select
|
|
filled
|
|
dense
|
|
v-model="formDialog.secondMultiplier"
|
|
:options="formDialog.secondMultiplierOptions"
|
|
>
|
|
</q-select>
|
|
</div>
|
|
</div>
|
|
<q-list>
|
|
<q-item tag="label" class="rounded-borders">
|
|
<q-item-section avatar>
|
|
<q-checkbox
|
|
v-model="formDialog.data.is_unique"
|
|
color="deep-purple"
|
|
></q-checkbox>
|
|
</q-item-section>
|
|
<q-item-section>
|
|
<q-item-label
|
|
>Use unique withdraw QR codes to reduce
|
|
`assmilking`</q-item-label
|
|
>
|
|
<q-item-label caption
|
|
>This is recommended if you are sharing the links on social
|
|
media or print QR codes.</q-item-label
|
|
>
|
|
</q-item-section>
|
|
</q-item>
|
|
</q-list>
|
|
<div class="row q-mt-lg">
|
|
<q-btn
|
|
v-if="formDialog.data.id"
|
|
unelevated
|
|
color="deep-purple"
|
|
type="submit"
|
|
>Update withdraw link</q-btn
|
|
>
|
|
<q-btn
|
|
v-else
|
|
unelevated
|
|
color="deep-purple"
|
|
:disable="
|
|
formDialog.data.wallet == null ||
|
|
formDialog.data.title == null ||
|
|
(formDialog.data.min_withdrawable == null || formDialog.data.min_withdrawable < 1) ||
|
|
(
|
|
formDialog.data.max_withdrawable == null ||
|
|
formDialog.data.max_withdrawable < 1 ||
|
|
formDialog.data.max_withdrawable < formDialog.data.min_withdrawable
|
|
) ||
|
|
formDialog.data.uses == null ||
|
|
formDialog.data.wait_time == null"
|
|
type="submit"
|
|
>Create withdraw link</q-btn
|
|
>
|
|
<q-btn v-close-popup flat color="grey" class="q-ml-auto"
|
|
>Cancel</q-btn
|
|
>
|
|
</div>
|
|
</q-form>
|
|
</q-card>
|
|
</q-dialog>
|
|
|
|
<q-dialog
|
|
v-model="simpleformDialog.show"
|
|
position="top"
|
|
@hide="simplecloseFormDialog"
|
|
>
|
|
<q-card class="q-pa-lg q-pt-xl lnbits__dialog-card">
|
|
<q-form @submit="simplesendFormData" class="q-gutter-md">
|
|
<q-select
|
|
filled
|
|
dense
|
|
emit-value
|
|
v-model="simpleformDialog.data.wallet"
|
|
:options="g.user.walletOptions"
|
|
label="Wallet *"
|
|
>
|
|
</q-select>
|
|
<q-input
|
|
filled
|
|
dense
|
|
v-model.number="simpleformDialog.data.max_withdrawable"
|
|
type="number"
|
|
label="Withdraw amount per voucher"
|
|
></q-input>
|
|
<q-input
|
|
filled
|
|
dense
|
|
v-model.number="simpleformDialog.data.uses"
|
|
type="number"
|
|
:default="1"
|
|
label="Number of vouchers"
|
|
></q-input>
|
|
|
|
<div class="row q-mt-lg">
|
|
<q-btn
|
|
unelevated
|
|
color="deep-purple"
|
|
:disable="
|
|
simpleformDialog.data.wallet == null ||
|
|
|
|
simpleformDialog.data.max_withdrawable == null ||
|
|
simpleformDialog.data.max_withdrawable < 1 ||
|
|
simpleformDialog.data.uses == null"
|
|
type="submit"
|
|
>Create vouchers</q-btn
|
|
>
|
|
<q-btn v-close-popup flat color="grey" class="q-ml-auto"
|
|
>Cancel</q-btn
|
|
>
|
|
</div>
|
|
</q-form>
|
|
</q-card>
|
|
</q-dialog>
|
|
|
|
<q-dialog v-model="qrCodeDialog.show" position="top">
|
|
<q-card v-if="qrCodeDialog.data" class="q-pa-lg lnbits__dialog-card">
|
|
<q-responsive :ratio="1" class="q-mx-xl q-mb-md">
|
|
<qrcode
|
|
:value="qrCodeDialog.data.url + '/?lightning=' + qrCodeDialog.data.lnurl"
|
|
:options="{width: 800}"
|
|
class="rounded-borders"
|
|
></qrcode>
|
|
{% raw %}
|
|
</q-responsive>
|
|
<p style="word-break: break-all">
|
|
<strong>ID:</strong> {{ qrCodeDialog.data.id }}<br />
|
|
<strong>Unique:</strong> {{ qrCodeDialog.data.is_unique }}<span
|
|
v-if="qrCodeDialog.data.is_unique"
|
|
class="text-deep-purple"
|
|
>
|
|
(QR code will change after each withdrawal)</span
|
|
><br />
|
|
<strong>Max. withdrawable:</strong> {{
|
|
qrCodeDialog.data.max_withdrawable }} sat<br />
|
|
<strong>Wait time:</strong> {{ qrCodeDialog.data.wait_time }} seconds<br />
|
|
<strong>Withdraws:</strong> {{ qrCodeDialog.data.used }} / {{
|
|
qrCodeDialog.data.uses }}
|
|
<q-linear-progress
|
|
:value="qrCodeDialog.data.used / qrCodeDialog.data.uses"
|
|
color="deep-purple"
|
|
class="q-mt-sm"
|
|
></q-linear-progress>
|
|
</p>
|
|
{% endraw %}
|
|
<div class="row q-mt-lg q-gutter-sm">
|
|
<q-btn
|
|
outline
|
|
color="grey"
|
|
@click="copyText(qrCodeDialog.data.lnurl, 'LNURL copied to clipboard!')"
|
|
class="q-ml-sm"
|
|
>Copy LNURL</q-btn
|
|
>
|
|
<q-btn
|
|
outline
|
|
color="grey"
|
|
@click="copyText(qrCodeDialog.data.withdraw_url, 'Link copied to clipboard!')"
|
|
>Shareable link</q-btn
|
|
>
|
|
<q-btn
|
|
outline
|
|
color="grey"
|
|
icon="print"
|
|
type="a"
|
|
:href="qrCodeDialog.data.print_url"
|
|
target="_blank"
|
|
></q-btn>
|
|
<q-btn v-close-popup flat color="grey" class="q-ml-auto">Close</q-btn>
|
|
</div>
|
|
</q-card>
|
|
</q-dialog>
|
|
</div>
|
|
{% endblock %}
|