src/views/doctor/checkAll/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/hosp/order/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/hosp/project/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/picture/picture/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/system/package/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/system/tijian/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
vue.config.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/views/doctor/checkAll/index.vue
@@ -2542,14 +2542,26 @@ }, getConfigKey() { getconfigKey("sfkqtwbg").then((res) => { // 使用正确的 getConfigKey 函数(需要参数) getConfigKey("sfkqtwbg").then((res) => { this.msgtuwen = res.msg; }).catch((error) => { console.warn("获取配置项 sfkqtwbg 失败:", error); this.msgtuwen = ""; // 设置默认值 }); getconfigKey("sfkqjqwz").then((res) => { getConfigKey("sfkqjqwz").then((res) => { this.msgjianqian = res.msg; }).catch((error) => { console.warn("获取配置项 sfkqjqwz 失败:", error); this.msgjianqian = ""; // 设置默认值 }); getconfigKey("kcf").then((res) => { getConfigKey("kcf").then((res) => { this.msgkcf = res.msg; }).catch((error) => { console.warn("获取配置项 kcf 失败:", error); this.msgkcf = ""; // 设置默认值 }); }, @@ -2582,6 +2594,7 @@ yichangjieguo() { this.loading = true; this.isLoading = true; this.status1 = 0; getConfigKey("kzycxmsfzk").then((res) => { this.shouldExpand = res.msg; @@ -2592,11 +2605,20 @@ this.expends = []; } }); yichang({ tjNum: this.tjNumber, }) .then((res) => { this.yichangList = res.data; return new Promise((resolve, reject) => { yichang({ tjNum: this.tjNumber, }).then((res) => { const data = res.data; if (!data || data.length === 0) { this.$message.warning("暂无异常报告"); this.loading = false; this.isLoading = false; // 关闭整体加载框 resolve(); // 返回 Promise,但不继续后续逻辑 return; } this.yichangList = data; this.yichangList.forEach((item) => { item.sone.forEach((soneItem) => { if ( @@ -2610,24 +2632,32 @@ if (!this.yichangList) { this.$message.warning("暂无异常报告"); } resolve(); // 成功完成 // 这里也可以根据shouldExpand再调用一次getExpends,确保数据已加载 if (this.shouldExpand === "Y" || this.shouldExpand === "y") { this.getExpends(); } else { this.expends = []; } }) }); }) .catch((error) => { this.isLoading = false; this.loading = false; console.error("获取异常结果失败:", error); this.$message.error("获取异常结果失败"); reject(error); // 返回错误 }) .finally(() => { this.isLoading = false; this.loading = false; // 只在没有提前返回的情况下关闭加载框 if (this.isLoading) { this.isLoading = false; } if (this.loading) { this.loading = false; } }); }, fuchaxiangmu() { this.loading = true; src/views/hosp/order/index.vue
@@ -2,7 +2,7 @@ <div v-loading="isLoading" element-loading-text="正在提交,请稍候..." element-loading-spinner="el-icon-loading" element-loading-background="rgba(255, 255, 255, 0.8)" style="height: 100%; padding: 20px; position: relative;"> <div class="app-container"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form-item label="姓名" prop="name"> <el-input ref="inputName" v-model="queryParams.name" placeholder="请输入姓名" style="width: 150px" clearable @keyup.enter.native="handleQuery" /> @@ -15,7 +15,7 @@ <el-input ref="inputName" v-model="queryParams.xmmc" placeholder="请输入体检项目" style="width: 150px" clearable @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item label="单位名称" prop="tjCompName" > <el-form-item label="单位名称" prop="tjCompName"> <el-select :remote-method="getRemoteData" v-model="queryParams.tjCompName" value-key="drugManufacturerId" style="width: 200px" remote filterable placeholder="请选择单位名称" clearable @change="searchSelect"> <el-option v-for="dict in CompanyList" :key="dict.drugManufacturerId" :label="dict.cnName" :value="dict" /> @@ -89,8 +89,8 @@ <el-button type="primary" size="mini" @click="handleProject1" :disabled="single" v-hasPermi="['hosp:order:export']">补录项目</el-button> </el-col> <el-col :span="1.5"> <el-button type="primary" size="mini" @click="revokeProject" :disabled="single" <el-col :span="1.5"> <el-button type="primary" size="mini" @click="revokeProject" :disabled="single" v-hasPermi="['hosp:order:export']">撤销补录</el-button> </el-col> @@ -106,8 +106,8 @@ <el-button type="primary" size="mini" @click="budadzd" :disabled="single" v-hasPermi="['hosp:order:export']">打印补录单</el-button> </el-col> <el-col :span="1.5"> <el-button style="background-color:#E6A23C;color:#fff" size="mini" @click="handleRevoke" <el-col :span="1.5"> <el-button style="background-color:#E6A23C;color:#fff" size="mini" @click="handleRevoke" :disabled="singles">撤销签到</el-button> </el-col> <el-col :span="1.5"> @@ -544,90 +544,94 @@ </el-dialog> <!-- 添加补录项目 --> <el-dialog :title="title" :visible.sync="Projectopen1" width="1100px" style="height: 860px" append-to-body <el-dialog :title="title" :visible.sync="Projectopen1" width="1100px" style="height: 880px" append-to-body :close-on-click-modal="false"> <div class="box"> <div class="box1"> <div style="text-align: center; margin-bottom: 10px; margin-top: 10px"> 项目选择 </div> <el-tabs type="border-card" style="height: 560px; margin: 0 10px; width: 100%" @tab-click="handleClick" v-model="activeNames"> <el-tab-pane label="组合" name="first"> <div class="tab8"> <el-row :gutter="20" style="width: 100%"> <el-col :span="22"> <el-input placeholder="输入关键字进行过滤" v-model="filterage"> </el-input> <div class="tab3"> <el-tree class="filter-tree" v-loading="loading" :data="packageList" :props="defaultProp" show-checkbox node-key="id" @check-change="handlepackage" :default-checked-keys="checkedkeys" :filter-node-method="filterpackage" ref="treas" :render-content="renderContents"> </el-tree> </div> </el-col> </el-row> <el-row :gutter="20"> <el-col :span="8"> <div class="grid-content bg-purple"> <div style="text-align: center; margin-bottom: 10px; margin-top: 10px"> 项目选择 </div> </el-tab-pane> <el-tab-pane label="单项" name="third"> <div class="tab8"> <el-row type="flex" class="row-bg" justify="space-around"> <el-col :span="22"> <el-input placeholder="输入关键字进行过滤" v-model="filterText"> </el-input> <div class="tab3"> <el-tree class="filter-tree" v-loading="loading" :data="Treedata" :props="defaultProps" show-checkbox node-key="proId" @check-change="handleCurrentChecked" :default-checked-keys="checkedkey" :filter-node-method="filterNode" ref="tree" :render-content="renderContent"> </el-tree> </div> </el-col> </el-row> <el-tabs type="border-card" style="height: 560px; margin: 0 10px; width: 100%" @tab-click="handleClick" v-model="activeNames"> <el-tab-pane label="组合" name="first"> <div class="tab8"> <el-row :gutter="20" style="width: 100%"> <el-col :span="22"> <el-input placeholder="输入关键字进行过滤" v-model="filterage"> </el-input> <div class="tab3"> <el-tree class="filter-tree" v-loading="loading" :data="packageList" :props="defaultProp" show-checkbox node-key="id" @check-change="handlepackage" :default-checked-keys="checkedkeys" :filter-node-method="filterpackage" ref="treas" :render-content="renderContents"> </el-tree> </div> </el-col> </el-row> </div> </el-tab-pane> <el-tab-pane label="单项" name="third"> <div class="tab8"> <el-row type="flex" class="row-bg" justify="space-around"> <el-col :span="22"> <el-input placeholder="输入关键字进行过滤" v-model="filterText"> </el-input> <div class="tab3"> <el-tree class="filter-tree" v-loading="loading" :data="Treedata" :props="defaultProps" show-checkbox node-key="proId" @check-change="handleCurrentChecked" :default-checked-keys="checkedkey" :filter-node-method="filterNode" ref="tree" :render-content="renderContent"> </el-tree> </div> </el-col> </el-row> </div> </el-tab-pane> </el-tabs> </div> </el-col> <el-col :span="16"> <div class="grid-content bg-purple"> <div style="text-align: center; margin-bottom: 10px; margin-top: 9px"> 已选项目列表 </div> </el-tab-pane> </el-tabs> </div> <el-table :data="DataList3" border style="width: 100%; table-layout: fixed" height="560" :span-method="objectspanmethod"> <el-table-column prop="propinName" label="检查项目" width="160px" :show-overflow-tooltip="true"> </el-table-column> <el-table-column prop="proName" label="明细项目" width="160px" :show-overflow-tooltip="true"> </el-table-column> <el-table-column prop="sl" label="数量" width="56px"> </el-table-column> <el-table-column prop="proPrice" label="原价" width="56px"> </el-table-column> <el-table-column label="折扣" width="150px"> <template slot-scope="scope"> <!-- @input="validateDiscount(scope.row)" --> <el-input-number v-model.number="scope.row.discount" @change="handleManualChange(scope.row)" placeholder="输入折扣" size="small" type="number" :precision="1" :step="0.1" :max="10" :min="0"> </el-input-number> </template> </el-table-column> <el-table-column prop="nowPrice" label="现价"> <template slot-scope="scope"> {{ scope.row.nowPrice ? scope.row.nowPrice.toFixed(2) : scope.row.nowPrice }} </template> </el-table-column> <div class="grid-content bg-purple"> <div style="text-align: center; margin-bottom: 10px; margin-top: 9px"> 已选项目列表 </div> <el-table :data="DataList3" border style="width: 100%; table-layout: fixed" height="560" :span-method="objectspanmethod"> <el-table-column prop="propinName" label="检查项目" width="160px" :show-overflow-tooltip="true"> </el-table-column> <el-table-column prop="proName" label="明细项目" width="160px" :show-overflow-tooltip="true"> </el-table-column> <el-table-column prop="sl" label="数量" width="56px"> </el-table-column> <el-table-column prop="proPrice" label="原价" width="56px"> </el-table-column> <el-table-column label="折扣" width="150px"> <template slot-scope="scope"> <!-- @input="validateDiscount(scope.row)" --> <el-input-number v-model.number="scope.row.discount" @change="handleManualChange(scope.row)" placeholder="输入折扣" size="small" type="number" :precision="1" :step="0.1" :max="10" :min="0"> </el-input-number> </template> </el-table-column> <el-table-column prop="nowPrice" label="现价"> <template slot-scope="scope"> {{ scope.row.nowPrice ? scope.row.nowPrice.toFixed(2) : scope.row.nowPrice }} </template> </el-table-column> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="50px"> <template slot-scope="scope"> <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDel(scope.row)" title="删除"></el-button> </template> </el-table-column> </el-table> <!-- <h3 style="font-weight: 600">合计:{{ marryalls }}元</h3> --> </div> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="50px"> <template slot-scope="scope"> <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDel(scope.row)" title="删除"></el-button> </template> </el-table-column> </el-table> <!-- <h3 style="font-weight: 600">合计:{{ marryalls }}元</h3> --> </div> </el-col> </el-row> </div> <el-form :model="form" inline style="display: flex; justify-content: space-between; margin-top: 20px"> @@ -643,14 +647,14 @@ <el-input placeholder="原价" :value="TotalPrice1" disabled style="width: 90px"></el-input> </el-form-item> <!-- 折扣设定 --> <!-- 折扣设定 --> <!-- <el-form-item label="折扣" style="display: flex"> <el-input style="width: 90px" type="number" v-model="discount" :value="discount"></el-input> </el-form-item> --> <el-form-item label="折扣"> <!-- {{ discount }} --> <el-input-number ref="inputNumber" style="width: 150px" v-model="discount" :precision="1" :step="0.1" <el-input-number ref="inputNumber" style="width: 140px" v-model="discount" :precision="1" :step="0.1" :max="10" :min="0" @change="debounceNumberChange"></el-input-number> </el-form-item> @@ -659,7 +663,7 @@ <el-input placeholder="应付金额" :value="TotalPrice1 * (discount / 10)" style="width: 90px"></el-input> </el-form-item> --> <el-form-item label="应付"> <el-input placeholder="应付金额" v-model="TotalPrice" style="width: 206px" @input="changeXianjia" <el-input placeholder="应付金额" v-model="TotalPrice" style="width: 90px" @input="changeXianjia" @blur="numberChangeXianPrice(discount, discount)" /> </el-form-item> @@ -673,7 +677,7 @@ <!-- 结算方式 --> <el-form-item label="结算方式" prop="jsType" style="display: flex"> <el-select v-model="jsType" placeholder="请选择结算方式" style="width: 130px" clearable> <el-select v-model="jsType" placeholder="请选择结算方式" style="width: 120px" clearable> <el-option v-for="dict in dict.type.reservation_pay_type" :key="dict.value" :label="dict.label" :value="dict.value" /> </el-select> @@ -934,6 +938,7 @@ import { getwater } from "@/api/hosp/customer"; import { getInfo } from "@/api/login"; import ViewPdf from "@/components/ViewPdf"; import Big from "big.js"; import { shijianzhou, getaddtTransition, @@ -1983,8 +1988,8 @@ this.DataList3 = []; this.Datalists = []; this.filterText = "", this.filterage = "", this.TotalPrice1 = 0; this.filterage = "", this.TotalPrice1 = 0; this.orderId = row.orderId; this.cusId = row.tjCusIdCard; this.userId = row.userId; @@ -2061,7 +2066,9 @@ this.DataList3 = []; this.Datalists = []; this.filterText = "", this.filterage = "", this.filterage = "", this.TotalPrice = 0; this.discount = 10; this.TotalPrice1 = 0; this.orderId = this.ids; this.cusId = this.cusIds; @@ -2173,6 +2180,9 @@ this.TotalPrice1 = 0; this.DataList3.forEach((item) => { this.TotalPrice1 += item.proPrice * item.sl; let TotalPrice = this.TotalPrice1 * (this.discount / 10) this.TotalPrice = TotalPrice.toFixed(2); this.lastXianPrice = this.TotalPrice; }); }); } else if (checked === false) { @@ -2201,6 +2211,9 @@ this.TotalPrice1 = 0; this.DataList3.forEach((item) => { this.TotalPrice1 += item.proPrice * item.sl; let TotalPrice = this.TotalPrice1 * (this.discount / 10) this.TotalPrice = TotalPrice.toFixed(2); this.lastXianPrice = this.TotalPrice; }); }); } @@ -2244,9 +2257,6 @@ this.spliceData(); this.TotalPrice1 = 0; this.DataList.forEach((item1) => { console.log(item1.proPrice, 3322); console.log(this.TotalPrice1, 1122); this.TotalPrice1 = item1.proPrice + this.TotalPrice1; }); if (this.marryalls != 0) { @@ -2254,10 +2264,10 @@ } } }, handleManualChange(row) { handleManualChange(row) { this.updateProPrice(row); }, updateProPrice(row) { if (row.proPrice == 0) { row.discount = 10 @@ -2267,21 +2277,22 @@ const discount = new Big(row.discount); const result = ordPrice.times(discount.div(10)); // ordPrice * (discount / 10) row.nowPrice = result.toNumber(); this.TotalPrice = this.DataList3.reduce((sum, item) => { let TotalPrice= this.DataList3.reduce((sum, item) => { return sum.plus(new Big(item.nowPrice || "0")); }, new Big(0)); }, new Big(0)) this.TotalPrice = TotalPrice.toFixed(2); this.discount = (Math.floor((this.TotalPrice / this.TotalPrice1) * 100) / 100) * 10; } }, debounceNumberChange(currentValue, oldValue) { debounceNumberChange(currentValue, oldValue) { clearTimeout(this.debounceTimer); this.debounceTimer = setTimeout(() => { this.numberChange(currentValue, oldValue); }, 300); }, // 折扣 // 折扣 numberChange(currentValue, oldValue) { this.$confirm("确定修改所有子项的折扣吗?", "提示", { confirmButtonText: "确定", @@ -2299,7 +2310,8 @@ // this.TotalPrice = this.DataList3.reduce((sum, item) => { // return sum.plus(new Big(item.nowPrice || "0")); // }, new Big(0)); this.TotalPrice = new Big(this.TotalPrice1 * (this.discount / 10)).toFixed(2) let TotalPrice = new Big(this.TotalPrice1 * (this.discount / 10)) this.TotalPrice = TotalPrice.toFixed(2); }); }) .catch(() => { @@ -2317,7 +2329,6 @@ numberChangeXianPrice(currentValue, oldValue) { // 如果现价没有变化,直接返回 if (this.TotalPrice === this.lastXianPrice || !this.TotalPrice) { console.log(2222333) return; } this.$confirm("确定修改所有子项的折扣吗?", "提示", { @@ -2331,7 +2342,6 @@ // this.discount = this.getInfodis; // } let totalYsprice = new Big(0); console.log(this.DataList3, 11111) this.DataList3.forEach((item) => { item.discount = this.discount; const ordPrice = new Big(item.proPrice); @@ -2366,7 +2376,7 @@ }); }, handleDel(row) { handleDel(row) { this.Datalists.forEach((item, index) => { if (item.proId == row.proId) { this.Datalists.splice(index, 1); @@ -2839,7 +2849,7 @@ } .box1 { width: 50%; width: 35%; display: flex; flex-direction: column; } src/views/hosp/project/index.vue
@@ -1193,7 +1193,7 @@ }, created() { // this.getConsumables(); // this.getDeptList(); this.getDeptList(); // this.getDeptTree().then(() => { // this.precomputePinyin(); // }); @@ -1383,12 +1383,16 @@ this.form.hisXmbm = ""; this.form.hisXmmc = ""; this.form.hisdj = ""; this.loading = true; // this.loading = true; this.proParent = false; this.form.proPrice = 0.0; this.form.proName = ""; this.form.proId = null; this.form.resultType = "1"; // 先获取科室列表数据 this.getDeptList(); getlist().then((response) => { if (response.code == 200) { this.loading = false; @@ -1543,10 +1547,10 @@ getDeptList() { listDept(this.queryParams).then((response) => { this.parentNameList = response.data; this.deptList = this.handleTree(response.data, "proId"); this.deptList = this.handleTree(response.data, "deptId"); }); }, getDeptTree() { /* getDeptTree() { this.loadings = true; return deptTree111() .then((response) => { @@ -1564,7 +1568,7 @@ .finally(() => { this.loadings = false; // 无论成功或失败,结束加载 }); }, }, */ handleNodeClick(date) { this.treeDate = date; this.xiugaiList = {}; @@ -1722,28 +1726,39 @@ } }, handleUpdate1() { this.updateLoading = true; // this.updateLoading = true; this.form = {}; this.form = this.xiugaiList; this.form.proStatus = this.form.proStatus.toString(); this.form.sfcyyc = this.form.sfcyyc.toString(); this.proParent = true; this.isPriceDisabled = true; getlist() .then((response) => { if (response.code == 200) { this.loading = false; this.projectOptions = []; const project = { proId: 0, proName: "主类目", children: [] }; project.children = this.handleTree(response.data.list, "proId"); this.key = response.data.key; this.projectOptions.push(project); } }) .finally(() => { this.updateLoading = false; }); this.open = true; // 先加载科室列表数据,再设置表单数据 Promise.all([ listDept(this.queryParams), getlist() ]).then(([deptResponse, listResponse]) => { // 先设置科室列表 this.parentNameList = deptResponse.data; // 再设置表单数据 this.form = this.xiugaiList; this.form.proStatus = this.form.proStatus.toString(); this.form.sfcyyc = this.form.sfcyyc.toString(); // 处理项目选项 if (listResponse.code == 200) { this.loading = false; this.projectOptions = []; const project = { proId: 0, proName: "主类目", children: [] }; project.children = this.handleTree(listResponse.data.list, "proId"); this.key = listResponse.data.key; this.projectOptions.push(project); } this.open = true; }).catch((error) => { console.error("加载数据失败:", error); this.$message.error("加载数据失败"); }) }, handleUpdate(row) { this.reset(); @@ -1751,48 +1766,79 @@ const proId = row.proId || this.ids; this.proParent = false; this.isPriceDisabled = false; getProject(proId).then((response) => { this.form = response.data; this.showPrise = this.form.proParentId === "0"; this.showRentPrise = !this.showPrise; this.form.proStatus = this.form.proStatus.toString(); this.form.sfcyyc = this.form.sfcyyc.toString(); this.form.consumablesList = response.data.consumablesList; this.form.tjStandardList = response.data.tjStandardList; if (this.form.tjStandardList) { this.form.tjStandardList.forEach((item) => { item.tjSex = item.tjSex === "0" || item.tjSex === "男" ? "男" : item.tjSex === "1" || item.tjSex === "女" ? "女" : null; item.tjType = { 0: "婴儿", 1: "幼儿", 2: "儿童", 3: "少年", 4: "青年", 5: "中年", 6: "老年", }[item.tjType] || item.tjType; }); } getlist().then((response) => { if (response.code == 200) { // this.loading = false; this.projectOptions = []; const project = { proId: 0, proName: "主类目", children: [] }; project.children = this.handleTree(response.data.list, "proId"); this.key = response.data.key; this.projectOptions.push(project); listDept(this.queryParams).then((response) => { this.parentNameList = response.data; // this.deptList = this.handleTree(response.data, "proId"); getProject(proId).then((response) => { this.form = response.data; this.form.deptId = response.data.deptId; this.showPrise = this.form.proParentId === "0"; this.showRentPrise = !this.showPrise; this.form.proStatus = this.form.proStatus.toString(); this.form.sfcyyc = this.form.sfcyyc.toString(); this.form.consumablesList = response.data.consumablesList; this.form.tjStandardList = response.data.tjStandardList; if (this.form.tjStandardList) { this.form.tjStandardList.forEach((item) => { item.tjSex = item.tjSex === "0" || item.tjSex === "男" ? "男" : item.tjSex === "1" || item.tjSex === "女" ? "女" : null; item.tjType = { 0: "婴儿", 1: "幼儿", 2: "儿童", 3: "少年", 4: "青年", 5: "中年", 6: "老年", }[item.tjType] || item.tjType; }); } getlist().then((response) => { if (response.code == 200) { // this.loading = false; this.projectOptions = []; const project = { proId: 0, proName: "主类目", children: [] }; project.children = this.handleTree(response.data.list, "proId"); this.key = response.data.key; this.projectOptions.push(project); } }); // this.loadPage(); this.open = true; this.title = "体检项目信息维护"; }); // this.loadPage(); this.open = true; this.title = "体检项目信息维护"; }); }, // 刷新当前选中项目的数据 async refreshCurrentProjectData() { if (this.id) { try { const response = await getInfoByProId(this.id); this.xiugaiList = response.data; console.log("刷新项目数据成功:", this.xiugaiList); return response.data; } catch (error) { console.error("刷新项目数据失败:", error); this.$message.error("刷新项目数据失败"); this.xiugaiList = null; // 刷新失败时重置为 null return null; } } return null; }, // 调试方法:检查当前数据状态 debugDataState() { console.log("=== 数据状态调试 ==="); console.log("当前ID:", this.id); console.log("xiugaiList:", this.xiugaiList); console.log("form:", this.form); console.log("treeDate:", this.treeDate); console.log("=================="); }, getSelectValue(val) { this.form.consumablesList.forEach((formitem) => { @@ -1896,6 +1942,9 @@ // 等待右侧表格刷新 await this.getList(); // 立即刷新当前项目数据,确保数据是最新的 await this.refreshCurrentProjectData(); this.pageLoading = false; // ✅ 统一加载状态控制 }, src/views/picture/picture/index.vue
@@ -778,14 +778,21 @@ let tjNumber = val; this.loading = true; getYxJcXx(tjNumber).then((res) => { this.tableList = res.data.map((item) => { // 如果 imageUrl 存在且是纯 Base64 字符串,添加 data:image 前缀 if (item.imageUrl && !item.imageUrl.startsWith("data:image")) { // 假设图片类型为 png,如果接口提供类型,可以替换为动态值 item.imageUrl = `data:image/png;base64,${item.imageUrl}`; } return item; }); if (res && res.data && Array.isArray(res.data)) { this.tableList = res.data.map((item) => { // 如果 imageUrl 存在且是纯 Base64 字符串,添加 data:image 前缀 if (item.imageUrl && !item.imageUrl.startsWith("data:image")) { // 假设图片类型为 png,如果接口提供类型,可以替换为动态值 item.imageUrl = `data:image/png;base64,${item.imageUrl}`; } return item; }); }else { // 如果 res.data 不存在或不是数组,设置为空数组 this.tableList = []; console.warn('API response data is not an array:', res); } this.loading = false; this.$nextTick(() => { const headerCheckbox = this.$refs.mu.$el.querySelector( @@ -914,13 +921,35 @@ this.form.proResult = yxbx; }, submiepilog() { // 检查 tableList 是否为空 if (!this.tableList || this.tableList.length === 0) { this.$message.warning("表格中没有数据"); return; } // 检查 tableList 表格中是否有选中的项目 const selectedRows = this.$refs.mu.selection; if (!selectedRows || selectedRows.length === 0) { this.$message.warning("请先选择表格中的项目"); return; } this.$refs.aaa.open = true; let proId = "1633660948860522585"; this.$refs.aaa.getList(proId); }, submito() { if (!this.selectedRow || !this.selectedRow.proId) { this.$message.error("请选择提交项目"); // 检查 tableList 是否为空 if (!this.tableList || this.tableList.length === 0) { this.$message.warning("表格中没有数据"); return; } // 检查 tableList 表格中是否有选中的项目 const selectedRows = this.$refs.mu.selection; if (!selectedRows || selectedRows.length === 0) { this.$message.warning("请先选择表格中的项目"); return; } src/views/system/package/index.vue
@@ -1,155 +1,440 @@ <template> <div class="app-container"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px" > <el-form-item label="套餐名称" prop="pacName"> <el-input v-model="queryParams.pacName" placeholder="请输入套餐名称" clearable @keyup.enter.native="handleQuery" /> <el-input v-model="queryParams.pacName" placeholder="请输入套餐名称" clearable @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item label="套餐描述" prop="pacRemark"> <el-input v-model="queryParams.pacRemark" placeholder="请输入套餐描述" clearable @keyup.enter.native="handleQuery" /> <el-input v-model="queryParams.pacRemark" placeholder="请输入套餐描述" clearable @keyup.enter.native="handleQuery" /> </el-form-item> <el-form-item label="体检类别" prop="tjCategory"> <el-select v-model="queryParams.tjCategory" placeholder="请选择状态" style="width: 200px" filterable clearable> <el-option v-for="dict in dict.type.dict_tjtype" :key="dict.id" :label="dict.label" :value="dict.value"></el-option> <el-select v-model="queryParams.tjCategory" placeholder="请选择状态" style="width: 200px" filterable clearable > <el-option v-for="dict in dict.type.dict_tjtype" :key="dict.id" :label="dict.label" :value="dict.value" ></el-option> </el-select> </el-form-item> <el-form-item> <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery" >搜索</el-button > <el-button icon="el-icon-refresh" size="mini" @click="resetQuery" >重置</el-button > </el-form-item> </el-form> <el-row :gutter="10" class="mb8"> <el-col :span="1.5"> <el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['system:package:add']">新增</el-button> <el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['system:package:add']" >新增</el-button > </el-col> <el-col :span="1.5"> <el-button type="primary" icon="el-icon-edit" size="mini" :disabled="single" @click="handleUp" v-hasPermi="['system:package:edit']">修改</el-button> <el-button type="primary" icon="el-icon-edit" size="mini" :disabled="single" @click="handleUp" v-hasPermi="['system:package:edit']" >修改</el-button > </el-col> <el-col :span="1.5"> <el-button type="primary" icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete" v-hasPermi="['system:package:remove']">删除</el-button> <el-button type="primary" icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete" v-hasPermi="['system:package:remove']" >删除</el-button > </el-col> <el-col :span="1.5"> <el-button type="primary" icon="el-icon-download" size="mini" @click="handleExport" v-hasPermi="['system:package:export']">导出</el-button> <el-button type="primary" icon="el-icon-download" size="mini" @click="handleExport" v-hasPermi="['system:package:export']" >导出</el-button > </el-col> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" ></right-toolbar> </el-row> <template> <el-table v-loading="loading" style="width: 100%" :data="packageList" @selection-change="handleSelectionChange" border> <el-table-column fixed type="selection" width="40" align="center" :show-overflow-tooltip="true" /> <el-table-column label="序号" align="center" width="50" prop="newID" fixed /> <el-table-column label="体检类别" width="100px" align="center" prop="categoryNames" fixed> <el-table v-loading="loading" style="width: 100%" :data="packageList" @selection-change="handleSelectionChange" border > <el-table-column fixed type="selection" width="40" align="center" :show-overflow-tooltip="true" /> <el-table-column label="序号" align="center" width="50" prop="newID" fixed /> <el-table-column label="体检类别" width="100px" align="center" prop="categoryNames" fixed > <template slot-scope="scope"> <dict-tag :options="dict.type.dict_tjtype" :value="scope.row.tjCategory" /> <dict-tag :options="dict.type.dict_tjtype" :value="scope.row.tjCategory" /> </template> </el-table-column> <el-table-column label="套餐名称" align="center" prop="pacName" width="150px" fixed /> <el-table-column label="原价" width="80px" align="center" prop="price" fixed></el-table-column> <el-table-column label="折扣" width="80px" align="center" prop="limits" fixed></el-table-column> <el-table-column label="现价" width="80px" align="center" prop="newPrice" fixed></el-table-column> <el-table-column label="单项列表" align="center" prop="allProName" width="1200px"></el-table-column> <el-table-column label="套餐描述" align="center" :show-overflow-tooltip="true" width="120px"> <el-table-column label="套餐名称" align="center" prop="pacName" width="150px" fixed /> <el-table-column label="原价" width="80px" align="center" prop="price" fixed ></el-table-column> <el-table-column label="折扣" width="80px" align="center" prop="limits" fixed ></el-table-column> <el-table-column label="现价" width="80px" align="center" prop="newPrice" fixed ></el-table-column> <el-table-column label="单项列表" align="center" prop="allProName" width="1200px" ></el-table-column> <el-table-column label="套餐描述" align="center" :show-overflow-tooltip="true" width="120px" > <template slot-scope="scope"> <div class="showInline">{{ scope.row.pacRemark }}</div> </template> </el-table-column> <el-table-column label="关键字" width="110px" align="center" prop="keyNames"></el-table-column> <el-table-column label="是否上架" width="94px" align="center" prop="isOnSale"> <el-table-column label="关键字" width="110px" align="center" prop="keyNames" ></el-table-column> <el-table-column label="是否上架" width="94px" align="center" prop="isOnSale" > <template slot-scope="scope"> <dict-tag :options="dict.type.sys_yes_no" :value="scope.row.isOnSale" /> <dict-tag :options="dict.type.sys_yes_no" :value="scope.row.isOnSale" /> </template> </el-table-column> <el-table-column label="排序" width="50px" align="center" prop="sort"></el-table-column> <el-table-column label="小程序价格" width="90px" align="center" prop="retailPrice"></el-table-column> <el-table-column label="已售数量" width="90px" align="center" prop="saleNum"></el-table-column> <el-table-column label="状态" align="center" prop="pacStatus" fixed="right" width="100px"> <el-table-column label="排序" width="50px" align="center" prop="sort" ></el-table-column> <el-table-column label="小程序价格" width="90px" align="center" prop="retailPrice" ></el-table-column> <el-table-column label="已售数量" width="90px" align="center" prop="saleNum" ></el-table-column> <el-table-column label="状态" align="center" prop="pacStatus" fixed="right" width="100px" > <template slot-scope="scope"> <el-switch v-model="scope.row.pacStatus" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)"></el-switch> <el-switch v-model="scope.row.pacStatus" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)" ></el-switch> </template> </el-table-column> <el-table-column label="操作" align="center" width="80px" fixed="right" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" width="80px" fixed="right" class-name="small-padding fixed-width" > <template slot-scope="scope"> <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:package:edit']" title="修改"></el-button> <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['system:package:remove']" title="删除"></el-button> <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:package:edit']" title="修改" ></el-button> <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['system:package:remove']" title="删除" ></el-button> </template> </el-table-column> </el-table> <div class="pag"> <div class="pag1"> <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" /> <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" /> </div> </div> </template> <!-- 修改体检套餐对话框 --> <el-dialog :title="title" :visible.sync="open" width="1400px" append-to-body :close-on-click-modal="false"> <el-form ref="form" :model="form" :rules="rules" label-width="100px" :inline="true"> <el-dialog :title="title" :visible.sync="open" width="1400px" append-to-body :close-on-click-modal="false" > <el-form ref="form" :model="form" :rules="rules" label-width="100px" :inline="true" > <el-form-item label="套餐名称" prop="pacName"> <span slot="label" style="display: inline-block; border-bottom: 2px solid blue" @click="handlePackage"> <span slot="label" style="display: inline-block; border-bottom: 2px solid blue" @click="handlePackage" > 套餐名称 </span> <el-input v-model="form.pacName" placeholder="请输入套餐名称" style="width: 150px" /> <el-input v-model="form.pacName" placeholder="请输入套餐名称" style="width: 150px" /> </el-form-item> <el-form-item label="套餐状态" prop="pacStatus"> <el-select v-model="form.pacStatus" placeholder="请选择状态" style="width: 150px" filterable clearable> <el-option v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value"></el-option> <el-select v-model="form.pacStatus" placeholder="请选择状态" style="width: 150px" filterable clearable > <el-option v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" ></el-option> </el-select> </el-form-item> <el-form-item label="体检类别" prop="tjCategory"> <el-select v-model="form.tjCategory" placeholder="请选择体检类别" style="width: 150px" filterable clearable> <el-option v-for="dict in dict.type.dict_tjtype" :key="dict.value" :label="dict.label" :value="dict.value"></el-option> <el-select v-model="form.tjCategory" placeholder="请选择体检类别" style="width: 150px" filterable clearable > <el-option v-for="dict in dict.type.dict_tjtype" :key="dict.value" :label="dict.label" :value="dict.value" ></el-option> </el-select> </el-form-item> <el-form-item label="是否上架" prop="isOnSale"> <el-select v-model="form.isOnSale" placeholder="请选择是否上架" style="width: 140px" filterable clearable> <el-option v-for="dict in dict.type.sys_yes_no" :key="dict.value" :label="dict.label" :value="dict.value"></el-option> <el-select v-model="form.isOnSale" placeholder="请选择是否上架" style="width: 140px" filterable clearable > <el-option v-for="dict in dict.type.sys_yes_no" :key="dict.value" :label="dict.label" :value="dict.value" ></el-option> </el-select> </el-form-item> <el-form-item label="排序" prop="sort"> <el-input v-model="form.sort" placeholder="请输入排序" style="width: 150px" /> <el-input v-model="form.sort" placeholder="请输入排序" style="width: 150px" /> </el-form-item> <el-form-item label="小程序价格" prop="retailPrice"> <el-input v-model="form.retailPrice" placeholder="请输入小程序价格" style="width: 150px" /> <el-input v-model="form.retailPrice" placeholder="请输入小程序价格" style="width: 150px" /> </el-form-item> <el-form-item label="原价" prop="pics"> <el-input v-model="pics" placeholder="请输入原价" style="width: 150px" type="number" /> <el-input v-model="pics" placeholder="请输入原价" style="width: 150px" type="number" /> </el-form-item> <el-form-item label="折扣"> <el-input-number style="width: 150px" v-model="youhui" :precision="2" :step="0.1" :max="10" :min="0.1" @change="debounceNumberChange" :debounce="3000"></el-input-number> <el-input-number style="width: 150px" v-model="youhui" :precision="2" :step="0.1" :max="10" :min="0.1" @change="debounceNumberChange" :debounce="3000" ></el-input-number> </el-form-item> <el-form-item label="现价" prop="xianprice"> <el-input v-model="form.xianprice" placeholder="现价" clearable style="width: 140px" @input="changeXianjia" type="number" :debounce="3000" min="0"/> <el-input v-model="form.xianprice" placeholder="现价" clearable style="width: 140px" @input="changeXianjia" type="number" :debounce="3000" min="0" /> </el-form-item> <el-form-item label="关键字" prop="keywords"> <el-select multiple v-model="form.keywords" placeholder="请选择关键字" style="width: 160px" @change="sel" filterable clearable> <el-option v-for="item in keywordList" :key="item.id" :label="item.keyword" :value="item.id"></el-option> <el-select multiple v-model="form.keywords" placeholder="请选择关键字" style="width: 160px" @change="sel" filterable clearable > <el-option v-for="item in keywordList" :key="item.id" :label="item.keyword" :value="item.id" ></el-option> </el-select> </el-form-item> <div v-if="!isCollapsed" style="display: flex"> <div> <el-form-item label="套餐描述" prop="pacRemark"> <el-input type="textarea" v-model="form.pacRemark" placeholder="请输入套餐描述" style="width: 670px" rows="2"></el-input> <el-input type="textarea" v-model="form.pacRemark" placeholder="请输入套餐描述" style="width: 670px" rows="2" ></el-input> </el-form-item> <el-form-item label="详细介绍" prop="detail"> <editor v-model="form.detail" :min-height="192" style="width: 670px" /> <editor v-model="form.detail" :min-height="192" style="width: 670px" /> </el-form-item> </div> <div class="dialo2"> @@ -164,52 +449,108 @@ }}</el-button> <el-row style="display: flex; width: 1300px"> <el-col> <div style="text-align: center; margin-bottom: 10px; margin-top: 10px"> <div style="text-align: center; margin-bottom: 10px; margin-top: 10px" > 项目列表 </div> <el-input placeholder="输入关键字进行过滤" @input="handleFilterInput" v-model="queryParams1.nr" clearable /> <el-input placeholder="输入关键字进行过滤" @input="handleFilterInput" v-model="queryParams1.nr" clearable /> <div class="tab3" style="height: 365px"> <el-tree class="filter-tree" v-loading="loading" :data="Treedata" :props="defaultProps" show-checkbox node-key="proId" @check-change="handleCurrentChecked" :default-checked-keys="checkedkey" :filter-node-method="filterNode" ref="tree" :render-content="renderContent"> <el-tree class="filter-tree" v-loading="loading" :data="Treedata" :props="defaultProps" show-checkbox node-key="proId" @check-change="handleCurrentChecked" :default-checked-keys="checkedkey" :filter-node-method="filterNode" ref="tree" :render-content="renderContent" > </el-tree> <pagination small v-show="total1 > 0" :total="total1" :page.sync="queryParams1.page" :limit.sync="queryParams1.pageSize" @pagination="getDataList" /> <pagination small v-show="total1 > 0" :total="total1" :page.sync="queryParams1.page" :limit.sync="queryParams1.pageSize" @pagination="getDataList" /> </div> </el-col> <el-col> <div class="grid-content bg-purple"> <div style=" <div style=" text-align: center; margin-bottom: 10px; margin-top: 10px; margin-left: 8%; "> " > 已选项目列表 </div> <el-table :data="DataList" border style="width: 90%; margin-left: 20px" height="400" :span-method="objectSpanMethod"> <el-table :data="DataList" border style="width: 90%; margin-left: 20px" height="400" :span-method="objectSpanMethod" > <el-table-column prop="proName" label="检查项目"> </el-table-column> <el-table-column prop="priceOrd" label="原价" align="center" width="80px"> <el-table-column prop="priceOrd" label="原价" align="center" width="80px" > </el-table-column> <el-table-column label="折扣" width="100px"> <template slot-scope="scope"> <el-input v-model.number="scope.row.limits" @input="calculateDiscount(scope.row)" placeholder="输入折扣" size="small" type="number" min="0" step="0.1" max="10"> <el-input v-model.number="scope.row.limits" @input="calculateDiscount(scope.row)" placeholder="输入折扣" size="small" type="number" min="0" step="0.1" max="10" > </el-input> </template> </el-table-column> <el-table-column prop="priceNow" label="现价" width="80px" align="center"> <el-table-column prop="priceNow" label="现价" width="80px" align="center" > </el-table-column> <el-table-column label="操作" align="center" width="80px"> <template slot-scope="scope"> <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete1(scope.row)" title="删除"> <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete1(scope.row)" title="删除" > </el-button> </template> </el-table-column> </el-table> <h4 style="font-weight: 600;padding-left:20px">一共选中{{DataList.length}}项,合计:{{ form.xianprice }}元</h4> <h4 style="font-weight: 600; padding-left: 20px"> 一共选中{{ DataList.length }}项,合计:{{ form.xianprice }}元 </h4> </div> </el-col> </el-row> @@ -226,7 +567,11 @@ import Packages from "@/components/Packages"; import { listCategory } from "@/api/mall/category"; import { listKeyword } from "@/api/mall/keyword"; import { getProParentIdDxList, search, getProSonDxList } from "@/api/system/package"; import { getProParentIdDxList, search, getProSonDxList, } from "@/api/system/package"; import { getPacList, getPacInFo, @@ -243,7 +588,7 @@ saveOreditTjPacNew, } from "@/api/system/package"; import { Message } from "element-ui"; import Big from 'big.js'; import Big from "big.js"; export default { name: "Package", @@ -305,6 +650,7 @@ page: 1, pageSize: 30, nr: "", xb: "", }, form: { xianprice: null, @@ -317,7 +663,9 @@ initializing: true, debounceTimer: null, rules: { pacName: [{ required: true, message: "请输入套餐名称", trigger: "blur" }], pacName: [ { required: true, message: "请输入套餐名称", trigger: "blur" }, ], // pics: [{ required: true, message: "请输入原价", trigger: "change" }], xianprice: [{ required: true, message: "请输入现价", trigger: "blur" }], }, @@ -346,7 +694,9 @@ this.form.xianprice = this.DataList.reduce((sum, item) => { return sum.plus(new Big(item.priceNow || 0)); }, new Big(0)).toNumber(); this.youhui = this.pics ? (Math.floor((this.form.xianprice / this.pics) * 100) / 100) * 10 : 10; this.youhui = this.pics ? (Math.floor((this.form.xianprice / this.pics) * 100) / 100) * 10 : 10; }, calculateDiscount(row) { if (row.limits > 10) { @@ -361,7 +711,12 @@ }, filterNode(value, data) { if (!value) return true; return data.proName.indexOf(value) !== -1 || (data.proEngName && data.proEngName.indexOf(value) !== -1); console.log(value, 6666); return ( data.proName.indexOf(value) !== -1 || (data.proEngName && data.proEngName.indexOf(value) !== -1) ); }, getList() { this.loading = true; @@ -369,72 +724,89 @@ this.allList = response.data || []; this.loading = false; }); getPacList(this.queryParams).then((response) => { response.rows.forEach((item, index) => { item.newID = (this.queryParams.pageNum - 1) * this.queryParams.pageSize + index + 1; getPacList(this.queryParams) .then((response) => { response.rows.forEach((item, index) => { item.newID = (this.queryParams.pageNum - 1) * this.queryParams.pageSize + index + 1; }); this.total = response.total || 0; this.packageList = response.rows || []; this.loading = false; }) .catch(() => { this.loading = false; this.$message.error("获取套餐列表失败"); }); this.total = response.total || 0; this.packageList = response.rows || []; this.loading = false; }).catch(() => { this.loading = false; this.$message.error("获取套餐列表失败"); }); }, getKeyword() { this.loading = true; listKeyword(this.queryParams).then((response) => { this.keywordList = response.rows || []; this.loading = false; }).catch(() => { this.loading = false; this.$message.error("获取关键字列表失败"); }); listKeyword(this.queryParams) .then((response) => { this.keywordList = response.rows || []; this.loading = false; }) .catch(() => { this.loading = false; this.$message.error("获取关键字列表失败"); }); }, sel(val) { const maleId = '4'; // “男”的 ID const femaleId = '5'; // “女”的 ID const maleId = "4"; // “男”的 ID const femaleId = "5"; // “女”的 ID let selectedIds = [...val]; // 复制当前选中的 ID 数组 // 实现“男”和“女”互斥逻辑 if (selectedIds.includes(maleId) && selectedIds.includes(femaleId)) { selectedIds = selectedIds.slice(-1); // 保留最后选中的一个 this.$message.warning('“男”和“女”关键字互斥,只能选择一个!'); this.$message.warning("“男”和“女”关键字互斥,只能选择一个!"); } // 更新 form.keywords 和 keys this.form.keywords = selectedIds; this.keys = selectedIds.join(','); this.keys = selectedIds.join(","); // 调用 getDataList,传递所有选中的关键字 ID(逗号分隔) this.getDataList({ xb: this.keys }); // this.getDataList({ xb: this.keys }); this.queryParams1.xb = this.keys; // 👈 更新查询参数 this.queryParams1.page = 1; // 👈 切换条件时重置页码 this.getDataList(); // 不需要再传参了 }, getCategory() { this.loading = true; listCategory(this.queryParams).then((response) => { this.categoryList = response.rows || []; this.loading = false; }).catch(() => { this.loading = false; this.$message.error('获取套餐类目失败'); }); listCategory(this.queryParams) .then((response) => { this.categoryList = response.rows || []; this.loading = false; }) .catch(() => { this.loading = false; this.$message.error("获取套餐类目失败"); }); }, getDataList(params = {}) { this.loading = true; const query = { ...this.queryParams1, ...params }; search(query).then((response) => { this.Treedata = response.data.list || []; this.total1 = response.data.total || 0; this.pics = this.DataList.reduce((total, item) => total + (item.priceOrd || 0), 0); this.$nextTick(() => { this.$refs.tree.setCheckedKeys(this.checkedNodes); this.initializing = false; search(query) .then((response) => { this.Treedata = response.data.list || []; this.total1 = response.data.total || 0; this.pics = this.DataList.reduce( (total, item) => total + (item.priceOrd || 0), 0 ); this.$nextTick(() => { this.$refs.tree.setCheckedKeys(this.checkedNodes); this.initializing = false; }); this.loading = false; }) .catch(() => { this.loading = false; this.$message.error("获取项目列表失败"); }); this.loading = false; }).catch(() => { this.loading = false; this.$message.error('获取项目列表失败'); }); }, shangpin(vals) {}, cancel() { @@ -533,11 +905,12 @@ this.pics = response.data.price || 0; this.form.xianprice = response.data.newPrice || 0; this.lastXianPrice = this.form.xianprice; this.form.keywords = response.data.keywords && response.data.keywords.length > 0 ? response.data.keywords.slice(0, -1).split(",") : []; this.form.keywords = response.data.keywords && response.data.keywords.length > 0 ? response.data.keywords.slice(0, -1).split(",") : []; this.DataList = response.data.packageProjects || []; this.checkedkey = this.DataList.map(item => item.proId || ''); this.checkedkey = this.DataList.map((item) => item.proId || ""); this.checkedListkey = [...this.checkedkey]; this.checkedNodes = [...this.checkedkey]; this.getDataList(); @@ -548,32 +921,36 @@ this.title = "体检套餐信息维护"; this.open = true; this.loading = true; getPacInFo(row.pacId).then((response) => { const data = response.data || {}; Object.keys(data).forEach((key) => { this.$set(this.form, key, data[key]); getPacInFo(row.pacId) .then((response) => { const data = response.data || {}; Object.keys(data).forEach((key) => { this.$set(this.form, key, data[key]); }); this.youhui = data.limits || 10; this.pics = data.price || 0; this.form.xianprice = data.newPrice || 0; this.lastXianPrice = this.form.xianprice; this.form.keywords = data.keywords && data.keywords.length > 0 ? data.keywords.slice(0, -1).split(",") : []; this.DataList = data.packageProjects || []; this.checkedkey = this.DataList.map((item) => item.proId || ""); this.checkedListkey = [...this.checkedkey]; this.checkedNodes = [...this.checkedkey]; return this.getDataList(); }) .then(() => { this.loading = false; this.$nextTick(() => { this.$refs.form.validate(); }); }) .catch((error) => { this.loading = false; this.$message.error("加载数据失败"); }); this.youhui = data.limits || 10; this.pics = data.price || 0; this.form.xianprice = data.newPrice || 0; this.lastXianPrice = this.form.xianprice; this.form.keywords = data.keywords && data.keywords.length > 0 ? data.keywords.slice(0, -1).split(",") : []; this.DataList = data.packageProjects || []; this.checkedkey = this.DataList.map(item => item.proId || ''); this.checkedListkey = [...this.checkedkey]; this.checkedNodes = [...this.checkedkey]; return this.getDataList(); }).then(() => { this.loading = false; this.$nextTick(() => { this.$refs.form.validate(); }); }).catch((error) => { this.loading = false; this.$message.error("加载数据失败"); }); }, addmembers() { if (this.form.pacName) { @@ -595,7 +972,9 @@ }, Delete(index) { if (this.form.tjProjectList.length === 0) { this.$modal.alert("请先选择要删除的数据", "提示", { confirmButtonText: "确定" }); this.$modal.alert("请先选择要删除的数据", "提示", { confirmButtonText: "确定", }); } else { this.form.tjProjectList.splice(index, 1); } @@ -629,7 +1008,10 @@ }); for (let i = 0; i < this.form.tjProjectList.length; i++) { for (let j = i + 1; j < this.form.tjProjectList.length; j++) { if (this.form.tjProjectList[i].proId === this.form.tjProjectList[j].proId) { if ( this.form.tjProjectList[i].proId === this.form.tjProjectList[j].proId ) { this.form.tjProjectList.splice(j, 1); j--; this.$modal.msgError("此项目已录入,不可重复录入"); @@ -668,6 +1050,8 @@ handleFilterInput() { this.queryParams1.page = 1; this.getDataList(); // this.getDataList({ xb: this.keys }); this.$nextTick(() => { this.$refs.tree.setCheckedKeys(this.checkedNodes); }); @@ -691,7 +1075,9 @@ } this.updateTotalPrice(); } else { this.DataList = this.DataList.filter((item) => item.proId !== data.proId); this.DataList = this.DataList.filter( (item) => item.proId !== data.proId ); const index = this.checkedNodes.indexOf(data.proId); if (index > -1) { this.checkedNodes.splice(index, 1); @@ -703,11 +1089,15 @@ this.form.xianprice = this.DataList.reduce((sum, item) => { return sum.plus(new Big(item.priceNow || 0)); }, new Big(0)).toNumber(); this.pics = this.DataList.reduce((total, item) => total + (item.priceOrd || 0), 0); this.pics = this.DataList.reduce( (total, item) => total + (item.priceOrd || 0), 0 ); }, changeXianjia() { if (this.form.xianprice !== 0 && this.pics) { this.youhui = (Math.floor((this.form.xianprice / this.pics) * 100) / 100) * 10; this.youhui = (Math.floor((this.form.xianprice / this.pics) * 100) / 100) * 10; } }, spliceData() { @@ -723,19 +1113,32 @@ }, handleCurrentChecked1(data, checked, checkedNodes) { if (!checked) { this.DataList = this.DataList.filter((item) => item.proId !== data.proId); this.TotalPrice1 = this.DataList.reduce((sum, item) => sum + (item.priceOrd || 0), 0); this.DataList = this.DataList.filter( (item) => item.proId !== data.proId ); this.TotalPrice1 = this.DataList.reduce( (sum, item) => sum + (item.priceOrd || 0), 0 ); this.pics = this.TotalPrice1; } else { this.DataList.push(data); this.pics = this.DataList.reduce((sum, item) => sum + (item.priceOrd || 0), 0); this.pics = this.DataList.reduce( (sum, item) => sum + (item.priceOrd || 0), 0 ); this.spliceData(); this.TotalPrice1 = this.pics; } }, handleDeletes(row) { this.DataList = this.DataList.filter((item) => item.proParentId !== row.proParentId); this.TotalPrice1 = this.DataList.reduce((sum, item) => sum + (item.priceOrd || 0), 0); this.DataList = this.DataList.filter( (item) => item.proParentId !== row.proParentId ); this.TotalPrice1 = this.DataList.reduce( (sum, item) => sum + (item.priceOrd || 0), 0 ); }, submitForm() { this.$refs.form.validate((valid) => { @@ -748,7 +1151,9 @@ type: "warning", }) .then(() => { this.youhui = (Math.floor((this.form.xianprice / this.pics) * 100) / 100) * 10; this.youhui = (Math.floor((this.form.xianprice / this.pics) * 100) / 100) * 10; let totalYsprice = new Big(0); this.DataList.forEach((item) => { item.limits = this.youhui; @@ -762,8 +1167,14 @@ const diff = new Big(this.form.xianprice).minus(totalYsprice); if (this.DataList.length > 0) { const lastItem = this.DataList[this.DataList.length - 1]; const newYsPrice = new Big(lastItem.priceNow).plus(diff).toNumber(); this.$set(this.DataList[this.DataList.length - 1], "priceNow", newYsPrice); const newYsPrice = new Big(lastItem.priceNow) .plus(diff) .toNumber(); this.$set( this.DataList[this.DataList.length - 1], "priceNow", newYsPrice ); } } return this.saveData(); @@ -809,13 +1220,15 @@ pacRemark: this.form.pacRemark, detail: this.form.detail, }; return saveOreditTjPacNew(data).then((res) => { this.$modal.msgSuccess("保存成功"); this.open = false; this.getList(); }).catch(() => { this.$message.error("保存失败"); }); return saveOreditTjPacNew(data) .then((res) => { this.$modal.msgSuccess("保存成功"); this.open = false; this.getList(); }) .catch(() => { this.$message.error("保存失败"); }); }, handleDelete(row) { const pacIds = row.pacId || this.ids; src/views/system/tijian/index.vue
@@ -554,7 +554,7 @@ v-model="activeNames" @tab-click="handleClick" > <el-tab-pane label="套餐" name="first"> <el-tab-pane label="套餐" name="first" :disabled ="form.sftj == 'Y'|| form.sftj == 'y'"> <el-form :model="queryParam" ref="queryForm" @@ -625,7 +625,7 @@ </div> </div> </el-tab-pane> <el-tab-pane label="组合" name="third"> <el-tab-pane label="组合" name="third" :disabled ="form.sftj == 'Y'|| form.sftj == 'y'"> <el-row :gutter="20" style="width: 100%"> <el-col :span="6" style="min-width: 200px"> <div @@ -737,7 +737,7 @@ </el-col> </el-row> </el-tab-pane> <el-tab-pane label="单项" name="second"> <el-tab-pane label="单项" name="second" :disabled ="form.sftj == 'Y'|| form.sftj == 'y'"> <el-row :gutter="20" style="width: 100%"> <el-col :span="6" style="min-width: 200px"> <div @@ -851,6 +851,31 @@ </el-col> </el-row> </el-tab-pane> <el-tab-pane label="亲属套餐" name="four" :disabled ="form.sftj == 'N'|| form.sftj == 'n'"> <el-form :model="queryParam" ref="queryForm" size="small" :inline="true" v-if="showSearch" label-width="auto" @submit.native.prevent="handle"> <el-form-item label="姓名" prop="pacName"> <el-input v-model="queryParam.pacName" placeholder="请输入姓名" clearable @keyup.enter.native="handle" /> </el-form-item> <el-form-item label="身份证" prop="pacName"> <el-input v-model="queryParam.pacName" placeholder="请输入身份证" clearable @keyup.enter.native="handle" /> </el-form-item> <el-form-item> <el-button type="primary" icon="el-icon-search" size="mini" @click="handle">查询</el-button> </el-form-item> </el-form> <div class="tab4"> <div class="grid-content bg-purple" style="margin-left: 5px; width: 98%"> <el-table v-loading="loading" element-loading-text="正在加载中..." element-loading-spinner="el-icon-loading" border :data="newpacName" @selection-change="handleSelectionChange" height="450px" ref="tb"> <el-table-column type="selection" width="40px" align="center" label="选择" /> <el-table-column label="套餐名称" align="center" prop="pacName" width="120px" /> <el-table-column label="套餐价格" align="center" prop="price" width="120px" /> <el-table-column label="套餐明细" align="center" prop="allProName" :show-overflow-tooltip="true" /> </el-table> </div> </div> </el-tab-pane> </el-tabs> <span slot="footer" class="dialog-footer"> <el-button @click="cancel">取 消</el-button> @@ -998,6 +1023,13 @@ @blur="numberChangeXianPrice(discount, discount)" /> </el-form-item> <el-form-item label="是否替检" v-if="tjtype"> <!-- <el-input placeholder="是否替检" v-model="sftj" style="width: 150px"></el-input> --> <el-select v-model="form.sftj" placeholder="是否替检" style="width: 150px"> <el-option v-for="dict in dict.type.sys_yes_no" :key="dict.value" :label="dict.label" :value="dict.value"></el-option> </el-select> </el-form-item> <br /> <el-form-item style="margin-left: 149px"> @@ -1525,6 +1557,7 @@ }, data() { return { tjtype: false, isSubmitting: false, contentLoading: false, isLoading: false, @@ -1545,6 +1578,7 @@ cardreaderradio: 3, lishi: false, table: false, dqdlr:null, HistoryList: {}, index: [], names: "", @@ -1982,6 +2016,7 @@ this.title = "添加体检单位信息维护"; }, idFn1() { this.tjtype = true if (this.form.firmName) { const originalCompId = this.form.firmId; this.CompanyList.forEach((item) => { @@ -2083,6 +2118,7 @@ getList1() { getInfo().then((response) => { this.hospName = response.hospName; this.dqdlr = res.user.userId; }); getIsRequired().then((response) => { this.showHidden = response.data; @@ -2172,7 +2208,7 @@ cusId, pacId: _this.pacId, proIds: _this.proIdList, }; }; getaddtTransition(data).then((response) => { if (response.code === 200) { let cusId = this.form.cusIdcard; @@ -3144,6 +3180,11 @@ }); } else if (!this.form.firmId && this.form.firmName) { this.taocan = true; if(this.form.sftj == "Y" || this.form.sftj == "y"){ this.activeNames = "four" }else{ this.activeNames = "first" } this.loading = true; deptTreeSelect(cusSex).then((response) => { this.newpacName = response.rows; @@ -3167,6 +3208,11 @@ }); } else { this.taocan = true; if(this.form.sftj == "Y" || this.form.sftj == "y"){ this.activeNames = "four" }else{ this.activeNames = "first" } this.loading = true; tuantiSelect(param).then((res) => { this.newpacName = res.data; @@ -4047,7 +4093,8 @@ //调接口显示导检单 const tjNumber = res.msg; const viewNum = "792931586196398080"; const params = { viewNum, tjNumber }; const dqdlr = this.dqdlr const params = { viewNum, tjNumber,dqdlr}; this.$tab.openPage("导诊单", "/report/breDailyReport", params); this.confirm = true; }); vue.config.js
@@ -54,8 +54,12 @@ [process.env.VUE_APP_BASE_API]: { // target: `https://ltpeis.xaltjdkj.cn:5801/`, // target: `http://192.168.1.99:5012`, target: `http://192.168.1.244:5011`, <<<<<<< HEAD ======= target: `http://192.168.1.113:5011`, >>>>>>> c12ce4c405d92c0bf11e876468108d1edb134ff2 // target: `http://192.168.1.244:5011`, target: `http://192.168.1.113:5011`, // // target: `http://192.168.0.99:8080/ltkj-admin`, // target: `https://ltpeis.xaltjdkj.cn:5011/ltkj-admin`, // target: `http://10.168.0.9:5011`,