From e719d76f10d8b8b3a95437cd5f37458f36bb4abb Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期四, 25 十二月 2025 16:27:57 +0800
Subject: [PATCH] feat: 订单
---
src/views/EmploymentManage/StandardOrderDetail.vue | 295 +++++++++++++++++++++++++++++++++++++++++++---------------
1 files changed, 216 insertions(+), 79 deletions(-)
diff --git a/src/views/EmploymentManage/StandardOrderDetail.vue b/src/views/EmploymentManage/StandardOrderDetail.vue
index 3ae7fae..d90ffdb 100644
--- a/src/views/EmploymentManage/StandardOrderDetail.vue
+++ b/src/views/EmploymentManage/StandardOrderDetail.vue
@@ -1,73 +1,113 @@
<template>
- <LoadingLayout :loading="state.loading">
+ <LoadingLayout :loading="isLoading">
<AppScrollContainer>
<ChunkCell title="鐘舵��">
<ProForm :model="form" ref="formRef" label-width="120px" :is-read="true">
- <ProFormItemV2 label="棰勭害鐘舵��:" prop="cooperationStatus">
- <ProFormRadio v-model="form.access" :value-enum="EnumWalletTransactionStatusText" />
+ <ProFormItemV2 label="棰勭害鐘舵��:" prop="appointmentStatus">
+ <ProFormRadio
+ v-model="form.appointmentStatus"
+ :value-enum="EnumStandardOrderAppointmentStatusText"
+ />
</ProFormItemV2>
- <ProFormItemV2 label="璁㈠崟鐘舵��:" prop="cooperationStatus">
- <ProFormRadio v-model="form.access" :value-enum="EnumWalletTransactionStatusText" />
+ <ProFormItemV2 label="璁㈠崟鐘舵��:" prop="payStatus">
+ <ProFormRadio v-model="form.payStatus" :value-enum="EnumStandardOrderPayStatusText" />
</ProFormItemV2>
- <ProFormItemV2 label="缁撶畻鐘舵��:" prop="cooperationStatus">
- <ProFormRadio v-model="form.access" :value-enum="EnumWalletTransactionStatusText" />
+ <ProFormItemV2 label="缁撶畻鐘舵��:" prop="settlementStatus">
+ <ProFormRadio
+ v-model="form.settlementStatus"
+ :value-enum="EnumStandardOrderSettlementStatusText"
+ />
</ProFormItemV2>
</ProForm>
</ChunkCell>
<ChunkCell title="璁㈠崟淇℃伅">
<ProForm :model="form" ref="formRef" label-width="120px" :is-read="true">
- <ProFormItemV2 label="鏈嶅姟鍗曞彿:" prop="cooperationStatus">
- <ProFormText v-model.trim="form.access" />
+ <ProFormItemV2 label="鏈嶅姟鍗曞彿:" prop="serviceCode">
+ <ProFormText v-model.trim="form.serviceCode" />
</ProFormItemV2>
- <ProFormItemV2 label="涓嬪崟鐢ㄦ埛:" prop="cooperationStatus">
- <ProFormText v-model.trim="form.access" />
+ <ProFormItemV2 label="涓嬪崟鐢ㄦ埛:" prop="createdUserName">
+ <ProFormText v-model.trim="form.createdUserName" />
</ProFormItemV2>
- <ProFormItemV2 label="鏈嶅姟鏃堕棿:" prop="cooperationStatus">
+ <ProFormItemV2 label="鏈嶅姟鏃堕棿:" prop="time">
<ProFormDatePicker
- v-model="form.access"
+ v-model="form.time"
type="date"
- value-format="YYYY-MM-DD"
+ format="YYYY-MM-DD HH:mm:ss"
placeholder="璇烽�夋嫨鏃ユ湡"
></ProFormDatePicker>
</ProFormItemV2>
- <ProFormItemV2 label="鏈嶅姟鍦板潃:" prop="cooperationStatus">
- <ProFormText v-model.trim="form.access" />
+ <ProFormItemV2 label="鏈嶅姟鍦板潃:" prop="address">
+ <ProFormText v-model.trim="form.address" />
</ProFormItemV2>
- <ProFormItemV2 label="鏈嶅姟鏈烘瀯:" prop="cooperationStatus">
- <ProFormText v-model.trim="form.access" />
+ <ProFormItemV2 label="鏈嶅姟鏈烘瀯:" prop="supplierEnterpriseName">
+ <ProFormText v-model.trim="form.supplierEnterpriseName" />
</ProFormItemV2>
- <ProFormItemV2 label="鏈嶅姟浜哄憳:" prop="cooperationStatus">
- <ProFormText v-model.trim="form.access" />
+ <ProFormItemV2 label="鏈嶅姟浜哄憳:" prop="servers">
+ <ProFormText v-model.trim="form.servers" />
</ProFormItemV2>
- <ProFormItemV2 label="澶囨敞:" prop="cooperationStatus">
- <ProFormText v-model.trim="form.access" />
+ <ProFormItemV2 label="澶囨敞:" prop="remark">
+ <ProFormText v-model.trim="form.remark" />
</ProFormItemV2>
- <ProFormItemV2 label="瀹炰粯娆�:" prop="invoiceTaxPointRate">
- <ProFormInputNumber v-model="form.balance" :controls="false" :min="0" :precision="2" />
+ <ProFormItemV2 label="鏈嶅姟:" prop="remark">
+ <ProTableV2
+ v-bind="proTableProps"
+ :columns="column"
+ :show-operation-column="false"
+ :auto-height="false"
+ :table-props="{
+ height: '185px',
+ }"
+ :show-pagination="false"
+ >
+ <template #serviceName="{ row }">
+ <div class="service-name-wrapper">
+ <img class="service-name-img" :src="setOSSLink(row.serviceFile)" alt="" />
+ <div class="service-name-text">{{ row.serviceName }}</div>
+ </div>
+ </template>
+ </ProTableV2>
</ProFormItemV2>
- <ProFormItemV2 label="瀹炴敹娆�:" prop="cooperationStatus">
- <ProFormInputNumber v-model="form.balance" :controls="false" :min="0" :precision="2" />
+
+ <ProFormItemV2 label="瀹炰粯娆�:" prop="payAmount">
+ <ProFormInputNumber
+ v-model="form.payAmount"
+ :controls="false"
+ :min="0"
+ :precision="2"
+ />
</ProFormItemV2>
- <ProFormItemV2 label="鏈嶅姟璐�:" prop="cooperationStatus">
- <ProFormInputNumber v-model="form.balance" :controls="false" :min="0" :precision="2" />
+ <ProFormItemV2 label="瀹炴敹娆�:" prop="receiveAmount">
+ <ProFormInputNumber
+ v-model="form.receiveAmount"
+ :controls="false"
+ :min="0"
+ :precision="2"
+ />
</ProFormItemV2>
- <ProFormItemV2 label="缁撶畻娆�:" prop="cooperationStatus">
- <ProFormInputNumber v-model="form.balance" :controls="false" :min="0" :precision="2" />
+ <ProFormItemV2 label="鏈嶅姟璐�:" prop="serviceFee">
+ <ProFormInputNumber
+ v-model="form.serviceFee"
+ :controls="false"
+ :min="0"
+ :precision="2"
+ />
+ </ProFormItemV2>
+ <ProFormItemV2 label="缁撶畻娆�:" prop="settlementAmount">
+ <ProFormInputNumber
+ v-model="form.settlementAmount"
+ :controls="false"
+ :min="0"
+ :precision="2"
+ />
</ProFormItemV2>
</ProForm>
- <ProTableV2
- v-bind="proTableProps"
- :columns="column"
- :show-operation-column="false"
- :auto-height="false"
- :table-props="{
- height: '400px',
- }"
+ <div
+ class="chuck-add-or-edit-actions"
+ v-if="form.appointmentStatus === EnumStandardOrderAppointmentStatus.WaitSure"
>
- </ProTableV2>
-
- <div class="chuck-add-or-edit-actions">
- <el-button class="chuck-add-or-edit-actions" @click="handleBack">鍙栨秷棰勭害</el-button>
+ <el-button class="chuck-add-or-edit-actions" @click="cancelStandardOrderAppointment"
+ >鍙栨秷棰勭害</el-button
+ >
<el-button type="primary" class="chuck-add-or-edit-actions" @click="handleSubmit"
>纭棰勭害</el-button
>
@@ -90,25 +130,57 @@
useTable,
ProTableV2,
} from '@bole-core/components';
-import { EnumWalletTransactionStatusText } from '@/constants';
-import * as userServices from '@/services/api/user';
-import { format, setOSSLink } from '@/utils';
-import { useRouteView } from '@/hooks';
+import {
+ EnumStandardOrderAppointmentStatus,
+ EnumStandardOrderAppointmentStatusText,
+ EnumStandardOrderPayStatusText,
+ EnumStandardOrderSettlementStatusText,
+} from '@/constants';
+import * as standardOrderServices from '@/services/api/standardOrder';
+import { format, paginateList, setOSSLink } from '@/utils';
+import { useQuery } from '@tanstack/vue-query';
+import { ModelValueType } from 'element-plus';
+import { Message } from '@bole-core/core';
defineOptions({
name: 'StandardOrderDetail',
});
+type ServiceItem = {
+ serviceName: string;
+ serviceFile: string;
+ specName: string;
+ specNumber: number;
+ specPrice: number;
+ payAmount: number;
+};
+
const { column, operationBtns } = useAccess({});
+const eventContext = useGlobalEventContext();
const route = useRoute();
-const { closeViewPush } = useRouteView();
const id = (route.params.id as string) ?? '';
+const { closeViewPush } = useRouteView();
const form = reactive({
- identity: '',
- access: '' as any as EnumEnterpriseWalletAccess,
- balance: 0,
+ appointmentStatus: '' as any as EnumStandardOrderAppointmentStatus,
+ payStatus: '' as any as EnumStandardOrderPayStatus,
+ settlementStatus: '' as any as EnumStandardOrderSettlementStatus,
+ serviceCode: '',
+ createdUserName: '',
+ time: [] as unknown as ModelValueType,
+ address: '',
+ supplierEnterpriseName: '',
+ serviceName: '',
+ servers: '',
+ remark: '',
+
+ payAmount: 0,
+ receiveAmount: 0,
+ serviceFee: 0,
+ settlementAmount: 0,
+
+ serviceItems: [] as ServiceItem[],
});
const BaseState = {
@@ -117,64 +189,129 @@
const state = reactive({ ...BaseState });
+const { isLoading } = useQuery({
+ queryKey: ['standardOrderServices/getStandardOrder', id],
+ queryFn: async () => {
+ return await standardOrderServices.getStandardOrder(
+ { id: id },
+ {
+ showLoading: false,
+ }
+ );
+ },
+ placeholderData: () => ({} as API.GetStandardOrderQueryResult),
+ onSuccess(data) {
+ form.appointmentStatus = data.appointmentStatus;
+ form.payStatus = data.payStatus;
+ form.settlementStatus = data.settlementStatus;
+ form.serviceCode = data.serviceCode;
+ form.createdUserName = data.createdUserName;
+ form.time = [data.beginTime, data.endTime];
+ form.address = `${data.provinceContent}${data.cityContent}${data.addressName}${data.addressName}${data.addressDetail}\t${data.name}\t${data.contactPhoneNumber}`;
+ form.serviceName = data.serviceName;
+ form.supplierEnterpriseName = data.supplierEnterpriseName;
+ form.servers = data.servers?.length ? data.servers.map((x) => x.name).join(',') : '';
+ form.remark = data.remark;
+ form.payAmount = data.payAmount;
+ form.receiveAmount = data.receiveAmount;
+ form.serviceFee = data.serviceFee;
+ form.settlementAmount = data.settlementAmount;
+
+ form.serviceItems = [
+ {
+ serviceName: data.serviceName,
+ serviceFile: data.serviceFile,
+ specName: data.specName,
+ specNumber: data.specNumber,
+ specPrice: data.specPrice,
+ payAmount: data.payAmount,
+ },
+ ];
+ getList();
+ },
+ enabled: computed(() => !!id),
+});
+
const {
getDataSource: getList,
proTableProps,
paginationState,
extraParamState,
- reset,
} = useTable(
async ({ pageIndex, pageSize }, extraParamState) => {
try {
- let params: API.GetPersonalUserTransactionsQuery = {
+ let list = [...form.serviceItems];
+ return Promise.resolve({
pageModel: {
rows: pageSize,
page: pageIndex,
- orderInput: extraParamState.orderInput,
+ totalCount: list.length,
},
- enterpriseWalletId: id,
- };
- let res = await userServices.getPersonalUserTransactions(params);
- if (res.objectData?.enterpriseWallet) {
- form.identity = res.objectData.enterpriseWallet.identity;
- form.access = res.objectData.enterpriseWallet.access;
- form.balance = res.objectData.enterpriseWallet.balance;
- }
- return res;
- } catch (error) {}
+ data: paginateList(list, pageIndex, pageSize),
+ });
+ } catch (error) {
+ console.log('error: ', error);
+ }
},
{
defaultExtraParams: {
orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
},
columnsRenderProps: {
- transDate: { type: 'date' },
- sendTime: { type: 'date' },
- amount: { type: 'money' },
- transactionStatus: { type: 'enum', valueEnum: EnumWalletTransactionStatusText },
- ereceiptDownloadOssUrl: {
- type: 'url',
- formatter: (row: API.GetPersonalUserTransactionsQueryResultItem) =>
- row.ereceiptDownloadOssUrl ? setOSSLink(row.ereceiptDownloadOssUrl) : '',
- },
+ specPrice: { type: 'money' },
+ payAmount: { type: 'money' },
},
}
);
-onMounted(() => {
- state.loading = false;
- getList();
-});
-
function handleBack() {
closeViewPush(route, {
- name: 'TaskManageList',
+ name: 'StandardOrder',
});
}
-async function handleSubmit() {}
+async function cancelStandardOrderAppointment() {
+ try {
+ await Message.tipMessage('纭瑕佸彇娑堥绾﹀悧锛�');
+ let params: API.CancelStandardOrderAppointmentCommand = {
+ id: id,
+ };
+ let res = await standardOrderServices.cancelStandardOrderAppointment(params);
+ if (res) {
+ Message.successMessage('鎿嶄綔鎴愬姛');
+ eventContext.emit('standardOrder:confirm');
+ handleBack();
+ }
+ } catch (error) {}
+}
+
+async function handleSubmit() {
+ try {
+ let params: API.SureStandardOrderAppointmentCommand = {
+ id: id,
+ };
+ let res = await standardOrderServices.sureStandardOrderAppointment(params);
+ if (res) {
+ Message.successMessage('鎿嶄綔鎴愬姛');
+ eventContext.emit('standardOrder:confirm');
+ handleBack();
+ }
+ } catch (error) {}
+}
</script>
<style lang="scss" scoped>
@use '@/style/common.scss' as *;
+
+.service-name-wrapper {
+ display: flex;
+ align-items: center;
+
+ .service-name-img {
+ margin-right: 10px;
+ width: 120px;
+ height: 120px;
+ object-fit: cover;
+ }
+}
</style>
--
Gitblit v1.10.0