diff --git a/antis-ncc-admin/src/views/lqHytkHytk/Form copy.vue b/antis-ncc-admin/src/views/lqHytkHytk/Form copy.vue new file mode 100644 index 0000000..44ef04a --- /dev/null +++ b/antis-ncc-admin/src/views/lqHytkHytk/Form copy.vue @@ -0,0 +1,294 @@ + + diff --git a/antis-ncc-admin/src/views/lqHytkHytk/Form.vue b/antis-ncc-admin/src/views/lqHytkHytk/Form.vue index 44ef04a..84871fd 100644 --- a/antis-ncc-admin/src/views/lqHytkHytk/Form.vue +++ b/antis-ncc-admin/src/views/lqHytkHytk/Form.vue @@ -8,141 +8,232 @@ - - - + + + - - - + + + - + - + - - - + + + - - - + + + - + - + - - - - - - - - - + + + + - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- 新增 +
+ + +
+
+
+ 品项名称: + {{ px.pxmc || '未选择' }} +
+
+ 单价: + ¥{{ px.pxjg || 0 }} +
+
+ 已消费: + {{ px.yxf || 0 }} +
+
+ 总购买: + {{ px.zgm || 1 }} +
+
+ 剩余: + {{ (px.zgm || 1) - (px.yxf || 0) }} +
+
+ 类型: + {{ px.ly || '购买' }} +
+ +
+ + +
+ +
+
+ + + +
+
+ 健康师业绩 + 添加健康师 +
+
+
+
+
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + +
+
+ 删除 +
+
+
+
+
+
+ + +
+
+ 科技部老师业绩 + 添加科技部老师 +
+
+
+
+
+
+ + + + +
+
+ + + + +
+
+ + + + +
+
+ + +
+
+ 删除 +
+
+
+
+
+
+ + +
+
+ 科技部老师业绩 +
+
+ + 当前品项类型为"{{ px.qt2 }}",无需配置科技部老师业绩 +
+
+ +
+
+ + + + + + + + + + @@ -157,6 +248,7 @@ import request from '@/utils/request' import { getDictionaryDataSelector } from '@/api/systemData/dictionary' import { previewDataInterface } from '@/api/systemData/dataInterface' + import { getInfo } from '@/api/user' export default { components: {}, props: [], @@ -169,37 +261,123 @@ id:'', id:undefined, md:undefined, - mcbh:undefined, + mdbh:undefined, mdmc:undefined, hy:undefined, - hyxm:undefined, + hymc:undefined, hyzh:undefined, - jks:undefined, - jkszh:undefined, - jksxm:undefined, + tkje:undefined, + sgfy:undefined, bz:undefined, tkpx:undefined, tksj:undefined, tkr:undefined, + fileUrl:undefined, + lqHytkJksyjList:[], + lqHytkKjbsyjList:[], lqHytkMxList:[], }, rules: { + md: [ + { required: true, message: '请选择门店', trigger: 'change' } + ], + hy: [ + { required: true, message: '请选择会员', trigger: 'change' } + ] }, mdOptions : [], hyOptions : [], pxOptions : [], + jksOptions:[], + kjbOptions:[], } }, computed: {}, watch: {}, created() { - this.getmdOptions(); + // 门店数据在loadStoreDataAndSetDefault中加载,避免重复 this.gethyOptions(); this.getpxOptions(); }, mounted() { }, methods: { + // 门店选择变化处理 + handleMdChange(val) { + const selectedMd = this.mdOptions.find(item => item.id === val); + if (selectedMd) { + this.dataForm.mdbh = selectedMd.mdbh || selectedMd.id; + this.dataForm.mdmc = selectedMd.fullName; + console.log('选择门店:', selectedMd); + } else { + this.dataForm.mdbh = ''; + this.dataForm.mdmc = ''; + } + }, + // 会员选择变化处理 + handleHyChange(val) { + const selectedHy = this.hyOptions.find(item => item.id === val); + if (selectedHy) { + this.dataForm.hyzh = selectedHy.hyzh || selectedHy.id; + this.dataForm.hymc = selectedHy.fullName; + console.log('选择会员:', selectedHy); + + // 选择会员后,获取该会员的剩余品项 + this.getpxOptions(); + } else { + this.dataForm.hyzh = ''; + this.dataForm.hymc = ''; + this.pxOptions = []; // 清空品项选项 + } + }, + // 品项选择变化处理 + handlePxChange(index, row) { + if (row.px) { + const selectedPx = this.pxOptions.find(item => item.id === row.px); + if (selectedPx) { + request({ + url: `/api/Extend/LqXmzl/${selectedPx.id}`, + method: 'GET', + }).then((res) => { + let qt2 = res.data.qt2 || ""; + let sgf = res.data.sgf || 0; + row.pxmc = selectedPx.fullName; + row.pxjg = selectedPx.ItemPrice || 0; + row.qt2 = qt2 || ""; + row.yxf = selectedPx.ConsumedCount || 0; // 已消费 + row.zgm = selectedPx.TotalPurchased || 1; // 总购买 + row.ly = selectedPx.sourceType || "购买"; // 来源 + row.projectNumber = 1; // 默认消费数量为1 + row.sgf = sgf; + + // 如果品项类型不是"科美",清空科技部老师列表 + if (row.qt2 !== '科美') { + row.lqHytkKjbsyjList = []; + } + + console.log('选择品项:', selectedPx.fullName, 'qt2:', selectedPx.qt2, '剩余数量:', selectedPx.RemainingCount); + + // 重新计算总金额和总手工费 + this.calculateTotalAmount(); + this.calculateTotalLaborCost(); + }) + } + } else { + // 清空品项时,重置所有相关字段 + row.pxmc = ''; + row.pxjg = 0; + row.qt2 = ''; + row.yxf = 0; + row.zgm = 1; + row.ly = '购买'; + row.projectNumber = 1; + row.lqHytkKjbsyjList = []; // 清空科技部老师列表 + + // 重新计算总金额和总手工费 + this.calculateTotalAmount(); + this.calculateTotalLaborCost(); + } + }, getmdOptions(){ previewDataInterface('730960205902251269').then(res => { this.mdOptions = res.data @@ -210,11 +388,237 @@ this.hyOptions = res.data }); }, - getpxOptions(){ - previewDataInterface('730971133356016901').then(res => { - this.pxOptions = res.data + // 获取品项选项(从会员剩余品项API获取) + async getpxOptions() { + if (!this.dataForm.hy) { + console.warn("请先选择会员"); + this.pxOptions = []; + return; + } + + try { + const response = await request({ + url: `/api/Extend/lqkhxx/GetMemberRemainingItems?memberId=${this.dataForm.hy}`, + method: 'GET', + }); + + if (response.code == 200 && response.data && response.data.RemainingItems) { + this.pxOptions = response.data.RemainingItems.map(item => ({ + fullName: item.ItemName, + id: item.ItemId, + value: item.ItemId, + label: item.ItemName, + px: item.ItemId, + pxmc: item.ItemName, + pxjg: item.ItemPrice || 0, + qt2: item.qt2 || "", + RemainingCount: item.RemainingCount || 0, + ItemPrice: item.ItemPrice || 0, + sgf: 0, + sourceType: item.SourceType || "购买", + TotalPurchased: item.TotalPurchased || 0, + ConsumedCount: item.ConsumedCount || 0 + })); + console.log('获取会员剩余品项成功:', this.pxOptions); + } else { + console.warn("获取会员剩余品项失败,使用默认数据"); + this.pxOptions = []; + } + } catch (error) { + console.error("获取会员剩余品项出错:", error); + this.pxOptions = []; + } + }, + // 获取健康师选项 + getjksOptions() { + request({ + url: `/api/Extend/user?page=1&pageSize=1000&mdid=${this.dataForm.md}&gw=健康师`, + method: 'GET', + }).then((res) => { + if (res.code == 200 && res.data.list.length > 0) { + this.jksOptions = res.data.list.map(item => ({ + fullName: item.realName || item.name || item.userName, + id: item.id, + value: item.id, + label: item.realName || item.name || item.userName, + jks: item.id, + jksxm: item.realName || item.name || item.userName, + jkszh: item.mobilePhone || item.account || item.userName + })); + } else { + this.jksOptions = []; + } + }) + }, + // 获取科技部老师选项 + async getkjbOptions() { + await this.getKjbOptionsByOrganizeId(); + }, + // 根据门店ID获取科技部组织ID,再获取科技部老师列表 + async getKjbOptionsByOrganizeId() { + try { + // 1. 先获取门店信息,获取科技部组织ID + const storeResponse = await request({ + url: `/api/Extend/LqMdxx/${this.dataForm.md}`, + method: 'GET', + }); + + let organizeId = ""; + if (storeResponse.code == 200 && storeResponse.data) { + organizeId = storeResponse.data.kjb || ""; + console.log('获取到科技部组织ID:', organizeId); + } + + if (!organizeId) { + console.warn('未获取到科技部组织ID'); + this.kjbOptions = []; + return; + } + + // 2. 根据科技部组织ID获取科技部老师列表 + const userResponse = await request({ + url: `/api/Extend/user?page=1&pageSize=1000&organizeId=${organizeId}&gw=科技老师`, + method: 'GET', + }); + + if (userResponse.code == 200 && userResponse.data && userResponse.data.list.length > 0) { + this.kjbOptions = userResponse.data.list.map(item => ({ + fullName: item.realName || item.name || item.userName, + id: item.id, + value: item.id, + label: item.realName || item.name || item.userName, + kjbls: item.id, + kjblsxm: item.realName || item.name || item.userName, + kjblszh: item.mobilePhone || item.account || item.userName + })); + console.log('科技部老师列表:', this.kjbOptions); + } else { + console.warn('获取科技部老师列表失败'); + this.kjbOptions = []; + } + } catch (error) { + console.error('获取科技部老师列表出错:', error); + this.kjbOptions = []; + } + }, + // 品项健康师选择 + handleJksChange(pxIndex, jksIndex, row) { + console.log('品项健康师选择:', row); + if (row.jks) { + // 根据选择的健康师ID获取用户信息 + const selectedJks = this.jksOptions.find(item => item.id === row.jks); + if (selectedJks) { + // 填充姓名和账号 + row.jksxm = selectedJks.fullName; + row.jkszh = selectedJks.userName || selectedJks.account || selectedJks.id; + + // 获取金三角信息 + this.getJsjInfoByUserId(row.jks, (jsjId, jsjName) => { + row.jsjName = jsjName; + row.jsjId = jsjId; + }); + } + } else { + // 清空相关字段 + row.jksxm = ''; + row.jkszh = ''; + row.jsjId = ''; + } + }, + // 品项科技部老师选择 + handleKjbChange(pxIndex, kjbIndex, row) { + console.log('品项科技部老师选择:', row); + if (row.kjbls) { + // 根据选择的科技部老师ID获取用户信息 + const selectedKjb = this.kjbOptions.find(item => item.id === row.kjbls); + if (selectedKjb) { + // 填充姓名和账号 + row.kjblsxm = selectedKjb.fullName; + row.kjblszh = selectedKjb.userName || selectedKjb.account || selectedKjb.id; + } + } else { + // 清空相关字段 + row.kjblsxm = ''; + row.kjblszh = ''; + } + }, + // 根据用户ID获取金三角信息 + getJsjInfoByUserId(userId, callback) { + request({ + url: `/api/Extend/lqycsdjsj/Actions/GetThisMonthJsjInfo?userId=${userId}`, + method: 'GET', + }).then((res) => { + if (res.code === 200 && res.data) { + // 假设返回的数据结构中有jsj_id字段 + const jsjId = res.data.jsjId; + const jsjName = res.data.jsjName; + + if (callback) { + callback(jsjId, jsjName); + } + console.log('获取金三角信息成功:', res.data); + } else { + console.warn('获取金三角信息失败:', res.msg); + if (callback) { + callback(''); + } + } + }).catch((err) => { + console.error('获取金三角信息出错:', err); + if (callback) { + callback(''); + } }); }, + // 品项内人员业绩数字格式化 + formatPxStaffNumber(pxIndex, staffIndex, field, listName) { + const targetList = this.dataForm.lqHytkMxList[pxIndex][listName]; + if (targetList && targetList[staffIndex] && targetList[staffIndex][field] !== undefined) { + let value = targetList[staffIndex][field].toString().replace(/,/g, ''); + + if (!/^\d*\.?\d*$/.test(value)) { + value = value.replace(/[^\d.]/g, ''); + } + + targetList[staffIndex][field] = value; + } + }, + // 获取品项剩余数量 + getRemainingCount(px) { + if (px.px) { + const selectedPx = this.pxOptions.find(item => item.id === px.px); + if (selectedPx) { + return selectedPx.RemainingCount || 0; + } + } + return (px.zgm || 1) - (px.yxf || 0); + }, + // 消费数量变化处理 + onProjectNumberChange() { + // 重新计算总金额和总手工费 + this.calculateTotalAmount(); + this.calculateTotalLaborCost(); + }, + // 计算总退款金额 + calculateTotalAmount() { + let totalAmount = 0; + this.dataForm.lqHytkMxList.forEach(px => { + if (px.px && px.pxjg && px.projectNumber) { + totalAmount += parseFloat(px.pxjg) * parseInt(px.projectNumber); + } + }); + this.dataForm.tkje = totalAmount.toFixed(2); + }, + // 计算总手工费 + calculateTotalLaborCost() { + let totalLaborCost = 0; + this.dataForm.lqHytkMxList.forEach(px => { + if (px.sgf && px.projectNumber) { + totalLaborCost += parseFloat(px.sgf) * parseInt(px.projectNumber); + } + }); + this.dataForm.sgfy = totalLaborCost.toFixed(2); + }, goBack() { this.$emit('refresh') }, @@ -230,13 +634,35 @@ method: 'get' }).then(res =>{ this.dataForm = res.data; + this.dataForm.fileUrl = this.dataForm.fileUrl?JSON.parse(this.dataForm.fileUrl):[]; }) + } else { + // 新建时自动设置当前用户门店 + this.loadStoreDataAndSetDefault(); + // 加载健康师和科技部老师选项 + this.getjksOptions(); + this.getkjbOptions(); + // 初始化时计算总金额和总手工费 + this.calculateTotalAmount(); + this.calculateTotalLaborCost(); } }) }, dataFormSubmit() { + this.$refs['elForm'].validate((valid) => { if (valid) { + // 验证品项数据 + if (!this.validatePxList()) { + return; + } + + // 处理提交格式 + this.processFormData(); + console.log(this.dataForm) + // return + + this.dataForm.fileUrl = JSON.stringify(this.dataForm.fileUrl); if (!this.dataForm.id) { request({ url: `/api/Extend/LqHytkHytk`, @@ -273,22 +699,623 @@ } }) }, - addHandleLqHytkMxEntityList() { + // 品项相关方法 + addHandleLqXhPxmxEntityList() { let item = { - id:undefined, - gltkbh:undefined, - px:undefined, - mc:undefined, - tkje:undefined, - cs:undefined, - dchk:undefined, - fssj:undefined, + id: undefined, + glkdbh: undefined, + px: undefined, + pxmc: undefined, + pxjg: undefined, + xfzs: undefined, + yxf: 0, // 已消费 + zgm: 1, // 总购买 + ly: '购买', // 来源 + projectNumber: 1, // 消费数量 + qt2: undefined, // 品项类型 + lqHytkJksyjList: [], // 健康师业绩列表 + lqHytkKjbsyjList: [], // 科技部老师业绩列表 } - this.dataForm.lqHytkMxList.push(item) + this.dataForm.lqHytkMxList.push(item); + // 重新计算总金额和总手工费 + this.calculateTotalAmount(); + this.calculateTotalLaborCost(); }, - handleDelLqHytkMxEntityList(index) { + handleDelLqXhPxmxEntityList(index) { this.dataForm.lqHytkMxList.splice(index, 1); + // 重新计算总金额和总手工费 + this.calculateTotalAmount(); + this.calculateTotalLaborCost(); + }, + validatePxList(){ + const pxList = this.dataForm.lqHytkMxList; + + // 1. 验证是否有品项 + if (!pxList || pxList.length === 0) { + this.$message.error('请至少添加一个品项'); + return false; + } + + // 2. 验证每个品项的信息 + for (let i = 0; i < pxList.length; i++) { + const px = pxList[i]; + + // 验证品项基本信息 + if (!px.px || !px.pxmc) { + this.$message.error(`第${i + 1}个品项信息不完整,请重新选择`); + return false; + } + if (!px.pxjg || parseFloat(px.pxjg) <= 0) { + this.$message.error(`第${i + 1}个品项的价格必须大于0`); + return false; + } + + // 验证退卡次数不能超过剩余次数 + if (px.RemainingCount && px.projectNumber > px.RemainingCount) { + this.$message.error(`第${i + 1}个品项的退卡次数(${px.projectNumber})不能超过剩余次数(${px.RemainingCount})`); + return false; + } + + // 验证健康师 + if (!px.lqHytkJksyjList || px.lqHytkJksyjList.length === 0) { + this.$message.error(`第${i + 1}个品项必须至少选择一个健康师`); + return false; + } + + // 计算健康师业绩总和 + let jksTotalYj = 0; + let jksTotalLaborCost = 0; + let jksTotalNumber = 0; + + for (let j = 0; j < px.lqHytkJksyjList.length; j++) { + const jks = px.lqHytkJksyjList[j]; + + // 验证健康师是否选择 + if (!jks.jks || !jks.jksxm) { + this.$message.error(`第${i + 1}个品项的第${j + 1}个健康师必须选择`); + return false; + } + + // 验证健康师业绩必须填写 + if (!jks.jksyj || jks.jksyj.trim() === "") { + this.$message.error(`第${i + 1}个品项的第${j + 1}个健康师业绩必须填写`); + return false; + } + + // 验证业绩为数字 + const yj = parseFloat(jks.jksyj); + if (isNaN(yj) || yj < 0) { + this.$message.error(`第${i + 1}个品项的第${j + 1}个健康师业绩必须为有效数字`); + return false; + } + + jksTotalYj += yj; + jksTotalLaborCost += parseFloat(jks.laborCost) || 0; + jksTotalNumber += parseInt(jks.kdpxNumber) || 0; + } + + // 验证健康师业绩总和等于品项金额 + const pxTotalAmount = px.pxjg * px.projectNumber; + if (Math.abs(jksTotalYj - pxTotalAmount) > 0.01) { + this.$message.error(`第${i + 1}个品项的健康师业绩总和(${jksTotalYj.toFixed(2)})必须等于品项金额(${pxTotalAmount.toFixed(2)})`); + return false; + } + + // 验证健康师手工费总和等于品项手工费 + const pxTotalLaborCost = (px.sgf || 0) * px.projectNumber; + if (Math.abs(jksTotalLaborCost - pxTotalLaborCost) > 0.01) { + this.$message.error(`第${i + 1}个品项的健康师手工费总和(${jksTotalLaborCost.toFixed(2)})必须等于品项手工费(${pxTotalLaborCost.toFixed(2)})`); + return false; + } + + // 验证健康师次数总和等于品项次数 + if (jksTotalNumber !== px.projectNumber) { + this.$message.error(`第${i + 1}个品项的健康师次数总和(${jksTotalNumber})必须等于品项次数(${px.projectNumber})`); + return false; + } + + // 如果是科美品项,验证科技部老师 + if (px.qt2 === '科美') { + if (!px.lqHytkKjbsyjList || px.lqHytkKjbsyjList.length === 0) { + this.$message.error(`第${i + 1}个品项是科美品项,必须至少选择一个科技部老师`); + return false; + } + + // 计算科技部老师业绩总和 + let kjbTotalYj = 0; + let kjbTotalLaborCost = 0; + let kjbTotalNumber = 0; + + for (let k = 0; k < px.lqHytkKjbsyjList.length; k++) { + const kjb = px.lqHytkKjbsyjList[k]; + + // 验证科技部老师是否选择 + if (!kjb.kjbls || !kjb.kjblsxm) { + this.$message.error(`第${i + 1}个品项的第${k + 1}个科技部老师必须选择`); + return false; + } + + // 验证科技部老师业绩必须填写 + if (!kjb.kjblsyj || kjb.kjblsyj.trim() === "") { + this.$message.error(`第${i + 1}个品项的第${k + 1}个科技部老师业绩必须填写`); + return false; + } + + // 验证业绩为数字 + const yj = parseFloat(kjb.kjblsyj); + if (isNaN(yj) || yj < 0) { + this.$message.error(`第${i + 1}个品项的第${k + 1}个科技部老师业绩必须为有效数字`); + return false; + } + + kjbTotalYj += yj; + kjbTotalLaborCost += parseFloat(kjb.laborCost) || 0; + kjbTotalNumber += parseInt(kjb.hdpxNumber) || 0; + } + + // 验证科技部老师业绩总和等于品项金额 + if (Math.abs(kjbTotalYj - pxTotalAmount) > 0.01) { + this.$message.error(`第${i + 1}个品项的科技部老师业绩总和(${kjbTotalYj.toFixed(2)})必须等于品项金额(${pxTotalAmount.toFixed(2)})`); + return false; + } + + // 验证科技部老师手工费总和等于品项手工费 + if (Math.abs(kjbTotalLaborCost - pxTotalLaborCost) > 0.01) { + this.$message.error(`第${i + 1}个品项的科技部老师手工费总和(${kjbTotalLaborCost.toFixed(2)})必须等于品项手工费(${pxTotalLaborCost.toFixed(2)})`); + return false; + } + + // 验证科技部老师次数总和等于品项次数 + if (kjbTotalNumber !== px.projectNumber) { + this.$message.error(`第${i + 1}个品项的科技部老师次数总和(${kjbTotalNumber})必须等于品项次数(${px.projectNumber})`); + return false; + } + } + } + + return true; + }, + // 处理表单数据 + processFormData() { + // 检查是否有科美品项 + const hasKemei = this.dataForm.lqHytkMxList.some(px => px.qt2 === '科美'); + + // 设置是否有科技部 + this.dataForm.sfykjb = hasKemei ? "是" : "否"; + + // 处理品项列表,转换为指定格式 + this.dataForm.lqHytkMxList = this.dataForm.lqHytkMxList.map(px => { + // 计算退卡金额和总价 + const tkje = parseFloat(px.pxjg) * parseInt(px.projectNumber) || 0; + const f_TotalPrice = tkje; + + // 处理健康师列表 + const lqHytkJksyjList = (px.lqHytkJksyjList || []).map(jks => ({ + jks: jks.jks || '', + jksxm: jks.jksxm || '', + jkszh: jks.jkszh || '', + jksyj: parseFloat(jks.jksyj) || 0, + f_jsjid: jks.jsjId || '', + f_tkpxid: px.px || '', + f_LaborCost: parseFloat(jks.laborCost) || 0, + f_tkpxNumber: parseInt(px.projectNumber) || 0 + })); + + // 处理科技部老师列表 + const lqHytkKjbsyjList = (px.lqHytkKjbsyjList || []).map(kjb => ({ + kjbls: kjb.kjbls || '', + kjblsxm: kjb.kjblsxm || '', + kjblszh: kjb.kjblszh || '', + kjblsyj: parseFloat(kjb.kjblsyj) || 0, + f_tkpxid: px.px || '', + f_LaborCost: parseFloat(kjb.laborCost) || 0, + f_tkpxNumber: parseInt(px.projectNumber) || 0 + })); + + return { + px: px.px || '', + pxmc: px.pxmc || '', + pxjg: parseFloat(px.pxjg) || 0, + tkje: tkje, + f_ProjectNumber: parseInt(px.projectNumber) || 0, + f_SourceType: px.qt2 || '', + f_TotalPrice: f_TotalPrice, + lqHytkJksyjList: lqHytkJksyjList, + lqHytkKjbsyjList: lqHytkKjbsyjList + }; + }); + }, + // 品项健康师相关方法 + addPxJks(pxIndex) { + if (!this.dataForm.lqHytkMxList[pxIndex].lqHytkJksyjList) { + this.$set(this.dataForm.lqHytkMxList[pxIndex], 'lqHytkJksyjList', []); + } + let item = { + "jks": "", + "jksxm": "", + "jkszh": "", + "jksyj": "", + "jsjId": "", + "laborCost": 1, + "kdpxNumber": 0 + } + this.dataForm.lqHytkMxList[pxIndex].lqHytkJksyjList.push(item); + }, + removePxJks(pxIndex, jksIndex) { + this.dataForm.lqHytkMxList[pxIndex].lqHytkJksyjList.splice(jksIndex, 1); + }, + // 品项科技部老师相关方法 + addPxKjb(pxIndex) { + if (!this.dataForm.lqHytkMxList[pxIndex].lqHytkKjbsyjList) { + this.$set(this.dataForm.lqHytkMxList[pxIndex], 'lqHytkKjbsyjList', []); + } + let item = { + "kjbls": "", + "kjblsyj": "", + "kjblsxm": "", + "kjblszh": "", + "laborCost": 0, + "hdpxNumber": 0 + } + this.dataForm.lqHytkMxList[pxIndex].lqHytkKjbsyjList.push(item); + }, + removePxKjb(pxIndex, kjbIndex) { + this.dataForm.lqHytkMxList[pxIndex].lqHytkKjbsyjList.splice(kjbIndex, 1); + }, + // 加载门店数据并设置默认门店 + loadStoreDataAndSetDefault() { + console.log('开始加载门店数据和用户信息...'); + // 先加载门店数据 + this.loadStoreDataPromise().then(() => { + // 门店数据加载完成后,获取用户信息 + return this.getCurrentUserStorePromise(); + }).then((userData) => { + if (userData && userData.mdid) { + const userStoreId = userData.mdid; + console.log('用户门店ID:', userStoreId); + console.log('门店选项列表:', this.mdOptions); + + // 检查用户门店ID是否在门店列表中 + const matchingStore = this.mdOptions.find(store => store.id === userStoreId); + if (matchingStore) { + this.dataForm.md = userStoreId; + this.dataForm.mdmc = matchingStore.fullName; + this.dataForm.mdbh = matchingStore.id; + console.log('找到匹配的门店,设置默认门店ID:', userStoreId); + console.log('匹配的门店信息:', matchingStore); + } else { + console.warn('用户门店ID在门店列表中未找到匹配项'); + console.log('用户门店ID:', userStoreId); + console.log('可用门店ID列表:', this.mdOptions.map(s => s.id)); + } + } else { + console.warn('用户数据中没有门店ID,无法设置默认值'); + } + + // 加载健康师和科技部老师选项 + this.getjksOptions(); + this.getkjbOptions(); + }).catch(err => { + console.error('加载数据失败:', err); + }); + }, + // 加载门店数据 + loadStoreDataPromise() { + // 使用原来的数据接口方式 + return previewDataInterface('730960205902251269').then(res => { + console.log('门店API原始响应:', res); + if (res.data && res.data.length > 0) { + this.mdOptions = res.data; + console.log('门店数据加载成功:', this.mdOptions); + return res.data; + } else { + console.warn('门店数据为空'); + return []; + } + }).catch(err => { + console.error('门店数据加载失败:', err); + return []; + }); + }, + // 获取当前用户门店信息 + getCurrentUserStorePromise() { + return new Promise((resolve, reject) => { + getInfo().then(res => { + resolve(res.data.userInfo); + }).catch(err => { + console.error('获取当前用户信息失败:', err); + reject(err); + }); + }); }, } } + + diff --git a/antis-ncc-admin/src/views/lqKdKdjlb/Form.vue b/antis-ncc-admin/src/views/lqKdKdjlb/Form.vue index 5fb482f..76b7343 100644 --- a/antis-ncc-admin/src/views/lqKdKdjlb/Form.vue +++ b/antis-ncc-admin/src/views/lqKdKdjlb/Form.vue @@ -498,6 +498,50 @@ export default { this.$message.error(`第${i + 1}个品项请至少添加一个健康师业绩`); return false; } + + // 验证每个健康师是否选择 + for (let j = 0; j < px.lqKdJksyjList.length; j++) { + const jks = px.lqKdJksyjList[j]; + if (!jks.jks || !jks.jksxm) { + this.$message.error(`第${i + 1}个品项的第${j + 1}个健康师必须选择`); + return false; + } + if (!jks.jksyj || jks.jksyj.trim() === "") { + this.$message.error(`第${i + 1}个品项的第${j + 1}个健康师业绩必须填写`); + return false; + } + const yj = parseFloat(jks.jksyj); + if (isNaN(yj) || yj < 0) { + this.$message.error(`第${i + 1}个品项的第${j + 1}个健康师业绩必须为有效数字`); + return false; + } + } + + // 如果是科美品项,验证科技部老师 + if (px.qt2 === '科美') { + if (!px.lqKdKjbsyjList || px.lqKdKjbsyjList.length === 0) { + this.$message.error(`第${i + 1}个品项是科美品项,必须至少选择一个科技部老师`); + return false; + } + + // 验证每个科技部老师是否选择 + for (let k = 0; k < px.lqKdKjbsyjList.length; k++) { + const kjb = px.lqKdKjbsyjList[k]; + if (!kjb.kjbls || !kjb.kjblsxm) { + this.$message.error(`第${i + 1}个品项的第${k + 1}个科技部老师必须选择`); + return false; + } + if (!kjb.kjblsyj || kjb.kjblsyj.trim() === "") { + this.$message.error(`第${i + 1}个品项的第${k + 1}个科技部老师业绩必须填写`); + return false; + } + const yj = parseFloat(kjb.kjblsyj); + if (isNaN(yj) || yj < 0) { + this.$message.error(`第${i + 1}个品项的第${k + 1}个科技部老师业绩必须为有效数字`); + return false; + } + } + } } // 3. 验证每个品项金额等于该品项健康师业绩之和 @@ -697,7 +741,7 @@ export default { this.$nextTick(() => { this.initPxQt2Fields(); }); - this.dataForm.f_FileUrl = JSON.parse(this.dataForm.f_FileUrl); + this.dataForm.f_FileUrl = this.dataForm.F_FIleUrl?JSON.parse(this.dataForm.F_FIleUrl):[]; }) } else { // 新增时先加载门店数据,再获取用户门店 diff --git a/antis-ncc-admin/src/views/lqXhHyhk/Form.vue b/antis-ncc-admin/src/views/lqXhHyhk/Form.vue index f3e6857..a6754f2 100644 --- a/antis-ncc-admin/src/views/lqXhHyhk/Form.vue +++ b/antis-ncc-admin/src/views/lqXhHyhk/Form.vue @@ -9,7 +9,7 @@
- + @@ -30,7 +30,7 @@ - + @@ -57,14 +57,14 @@ - + - + @@ -941,6 +941,12 @@ for (let j = 0; j < px.lqXhJksyjList.length; j++) { const jks = px.lqXhJksyjList[j]; + // 验证健康师是否选择 + if (!jks.jks || !jks.jksxm) { + this.$message.error(`第${i + 1}个品项的第${j + 1}个健康师必须选择`); + return false; + } + // 验证健康师业绩必须填写 if (!jks.jksyj || jks.jksyj.trim() === "") { this.$message.error(`第${i + 1}个品项的第${j + 1}个健康师业绩必须填写`); @@ -994,6 +1000,12 @@ for (let k = 0; k < px.lqXhKjbsyjList.length; k++) { const kjb = px.lqXhKjbsyjList[k]; + // 验证科技部老师是否选择 + if (!kjb.kjbls || !kjb.kjblsxm) { + this.$message.error(`第${i + 1}个品项的第${k + 1}个科技部老师必须选择`); + return false; + } + // 验证科技部老师业绩必须填写 if (!kjb.kjblsyj || kjb.kjblsyj.trim() === "") { this.$message.error(`第${i + 1}个品项的第${k + 1}个科技部老师业绩必须填写`); diff --git a/antis-ncc-admin/src/views/lqXhHyhk/index.vue b/antis-ncc-admin/src/views/lqXhHyhk/index.vue index bf3b8e4..1f4bc77 100644 --- a/antis-ncc-admin/src/views/lqXhHyhk/index.vue +++ b/antis-ncc-admin/src/views/lqXhHyhk/index.vue @@ -126,7 +126,7 @@