临时提交

This commit is contained in:
磷叶 2025-05-30 11:59:14 +08:00
parent 1091ef94e3
commit ba3e032f72
12 changed files with 103 additions and 50 deletions

View File

@ -75,6 +75,12 @@
overflow: hidden !important;
text-overflow: ellipsis !important;
white-space: nowrap !important;
border-right: 3px solid transparent !important;
}
.el-menu-item.is-active {
background-color: $base-menu-background-active !important;
border-right: 3px solid $base-menu-background-active-border !important;
}
// menu hover
@ -84,7 +90,7 @@
line-height: $base-sidbar-height !important;
&:hover {
background-color: rgba(0, 0, 0, 0.06) !important;
background-color: $base-menu-background-active !important;
}
}
@ -99,7 +105,7 @@
line-height: $base-sidbar-height !important;
&:hover {
background-color: rgba(0, 0, 0, 0.06) !important;
background-color: $base-menu-background-active !important;
}
}

View File

@ -11,6 +11,8 @@ $panGreen: #30B08F;
// 默认菜单主题风格
$base-menu-color:#bfcbd9;
$base-menu-color-active:#f4f4f5;
$base-menu-background-active:#e5f0ff;
$base-menu-background-active-border:#829dff;
$base-menu-background:#304156;
$base-logo-title-color: #ffffff;

View File

@ -1,5 +1,5 @@
<template>
<div class="avatar-wrapper" :style="{backgroundColor: backgroundColor}">
<div class="avatar-wrapper" :style="{backgroundColor: isEmpty(src) ? backgroundColor : ''}">
<el-avatar :size="size" :src="src" v-if="src"/>
<el-avatar :size="size" v-else :style="{fontSize: fontSize}">
{{ displayChar }}
@ -8,6 +8,7 @@
</template>
<script>
import { isEmpty } from '@/utils/index.js';
export default {
name: 'Avatar',
props: {
@ -63,6 +64,9 @@ export default {
return colors[index]
}
},
methods: {
isEmpty,
}
}
</script>

View File

@ -66,9 +66,6 @@
<!-- 上传提示 -->
<div class="el-upload__tip" slot="tip" v-if="showTip">
<div style="color: #909399; margin-bottom: 8px;">
建议尺寸700×286
</div>
请上传
<template v-if="fileSize">大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b></template>
<template v-if="fileType">格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b></template>
@ -91,10 +88,10 @@
</template>
<script>
import { getToken } from '@/utils/auth'
import { getQiniuToken } from '@/api/common'
import axios from 'axios'
import { getRealUrl, getFileIcon, getExt, isImage, getFileNameWithTime, isVideo } from '@/utils'
import { getQiniuToken } from '@/api/common';
import { getExt, getFileIcon, getFileNameWithTime, getRealUrl, isImage, isVideo } from '@/utils';
import { getToken } from '@/utils/auth';
import axios from 'axios';
export default {
props: {
@ -493,6 +490,9 @@ export default {
};
</script>
<style scoped lang="scss">
.el-upload__tip {
line-height: 2em;
}
/* 上传区域基础样式 */
::v-deep .el-upload {
display: flex;

View File

@ -217,9 +217,8 @@
/>
</el-form-item>
<el-form-item label="广告图片" prop="picture">
<div class="upload-wrapper">
<image-upload v-model="form.picture" :limit="1"/>
</div>
建议尺寸 700x286
</el-form-item>
<el-form-item label="广告状态" prop="status">
<template>
@ -253,14 +252,13 @@
</template>
<script>
import { listAd, getAd, delAd, addAd, updateAd } from "@/api/bst/ad";
import { $showColumns } from '@/utils/mixins';
import FormCol from "@/components/FormCol/index.vue";
import AreaRemoteSelect from "@/components/Business/Area/AreaRemoteSelect.vue";
import {isSysAdmin} from "@/utils/permission";
import {handleAudit} from "@/api/bst/ad";
import {AdStatus} from "@/utils/enums";
import {enableDevice} from "@/api/bst/device";
import { addAd, delAd, getAd, handleAudit, listAd, updateAd } from "@/api/bst/ad";
import { enableDevice } from "@/api/bst/device";
import AreaRemoteSelect from "@/components/Business/Area/AreaRemoteSelect.vue";
import FormCol from "@/components/FormCol/index.vue";
import { AdStatus } from "@/utils/enums";
import { $showColumns } from '@/utils/mixins';
import { isSysAdmin } from "@/utils/permission";
//
const defaultSort = {

View File

@ -202,7 +202,7 @@ export default {
{key: 'refundAmount', visible: true, label: '已退款', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'prePayTime', visible: true, label: '预计分成', minWidth: null, sortable: false, overflow: false, align: 'center', width: "100"},
{key: 'payTime', visible: true, label: '实际分成', minWidth: null, sortable: false, overflow: false, align: 'center', width: "100"},
{key: 'toBalance', visible: false, label: '余额变动', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'toBalance', visible: true, label: '余额变动', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'createTime', visible: true, label: '创建时间', minWidth: null, sortable: true, overflow: false, align: 'center', width: "100"},
],
//

View File

@ -8,6 +8,9 @@
<form-col :span="span" label="渠道名称" prop="name">
<el-input v-model="form.name" placeholder="请输入渠道名称"/>
</form-col>
<form-col :span="span" label="对外名称" prop="outName">
<el-input v-model="form.outName" placeholder="请输入对外名称"/>
</form-col>
<form-col :span="span" label="类型" prop="type">
<el-select v-model="form.type" placeholder="请选择类型" style="width: 100%;">
<el-option v-for="item in dict.type.channel_type" :key="item.value" :label="item.label" :value="item.value"/>
@ -26,6 +29,13 @@
<form-col :span="24" label="绑定APP" prop="appIds" tip="有哪些APP可以使用该渠道" label-width="7em">
<app-select v-model="form.appIds" multiple/>
</form-col>
<form-col :span="24" label="可用业务" prop="bstTypes" tip="有哪些业务可以使用该渠道" label-width="7em">
<el-checkbox-group v-model="form.bstTypes" placeholder="请选择业务类型" style="width: 100%;">
<el-checkbox v-for="item in dict.type.channel_bst_type" :key="item.value" :label="item.value">
{{ item.label }}
</el-checkbox>
</el-checkbox-group>
</form-col>
</el-row>
<div class="api-config-title">API配置</div>
<el-row>
@ -96,13 +106,13 @@
</template>
<script>
import { updateChannel, addChannel, getChannel } from "@/api/bst/channel";
import { ChannelType, ChannelApiType } from "@/utils/enums";
import AppSelect from '@/components/Business/App/AppSelect.vue'
import { addChannel, getChannel, updateChannel } from "@/api/bst/channel";
import AppSelect from '@/components/Business/App/AppSelect.vue';
import { ChannelApiType, ChannelType } from "@/utils/enums";
export default {
name: "ChannelEditDialog",
dicts: ['channel_api_type', 'channel_type'],
dicts: ['channel_api_type', 'channel_type', 'channel_bst_type'],
components: { AppSelect },
props: {
show: {
@ -182,6 +192,7 @@ export default {
serviceRate: null,
costRate: null,
appIds: [],
bstTypes: [],
type: ChannelType.CUSTOM,
channelConfig: {}
};

View File

@ -41,26 +41,26 @@
<el-table v-loading="loading" :data="channelList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="ID" align="center" prop="channelId" width="80"/>
<el-table-column label="图片" align="center" prop="picture" width="80">
<image-preview slot-scope="d" :src="d.row.picture" :width="32" :height="32"/>
</el-table-column>
<el-table-column label="渠道名称" align="center" prop="name"/>
<el-table-column label="类型" align="center" prop="type">
<el-table-column label="渠道" align="left" prop="name" width="300">
<template slot-scope="d">
<dict-tag :value="d.row.type" :options="dict.type.channel_type"/>
<avatar :src="d.row.picture" :size="24" :name="d.row.name" :char-index="-1" style="margin-right:4px"/>
{{ d.row.name | dv }}
<dict-tag :value="d.row.type" :options="dict.type.channel_type" size="mini" style="margin-left:4px"/>
<dict-tag :value="d.row.apiType" :options="dict.type.channel_api_type" size="mini" style="margin-left:4px"/>
</template>
</el-table-column>
<el-table-column label="是否启用" align="center" prop="enabled">
<el-table-column label="启用" align="center" prop="enabled">
<template slot-scope="d">
<el-switch v-model="d.row.enabled" @change="(nv) => {onChangeEnabled(d.row, nv)}"/>
</template>
</el-table-column>
<el-table-column label="API类型" align="center" prop="apiType">
<el-table-column label="对外名称" align="center" prop="outName"/>
<el-table-column label="可用业务" align="center" prop="bstTypes" width="300">
<template slot-scope="d">
<dict-tag :value="d.row.apiType" :options="dict.type.channel_api_type"/>
<dict-tag :value="d.row.bstTypes" :options="dict.type.channel_bst_type" size="mini" style="margin-left:4px"/>
</template>
</el-table-column>
<el-table-column label="渠道成本" align="center" prop="costRate">
<el-table-column label="成本" align="center" prop="costRate">
<template slot-scope="d">{{d.row.costRate | fix2}} %</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime"/>
@ -95,13 +95,14 @@
</template>
<script>
import { listChannel, delChannel, addChannel, updateChannel } from "@/api/bst/channel";
import ChannelEditDialog from '@/views/bst/channel/components/ChannelEditDialog.vue'
import { addChannel, delChannel, listChannel, updateChannel } from "@/api/bst/channel";
import Avatar from '@/components/Avatar/index.vue';
import ChannelEditDialog from '@/views/bst/channel/components/ChannelEditDialog.vue';
export default {
name: "Channel",
dicts: ['channel_api_type', 'channel_type'],
components: { ChannelEditDialog },
dicts: ['channel_api_type', 'channel_type', 'channel_bst_type'],
components: { ChannelEditDialog, Avatar },
data() {
return {
row: {},

View File

@ -9,6 +9,9 @@
>
<el-form ref="form" :model="form" :rules="rules" label-width="80px" v-loading="loading">
<el-row>
<form-col :span="span" label="LOGO" prop="logo">
<image-upload v-model="form.logo" :limit="1" />
</form-col>
<form-col :span="span" label="名称" prop="name">
<el-input v-model="form.name" placeholder="请输入名称" />
</form-col>
@ -45,7 +48,6 @@ import AreaRemoteSelect from "@/components/Business/Area/AreaRemoteSelect.vue";
import FormCol from "@/components/FormCol/index.vue";
import { CreditStatus } from "@/utils/enums";
export default {
name: 'CreditEditDialog',
components: { FormCol, AreaRemoteSelect },

View File

@ -34,7 +34,7 @@
<el-form-item label="业务类型" prop="bstType">
<el-select v-model="queryParams.bstType" placeholder="请选择业务类型" clearable @change="handleQuery">
<el-option
v-for="dict in dict.type.credit_pay_bst_type"
v-for="dict in dict.type.pay_bst_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
@ -99,7 +99,7 @@
</template>
<template v-else-if="column.key === 'description'">
{{ d.row.description | dv }}
<dict-tag :options="dict.type.credit_pay_bst_type" :value="d.row.bstType" size="mini" style="margin-left: 4px;"/>
<dict-tag :options="dict.type.pay_bst_type" :value="d.row.bstType" size="mini" style="margin-left: 4px;"/>
<dict-tag :options="dict.type.credit_pay_status" :value="d.row.status" size="mini" style="margin-left: 4px;"/>
</template>
<template v-else-if="['amount', 'refundAmount', 'paymentAmount'].includes(column.key)">
@ -155,7 +155,7 @@
<form-col :span="span" label="业务类型" prop="bstType">
<el-select v-model="form.bstType" placeholder="请选择业务类型">
<el-option
v-for="dict in dict.type.credit_pay_bst_type"
v-for="dict in dict.type.pay_bst_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
@ -200,7 +200,7 @@ const defaultSort = {
export default {
name: "CreditPay",
mixins: [$showColumns],
dicts: ['credit_pay_status', 'credit_pay_bst_type'],
dicts: ['credit_pay_status', 'pay_bst_type'],
components: {FormCol, CreditRemoteSelect, AreaRemoteSelect},
data() {
return {

View File

@ -164,7 +164,24 @@
<div>
<el-row :gutter="8">
<el-col :span="12" v-if="d.row.ridingFee != null">骑行{{d.row.ridingFee | fix2 | dv}} </el-col>
<el-col :span="12" v-if="d.row.depositFee != null">押金{{d.row.depositFee | fix2 | dv}} </el-col>
<el-col :span="12" v-if="d.row.depositFee != null">
<el-popover
placement="bottom"
width="200"
trigger="hover"
>
<div>
<div v-if="d.row.creditName">挂账方{{d.row.creditName | fix2 | dv}} </div>
<div v-if="d.row.creditUserName">挂账人{{d.row.creditUserName | fix2 | dv}} </div>
<div>押金{{d.row.depositFee | fix2 | dv}} </div>
</div>
<div slot="reference">
押金{{d.row.depositFee | fix2 | dv}}
<el-tag v-if="d.row.isCredit" type="success" size="mini">挂账</el-tag>
<i class="el-icon-info" v-else />
</div>
</el-popover>
</el-col>
<el-col :span="12" v-if="d.row.totalFee != null">
<el-popover
placement="bottom"

View File

@ -12,11 +12,23 @@
</el-statistic>
</el-col>
<el-col>
<el-statistic title="押金" :value="detail.depositFee" :precision="2" suffix="元">
<template slot="prefix">
<i class="el-icon-money" style="color: #67C23A"></i>
</template>
</el-statistic>
<el-popover placement="bottom" width="200" trigger="hover">
<div>
<div v-if="detail.creditName">挂账方{{detail.creditName | fix2 | dv}} </div>
<div v-if="detail.creditUserName">挂账人{{detail.creditUserName | fix2 | dv}} </div>
<div>押金{{detail.depositFee | fix2 | dv}} </div>
</div>
<el-statistic slot="reference" title="押金" :value="detail.depositFee" :precision="2" suffix="元">
<template slot="prefix">
<i class="el-icon-money" style="color: #67C23A"></i>
</template>
<template slot="title">
押金
<el-tag v-if="detail.isCredit" type="success" size="mini">挂账</el-tag>
<i class="el-icon-info" v-else />
</template>
</el-statistic>
</el-popover>
</el-col>
<el-col v-if="detail.ridePayAmount">
<el-statistic title="结算支付" :value="detail.ridePayAmount" :precision="2" suffix="元">