diff --git a/src/api/finance/businessSettlement/businessSettlement.ts b/src/api/finance/businessSettlement/businessSettlement.ts index aba021c..b4c7efe 100644 --- a/src/api/finance/businessSettlement/businessSettlement.ts +++ b/src/api/finance/businessSettlement/businessSettlement.ts @@ -21,3 +21,39 @@ }) } +// 删除 +export function delBusinessSettlementList(data: any) { + return request({ + url: '/finance/settlement/delete', + method: 'post', + data, + }) +} + +// 新增 +export function addBusinessSettlement(data: Object) { + return request({ + url: '/finance/settlement/add', + method: 'post', + data, + }) +} + +// 编辑 +export function updateBusinessSettlement(data: Object) { + return request({ + url: '/finance/settlement/update', + method: 'post', + data, + }) +} + +// 详情 +export function getBusinessSettlementDetail(data: { id: string }) { + return request({ + url: '/finance/settlement/detail', + method: 'post', + data, + }) +} + diff --git a/src/api/finance/businessSettlement/businessSettlement.ts b/src/api/finance/businessSettlement/businessSettlement.ts index aba021c..b4c7efe 100644 --- a/src/api/finance/businessSettlement/businessSettlement.ts +++ b/src/api/finance/businessSettlement/businessSettlement.ts @@ -21,3 +21,39 @@ }) } +// 删除 +export function delBusinessSettlementList(data: any) { + return request({ + url: '/finance/settlement/delete', + method: 'post', + data, + }) +} + +// 新增 +export function addBusinessSettlement(data: Object) { + return request({ + url: '/finance/settlement/add', + method: 'post', + data, + }) +} + +// 编辑 +export function updateBusinessSettlement(data: Object) { + return request({ + url: '/finance/settlement/update', + method: 'post', + data, + }) +} + +// 详情 +export function getBusinessSettlementDetail(data: { id: string }) { + return request({ + url: '/finance/settlement/detail', + method: 'post', + data, + }) +} + diff --git a/src/router/modules/financial.ts b/src/router/modules/financial.ts index 2a7b1cc..b2da11d 100644 --- a/src/router/modules/financial.ts +++ b/src/router/modules/financial.ts @@ -48,6 +48,18 @@ auth: '/finance/businessSettlement/list', }, }, + { + path: ':type/:id?', + name: 'businessSettlementDetail', + component: () => import('@/views/finance/businessSettlement/edit.vue'), + meta: { + title: '业务结算详情', + icon: 'ep:key', + sidebar: false, + breadcrumb: true, + activeMenu: '/businessSettlement/list', + }, + }, ], }, ] diff --git a/src/api/finance/businessSettlement/businessSettlement.ts b/src/api/finance/businessSettlement/businessSettlement.ts index aba021c..b4c7efe 100644 --- a/src/api/finance/businessSettlement/businessSettlement.ts +++ b/src/api/finance/businessSettlement/businessSettlement.ts @@ -21,3 +21,39 @@ }) } +// 删除 +export function delBusinessSettlementList(data: any) { + return request({ + url: '/finance/settlement/delete', + method: 'post', + data, + }) +} + +// 新增 +export function addBusinessSettlement(data: Object) { + return request({ + url: '/finance/settlement/add', + method: 'post', + data, + }) +} + +// 编辑 +export function updateBusinessSettlement(data: Object) { + return request({ + url: '/finance/settlement/update', + method: 'post', + data, + }) +} + +// 详情 +export function getBusinessSettlementDetail(data: { id: string }) { + return request({ + url: '/finance/settlement/detail', + method: 'post', + data, + }) +} + diff --git a/src/router/modules/financial.ts b/src/router/modules/financial.ts index 2a7b1cc..b2da11d 100644 --- a/src/router/modules/financial.ts +++ b/src/router/modules/financial.ts @@ -48,6 +48,18 @@ auth: '/finance/businessSettlement/list', }, }, + { + path: ':type/:id?', + name: 'businessSettlementDetail', + component: () => import('@/views/finance/businessSettlement/edit.vue'), + meta: { + title: '业务结算详情', + icon: 'ep:key', + sidebar: false, + breadcrumb: true, + activeMenu: '/businessSettlement/list', + }, + }, ], }, ] diff --git a/src/utils/useCalc.ts b/src/utils/useCalc.ts new file mode 100644 index 0000000..e59c2e2 --- /dev/null +++ b/src/utils/useCalc.ts @@ -0,0 +1,96 @@ +/** + * 解决小数计算精度问题 + * @param num1 第一位数 + * @param num2 第二位数 + * @param calcStr 计算方式 + - * / + * @returns + */ +export function calc(num1: number, num2: number, calcStr: string) { + var str1 // 转换为字符串的数字 + var str2 + var ws1 = 0; var // ws1,ws2 用来存储传入的num的小数点后的数字的位数 + ws2 = 0; var // 赋默认值,解决当整数和小数运算时倍数计算错误导致的结果误差 + bigger; var // bigger和smaller用于加,减,除法找出小的那个数字,给后面补0,解决位数不对从而造成的计算错误的问题;乘法需要将结果除两个数字的倍数之和 + smaller; var // 例如:加减除法中1.001 + 2.03 ,如果不给2.03进行补0,最后会变成1001+203,数字错位导致结果错误;乘法中1.12*1.1会放大为112*11,所以结果需要除以1000才会是正确的结果,112*11/1000=1.232 + zeroCount // 需要补充0的个数 + var isExistDot1 // 传入的数字是否存在小数点 + var isExistDot2 + var sum + var beishu = 1 + // 将数字转换为字符串 + str1 = num1.toString() + str2 = num2.toString() + // 是否存在小数点(判断需要计算的数字是不是包含小数) + isExistDot1 = !!str1.includes('.') + isExistDot2 = !!str2.includes('.') + // 取小数点后面的位数 + if (isExistDot1) { + ws1 = str1.split('.')[1].length + } + + if (isExistDot2) { + ws2 = str2.split('.')[1].length + } + // 如ws1 和 ws2 无默认值,如果num1 或 num2 不是小数的话则 ws1 或 ws2 的值将为 undefined + // bigger 和 smaller 的值会和预期不符 + bigger = ws1 > ws2 ? ws1 : ws2 + smaller = ws1 < ws2 ? ws1 : ws2 + + switch (calcStr) { + // 加减法找出小的那个数字,给后面补0,解决位数不对从而造成的计算错误的问题 + // 例如:1.001 + 2.03 ,如果不给2.03进行补0,最后会变成1001+203,数字错位导致结果错误 + case '+': + case '-': + case '/': + zeroCount = bigger - smaller + for (var i = 0; i < zeroCount; i++) { + if (ws1 == smaller) { + str1 += '0' + } + else { + str2 += '0' + } + } + break + case '*': + // 乘法需要将结果除两个数字的倍数之和 + bigger = bigger + smaller + break + default: + return '暂不支持的计算类型,现已支持的有加法、减法、乘法、除法' + break + } + + // 去除数字中的小数点 + str1 = str1.replace('.', '') + str2 = str2.replace('.', '') + + // 计算倍数,例如:1.001小数点后有三位,则需要乘 1000 变成 1001,变成整数后精度丢失问题则不会存在 + for (var j = 0; j < bigger; j++) { + beishu *= 10 // 等价于beishu = beishu * 10; + } + num1 = parseInt(str1) + num2 = parseInt(str2) + // 进行最终计算并除相应倍数 + switch (calcStr) { + case '+': + sum = (num1 + num2) / beishu + break + case '-': + sum = (num1 - num2) / beishu + break + case '*': + sum = (num1 * num2) / beishu + break + case '/': + sum = num1 / num2 + /* 除数与被除数同时放大一定倍数,不影响结果, + 所以对数字进行放大对应倍数并进行补0操作后不用另对倍数做处理 */ + break + default: + return '暂不支持的计算类型,现已支持的有加法、减法、乘法、除法' + } + console.log('计算结果:', sum, typeof sum) + + return sum +} diff --git a/src/api/finance/businessSettlement/businessSettlement.ts b/src/api/finance/businessSettlement/businessSettlement.ts index aba021c..b4c7efe 100644 --- a/src/api/finance/businessSettlement/businessSettlement.ts +++ b/src/api/finance/businessSettlement/businessSettlement.ts @@ -21,3 +21,39 @@ }) } +// 删除 +export function delBusinessSettlementList(data: any) { + return request({ + url: '/finance/settlement/delete', + method: 'post', + data, + }) +} + +// 新增 +export function addBusinessSettlement(data: Object) { + return request({ + url: '/finance/settlement/add', + method: 'post', + data, + }) +} + +// 编辑 +export function updateBusinessSettlement(data: Object) { + return request({ + url: '/finance/settlement/update', + method: 'post', + data, + }) +} + +// 详情 +export function getBusinessSettlementDetail(data: { id: string }) { + return request({ + url: '/finance/settlement/detail', + method: 'post', + data, + }) +} + diff --git a/src/router/modules/financial.ts b/src/router/modules/financial.ts index 2a7b1cc..b2da11d 100644 --- a/src/router/modules/financial.ts +++ b/src/router/modules/financial.ts @@ -48,6 +48,18 @@ auth: '/finance/businessSettlement/list', }, }, + { + path: ':type/:id?', + name: 'businessSettlementDetail', + component: () => import('@/views/finance/businessSettlement/edit.vue'), + meta: { + title: '业务结算详情', + icon: 'ep:key', + sidebar: false, + breadcrumb: true, + activeMenu: '/businessSettlement/list', + }, + }, ], }, ] diff --git a/src/utils/useCalc.ts b/src/utils/useCalc.ts new file mode 100644 index 0000000..e59c2e2 --- /dev/null +++ b/src/utils/useCalc.ts @@ -0,0 +1,96 @@ +/** + * 解决小数计算精度问题 + * @param num1 第一位数 + * @param num2 第二位数 + * @param calcStr 计算方式 + - * / + * @returns + */ +export function calc(num1: number, num2: number, calcStr: string) { + var str1 // 转换为字符串的数字 + var str2 + var ws1 = 0; var // ws1,ws2 用来存储传入的num的小数点后的数字的位数 + ws2 = 0; var // 赋默认值,解决当整数和小数运算时倍数计算错误导致的结果误差 + bigger; var // bigger和smaller用于加,减,除法找出小的那个数字,给后面补0,解决位数不对从而造成的计算错误的问题;乘法需要将结果除两个数字的倍数之和 + smaller; var // 例如:加减除法中1.001 + 2.03 ,如果不给2.03进行补0,最后会变成1001+203,数字错位导致结果错误;乘法中1.12*1.1会放大为112*11,所以结果需要除以1000才会是正确的结果,112*11/1000=1.232 + zeroCount // 需要补充0的个数 + var isExistDot1 // 传入的数字是否存在小数点 + var isExistDot2 + var sum + var beishu = 1 + // 将数字转换为字符串 + str1 = num1.toString() + str2 = num2.toString() + // 是否存在小数点(判断需要计算的数字是不是包含小数) + isExistDot1 = !!str1.includes('.') + isExistDot2 = !!str2.includes('.') + // 取小数点后面的位数 + if (isExistDot1) { + ws1 = str1.split('.')[1].length + } + + if (isExistDot2) { + ws2 = str2.split('.')[1].length + } + // 如ws1 和 ws2 无默认值,如果num1 或 num2 不是小数的话则 ws1 或 ws2 的值将为 undefined + // bigger 和 smaller 的值会和预期不符 + bigger = ws1 > ws2 ? ws1 : ws2 + smaller = ws1 < ws2 ? ws1 : ws2 + + switch (calcStr) { + // 加减法找出小的那个数字,给后面补0,解决位数不对从而造成的计算错误的问题 + // 例如:1.001 + 2.03 ,如果不给2.03进行补0,最后会变成1001+203,数字错位导致结果错误 + case '+': + case '-': + case '/': + zeroCount = bigger - smaller + for (var i = 0; i < zeroCount; i++) { + if (ws1 == smaller) { + str1 += '0' + } + else { + str2 += '0' + } + } + break + case '*': + // 乘法需要将结果除两个数字的倍数之和 + bigger = bigger + smaller + break + default: + return '暂不支持的计算类型,现已支持的有加法、减法、乘法、除法' + break + } + + // 去除数字中的小数点 + str1 = str1.replace('.', '') + str2 = str2.replace('.', '') + + // 计算倍数,例如:1.001小数点后有三位,则需要乘 1000 变成 1001,变成整数后精度丢失问题则不会存在 + for (var j = 0; j < bigger; j++) { + beishu *= 10 // 等价于beishu = beishu * 10; + } + num1 = parseInt(str1) + num2 = parseInt(str2) + // 进行最终计算并除相应倍数 + switch (calcStr) { + case '+': + sum = (num1 + num2) / beishu + break + case '-': + sum = (num1 - num2) / beishu + break + case '*': + sum = (num1 * num2) / beishu + break + case '/': + sum = num1 / num2 + /* 除数与被除数同时放大一定倍数,不影响结果, + 所以对数字进行放大对应倍数并进行补0操作后不用另对倍数做处理 */ + break + default: + return '暂不支持的计算类型,现已支持的有加法、减法、乘法、除法' + } + console.log('计算结果:', sum, typeof sum) + + return sum +} diff --git a/src/utils/validate.ts b/src/utils/validate.ts index 44802d0..69cbe21 100644 --- a/src/utils/validate.ts +++ b/src/utils/validate.ts @@ -23,7 +23,7 @@ * @returns 是否合法 */ export const isNumber = (value: any) => { - var rep = /^[0-9]+.?[0-9]*$/ + var rep = /^([1-9][0-9]*|0)(\.[0-9]*[1-9])?$/ return rep.test(value) } @@ -139,3 +139,11 @@ const re = /[0-9A-Za-z\\W]{6,18}$/ return re.test(value) } +/** + * 校验金额:正数,且最多只能保留2位小数 + */ +export function validateMoney(value: string) { + const reg = /^(?!0+(?:\.0+)?$)(?:[1-9]\d*|0)(?:\.\d{1,2})?$/ + return reg.test(value) +} + diff --git a/src/api/finance/businessSettlement/businessSettlement.ts b/src/api/finance/businessSettlement/businessSettlement.ts index aba021c..b4c7efe 100644 --- a/src/api/finance/businessSettlement/businessSettlement.ts +++ b/src/api/finance/businessSettlement/businessSettlement.ts @@ -21,3 +21,39 @@ }) } +// 删除 +export function delBusinessSettlementList(data: any) { + return request({ + url: '/finance/settlement/delete', + method: 'post', + data, + }) +} + +// 新增 +export function addBusinessSettlement(data: Object) { + return request({ + url: '/finance/settlement/add', + method: 'post', + data, + }) +} + +// 编辑 +export function updateBusinessSettlement(data: Object) { + return request({ + url: '/finance/settlement/update', + method: 'post', + data, + }) +} + +// 详情 +export function getBusinessSettlementDetail(data: { id: string }) { + return request({ + url: '/finance/settlement/detail', + method: 'post', + data, + }) +} + diff --git a/src/router/modules/financial.ts b/src/router/modules/financial.ts index 2a7b1cc..b2da11d 100644 --- a/src/router/modules/financial.ts +++ b/src/router/modules/financial.ts @@ -48,6 +48,18 @@ auth: '/finance/businessSettlement/list', }, }, + { + path: ':type/:id?', + name: 'businessSettlementDetail', + component: () => import('@/views/finance/businessSettlement/edit.vue'), + meta: { + title: '业务结算详情', + icon: 'ep:key', + sidebar: false, + breadcrumb: true, + activeMenu: '/businessSettlement/list', + }, + }, ], }, ] diff --git a/src/utils/useCalc.ts b/src/utils/useCalc.ts new file mode 100644 index 0000000..e59c2e2 --- /dev/null +++ b/src/utils/useCalc.ts @@ -0,0 +1,96 @@ +/** + * 解决小数计算精度问题 + * @param num1 第一位数 + * @param num2 第二位数 + * @param calcStr 计算方式 + - * / + * @returns + */ +export function calc(num1: number, num2: number, calcStr: string) { + var str1 // 转换为字符串的数字 + var str2 + var ws1 = 0; var // ws1,ws2 用来存储传入的num的小数点后的数字的位数 + ws2 = 0; var // 赋默认值,解决当整数和小数运算时倍数计算错误导致的结果误差 + bigger; var // bigger和smaller用于加,减,除法找出小的那个数字,给后面补0,解决位数不对从而造成的计算错误的问题;乘法需要将结果除两个数字的倍数之和 + smaller; var // 例如:加减除法中1.001 + 2.03 ,如果不给2.03进行补0,最后会变成1001+203,数字错位导致结果错误;乘法中1.12*1.1会放大为112*11,所以结果需要除以1000才会是正确的结果,112*11/1000=1.232 + zeroCount // 需要补充0的个数 + var isExistDot1 // 传入的数字是否存在小数点 + var isExistDot2 + var sum + var beishu = 1 + // 将数字转换为字符串 + str1 = num1.toString() + str2 = num2.toString() + // 是否存在小数点(判断需要计算的数字是不是包含小数) + isExistDot1 = !!str1.includes('.') + isExistDot2 = !!str2.includes('.') + // 取小数点后面的位数 + if (isExistDot1) { + ws1 = str1.split('.')[1].length + } + + if (isExistDot2) { + ws2 = str2.split('.')[1].length + } + // 如ws1 和 ws2 无默认值,如果num1 或 num2 不是小数的话则 ws1 或 ws2 的值将为 undefined + // bigger 和 smaller 的值会和预期不符 + bigger = ws1 > ws2 ? ws1 : ws2 + smaller = ws1 < ws2 ? ws1 : ws2 + + switch (calcStr) { + // 加减法找出小的那个数字,给后面补0,解决位数不对从而造成的计算错误的问题 + // 例如:1.001 + 2.03 ,如果不给2.03进行补0,最后会变成1001+203,数字错位导致结果错误 + case '+': + case '-': + case '/': + zeroCount = bigger - smaller + for (var i = 0; i < zeroCount; i++) { + if (ws1 == smaller) { + str1 += '0' + } + else { + str2 += '0' + } + } + break + case '*': + // 乘法需要将结果除两个数字的倍数之和 + bigger = bigger + smaller + break + default: + return '暂不支持的计算类型,现已支持的有加法、减法、乘法、除法' + break + } + + // 去除数字中的小数点 + str1 = str1.replace('.', '') + str2 = str2.replace('.', '') + + // 计算倍数,例如:1.001小数点后有三位,则需要乘 1000 变成 1001,变成整数后精度丢失问题则不会存在 + for (var j = 0; j < bigger; j++) { + beishu *= 10 // 等价于beishu = beishu * 10; + } + num1 = parseInt(str1) + num2 = parseInt(str2) + // 进行最终计算并除相应倍数 + switch (calcStr) { + case '+': + sum = (num1 + num2) / beishu + break + case '-': + sum = (num1 - num2) / beishu + break + case '*': + sum = (num1 * num2) / beishu + break + case '/': + sum = num1 / num2 + /* 除数与被除数同时放大一定倍数,不影响结果, + 所以对数字进行放大对应倍数并进行补0操作后不用另对倍数做处理 */ + break + default: + return '暂不支持的计算类型,现已支持的有加法、减法、乘法、除法' + } + console.log('计算结果:', sum, typeof sum) + + return sum +} diff --git a/src/utils/validate.ts b/src/utils/validate.ts index 44802d0..69cbe21 100644 --- a/src/utils/validate.ts +++ b/src/utils/validate.ts @@ -23,7 +23,7 @@ * @returns 是否合法 */ export const isNumber = (value: any) => { - var rep = /^[0-9]+.?[0-9]*$/ + var rep = /^([1-9][0-9]*|0)(\.[0-9]*[1-9])?$/ return rep.test(value) } @@ -139,3 +139,11 @@ const re = /[0-9A-Za-z\\W]{6,18}$/ return re.test(value) } +/** + * 校验金额:正数,且最多只能保留2位小数 + */ +export function validateMoney(value: string) { + const reg = /^(?!0+(?:\.0+)?$)(?:[1-9]\d*|0)(?:\.\d{1,2})?$/ + return reg.test(value) +} + diff --git a/src/views/finance/businessSettlement/businessSettlement-interface.ts b/src/views/finance/businessSettlement/businessSettlement-interface.ts index d810250..13a1a0c 100644 --- a/src/views/finance/businessSettlement/businessSettlement-interface.ts +++ b/src/views/finance/businessSettlement/businessSettlement-interface.ts @@ -34,3 +34,36 @@ value: string | number label?: string // 基本信息添加的信息名称 } +export interface IsampleList { + id?: string // 样品id + price: string // 标价 + relationId: string // 委托书-样品关联表id + sampleNo?: string // 样品编号 + sampleName?: string // 样品名称 + sampleModel?: string // 型号 + manufacturingNo?: string // 出厂编号 + measureContent?: string // 检定项目 + [key: string]: any +} + +// 表单 +export interface IForm { + orderCode: string // 委托书编号 + orderId: string // 委托书编号 + deliverer: string // 送检人 + delivererTel: string // 送样人联系方式 + createTime: string // 委托单创建时间 + planDeliverTime: string // 预计送达时间 + requireOverTime: string // 要求检完时间 + customerNo: string // 委托方代码 + customerId: string // 委托方id + customerName: string // 委托方名称 + phone: string // 委托方电话 + priceFront: number // 标价 + suggestedDiscount: number // 建议折扣 + suggestedPrice: number // 建议价格 + extraCharge: number // 附加费用-单位分 + extraChargeIllustration: string // 附加费用说明 + totalSettlement: number // 总计结算费用 + samplePriceList: Array // 样品清单 +} diff --git a/src/api/finance/businessSettlement/businessSettlement.ts b/src/api/finance/businessSettlement/businessSettlement.ts index aba021c..b4c7efe 100644 --- a/src/api/finance/businessSettlement/businessSettlement.ts +++ b/src/api/finance/businessSettlement/businessSettlement.ts @@ -21,3 +21,39 @@ }) } +// 删除 +export function delBusinessSettlementList(data: any) { + return request({ + url: '/finance/settlement/delete', + method: 'post', + data, + }) +} + +// 新增 +export function addBusinessSettlement(data: Object) { + return request({ + url: '/finance/settlement/add', + method: 'post', + data, + }) +} + +// 编辑 +export function updateBusinessSettlement(data: Object) { + return request({ + url: '/finance/settlement/update', + method: 'post', + data, + }) +} + +// 详情 +export function getBusinessSettlementDetail(data: { id: string }) { + return request({ + url: '/finance/settlement/detail', + method: 'post', + data, + }) +} + diff --git a/src/router/modules/financial.ts b/src/router/modules/financial.ts index 2a7b1cc..b2da11d 100644 --- a/src/router/modules/financial.ts +++ b/src/router/modules/financial.ts @@ -48,6 +48,18 @@ auth: '/finance/businessSettlement/list', }, }, + { + path: ':type/:id?', + name: 'businessSettlementDetail', + component: () => import('@/views/finance/businessSettlement/edit.vue'), + meta: { + title: '业务结算详情', + icon: 'ep:key', + sidebar: false, + breadcrumb: true, + activeMenu: '/businessSettlement/list', + }, + }, ], }, ] diff --git a/src/utils/useCalc.ts b/src/utils/useCalc.ts new file mode 100644 index 0000000..e59c2e2 --- /dev/null +++ b/src/utils/useCalc.ts @@ -0,0 +1,96 @@ +/** + * 解决小数计算精度问题 + * @param num1 第一位数 + * @param num2 第二位数 + * @param calcStr 计算方式 + - * / + * @returns + */ +export function calc(num1: number, num2: number, calcStr: string) { + var str1 // 转换为字符串的数字 + var str2 + var ws1 = 0; var // ws1,ws2 用来存储传入的num的小数点后的数字的位数 + ws2 = 0; var // 赋默认值,解决当整数和小数运算时倍数计算错误导致的结果误差 + bigger; var // bigger和smaller用于加,减,除法找出小的那个数字,给后面补0,解决位数不对从而造成的计算错误的问题;乘法需要将结果除两个数字的倍数之和 + smaller; var // 例如:加减除法中1.001 + 2.03 ,如果不给2.03进行补0,最后会变成1001+203,数字错位导致结果错误;乘法中1.12*1.1会放大为112*11,所以结果需要除以1000才会是正确的结果,112*11/1000=1.232 + zeroCount // 需要补充0的个数 + var isExistDot1 // 传入的数字是否存在小数点 + var isExistDot2 + var sum + var beishu = 1 + // 将数字转换为字符串 + str1 = num1.toString() + str2 = num2.toString() + // 是否存在小数点(判断需要计算的数字是不是包含小数) + isExistDot1 = !!str1.includes('.') + isExistDot2 = !!str2.includes('.') + // 取小数点后面的位数 + if (isExistDot1) { + ws1 = str1.split('.')[1].length + } + + if (isExistDot2) { + ws2 = str2.split('.')[1].length + } + // 如ws1 和 ws2 无默认值,如果num1 或 num2 不是小数的话则 ws1 或 ws2 的值将为 undefined + // bigger 和 smaller 的值会和预期不符 + bigger = ws1 > ws2 ? ws1 : ws2 + smaller = ws1 < ws2 ? ws1 : ws2 + + switch (calcStr) { + // 加减法找出小的那个数字,给后面补0,解决位数不对从而造成的计算错误的问题 + // 例如:1.001 + 2.03 ,如果不给2.03进行补0,最后会变成1001+203,数字错位导致结果错误 + case '+': + case '-': + case '/': + zeroCount = bigger - smaller + for (var i = 0; i < zeroCount; i++) { + if (ws1 == smaller) { + str1 += '0' + } + else { + str2 += '0' + } + } + break + case '*': + // 乘法需要将结果除两个数字的倍数之和 + bigger = bigger + smaller + break + default: + return '暂不支持的计算类型,现已支持的有加法、减法、乘法、除法' + break + } + + // 去除数字中的小数点 + str1 = str1.replace('.', '') + str2 = str2.replace('.', '') + + // 计算倍数,例如:1.001小数点后有三位,则需要乘 1000 变成 1001,变成整数后精度丢失问题则不会存在 + for (var j = 0; j < bigger; j++) { + beishu *= 10 // 等价于beishu = beishu * 10; + } + num1 = parseInt(str1) + num2 = parseInt(str2) + // 进行最终计算并除相应倍数 + switch (calcStr) { + case '+': + sum = (num1 + num2) / beishu + break + case '-': + sum = (num1 - num2) / beishu + break + case '*': + sum = (num1 * num2) / beishu + break + case '/': + sum = num1 / num2 + /* 除数与被除数同时放大一定倍数,不影响结果, + 所以对数字进行放大对应倍数并进行补0操作后不用另对倍数做处理 */ + break + default: + return '暂不支持的计算类型,现已支持的有加法、减法、乘法、除法' + } + console.log('计算结果:', sum, typeof sum) + + return sum +} diff --git a/src/utils/validate.ts b/src/utils/validate.ts index 44802d0..69cbe21 100644 --- a/src/utils/validate.ts +++ b/src/utils/validate.ts @@ -23,7 +23,7 @@ * @returns 是否合法 */ export const isNumber = (value: any) => { - var rep = /^[0-9]+.?[0-9]*$/ + var rep = /^([1-9][0-9]*|0)(\.[0-9]*[1-9])?$/ return rep.test(value) } @@ -139,3 +139,11 @@ const re = /[0-9A-Za-z\\W]{6,18}$/ return re.test(value) } +/** + * 校验金额:正数,且最多只能保留2位小数 + */ +export function validateMoney(value: string) { + const reg = /^(?!0+(?:\.0+)?$)(?:[1-9]\d*|0)(?:\.\d{1,2})?$/ + return reg.test(value) +} + diff --git a/src/views/finance/businessSettlement/businessSettlement-interface.ts b/src/views/finance/businessSettlement/businessSettlement-interface.ts index d810250..13a1a0c 100644 --- a/src/views/finance/businessSettlement/businessSettlement-interface.ts +++ b/src/views/finance/businessSettlement/businessSettlement-interface.ts @@ -34,3 +34,36 @@ value: string | number label?: string // 基本信息添加的信息名称 } +export interface IsampleList { + id?: string // 样品id + price: string // 标价 + relationId: string // 委托书-样品关联表id + sampleNo?: string // 样品编号 + sampleName?: string // 样品名称 + sampleModel?: string // 型号 + manufacturingNo?: string // 出厂编号 + measureContent?: string // 检定项目 + [key: string]: any +} + +// 表单 +export interface IForm { + orderCode: string // 委托书编号 + orderId: string // 委托书编号 + deliverer: string // 送检人 + delivererTel: string // 送样人联系方式 + createTime: string // 委托单创建时间 + planDeliverTime: string // 预计送达时间 + requireOverTime: string // 要求检完时间 + customerNo: string // 委托方代码 + customerId: string // 委托方id + customerName: string // 委托方名称 + phone: string // 委托方电话 + priceFront: number // 标价 + suggestedDiscount: number // 建议折扣 + suggestedPrice: number // 建议价格 + extraCharge: number // 附加费用-单位分 + extraChargeIllustration: string // 附加费用说明 + totalSettlement: number // 总计结算费用 + samplePriceList: Array // 样品清单 +} diff --git a/src/views/finance/businessSettlement/edit.vue b/src/views/finance/businessSettlement/edit.vue new file mode 100644 index 0000000..9803d29 --- /dev/null +++ b/src/views/finance/businessSettlement/edit.vue @@ -0,0 +1,542 @@ + + + + + diff --git a/src/api/finance/businessSettlement/businessSettlement.ts b/src/api/finance/businessSettlement/businessSettlement.ts index aba021c..b4c7efe 100644 --- a/src/api/finance/businessSettlement/businessSettlement.ts +++ b/src/api/finance/businessSettlement/businessSettlement.ts @@ -21,3 +21,39 @@ }) } +// 删除 +export function delBusinessSettlementList(data: any) { + return request({ + url: '/finance/settlement/delete', + method: 'post', + data, + }) +} + +// 新增 +export function addBusinessSettlement(data: Object) { + return request({ + url: '/finance/settlement/add', + method: 'post', + data, + }) +} + +// 编辑 +export function updateBusinessSettlement(data: Object) { + return request({ + url: '/finance/settlement/update', + method: 'post', + data, + }) +} + +// 详情 +export function getBusinessSettlementDetail(data: { id: string }) { + return request({ + url: '/finance/settlement/detail', + method: 'post', + data, + }) +} + diff --git a/src/router/modules/financial.ts b/src/router/modules/financial.ts index 2a7b1cc..b2da11d 100644 --- a/src/router/modules/financial.ts +++ b/src/router/modules/financial.ts @@ -48,6 +48,18 @@ auth: '/finance/businessSettlement/list', }, }, + { + path: ':type/:id?', + name: 'businessSettlementDetail', + component: () => import('@/views/finance/businessSettlement/edit.vue'), + meta: { + title: '业务结算详情', + icon: 'ep:key', + sidebar: false, + breadcrumb: true, + activeMenu: '/businessSettlement/list', + }, + }, ], }, ] diff --git a/src/utils/useCalc.ts b/src/utils/useCalc.ts new file mode 100644 index 0000000..e59c2e2 --- /dev/null +++ b/src/utils/useCalc.ts @@ -0,0 +1,96 @@ +/** + * 解决小数计算精度问题 + * @param num1 第一位数 + * @param num2 第二位数 + * @param calcStr 计算方式 + - * / + * @returns + */ +export function calc(num1: number, num2: number, calcStr: string) { + var str1 // 转换为字符串的数字 + var str2 + var ws1 = 0; var // ws1,ws2 用来存储传入的num的小数点后的数字的位数 + ws2 = 0; var // 赋默认值,解决当整数和小数运算时倍数计算错误导致的结果误差 + bigger; var // bigger和smaller用于加,减,除法找出小的那个数字,给后面补0,解决位数不对从而造成的计算错误的问题;乘法需要将结果除两个数字的倍数之和 + smaller; var // 例如:加减除法中1.001 + 2.03 ,如果不给2.03进行补0,最后会变成1001+203,数字错位导致结果错误;乘法中1.12*1.1会放大为112*11,所以结果需要除以1000才会是正确的结果,112*11/1000=1.232 + zeroCount // 需要补充0的个数 + var isExistDot1 // 传入的数字是否存在小数点 + var isExistDot2 + var sum + var beishu = 1 + // 将数字转换为字符串 + str1 = num1.toString() + str2 = num2.toString() + // 是否存在小数点(判断需要计算的数字是不是包含小数) + isExistDot1 = !!str1.includes('.') + isExistDot2 = !!str2.includes('.') + // 取小数点后面的位数 + if (isExistDot1) { + ws1 = str1.split('.')[1].length + } + + if (isExistDot2) { + ws2 = str2.split('.')[1].length + } + // 如ws1 和 ws2 无默认值,如果num1 或 num2 不是小数的话则 ws1 或 ws2 的值将为 undefined + // bigger 和 smaller 的值会和预期不符 + bigger = ws1 > ws2 ? ws1 : ws2 + smaller = ws1 < ws2 ? ws1 : ws2 + + switch (calcStr) { + // 加减法找出小的那个数字,给后面补0,解决位数不对从而造成的计算错误的问题 + // 例如:1.001 + 2.03 ,如果不给2.03进行补0,最后会变成1001+203,数字错位导致结果错误 + case '+': + case '-': + case '/': + zeroCount = bigger - smaller + for (var i = 0; i < zeroCount; i++) { + if (ws1 == smaller) { + str1 += '0' + } + else { + str2 += '0' + } + } + break + case '*': + // 乘法需要将结果除两个数字的倍数之和 + bigger = bigger + smaller + break + default: + return '暂不支持的计算类型,现已支持的有加法、减法、乘法、除法' + break + } + + // 去除数字中的小数点 + str1 = str1.replace('.', '') + str2 = str2.replace('.', '') + + // 计算倍数,例如:1.001小数点后有三位,则需要乘 1000 变成 1001,变成整数后精度丢失问题则不会存在 + for (var j = 0; j < bigger; j++) { + beishu *= 10 // 等价于beishu = beishu * 10; + } + num1 = parseInt(str1) + num2 = parseInt(str2) + // 进行最终计算并除相应倍数 + switch (calcStr) { + case '+': + sum = (num1 + num2) / beishu + break + case '-': + sum = (num1 - num2) / beishu + break + case '*': + sum = (num1 * num2) / beishu + break + case '/': + sum = num1 / num2 + /* 除数与被除数同时放大一定倍数,不影响结果, + 所以对数字进行放大对应倍数并进行补0操作后不用另对倍数做处理 */ + break + default: + return '暂不支持的计算类型,现已支持的有加法、减法、乘法、除法' + } + console.log('计算结果:', sum, typeof sum) + + return sum +} diff --git a/src/utils/validate.ts b/src/utils/validate.ts index 44802d0..69cbe21 100644 --- a/src/utils/validate.ts +++ b/src/utils/validate.ts @@ -23,7 +23,7 @@ * @returns 是否合法 */ export const isNumber = (value: any) => { - var rep = /^[0-9]+.?[0-9]*$/ + var rep = /^([1-9][0-9]*|0)(\.[0-9]*[1-9])?$/ return rep.test(value) } @@ -139,3 +139,11 @@ const re = /[0-9A-Za-z\\W]{6,18}$/ return re.test(value) } +/** + * 校验金额:正数,且最多只能保留2位小数 + */ +export function validateMoney(value: string) { + const reg = /^(?!0+(?:\.0+)?$)(?:[1-9]\d*|0)(?:\.\d{1,2})?$/ + return reg.test(value) +} + diff --git a/src/views/finance/businessSettlement/businessSettlement-interface.ts b/src/views/finance/businessSettlement/businessSettlement-interface.ts index d810250..13a1a0c 100644 --- a/src/views/finance/businessSettlement/businessSettlement-interface.ts +++ b/src/views/finance/businessSettlement/businessSettlement-interface.ts @@ -34,3 +34,36 @@ value: string | number label?: string // 基本信息添加的信息名称 } +export interface IsampleList { + id?: string // 样品id + price: string // 标价 + relationId: string // 委托书-样品关联表id + sampleNo?: string // 样品编号 + sampleName?: string // 样品名称 + sampleModel?: string // 型号 + manufacturingNo?: string // 出厂编号 + measureContent?: string // 检定项目 + [key: string]: any +} + +// 表单 +export interface IForm { + orderCode: string // 委托书编号 + orderId: string // 委托书编号 + deliverer: string // 送检人 + delivererTel: string // 送样人联系方式 + createTime: string // 委托单创建时间 + planDeliverTime: string // 预计送达时间 + requireOverTime: string // 要求检完时间 + customerNo: string // 委托方代码 + customerId: string // 委托方id + customerName: string // 委托方名称 + phone: string // 委托方电话 + priceFront: number // 标价 + suggestedDiscount: number // 建议折扣 + suggestedPrice: number // 建议价格 + extraCharge: number // 附加费用-单位分 + extraChargeIllustration: string // 附加费用说明 + totalSettlement: number // 总计结算费用 + samplePriceList: Array // 样品清单 +} diff --git a/src/views/finance/businessSettlement/edit.vue b/src/views/finance/businessSettlement/edit.vue new file mode 100644 index 0000000..9803d29 --- /dev/null +++ b/src/views/finance/businessSettlement/edit.vue @@ -0,0 +1,542 @@ + + + + + diff --git a/src/views/finance/businessSettlement/list.vue b/src/views/finance/businessSettlement/list.vue index d4661a3..66cac60 100644 --- a/src/views/finance/businessSettlement/list.vue +++ b/src/views/finance/businessSettlement/list.vue @@ -1,16 +1,13 @@