|
|
|
@ -26,54 +26,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
<div v-loading="loading" class="transfer-body">
|
|
|
|
<div v-loading="loading" class="transfer-body">
|
|
|
|
<p v-if="loadError" class="transfer-error">{{ loadError }}</p>
|
|
|
|
<p v-if="loadError" class="transfer-error">{{ loadError }}</p>
|
|
|
|
<p v-else class="transfer-hint">目标窗口与目标业务只能二选一</p>
|
|
|
|
<template v-else>
|
|
|
|
<div v-if="!loadError" class="transfer-columns">
|
|
|
|
<p class="transfer-hint">请选择要转移到的目标业务</p>
|
|
|
|
<section class="transfer-column">
|
|
|
|
<div v-if="businesses.length > 0" class="transfer-list" role="listbox">
|
|
|
|
<h3 class="transfer-column-title">目标窗口</h3>
|
|
|
|
<button
|
|
|
|
<el-radio-group
|
|
|
|
v-for="biz in businesses"
|
|
|
|
v-if="windows.length > 0"
|
|
|
|
:key="biz.businessUid"
|
|
|
|
v-model="selectedWindowUid"
|
|
|
|
type="button"
|
|
|
|
class="transfer-radio-group"
|
|
|
|
class="transfer-card"
|
|
|
|
@change="onWindowSelectionChange"
|
|
|
|
:class="{ 'is-selected': selectedBusinessUid === biz.businessUid }"
|
|
|
|
|
|
|
|
role="option"
|
|
|
|
|
|
|
|
:aria-selected="selectedBusinessUid === biz.businessUid"
|
|
|
|
|
|
|
|
@click="selectedBusinessUid = biz.businessUid"
|
|
|
|
>
|
|
|
|
>
|
|
|
|
<el-radio
|
|
|
|
<div class="transfer-card-head">
|
|
|
|
v-for="win in windows"
|
|
|
|
<span class="transfer-card-indicator" aria-hidden="true" />
|
|
|
|
:key="win.windowUid"
|
|
|
|
<span class="transfer-card-name">{{ biz.businessName }}</span>
|
|
|
|
:value="win.windowUid"
|
|
|
|
<span v-if="biz.wins.length > 0" class="transfer-card-badge">
|
|
|
|
class="transfer-radio"
|
|
|
|
{{ biz.wins.length }} 个窗口
|
|
|
|
>
|
|
|
|
|
|
|
|
<span class="transfer-radio-label">{{ win.windowName }}</span>
|
|
|
|
|
|
|
|
<span v-if="win.windowCode" class="transfer-radio-sub">
|
|
|
|
|
|
|
|
{{ win.windowCode }}
|
|
|
|
|
|
|
|
</span>
|
|
|
|
</span>
|
|
|
|
</el-radio>
|
|
|
|
</div>
|
|
|
|
</el-radio-group>
|
|
|
|
<div v-if="biz.wins.length > 0" class="transfer-win-tags">
|
|
|
|
<el-empty v-else description="暂无可选窗口" :image-size="56" />
|
|
|
|
<span
|
|
|
|
</section>
|
|
|
|
v-for="win in biz.wins"
|
|
|
|
|
|
|
|
:key="win.windowUid"
|
|
|
|
<section class="transfer-column">
|
|
|
|
class="transfer-win-tag"
|
|
|
|
<h3 class="transfer-column-title">目标业务</h3>
|
|
|
|
>
|
|
|
|
<el-radio-group
|
|
|
|
{{ win.windowName }}
|
|
|
|
v-if="businesses.length > 0"
|
|
|
|
|
|
|
|
v-model="selectedBusinessUid"
|
|
|
|
|
|
|
|
class="transfer-radio-group"
|
|
|
|
|
|
|
|
@change="onBusinessSelectionChange"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<el-radio
|
|
|
|
|
|
|
|
v-for="biz in businesses"
|
|
|
|
|
|
|
|
:key="biz.businessUid"
|
|
|
|
|
|
|
|
:value="biz.businessUid"
|
|
|
|
|
|
|
|
class="transfer-radio"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<span class="transfer-radio-label">{{ biz.businessName }}</span>
|
|
|
|
|
|
|
|
<span v-if="biz.businessCode" class="transfer-radio-sub">
|
|
|
|
|
|
|
|
{{ biz.businessCode }}
|
|
|
|
|
|
|
|
</span>
|
|
|
|
</span>
|
|
|
|
</el-radio>
|
|
|
|
</div>
|
|
|
|
</el-radio-group>
|
|
|
|
<p v-else class="transfer-no-wins">暂无可办理窗口</p>
|
|
|
|
<el-empty v-else description="暂无可选业务" :image-size="56" />
|
|
|
|
</button>
|
|
|
|
</section>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<el-empty v-else description="暂无可选业务" :image-size="56" />
|
|
|
|
|
|
|
|
</template>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<div class="transfer-footer">
|
|
|
|
<div class="transfer-footer">
|
|
|
|
@ -81,7 +67,7 @@
|
|
|
|
<el-button
|
|
|
|
<el-button
|
|
|
|
type="primary"
|
|
|
|
type="primary"
|
|
|
|
:loading="submitting"
|
|
|
|
:loading="submitting"
|
|
|
|
:disabled="loading || Boolean(loadError) || !hasTransferTarget"
|
|
|
|
:disabled="loading || Boolean(loadError) || selectedBusinessUid === undefined"
|
|
|
|
@click="handleConfirm"
|
|
|
|
@click="handleConfirm"
|
|
|
|
>
|
|
|
|
>
|
|
|
|
确认转移
|
|
|
|
确认转移
|
|
|
|
@ -93,8 +79,8 @@
|
|
|
|
<script setup lang="ts">
|
|
|
|
<script setup lang="ts">
|
|
|
|
import { Close, Minus } from "@element-plus/icons-vue";
|
|
|
|
import { Close, Minus } from "@element-plus/icons-vue";
|
|
|
|
import { appWindow } from "@tauri-apps/api/window";
|
|
|
|
import { appWindow } from "@tauri-apps/api/window";
|
|
|
|
import { ElButton, ElEmpty, ElRadio, ElRadioGroup } from "element-plus";
|
|
|
|
import { ElButton, ElEmpty } from "element-plus";
|
|
|
|
import { computed, onMounted, onUnmounted, ref } from "vue";
|
|
|
|
import { onMounted, onUnmounted, ref } from "vue";
|
|
|
|
import { api } from "../api";
|
|
|
|
import { api } from "../api";
|
|
|
|
import { showErrorNative, showWarningNative } from "../host/dialog";
|
|
|
|
import { showErrorNative, showWarningNative } from "../host/dialog";
|
|
|
|
import { emitTransferDone, listenTransferOpen } from "../host/events";
|
|
|
|
import { emitTransferDone, listenTransferOpen } from "../host/events";
|
|
|
|
@ -102,69 +88,16 @@ import { log } from "../host/logger";
|
|
|
|
import { getSession, setSession } from "../host/session";
|
|
|
|
import { getSession, setSession } from "../host/session";
|
|
|
|
import type { SessionState } from "../host/types";
|
|
|
|
import type { SessionState } from "../host/types";
|
|
|
|
import type { TransferBusiness } from "../types/transfer";
|
|
|
|
import type { TransferBusiness } from "../types/transfer";
|
|
|
|
import type { ServiceWindow } from "../types/window";
|
|
|
|
|
|
|
|
import { closeTransferWindow, focusNamedWindow, minimizeWindow } from "../host/window";
|
|
|
|
import { closeTransferWindow, focusNamedWindow, minimizeWindow } from "../host/window";
|
|
|
|
import {
|
|
|
|
import { buildTransferRequest, normalizeBusinessList } from "../utils/transfer";
|
|
|
|
buildTransferRequest,
|
|
|
|
|
|
|
|
normalizeBusinessList,
|
|
|
|
|
|
|
|
normalizeTransferWindows,
|
|
|
|
|
|
|
|
type TransferTarget,
|
|
|
|
|
|
|
|
} from "../utils/transfer";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const loading = ref(false);
|
|
|
|
const loading = ref(false);
|
|
|
|
const submitting = ref(false);
|
|
|
|
const submitting = ref(false);
|
|
|
|
const loadError = ref("");
|
|
|
|
const loadError = ref("");
|
|
|
|
const ticketUid = ref(-1);
|
|
|
|
const ticketUid = ref(-1);
|
|
|
|
const currentWindowUid = ref(0);
|
|
|
|
|
|
|
|
const windows = ref<ServiceWindow[]>([]);
|
|
|
|
|
|
|
|
const businesses = ref<TransferBusiness[]>([]);
|
|
|
|
const businesses = ref<TransferBusiness[]>([]);
|
|
|
|
const selectedWindowUid = ref<number | undefined>(undefined);
|
|
|
|
|
|
|
|
const selectedBusinessUid = ref<number | undefined>(undefined);
|
|
|
|
const selectedBusinessUid = ref<number | undefined>(undefined);
|
|
|
|
|
|
|
|
|
|
|
|
const hasTransferTarget = computed(() => {
|
|
|
|
|
|
|
|
const hasWindow = selectedWindowUid.value !== undefined;
|
|
|
|
|
|
|
|
const hasBusiness = selectedBusinessUid.value !== undefined;
|
|
|
|
|
|
|
|
return hasWindow !== hasBusiness;
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function onWindowSelectionChange(): void {
|
|
|
|
|
|
|
|
if (selectedWindowUid.value !== undefined) {
|
|
|
|
|
|
|
|
selectedBusinessUid.value = undefined;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function onBusinessSelectionChange(): void {
|
|
|
|
|
|
|
|
if (selectedBusinessUid.value !== undefined) {
|
|
|
|
|
|
|
|
selectedWindowUid.value = undefined;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function resolveTransferTarget(): TransferTarget | null {
|
|
|
|
|
|
|
|
if (
|
|
|
|
|
|
|
|
selectedWindowUid.value !== undefined &&
|
|
|
|
|
|
|
|
selectedBusinessUid.value === undefined
|
|
|
|
|
|
|
|
) {
|
|
|
|
|
|
|
|
const windowUid = selectedWindowUid.value;
|
|
|
|
|
|
|
|
if (windows.value.some((item) => item.windowUid === windowUid)) {
|
|
|
|
|
|
|
|
return { kind: "window", windowUid };
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (
|
|
|
|
|
|
|
|
selectedBusinessUid.value !== undefined &&
|
|
|
|
|
|
|
|
selectedWindowUid.value === undefined
|
|
|
|
|
|
|
|
) {
|
|
|
|
|
|
|
|
const business = businesses.value.find(
|
|
|
|
|
|
|
|
(item) => item.businessUid === selectedBusinessUid.value,
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
if (business) {
|
|
|
|
|
|
|
|
return { kind: "business", business };
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let unlistenTransferOpen: (() => void) | null = null;
|
|
|
|
let unlistenTransferOpen: (() => void) | null = null;
|
|
|
|
let unlistenWindowFocus: (() => void) | null = null;
|
|
|
|
let unlistenWindowFocus: (() => void) | null = null;
|
|
|
|
|
|
|
|
|
|
|
|
@ -214,17 +147,25 @@ function getActionTicketNo(res: unknown): string {
|
|
|
|
return String(getActionData(res).ticketNo ?? "");
|
|
|
|
return String(getActionData(res).ticketNo ?? "");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function resolveSelectedBusiness(): TransferBusiness | null {
|
|
|
|
|
|
|
|
if (selectedBusinessUid.value === undefined) {
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
|
|
|
businesses.value.find(
|
|
|
|
|
|
|
|
(item) => item.businessUid === selectedBusinessUid.value,
|
|
|
|
|
|
|
|
) ?? null
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
async function loadTransferOptions(explicitTicketUid?: number): Promise<void> {
|
|
|
|
async function loadTransferOptions(explicitTicketUid?: number): Promise<void> {
|
|
|
|
loading.value = true;
|
|
|
|
loading.value = true;
|
|
|
|
loadError.value = "";
|
|
|
|
loadError.value = "";
|
|
|
|
windows.value = [];
|
|
|
|
|
|
|
|
businesses.value = [];
|
|
|
|
businesses.value = [];
|
|
|
|
selectedWindowUid.value = undefined;
|
|
|
|
|
|
|
|
selectedBusinessUid.value = undefined;
|
|
|
|
selectedBusinessUid.value = undefined;
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
const session = await getSession();
|
|
|
|
const session = await getSession();
|
|
|
|
currentWindowUid.value = Number(session.winUid ?? 0);
|
|
|
|
|
|
|
|
ticketUid.value = resolveTicketUidFromSession(session, explicitTicketUid);
|
|
|
|
ticketUid.value = resolveTicketUidFromSession(session, explicitTicketUid);
|
|
|
|
if (ticketUid.value <= 0) {
|
|
|
|
if (ticketUid.value <= 0) {
|
|
|
|
loadError.value =
|
|
|
|
loadError.value =
|
|
|
|
@ -236,11 +177,7 @@ async function loadTransferOptions(explicitTicketUid?: number): Promise<void> {
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const [winRes, bizRes] = await Promise.all([
|
|
|
|
const bizRes = await api.action.businessList();
|
|
|
|
api.window.list(),
|
|
|
|
|
|
|
|
api.action.businessList(),
|
|
|
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
windows.value = normalizeTransferWindows(winRes, currentWindowUid.value);
|
|
|
|
|
|
|
|
businesses.value = normalizeBusinessList(bizRes);
|
|
|
|
businesses.value = normalizeBusinessList(bizRes);
|
|
|
|
} catch (error) {
|
|
|
|
} catch (error) {
|
|
|
|
loadError.value = error instanceof Error ? error.message : String(error);
|
|
|
|
loadError.value = error instanceof Error ? error.message : String(error);
|
|
|
|
@ -273,12 +210,9 @@ async function handleCloseClick(): Promise<void> {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
async function handleConfirm(): Promise<void> {
|
|
|
|
async function handleConfirm(): Promise<void> {
|
|
|
|
const target = resolveTransferTarget();
|
|
|
|
const business = resolveSelectedBusiness();
|
|
|
|
if (!target) {
|
|
|
|
if (!business) {
|
|
|
|
await showWarningNative(
|
|
|
|
await showWarningNative("请选择目标业务", "票号转移");
|
|
|
|
"请选择目标窗口或目标业务(只能二选一)",
|
|
|
|
|
|
|
|
"票号转移",
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -286,7 +220,7 @@ async function handleConfirm(): Promise<void> {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
const session = await getSession();
|
|
|
|
const session = await getSession();
|
|
|
|
const res = await api.action.transfer(
|
|
|
|
const res = await api.action.transfer(
|
|
|
|
buildTransferRequest(session, ticketUid.value, target),
|
|
|
|
buildTransferRequest(session, ticketUid.value, business),
|
|
|
|
);
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
if (isActionSuccess(res)) {
|
|
|
|
if (isActionSuccess(res)) {
|
|
|
|
@ -295,18 +229,10 @@ async function handleConfirm(): Promise<void> {
|
|
|
|
activeTicketUid: null,
|
|
|
|
activeTicketUid: null,
|
|
|
|
transferTicketUid: null,
|
|
|
|
transferTicketUid: null,
|
|
|
|
});
|
|
|
|
});
|
|
|
|
const targetWindowName =
|
|
|
|
|
|
|
|
target.kind === "window"
|
|
|
|
|
|
|
|
? windows.value.find((item) => item.windowUid === target.windowUid)
|
|
|
|
|
|
|
|
?.windowName
|
|
|
|
|
|
|
|
: undefined;
|
|
|
|
|
|
|
|
const businessName =
|
|
|
|
|
|
|
|
target.kind === "business" ? target.business.businessName : undefined;
|
|
|
|
|
|
|
|
await emitTransferDone({
|
|
|
|
await emitTransferDone({
|
|
|
|
success: true,
|
|
|
|
success: true,
|
|
|
|
ticketNo: getActionTicketNo(res),
|
|
|
|
ticketNo: getActionTicketNo(res),
|
|
|
|
targetWindowName,
|
|
|
|
businessName: business.displayLabel,
|
|
|
|
businessName,
|
|
|
|
|
|
|
|
message: getActionMessage(res),
|
|
|
|
message: getActionMessage(res),
|
|
|
|
});
|
|
|
|
});
|
|
|
|
await closeTransferWindow();
|
|
|
|
await closeTransferWindow();
|
|
|
|
@ -418,8 +344,10 @@ onUnmounted(() => {
|
|
|
|
.transfer-body {
|
|
|
|
.transfer-body {
|
|
|
|
flex: 1;
|
|
|
|
flex: 1;
|
|
|
|
min-height: 0;
|
|
|
|
min-height: 0;
|
|
|
|
padding: 16px;
|
|
|
|
padding: 14px 16px 12px;
|
|
|
|
overflow: hidden;
|
|
|
|
overflow: hidden;
|
|
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.transfer-error {
|
|
|
|
.transfer-error {
|
|
|
|
@ -430,67 +358,130 @@ onUnmounted(() => {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.transfer-hint {
|
|
|
|
.transfer-hint {
|
|
|
|
margin: 0 0 12px;
|
|
|
|
margin: 0 0 10px;
|
|
|
|
|
|
|
|
flex-shrink: 0;
|
|
|
|
font-size: 13px;
|
|
|
|
font-size: 13px;
|
|
|
|
color: #909399;
|
|
|
|
color: #909399;
|
|
|
|
line-height: 1.4;
|
|
|
|
line-height: 1.4;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.transfer-columns {
|
|
|
|
.transfer-list {
|
|
|
|
display: grid;
|
|
|
|
flex: 1;
|
|
|
|
grid-template-columns: 1fr 1fr;
|
|
|
|
|
|
|
|
gap: 16px;
|
|
|
|
|
|
|
|
height: 100%;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.transfer-column {
|
|
|
|
|
|
|
|
min-height: 0;
|
|
|
|
min-height: 0;
|
|
|
|
padding: 12px;
|
|
|
|
overflow-y: auto;
|
|
|
|
border-radius: 8px;
|
|
|
|
|
|
|
|
background: #f5f7fa;
|
|
|
|
|
|
|
|
border: 1px solid #e4e7ed;
|
|
|
|
|
|
|
|
display: flex;
|
|
|
|
display: flex;
|
|
|
|
flex-direction: column;
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
|
|
gap: 10px;
|
|
|
|
|
|
|
|
padding-right: 2px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.transfer-column-title {
|
|
|
|
.transfer-card {
|
|
|
|
margin: 0 0 12px;
|
|
|
|
width: 100%;
|
|
|
|
font-size: 14px;
|
|
|
|
margin: 0;
|
|
|
|
font-weight: 600;
|
|
|
|
padding: 12px 14px;
|
|
|
|
color: #303133;
|
|
|
|
text-align: left;
|
|
|
|
|
|
|
|
border: 1px solid #dcdfe6;
|
|
|
|
|
|
|
|
border-radius: 8px;
|
|
|
|
|
|
|
|
background: #fff;
|
|
|
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
|
|
|
transition:
|
|
|
|
|
|
|
|
border-color 0.15s ease,
|
|
|
|
|
|
|
|
background-color 0.15s ease,
|
|
|
|
|
|
|
|
box-shadow 0.15s ease;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.transfer-radio-group {
|
|
|
|
.transfer-card:hover {
|
|
|
|
|
|
|
|
border-color: #b3d4fc;
|
|
|
|
|
|
|
|
background: #fafcff;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.transfer-card.is-selected {
|
|
|
|
|
|
|
|
border-color: #409eff;
|
|
|
|
|
|
|
|
background: #ecf5ff;
|
|
|
|
|
|
|
|
box-shadow: 0 0 0 1px rgba(64, 158, 255, 0.15);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.transfer-card-head {
|
|
|
|
display: flex;
|
|
|
|
display: flex;
|
|
|
|
flex-direction: column;
|
|
|
|
align-items: center;
|
|
|
|
align-items: flex-start;
|
|
|
|
|
|
|
|
gap: 8px;
|
|
|
|
gap: 8px;
|
|
|
|
width: 100%;
|
|
|
|
min-width: 0;
|
|
|
|
flex: 1;
|
|
|
|
|
|
|
|
min-height: 0;
|
|
|
|
|
|
|
|
overflow-y: auto;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.transfer-radio {
|
|
|
|
.transfer-card-indicator {
|
|
|
|
display: flex;
|
|
|
|
flex-shrink: 0;
|
|
|
|
align-items: flex-start;
|
|
|
|
width: 14px;
|
|
|
|
margin-right: 0;
|
|
|
|
height: 14px;
|
|
|
|
height: auto;
|
|
|
|
border: 2px solid #c0c4cc;
|
|
|
|
white-space: normal;
|
|
|
|
border-radius: 50%;
|
|
|
|
|
|
|
|
background: #fff;
|
|
|
|
|
|
|
|
transition:
|
|
|
|
|
|
|
|
border-color 0.15s ease,
|
|
|
|
|
|
|
|
background-color 0.15s ease;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.transfer-radio-label {
|
|
|
|
.transfer-card.is-selected .transfer-card-indicator {
|
|
|
|
display: block;
|
|
|
|
border-color: #409eff;
|
|
|
|
|
|
|
|
background: #409eff;
|
|
|
|
|
|
|
|
box-shadow: inset 0 0 0 3px #ecf5ff;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.transfer-card-name {
|
|
|
|
|
|
|
|
flex: 1;
|
|
|
|
|
|
|
|
min-width: 0;
|
|
|
|
|
|
|
|
font-size: 15px;
|
|
|
|
|
|
|
|
font-weight: 600;
|
|
|
|
color: #303133;
|
|
|
|
color: #303133;
|
|
|
|
|
|
|
|
line-height: 1.35;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.transfer-card-badge {
|
|
|
|
|
|
|
|
flex-shrink: 0;
|
|
|
|
|
|
|
|
padding: 2px 8px;
|
|
|
|
|
|
|
|
font-size: 12px;
|
|
|
|
line-height: 1.4;
|
|
|
|
line-height: 1.4;
|
|
|
|
|
|
|
|
color: #606266;
|
|
|
|
|
|
|
|
background: #f4f4f5;
|
|
|
|
|
|
|
|
border-radius: 10px;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.transfer-card.is-selected .transfer-card-badge {
|
|
|
|
|
|
|
|
color: #409eff;
|
|
|
|
|
|
|
|
background: rgba(64, 158, 255, 0.12);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.transfer-win-tags {
|
|
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
|
|
flex-wrap: wrap;
|
|
|
|
|
|
|
|
gap: 6px;
|
|
|
|
|
|
|
|
margin-top: 10px;
|
|
|
|
|
|
|
|
padding-left: 22px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.transfer-radio-sub {
|
|
|
|
.transfer-win-tag {
|
|
|
|
display: block;
|
|
|
|
display: inline-block;
|
|
|
|
margin-top: 2px;
|
|
|
|
max-width: 100%;
|
|
|
|
|
|
|
|
padding: 3px 8px;
|
|
|
|
font-size: 12px;
|
|
|
|
font-size: 12px;
|
|
|
|
color: #909399;
|
|
|
|
line-height: 1.35;
|
|
|
|
line-height: 1.3;
|
|
|
|
color: #606266;
|
|
|
|
|
|
|
|
background: #f5f7fa;
|
|
|
|
|
|
|
|
border: 1px solid #ebeef5;
|
|
|
|
|
|
|
|
border-radius: 4px;
|
|
|
|
|
|
|
|
word-break: break-all;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.transfer-card.is-selected .transfer-win-tag {
|
|
|
|
|
|
|
|
color: #409eff;
|
|
|
|
|
|
|
|
background: #fff;
|
|
|
|
|
|
|
|
border-color: #c6e2ff;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.transfer-no-wins {
|
|
|
|
|
|
|
|
margin: 8px 0 0 22px;
|
|
|
|
|
|
|
|
font-size: 12px;
|
|
|
|
|
|
|
|
color: #c0c4cc;
|
|
|
|
|
|
|
|
line-height: 1.4;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.transfer-footer {
|
|
|
|
.transfer-footer {
|
|
|
|
|