@@ -1,6 +1,6 @@
< script setup lang = "ts" >
< script setup lang = "ts" >
import { computed , onMounted , reactive , ref } from 'vue'
import { computed , onMounted , reactive , ref } from 'vue'
import { Eye , MoreHorizontal , Pencil , Truck , XCircle } from '@lucide/vue'
import { Eye , MoreHorizontal , Pencil , Printer , Truck , XCircle } from '@lucide/vue'
import { ElMessage , ElMessageBox } from 'element-plus'
import { ElMessage , ElMessageBox } from 'element-plus'
import { useRouter } from 'vue-router'
import { useRouter } from 'vue-router'
import { getApiErrorDetails , type ApiErrorDetails } from '@/shared/api/http'
import { getApiErrorDetails , type ApiErrorDetails } from '@/shared/api/http'
@@ -13,8 +13,9 @@ import QueryToolbar, { type QueryField, type QueryModel } from '@/shared/compone
import StatusBadge from '@/shared/components/StatusBadge.vue'
import StatusBadge from '@/shared/components/StatusBadge.vue'
import OperationErrorToast from '@/shared/components/OperationErrorToast.vue'
import OperationErrorToast from '@/shared/components/OperationErrorToast.vue'
import { useAccessPreviewStore } from '@/core/access/accessPreview'
import { useAccessPreviewStore } from '@/core/access/accessPreview'
import { cancelDispatch , listDispatches , transferDispatchToDelivery , updateDispatch , type DispatchSummaryDto } from '../api/dispatches'
import { cancelDispatch , getDispatch , listDispatches , transferDispatchToDelivery , updateDispatch , type DispatchSummaryDto } from '../api/dispatches'
import AppDialog from '@/shared/components/AppDialog.vue'
import AppDialog from '@/shared/components/AppDialog.vue'
import DispatchBolPrintDialog from '../components/DispatchBolPrintDialog.vue'
import type { DispatchListItem } from '../types'
import type { DispatchListItem } from '../types'
import { formatOverseasDateTime } from '../lastMilePresentation'
import { formatOverseasDateTime } from '../lastMilePresentation'
import { overseasWarehousePermissions as permission } from '../permissions'
import { overseasWarehousePermissions as permission } from '../permissions'
@@ -31,6 +32,7 @@ const filters = ref<QueryModel>({ dispatchNo: '', vehiclePlate: '', status: '',
const transferOpen = ref ( false ) ; const transferRow = ref < DispatchListItem | null > ( null ) ; const transferSaving = ref ( false )
const transferOpen = ref ( false ) ; const transferRow = ref < DispatchListItem | null > ( null ) ; const transferSaving = ref ( false )
const mutationError = ref < ApiErrorDetails | null > ( null )
const mutationError = ref < ApiErrorDetails | null > ( null )
const editOpen = ref ( false ) ; const editRow = ref < DispatchListItem | null > ( null ) ; const editSaving = ref ( false )
const editOpen = ref ( false ) ; const editRow = ref < DispatchListItem | null > ( null ) ; const editSaving = ref ( false )
const bolOpen = ref ( false ) ; const bolDetail = ref < DispatchSummaryDto | null > ( null ) ; const bolLoadingNo = ref ( '' )
const dispatchSnapshots = new Map < string , DispatchSummaryDto > ( )
const dispatchSnapshots = new Map < string , DispatchSummaryDto > ( )
const editForm = reactive ( { vehiclePlate : '' , driverName : '' , driverPhone : '' , carrierName : '' , route : '' , departAt : '' , fbaAppointmentNo : '' , fbaAppointmentStatus : '' , vehicleAppointmentStatus : '' , estimatedArrivalAt : '' } )
const editForm = reactive ( { vehiclePlate : '' , driverName : '' , driverPhone : '' , carrierName : '' , route : '' , departAt : '' , fbaAppointmentNo : '' , fbaAppointmentStatus : '' , vehicleAppointmentStatus : '' , estimatedArrivalAt : '' } )
const transferForm = reactive ( { plannedDeliveryAt : '' , deliveryMethod : '' , waybillNo : '' , carrierName : '' , pickupMethod : '' , loadingType : '' , vehicleType : '' , vehicleSize : '' , driverName : '' , driverPhone : '' , vehiclePlate : '' , appointmentAccount : '' , sellerName : '' , deliveryFee : undefined as number | undefined , loadingFee : undefined as number | undefined , appointmentFee : undefined as number | undefined , cartonMarksJson : '' , remark : '' } )
const transferForm = reactive ( { plannedDeliveryAt : '' , deliveryMethod : '' , waybillNo : '' , carrierName : '' , pickupMethod : '' , loadingType : '' , vehicleType : '' , vehicleSize : '' , driverName : '' , driverPhone : '' , vehiclePlate : '' , appointmentAccount : '' , sellerName : '' , deliveryFee : undefined as number | undefined , loadingFee : undefined as number | undefined , appointmentFee : undefined as number | undefined , cartonMarksJson : '' , remark : '' } )
@@ -74,7 +76,7 @@ const fields = computed<QueryField[]>(() => [
] )
] )
const columns : DataTableColumn [ ] = [
const columns : DataTableColumn [ ] = [
{ key : 'actions' , label : '操作' , width : 270 , fixed : 'left' , slotName : 'actions' } ,
{ key : 'actions' , label : '操作' , width : 380 , fixed : 'left' , slotName : 'actions' } ,
{ key : 'dispatchNo' , prop : 'dispatchNo' , label : '排车单号' , minWidth : 170 , fixed : 'left' } ,
{ key : 'dispatchNo' , prop : 'dispatchNo' , label : '排车单号' , minWidth : 170 , fixed : 'left' } ,
{ key : 'vehiclePlate' , prop : 'vehiclePlate' , label : '车牌号' , minWidth : 130 } ,
{ key : 'vehiclePlate' , prop : 'vehiclePlate' , label : '车牌号' , minWidth : 130 } ,
{ key : 'driverName' , prop : 'driverName' , label : '司机' , minWidth : 120 } ,
{ key : 'driverName' , prop : 'driverName' , label : '司机' , minWidth : 120 } ,
@@ -185,6 +187,19 @@ async function load(model: QueryModel = filters.value) {
function search ( model : QueryModel ) { page . value = 1 ; void load ( model ) }
function search ( model : QueryModel ) { page . value = 1 ; void load ( model ) }
function reset ( model : QueryModel ) { page . value = 1 ; void load ( model ) }
function reset ( model : QueryModel ) { page . value = 1 ; void load ( model ) }
function openDetail ( row : DispatchListItem ) { void router . push ( { name : 'overseas-dispatch-detail' , params : { dispatchNo : row . dispatchNo } } ) }
function openDetail ( row : DispatchListItem ) { void router . push ( { name : 'overseas-dispatch-detail' , params : { dispatchNo : row . dispatchNo } } ) }
async function openBol ( row : DispatchListItem ) {
if ( bolLoadingNo . value ) return
bolLoadingNo . value = row . dispatchNo
mutationError . value = null
try {
bolDetail . value = await getDispatch ( row . dispatchNo )
bolOpen . value = true
} catch ( cause ) {
mutationError . value = getApiErrorDetails ( cause , 'BOL 打印数据加载失败,请重试' )
} finally {
bolLoadingNo . value = ''
}
}
function isPendingDeparture ( row : DispatchListItem ) { return row . statusCode === 'PENDING_DEPARTURE' }
function isPendingDeparture ( row : DispatchListItem ) { return row . statusCode === 'PENDING_DEPARTURE' }
function canEdit ( row : DispatchListItem ) { return access . can ( permission . dispatchEdit ) && isPendingDeparture ( row ) }
function canEdit ( row : DispatchListItem ) { return access . can ( permission . dispatchEdit ) && isPendingDeparture ( row ) }
function canCancel ( row : DispatchListItem ) { return access . can ( permission . dispatchCancel ) && row . statusCode === 'PENDING_DEPARTURE' }
function canCancel ( row : DispatchListItem ) { return access . can ( permission . dispatchCancel ) && row . statusCode === 'PENDING_DEPARTURE' }
@@ -219,10 +234,11 @@ onMounted(load)
< template # toolbar > < QueryToolbar v-model = "filters" class="surface-panel" :fields="fields" :loading="loading" ariaLabel="排车列表筛选" preference-key="overseas-dispatches-query" :search-on-reset="false" @search="search" @reset="reset" / > < / template >
< template # toolbar > < QueryToolbar v-model = "filters" class="surface-panel" :fields="fields" :loading="loading" ariaLabel="排车列表筛选" preference-key="overseas-dispatches-query" :search-on-reset="false" @search="search" @reset="reset" / > < / template >
< template v-if = "loadError" #state><LoadErrorState title="排车列表加载失败" :message="loadError.message" :loading="loading" @retry="load"><template #details><ApiErrorMeta :details="loadError" / > < / template > < / LoadErrorState > < / template >
< template v-if = "loadError" #state><LoadErrorState title="排车列表加载失败" :message="loadError.message" :loading="loading" @retry="load"><template #details><ApiErrorMeta :details="loadError" / > < / template > < / LoadErrorState > < / template >
< section v-if = "!loadError" class="surface-panel table-panel"><DataTable v-model:page="page" v-model:page-size="pageSize" :data="rows" :columns="columns" :loading="loading" :total="total" preference-key="overseas-dispatches" row-key="id" empty-text="暂无排车记录" @update:page="load()" @update:page-size="page = 1; load()" >
< section v-if = "!loadError" class="surface-panel table-panel"><DataTable v-model:page="page" v-model:page-size="pageSize" :data="rows" :columns="columns" :loading="loading" :total="total" preference-key="overseas-dispatches" row-key="id" empty-text="暂无排车记录" @update:page="load()" @update:page-size="page = 1; load()" >
< template # actions = "{ row }" > < el-button size = "small" plain type = "primary" @click ="openDetail(row as DispatchListItem)" > < Eye :size = "15" / > 查看 < / el-button > < el-button v-if = "canTransfer(row as DispatchListItem)" size="small" type="success" plain @click="openTransfer(row as DispatchListItem)"><Truck :size="15" />转派送</el-button><el-dropdown v-if="canEdit(row as DispatchListItem) || canCancel(row as DispatchListItem)" trigger="click" @command="handleMore(String($event), row as DispatchListItem)"><el-button size="small" plain><MoreHorizontal :size="15" />更多</el-button><template #dropdown><el-dropdown-menu><el-dropdown-item v-if="canEdit(row as DispatchListItem)" command="edit"><Pencil :size="15" />编辑</el-dropdown-item><el-dropdown-item v-if="canCancel(row as DispatchListItem)" command="cancel" divided><XCircle :size="15" / > 取消 < / el-dropdown-item > < / el-dropdown-menu > < / template > < / el-dropdown > < / template >
< template # actions = "{ row }" > < el-button size = "small" plain type = "primary" @click ="openDetail(row as DispatchListItem)" > < Eye :size = "15" / > 查看 < / el-button > < el-button size = "small" plain : loading = "bolLoadingNo === (row as DispatchListItem).dispatchNo" @click ="openBol(row as DispatchListItem)" > < Printer :size = "15" / > 打印BOL < / el-button > < el-button v-if = "canTransfer(row as DispatchListItem)" size="small" type="success" plain @click="openTransfer(row as DispatchListItem)"><Truck :size="15" />转派送</el-button><el-dropdown v-if="canEdit(row as DispatchListItem) || canCancel(row as DispatchListItem)" trigger="click" @command="handleMore(String($event), row as DispatchListItem)"><el-button size="small" plain><MoreHorizontal :size="15" />更多</el-button><template #dropdown><el-dropdown-menu><el-dropdown-item v-if="canEdit(row as DispatchListItem)" command="edit"><Pencil :size="15" />编辑</el-dropdown-item><el-dropdown-item v-if="canCancel(row as DispatchListItem)" command="cancel" divided><XCircle :size="15" / > 取消 < / el-dropdown-item > < / el-dropdown-menu > < / template > < / el-dropdown > < / template >
< template # status = "{ row }" > < StatusBadge : status = "String((row as DispatchListItem).status || '—')" / > < / template >
< template # status = "{ row }" > < StatusBadge : status = "String((row as DispatchListItem).status || '—')" / > < / template >
< template # pagination -left > 共 { { total } } 条排车记录 < / template >
< template # pagination -left > 共 { { total } } 条排车记录 < / template >
< / DataTable > < / section >
< / DataTable > < / section >
< DispatchBolPrintDialog v-model = "bolOpen" :detail="bolDetail" / >
< / ListPageLayout > < / AdminPage > < AppDialog v-model = "transferOpen" title="转派送" width="min(1120px, calc(100vw - 28px))" confirm-text="确认提交" :confirm-loading="transferSaving" @confirm="submitTransfer"><el-form label-position="top"><h3>派送信息</h3><div class="transfer-grid"><el-form-item label="排车单号"><el-input :model-value="transferRow?.dispatchNo" readonly /></el-form-item><el-form-item label="预计派送时间" required><el-date-picker v-model="transferForm.plannedDeliveryAt" type="datetime" value-format="YYYY-MM-DDTHH:mm:ss" placeholder="请选择预计派送时间" /></el-form-item><el-form-item label="派送方式" required><el-select v-model="transferForm.deliveryMethod" placeholder="请选择"><el-option v-for="option in deliveryMethodOptions" :key="option.value" v-bind="option" /></el-select></el-form-item><el-form-item label="快递/车队"><el-input v-model="transferForm.carrierName" placeholder="请输入快递或车队名称" /></el-form-item><el-form-item label="运单号"><el-input v-model="transferForm.waybillNo" placeholder="请输入运单号" /></el-form-item><el-form-item label="提货方式" required><el-select v-model="transferForm.pickupMethod" placeholder="请选择"><el-option v-for="option in pickupMethodOptions" :key="option.value" v-bind="option" /></el-select></el-form-item><el-form-item label="装车类型" required><el-select v-model="transferForm.loadingType" placeholder="请选择"><el-option v-for="option in loadingTypeOptions" :key="option.value" v-bind="option" /></el-select></el-form-item><el-form-item label="司机/车队名称"><el-input v-model="transferForm.driverName" placeholder="请输入司机或车队名称" /></el-form-item><el-form-item label="联系电话"><el-input v-model="transferForm.driverPhone" placeholder="请输入联系电话" /></el-form-item><el-form-item label="车牌号"><el-input v-model="transferForm.vehiclePlate" placeholder="请输入车牌号" /></el-form-item><el-form-item label="车辆类型"><el-select v-model="transferForm.vehicleType" clearable placeholder="请选择"><el-option v-for="option in vehicleTypeOptions" :key="option.value" v-bind="option" /></el-select></el-form-item><el-form-item label="车辆大小"><el-select v-model="transferForm.vehicleSize" clearable placeholder="请选择"><el-option v-for="option in vehicleSizeOptions" :key="option.value" v-bind="option" /></el-select></el-form-item><el-form-item label="预约账号"><el-select v-model="transferForm.appointmentAccount" clearable placeholder="请选择"><el-option v-for="option in appointmentAccountOptions" :key="option.value" v-bind="option" /></el-select></el-form-item><el-form-item v-if="isBuyAppointment" label="卖家姓名" required><el-input v-model="transferForm.sellerName" placeholder="请输入卖家姓名" /></el-form-item></div><el-form-item label="托盘箱唛确认"><el-input v-model="transferForm.cartonMarksJson" type="textarea" :rows="3" placeholder="按实际托盘填写 JSON,例如 {"PALLET-001":["箱唛1","箱唛2"]}" /><div class="form-hint">入库未逐箱绑定时,在出库前确认箱唛属于哪个实际托盘。</div></el-form-item><h3>费用信息(USD) </h3><div class="transfer-grid"><el-form-item label="派送费用" required><el-input-number v-model="transferForm.deliveryFee" :min="0" :precision="2" controls-position="right" placeholder="请输入派送费用" /></el-form-item><el-form-item v-if="needsLoadingFee" label="装车费" required><el-input-number v-model="transferForm.loadingFee" :min="0" :precision="2" controls-position="right" placeholder="请输入装车费" /></el-form-item><el-form-item v-if="isBuyAppointment" label="买约费用" required><el-input-number v-model="transferForm.appointmentFee" :min="0" :precision="2" controls-position="right" placeholder="请输入买约费用" /></el-form-item></div><el-form-item label="备注"><el-input v-model="transferForm.remark" type="textarea" :rows="3" placeholder="请输入派送备注(选填)" /></el-form-item><el-alert title="费用不会自动带出,请手工填写后提交;提交后将生成待出库单、待派送单,并保存费用明细" type="info" :closable="false" / > < / el-form > < / AppDialog >
< / ListPageLayout > < / AdminPage > < AppDialog v-model = "transferOpen" title="转派送" width="min(1120px, calc(100vw - 28px))" confirm-text="确认提交" :confirm-loading="transferSaving" @confirm="submitTransfer"><el-form label-position="top"><h3>派送信息</h3><div class="transfer-grid"><el-form-item label="排车单号"><el-input :model-value="transferRow?.dispatchNo" readonly /></el-form-item><el-form-item label="预计派送时间" required><el-date-picker v-model="transferForm.plannedDeliveryAt" type="datetime" value-format="YYYY-MM-DDTHH:mm:ss" placeholder="请选择预计派送时间" /></el-form-item><el-form-item label="派送方式" required><el-select v-model="transferForm.deliveryMethod" placeholder="请选择"><el-option v-for="option in deliveryMethodOptions" :key="option.value" v-bind="option" /></el-select></el-form-item><el-form-item label="快递/车队"><el-input v-model="transferForm.carrierName" placeholder="请输入快递或车队名称" /></el-form-item><el-form-item label="运单号"><el-input v-model="transferForm.waybillNo" placeholder="请输入运单号" /></el-form-item><el-form-item label="提货方式" required><el-select v-model="transferForm.pickupMethod" placeholder="请选择"><el-option v-for="option in pickupMethodOptions" :key="option.value" v-bind="option" /></el-select></el-form-item><el-form-item label="装车类型" required><el-select v-model="transferForm.loadingType" placeholder="请选择"><el-option v-for="option in loadingTypeOptions" :key="option.value" v-bind="option" /></el-select></el-form-item><el-form-item label="司机/车队名称"><el-input v-model="transferForm.driverName" placeholder="请输入司机或车队名称" /></el-form-item><el-form-item label="联系电话"><el-input v-model="transferForm.driverPhone" placeholder="请输入联系电话" /></el-form-item><el-form-item label="车牌号"><el-input v-model="transferForm.vehiclePlate" placeholder="请输入车牌号" /></el-form-item><el-form-item label="车辆类型"><el-select v-model="transferForm.vehicleType" clearable placeholder="请选择"><el-option v-for="option in vehicleTypeOptions" :key="option.value" v-bind="option" /></el-select></el-form-item><el-form-item label="车辆大小"><el-select v-model="transferForm.vehicleSize" clearable placeholder="请选择"><el-option v-for="option in vehicleSizeOptions" :key="option.value" v-bind="option" /></el-select></el-form-item><el-form-item label="预约账号"><el-select v-model="transferForm.appointmentAccount" clearable placeholder="请选择"><el-option v-for="option in appointmentAccountOptions" :key="option.value" v-bind="option" /></el-select></el-form-item><el-form-item v-if="isBuyAppointment" label="卖家姓名" required><el-input v-model="transferForm.sellerName" placeholder="请输入卖家姓名" /></el-form-item></div><el-form-item label="托盘箱唛确认"><el-input v-model="transferForm.cartonMarksJson" type="textarea" :rows="3" placeholder="按实际托盘填写 JSON,例如 {"PALLET-001":["箱唛1","箱唛2"]}" /><div class="form-hint">入库未逐箱绑定时,在出库前确认箱唛属于哪个实际托盘。</div></el-form-item><h3>费用信息(USD) </h3><div class="transfer-grid"><el-form-item label="派送费用" required><el-input-number v-model="transferForm.deliveryFee" :min="0" :precision="2" controls-position="right" placeholder="请输入派送费用" /></el-form-item><el-form-item v-if="needsLoadingFee" label="装车费" required><el-input-number v-model="transferForm.loadingFee" :min="0" :precision="2" controls-position="right" placeholder="请输入装车费" /></el-form-item><el-form-item v-if="isBuyAppointment" label="买约费用" required><el-input-number v-model="transferForm.appointmentFee" :min="0" :precision="2" controls-position="right" placeholder="请输入买约费用" /></el-form-item></div><el-form-item label="备注"><el-input v-model="transferForm.remark" type="textarea" :rows="3" placeholder="请输入派送备注(选填)" /></el-form-item><el-alert title="费用不会自动带出,请手工填写后提交;提交后将生成待出库单、待派送单,并保存费用明细" type="info" :closable="false" / > < / el-form > < / AppDialog >
< AppDialog v-model = "editOpen" title="编辑排车" width="min(900px, calc(100vw - 48px))" confirm-text="保存" :confirm-loading="editSaving" @confirm="submitEdit"><el-alert :title="`当前状态:${editRow?.status || '—'};普通编辑不会修改排车状态。`" type="info" :closable="false" /><el-form label-position="top"><div class="edit-grid"><el-form-item label="车牌号"><el-input v-model="editForm.vehiclePlate" placeholder="请输入车牌号" /></el-form-item><el-form-item label="司机"><el-input v-model="editForm.driverName" placeholder="请输入司机姓名" /></el-form-item><el-form-item label="联系电话"><el-input v-model="editForm.driverPhone" placeholder="请输入联系电话" /></el-form-item><el-form-item label="拖车公司名称"><el-input v-model="editForm.carrierName" placeholder="请输入拖车公司名称" /></el-form-item><el-form-item label="路线"><el-input v-model="editForm.route" placeholder="请输入运输路线" /></el-form-item><el-form-item label="发车时间"><el-date-picker v-model="editForm.departAt" type="datetime" value-format="YYYY-MM-DDTHH:mm:ss" /></el-form-item><el-form-item label="预计到达时间"><el-date-picker v-model="editForm.estimatedArrivalAt" type="datetime" value-format="YYYY-MM-DDTHH:mm:ss" /></el-form-item><el-form-item label="FBA预约号"><el-input v-model="editForm.fbaAppointmentNo" placeholder="请输入 FBA 预约号" /></el-form-item><el-form-item label="FBA预约状态"><el-select v-model="editForm.fbaAppointmentStatus" clearable><el-option label="待预约" value="PENDING" /><el-option label="已预约" value="BOOKED" /><el-option label="已确认" value="CONFIRMED" /><el-option label="已取消" value="CANCELLED" /></el-select></el-form-item><el-form-item label="车辆预约状态"><el-select v-model="editForm.vehicleAppointmentStatus" clearable><el-option label="待预约" value="PENDING" /><el-option label="已预约" value="BOOKED" /><el-option label="已确认" value="CONFIRMED" /><el-option label="已取消" value="CANCELLED" / > < / el-select > < / el-form-item > < / div > < / el-form > < / AppDialog >
< AppDialog v-model = "editOpen" title="编辑排车" width="min(900px, calc(100vw - 48px))" confirm-text="保存" :confirm-loading="editSaving" @confirm="submitEdit"><el-alert :title="`当前状态:${editRow?.status || '—'};普通编辑不会修改排车状态。`" type="info" :closable="false" /><el-form label-position="top"><div class="edit-grid"><el-form-item label="车牌号"><el-input v-model="editForm.vehiclePlate" placeholder="请输入车牌号" /></el-form-item><el-form-item label="司机"><el-input v-model="editForm.driverName" placeholder="请输入司机姓名" /></el-form-item><el-form-item label="联系电话"><el-input v-model="editForm.driverPhone" placeholder="请输入联系电话" /></el-form-item><el-form-item label="拖车公司名称"><el-input v-model="editForm.carrierName" placeholder="请输入拖车公司名称" /></el-form-item><el-form-item label="路线"><el-input v-model="editForm.route" placeholder="请输入运输路线" /></el-form-item><el-form-item label="发车时间"><el-date-picker v-model="editForm.departAt" type="datetime" value-format="YYYY-MM-DDTHH:mm:ss" /></el-form-item><el-form-item label="预计到达时间"><el-date-picker v-model="editForm.estimatedArrivalAt" type="datetime" value-format="YYYY-MM-DDTHH:mm:ss" /></el-form-item><el-form-item label="FBA预约号"><el-input v-model="editForm.fbaAppointmentNo" placeholder="请输入 FBA 预约号" /></el-form-item><el-form-item label="FBA预约状态"><el-select v-model="editForm.fbaAppointmentStatus" clearable><el-option label="待预约" value="PENDING" /><el-option label="已预约" value="BOOKED" /><el-option label="已确认" value="CONFIRMED" /><el-option label="已取消" value="CANCELLED" /></el-select></el-form-item><el-form-item label="车辆预约状态"><el-select v-model="editForm.vehicleAppointmentStatus" clearable><el-option label="待预约" value="PENDING" /><el-option label="已预约" value="BOOKED" /><el-option label="已确认" value="CONFIRMED" /><el-option label="已取消" value="CANCELLED" / > < / el-select > < / el-form-item > < / div > < / el-form > < / AppDialog >
< / template >
< / template >