订单列表

master
lzq 2026-01-23 18:22:50 +08:00
parent 895ffda288
commit de082134f3
3 changed files with 252 additions and 354 deletions

View File

@ -164,10 +164,11 @@ onMounted(doSearch)
<ElScrollbar> <ElScrollbar>
<ElForm :class="{'border-form':formStyle.border}" v-bind="searchFormProps" @submit.prevent="doSearch"> <ElForm :class="{'border-form':formStyle.border}" v-bind="searchFormProps" @submit.prevent="doSearch">
<slot :searchForm="searchForm" name="searchFormItem"/> <slot :searchForm="searchForm" name="searchFormItem"/>
<ElFormItem class="form-action-btn"> <!-- <ElFormItem class="form-action-btn">
<ElButton :icon="elIcons.Search" :loading="loading" native-type="submit" type="primary">搜索</ElButton> <ElButton :icon="elIcons.Search" :loading="loading" native-type="submit" type="primary">搜索</ElButton>
<ElButton :icon="elIcons.Refresh" :loading="loading" @click="doReset"></ElButton> <ElButton :icon="elIcons.Refresh" :loading="loading" @click="doReset"></ElButton>
</ElFormItem> </ElFormItem> -->
<button style="display: none" type="submit"></button>
</ElForm> </ElForm>
</ElScrollbar> </ElScrollbar>
</div> </div>

View File

@ -1,331 +1,115 @@
<template> <template>
<Page> <FormPage
<ElForm v-show="showSearchForm" inline @submit.prevent="paging"> ref="formPage"
:action-column="actionColumn"
:form-style="{
border: false,
colCount: 3,
vgap: '20px',
hgap: '20px',
}"
:paging="paging">
<template #searchFormItem="{searchForm}">
<ElFormItem label="站点">
<ElInput v-model="searchForm.stationId" placeholder="站点"/>
</ElFormItem>
<ElFormItem label="订单编号"> <ElFormItem label="订单编号">
<ElInput v-model="searchForm.sn" placeholder="订单编号" /> <ElInput v-model="searchForm.sn" placeholder="订单编号"/>
</ElFormItem> </ElFormItem>
<ElFormItem label="项目 Id"> <ElFormItem label="项目名称">
<ElInput v-model="searchForm.projectId" placeholder="项目 Id" /> <ElInput v-model="searchForm.projectName" placeholder="项目名称"/>
</ElFormItem> </ElFormItem>
<ElFormItem label="下单人"> <ElFormItem label="客户姓名">
<ElInput v-model="searchForm.userId" placeholder="下单人" /> <ElInput v-model="searchForm.contacts" placeholder="客户姓名"/>
</ElFormItem> </ElFormItem>
<ElFormItem label="下单人客户"> <ElFormItem label="联系方式">
<ElInput v-model="searchForm.customerId" placeholder="下单人客户" /> <ElInput v-model="searchForm.phone" placeholder="联系方式"/>
</ElFormItem> </ElFormItem>
<ElFormItem label="下单人姓名">
<ElInput v-model="searchForm.contacts" placeholder="下单人姓名" /> <ElFormItem label="订单类型">
<ElInput v-model="searchForm.orderCategory" placeholder="订单类型"/>
</ElFormItem> </ElFormItem>
<ElFormItem label="下单人联系方式"> <!-- <ElFormItem label="订单状态">
<ElInput v-model="searchForm.phone" placeholder="下单人联系方式" /> <ElInput v-model="searchForm.orderStatus" placeholder="订单状态"/>
</ElFormItem> -->
<ElFormItem label="运输企业">
<ElInput v-model="searchForm.transOrgName" placeholder="运输企业"/>
</ElFormItem> </ElFormItem>
<ElFormItem label="下单时间"> <ElFormItem label="下单时间">
<ElInput v-model="searchForm.orderTime" placeholder="下单时间" /> <ADtPicker v-model="searchForm.orderTimes" :change-handler="research"/>
</ElFormItem>
<ElFormItem label="订单类型">
<ElInput v-model="searchForm.orderCategory" placeholder="订单类型" />
</ElFormItem>
<ElFormItem label="订单状态">
<ElInput v-model="searchForm.orderStatus" placeholder="订单状态" />
</ElFormItem> </ElFormItem>
<ElFormItem label="完结时间"> <ElFormItem label="完结时间">
<ElInput v-model="searchForm.finishTime" placeholder="完结时间" /> <ADtPicker v-model="searchForm.finishTimes" :change-handler="research"/>
</ElFormItem> </ElFormItem>
<ElFormItem label="运输企业"> </template>
<ElInput v-model="searchForm.transOrgId" placeholder="运输企业"/> <template #simpleSearchFormItem="{searchForm}">
</ElFormItem> <ElFormItem>
<ElFormItem label="指派清运公司时间"> <ElInput v-model="searchForm.sn" placeholder="订单编号"/>
<ElInput v-model="searchForm.assignmentTransTime" placeholder="指派清运公司时间" />
</ElFormItem>
<ElFormItem label="站点">
<ElInput v-model="searchForm.stationId" placeholder="站点" />
</ElFormItem>
<ElFormItem label="站点名称">
<ElInput v-model="searchForm.stationName" placeholder="站点名称" />
</ElFormItem>
<ElFormItem label="预估量">
<ElInput v-model="searchForm.estimatedQuantity" placeholder="预估量" />
</ElFormItem>
<ElFormItem label="预估车数">
<ElInput v-model="searchForm.estimatedTrainNum" placeholder="预估车数" />
</ElFormItem>
<ElFormItem label="产品 Id">
<ElInput v-model="searchForm.goodsId" placeholder="产品 Id" />
</ElFormItem>
<ElFormItem label="产品名称">
<ElInput v-model="searchForm.goodsName" placeholder="产品名称" />
</ElFormItem>
<ElFormItem label="计量单位">
<ElInput v-model="searchForm.unit" placeholder="计量单位" />
</ElFormItem>
<ElFormItem label="客户备注">
<ElInput v-model="searchForm.customerMemo" placeholder="客户备注" />
</ElFormItem>
<ElFormItem label="创建人">
<ElInput v-model="searchForm.creatorId" placeholder="创建人" />
</ElFormItem>
<ElFormItem label="修改人">
<ElInput v-model="searchForm.modifierId" placeholder="修改人" />
</ElFormItem>
<ElFormItem label="创建时间">
<ElInput v-model="searchForm.createTime" placeholder="创建时间" />
</ElFormItem> </ElFormItem>
<ElFormItem> <ElFormItem>
<ElButton :icon="elIcons.Search" :loading="searching" native-type="submit" type="primary">搜索</ElButton> <ElInput v-model="searchForm.orderCategory" placeholder="订单类型"/>
<ElButton :icon="elIcons.Refresh" :loading="searching" @click="reset"></ElButton>
</ElFormItem> </ElFormItem>
</ElForm>
<div class="tool-bar">
<!-- <ElButton :icon="elIcons.Plus" type="primary" @click="addHandler"></ElButton> -->
<div></div>
<ElButton :icon="elIcons.Filter" type="default" @click="showSearchForm = !showSearchForm" />
</div>
<ElTable v-loading="searching" @expand-change="treeLoad" :data="tableData" cell-class-name="table-cell" class="table-list" empty-text="暂无数据" header-row-class-name="table-header" row-key="id">
<el-table-column type="expand">
<template #default="props">
<ElTable :data="props.row.children" header-row-class-name="table-header" :border="true" cell-class-name="table-cell" class="table-list">
<ElTableColumn label="产品名称" prop="goodsName"/>
<ElTableColumn label="清运状态" prop="transStatus" />
<ElTableColumn label="订单状态" prop="orderStatus" />
<ElTableColumn label="清运公司" prop="transOrgId" />
<ElTableColumn label="操作" width="180" fixed="right">
<template #default="scope">
<div class="action-btn">
<ElButton text v-if="!scope.row.transOrgId" type="primary" @click="showAssignDialog(scope.row)"></ElButton>
</div>
</template> </template>
</ElTableColumn> <template #columns>
</ElTable> <ElTableColumn label="订单编号" prop="sn"/>
<ElTableColumn label="下单人" prop="contacts"/>
<ElTableColumn label="联系方式" prop="phone"/>
<ElTableColumn label="垃圾品类" prop="goodsName"/>
<ElTableColumn label="运输站点" prop="goodsName"/>
<ElTableColumn label="运距(米)" prop="transDistance"/>
<ElTableColumn label="预估量" prop="estimatedQuantity"/>
<ElTableColumn label="预估车数" prop="estimatedTrainNum"/>
<ElTableColumn label="客户备注" prop="customerMemo"/>
<ElTableColumn label="创建时间" prop="createTime"/>
</template> </template>
</el-table-column> <OrderForm ref="orderForm" :research="research"/>
<ElTableColumn label="订单编号" prop="sn" width="140" /> </FormPage>
<!-- <ElTableColumn label="项目 Id" prop="projectId" /> -->
<ElTableColumn label="下单人" prop="contacts" />
<ElTableColumn label="联系方式" prop="phone" width="120" />
<ElTableColumn label="垃圾品类" prop="goodsName" />
<ElTableColumn label="运输站点" prop="goodsName" />
<!-- <ElTableColumn label="下单时间" prop="orderTime" />
<ElTableColumn label="订单类型" prop="orderCategory"/>
<ElTableColumn label="运输方客户 Id" prop="transCustomerId"/>-->
<ElTableColumn label="运距(米)" prop="transDistance" width="120" />
<ElTableColumn label="预估量" prop="estimatedQuantity" />
<ElTableColumn label="预估车数" prop="estimatedTrainNum" />
<!-- <ElTableColumn label="计量单位" prop="unit"/> -->
<ElTableColumn label="客户备注" prop="customerMemo" />
<ElTableColumn label="创建时间" prop="createTime" width="160" />
<ElTableColumn label="修改时间" prop="modifyTime" width="160" />
<ElTableColumn label="操作" width="180" fixed="right">
<template #default="scope">
<div class="action-btn">
<ElPopconfirm confirm-button-text="" cancel-button-text="" confirm-button-type="danger" cancel-button-type="primary" placement="top" title="是否删除当前数据?" width="180" @confirm="delHandler(scope)">
<template #reference>
<ElButton text type="danger" :loading="deling">删除</ElButton>
</template>
</ElPopconfirm>
<!-- <ElButton text type="primary" @click="modifyHandler(scope)"></ElButton> -->
</div>
</template>
</ElTableColumn>
</ElTable>
<ElPagination layout="->, sizes, total, prev, pager, next" v-model:current-page="searchForm.current" v-model:page-size="searchForm.size" :total="totalCount" :page-sizes="[10, 20, 50, 100, 500]" :hide-on-single-page="false" :teleported="false" @change="paging" />
<OrderForm ref="orderForm" @edit-succ="paging" />
<ElDialog v-model="assignDialog" :destroy-on-close="true" title="指派清运公司" width="500">
<div style="display: flex; align-items: center">
<span style="margin-right: 10px">选择公司</span>
<ASelect labelKey="orgName" valueKey="id" :tableColumn="customerColumn" v-model="assignFrom.transOrgId" :api="OrgApi.paging" placeholder="请选择清运公司" />
</div>
<template #footer>
<div class="dialog-footer">
<ElButton @click="assignDialog = false">关闭</ElButton>
<ElButton type="primary" @click="confirmDialog"> </ElButton>
</div>
</template>
</ElDialog>
</Page>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import OrderApi from '@/pages/order/book-order/order-api.ts' import OrderApi from '@/pages/order/book-order/order-api.ts'
import OrderForm from '@/pages/order/book-order/OrderForm.vue' import OrderForm from '@/pages/order/book-order/OrderForm.vue'
import Page from '@/components/page/Page.vue' import FormPage from '@/components/page/FormPage.vue'
import { elIcons } from '@/common/element/element.ts' import ADtPicker from '@/components/a-dt-picker/ADtPicker.vue'
import Utils from '@/common/utils' import type { ComponentExposed } from 'vue-component-type-helpers'
import OrgApi from '@/pages/cst/org/org-api.ts' import type { ActionColumnType } from '@/components/page/a-page-type.ts'
import ASelect from '@/components/a-select/ASelect.vue'
const totalCount = ref(0);
const tableData = Utils.resetAble(reactive<OrderTypes.SearchOrderResult[]>([]));
const searchForm = Utils.resetAble(
reactive<OrderTypes.SearchOrderParam>({
current: 1,
size: 20,
})
);
const searching = ref(false);
const deling = ref(false);
const showSearchForm = ref(true);
const assignDialog = ref(false);
// const orderFormIns = useTemplateRef<InstanceType<typeof OrderForm>>("orderForm");
const assignFrom = ref({
transOrgId: "",
orderTransId: "",
});
function treeLoad(row: any, expanded: any, resolve: (data: any[]) => void) { const actionColumn = reactive<ActionColumnType<OrderTypes.SearchOrderResult>>({
if (resolve == null && !expanded) return; tableActions: [
searching.value = true;
OrderApi.orderTrans({ sn: row.sn })
.then((res) => {
console.log(resolve, "res.data");
row.children = res.data?.records;
// if (resolve!=null){
// resolve(res.data?.records.map((it:any) => {
// it.hasChildren = true
// return it
// }) ?? [])
// console.log(res.data?.records)
// } else {
// tableData.updateKeyChildren(row.id, res.data?.records.map(it => {
// it.hasChildren = true
// it.children = []
// return it
// }) ?? [])
// }
})
.finally(() => {
searching.value = false;
});
}
const customerColumn = [
{ {
label: "公司", tooltip: '详情',
prop: "orgName", icon: 'Postcard',
action({row}) {
}, },
{
label: "公司类型",
prop: "customerList[0].identityCategoryTxt",
}, },
{ /* {
label: "地区", icon: 'Delete',
prop: "areaName", loading: false,
type: 'danger',
tooltip: '删除',
confirm: {
title: '是否删除当前数据',
}, },
{ action({row}) {
label: "统一社会编码", OrgApi.del([ row.id! ])
prop: "uscc",
},
];
function showAssignDialog(data: any) {
assignFrom.value.transOrgId = data.transOrgId;
assignFrom.value.orderTransId = data.id;
assignDialog.value = true;
}
function confirmDialog() {
console.log(assignFrom.value, "assignFrom");
if (!assignFrom.value.transOrgId) {
ElMessage.error("请选择清运公司");
return;
}
OrderApi.assignmentOrg(assignFrom.value).then(() => {
assignDialog.value = false;
ElMessage.success("派车成功");
});
}
function delHandler({ row }: { row: OrderTypes.SearchOrderResult }) {
deling.value = true;
OrderApi.del([row.id!])
.then(() => { .then(() => {
ElMessage.success("删除成功"); ElMessage.success('删除成功')
paging(); return true
}) })
.finally(() => { },
deling.value = false; }, */
}); ],
})
const formPageIns = useTemplateRef<ComponentExposed<typeof FormPage>>('formPage')
function research() {
formPageIns.value?.doSearch()
} }
// function modifyHandler({ row }: { row: OrderTypes.SearchOrderResult }) { function paging(param: OrderTypes.SearchOrderParam) {
// showDialog(row); return OrderApi.paging(param)
// }
function reset() {
searchForm.$reset();
paging();
} }
function paging() {
searching.value = true;
OrderApi.paging(searchForm)
.then((res) => {
totalCount.value = res.data?.total ?? 0;
tableData.$reset(res.data?.records ?? []);
})
.finally(() => {
searching.value = false;
});
}
onMounted(() => {
paging();
});
</script> </script>
<style lang="stylus" scoped>
.table-list {
flex 1;
margin 0 0 20px 0
width 100%
:deep(.table-header) {
color #454C59
th {
background-color #EDF1F7
font-weight 500
position relative
& > div {
display flex
gap 5px
align-items center
}
&:not(:first-child) > div::before {
position: absolute;
top: 50%;
left: 1px;
width: 1px;
background-color: #D3D7DE;
transform: translateY(-50%);
content: "";
height 50%
}
}
}
:deep(.table-cell) {
color #2F3540
}
.action-btn {
width 100%
display flex
flex-wrap wrap
& > button {
margin 0
}
}
}
.tool-bar {
display flex
justify-content space-between
margin 0 0 20px 0
}
</style>

View File

@ -3,62 +3,178 @@ export {}
declare global { declare global {
namespace OrderTypes { namespace OrderTypes {
interface SearchOrderParam extends G.PageParam { interface SearchOrderParam extends G.PageParam {
// Id
id?: string
// 订单编号 // 订单编号
sn?: string sn?: string
// 项目 Id // 项目名称
projectId?: string projectName?: string
// 下单人 Idsys_user.id // 联系人姓名
userId?: string
// 下单人客户 Idcst_customer.id
customerId?: string
// 下单人姓名
contacts?: string contacts?: string
// 下单人联系方式 // 下单人联系方式
phone?: string phone?: string
// 下单时间 // 下单时间
orderTime?: string orderTimes: [ string | undefined, string | undefined ]
orderTimeStart?: string
orderTimeEnd?: string
// 订单类型字典代码order_categoryHuiShouYuYue-->回收预约单、XiaoShouYuYue-->销售预约单、DuanBoRu-->短驳入、DuanBoChu-->短驳出 // 订单类型字典代码order_categoryHuiShouYuYue-->回收预约单、XiaoShouYuYue-->销售预约单、DuanBoRu-->短驳入、DuanBoChu-->短驳出
orderCategory?: string orderCategory?: string
// 订单状态字典代码order_statusYiYuYue-->已预约、JinXingZhong-->进行中、YiWanCheng-->已完成、YiQuXiao-->已取消 // 订单状态字典代码order_statusYiYuYue-->已预约、JinXingZhong-->进行中、YiWanCheng-->已完成、YiQuXiao-->已取消
orderStatus?: string orderStatus?: string
// 完结时间 // 完结时间
finishTime?: string finishTimes: [ string | undefined, string | undefined ]
// 运输企业 Idcst_org.id finishTimeStart?: string
transOrgId?: string finishTimeEnd?: string
// 运输方客户 Id // 运输企业
transCustomerId?: string transOrgName?: string
// 指派清运公司时间
assignmentTransTime?: string
// 站点 Idcst_station.id // 站点 Idcst_station.id
stationId?: string stationId?: string
// 站点名称cst_station.station.name // 创建时间
stationName?: string createTimes: [ string | undefined, string | undefined ]
// 运距;单位:米 createTimeStart?: string
transDistance?: number createTimeEnd?: string
// 预估量 }
estimatedQuantity?: number
// 预估车数 interface ProjectInfo {
estimatedTrainNum?: number // Id
// 产品 Id id: string
goodsId?: string projectName: string
// 产品名称 }
goodsName?: string
interface CargoPlace {
// Id
id: string
zx: string
province: string
city: string
area: string
town: string
province_name: string
city_name: string
area_name: string
town_name: string
address: string
lng: number
lat: number
}
interface PaymentRecord {
// Id
id?: string
// 订单收费项 IdQiTa-->其他、ChanPin-->产品、YunFei-->运费
expenseItemId?: string
// 付费方字典代码payerPingTai-->平台、ChanFei-->产废方、YunShu-->运输方、XiaoNa-->消纳方、CaiGou-->采购方
payer?: string
// 量
quantity?: number
// 支付状态MianFei-->免费、WeiZhiFu-->未支付、YiZhiFu-->已支付、YiTuiKuan-->已退款
paymentStatus?: string
// 支付时间
payTime?: string
// 退款时间
refundTime?: string
// 总金额;单位:元
totalMoney?: string
// 优惠金额;单位:元,有正负
discountMoney?: string
// 手动修正金额;单位:元,有正负
reviseMoney?: string
// 结算金额;单位:元
settleMoney?: string
// 结算方式YueJie-->月结、YuE-->余额、XianFu-->现付
settlementWay?: string
// 付款人 Idsys_user.id
payerUserId?: string
payerName?: string
// 付款人客户 Idcst_customer.id
payerCustomerId?: string
// 付款方资金账户 Id
payerMoneyAccountId?: string
// 收费项目类型QiTa-->其他、ChanPin-->产品、YunFei-->运费
expenseItemCategory?: string
// 付费项名称
expenseItemName?: string
// 计费策略字典代码expense_strategyMianFei-->免费、TanXing-->弹性、GuDing-->固定、Che-->车、Fang-->方、JuLi-->距离
expenseStrategy?: string
// 税率
taxRate?: string
// 计量单位字典代码unit // 计量单位字典代码unit
unit?: string unit?: string
// 客户备注 // 单价;单位:元,弹性模式-->每档价格
customerMemo?: string unitPrice?: string
// 创建人 Id sys_user.id // 起步价;单位:元,<= 起步量 固定费用
creatorId?: string initialPrice?: string
// 修改人 Id sys_user.id // 起步量
modifierId?: string initialQuantity?: number
// 创建时间 // 每档的量
createTime?: string everyQuantity?: number
// 修改时间 }
modifyTime?: string
// 是否删除; 0-->未删除、1-->已删除 interface TransRecode {
deleted?: boolean // Id
id?: string
// 车次
trainNum?: number
// 运输状态字典代码trans_statusDaiPaiDan-->待派单、DaiJieDan-->待接单、YiJieDan-->已接单、YunShuZhong-->运输中、YiJinChang-->已进场、YiChuChang-->已出场、YiWanCheng-->已完成、YiQuXiao-->已取消
transStatus?: string
// 车道名称
lane?: string
// 指派司机时间
assignmentDriverTime?: string
// 司机确认接单时间
driverConfirmTime?: string
// 开始运输时间
transTime?: string
// 完结时间
finishTime?: string
// 看料员 Idsys_user.id
checkerId?: string
checkerName?: string
// 勘料状态字典代码check_statusWu-->无需勘料、YiKanLiao-->已勘料、WeiKanLiao-->未勘料
checkStatus?: string
// 勘料时间
checkTime?: string
// 勘料照片
checkPhoto?: string
// 勘料员备注
checkerMemo?: string
// 司机 Id
driverId?: string
driverName?: string
// 司机所属客户 Idcst_customer.id
driverCustomerId?: string
// 司机所属用户 Id
driverUserId?: string
// 归属客户 Idcst_customer.id
truckCustomerId?: string
// 归属组织
truckOrgId?: string
// 车辆 Id
truckId?: string
// 车牌号
truckLicensePlate?: string
// 历史皮重
historyTareWeight?: number
// 毛重;单位:千克
roughWeight?: number
// 皮重;单位:千克
tareWeight?: number
// 净重;单位:千克
settleWeight?: number
// 运距;单位:米
transDistance?: number
// 进场车头照片
inFrontPhoto?: string
// 进场车斗照片
inBodyPhoto?: string
// 出场车头照片
outFrontPhoto?: string
// 出场车斗照片
outBodyPhoto?: string
// 进场时间
inTime?: string
// 出场时间
outTime?: string
paymentRecords?: PaymentRecord[]
} }
interface SearchOrderResult { interface SearchOrderResult {
@ -68,6 +184,7 @@ declare global {
sn?: string sn?: string
// 项目 Id // 项目 Id
projectId?: string projectId?: string
projectInfo?: ProjectInfo
// 下单人 Idsys_user.id // 下单人 Idsys_user.id
userId?: string userId?: string
// 下单人客户 Idcst_customer.id // 下单人客户 Idcst_customer.id
@ -86,8 +203,10 @@ declare global {
finishTime?: string finishTime?: string
// 运输企业 Idcst_org.id // 运输企业 Idcst_org.id
transOrgId?: string transOrgId?: string
transOrgName?: string
// 运输方客户 Id // 运输方客户 Id
transCustomerId?: string transCustomerId?: string
transCustomerName?: string
// 指派清运公司时间 // 指派清运公司时间
assignmentTransTime?: string assignmentTransTime?: string
// 站点 Idcst_station.id // 站点 Idcst_station.id
@ -108,16 +227,10 @@ declare global {
unit?: string unit?: string
// 客户备注 // 客户备注
customerMemo?: string customerMemo?: string
// 创建人 Id sys_user.id
creatorId?: string
// 修改人 Id sys_user.id
modifierId?: string
// 创建时间 // 创建时间
createTime?: string createTime?: string
// 修改时间 cargoPlace?: CargoPlace
modifyTime?: string transRecodes?: TransRecode[]
// 是否删除; 0-->未删除、1-->已删除
deleted?: boolean
} }
interface AddOrderParam { interface AddOrderParam {