diff --git a/antis-ncc-admin/src/api/extend/headquartersStock.js b/antis-ncc-admin/src/api/extend/headquartersStock.js new file mode 100644 index 0000000..ad1e57f --- /dev/null +++ b/antis-ncc-admin/src/api/extend/headquartersStock.js @@ -0,0 +1,20 @@ +import request from '@/utils/request' + +// 获取总部股份统计列表 +export function getHeadquartersStockList(params) { + return request({ + url: '/api/Extend/lqsharestatisticshq/list', + method: 'GET', + data: params + }) +} + +// 生成总部股份统计数据 +export function generateHeadquartersStock(data) { + return request({ + url: '/api/Extend/lqsharestatisticshq/generate', + method: 'POST', + data: data + }) +} + diff --git a/antis-ncc-admin/src/api/extend/shopStock.js b/antis-ncc-admin/src/api/extend/shopStock.js new file mode 100644 index 0000000..443c14d --- /dev/null +++ b/antis-ncc-admin/src/api/extend/shopStock.js @@ -0,0 +1,28 @@ +import request from '@/utils/request' + +// 获取门店股份统计列表 +export function getShopStockList(params) { + return request({ + url: '/api/Extend/lqsharestatisticsstore/list', + method: 'GET', + data: params + }) +} + +// 生成门店股份统计数据 +export function generateShopStock(data) { + return request({ + url: '/api/Extend/lqsharestatisticsstore/generate', + method: 'POST', + data: data + }) +} + +// 获取门店下拉框列表 +export function getStoreSelector() { + return request({ + url: '/api/Extend/LqMdxx/Selector', + method: 'GET' + }) +} + diff --git a/antis-ncc-admin/src/api/extend/techStock.js b/antis-ncc-admin/src/api/extend/techStock.js new file mode 100644 index 0000000..7b07a14 --- /dev/null +++ b/antis-ncc-admin/src/api/extend/techStock.js @@ -0,0 +1,20 @@ +import request from '@/utils/request' + +// 获取科技部股份统计列表 +export function getTechStockList(params) { + return request({ + url: '/api/Extend/lqsharestatisticstechdept/list', + method: 'GET', + data: params + }) +} + +// 生成科技部股份统计数据 +export function generateTechStock(data) { + return request({ + url: '/api/Extend/lqsharestatisticstechdept/generate', + method: 'POST', + data: data + }) +} + diff --git a/antis-ncc-admin/src/views/statisticsList/form13.vue b/antis-ncc-admin/src/views/statisticsList/form13.vue index c6ab8dc..651cc89 100644 --- a/antis-ncc-admin/src/views/statisticsList/form13.vue +++ b/antis-ncc-admin/src/views/statisticsList/form13.vue @@ -209,12 +209,12 @@ diff --git a/antis-ncc-admin/src/views/wageManagement/headquarters-stock-detail-dialog.vue b/antis-ncc-admin/src/views/wageManagement/headquarters-stock-detail-dialog.vue new file mode 100644 index 0000000..20b0e3f --- /dev/null +++ b/antis-ncc-admin/src/views/wageManagement/headquarters-stock-detail-dialog.vue @@ -0,0 +1,262 @@ + + + + + + diff --git a/antis-ncc-admin/src/views/wageManagement/headquarters-stock.vue b/antis-ncc-admin/src/views/wageManagement/headquarters-stock.vue index 899688d..b739f67 100644 --- a/antis-ncc-admin/src/views/wageManagement/headquarters-stock.vue +++ b/antis-ncc-admin/src/views/wageManagement/headquarters-stock.vue @@ -8,8 +8,24 @@
+ 导出 + + + 计算股份 + + 刷新 @@ -17,28 +33,382 @@
- -
- + +
+ + + + + + 搜索 + 重置 + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + +
+ + + diff --git a/antis-ncc-admin/src/views/wageManagement/major-project-directors.vue b/antis-ncc-admin/src/views/wageManagement/major-project-directors.vue index 4a2664b..202bcb4 100644 --- a/antis-ncc-admin/src/views/wageManagement/major-project-directors.vue +++ b/antis-ncc-admin/src/views/wageManagement/major-project-directors.vue @@ -8,6 +8,14 @@
+ 导出 + + - - + + @@ -348,6 +365,13 @@
+ + + import { getMajorProjectDirectorSalaryList, calculateMajorProjectDirectorSalary } from '@/api/extend/majorProjectDirectorSalary' +import MajorProjectDirectorDetailDialog from './major-project-director-detail-dialog.vue' export default { name: 'MajorProjectDirectorSalary', + components: { + MajorProjectDirectorDetailDialog + }, data() { // 获取当前年月 const getCurrentYear = () => { @@ -400,11 +428,14 @@ export default { return { loading: false, calculateLoading: false, + exportLoading: false, list: [], total: 0, calculateDialogVisible: false, calculateYear: getCurrentYear(), calculateMonth: getCurrentMonth(), + detailVisible: false, + currentDetailData: null, storeDetailVisible: false, storeDetailList: [], queryParams: { @@ -575,6 +606,152 @@ export default { this.storeDetailList = [] }, + // 显示详情 + showDetail(row) { + this.currentDetailData = row + this.detailVisible = true + }, + + // 关闭详情弹窗 + handleDetailClose() { + this.detailVisible = false + this.currentDetailData = null + }, + + // 导出功能 + async handleExport() { + if (!this.list || this.list.length === 0) { + this.$message.warning('暂无数据可导出') + return + } + + this.exportLoading = true + try { + // 动态导入 xlsx 库 + const XLSX = await import('xlsx') + + // 构建表头(根据后端DTO字段的中文映射) + const headers = [ + '员工姓名', + '员工账号', + '核算岗位', + '统计月份', + '是否离职', + '开单金额', + '退卡金额', + '总业绩', + '底薪', + '提成比例', + '提成金额', + '在店天数', + '请假天数', + '核算应发工资', + '最终应发工资', + '当月培训补贴', + '当月交通补贴', + '上月培训补贴', + '上月交通补贴', + '补贴合计', + '缺卡扣款', + '迟到扣款', + '请假扣款', + '扣社保', + '扣除奖励', + '扣住宿费', + '扣学习期费用', + '扣工作服费用', + '扣款合计', + '发奖金', + '退手机押金', + '退住宿押金', + '补发上月', + '实发工资', + '当月是否发放', + '支付金额', + '待支付金额', + '当月支付总额', + '是否锁定' + ] + + // 构建数据行 + const dataRows = this.list.map(item => [ + item.EmployeeName || '无', + item.EmployeeAccount || '无', + item.Position || '无', + item.StatisticsMonth || '无', + item.IsTerminated === 1 ? '已离职' : '在职', + this.formatMoney(item.BillingAmount), + this.formatMoney(item.RefundAmount), + this.formatMoney(item.TotalPerformance), + this.formatMoney(item.BaseSalary), + this.formatPercent(item.CommissionRate), + this.formatMoney(item.CommissionAmount), + item.WorkingDays || '0', + item.LeaveDays || '0', + this.formatMoney(item.CalculatedGrossSalary), + this.formatMoney(item.FinalGrossSalary), + this.formatMoney(item.MonthlyTrainingSubsidy), + this.formatMoney(item.MonthlyTransportSubsidy), + this.formatMoney(item.LastMonthTrainingSubsidy), + this.formatMoney(item.LastMonthTransportSubsidy), + this.formatMoney(item.TotalSubsidy), + this.formatMoney(item.MissingCard), + this.formatMoney(item.LateArrival), + this.formatMoney(item.LeaveDeduction), + this.formatMoney(item.SocialInsuranceDeduction), + this.formatMoney(item.RewardDeduction), + this.formatMoney(item.AccommodationDeduction), + this.formatMoney(item.StudyPeriodDeduction), + this.formatMoney(item.WorkClothesDeduction), + this.formatMoney(item.TotalDeduction), + this.formatMoney(item.Bonus), + this.formatMoney(item.ReturnPhoneDeposit), + this.formatMoney(item.ReturnAccommodationDeposit), + this.formatMoney(item.LastMonthSupplement), + this.formatMoney(item.ActualSalary), + item.MonthlyPaymentStatus || '无', + this.formatMoney(item.PaidAmount), + this.formatMoney(item.PendingAmount), + this.formatMoney(item.MonthlyTotalPayment), + item.IsLocked === 1 ? '已锁定' : '未锁定' + ]) + + // 合并表头和数据 + const excelData = [headers, ...dataRows] + + // 创建工作表 + const ws = XLSX.utils.aoa_to_sheet(excelData) + + // 设置列宽 + const colWidths = headers.map(() => ({ wch: 15 })) + ws['!cols'] = colWidths + + // 创建工作簿 + const wb = XLSX.utils.book_new() + XLSX.utils.book_append_sheet(wb, ws, '大项目主管工资') + + // 生成文件名 + const now = new Date() + const timestamp = now.getFullYear() + + String(now.getMonth() + 1).padStart(2, '0') + + String(now.getDate()).padStart(2, '0') + + String(now.getHours()).padStart(2, '0') + + String(now.getMinutes()).padStart(2, '0') + + String(now.getSeconds()).padStart(2, '0') + const fileName = `大项目主管工资_${timestamp}.xlsx` + + // 导出文件 + XLSX.writeFile(wb, fileName) + + this.$message.success('导出成功') + } catch (error) { + console.error('导出失败:', error) + this.$message.error('导出失败,请重试') + } finally { + this.exportLoading = false + } + }, + // 格式化金额 formatMoney(value) { if (value === null || value === undefined || value === '') { diff --git a/antis-ncc-admin/src/views/wageManagement/shop-stock-detail-dialog.vue b/antis-ncc-admin/src/views/wageManagement/shop-stock-detail-dialog.vue new file mode 100644 index 0000000..17d255c --- /dev/null +++ b/antis-ncc-admin/src/views/wageManagement/shop-stock-detail-dialog.vue @@ -0,0 +1,478 @@ + + + + + + diff --git a/antis-ncc-admin/src/views/wageManagement/shop-stock.vue b/antis-ncc-admin/src/views/wageManagement/shop-stock.vue index 7caf48f..b117c80 100644 --- a/antis-ncc-admin/src/views/wageManagement/shop-stock.vue +++ b/antis-ncc-admin/src/views/wageManagement/shop-stock.vue @@ -8,8 +8,24 @@
+ 导出 + + + 计算股份 + + 刷新 @@ -17,28 +33,754 @@
- -
- + +
+ + + + + + + + + + + 搜索 + 重置 + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + diff --git a/antis-ncc-admin/src/views/wageManagement/tech-general-managers.vue b/antis-ncc-admin/src/views/wageManagement/tech-general-managers.vue index 028bc39..3a6ed01 100644 --- a/antis-ncc-admin/src/views/wageManagement/tech-general-managers.vue +++ b/antis-ncc-admin/src/views/wageManagement/tech-general-managers.vue @@ -8,6 +8,14 @@
+ 导出 + + - - + + @@ -358,6 +375,13 @@
+ + + import { getTechGeneralManagerSalaryList, calculateTechGeneralManagerSalary } from '@/api/extend/techGeneralManagerSalary' +import TechGeneralManagerDetailDialog from './tech-general-manager-detail-dialog.vue' export default { name: 'TechGeneralManagerSalary', + components: { + TechGeneralManagerDetailDialog + }, data() { // 获取当前年月 const getCurrentYear = () => { @@ -429,11 +457,14 @@ export default { return { loading: false, calculateLoading: false, + exportLoading: false, list: [], total: 0, calculateDialogVisible: false, calculateYear: getCurrentYear(), calculateMonth: getCurrentMonth(), + detailVisible: false, + currentDetailData: null, storeDetailVisible: false, storeDetailList: [], queryParams: { @@ -604,6 +635,156 @@ export default { this.storeDetailList = [] }, + // 显示详情 + showDetail(row) { + this.currentDetailData = row + this.detailVisible = true + }, + + // 关闭详情弹窗 + handleDetailClose() { + this.detailVisible = false + this.currentDetailData = null + }, + + // 导出功能 + async handleExport() { + if (!this.list || this.list.length === 0) { + this.$message.warning('暂无数据可导出') + return + } + + this.exportLoading = true + try { + // 动态导入 xlsx 库 + const XLSX = await import('xlsx') + + // 构建表头(根据后端DTO字段的中文映射) + const headers = [ + '员工姓名', + '员工账号', + '核算岗位', + '统计月份', + '是否离职', + '溯源金额', + 'Cell金额', + '底薪', + '溯源金额提成比例', + '溯源金额提成金额', + 'Cell金额提成比例', + 'Cell金额提成金额', + '提成合计', + '在店天数', + '请假天数', + '核算应发工资', + '最终应发工资', + '当月培训补贴', + '当月交通补贴', + '上月培训补贴', + '上月交通补贴', + '补贴合计', + '缺卡扣款', + '迟到扣款', + '请假扣款', + '扣社保', + '扣除奖励', + '扣住宿费', + '扣学习期费用', + '扣工作服费用', + '扣款合计', + '发奖金', + '退手机押金', + '退住宿押金', + '补发上月', + '实发工资', + '当月是否发放', + '支付金额', + '待支付金额', + '当月支付总额', + '是否锁定' + ] + + // 构建数据行 + const dataRows = this.list.map(item => [ + item.EmployeeName || '无', + item.EmployeeAccount || '无', + item.Position || '无', + item.StatisticsMonth || '无', + item.IsTerminated === 1 ? '已离职' : '在职', + this.formatMoney(item.TraceabilityAmount), + this.formatMoney(item.CellAmount), + this.formatMoney(item.BaseSalary), + this.formatPercent(item.TraceabilityCommissionRate), + this.formatMoney(item.TraceabilityCommissionAmount), + this.formatPercent(item.CellCommissionRate), + this.formatMoney(item.CellCommissionAmount), + this.formatMoney(item.TotalCommission), + item.WorkingDays || '0', + item.LeaveDays || '0', + this.formatMoney(item.CalculatedGrossSalary), + this.formatMoney(item.FinalGrossSalary), + this.formatMoney(item.MonthlyTrainingSubsidy), + this.formatMoney(item.MonthlyTransportSubsidy), + this.formatMoney(item.LastMonthTrainingSubsidy), + this.formatMoney(item.LastMonthTransportSubsidy), + this.formatMoney(item.TotalSubsidy), + this.formatMoney(item.MissingCard), + this.formatMoney(item.LateArrival), + this.formatMoney(item.LeaveDeduction), + this.formatMoney(item.SocialInsuranceDeduction), + this.formatMoney(item.RewardDeduction), + this.formatMoney(item.AccommodationDeduction), + this.formatMoney(item.StudyPeriodDeduction), + this.formatMoney(item.WorkClothesDeduction), + this.formatMoney(item.TotalDeduction), + this.formatMoney(item.Bonus), + this.formatMoney(item.ReturnPhoneDeposit), + this.formatMoney(item.ReturnAccommodationDeposit), + this.formatMoney(item.LastMonthSupplement), + this.formatMoney(item.ActualSalary), + item.MonthlyPaymentStatus || '无', + this.formatMoney(item.PaidAmount), + this.formatMoney(item.PendingAmount), + this.formatMoney(item.MonthlyTotalPayment), + item.IsLocked === 1 ? '已锁定' : '未锁定' + ]) + + // 合并表头和数据 + const excelData = [headers, ...dataRows] + + // 创建工作表 + const ws = XLSX.utils.aoa_to_sheet(excelData) + + // 设置列宽 + const colWidths = headers.map(() => ({ wch: 15 })) + ws['!cols'] = colWidths + + // 创建工作簿 + const wb = XLSX.utils.book_new() + XLSX.utils.book_append_sheet(wb, ws, '科技部总经理工资') + + // 生成文件名 + const now = new Date() + const timestamp = now.getFullYear() + + String(now.getMonth() + 1).padStart(2, '0') + + String(now.getDate()).padStart(2, '0') + + String(now.getHours()).padStart(2, '0') + + String(now.getMinutes()).padStart(2, '0') + + String(now.getSeconds()).padStart(2, '0') + const fileName = `科技部总经理工资_${timestamp}.xlsx` + + // 导出文件 + XLSX.writeFile(wb, fileName) + + this.$message.success('导出成功') + } catch (error) { + console.error('导出失败:', error) + this.$message.error('导出失败,请重试') + } finally { + this.exportLoading = false + } + }, + // 格式化金额 formatMoney(value) { if (value === null || value === undefined || value === '') { diff --git a/antis-ncc-admin/src/views/wageManagement/tech-stock-detail-dialog.vue b/antis-ncc-admin/src/views/wageManagement/tech-stock-detail-dialog.vue new file mode 100644 index 0000000..fde613b --- /dev/null +++ b/antis-ncc-admin/src/views/wageManagement/tech-stock-detail-dialog.vue @@ -0,0 +1,298 @@ + + + + + + diff --git a/antis-ncc-admin/src/views/wageManagement/tech-stock.vue b/antis-ncc-admin/src/views/wageManagement/tech-stock.vue index e7128bb..55593bd 100644 --- a/antis-ncc-admin/src/views/wageManagement/tech-stock.vue +++ b/antis-ncc-admin/src/views/wageManagement/tech-stock.vue @@ -8,8 +8,24 @@
+ 导出 + + + 计算股份 + + 刷新 @@ -17,28 +33,465 @@
- -
- + +
+ + + + + + + + + + + + 搜索 + 重置 + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + +