This commit is contained in:
磷叶 2025-04-21 18:27:02 +08:00
parent f2a77b3ab8
commit f2692ef3aa
26 changed files with 443 additions and 198 deletions

View File

@ -312,4 +312,4 @@
background-color: #fff8e1;
border-color: rgb(255, 245, 208);
color: #f5a524;
}
}

View File

@ -0,0 +1,46 @@
<template>
<el-link
:style="style"
:disabled="id == null || !checkPermi(permissions)"
:underline="false"
type="primary"
v-on="$listeners"
>
{{ text | dv }}
</el-link>
</template>
<script>
export default {
name: 'BaseLink',
props: {
id: {
type: String,
default: null
},
text: {
type: String,
default: null
},
size: {
type: String,
default: "small"
},
permissions: {
type: Array,
default: () => []
}
},
computed: {
style() {
return {
fontSize: this.size === "mini" ? "12px" : null
}
}
}
}
</script>
<style lang="scss" scoped>
</style>

View File

@ -0,0 +1,32 @@
<template>
<base-link :id="id" :text="text" :size="size" @click="handleClick" :permissions="['bst:device:query']"/>
</template>
<script>
import BaseLink from '@/components/BaseLink/index.vue';
export default {
name: 'DeviceLink',
components: {BaseLink},
props: {
id: {
type: String,
default: null
},
text: {
type: String,
default: null,
},
size: {
type: String,
default: "small"
},
},
methods: {
handleClick() {
if (this.id != null && this.checkPermi(['bst:device:query'])) {
this.$router.push(`/view/device/${this.id}`);
}
}
}
}
</script>

View File

@ -0,0 +1,32 @@
<template>
<base-link :id="id" :text="text" :size="size" @click="handleClick" :permissions="['bst:order:query']"/>
</template>
<script>
import BaseLink from '@/components/BaseLink/index.vue';
export default {
name: 'OrderLink',
components: {BaseLink},
props: {
id: {
type: String,
default: null
},
text: {
type: String,
default: null,
},
size: {
type: String,
default: "small"
}
},
methods: {
handleClick() {
if (this.id != null && this.checkPermi(['bst:order:query'])) {
this.$router.push(`/view/order/${this.id}`);
}
}
}
}
</script>

View File

@ -0,0 +1,32 @@
<template>
<base-link :id="id" :text="text" :size="size" @click="handleClick" :permissions="['system:user:query']"/>
</template>
<script>
import BaseLink from '@/components/BaseLink/index.vue';
export default {
name: 'UserLink',
components: {BaseLink},
props: {
id: {
type: String,
default: null
},
text: {
type: String,
default: null,
},
size: {
type: String,
default: "small"
}
},
methods: {
handleClick() {
if (this.id != null && this.checkPermi(['system:user:query'])) {
this.$router.push(`/view/user/${this.id}`);
}
}
}
}
</script>

View File

@ -137,6 +137,9 @@
{{d.row[column.key]}}
</template>
</template>
<template v-else-if="column.key === 'userName'">
<user-link :id="d.row.userId" :text="d.row.userName" />
</template>
<template v-else>
{{d.row[column.key]}}
</template>
@ -176,7 +179,8 @@
import { listAccount, delAccount } from "@/api/bst/account";
import { $showColumns } from '@/utils/mixins';
import { AccountType } from '@/utils/enums';
import AccountEditDialog from './components/AccountEditDialog.vue';
import AccountEditDialog from '@/views/bst/account/components/AccountEditDialog.vue';
import UserLink from '@/components/Business/User/UserLink.vue';
//
const defaultSort = {
@ -188,7 +192,13 @@ export default {
name: "Account",
mixins: [$showColumns],
dicts: ['account_type'],
components: { AccountEditDialog },
components: { AccountEditDialog, UserLink },
props: {
query: {
type: Object,
default: () => ({})
}
},
data() {
return {
AccountType,
@ -248,6 +258,7 @@ export default {
};
},
created() {
Object.assign(this.queryParams, this.query);
this.getList();
},
methods: {

View File

@ -78,8 +78,12 @@
<template v-if="column.key === 'id'">
{{d.row[column.key]}}
</template>
<template v-else-if="column.key === 'agreementType'">
<dict-tag :options="dict.type.agreement_type" :value="d.row[column.key]"/>
<template v-else-if="column.key === 'title'">
{{d.row.title | dv}}
<dict-tag :options="dict.type.agreement_type" :value="d.row.agreementType" size="mini" style="margin-left: 4px;"/>
</template>
<template v-else-if="column.key === 'userName'">
<user-link :id="d.row.storeId" :text="d.row.userName"/>
</template>
<template v-else>
{{d.row[column.key]}}
@ -182,6 +186,7 @@ import { $showColumns } from '@/utils/mixins';
import FormCol from "@/components/FormCol/index.vue";
import Editor from "@/components/Editor/index.vue";
import AreaRemoteSelect from "@/components/Business/Area/AreaRemoteSelect.vue";
import UserLink from "@/components/Business/User/UserLink.vue";
//
const defaultSort = {
@ -193,59 +198,18 @@ export default {
name: "Agreement",
mixins: [$showColumns],
dicts: ['agreement_type'],
components: {FormCol,Editor,AreaRemoteSelect},
components: {FormCol,Editor,AreaRemoteSelect,UserLink},
data() {
return {
span: 24,
//
columns: [
{
key: 'id',
visible: true,
label: 'ID',
minWidth: null,
sortable: true,
overflow: false,
align: 'center',
width: null
},
{key: 'id', visible: false, label: 'ID', minWidth: null, sortable: true, overflow: false, align: 'center', width: "80"},
{key: 'title', visible: true, label: '标题', minWidth: "150", sortable: true, overflow: false, align: 'left', width: null},
{key: 'brief', visible: true, label: '简介', minWidth: null, sortable: true, overflow: true, align: 'center', width: null},
{key: 'userName', visible: true, label: '商户', sortable: true, align: 'center'},
{key: 'areaName', visible: true, label: '运营区', sortable: true, align: 'center'},
//{key: 'storeId', visible: true, label: '', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
//{key: 'areaId', visible: true, label: '', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{
key: 'title',
visible: true,
label: '标题',
minWidth: null,
sortable: true,
overflow: false,
align: 'center',
width: null
},
{
key: 'brief',
visible: true,
label: '简介',
minWidth: null,
sortable: true,
overflow: false,
align: 'center',
width: null
},
// {key: 'content', visible: true, label: '', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{
key: 'agreementType',
visible: true,
label: '协议类型',
minWidth: null,
sortable: true,
overflow: false,
align: 'center',
width: null
},
// {key: 'duration', visible: true, label: '', minWidth: null, sortable: false, overflow: false, align: 'center', width: "100"},
{key: 'createTime', visible: true, label: '创建时间', sortable: true, align: 'center'},
],
//
orderSorts: ['ascending', 'descending', null],

View File

@ -110,8 +110,14 @@
<template v-else-if="column.key === 'areaTimeStart'">
{{d.row.areaTimeStart | dv}} - {{d.row.areaTimeEnd | dv}}
</template>
<template v-else-if="column.key === 'userName'">
<user-link :id="d.row.userId" :text="d.row.userName" />
</template>
<template v-else-if="column.key === 'createName'">
<user-link :id="d.row.createId" :text="d.row.createName" />
</template>
<template v-else-if="column.key === 'subArea'">
<el-button type="text" size="mini" @click="handleSubArea(d.row)">
<el-button type="text" size="small" @click="handleSubArea(d.row)">
停车区({{d.row.parkingAreaCount | dv}})
禁停区({{d.row.noParkingAreaCount | dv}})
禁行区({{d.row.noRideAreaCount | dv}})
@ -180,7 +186,7 @@
import { listArea, delArea } from "@/api/bst/area";
import { $showColumns } from '@/utils/mixins';
import AreaCustomerServiceDialog from "@/views/bst/area/components/AreaCustomerServiceDialog.vue";
import UserLink from '@/components/Business/User/UserLink.vue';
//
const defaultSort = {
prop: "createTime",
@ -192,7 +198,8 @@ export default {
mixins: [$showColumns],
dicts: ['area_status'],
components: {
AreaCustomerServiceDialog
AreaCustomerServiceDialog,
UserLink
},
props: {
query: {

View File

@ -97,9 +97,9 @@
{{d.row[column.key]}}
</template>
<template v-else-if="column.key === 'userName'">
{{d.row.userName | dv}}
<user-link :id="d.row.userId" :text="d.row.userName" />
<template v-if="d.row.remark">{{d.row.remark}}</template>
<dict-tag :options="dict.type.area_join_type" :value="d.row.type" size="mini"/>
<dict-tag :options="dict.type.area_join_type" :value="d.row.type" size="mini" style="margin-left: 4px;"/>
</template>
<template v-else-if="column.key === 'point'">
<span>{{d.row[column.key] | fix2 | dv}} %</span>
@ -107,6 +107,9 @@
<template v-else-if="column.key === 'permissions'">
<dict-tag :options="dict.type.area_join_permission" :value="d.row[column.key]" size="mini"/>
</template>
<template v-else-if="column.key === 'createName'">
<user-link :id="d.row.createId" :text="d.row.createName" />
</template>
<template v-else>
{{d.row[column.key]}}
</template>
@ -156,6 +159,7 @@
import { listAreaJoin, delAreaJoin } from "@/api/bst/areaJoin";
import { $showColumns } from '@/utils/mixins';
import AreaJoinEditDialog from './components/AreaJoinEditDialog';
import UserLink from '@/components/Business/User/UserLink.vue';
//
const defaultSort = {
@ -167,7 +171,7 @@ export default {
name: "AreaJoin",
mixins: [$showColumns],
dicts: ['area_join_type', 'area_join_permission'],
components: { AreaJoinEditDialog },
components: { AreaJoinEditDialog, UserLink },
data() {
return {
//

View File

@ -79,6 +79,9 @@
<template v-else-if="['beforeBalance', 'afterBalance'].includes(column.key)">
{{d.row[column.key] | fix2 | dv}}
</template>
<template v-else-if="column.key === 'userName'">
<user-link :id="d.row.userId" :text="d.row.userName" />
</template>
<template v-else>
{{d.row[column.key]}}
</template>
@ -102,6 +105,7 @@
import { listBalanceLog, getBalanceLog, delBalanceLog, addBalanceLog, updateBalanceLog } from "@/api/bst/balanceLog";
import { $showColumns } from '@/utils/mixins';
import FormCol from "@/components/FormCol/index.vue";
import UserLink from '@/components/Business/User/UserLink.vue'
//
const defaultSort = {
@ -113,7 +117,7 @@ export default {
name: "BalanceLog",
mixins: [$showColumns],
dicts: ['balance_log_bst_type'],
components: {FormCol},
components: {FormCol, UserLink},
props: {
query: {
type: Object,

View File

@ -86,13 +86,15 @@
{{d.row[column.key]}}
</template>
<template v-else-if="column.key === 'reason'">
{{d.row.reason | dv}}
<dict-tag :options="dict.type.bonus_bst_type" :value="d.row.bstType" size="mini" style="margin-right: 4px;"/>
<dict-tag :options="dict.type.bonus_status" :value="d.row.status" size="mini" style="margin-right: 4px;"/>
<order-link v-if="BonusBstType.ORDER === d.row.bstType" :id="d.row.bstId" :text="d.row.reason" />
<span v-else>{{d.row.reason | dv}}</span>
<dict-tag :options="dict.type.bonus_bst_type" :value="d.row.bstType" size="mini" style="margin-left: 4px;"/>
<dict-tag :options="dict.type.bonus_status" :value="d.row.status" size="mini" style="margin-left: 4px;"/>
</template>
<template v-else-if="column.key === 'arrivalName'">
{{d.row.arrivalName | dv}}
<dict-tag :options="dict.type.bonus_arrival_type" :value="d.row.arrivalType" size="mini" style="margin-right: 4px;"/>
<user-link v-if="BonusArrivalType.userList().includes(d.row.arrivalType)" :id="d.row.arrivalId" :text="d.row.arrivalName"/>
<span v-else>{{d.row.arrivalName | dv}}</span>
<dict-tag :options="dict.type.bonus_arrival_type" :value="d.row.arrivalType" size="mini" style="margin-left: 4px;"/>
</template>
<template v-else-if="column.key === 'toBalance'">
<boolean-tag :value="d.row.toBalance" size="mini"/>
@ -142,7 +144,9 @@ import { listBonus, getBonus, delBonus, addBonus, updateBonus, payBonus } from "
import { $showColumns } from '@/utils/mixins';
import FormCol from "@/components/FormCol/index.vue";
import BooleanTag from "@/components/BooleanTag/index.vue";
import { BonusStatus } from "@/utils/enums";
import { BonusStatus, BonusArrivalType, BonusBstType} from "@/utils/enums";
import UserLink from '@/components/Business/User/UserLink.vue'
import OrderLink from '@/components/Business/Order/OrderLink.vue'
//
const defaultSort = {
@ -154,7 +158,7 @@ export default {
name: "Bonus",
mixins: [$showColumns],
dicts: ['bonus_status', 'bonus_arrival_type', 'bonus_bst_type'],
components: {FormCol, BooleanTag},
components: {FormCol, BooleanTag, UserLink, OrderLink},
props: {
query: {
type: Object,
@ -163,7 +167,9 @@ export default {
},
data() {
return {
BonusArrivalType,
BonusStatus,
BonusBstType,
//
amountColor: {
amount: null,

View File

@ -234,8 +234,8 @@
{{d.row[column.key]}}
</template>
<template v-else-if="column.key === 'sn'">
{{d.row.sn | dv}}
| {{d.row.mac | dv}}
<device-link :id="d.row.id" :text="d.row.sn" size="mini"/> |
<device-link :id="d.row.id" :text="d.row.mac" size="mini"/>
<device-sn :sn="d.row.sn"/>
<br/>
<dict-tag :options="dict.type.device_online_status" :value="d.row.onlineStatus" size="mini"/>
@ -243,8 +243,9 @@
<dict-tag :options="dict.type.device_iot_status" :value="d.row.iotStatus" size="mini" style="margin-left: 4px;"/>
</template>
<template v-else-if="column.key === 'mchName'">
{{d.row.mchName | dv}}<br/>
{{d.row.areaName | dv}}
<i class="el-icon-office-building"/>
<user-link :id="d.row.mchId" :text="d.row.mchName" size="mini"/><br/>
<i class="el-icon-location"/>{{d.row.areaName | dv}}
</template>
<template v-else-if="column.key === 'lockStatus'">
<el-tooltip content="开锁:共享模块有开锁的信号输出;电门开:车子处于开锁可骑行状态" placement="top">
@ -258,21 +259,31 @@
<dict-tag :options="dict.type.device_iot_status" :value="d.row[column.key]" size="mini"/>
</template>
<template v-else-if="column.key === 'remainingPower'">
{{d.row.remainingPower | fix2 | dv}} % <br/>
{{d.row.voltage | fix2 | dv}} V ({{d.row.remainingPower | fix2 | dv}} %) <br/>
{{d.row.remainEndurance | dv}} KM
</template>
<template v-else-if="column.key === 'vehicleNum'">
<i class="el-icon-bicycle"/>
{{d.row.vehicleNum | dv}}<br/>
<i class="el-icon-tickets"/>
{{d.row.modelName | dv}}
</template>
<template v-else-if="column.key === 'voltage'">
{{d.row.voltage | fix2 | dv}} V
</template>
<template v-else-if="column.key === 'music'">
<dict-tag :options="dict.type.device_music" :value="d.row[column.key]" size="mini"/>
</template>
<template v-else-if="column.key === 'hardwareVersion'">
{{d.row.hardwareVersion | dv}} | {{d.row.softwareVersion | dv}}
{{d.row.hardwareVersion | dv}}<br/>
{{d.row.softwareVersion | dv}}
</template>
<template v-else-if="column.key === 'signalStrength'">
<el-tooltip content="4G信号强度和卫星数量" placement="top">
<span>
<i class="el-icon-connection"/>
{{d.row.signalStrength | dv}}<br/>
<i class="el-icon-position"/>
{{d.row.satellites | dv}}
</span>
</el-tooltip>
</template>
<template v-else>
{{d.row[column.key]}}
@ -280,7 +291,7 @@
</template>
</el-table-column>
</template>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="400">
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="360">
<template slot-scope="scope">
<el-button
size="mini"
@ -417,6 +428,8 @@ import { DeviceStatus } from '@/utils/enums';
import { $device } from '@/views/bst/device/mixins';
import DeviceTransferDialog from '@/views/bst/device/components/DeviceTransferDialog.vue';
import DeviceSn from '@/views/bst/device/components/DeviceSn.vue';
import UserLink from '@/components/Business/User/UserLink.vue';
import DeviceLink from '@/components/Business/Device/DeviceLink.vue';
//
const defaultSort = {
@ -428,7 +441,7 @@ export default {
name: "Device",
mixins: [$showColumns, $device],
dicts: ['device_status', 'device_lock_status', 'device_iot_status', 'device_online_status', 'device_quality', 'device_music'],
components: {FormCol, DeviceEditDialog, BooleanTag, DeviceTransferDialog, DeviceSn},
components: {FormCol, DeviceEditDialog, BooleanTag, DeviceTransferDialog, DeviceSn, UserLink, DeviceLink},
props: {
query: {
type: Object,
@ -442,17 +455,14 @@ export default {
//
columns: [
{key: 'id', visible: false, label: 'ID', minWidth: null, sortable: true, overflow: false, align: 'center', width: "80"},
{key: 'sn', visible: true, label: '设备', minWidth: null, sortable: true, overflow: false, align: 'left', width: "220"},
{key: 'sn', visible: true, label: '设备', minWidth: "150", sortable: true, overflow: false, align: 'left', width: null},
{key: 'vehicleNum', visible: true, label: '车辆', minWidth: null, sortable: true, overflow: false, align: 'left', width: null},
{key: 'mchName', visible: true, label: '归属', minWidth: null, sortable: true, overflow: false, align: 'left', width: null},
{key: 'hardwareVersion', visible: true, label: '版本', minWidth: null, sortable: true, overflow: false, align: 'left', width: null},
{key: 'signalStrength', visible: true, label: '信号', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'satellites', visible: true, label: '卫星', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'signalStrength', visible: true, label: '信号', minWidth: null, sortable: true, overflow: false, align: 'left', width: null},
{key: 'lockStatus', visible: true, label: '锁状态', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'voltage', visible: true, label: '电压', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'remainingPower', visible: true, label: '续航', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'music', visible: false, label: '声音', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'remark', visible: true, label: '备注', minWidth: null, sortable: true, overflow: true, align: 'center', width: null},
{key: 'orderNo', visible: false, label: '订单', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'createTime', visible: false, label: '创建', minWidth: null, sortable: true, overflow: false, align: 'center', width: "90"},
],
@ -614,17 +624,11 @@ export default {
},
//
handleRefresh(row) {
this.$confirm('是否确认刷新设备【' + row.sn + '】?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
refreshDevice({ id: row.id }).then((res) => {
if (res.code === 200) {
this.$message.success("操作成功,设备已刷新");
this.getList(false);
}
})
refreshDevice({ id: row.id }).then((res) => {
if (res.code === 200) {
this.$message.success("操作成功,设备已刷新");
this.getList(false);
}
})
},
//

View File

@ -39,7 +39,7 @@
<i class="el-icon-user"></i>
我的
</div>
<balance-panel v-if="userInfo" :balance="userInfo.balance" :waitBonus="userStat.bonus.waitAmount" :totalWithdraw="userStat.withdraw.successAmount"/>
<balance-panel v-if="userInfo" :balance="userInfo.balance" :waitBonus="userStat.bonus.waitDivideAmount" :totalWithdraw="userStat.withdraw.successAmount"/>
<!-- 待办事项 -->
<todo-list :stat="stat"/>

View File

@ -88,6 +88,9 @@
<template v-else-if="['fullEndurance'].includes(column.key)">
{{d.row[column.key]}} KM
</template>
<template v-else-if="column.key === 'userName'">
<user-link :id="d.row.userId" :text="d.row.userName" />
</template>
<template v-else>
{{d.row[column.key]}}
</template>
@ -135,7 +138,7 @@ import { listModel, delModel } from "@/api/bst/model";
import { $showColumns } from '@/utils/mixins';
import BooleanTag from '@/components/BooleanTag/index.vue';
import ModelEditDialog from '@/views/bst/model/components/ModelEditDialog.vue';
import UserLink from '@/components/Business/User/UserLink.vue';
//
const defaultSort = {
prop: "createTime",
@ -147,7 +150,14 @@ export default {
mixins: [$showColumns],
components: {
BooleanTag,
ModelEditDialog
ModelEditDialog,
UserLink
},
props: {
query: {
type: Object,
default: () => ({})
}
},
data() {
return {
@ -155,7 +165,6 @@ export default {
columns: [
{key: 'id', visible: false, label: 'ID', minWidth: null, sortable: true, overflow: false, align: 'center', width: "80"},
{key: 'name', visible: true, label: '名称', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
// {key: 'areaName', visible: true, label: '', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'userName', visible: true, label: '所属用户', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'fullVoltage', visible: true, label: '满电电压', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'lowVoltage', visible: true, label: '亏电电压', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
@ -200,6 +209,7 @@ export default {
};
},
created() {
Object.assign(this.queryParams, this.query);
this.getList();
},
methods: {

View File

@ -143,6 +143,9 @@
<template v-if="column.key === 'id'">
{{d.row[column.key]}}
</template>
<template v-else-if="column.key === 'no'">
<order-link :id="d.row.id" :text="d.row.no" size="mini"/>
</template>
<template v-else-if="column.key === 'suitName'">
{{d.row.suitName | dv}}<br/>
<dict-tag :options="dict.type.suit_type" :value="d.row.suitType" size="mini"/>
@ -173,36 +176,44 @@
</el-row>
</div>
</template>
<template v-else-if="column.key === 'useInfo'">
<div v-if="d.row.duration != null">时长{{toDescriptionFromSecond(d.row.duration).text | dv}}</div>
<div v-if="d.row.distance != null">距离{{d.row.distance / 1000 | fix2 | dv}} 公里</div>
</template>
<template v-else-if="column.key === 'time'">
<div v-if="d.row.createTime != null">创建{{d.row.createTime | dv}}</div>
<div v-if="d.row.startTime != null">开始{{d.row.startTime | dv}}</div>
<div v-if="d.row.endTime != null">结束{{d.row.endTime | dv}}</div>
<div v-if="d.row.maxTime != null">超时{{d.row.maxTime | dv}}</div>
</template>
<template v-else-if="column.key === 'device'">
<div v-if="d.row.deviceSn != null">SN{{d.row.deviceSn | dv}}</div>
<div v-if="d.row.deviceMac != null">MAC{{d.row.deviceMac | dv}}</div>
<div v-if="d.row.deviceVehicleNum != null">车牌{{d.row.deviceVehicleNum | dv}}</div>
<div v-if="d.row.deviceSn != null">SN<device-link :id="d.row.deviceId" :text="d.row.deviceSn" size="mini"/></div>
<div v-if="d.row.deviceMac != null">MAC<device-link :id="d.row.deviceId" :text="d.row.deviceMac" size="mini"/></div>
<div v-if="d.row.deviceVehicleNum != null">车牌<device-link :id="d.row.deviceId" :text="d.row.deviceVehicleNum" size="mini"/></div>
</template>
<template v-else-if="column.key === 'payNo'">
<div v-if="d.row.payNo != null">单号{{d.row.payNo | dv}}</div>
<div v-if="d.row.payTime != null">时间{{d.row.payTime | dv}}</div>
<div v-if="d.row.payChannelName != null">渠道{{d.row.payChannelName | dv}}</div>
<div v-if="d.row.payNo != null">{{d.row.payNo | dv}}</div>
<div v-if="d.row.payTime != null">{{d.row.payTime | dv}}</div>
<div v-if="d.row.payChannelName != null">{{d.row.payChannelName | dv}}</div>
</template>
<template v-else-if="column.key === 'use'">
<div v-if="d.row.startAreaSubName != null">借车{{d.row.startAreaSubName | dv}}</div>
<div v-if="d.row.endAreaSubName != null">还车{{d.row.endAreaSubName | dv}}</div>
<div v-if="d.row.endReason != null">还车原因{{d.row.endReason | dv}}</div>
<div v-if="d.row.duration != null">
<i class="el-icon-timer" />
{{toDescriptionFromSecond(d.row.duration).text | dv}}
</div>
<div v-if="d.row.distance != null">
<i class="el-icon-position" />
{{d.row.distance / 1000 | fix2 | dv}} 公里
</div>
<div v-if="d.row.endReason != null">{{d.row.endReason | dv}}</div>
</template>
<template v-else-if="column.key === 'userName'">
<div v-if="d.row.userName != null">用户{{d.row.userName | dv}}</div>
<div v-if="d.row.userPhone != null">手机{{d.row.userPhone | dv}}</div>
<div v-if="d.row.areaName != null">运营区{{d.row.areaName | dv}}</div>
<div v-if="d.row.userName != null">
<i class="el-icon-user" />
<user-link :id="d.row.userId" :text="d.row.userName" size="mini"/>
</div>
<div v-if="d.row.userPhone != null">
<i class="el-icon-phone" />
<user-link :id="d.row.userId" :text="d.row.userPhone" size="mini"/>
</div>
<div v-if="d.row.areaName != null">
<i class="el-icon-location"/>{{d.row.areaName | dv}}
</div>
</template>
<template v-else>
{{d.row[column.key]}}
@ -269,6 +280,9 @@ import { OrderStatus } from "@/utils/enums";
import OrderRefundDialog from "@/views/bst/order/components/OrderRefundDialog.vue";
import OrderVerifyDialog from "@/views/bst/order/components/OrderVerifyDialog.vue";
import { toDescriptionFromSecond } from '@/utils/date';
import UserLink from '@/components/Business/User/UserLink.vue';
import DeviceLink from '@/components/Business/Device/DeviceLink.vue'
import OrderLink from '@/components/Business/Order/OrderLink.vue'
//
const defaultSort = {
@ -280,7 +294,7 @@ export default {
name: "Order",
mixins: [$showColumns],
dicts: ['order_status', 'suit_type', 'order_return_type', 'order_return_mode', 'suit_rental_unit', 'suit_riding_rule'],
components: {FormCol, OrderRefundDialog, OrderVerifyDialog},
components: {FormCol, OrderRefundDialog, OrderVerifyDialog, UserLink, DeviceLink, OrderLink},
props: {
query: {
type: Object,
@ -299,9 +313,8 @@ export default {
{key: 'userName', visible: true, label: '用户', minWidth: "150", sortable: true, overflow: false, align: 'left', width: null},
{key: 'device', visible: true, label: '当前设备', minWidth: "150", sortable: false, overflow: false, align: 'left', width: null},
{key: 'totalFee', visible: true, label: '费用', minWidth: "230", sortable: false, overflow: false, align: 'left', width: null},
{key: 'useInfo', visible: true, label: '使用', minWidth: "130", sortable: false, overflow: false, align: 'left', width: null},
{key: 'time', visible: true, label: '时间', minWidth: "180", sortable: false, overflow: false, align: 'left', width: null},
{key: 'payNo', visible: true, label: '支付', minWidth: "180", sortable: false, overflow: false, align: 'left', width: null},
{key: 'payNo', visible: false, label: '支付', minWidth: "180", sortable: false, overflow: false, align: 'left', width: null},
{key: 'use', visible: true, label: '使用', minWidth: "180", sortable: false, overflow: false, align: 'left', width: null},
{key: 'returnType', visible: true, label: '还车', minWidth: null, sortable: false, overflow: false, align: 'center', width: null},
{key: 'mark', visible: false, label: '备注', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},

View File

@ -162,6 +162,9 @@
<el-tab-pane label="支付信息" v-if="checkPermi(['bst:pay:list'])">
<pay :query="{bstId: detail.id, bstType: PayBstType.ORDER}"/>
</el-tab-pane>
<el-tab-pane label="退款信息" v-if="checkPermi(['bst:refund:list'])">
<refund :query="{payBstId: detail.id, payBstType: PayBstType.ORDER}"/>
</el-tab-pane>
</el-tabs>
</el-card>
@ -183,6 +186,7 @@ import DeviceLocation from '@/views/bst/device/view/components/DeviceLocation.vu
import OrderRefundDialog from '@/views/bst/order/components/OrderRefundDialog.vue'
import OrderVerifyDialog from '@/views/bst/order/components/OrderVerifyDialog.vue'
import { toDescriptionFromSecond } from '@/utils/date'
import Refund from '@/views/bst/refund/index.vue'
export default {
name: 'OrderView',
@ -194,7 +198,8 @@ export default {
Bonus,
DeviceLocation,
OrderRefundDialog,
OrderVerifyDialog
OrderVerifyDialog,
Refund
},
data() {
return {

View File

@ -89,7 +89,7 @@
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="orderDeviceList" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="onSortChange">
<el-table size="mini" v-loading="loading" :data="orderDeviceList" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="onSortChange">
<el-table-column type="selection" width="55" align="center" />
<template v-for="column of showColumns">
<el-table-column
@ -107,32 +107,33 @@
<template v-if="column.key === 'id'">
{{d.row[column.key]}}
</template>
<template v-else-if="column.key === 'orderNo'">
<order-link :id="d.row.orderId" :text="d.row.orderNo" size="mini"/>
</template>
<template v-else-if="column.key === 'deviceSn'">
SN{{d.row.deviceSn | dv}}
<dict-tag :options="dict.type.order_device_type" :value="d.row.type" size="mini" style="margin-left: 4px;"/>
<dict-tag :options="dict.type.order_device_status" :value="d.row.status" size="mini" style="margin-left: 4px;"/>
<br/>
MAC{{d.row.deviceMac | dv}}<br/>
车牌{{d.row.deviceVehicleNum | dv}}
{{d.row.deviceSn | dv}}
</template>
<template v-else-if="column.key === 'type'">
<dict-tag :options="dict.type.order_device_type" :value="d.row.type" size="mini" />
</template>
<template v-else-if="column.key === 'status'">
<dict-tag :options="dict.type.order_device_status" :value="d.row.status" size="mini"/>
</template>
<template v-else-if="column.key === 'reason'">
<dict-tag :options="dict.type.order_device_reason" :value="d.row.reason" size="mini"/>
</template>
<template v-else-if="column.key === 'finishPicture'">
<video v-if="d.row[column.key]" :src="d.row[column.key]" style="width: 50px; height: 50px; background-color: #000;" @click="handleVideo(d.row)"/>
<video v-if="d.row[column.key]" :src="d.row[column.key]" style="width: 50px; height: 50px; background-color: #000; cursor: pointer;" @click="handleVideo(d.row)"/>
</template>
<template v-else-if="column.key === 'returnMode'">
<dict-tag :options="dict.type.order_return_mode" :value="d.row[column.key]" size="mini"/><br/>
{{d.row.returnLon | dv }},{{d.row.returnLat | dv}}
</template>
<template v-else-if="column.key === 'startTime'">
开始{{d.row.startTime | dv}}<br/>
结束{{d.row.endTime | dv}}
{{d.row.startTime | dv}} ~ {{d.row.endTime | dv}}
</template>
<template v-else-if="column.key === 'orderNo'">
订单{{d.row.orderNo | dv}} <br/>
用户{{d.row.orderUserName | dv}}<br/>
手机号{{d.row.orderUserPhone | dv}}
<template v-else-if="column.key === 'deviceMchName'">
<user-link :id="d.row.deviceMchId" :text="d.row.deviceMchName" size="mini"/>
</template>
<template v-else>
@ -162,6 +163,8 @@
import { listOrderDevice, getOrderDevice, delOrderDevice, addOrderDevice, updateOrderDevice } from "@/api/bst/orderDevice";
import { $showColumns } from '@/utils/mixins';
import FormCol from "@/components/FormCol/index.vue";
import OrderLink from '@/components/Business/Order/OrderLink.vue'
import UserLink from '@/components/Business/User/UserLink.vue'
//
const defaultSort = {
@ -173,7 +176,7 @@ export default {
name: "OrderDevice",
mixins: [$showColumns],
dicts: ['order_device_type', 'order_device_reason', 'order_device_status', 'order_return_mode' ],
components: {FormCol},
components: {FormCol, OrderLink, UserLink},
props: {
query: {
type: Object,
@ -188,9 +191,13 @@ export default {
//
columns: [
{key: 'id', visible: false, label: 'ID', minWidth: null, sortable: true, overflow: false, align: 'center', width: "80"},
{key: 'deviceSn', visible: true, label: '车辆', minWidth: "150", sortable: true, overflow: false, align: 'left', width: null},
{key: 'orderNo', visible: true, label: '订单', minWidth: "150", sortable: true, overflow: false, align: 'left', width: null},
{key: 'startTime', visible: true, label: '时间', minWidth: null, sortable: false, overflow: false, align: 'center', width: "220"},
{key: 'orderNo', visible: true, label: '订单', minWidth: null, sortable: true, overflow: false, align: 'left', width: "160"},
{key: 'deviceSn', visible: true, label: 'SN', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'deviceMac', visible: true, label: 'MAC', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'deviceVehicleNum', visible: true, label: '车牌号', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'type', visible: true, label: '类型', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'status', visible: true, label: '状态', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'startTime', visible: true, label: '时间', minWidth: null, sortable: false, overflow: false, align: 'center', width: "260"},
{key: 'deviceMchName', visible: true, label: '车辆归属', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'reason', visible: true, label: '换车原因', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'finishPicture', visible: true, label: '还车视频', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},

View File

@ -105,7 +105,7 @@
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="payList" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="onSortChange">
<el-table size="mini" v-loading="loading" :data="payList" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="onSortChange">
<el-table-column type="selection" width="55" align="center" />
<template v-for="column of showColumns">
<el-table-column
@ -124,10 +124,17 @@
{{d.row[column.key]}}
</template>
<template v-else-if="column.key === 'description'">
{{d.row.description | dv}}
<order-link v-if="PayBstType.ORDER === d.row.bstType" :id="d.row.bstId" :text="d.row.description" size="mini" />
<span v-else>{{d.row.description | dv}}</span>
<dict-tag :options="dict.type.pay_bst_type" :value="d.row.bstType" size="mini" style="margin-left: 4px;"/>
<dict-tag :options="dict.type.pay_status" :value="d.row.status" size="mini" style="margin-left: 4px;"/>
</template>
<template v-else-if="column.key === 'amount'">
{{d.row.amount | fix2 | dv}}
</template>
<template v-else-if="['refunding', 'refunded'].includes(column.key)">
<span style="color: red;">{{d.row[column.key] | fix2 | dv}} </span>
</template>
<template v-else>
{{d.row[column.key]}}
</template>
@ -151,6 +158,8 @@
import { listPay, getPay, delPay, addPay, updatePay } from "@/api/bst/pay";
import { $showColumns } from '@/utils/mixins';
import FormCol from "@/components/FormCol/index.vue";
import OrderLink from '@/components/Business/Order/OrderLink.vue'
import { PayBstType } from "@/utils/enums";
//
const defaultSort = {
@ -162,7 +171,7 @@ export default {
name: "Pay",
mixins: [$showColumns],
dicts: ['pay_status', 'pay_bst_type'],
components: {FormCol},
components: {FormCol, OrderLink},
props: {
query: {
type: Object,
@ -171,6 +180,7 @@ export default {
},
data() {
return {
PayBstType,
span: 24,
//
columns: [
@ -182,12 +192,12 @@ export default {
{key: 'refunding', visible: true, label: '退款中', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'refunded', visible: true, label: '已退款', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'channelName', visible: true, label: '渠道', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'payTime', visible: true, label: '支付时间', minWidth: null, sortable: false, overflow: false, align: 'center', width: "100"},
{key: 'payTime', visible: true, label: '支付', minWidth: null, sortable: true, overflow: false, align: 'center', width: "90"},
{key: 'account', visible: true, label: '支付账号', minWidth: null, sortable: true, overflow: true, align: 'center', width: null},
{key: 'channelCost', visible: true, label: '渠道成本', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'ip', visible: true, label: '付款人IP', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'appName', 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"},
{key: 'createTime', visible: true, label: '创建', minWidth: null, sortable: true, overflow: false, align: 'center', width: "90"},
],
//
orderSorts: ['ascending', 'descending', null],

View File

@ -69,6 +69,9 @@
<template v-else-if="column.key === 'status'">
<dict-tag :options="dict.type.real_name_status" :value="d.row[column.key]" />
</template>
<template v-else-if="column.key === 'userName'">
<user-link :id="d.row.userId" :text="d.row.userName" />
</template>
<template v-else>
{{d.row[column.key]}}
</template>
@ -110,6 +113,7 @@
import { listRealName, getRealName, delRealName, addRealName, updateRealName } from "@/api/bst/realName";
import { $showColumns } from '@/utils/mixins';
import FormCol from "@/components/FormCol/index.vue";
import UserLink from '@/components/Business/User/UserLink.vue';
//
const defaultSort = {
@ -120,7 +124,7 @@ const defaultSort = {
export default {
name: "RealName",
mixins: [$showColumns],
components: {FormCol},
components: {FormCol, UserLink},
dicts: ['real_name_status'],
data() {
return {

View File

@ -71,8 +71,17 @@
<template v-if="column.key === 'id'">
{{d.row[column.key]}}
</template>
<template v-else-if="column.key === 'status'">
<dict-tag :options="dict.type.refund_status" :value="d.row[column.key]" />
<template v-else-if="column.key === 'reason'">
<order-link v-if="PayBstType.ORDER === d.row.payBstType" :id="d.row.payBstId" :text="d.row.reason" />
<span v-else>{{d.row.reason | dv}}</span>
<dict-tag :options="dict.type.refund_status" :value="d.row.status" size="mini" style="margin-left: 4px;"/>
<dict-tag :options="dict.type.pay_bst_type" :value="d.row.payBstType" size="mini" style="margin-left: 4px;"/>
</template>
<template v-else-if="column.key === 'amount'">
{{d.row[column.key] | fix2 | dv}}
</template>
<template v-else-if="column.key === 'userName'">
<user-link :id="d.row.userId" :text="d.row.userName" />
</template>
<template v-else>
{{d.row[column.key]}}
@ -97,6 +106,9 @@
import { listRefund, getRefund, delRefund, addRefund, updateRefund } from "@/api/bst/refund";
import { $showColumns } from '@/utils/mixins';
import FormCol from "@/components/FormCol/index.vue";
import UserLink from '@/components/Business/User/UserLink.vue'
import OrderLink from '@/components/Business/Order/OrderLink.vue';
import { PayBstType } from '@/utils/enums';
//
const defaultSort = {
@ -107,22 +119,28 @@ const defaultSort = {
export default {
name: "Refund",
mixins: [$showColumns],
dicts: ['refund_status'],
components: {FormCol},
dicts: ['refund_status', 'pay_bst_type'],
components: {FormCol, UserLink, OrderLink},
props: {
query: {
type: Object,
default: () => ({})
}
},
data() {
return {
PayBstType,
span: 24,
//
columns: [
{key: 'id', visible: false, label: 'ID', minWidth: null, sortable: true, overflow: false, align: 'center', width: "80"},
{key: 'reason', visible: true, label: '原因', minWidth: "200", sortable: true, overflow: false, align: 'left', width: null},
{key: 'amount', 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: null},
{key: 'no', visible: true, label: '退款编号', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'payNo', visible: true, label: '支付单号', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'amount', visible: true, label: '退款金额', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'status', visible: true, label: '状态', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'reason', visible: true, label: '原因', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'userId', visible: false, label: '操作人ID', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'userName', 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: null},
],
//
orderSorts: ['ascending', 'descending', null],
@ -182,6 +200,7 @@ export default {
};
},
created() {
Object.assign(this.queryParams, this.query);
this.getList();
},
methods: {

View File

@ -130,6 +130,9 @@
<template v-else-if="column.key === 'seconds'">
{{toDescriptionFromSecond(d.row.seconds).text | dv}}
</template>
<template v-else-if="column.key === 'userName'">
<user-link :id="d.row.userId" :text="d.row.userName" />
</template>
<template v-else>
{{d.row[column.key]}}
</template>
@ -177,7 +180,7 @@ import { listSuit, delSuit } from "@/api/bst/suit";
import { $showColumns } from '@/utils/mixins';
import SuitEditDialog from '@/views/bst/suit/components/SuitEditDialog.vue';
import { toDescriptionFromSecond } from '@/utils/date';
import UserLink from '@/components/Business/User/UserLink.vue';
//
const defaultSort = {
prop: "orderNum",
@ -188,14 +191,20 @@ export default {
name: "Suit",
mixins: [$showColumns],
dicts: ['suit_status', 'suit_rental_unit', 'suit_riding_rule', 'suit_type'],
components: { SuitEditDialog },
components: { SuitEditDialog, UserLink },
props: {
query: {
type: Object,
default: () => ({})
}
},
data() {
return {
//
columns: [
{key: 'id', visible: false, label: 'ID', minWidth: null, sortable: true, overflow: false, align: 'center', width: "80"},
{key: 'name', visible: true, label: '名称', minWidth: "200", sortable: true, overflow: false, align: 'left', width: null},
{key: 'userName', visible: true, label: '运营商', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'userName', visible: true, label: '所属人', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'depositAmount', visible: true, label: '预存', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'rentalUnit', visible: true, label: '租赁单位', minWidth: null, sortable: true, overflow: false, align: 'center', width: null},
{key: 'instructions', visible: true, label: '说明', minWidth: null, sortable: true, overflow: true, align: 'center', width: null},
@ -242,6 +251,7 @@ export default {
};
},
created() {
Object.assign(this.queryParams, this.query);
this.getList();
},
methods: {

View File

@ -32,16 +32,6 @@
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-has-permi="['bst:userApp:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
@ -84,6 +74,9 @@
<template v-if="column.key === 'id'">
{{d.row[column.key]}}
</template>
<template v-else-if="column.key === 'userName'">
<user-link :id="d.row.userId" :text="d.row.userName" />
</template>
<template v-else>
{{d.row[column.key]}}
</template>
@ -92,13 +85,6 @@
</template>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-has-permi="['bst:userApp:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
@ -145,6 +131,7 @@
import { listUserApp, getUserApp, delUserApp, addUserApp, updateUserApp } from "@/api/bst/userApp";
import { $showColumns } from '@/utils/mixins';
import FormCol from "@/components/FormCol/index.vue";
import UserLink from '@/components/Business/User/UserLink.vue';
//
const defaultSort = {
@ -155,7 +142,13 @@ const defaultSort = {
export default {
name: "UserApp",
mixins: [$showColumns],
components: {FormCol},
components: {FormCol, UserLink},
props: {
query: {
type: Object,
default: () => ({})
}
},
data() {
return {
span: 24,
@ -219,6 +212,7 @@ export default {
};
},
created() {
Object.assign(this.queryParams, this.query);
this.getList();
},
methods: {

View File

@ -163,6 +163,12 @@
<template v-else-if="['amount', 'arrivalAmount'].includes(column.key)">
{{d.row[column.key] | fix2 | dv}}
</template>
<template v-else-if="column.key === 'userName'">
<user-link :id="d.row.userId" :text="d.row.userName" />
</template>
<template v-else-if="column.key === 'verifyUserName'">
<user-link :id="d.row.verifyUserId" :text="d.row.verifyUserName" />
</template>
<template v-else>
{{d.row[column.key]}}
</template>
@ -210,6 +216,8 @@ import FormCol from "@/components/FormCol/index.vue";
import WithdrawVerifyDialog from '@/views/bst/withdraw/components/WithdrawVerifyDialog.vue';
import WithdrawAddDialog from '@/views/bst/withdraw/components/WithdrawAddDialog.vue';
import { AccountType } from '@/utils/enums';
import UserLink from '@/components/Business/User/UserLink.vue'
//
const defaultSort = {
prop: "createTime",
@ -220,7 +228,7 @@ export default {
name: "Withdraw",
mixins: [$showColumns],
dicts: ['account_type', 'withdraw_service_type', 'withdraw_status'],
components: {FormCol, WithdrawVerifyDialog, WithdrawAddDialog},
components: {FormCol, WithdrawVerifyDialog, WithdrawAddDialog, UserLink},
props: {
query: {
type: Object,

View File

@ -72,30 +72,16 @@
<el-table v-loading="loading" :data="noticeList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="序号" align="center" prop="noticeId" width="100" />
<el-table-column
label="公告标题"
align="center"
prop="noticeTitle"
:show-overflow-tooltip="true"
/>
<el-table-column label="公告类型" align="center" prop="noticeType" width="100">
<el-table-column label="标题" align="left" prop="noticeTitle">
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_notice_type" :value="scope.row.noticeType"/>
{{scope.row.noticeTitle | dv}}
<dict-tag :options="dict.type.sys_notice_type" :value="scope.row.noticeType" size="mini" style="margin-left: 4px;"/>
<dict-tag :options="dict.type.sys_notice_status" :value="scope.row.status" size="mini" style="margin-left: 4px;"/>
</template>
</el-table-column>
<el-table-column label="状态" align="center" prop="status" width="100">
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_notice_status" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column label="创建者" align="center" prop="createBy" width="100" />
<el-table-column label="创建时间" align="center" prop="createTime" width="100">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<el-table-column label="创建者" align="center" prop="createBy" width="200" />
<el-table-column label="创建时间" align="center" prop="createTime" width="180"/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="200">
<template slot-scope="scope">
<el-button
size="mini"

View File

@ -137,6 +137,12 @@
<el-tag :key="index" v-if="!isEmpty(role.roleName)" size="small" style="margin-right: 4px;">{{role.roleName}}</el-tag>
</template>
</template>
<template v-else-if="['nickName', 'userName', 'email'].includes(column.key)">
<user-link :id="d.row.userId" :text="d.row[column.key]" />
</template>
<template v-else-if="column.key === 'agentName'">
<user-link :id="d.row.agentId" :text="d.row.agentName" />
</template>
<template v-else>
{{d.row[column.key]}}
</template>
@ -216,12 +222,14 @@ import UserFormDialog from '@/views/system/user/components/UserFormDialog'
import DeptSelect from '@/components/Business/Dept/DeptSelect.vue'
import { UserType, WithdrawServiceType } from '@/utils/enums'
import BooleanTag from '@/components/BooleanTag/index.vue'
import UserLink from '@/components/Business/User/UserLink.vue'
export default {
name: "User",
mixins: [$showColumns],
dicts: ['user_status', 'sys_user_sex', 'user_employ_status', 'withdraw_service_type'],
components: {UserFormDialog, FormCol, DeptSelect, BooleanTag },
components: {UserFormDialog, FormCol, DeptSelect, BooleanTag, UserLink},
data() {
return {
WithdrawServiceType,

View File

@ -48,21 +48,39 @@
<el-card class="card-box" style="margin-top: 12px;" shadow="hover" v-if="detail.userId">
<el-tabs>
<el-tab-pane label="设备列表" lazy v-if="checkPermi(['bst:device:list'])">
<el-tab-pane label="设备" lazy v-if="checkPermi(['bst:device:list'])">
<device :query="{mchId: detail.userId}" />
</el-tab-pane>
<el-tab-pane label="运营区列表" lazy v-if="checkPermi(['bst:area:list'])">
<el-tab-pane label="车辆型号" lazy v-if="checkPermi(['bst:model:list'])">
<model :query="{userId: detail.userId}" />
</el-tab-pane>
<el-tab-pane label="套餐" lazy v-if="checkPermi(['bst:suit:list'])">
<suit :query="{userId: detail.userId}" />
</el-tab-pane>
<el-tab-pane label="运营区" lazy v-if="checkPermi(['bst:area:list'])">
<area-index :query="{userId: detail.userId}" />
</el-tab-pane>
<el-tab-pane label="收入订单" lazy v-if="checkPermi(['bst:order:list'])">
<order :query="{bonusUserId: detail.userId}" />
</el-tab-pane>
<el-tab-pane label="车辆出租记录" lazy v-if="checkPermi(['bst:orderDevice:list'])">
<order-device :query="{deviceMchId: detail.userId}" />
</el-tab-pane>
<el-tab-pane label="分成记录" lazy v-if="checkPermi(['bst:bonus:list'])">
<bonus :query="{arrivalId: detail.userId, arrivalTypes: BonusArrivalType.userList()}" />
</el-tab-pane>
<el-tab-pane label="提现记录" lazy v-if="checkPermi(['bst:withdraw:list'])">
<withdraw :query="{userId: detail.userId}" />
</el-tab-pane>
<el-tab-pane label="账变记录" lazy v-if="checkPermi(['bst:balanceLog:list'])">
<balance-log :query="{userId: detail.userId}" />
</el-tab-pane>
<el-tab-pane label="收款账户" lazy v-if="checkPermi(['bst:account:list'])">
<account :query="{userId: detail.userId}" />
</el-tab-pane>
<el-tab-pane label="用户APP" lazy v-if="checkPermi(['bst:userApp:list'])">
<user-app :query="{userId: detail.userId}" />
</el-tab-pane>
</el-tabs>
</el-card>
</div>
@ -83,7 +101,12 @@ import Device from '@/views/bst/device/index.vue'
import AreaIndex from '@/views/bst/area/index.vue'
import Order from '@/views/bst/order/index.vue'
import BalanceLog from '@/views/bst/balanceLog/index.vue'
import UserApp from '@/views/bst/userApp/index.vue'
import Suit from '@/views/bst/suit/index.vue'
import Account from '@/views/bst/account/index.vue'
import Model from '@/views/bst/model/index.vue'
import OrderDevice from '@/views/bst/orderDevice/index.vue'
import Withdraw from '@/views/bst/withdraw/index.vue'
export default {
name: 'UserView',
components: {
@ -97,7 +120,13 @@ export default {
Device,
Order,
AreaIndex,
BalanceLog
BalanceLog,
UserApp,
Suit,
Account,
Model,
OrderDevice,
Withdraw
},
data() {
return {