Commit e29d11bbd648e5077352347f8b444829664e2338

Authored by 李宇
1 parent c715e03d

最新

antis-ncc-admin/.env.development
@@ -2,8 +2,8 @@ @@ -2,8 +2,8 @@
2 2
3 VUE_CLI_BABEL_TRANSPILE_MODULES = true 3 VUE_CLI_BABEL_TRANSPILE_MODULES = true
4 # VUE_APP_BASE_API = 'https://erp.lvqianmeiye.com' 4 # VUE_APP_BASE_API = 'https://erp.lvqianmeiye.com'
5 -# VUE_APP_BASE_API = 'http://erp_test.lvqianmeiye.com'  
6 -VUE_APP_BASE_API = 'http://localhost:2011' 5 +VUE_APP_BASE_API = 'http://erp_test.lvqianmeiye.com'
  6 +# VUE_APP_BASE_API = 'http://localhost:2011'
7 # VUE_APP_BASE_API = 'http://localhost:2011' 7 # VUE_APP_BASE_API = 'http://localhost:2011'
8 VUE_APP_IMG_API = '' 8 VUE_APP_IMG_API = ''
9 VUE_APP_BASE_WSS = 'ws://192.168.110.45:2011/websocket' 9 VUE_APP_BASE_WSS = 'ws://192.168.110.45:2011/websocket'
antis-ncc-admin/src/views/LqLaundryFlow/cancel-dialog.vue 0 → 100644
  1 +<template>
  2 + <el-dialog title="作废记录" :visible.sync="visible" width="500px" :close-on-click-modal="false">
  3 + <el-form ref="form" :model="form" :rules="rules" label-width="100px">
  4 + <el-form-item label="作废原因" prop="remark">
  5 + <el-input v-model="form.remark" type="textarea" :rows="4" placeholder="请输入作废原因" maxlength="500" show-word-limit />
  6 + </el-form-item>
  7 + </el-form>
  8 + <div slot="footer" class="dialog-footer">
  9 + <el-button @click="visible = false">取消</el-button>
  10 + <el-button type="danger" @click="submit" :loading="loading">确定作废</el-button>
  11 + </div>
  12 + </el-dialog>
  13 +</template>
  14 +
  15 +<script>
  16 +import request from '@/utils/request'
  17 +
  18 +export default {
  19 + name: 'CancelDialog',
  20 + data() {
  21 + return {
  22 + visible: false,
  23 + loading: false,
  24 + form: {
  25 + id: '',
  26 + remark: ''
  27 + },
  28 + rules: {
  29 + remark: [{ required: true, message: '请输入作废原因', trigger: 'blur' }]
  30 + }
  31 + }
  32 + },
  33 + methods: {
  34 + // 初始化
  35 + init(row) {
  36 + this.visible = true
  37 + this.form = {
  38 + id: row.id,
  39 + remark: ''
  40 + }
  41 + this.$nextTick(() => {
  42 + if (this.$refs.form) {
  43 + this.$refs.form.clearValidate()
  44 + }
  45 + })
  46 + },
  47 + // 提交
  48 + submit() {
  49 + this.$refs.form.validate(valid => {
  50 + if (!valid) return
  51 +
  52 + this.loading = true
  53 + request({
  54 + url: '/api/Extend/LqLaundryFlow/Cancel',
  55 + method: 'POST',
  56 + data: {
  57 + id: this.form.id,
  58 + remark: this.form.remark
  59 + }
  60 + }).then(res => {
  61 + this.loading = false
  62 + if (res.code == 200) {
  63 + this.$message.success(res.msg || '作废成功')
  64 + this.visible = false
  65 + this.$emit('refresh')
  66 + } else {
  67 + this.$message.error(res.msg || '作废失败')
  68 + }
  69 + }).catch(() => {
  70 + this.loading = false
  71 + })
  72 + })
  73 + }
  74 + },
  75 + watch: {
  76 + visible(val) {
  77 + if (!val) {
  78 + this.$refs.form && this.$refs.form.resetFields()
  79 + }
  80 + }
  81 + }
  82 +}
  83 +</script>
  84 +
  85 +<style lang="scss" scoped>
  86 +.dialog-footer {
  87 + text-align: right;
  88 +}
  89 +</style>
  90 +
antis-ncc-admin/src/views/LqLaundryFlow/index.vue
@@ -32,7 +32,7 @@ @@ -32,7 +32,7 @@
32 <el-col :span="6"> 32 <el-col :span="6">
33 <el-form-item label="清洗商"> 33 <el-form-item label="清洗商">
34 <el-select v-model="query.laundrySupplierId" placeholder="请选择清洗商" clearable filterable> 34 <el-select v-model="query.laundrySupplierId" placeholder="请选择清洗商" clearable filterable>
35 - <el-option v-for="item in supplierList" :key="item.id" :label="item.supplierName" :value="item.id" /> 35 + <el-option v-for="item in supplierList" :key="item.id" :label="item.supplierName+'('+item.productType+')'" :value="item.id" />
36 </el-select> 36 </el-select>
37 </el-form-item> 37 </el-form-item>
38 </el-col> 38 </el-col>
@@ -69,6 +69,10 @@ @@ -69,6 +69,10 @@
69 <el-button type="primary" icon="el-icon-plus" @click="addSend()">创建送出记录</el-button> 69 <el-button type="primary" icon="el-icon-plus" @click="addSend()">创建送出记录</el-button>
70 <el-button type="success" icon="el-icon-refresh" @click="addReturn()">创建送回记录</el-button> 70 <el-button type="success" icon="el-icon-refresh" @click="addReturn()">创建送回记录</el-button>
71 <el-button type="warning" icon="el-icon-warning" @click="viewDifference()">查看差异记录</el-button> 71 <el-button type="warning" icon="el-icon-warning" @click="viewDifference()">查看差异记录</el-button>
  72 + <span class="total-price-sum">
  73 + <i class="el-icon-money"></i>
  74 + 总费用合计:<strong>{{ totalPriceSum }}</strong>
  75 + </span>
72 </div> 76 </div>
73 <div class="NCC-common-head-right"> 77 <div class="NCC-common-head-right">
74 <el-tooltip effect="dark" content="刷新" placement="top"> 78 <el-tooltip effect="dark" content="刷新" placement="top">
@@ -96,7 +100,7 @@ @@ -96,7 +100,7 @@
96 </div> 100 </div>
97 </template> 101 </template>
98 </el-table-column> 102 </el-table-column>
99 - <el-table-column label="门店名称" align="center"> 103 + <el-table-column label="门店名称" align="center" width="180">
100 <template slot-scope="scope"> 104 <template slot-scope="scope">
101 <div class="store-info"> 105 <div class="store-info">
102 <i class="el-icon-office-building store-icon"></i> 106 <i class="el-icon-office-building store-icon"></i>
@@ -104,7 +108,7 @@ @@ -104,7 +108,7 @@
104 </div> 108 </div>
105 </template> 109 </template>
106 </el-table-column> 110 </el-table-column>
107 - <el-table-column label="产品类型" align="center"> 111 + <el-table-column label="产品类型" align="center" width="100">
108 <template slot-scope="scope"> 112 <template slot-scope="scope">
109 <div class="product-type-info"> 113 <div class="product-type-info">
110 <i class="el-icon-goods product-type-icon"></i> 114 <i class="el-icon-goods product-type-icon"></i>
@@ -138,10 +142,11 @@ @@ -138,10 +142,11 @@
138 </el-table-column> 142 </el-table-column>
139 <el-table-column label="总费用" align="center" width="120"> 143 <el-table-column label="总费用" align="center" width="120">
140 <template slot-scope="scope"> 144 <template slot-scope="scope">
141 - <div class="total-price-info"> 145 + <div class="total-price-info" v-if="scope.row.flowType === 0">
142 <i class="el-icon-money total-price-icon"></i> 146 <i class="el-icon-money total-price-icon"></i>
143 <span>{{ scope.row.totalPrice || 0 }}</span> 147 <span>{{ scope.row.totalPrice || 0 }}</span>
144 </div> 148 </div>
  149 + <span v-else>无</span>
145 </template> 150 </template>
146 </el-table-column> 151 </el-table-column>
147 <el-table-column label="备注" align="center" min-width="150"> 152 <el-table-column label="备注" align="center" min-width="150">
@@ -188,7 +193,7 @@ @@ -188,7 +193,7 @@
188 </div> 193 </div>
189 </template> 194 </template>
190 </el-table-column> 195 </el-table-column>
191 - <el-table-column label="操作" width="150" align="left" fixed="right"> 196 + <el-table-column label="操作" width="200" align="left" fixed="right">
192 <template slot-scope="scope"> 197 <template slot-scope="scope">
193 <div class="action-buttons"> 198 <div class="action-buttons">
194 <el-button type="text" icon="el-icon-view" @click="viewDetail(scope.row)" class="view-btn"> 199 <el-button type="text" icon="el-icon-view" @click="viewDetail(scope.row)" class="view-btn">
@@ -197,6 +202,9 @@ @@ -197,6 +202,9 @@
197 <el-button type="text" icon="el-icon-edit" @click="editRecord(scope.row)" class="edit-btn"> 202 <el-button type="text" icon="el-icon-edit" @click="editRecord(scope.row)" class="edit-btn">
198 编辑 203 编辑
199 </el-button> 204 </el-button>
  205 + <el-button type="text" icon="el-icon-close" @click="cancelRecord(scope.row)" class="cancel-btn">
  206 + 作废
  207 + </el-button>
200 </div> 208 </div>
201 </template> 209 </template>
202 </el-table-column> 210 </el-table-column>
@@ -215,6 +223,8 @@ @@ -215,6 +223,8 @@
215 <DifferenceDialog v-if="differenceDialogVisible" ref="DifferenceDialog" /> 223 <DifferenceDialog v-if="differenceDialogVisible" ref="DifferenceDialog" />
216 <!-- 编辑弹窗 --> 224 <!-- 编辑弹窗 -->
217 <EditDialog v-if="editDialogVisible" ref="EditDialog" @refresh="refresh" /> 225 <EditDialog v-if="editDialogVisible" ref="EditDialog" @refresh="refresh" />
  226 + <!-- 作废弹窗 -->
  227 + <CancelDialog v-if="cancelDialogVisible" ref="CancelDialog" @refresh="refresh" />
218 </div> 228 </div>
219 </template> 229 </template>
220 230
@@ -226,9 +236,10 @@ import ReturnDialog from &#39;./return-dialog.vue&#39; @@ -226,9 +236,10 @@ import ReturnDialog from &#39;./return-dialog.vue&#39;
226 import DetailDialog from './detail-dialog.vue' 236 import DetailDialog from './detail-dialog.vue'
227 import DifferenceDialog from './difference-dialog.vue' 237 import DifferenceDialog from './difference-dialog.vue'
228 import EditDialog from './edit-dialog.vue' 238 import EditDialog from './edit-dialog.vue'
  239 +import CancelDialog from './cancel-dialog.vue'
229 240
230 export default { 241 export default {
231 - components: { SendDialog, ReturnDialog, DetailDialog, DifferenceDialog, EditDialog }, 242 + components: { SendDialog, ReturnDialog, DetailDialog, DifferenceDialog, EditDialog, CancelDialog },
232 data() { 243 data() {
233 return { 244 return {
234 list: [], 245 list: [],
@@ -252,7 +263,20 @@ export default { @@ -252,7 +263,20 @@ export default {
252 returnDialogVisible: false, 263 returnDialogVisible: false,
253 detailDialogVisible: false, 264 detailDialogVisible: false,
254 differenceDialogVisible: false, 265 differenceDialogVisible: false,
255 - editDialogVisible: false 266 + editDialogVisible: false,
  267 + cancelDialogVisible: false
  268 + }
  269 + },
  270 + computed: {
  271 + // 计算总费用合计(只计算送出类型的记录)
  272 + totalPriceSum() {
  273 + return this.list
  274 + .filter(item => item.flowType === 0) // 只计算送出类型
  275 + .reduce((sum, item) => {
  276 + const price = parseFloat(item.totalPrice) || 0
  277 + return sum + price
  278 + }, 0)
  279 + .toFixed(2)
256 } 280 }
257 }, 281 },
258 created() { 282 created() {
@@ -370,11 +394,19 @@ export default { @@ -370,11 +394,19 @@ export default {
370 this.$refs.EditDialog.init(row) 394 this.$refs.EditDialog.init(row)
371 }) 395 })
372 }, 396 },
  397 + // 作废记录
  398 + cancelRecord(row) {
  399 + this.cancelDialogVisible = true
  400 + this.$nextTick(() => {
  401 + this.$refs.CancelDialog.init(row)
  402 + })
  403 + },
373 // 刷新 404 // 刷新
374 refresh() { 405 refresh() {
375 this.sendDialogVisible = false 406 this.sendDialogVisible = false
376 this.returnDialogVisible = false 407 this.returnDialogVisible = false
377 this.editDialogVisible = false 408 this.editDialogVisible = false
  409 + this.cancelDialogVisible = false
378 this.initData() 410 this.initData()
379 }, 411 },
380 // 格式化日期时间 412 // 格式化日期时间
@@ -469,6 +501,30 @@ export default { @@ -469,6 +501,30 @@ export default {
469 font-size: 16px; 501 font-size: 16px;
470 } 502 }
471 503
  504 +// 总费用合计样式
  505 +.total-price-sum {
  506 + margin-left: 20px;
  507 + padding: 8px 16px;
  508 + background-color: #f0f9ff;
  509 + border: 1px solid #409EFF;
  510 + border-radius: 4px;
  511 + color: #409EFF;
  512 + font-size: 14px;
  513 + display: inline-flex;
  514 + align-items: center;
  515 + gap: 6px;
  516 +
  517 + i {
  518 + font-size: 16px;
  519 + }
  520 +
  521 + strong {
  522 + color: #F56C6C;
  523 + font-size: 16px;
  524 + font-weight: 600;
  525 + }
  526 +}
  527 +
472 // 操作按钮样式 528 // 操作按钮样式
473 .action-buttons { 529 .action-buttons {
474 display: flex; 530 display: flex;
@@ -484,6 +540,22 @@ export default { @@ -484,6 +540,22 @@ export default {
484 } 540 }
485 } 541 }
486 542
  543 +.edit-btn {
  544 + color: #409EFF;
  545 +
  546 + &:hover {
  547 + color: #66b1ff;
  548 + }
  549 +}
  550 +
  551 +.cancel-btn {
  552 + color: #F56C6C;
  553 +
  554 + &:hover {
  555 + color: #f78989;
  556 + }
  557 +}
  558 +
487 // 表格行悬停效果 559 // 表格行悬停效果
488 ::v-deep .el-table__row:hover { 560 ::v-deep .el-table__row:hover {
489 background-color: #f5f7fa; 561 background-color: #f5f7fa;
antis-ncc-admin/src/views/lqKdKdjlb/hedge-dialog.vue 0 → 100644
  1 +<template>
  2 + <el-dialog
  3 + title="对冲开单"
  4 + :visible.sync="visible"
  5 + :close-on-click-modal="false"
  6 + class="NCC-dialog NCC-dialog_center"
  7 + lock-scroll
  8 + width="1400px"
  9 + @close="handleClose"
  10 + >
  11 + <div v-loading="loading">
  12 + <el-form ref="elForm" :model="dataForm" size="small" label-width="120px" label-position="right">
  13 + <!-- 基本信息 -->
  14 + <el-row :gutter="20">
  15 + <el-col :span="8">
  16 + <el-form-item label="单据门店">
  17 + <el-input v-model="dataForm.djmdName" disabled />
  18 + </el-form-item>
  19 + </el-col>
  20 + <el-col :span="8">
  21 + <el-form-item label="开单会员">
  22 + <el-input v-model="dataForm.kdhyc" disabled />
  23 + </el-form-item>
  24 + </el-col>
  25 + <el-col :span="8">
  26 + <el-form-item label="开单日期">
  27 + <el-date-picker
  28 + v-model="dataForm.kdrq"
  29 + type="date"
  30 + format="yyyy-MM-dd"
  31 + value-format="timestamp"
  32 + placeholder="请选择开单日期"
  33 + style="width: 100%"
  34 + />
  35 + </el-form-item>
  36 + </el-col>
  37 + </el-row>
  38 +
  39 + <!-- 费用信息 -->
  40 + <el-row :gutter="20">
  41 + <el-col :span="8">
  42 + <el-form-item label="整单业绩">
  43 + <el-input v-model="dataForm.zdyj" disabled>
  44 + <template slot="append">元</template>
  45 + </el-input>
  46 + </el-form-item>
  47 + </el-col>
  48 + <el-col :span="8">
  49 + <el-form-item label="实付业绩">
  50 + <el-input v-model="dataForm.sfyj" disabled>
  51 + <template slot="append">元</template>
  52 + </el-input>
  53 + </el-form-item>
  54 + </el-col>
  55 + </el-row>
  56 +
  57 + <!-- 品项明细 -->
  58 + <el-form-item label="品项明细">
  59 + <el-table :data="dataForm.lqKdPxmxList" border size="small" style="width: 100%">
  60 + <el-table-column prop="pxmc" label="品项名称" align="left">
  61 + <template slot-scope="scope">
  62 + <span>{{ scope.row.pxmc || '无' }}</span>
  63 + </template>
  64 + </el-table-column>
  65 + <el-table-column prop="pxjg" label="单价" align="right">
  66 + <template slot-scope="scope">
  67 + <el-input-number
  68 + v-model="scope.row.pxjg"
  69 + :precision="2"
  70 + :step="0.01"
  71 + :min="-999999"
  72 + :max="999999"
  73 + size="small"
  74 + style="width: 100%"
  75 + @change="calculatePxTotal(scope.$index)"
  76 + />
  77 + </template>
  78 + </el-table-column>
  79 + <el-table-column prop="projectNumber" label="次数" align="right">
  80 + <template slot-scope="scope">
  81 + <el-input-number
  82 + v-model="scope.row.projectNumber"
  83 + :precision="2"
  84 + :step="0.01"
  85 + :min="-999999"
  86 + :max="999999"
  87 + size="small"
  88 + style="width: 100%"
  89 + @change="calculatePxTotal(scope.$index)"
  90 + />
  91 + </template>
  92 + </el-table-column>
  93 + <el-table-column prop="totalPrice" label="总价" align="right">
  94 + <template slot-scope="scope">
  95 + <span>{{ formatMoney(scope.row.totalPrice) }}</span>
  96 + </template>
  97 + </el-table-column>
  98 + <el-table-column prop="sourceType" label="来源类型" align="center">
  99 + <template slot-scope="scope">
  100 + <el-tag size="small">{{ scope.row.sourceType || '无' }}</el-tag>
  101 + </template>
  102 + </el-table-column>
  103 + <el-table-column label="操作" width="100" align="center" fixed="right">
  104 + <template slot-scope="scope">
  105 + <el-button
  106 + type="text"
  107 + size="small"
  108 + icon="el-icon-delete"
  109 + @click="deletePxRow(scope.$index)"
  110 + >
  111 + 删除
  112 + </el-button>
  113 + </template>
  114 + </el-table-column>
  115 + </el-table>
  116 + </el-form-item>
  117 +
  118 + <!-- 健康师和科技部老师业绩 -->
  119 + <el-form-item
  120 + v-for="(px, pxIndex) in dataForm.lqKdPxmxList"
  121 + :key="pxIndex"
  122 + :label="`品项${pxIndex + 1} - ${px.pxmc || '无'}`"
  123 + >
  124 + <el-card shadow="never" style="margin-bottom: 20px">
  125 + <!-- 健康师业绩 -->
  126 + <div style="margin-bottom: 20px">
  127 + <div style="margin-bottom: 10px; font-weight: 600; color: #409EFF">
  128 + <i class="el-icon-user"></i> 健康师业绩
  129 + </div>
  130 + <el-table
  131 + :data="px.lqKdJksyjList"
  132 + border
  133 + size="mini"
  134 + style="width: 100%"
  135 + v-if="px.lqKdJksyjList && px.lqKdJksyjList.length > 0"
  136 + >
  137 + <el-table-column prop="jksxm" label="健康师" align="left">
  138 + <template slot-scope="scope">
  139 + <span>{{ scope.row.jksxm || '无' }}</span>
  140 + </template>
  141 + </el-table-column>
  142 + <el-table-column prop="jksyj" label="业绩" align="right">
  143 + <template slot-scope="scope">
  144 + <el-input-number
  145 + v-model="scope.row.jksyj"
  146 + :precision="2"
  147 + :step="0.01"
  148 + :min="-999999"
  149 + :max="999999"
  150 + size="mini"
  151 + style="width: 100%"
  152 + />
  153 + </template>
  154 + </el-table-column>
  155 + <el-table-column label="操作" width="100" align="center">
  156 + <template slot-scope="scope">
  157 + <el-button
  158 + type="text"
  159 + size="mini"
  160 + icon="el-icon-delete"
  161 + @click="deleteJks(pxIndex, scope.$index)"
  162 + >
  163 + 删除
  164 + </el-button>
  165 + </template>
  166 + </el-table-column>
  167 + </el-table>
  168 + <div v-else style="padding: 10px; color: #909399; text-align: center">
  169 + 暂无健康师
  170 + </div>
  171 + </div>
  172 +
  173 + <!-- 科技部老师业绩 -->
  174 + <div v-if="px.lqKdKjbsyjList && px.lqKdKjbsyjList.length > 0">
  175 + <div style="margin-bottom: 10px; font-weight: 600; color: #67C23A">
  176 + <i class="el-icon-user-solid"></i> 科技部老师业绩
  177 + </div>
  178 + <el-table
  179 + :data="px.lqKdKjbsyjList"
  180 + border
  181 + size="mini"
  182 + style="width: 100%"
  183 + >
  184 + <el-table-column prop="kjblsxm" label="科技部老师" align="left">
  185 + <template slot-scope="scope">
  186 + <span>{{ scope.row.kjblsxm || '无' }}</span>
  187 + </template>
  188 + </el-table-column>
  189 + <el-table-column prop="kjblsyj" label="业绩" align="right">
  190 + <template slot-scope="scope">
  191 + <el-input-number
  192 + v-model="scope.row.kjblsyj"
  193 + :precision="2"
  194 + :step="0.01"
  195 + :min="-999999"
  196 + :max="999999"
  197 + size="mini"
  198 + style="width: 100%"
  199 + />
  200 + </template>
  201 + </el-table-column>
  202 + <el-table-column label="操作" width="100" align="center">
  203 + <template slot-scope="scope">
  204 + <el-button
  205 + type="text"
  206 + size="mini"
  207 + icon="el-icon-delete"
  208 + @click="deleteKjb(pxIndex, scope.$index)"
  209 + >
  210 + 删除
  211 + </el-button>
  212 + </template>
  213 + </el-table-column>
  214 + </el-table>
  215 + </div>
  216 + </el-card>
  217 + </el-form-item>
  218 + </el-form>
  219 + </div>
  220 +
  221 + <div slot="footer" class="dialog-footer">
  222 + <el-button @click="handleClose">取消</el-button>
  223 + <el-button type="primary" :loading="submitLoading" @click="submitHedge">提交对冲</el-button>
  224 + </div>
  225 + </el-dialog>
  226 +</template>
  227 +
  228 +<script>
  229 +import request from '@/utils/request'
  230 +import { previewDataInterface } from '@/api/systemData/dataInterface'
  231 +
  232 +export default {
  233 + name: 'HedgeDialog',
  234 + data() {
  235 + return {
  236 + visible: false,
  237 + loading: false,
  238 + submitLoading: false,
  239 + billingId: null,
  240 + dataForm: {
  241 + id: '',
  242 + djmd: '',
  243 + djmdName: '',
  244 + kdhy: '',
  245 + kdhyc: '',
  246 + kdhysjh: '',
  247 + kdrq: '',
  248 + gjlx: '',
  249 + jsj: '',
  250 + hgjg: '',
  251 + fkyy: '',
  252 + zdyj: '',
  253 + sfyj: '',
  254 + jj: '',
  255 + bz: '',
  256 + activityId: '',
  257 + appointmentId: '',
  258 + lqKdPxmxList: []
  259 + },
  260 + djmdOptions: []
  261 + }
  262 + },
  263 + created() {
  264 + this.loadOptions()
  265 + },
  266 + methods: {
  267 + // 初始化弹窗
  268 + init(billingId) {
  269 + this.billingId = billingId
  270 + this.visible = true
  271 + this.$nextTick(() => {
  272 + if (this.billingId) {
  273 + this.getBillingDetail(this.billingId)
  274 + } else {
  275 + // 新建对冲时,开单日期默认取当前时间(时间戳,配合 value-format="timestamp")
  276 + this.dataForm.kdrq = new Date().getTime()
  277 + }
  278 + })
  279 + },
  280 + // 获取开单详情
  281 + async getBillingDetail(id) {
  282 + this.loading = true
  283 + try {
  284 + const res = await request({
  285 + url: `/api/Extend/LqKdKdjlb/${id}`,
  286 + method: 'GET'
  287 + })
  288 + if (res.code === 200) {
  289 + // 深拷贝数据,避免修改原数据
  290 + const billingData = JSON.parse(JSON.stringify(res.data))
  291 +
  292 + // 处理品项明细数据
  293 + if (billingData.lqKdPxmxList && billingData.lqKdPxmxList.length > 0) {
  294 + billingData.lqKdPxmxList = billingData.lqKdPxmxList.map(px => {
  295 + // 保存原始项目次数
  296 + const originalProjectNumber = parseFloat(px.projectNumber) || 0
  297 +
  298 + // 确保所有数值字段都存在,并保留所有原始字段
  299 + const pxItem = {
  300 + ...px,
  301 + pxjg: parseFloat(px.pxjg) || 0,
  302 + projectNumber: originalProjectNumber,
  303 + originalProjectNumber: originalProjectNumber, // 保存原始次数
  304 + totalPrice: (parseFloat(px.pxjg) || 0) * originalProjectNumber,
  305 + // 保留品项的关键字段
  306 + BillingItemId: px.BillingItemId || px.billingItemId || px.px,
  307 + memberId: px.memberId || billingData.kdhy,
  308 + sourceType: px.sourceType || '购买',
  309 + // 处理健康师业绩
  310 + lqKdJksyjList: (px.lqKdJksyjList || []).map(jks => {
  311 + const originalJksyj = parseFloat(jks.jksyj) || 0
  312 +
  313 + return {
  314 + ...jks,
  315 + jksyj: originalJksyj,
  316 + originalJksyj: originalJksyj // 保存原始业绩
  317 + }
  318 + }),
  319 + // 处理科技部老师业绩
  320 + lqKdKjbsyjList: (px.lqKdKjbsyjList || []).map(kjb => {
  321 + const originalKjblsyj = parseFloat(kjb.kjblsyj) || 0
  322 +
  323 + return {
  324 + ...kjb,
  325 + kjblsyj: originalKjblsyj,
  326 + originalKjblsyj: originalKjblsyj // 保存原始业绩
  327 + }
  328 + })
  329 + }
  330 + return pxItem
  331 + })
  332 + }
  333 +
  334 + // 处理开单日期
  335 + billingData.kdrq = new Date().getTime()
  336 +
  337 + // 获取门店名称
  338 + const djmdName = this.getStoreName(billingData.djmd)
  339 +
  340 + this.dataForm = {
  341 + id: '',
  342 + djmd: billingData.djmd || '',
  343 + djmdName: djmdName || '',
  344 + kdhy: billingData.kdhy || '',
  345 + kdhyc: billingData.kdhyc || '',
  346 + kdhysjh: billingData.kdhysjh || '',
  347 + kdrq: billingData.kdrq,
  348 + gjlx: billingData.gjlx || '',
  349 + jsj: billingData.jsj || '',
  350 + hgjg: billingData.hgjg || '',
  351 + fkyy: billingData.fkyy || '',
  352 + zdyj: '0.00',
  353 + sfyj: '0.00',
  354 + jj: billingData.jj || '',
  355 + bz: billingData.bz || '',
  356 + activityId: billingData.activityId || '',
  357 + appointmentId: billingData.appointmentId || '',
  358 + lqKdPxmxList: billingData.lqKdPxmxList || []
  359 + }
  360 +
  361 + // 计算总金额
  362 + this.calculateTotalAmounts()
  363 + } else {
  364 + this.$message.error(res.msg || '获取开单详情失败')
  365 + }
  366 + } catch (error) {
  367 + console.error('获取开单详情失败:', error)
  368 + this.$message.error('获取开单详情失败')
  369 + } finally {
  370 + this.loading = false
  371 + }
  372 + },
  373 + // 加载选项数据
  374 + loadOptions() {
  375 + previewDataInterface('730960205902251269').then(res => {
  376 + this.djmdOptions = res.data || []
  377 + })
  378 + },
  379 + // 获取门店名称
  380 + getStoreName(storeId) {
  381 + const store = this.djmdOptions.find(item => item.id === storeId)
  382 + return store ? store.fullName : ''
  383 + },
  384 + // 计算品项总价
  385 + calculatePxTotal(pxIndex) {
  386 + const px = this.dataForm.lqKdPxmxList[pxIndex]
  387 + if (px) {
  388 + const newProjectNumber = parseFloat(px.projectNumber) || 0
  389 + const originalProjectNumber = parseFloat(px.originalProjectNumber) || 1 // 避免除0
  390 +
  391 + // 计算比例
  392 + const ratio = originalProjectNumber !== 0 ? newProjectNumber / originalProjectNumber : 0
  393 +
  394 + px.totalPrice = (parseFloat(px.pxjg) || 0) * newProjectNumber
  395 +
  396 + // 按比例重新计算健康师的业绩
  397 + if (px.lqKdJksyjList && px.lqKdJksyjList.length > 0) {
  398 + px.lqKdJksyjList.forEach(jks => {
  399 + // 按比例计算
  400 + if (jks.originalJksyj !== undefined) {
  401 + jks.jksyj = parseFloat((jks.originalJksyj * ratio).toFixed(2))
  402 + }
  403 + })
  404 + }
  405 +
  406 + // 按比例重新计算科技部老师的业绩
  407 + if (px.lqKdKjbsyjList && px.lqKdKjbsyjList.length > 0) {
  408 + px.lqKdKjbsyjList.forEach(kjb => {
  409 + // 按比例计算
  410 + if (kjb.originalKjblsyj !== undefined) {
  411 + kjb.kjblsyj = parseFloat((kjb.originalKjblsyj * ratio).toFixed(2))
  412 + }
  413 + })
  414 + }
  415 +
  416 + this.calculateTotalAmounts()
  417 + }
  418 + },
  419 + // 计算总金额
  420 + calculateTotalAmounts() {
  421 + let totalZdyj = 0
  422 + let totalSfyj = 0
  423 +
  424 + this.dataForm.lqKdPxmxList.forEach(px => {
  425 + if (px.pxjg && px.projectNumber) {
  426 + totalZdyj += parseFloat(px.pxjg) * parseFloat(px.projectNumber)
  427 + }
  428 +
  429 + // 计算实付业绩:健康师业绩 + 科技部老师业绩
  430 + if (px.lqKdJksyjList && px.lqKdJksyjList.length > 0) {
  431 + px.lqKdJksyjList.forEach(jks => {
  432 + totalSfyj += parseFloat(jks.jksyj) || 0
  433 + })
  434 + }
  435 + if (px.lqKdKjbsyjList && px.lqKdKjbsyjList.length > 0) {
  436 + px.lqKdKjbsyjList.forEach(kjb => {
  437 + totalSfyj += parseFloat(kjb.kjblsyj) || 0
  438 + })
  439 + }
  440 + })
  441 +
  442 + this.dataForm.zdyj = totalZdyj.toFixed(2)
  443 + this.dataForm.sfyj = totalSfyj.toFixed(2)
  444 + },
  445 + // 删除品项
  446 + deletePxRow(pxIndex) {
  447 + if (this.dataForm.lqKdPxmxList.length <= 1) {
  448 + this.$message.warning('至少需要保留一个品项')
  449 + return
  450 + }
  451 + this.$confirm('确定要删除该品项吗?', '提示', {
  452 + type: 'warning'
  453 + })
  454 + .then(() => {
  455 + this.dataForm.lqKdPxmxList.splice(pxIndex, 1)
  456 + this.calculateTotalAmounts()
  457 + })
  458 + .catch(() => {})
  459 + },
  460 + // 删除健康师
  461 + deleteJks(pxIndex, jksIndex) {
  462 + const px = this.dataForm.lqKdPxmxList[pxIndex]
  463 + if (px && px.lqKdJksyjList) {
  464 + px.lqKdJksyjList.splice(jksIndex, 1)
  465 + this.calculateTotalAmounts()
  466 + }
  467 + },
  468 + // 删除科技部老师
  469 + deleteKjb(pxIndex, kjbIndex) {
  470 + const px = this.dataForm.lqKdPxmxList[pxIndex]
  471 + if (px && px.lqKdKjbsyjList) {
  472 + px.lqKdKjbsyjList.splice(kjbIndex, 1)
  473 + this.calculateTotalAmounts()
  474 + }
  475 + },
  476 + // 格式化金额
  477 + formatMoney(amount) {
  478 + if (!amount && amount !== 0) return '0.00'
  479 + return Number(amount).toFixed(2)
  480 + },
  481 + // 提交对冲
  482 + async submitHedge() {
  483 + // 验证表单
  484 + if (!this.dataForm.lqKdPxmxList || this.dataForm.lqKdPxmxList.length === 0) {
  485 + this.$message.warning('至少需要保留一个品项')
  486 + return
  487 + }
  488 +
  489 + if (!this.dataForm.kdrq) {
  490 + this.$message.warning('请选择开单日期')
  491 + return
  492 + }
  493 +
  494 + // 过滤掉空的品项
  495 + const filteredPxList = this.dataForm.lqKdPxmxList
  496 + .filter(px => px.px && px.pxmc)
  497 + .map(px => ({
  498 + billingItemId: px.BillingItemId || px.billingItemId || px.px,
  499 + px: px.px,
  500 + memberId: px.memberId || this.dataForm.kdhy,
  501 + pxmc: px.pxmc,
  502 + pxjg: parseFloat(px.pxjg) || 0,
  503 + projectNumber: parseFloat(px.projectNumber) || 0,
  504 + sourceType: px.sourceType || '购买',
  505 + totalPrice: (parseFloat(px.pxjg) || 0) * (parseFloat(px.projectNumber) || 0),
  506 + actualPrice: (parseFloat(px.pxjg) || 0) * (parseFloat(px.projectNumber) || 0),
  507 + lqKdJksyjList: (px.lqKdJksyjList || []).map(jks => ({
  508 + jks: jks.jks,
  509 + jksxm: jks.jksxm,
  510 + jkszh: jks.jkszh || jks.jks,
  511 + jksyj: parseFloat(jks.jksyj) || 0,
  512 + jsjId: jks.jsjId || '',
  513 + kdpxid: px.BillingItemId || px.billingItemId || px.px
  514 + })),
  515 + lqKdKjbsyjList: (px.lqKdKjbsyjList || []).map(kjb => ({
  516 + kjbls: kjb.kjbls,
  517 + kjblsxm: kjb.kjblsxm,
  518 + kjblszh: kjb.kjblszh || kjb.kjbls,
  519 + kjblsyj: parseFloat(kjb.kjblsyj) || 0,
  520 + kdpxid: px.BillingItemId || px.billingItemId || px.px
  521 + }))
  522 + }))
  523 +
  524 + // 处理开单日期
  525 + let kdrqValue = new Date().toISOString()
  526 + if (this.dataForm.kdrq) {
  527 + const date = new Date(this.dataForm.kdrq)
  528 + kdrqValue = date.toISOString()
  529 + }
  530 +
  531 + const formData = {
  532 + activityId: this.dataForm.activityId || '',
  533 + djmd: this.dataForm.djmd,
  534 + jsj: this.dataForm.jsj,
  535 + kdrq: kdrqValue,
  536 + gjlx: this.dataForm.gjlx,
  537 + kdhysjh: this.dataForm.kdhysjh,
  538 + kdhyc: this.dataForm.kdhyc,
  539 + kdhy: this.dataForm.kdhy,
  540 + zdyj: this.dataForm.zdyj,
  541 + sfyj: this.dataForm.sfyj,
  542 + qk: 0, // 对冲开单欠款为0
  543 + fkfs: '对冲', // 付款方式为对冲
  544 + hgjg: this.dataForm.hgjg || '',
  545 + fkyy: this.dataForm.fkyy || '',
  546 + sfskdd: '否', // 对冲开单不是首开订单
  547 + jj: this.dataForm.jj || '',
  548 + bz: this.dataForm.bz || '',
  549 + lqKdPxmxList: filteredPxList,
  550 + scwj: [], // 对冲开单不需要收据文件
  551 + f_FileUrl: '[]', // 对冲开单不需要方案其他文件
  552 + lqKdKdjlbDeductList: [], // 对冲开单不需要储扣明细
  553 + hyqz: [] // 对冲开单不需要会员签字
  554 + }
  555 +
  556 + // 如果有预约ID,则添加
  557 + if (this.dataForm.appointmentId) {
  558 + formData.appointmentId = this.dataForm.appointmentId
  559 + }
  560 +
  561 + console.log('对冲数据:', formData)
  562 +
  563 + this.submitLoading = true
  564 + try {
  565 + const result = await request({
  566 + url: '/api/Extend/LqKdKdjlb',
  567 + method: 'POST',
  568 + data: formData
  569 + })
  570 +
  571 + if (result.code === 200) {
  572 + this.$message.success('对冲成功!')
  573 + this.handleClose()
  574 + this.$emit('refresh')
  575 + } else {
  576 + this.$message.error(result.msg || '对冲失败,请重试')
  577 + }
  578 + } catch (error) {
  579 + console.error('对冲失败:', error)
  580 + this.$message.error('网络错误,请稍后重试')
  581 + } finally {
  582 + this.submitLoading = false
  583 + }
  584 + },
  585 + // 关闭弹窗
  586 + handleClose() {
  587 + this.visible = false
  588 + this.dataForm = {
  589 + id: '',
  590 + djmd: '',
  591 + djmdName: '',
  592 + kdhy: '',
  593 + kdhyc: '',
  594 + kdhysjh: '',
  595 + kdrq: '',
  596 + gjlx: '',
  597 + jsj: '',
  598 + hgjg: '',
  599 + fkyy: '',
  600 + zdyj: '',
  601 + sfyj: '',
  602 + jj: '',
  603 + bz: '',
  604 + activityId: '',
  605 + appointmentId: '',
  606 + lqKdPxmxList: []
  607 + }
  608 + this.billingId = null
  609 + }
  610 + }
  611 +}
  612 +</script>
  613 +
  614 +<style lang="scss" scoped>
  615 +.dialog-footer {
  616 + text-align: right;
  617 + padding: 20px 0;
  618 +}
  619 +
  620 +.dialog-footer .el-button {
  621 + margin-left: 10px;
  622 +}
  623 +</style>
  624 +
antis-ncc-admin/src/views/lqKdKdjlb/index.vue
@@ -506,7 +506,7 @@ @@ -506,7 +506,7 @@
506 </el-table-column> 506 </el-table-column>
507 507
508 <!-- 操作 --> 508 <!-- 操作 -->
509 - <el-table-column label="操作" width="180" align="left" fixed="right"> 509 + <el-table-column label="操作" width="240" align="left" fixed="right">
510 <template slot-scope="scope"> 510 <template slot-scope="scope">
511 <div class="action-buttons"> 511 <div class="action-buttons">
512 <el-button 512 <el-button
@@ -530,6 +530,7 @@ @@ -530,6 +530,7 @@
530 > 530 >
531 删除 531 删除
532 </el-button> 532 </el-button>
  533 + <!-- <el-button v-if="scope.row.sfyj >= 0" type="text" @click="handleHedge(scope.row.id)">对冲</el-button> -->
533 </div> 534 </div>
534 </template> 535 </template>
535 </el-table-column> 536 </el-table-column>
@@ -542,6 +543,7 @@ @@ -542,6 +543,7 @@
542 <ExportBox v-if="exportBoxVisible" ref="ExportBox" @download="download" /> 543 <ExportBox v-if="exportBoxVisible" ref="ExportBox" @download="download" />
543 <LqKdKdjlbDetail ref="detailDialog" /> 544 <LqKdKdjlbDetail ref="detailDialog" />
544 <MemberCreateDialog :visible.sync="memberCreateVisible" @success="handleMemberCreateSuccess" /> 545 <MemberCreateDialog :visible.sync="memberCreateVisible" @success="handleMemberCreateSuccess" />
  546 + <HedgeDialog ref="hedgeDialog" @refresh="refresh" />
545 </div> 547 </div>
546 </template> 548 </template>
547 <script> 549 <script>
@@ -551,10 +553,11 @@ import NCCForm from &#39;./Form&#39; @@ -551,10 +553,11 @@ import NCCForm from &#39;./Form&#39;
551 import ExportBox from './ExportBox' 553 import ExportBox from './ExportBox'
552 import LqKdKdjlbDetail from './detail' 554 import LqKdKdjlbDetail from './detail'
553 import MemberCreateDialog from './MemberCreateDialog' 555 import MemberCreateDialog from './MemberCreateDialog'
  556 +import HedgeDialog from './hedge-dialog'
554 import { previewDataInterface } from '@/api/systemData/dataInterface' 557 import { previewDataInterface } from '@/api/systemData/dataInterface'
555 import { number } from 'echarts/lib/export' 558 import { number } from 'echarts/lib/export'
556 export default { 559 export default {
557 - components: { NCCForm, ExportBox, MemberCreateDialog, LqKdKdjlbDetail }, 560 + components: { NCCForm, ExportBox, MemberCreateDialog, LqKdKdjlbDetail, HedgeDialog },
558 data() { 561 data() {
559 return { 562 return {
560 kdhyLoading: false, 563 kdhyLoading: false,
@@ -885,7 +888,9 @@ export default { @@ -885,7 +888,9 @@ export default {
885 }, 888 },
886 refresh(isrRefresh) { 889 refresh(isrRefresh) {
887 this.formVisible = false 890 this.formVisible = false
888 - if (isrRefresh) this.initData() 891 + if (isrRefresh) {
  892 + this.initData()
  893 + }
889 }, 894 },
890 reset() { 895 reset() {
891 for (let key in this.query) { 896 for (let key in this.query) {
@@ -934,6 +939,10 @@ export default { @@ -934,6 +939,10 @@ export default {
934 handleDjmdChange() { 939 handleDjmdChange() {
935 this.query.jksId = undefined; // 清空健康师选择 940 this.query.jksId = undefined; // 清空健康师选择
936 this.getjksOptions(); 941 this.getjksOptions();
  942 + },
  943 + // 处理对冲
  944 + handleHedge(billingId) {
  945 + this.$refs.hedgeDialog.init(billingId)
937 } 946 }
938 } 947 }
939 } 948 }
antis-ncc-admin/src/views/lqKhxx/index.vue
@@ -3,7 +3,7 @@ @@ -3,7 +3,7 @@
3 <div class="NCC-common-layout-center"> 3 <div class="NCC-common-layout-center">
4 <!-- 现代化筛选卡片 --> 4 <!-- 现代化筛选卡片 -->
5 <el-card class="search-card" :class="{ 'search-card-animated': searchCardMounted }" shadow="never"> 5 <el-card class="search-card" :class="{ 'search-card-animated': searchCardMounted }" shadow="never">
6 - <el-form @submit.native.prevent label-width="80px" size="small"> 6 + <el-form @submit.native.prevent size="small">
7 <!-- 第一行:基础筛选 --> 7 <!-- 第一行:基础筛选 -->
8 <el-row :gutter="16" class="search-row search-row-1"> 8 <el-row :gutter="16" class="search-row search-row-1">
9 <el-col :span="5"> 9 <el-col :span="5">
antis-ncc-admin/src/views/statisticsList/form2.vue
@@ -119,7 +119,7 @@ @@ -119,7 +119,7 @@
119 {{ scope.row.createUserName || '无' }} 119 {{ scope.row.createUserName || '无' }}
120 </template> 120 </template>
121 </el-table-column> 121 </el-table-column>
122 - <!-- <el-table-column label="操作" width="120" fixed="right"> 122 + <el-table-column label="操作" width="120" fixed="right">
123 <template slot-scope="scope"> 123 <template slot-scope="scope">
124 <el-button 124 <el-button
125 type="danger" 125 type="danger"
@@ -131,7 +131,7 @@ @@ -131,7 +131,7 @@
131 清空欠款 131 清空欠款
132 </el-button> 132 </el-button>
133 </template> 133 </template>
134 - </el-table-column> --> 134 + </el-table-column>
135 </NCC-table> 135 </NCC-table>
136 136
137 <!-- 分页组件 --> 137 <!-- 分页组件 -->
antis-ncc-admin/src/views/wageManagement/assistants.vue
@@ -872,15 +872,11 @@ export default { @@ -872,15 +872,11 @@ export default {
872 const response = await importAssistantSalaryFromExcel(this.importFile) 872 const response = await importAssistantSalaryFromExcel(this.importFile)
873 if (response.code === 200) { 873 if (response.code === 200) {
874 const result = response.data || response 874 const result = response.data || response
875 - let message = '导入成功'  
876 - if (result.successCount !== undefined) {  
877 - message = `导入成功:新增${result.insertCount || 0}条,更新${result.updateCount || 0}条,跳过${result.skippedCount || 0}条`  
878 - }  
879 - this.$message.success(message) 875 + this.$message.success( result.message || '导入成功')
880 this.handleImportDialogClose() 876 this.handleImportDialogClose()
881 this.getList() 877 this.getList()
882 } else { 878 } else {
883 - this.$message.error(response.msg || '导入失败') 879 + this.$message.error(response.message || '导入失败')
884 } 880 }
885 } catch (error) { 881 } catch (error) {
886 console.error('导入失败:', error) 882 console.error('导入失败:', error)
antis-ncc-admin/src/views/wageManagement/business-unit-managers.vue
@@ -780,15 +780,11 @@ export default { @@ -780,15 +780,11 @@ export default {
780 const response = await importBusinessUnitManagerSalaryFromExcel(this.importFile) 780 const response = await importBusinessUnitManagerSalaryFromExcel(this.importFile)
781 if (response.code === 200) { 781 if (response.code === 200) {
782 const result = response.data || response 782 const result = response.data || response
783 - let message = '导入成功'  
784 - if (result.successCount !== undefined) {  
785 - message = `导入成功:新增${result.insertCount || 0}条,更新${result.updateCount || 0}条,跳过${result.skippedCount || 0}条`  
786 - }  
787 - this.$message.success(message) 783 + this.$message.success( result.message || '导入成功')
788 this.handleImportDialogClose() 784 this.handleImportDialogClose()
789 this.getList() 785 this.getList()
790 } else { 786 } else {
791 - this.$message.error(response.msg || '导入失败') 787 + this.$message.error(response.message || '导入失败')
792 } 788 }
793 } catch (error) { 789 } catch (error) {
794 console.error('导入失败:', error) 790 console.error('导入失败:', error)
antis-ncc-admin/src/views/wageManagement/cienceTeacher.vue
@@ -991,15 +991,11 @@ export default { @@ -991,15 +991,11 @@ export default {
991 const response = await importTechTeacherSalaryFromExcel(this.importFile) 991 const response = await importTechTeacherSalaryFromExcel(this.importFile)
992 if (response.code === 200) { 992 if (response.code === 200) {
993 const result = response.data || response 993 const result = response.data || response
994 - let message = '导入成功'  
995 - if (result.successCount !== undefined) {  
996 - message = `导入成功:新增${result.insertCount || 0}条,更新${result.updateCount || 0}条,跳过${result.skippedCount || 0}条`  
997 - }  
998 - this.$message.success(message) 994 + this.$message.success( result.message || '导入成功')
999 this.handleImportDialogClose() 995 this.handleImportDialogClose()
1000 this.getList() 996 this.getList()
1001 } else { 997 } else {
1002 - this.$message.error(response.msg || '导入失败') 998 + this.$message.error(response.message || '导入失败')
1003 } 999 }
1004 } catch (error) { 1000 } catch (error) {
1005 console.error('导入失败:', error) 1001 console.error('导入失败:', error)
antis-ncc-admin/src/views/wageManagement/director.vue
@@ -837,15 +837,11 @@ export default { @@ -837,15 +837,11 @@ export default {
837 const response = await importDirectorSalaryFromExcel(this.importFile) 837 const response = await importDirectorSalaryFromExcel(this.importFile)
838 if (response.code === 200) { 838 if (response.code === 200) {
839 const result = response.data || response 839 const result = response.data || response
840 - let message = '导入成功'  
841 - if (result.successCount !== undefined) {  
842 - message = `导入成功:新增${result.insertCount || 0}条,更新${result.updateCount || 0}条,跳过${result.skippedCount || 0}条`  
843 - }  
844 - this.$message.success(message) 840 + this.$message.success( result.message || '导入成功')
845 this.handleImportDialogClose() 841 this.handleImportDialogClose()
846 this.getList() 842 this.getList()
847 } else { 843 } else {
848 - this.$message.error(response.msg || '导入失败') 844 + this.$message.error(response.message || '导入失败')
849 } 845 }
850 } catch (error) { 846 } catch (error) {
851 console.error('导入失败:', error) 847 console.error('导入失败:', error)
antis-ncc-admin/src/views/wageManagement/healthCoach.vue
@@ -1186,15 +1186,11 @@ export default { @@ -1186,15 +1186,11 @@ export default {
1186 const response = await importHealthCoachSalaryFromExcel(this.importFile) 1186 const response = await importHealthCoachSalaryFromExcel(this.importFile)
1187 if (response.code === 200) { 1187 if (response.code === 200) {
1188 const result = response.data || response 1188 const result = response.data || response
1189 - let message = '导入成功'  
1190 - if (result.successCount !== undefined) {  
1191 - message = `导入成功:新增${result.insertCount || 0}条,更新${result.updateCount || 0}条,跳过${result.skippedCount || 0}条`  
1192 - }  
1193 - this.$message.success(message) 1189 + this.$message.success( result.message || '导入成功')
1194 this.handleImportDialogClose() 1190 this.handleImportDialogClose()
1195 this.getList() 1191 this.getList()
1196 } else { 1192 } else {
1197 - this.$message.error(response.msg || '导入失败') 1193 + this.$message.error(response.message || '导入失败')
1198 } 1194 }
1199 } catch (error) { 1195 } catch (error) {
1200 console.error('导入失败:', error) 1196 console.error('导入失败:', error)
antis-ncc-admin/src/views/wageManagement/major-project-directors.vue
@@ -771,15 +771,11 @@ export default { @@ -771,15 +771,11 @@ export default {
771 const response = await importMajorProjectDirectorSalaryFromExcel(this.importFile) 771 const response = await importMajorProjectDirectorSalaryFromExcel(this.importFile)
772 if (response.code === 200) { 772 if (response.code === 200) {
773 const result = response.data || response 773 const result = response.data || response
774 - let message = '导入成功'  
775 - if (result.successCount !== undefined) {  
776 - message = `导入成功:新增${result.insertCount || 0}条,更新${result.updateCount || 0}条,跳过${result.skippedCount || 0}条`  
777 - }  
778 - this.$message.success(message) 774 + this.$message.success( result.message || '导入成功')
779 this.handleImportDialogClose() 775 this.handleImportDialogClose()
780 this.getList() 776 this.getList()
781 } else { 777 } else {
782 - this.$message.error(response.msg || '导入失败') 778 + this.$message.error(response.message || '导入失败')
783 } 779 }
784 } catch (error) { 780 } catch (error) {
785 console.error('导入失败:', error) 781 console.error('导入失败:', error)
antis-ncc-admin/src/views/wageManagement/major-project-teachers.vue
@@ -814,15 +814,11 @@ export default { @@ -814,15 +814,11 @@ export default {
814 const response = await importMajorProjectTeacherSalaryFromExcel(this.importFile) 814 const response = await importMajorProjectTeacherSalaryFromExcel(this.importFile)
815 if (response.code === 200) { 815 if (response.code === 200) {
816 const result = response.data || response 816 const result = response.data || response
817 - let message = '导入成功'  
818 - if (result.successCount !== undefined) {  
819 - message = `导入成功:新增${result.insertCount || 0}条,更新${result.updateCount || 0}条,跳过${result.skippedCount || 0}条`  
820 - }  
821 - this.$message.success(message) 817 + this.$message.success( result.message || '导入成功')
822 this.handleImportDialogClose() 818 this.handleImportDialogClose()
823 this.getList() 819 this.getList()
824 } else { 820 } else {
825 - this.$message.error(response.msg || '导入失败') 821 + this.$message.error(response.message || '导入失败')
826 } 822 }
827 } catch (error) { 823 } catch (error) {
828 console.error('导入失败:', error) 824 console.error('导入失败:', error)
antis-ncc-admin/src/views/wageManagement/shop.vue
@@ -1016,15 +1016,11 @@ export default { @@ -1016,15 +1016,11 @@ export default {
1016 const response = await importStoreManagerSalaryFromExcel(this.importFile) 1016 const response = await importStoreManagerSalaryFromExcel(this.importFile)
1017 if (response.code === 200) { 1017 if (response.code === 200) {
1018 const result = response.data || response 1018 const result = response.data || response
1019 - let message = '导入成功'  
1020 - if (result.successCount !== undefined) {  
1021 - message = `导入成功:新增${result.insertCount || 0}条,更新${result.updateCount || 0}条,跳过${result.skippedCount || 0}条`  
1022 - }  
1023 - this.$message.success(message) 1019 + this.$message.success( result.message || '导入成功')
1024 this.handleImportDialogClose() 1020 this.handleImportDialogClose()
1025 this.getList() 1021 this.getList()
1026 } else { 1022 } else {
1027 - this.$message.error(response.msg || '导入失败') 1023 + this.$message.error(response.message || '导入失败')
1028 } 1024 }
1029 } catch (error) { 1025 } catch (error) {
1030 console.error('导入失败:', error) 1026 console.error('导入失败:', error)
antis-ncc-admin/src/views/wageManagement/tech-general-managers.vue
@@ -800,15 +800,11 @@ export default { @@ -800,15 +800,11 @@ export default {
800 const response = await importTechGeneralManagerSalaryFromExcel(this.importFile) 800 const response = await importTechGeneralManagerSalaryFromExcel(this.importFile)
801 if (response.code === 200) { 801 if (response.code === 200) {
802 const result = response.data || response 802 const result = response.data || response
803 - let message = '导入成功'  
804 - if (result.successCount !== undefined) {  
805 - message = `导入成功:新增${result.insertCount || 0}条,更新${result.updateCount || 0}条,跳过${result.skippedCount || 0}条`  
806 - }  
807 - this.$message.success(message) 803 + this.$message.success( result.message || '导入成功')
808 this.handleImportDialogClose() 804 this.handleImportDialogClose()
809 this.getList() 805 this.getList()
810 } else { 806 } else {
811 - this.$message.error(response.msg || '导入失败') 807 + this.$message.error(response.message || '导入失败')
812 } 808 }
813 } catch (error) { 809 } catch (error) {
814 console.error('导入失败:', error) 810 console.error('导入失败:', error)