This commit is contained in:
unknown
2026-02-04 20:27:13 +08:00
commit 3b042d1dad
9410 changed files with 1488147 additions and 0 deletions

View File

@@ -0,0 +1,4 @@
<first-menu>
<menu-item href="/finance/bills" code="index">账单</menu-item>
<!--<menu-item href="/finance/bills/generate" code="generate">生成账单</menu-item>-->
</first-menu>

View File

@@ -0,0 +1,146 @@
{$layout}
{$template "menu"}
<table class="ui table selectable definition">
<tr>
<td class="title">账单编号</td>
<td>{{bill.code}}</td>
</tr>
<tr>
<td>用户</td>
<td><user-link :v-user="bill.user"></user-link></td>
</tr>
<tr>
<td>结算周期</td>
<td>{{bill.pricePeriodName}}</td>
</tr>
<tr>
<td>月份</td>
<td>{{bill.month}}</td>
</tr>
<tr v-if="bill.pricePeriod == 'daily'">
<td>日期</td>
<td>
<span v-if="bill.pricePeriod == 'daily'">
<span v-if="bill.dayFrom == bill.dayTo">{{bill.dayFrom}}</span>
<span v-else>{{bill.dayFrom}} - {{bill.dayTo}}</span>
</span>
</td>
</tr>
<tr>
<td>项目</td>
<td>{{bill.typeName}}</td>
</tr>
<tr>
<td>金额</td>
<td>¥{{bill.amount}}元
<span v-if="!bill.canPay" class="small grey">&nbsp;(预估)</span>
</td>
</tr>
<tr>
<td>描述</td>
<td>{{bill.description}}</td>
</tr>
<tr>
<td>已支付</td>
<td>
<span class="green" v-if="bill.isPaid">Y</span>
<span v-else class="disabled">N</span>
</td>
</tr>
<tr>
<td>操作</td>
<td>
<span v-if="bill.isPaid" class="disabled" title="已支付,无需重复支付">已支付</span>
<span v-else>
<a href="" v-if="bill.canPay" @click.prevent="payBill(bill.id)">支付</a>
<span v-else class="disabled"></span>
</span>
</td>
</tr>
</table>
<div v-if="serverBills.length > 0">
<h4>网站/套餐子账单</h4>
<table class="ui table selectable celled">
<thead>
<tr>
<th>网站</th>
<th>套餐</th>
<th>流量</th>
<th>带宽</th>
<th>费用</th>
<th>更新时间</th>
</tr>
</thead>
<tr v-for="serverBill in serverBills">
<td>
<span v-if="serverBill.server != null && serverBill.server.id > 0">{{serverBill.server.name}}</span>
<span v-else class="disabled">-</span>
</td>
<td>
<span v-if="serverBill.plan.id > 0">
{{serverBill.plan.name}}
<span class="small grey" v-if="serverBill.plan.priceType == 'traffic'">(按流量计费)</span>
<span class="small grey" v-if="serverBill.plan.priceType == 'bandwidth'">(按带宽计费)</span>
</span>
<span v-else>默认
<span v-if="serverBill.priceType == 'traffic'" class="small grey">(按流量计费)</span>
<span v-if="serverBill.priceType == 'bandwidth'" class="small grey">(按带宽计费)</span>
<span v-if="serverBill.priceType.length == 0" class="small grey">(按区域流量计费)</span>
</span>
</td>
<td>{{serverBill.traffic}}</td>
<td>{{serverBill.bandwidthPercentileSize}}<span class="grey small">{{serverBill.bandwidthPercentile}}th</span></td>
<td>{{serverBill.amount}}元</td>
<td>{{serverBill.createdTime}}</td>
</tr>
</table>
<div v-html="page"></div>
</div>
<div v-if="trafficBills.length > 0">
<h4>流量子账单</h4>
<table class="ui table selectable celled">
<thead>
<tr>
<th>区域</th>
<th>计费方式</th>
<th>计费带宽</th>
<th>带宽百分位</th>
<th>计费流量</th>
<th>流量包使用</th>
<th>单位价格</th>
<th>总价格</th>
</tr>
</thead>
<tr v-for="trafficBill in trafficBills">
<td>
<span v-if="trafficBill.region.id > 0">{{trafficBill.region.name}}</span>
<span v-else class="disabled">[未分区]</span>
</td>
<td>{{trafficBill.priceTypeName}}</td>
<td>
<span v-if="trafficBill.priceType == 'bandwidth'">{{trafficBill.bandwidthMB}}</span>
<span v-else class="disabled">-</span>
</td>
<td>
<span v-if="trafficBill.priceType == 'bandwidth'">{{trafficBill.bandwidthPercentile}}th</span>
<span v-else class="disabled">-</span>
</td>
<td>
<span v-if="trafficBill.priceType == 'traffic'">{{trafficBill.trafficGB}}</span>
<span v-else class="disabled">-</span>
</td>
<td>
<span v-if="trafficBill.priceType == 'traffic' && trafficBill.trafficPackageGB != '0B'">{{trafficBill.trafficPackageGB}}</span>
<span v-else class="disabled">-</span>
</td>
<td>
<span v-if="trafficBill.priceType == 'bandwidth'">{{trafficBill.pricePerUnit}}元/Mbps</span>
<span v-if="trafficBill.priceType == 'traffic'">{{trafficBill.pricePerUnit}}元/GiB</span>
</td>
<td>{{trafficBill.amount}}元</td>
</tr>
</table>
</div>

View File

@@ -0,0 +1,15 @@
Tea.context(function () {
this.payBill = function (billId) {
teaweb.confirm("确定要使用用户账户支付此账单吗? ", function () {
this.$post(".pay")
.params({
billId: billId
})
.success(function () {
teaweb.success("支付成功", function () {
teaweb.reload()
})
})
})
}
})

View File

@@ -0,0 +1,8 @@
{$layout}
{$template "menu"}
<div class="margin"></div>
<div>
<button type="button" class="ui primary button" @click.prevent="generateBills()">生成上个月({{month}})账单</button>
<p class="comment">多次点击不会重复生成同样的账单。</p>
</div>

View File

@@ -0,0 +1,16 @@
Tea.context(function () {
this.generateBills = function () {
let that = this
teaweb.confirm("确定要生成上个月的账单吗?", function () {
that.$post(".generate")
.params({
month: that.month
})
.success(function () {
teaweb.success("生成成功", function () {
window.location = "/finance/bills"
})
})
})
}
})

View File

@@ -0,0 +1,55 @@
{$layout}
{$template "menu"}
<p class="comment" v-if="bills.length == 0">暂时还没有账单。</p>
<table class="ui table selectable celled" v-if="bills.length > 0">
<thead>
<tr>
<th class="three wide">账单编号</th>
<th>用户</th>
<th style="width: 6em">结算周期</th>
<th style="width: 6em">月份</th>
<th style="width: 7em">日期</th>
<th style="width: 7em">项目</th>
<th class="wide10">金额</th>
<th style="width: 5em">已支付</th>
<th class="two op">操作</th>
</tr>
</thead>
<tr v-for="bill in bills">
<td>
<a :href="'/finance/bills/bill?billId=' + bill.id">{{bill.code}}</a>
<div v-if="bill.isOverdue">
<span class="ui red basic small">逾期</span>
</div>
</td>
<td><user-link :v-user="bill.user"></user-link></td>
<td>{{bill.pricePeriodName}}</td>
<td>{{bill.month}}</td>
<td>
<span v-if="bill.pricePeriod == 'daily'">
<span v-if="bill.dayFrom == bill.dayTo">{{bill.dayFrom}}</span>
<span v-else>{{bill.dayFrom}} - {{bill.dayTo}}</span>
</span>
</td>
<td>{{bill.typeName}}</td>
<td><span :class="{disabled: bill.amount == '0'}">¥{{bill.amount}}元</span>
<span v-if="!bill.canPay" class="small grey"><br/>预估</span>
</td>
<td>
<span class="green" v-if="bill.isPaid">Y</span>
<span v-else class="disabled">N</span>
</td>
<td>
<span v-if="bill.isPaid" class="disabled" title="已支付,无需重复支付">已支付</span>
<span v-else>
<a href="" v-if="bill.canPay" @click.prevent="payBill(bill.id)">支付</a>
<span v-else class="disabled"></span>
</span>
</td>
</tr>
</table>
<div class="page" v-html="page"></div>

View File

@@ -0,0 +1,15 @@
Tea.context(function () {
this.payBill = function (billId) {
teaweb.confirm("确定要使用用户账户支付此账单吗? ", function () {
this.$post(".pay")
.params({
billId: billId
})
.success(function () {
teaweb.success("支付成功", function () {
teaweb.reload()
})
})
})
}
})