feat(客户管理): 新增税号字段并优化客户信息展示

feat(订单管理): 增加宽度和厚度公差字段,优化销售员选择方式

feat(合同管理): 新增合同管理模块及相关API接口

refactor(文件列表): 重构文件列表组件样式和布局

fix(QRCode): 修复内容为空时仍触发生成的bug

perf(线圈管理): 优化用户列表加载条件,减少不必要请求

style(代码): 移除多余的空行和注释代码
This commit is contained in:
砂糖
2026-03-31 11:16:48 +08:00
parent b7d8463198
commit aca10bcd45
13 changed files with 793 additions and 168 deletions

View File

@@ -50,6 +50,15 @@
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="税号" prop="taxNumber">
<el-input
v-model="customer.taxNumber"
placeholder="请输入税号"
@input="handleInputChange"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="客户行业" prop="industry">
<el-select

View File

@@ -16,6 +16,7 @@
<el-descriptions-item label="客户等级">
<dict-tag :value="customer.customerLevel" :options="dict.type.customer_level"></dict-tag>
</el-descriptions-item>
<el-descriptions-item label="税号">{{ customer.taxNumber || '-' }}</el-descriptions-item>
<el-descriptions-item label="客户地址" v-hasPermi="['crm:customer:address']">
{{ formattedAddress || '-' }}
</el-descriptions-item>

View File

@@ -7,7 +7,7 @@
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-if="editable">新增</el-button>
<el-button type="primary" plain icon="el-icon-printer" size="mini" @click="handlePrint">打印</el-button>
<!-- <el-button type="primary" plain icon="el-icon-printer" size="mini" @click="handlePrint">打印</el-button> -->
<el-button type="primary" plain icon="el-icon-refresh" size="mini" @click="getList">刷新</el-button>
</el-col>
</el-row>
@@ -15,6 +15,8 @@
<el-table v-loading="loading" :data="orderItemList">
<el-table-column label="产品类型" align="center" prop="productType" />
<el-table-column label="原料规格" align="center" prop="rawMaterialSpec" />
<el-table-column label="宽度公差" align="center" prop="widthTolerance" />
<el-table-column label="厚度公差" align="center" prop="thicknessTolerance" />
<el-table-column label="成品规格" align="center" prop="finishedProductSpec" />
<el-table-column label="材质" align="center" prop="material" />
<el-table-column label="等级" align="center" prop="grade" />
@@ -62,6 +64,12 @@
<el-form-item label="成品规格" prop="finishedProductSpec">
<el-input v-model="form.finishedProductSpec" placeholder="请输入成品规格" />
</el-form-item>
<el-form-item label="宽度公差" prop="widthTolerance">
<el-input v-model="form.widthTolerance" placeholder="请输入宽度公差" />
</el-form-item>
<el-form-item label="厚度公差" prop="thicknessTolerance">
<el-input v-model="form.thicknessTolerance" placeholder="请输入厚度公差" />
</el-form-item>
<el-form-item label="材质" prop="material">
<el-input v-model="form.material" placeholder="请输入材质" />
</el-form-item>

View File

@@ -27,7 +27,10 @@
<el-col :span="12">
<el-form-item label="销售员" prop="salesman">
<el-input v-model="form.salesman" placeholder="请输入销售员"></el-input>
<el-select v-model="form.salesman" placeholder="请选择销售员">
<el-option v-for="item in dict.type.wip_pack_saleman" :key="item.value" :label="item.label"
:value="item.value" />
</el-select>
</el-form-item>
</el-col>
@@ -50,7 +53,17 @@
<el-col :span="12">
<el-form-item label="合同号" prop="contractCode">
<el-input v-model="form.contractCode" placeholder="请输入合同号"></el-input>
<el-select v-model="form.contractId" placeholder="请选择合同号" filterable clearable @change="handleContractChange">
<el-option v-for="item in contractList" :key="item.contractId" :label="item.contractNo"
:value="item.contractId"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="附件" prop="annexFiles">
<file-upload v-model="form.annexFiles" />
</el-form-item>
</el-col>
@@ -65,6 +78,7 @@
</template>
<script>
import { listContract } from '@/api/crm/contract';
import { ORDER_STATUS } from '../js/enum'
export default {
@@ -79,6 +93,7 @@ export default {
default: () => []
}
},
dicts: ['wip_pack_saleman'],
data() {
return {
ORDER_STATUS,
@@ -86,7 +101,8 @@ export default {
...this.initValue
},
// 防抖计时器标识
debounceTimer: null
debounceTimer: null,
contractList: []
}
},
watch: {
@@ -105,6 +121,10 @@ export default {
}
}
},
mounted() {
// 初始化时获取合同列表
this.getContractList()
},
beforeDestroy() {
// 组件销毁时清除计时器,防止内存泄漏
if (this.debounceTimer) {
@@ -118,6 +138,21 @@ export default {
clearTimeout(this.debounceTimer);
}
this.$emit('save', { ...this.form });
},
// 处理合同号选择变化
handleContractChange(contractId) {
// 当合同号选择变化时,更新合同金额
const contract = this.contractList.find(item => item.contractId === contractId)
if (contract) {
this.form.contractCode = contract.contractNo
}
},
// 获取合同列表
getContractList() {
listContract({ pageSize: 1000, pageNum: 1 }).then(res => {
this.contractList = res.rows || []
})
}
}
}

View File

@@ -1,22 +1,5 @@
<template>
<div>
<!-- <el-form v-if="searchable" :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="客户名称" prop="customerId">
<CustomerSelect v-model="queryParams.customerId" />
</el-form-item>
<el-form-item label="到期日" prop="dueDate">
<el-date-picker clearable
v-model="queryParams.dueDate"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择到期日">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form> -->
<el-descriptions :column="3" title="财务状态" border>
<el-descriptions-item label="订单总金额">{{ order.orderAmount }}</el-descriptions-item>
<el-descriptions-item label="已收款金额">{{ receivedAmount }}</el-descriptions-item>
@@ -128,12 +111,6 @@
<el-form-item label="收款金额" prop="amount">
<el-input-number :controls=false v-model="form.amount" :step="1.00" :precision="2" placeholder="请输入应收金额" :min="0" :max="unreceivedAmount" style="width: 100%;"/>
</el-form-item>
<!-- <el-form-item label="已收金额" prop="paidAmount">
<el-input v-model="form.paidAmount" disabled placeholder="请输入已收金额" />
</el-form-item> -->
<!-- <el-form-item label="未收金额" prop="balanceAmount">
<el-input v-model="form.balanceAmount" placeholder="请输入未收金额" />
</el-form-item> -->
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
@@ -161,13 +138,9 @@
<script>
import { listReceivable, getReceivable, delReceivable, addReceivable, updateReceivable, updatePaidAmount } from "@/api/finance/receivable";
import { updateOrder } from "@/api/crm/order";
// import CustomerSelect from '@/components/KLPService/CustomerSelect/index.vue';
export default {
name: "Receivable",
// components: {
// CustomerSelect
// },
props: {
searchable: {
type: Boolean,