feat(crm): 合同含税总金额自动填入订单总金额 & 移除冗余页面

- feat(crm/contract): 含税总额变化后自动填写订单总金额(可配置开关)
- fix(crm/receive): 修复金额单位错误(万元→元);清理未使用导入
- fix(contract/product): 产品备注设置默认值
- chore: 移除已废弃的 OrderDashboard 组件和 finance/order 页面
- feat(wms/hrm): 新增考勤异常管理页面(attendanceAbnormal.vue)
- chore: 移除 trae git 提交规则配置
This commit is contained in:
2026-06-06 13:01:38 +08:00
parent 724c1dd16f
commit 050dd1a965
7 changed files with 901 additions and 381 deletions

View File

@@ -1,202 +0,0 @@
<template>
<div style="padding: 20px;">
<el-row :gutter="20">
<el-col :span="6">
<div>
<el-row>
<el-input v-model="queryParams.orderCode" placeholder="请输入单据编号" clearable
@keyup.enter.native="handleQuery" />
</el-row>
<klp-list :list-data="orderList" list-key="orderId" :loading="loading" @item-click="handleItemClick"
info1-field="orderCode" info1-max-percent="40" info5-field="createTime" info4-field="taxAmount">
<!-- info4 插槽Vue2 slot 指定插槽名slot-scope 接收作用域变量 -->
<template slot="info4" slot-scope="{ item }">
<span class="info-value info-value--primary">
{{ item.taxAmount }}含税
</span>
</template>
<!-- info1 插槽同理修改插槽语法 -->
<template slot="info1" slot-scope="{ item }">
<span class="info-value info-value--primary">
{{ item.salesManager }}{{ item.orderCode }}
</span>
</template>
<!-- info2 插槽dict-tag 若为 Vue2 兼容组件用法不变 -->
<template slot="info2" slot-scope="{ item }">
<dict-tag :options="dict.type.order_status" :value="item.orderStatus" />
</template>
<!-- actions 插槽el-button Element UI Vue2 组件用法不变 -->
<template slot="actions" slot-scope="{ item }">
<el-button size="small" type="text" style="color: red" icon="el-icon-delete"
@click.stop="handleDelete(item)"></el-button>
</template>
</klp-list>
<pagination :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" :total="total"
layout="prev, pager, next" @pagination="getList" />
</div>
</el-col>
<el-col :span="18" v-loading="rightLoading">
<el-tabs v-if="currentOrder" v-model="activeTab">
<el-tab-pane label="订单信息" name="orderDetail">
<el-form>
<el-form-item label="订单ID">
<el-input v-model="currentOrder.orderId" disabled />
</el-form-item>
<el-form-item label="订单编号">
<el-input v-model="currentOrder.orderCode" disabled />
</el-form-item>
<el-form-item label="销售经理">
<el-input v-model="currentOrder.salesManager" disabled />
</el-form-item>
<el-form-item label="客户">
<el-input v-model="currentOrder.customerName" disabled />
</el-form-item>
<el-form-item label="含税金额">
<el-input v-model="currentOrder.taxAmount" disabled />
</el-form-item>
<el-form-item label="无税金额">
<el-input v-model="currentOrder.noTaxAmount" disabled />
</el-form-item>
</el-form>
</el-tab-pane>
<el-tab-pane label="订单明细" name="orderList">
<order-detail-list :orderId="currentOrder.orderId" :editable="false" />
</el-tab-pane>
<el-tab-pane label="应收明细" name="receivable">
<div style="margin-top: 10px;">
<ReceiveTable :order-id="currentOrder.orderId" :searchable="false" />
</div>
</el-tab-pane>
<el-tab-pane label="应付明细" name="payable">
<div style="margin-top: 10px;">
<PayTable :order-id="currentOrder.orderId" :searchable="false" />
</div>
</el-tab-pane>
<el-tab-pane label="凭证管理" name="document">
<KLPTable :data="currentOrder.documents" style="width: 100%" empty-text="暂无数据">
<el-table-column prop="docNo" label="凭证编号" />
<el-table-column prop="docDate" label="凭证日期" />
<el-table-column prop="amount" label="凭证金额" />
<el-table-column prop="status" label="凭证状态" />
</KLPTable>
</el-tab-pane>
</el-tabs>
<el-empty v-else description="请选择订单" />
</el-col>
</el-row>
</div>
</template>
<script>
import { listOrder } from "@/api/wms/order";
import { listOrderDetail } from "@/api/wms/orderDetail";
import { listReceivable } from "@/api/finance/receivable";
import { listPayable } from "@/api/finance/payable";
import { listFinancialDocument } from "@/api/finance/financialDocument";
import OrderDetailList from '@/views/wms/order/panels/detail.vue'
import klpList from "@/components/KLPUI/KLPList/index.vue"; // 引入klp-list组件
import ReceiveTable from '../components/ReceiveTable.vue';
import PayTable from '../components/PayTable.vue';
export default {
name: "Order",
components: {
OrderDetailList,
klpList, // 注册klp-list组件
ReceiveTable,
PayTable
},
dicts: ['order_status'],
data() {
return {
activeTab: "orderDetail",
currentOrder: null,
queryParams: {
pageNum: 1,
pageSize: 20,
orderCode: undefined
},
orderListLoading: false,
orderList: [], // 用于klp-list的列表数据
total: 0,
rightLoading: false,
}
},
mounted() {
this.getList();
},
methods: {
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
getList() {
this.orderListLoading = true;
listOrder(this.queryParams).then(response => {
this.orderList = response.rows; // 直接使用原始数据
this.total = response.total;
}).finally(() => {
this.orderListLoading = false;
});
},
// 处理列表项点击事件
handleItemClick(selectedItem) {
if (!selectedItem) {
this.currentOrder = null;
return;
}
if (this.rightLoading) {
this.$message.warning('请等待当前订单加载完成');
return;
}
this.currentOrder = selectedItem;
this.fetchData(selectedItem.orderId);
},
// 查看详情按钮点击事件
handleViewDetail(item) {
this.currentOrder = item;
this.fetchData(item.orderId);
},
async fetchData(orderId) {
this.rightLoading = true;
try {
// 并行请求提高性能
const [
orderDetailRes,
receivableRes,
payableRes,
documentRes
] = await Promise.all([
listOrderDetail({ orderId, pageSize: 1000 }),
listReceivable({ orderId, pageSize: 1000 }),
listPayable({ orderId, pageSize: 1000 }),
listFinancialDocument({ orderId, pageSize: 1000 })
]);
this.currentOrder = {
...this.currentOrder,
details: orderDetailRes.rows,
receivables: receivableRes.rows,
payables: payableRes.rows,
documents: documentRes.rows
};
} catch (error) {
this.$message.error('数据加载失败,请重试');
console.error(error);
} finally {
this.rightLoading = false;
}
}
}
}
</script>