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

@@ -15,18 +15,13 @@
style="display: flex; align-items: center; gap: 5px; margin-top: 10px; flex-wrap: wrap;">
<!-- 查询区通过上方的查询按钮控制显示隐藏 -->
<!-- 客户行业和客户等级的下拉选 -->
<!-- <el-select style="width: 100px;" v-model="queryParams.customerId" placeholder="客户" clearable>
<el-option v-for="item in dict.type.customer_industry" :key="item.value" :label="item.label"
<el-select style="width: 100px;" v-model="queryParams.salesman" placeholder="销售员" clearable>
<el-option v-for="item in dict.type.wip_pack_saleman" :key="item.value" :label="item.label"
:value="item.value" />
</el-select> -->
<el-input style="width: 100px;" v-model="queryParams.salesman" placeholder="销售员" clearable />
</el-select>
<el-select style="width: 100px;" v-model="queryParams.orderStatus" placeholder="订单状态" clearable>
<el-option v-for="(value, key) in ORDER_STATUS" :key="value" :label="key" :value="value" />
</el-select>
<!-- <el-select style="width: 100px;" v-model="queryParams.financeStatus" placeholder="财务状态" clearable>
<el-option v-for="item in dict.type.finance_status" :key="item.value" :label="item.label"
:value="item.value" />
</el-select> -->
</div>
<div>
<!-- 列表区域 -->
@@ -38,6 +33,9 @@
</template>
</KLPList>
</div>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize" @pagination="getOrderList" />
</el-col>
<el-col :span="19">
@@ -55,6 +53,9 @@
<el-descriptions-item label="联系人">{{ form.contactPerson }}</el-descriptions-item>
<el-descriptions-item label="联系电话">{{ form.contactWay }}</el-descriptions-item>
<el-descriptions-item label="备注" :span="2">{{ form.remark }}</el-descriptions-item>
<el-descriptions-item label="附件" :span="2">
<file-list :ossIds="form.annexFiles" />
</el-descriptions-item>
</el-descriptions>
<el-descriptions :border="true" title="订单明细" />
@@ -111,16 +112,28 @@
<el-input v-model="form.orderAmount" placeholder="请输入订单总金额" />
</el-form-item>
<el-form-item label="销售员" prop="salesman">
<el-input v-model="form.salesman" placeholder="请输入销售员" />
<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-form-item label="合同号" prop="contractCode">
<el-input v-model="form.contractCode" placeholder="请输入合同号" />
<el-form-item label="合同号" prop="contractId">
<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-select>
</el-form-item>
<!-- <el-form-item label="合同号" prop="contractCode">
<el-input v-model="form.contractCode" placeholder="请输入合同号" disabled />
</el-form-item> -->
<el-form-item label="交货日期" prop="deliveryDate">
<el-date-picker clearable v-model="form.deliveryDate" type="datetime" value-format="yyyy-MM-dd HH:mm:ss"
placeholder="请选择交货日期">
</el-date-picker>
</el-form-item>
<el-form-item label="附件" prop="annexFiles">
<file-upload v-model="form.annexFiles" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
@@ -144,6 +157,8 @@ import OrderEdit from '../components/OrderEdit.vue';
import OrderObjection from '../components/OrderObjection.vue';
import ReceiveTable from '../components/ReceiveTable.vue';
import OrderRecord from '../components/OrderRecord.vue';
import FileList from '@/components/FileList';
import { listContract } from "@/api/crm/contract";
export default {
name: 'OrderPage',
@@ -153,9 +168,10 @@ export default {
OrderEdit,
OrderObjection,
ReceiveTable,
OrderRecord
OrderRecord,
FileList
},
dicts: ['customer_level', 'customer_industry'],
dicts: ['customer_level', 'customer_industry', 'wip_pack_saleman'],
data() {
return {
ORDER_STATUS,
@@ -167,8 +183,11 @@ export default {
salesman: '',
orderStatus: '',
orderType: ORDER_TYPE['正式订单'],
financeStatus: ''
financeStatus: '',
pageNum: 1,
pageSize: 10,
},
total: 0,
activeTab: 'detail',
currentOrder: {},
buttonLoading: false,
@@ -181,11 +200,13 @@ export default {
},
open: false,
customerList: [],
contractList: [],
}
},
created() {
this.getList()
this.getCustomerList()
this.getContractList()
},
methods: {
toggleQuery() {
@@ -197,6 +218,20 @@ export default {
this.customerList = response.rows;
});
},
/** 查询合同列表 */
getContractList() {
listContract({ pageNum: 1, pageSize: 1000 }).then(response => {
this.contractList = response.rows || [];
});
},
/** 合同号改变事件 */
handleContractChange(contractId) {
const contract = this.contractList.find(item => item.contractId === contractId)
if (contract) {
this.form.contractCode = contract.contractNo
}
},
/** 订单列表项点击事件 */
handleOrderClick(order) {
this.currentOrder = order;
@@ -211,6 +246,7 @@ export default {
this.orderLoading = true;
listOrder(this.queryParams).then(response => {
this.orderList = response.rows || [];
this.total = response.total;
this.orderLoading = false;
}).catch(error => {
console.error('获取正式订单主列表失败:', error)