| | |
| | | @click="handleQuery" |
| | | >查询</el-button |
| | | > |
| | | <el-button |
| | | <!-- <el-button |
| | | type="primary" |
| | | icon="el-icon-thumb" |
| | | size="mini" style="margin:0 15px;" |
| | | @click="Confirmreceipt" |
| | | >确认采样</el-button |
| | | > |
| | | > --> |
| | | <el-button icon="el-icon-refresh" size="mini" @click="resetQuery" |
| | | >重置</el-button |
| | | > |
| | |
| | | <el-radio-button label="0">已采样</el-radio-button> |
| | | </el-radio-group> |
| | | </el-col> |
| | | <el-col :span="12" v-if="tableList.length > 1 && tjStatus == 0"> |
| | | <el-button type="primary" plain v-hasPermi="['hosp:detail:add']" |
| | | >合并样本</el-button |
| | | <el-col |
| | | :span="12" |
| | | style="margin: 10px 15px" |
| | | v-if="samplingList.length > 0 && tjStatus == 1" |
| | | > |
| | | <el-button type="primary" @click="Merging">合并项目</el-button> |
| | | <el-button |
| | | type="primary" |
| | | icon="el-icon-thumb" |
| | | style="margin: 0 15px" |
| | | v-hasPermi="['hosp:detail:add']" |
| | | @click="Confirmreceipt" |
| | | >确认采样</el-button |
| | | > |
| | | <el-button type="primary" :disabled="!disabled" @click="Cancellation" |
| | | >撤销合并</el-button |
| | | > |
| | | <el-button |
| | | type="primary" |
| | | :disabled="!selectList.length" |
| | | @click="Collection" |
| | | >采样打码</el-button |
| | | > |
| | | </el-col> |
| | | <el-col |
| | | :span="12" |
| | | style="margin: 10px 15px" |
| | | v-show="samplingList.length > 0 && tjStatus == 0" |
| | | > |
| | | <el-button |
| | | type="primary" |
| | | :disabled="!selectList.length" |
| | | @click="Collection" |
| | | >补打条码</el-button |
| | | > |
| | | <el-button type="primary" :disabled="!disabled" @click="Cancellation" |
| | | >撤销合并</el-button |
| | | > |
| | | </el-col> |
| | | </el-row> |
| | |
| | | <div style="width: 40%; margin-right: 20px"> |
| | | <el-table |
| | | id="ta" |
| | | v-loading="loading" |
| | | v-loading="loading1" |
| | | ref="tb" |
| | | :data="samplingList" |
| | | @selection-change="handleSelectionChange" |
| | |
| | | <el-table-column |
| | | label="体检号" |
| | | align="center" |
| | | prop="customer.tjNumber" |
| | | prop="tjNumber" |
| | | width="160px" |
| | | /> |
| | | <el-table-column |
| | | label="姓名" |
| | | align="center" |
| | | prop="customer.cusName" |
| | | prop="cusName" |
| | | width="80px" |
| | | /> |
| | | <el-table-column |
| | | label="性别" |
| | | align="center" |
| | | prop="customer.cusSex" |
| | | prop="cusSex" |
| | | width="60px" |
| | | > |
| | | <!-- <template slot-scope="scope"> |
| | |
| | | <el-table-column |
| | | label="手机号" |
| | | align="center" |
| | | prop="customer.cusPhone" |
| | | prop="cusPhone" |
| | | width="120px" |
| | | /> |
| | | <el-table-column |
| | | label="申请时间" |
| | | align="center" |
| | | prop="customer.applicationTime" |
| | | prop="applicationTime" |
| | | width="210" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <span>{{ parseTime(scope.row.customer.applicationTime) }}</span> |
| | | <span>{{ parseTime(scope.row.applicationTime) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | |
| | | prop="specimenType" |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <dict-tag |
| | | :options="dict.type.sys_dict_specimen" |
| | | :value="scope.row.specimenType" |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="项目名称" align="center" prop="proName" /> |
| | | <el-table-column |
| | | label="采样编号" |
| | | align="center" |
| | | prop="jyxh" |
| | | :show-overflow-tooltip="true" |
| | | width="120" |
| | | /> |
| | | <el-table-column label="项目名称" align="center" prop="proName" /> |
| | | <!-- <el-table-column |
| | | label="性别" |
| | | align="center" |
| | | prop="proSex" |
| | | width="90" |
| | | /> |
| | | /> --> |
| | | <el-table-column |
| | | label="空腹" |
| | | label="是否合并" |
| | | align="center" |
| | | prop="proCheckMethod" |
| | | prop="isMerge" |
| | | width="90" |
| | | /> |
| | | <el-table-column |
| | | label="采样编号" |
| | | align="center" |
| | | prop="samplingNumber" |
| | | :show-overflow-tooltip="true" |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | > |
| | | <template slot-scope="scope"> |
| | | <span |
| | | :style="{ color: scope.row.isMerge === 0 ? '' : '#409EFF' }" |
| | | > |
| | | {{ scope.row.isMerge === 0 ? "未合并" : "已合并" }} |
| | | </span> |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <!-- <el-table-column |
| | | label="采样状态" |
| | | align="center" |
| | | prop="isSignFor" |
| | |
| | | :value="scope.row.isSignFor" |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table-column> --> |
| | | <!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> |
| | | <template slot-scope="scope"> |
| | | <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" |
| | |
| | | </template> |
| | | </el-table-column> --> |
| | | </el-table> |
| | | </div> |
| | | |
| | | <div id="printSection" style="display: none"> |
| | | <!-- 动态生成多个条形码的容器 --> |
| | | <div v-for="(item, index) in selectList" :key="index"> |
| | | <svg :id="'barcode' + index"></svg> |
| | | <div class="name">{{ item.proName }}</div> |
| | | <div class="last"> |
| | | <p>{{ item.cusName }}</p> |
| | | <div> |
| | | <span>{{ item.customer.cusSex == 0 ? "男" : "女" }}</span> |
| | | <span>{{ item.customer.age }}</span> |
| | | </div> |
| | | </div> |
| | | <div class="tj"> |
| | | <span>体检中心</span> |
| | | <span>{{ item.cardId.substring(0, 14) }}</span> |
| | | </div> |
| | | <div class="tj"> |
| | | <span>{{ item.jyxh }}</span> |
| | | <span>{{ formatDate(item.applicationTime) }}</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <!-- |
| | |
| | | addSampling, |
| | | updateSampling, |
| | | confirmSampling, |
| | | getCusCyList, |
| | | mergeCaiYang, |
| | | chexiaoCaiYang, |
| | | } from "@/api/sampling/sampling"; |
| | | import { getNewDateList } from "@/api/hosp/order"; |
| | | import moment from "moment"; |
| | | import ItemVue from "../../../layout/components/Sidebar/Item.vue"; |
| | | |
| | | export default { |
| | | dicts: [ |
| | |
| | | data() { |
| | | return { |
| | | list: [], |
| | | selectList: "", |
| | | selectList: [], |
| | | selectedRows: [], |
| | | createTimeList: [], |
| | | // 遮罩层 |
| | | loading: true, |
| | | loading1: true, |
| | | // 选中数组 |
| | | ids: [], |
| | | // 绑定单选按钮 |
| | |
| | | this.$refs.inputName.focus(); |
| | | }); |
| | | }, |
| | | computed: { |
| | | disabled() { |
| | | return ( |
| | | this.selectList.length > 0 && |
| | | this.selectList[this.selectList.length - 1].isMerge === 1 |
| | | ); |
| | | }, |
| | | }, |
| | | methods: { |
| | | getdate() { |
| | | getNewDateList().then((res) => { |
| | |
| | | dateChangebirthday1(val) { |
| | | this.createTimeList = val; |
| | | }, |
| | | formatDate(applicationTime) { |
| | | // 确保 applicationTime 是有效的字符串 |
| | | if (applicationTime) { |
| | | return applicationTime.split(" ")[0]; // 通过空格分隔日期和时间,只返回日期部分 |
| | | } |
| | | return ""; // 如果 applicationTime 无效,返回空字符串 |
| | | }, |
| | | /** 查询体检采样管理列表 */ |
| | | getList() { |
| | | this.loading = true; |
| | | this.loading1 = true; |
| | | this.queryParams.isSignFor = this.tjStatus; |
| | | |
| | | if(this.createTimeList){ |
| | | this.queryParams.beginTime = this.createTimeList[0]; |
| | | this.queryParams.endTime = this.createTimeList[1]; |
| | |
| | | this.queryParams.beginTime = null; |
| | | this.queryParams.endTime = null; |
| | | } |
| | | |
| | | getList(this.queryParams).then((response) => { |
| | | this.loading1 = false; |
| | | if (response.data) { |
| | | if (!response.data.list || response.data.list.length === 0) { |
| | | this.samplingList = []; |
| | | this.tableList = []; |
| | | this.loading1 = false; |
| | | this.loading = false; |
| | | return; |
| | | } else { |
| | | this.samplingList = response.data.list; |
| | | console.log(this.samplingList, 888); |
| | | // 判断是否需要刷新右边表格 |
| | | this.$nextTick(() => { |
| | | this.$refs.tb.toggleRowSelection(this.samplingList[0], true); |
| | | this.fetchData(this.samplingList[0].cusId); |
| | | }); |
| | | } |
| | | this.total = response.data.total; |
| | | this.loading1 = false; |
| | | } else { |
| | | this.samplingList = []; |
| | | this.tableList = []; |
| | | this.loading1 = false; |
| | | } |
| | | }); |
| | | |
| | | /* getList(this.queryParams).then((response) => { |
| | | if (response.data) { |
| | | if (response.data.list == null) { |
| | | this.samplingList = []; |
| | |
| | | this.loading = false; |
| | | } else { |
| | | this.samplingList = response.data.list; |
| | | console.log(this.samplingList,888); |
| | | |
| | | this.loading = false; |
| | | if (this.samplingList.length != 0) { |
| | | this.$nextTick(() => { |
| | |
| | | this.tableList = []; |
| | | this.loading = false; |
| | | } |
| | | }); |
| | | }); */ |
| | | }, |
| | | |
| | | // 取消按钮 |
| | | cancel() { |
| | | this.open = false; |
| | |
| | | }, |
| | | /** 重置按钮操作 */ |
| | | resetQuery() { |
| | | this.createTimeList=[] |
| | | this.createTimeList = []; |
| | | this.resetForm("queryForm"); |
| | | this.handleQuery(); |
| | | }, |
| | | // 单选框选中数据 |
| | | handleSelectionChange(selection) { |
| | | /* handleSelectionChange(selection) { |
| | | this.selectList = selection; |
| | | selection.forEach((element) => { |
| | | this.tableList = element.list; |
| | | console.log(this.tableList, 111); |
| | | |
| | | if (this.tableList.length != 0) { |
| | | this.$nextTick(() => { |
| | | this.$refs.tab1.toggleAllSelection(this.tableList, true); |
| | |
| | | } |
| | | this.single = selection.length !== 1; |
| | | this.multiple = !selection.length; |
| | | }, */ |
| | | |
| | | handleSelectionChange(selection) { |
| | | // 清空右侧表格的数据 |
| | | this.tableList = []; |
| | | |
| | | // 只有一个人被选中时进行操作 |
| | | if (selection.length === 1) { |
| | | const selectedPerson = selection[0]; // 获取选中的那个人 |
| | | const cusId = selectedPerson.cusId; // 假设cusId在选中的对象中 |
| | | |
| | | this.fetchData(cusId); |
| | | } else { |
| | | // 如果选中多人,则取消选中 |
| | | if (selection.length > 1) { |
| | | let del_row = selection.shift(); |
| | | this.$refs.tb.toggleRowSelection(del_row, false); // 设置这一行取消选中 |
| | | } |
| | | } |
| | | |
| | | // 更新选择状态 |
| | | this.single = selection.length === 1; |
| | | this.multiple = selection.length === 0; |
| | | |
| | | this.selectedRows = selection; |
| | | }, |
| | | |
| | | fetchData(cusId) { |
| | | this.loading = true; // 显示加载状态 |
| | | |
| | | console.log(this.tjStatus, 999); |
| | | |
| | | getCusCyList(cusId, this.tjStatus) // 调用API获取数据 |
| | | .then((response) => { |
| | | if (response.data) { |
| | | this.tableList = response.data; // 确认 list 存在后再进行赋值 |
| | | console.log(this.tableList, 123); |
| | | } else { |
| | | // 如果没有数据或 list 为空,清空表格并提示 |
| | | this.tableList = []; |
| | | } |
| | | }) |
| | | .catch((error) => { |
| | | console.error("Error fetching data:", error); |
| | | }) |
| | | .finally(() => { |
| | | this.loading = false; // 隐藏加载状态 |
| | | }); |
| | | }, |
| | | |
| | | /* 点击合并按钮 */ |
| | | /* Merging() { |
| | | // 检查是否选中了数据 |
| | | if (this.selectedRows.length === 0) { |
| | | this.$message.error("至少选中一个人"); |
| | | return; |
| | | } |
| | | |
| | | if (this.selectList.length === 0) { |
| | | this.$message.error("请选择要合并项目"); |
| | | return; |
| | | } |
| | | |
| | | // 获取 tableList 第一行的 specimenTypeCode 作为基准 |
| | | const baseSpecimenTypeCode = this.selectList[0].specimenTypeCode; |
| | | |
| | | // 检查 specimenTypeCode 是否一致 |
| | | const canMergeBySpecimenTypeCode = this.selectList.every( |
| | | (row) => row.specimenTypeCode === baseSpecimenTypeCode |
| | | ); |
| | | |
| | | // 根据 canMergeBySpecimenTypeCode 判断是否合并 |
| | | if (canMergeBySpecimenTypeCode) { |
| | | this.$message.success("合并成功。"); |
| | | console.log("合并的行:", this.selectedRows); |
| | | } else { |
| | | this.$message.error("项目的 不一致,无法合并!"); |
| | | } |
| | | }, */ |
| | | /* 点击合并按钮 */ |
| | | Merging() { |
| | | // 检查是否选中了数据 |
| | | if (this.selectedRows.length === 0) { |
| | | this.$message.error("至少选中一个人"); |
| | | return; |
| | | } |
| | | if (this.selectList.length === 0) { |
| | | this.$message.error("请选择要合并项目"); |
| | | return; |
| | | } |
| | | if (this.selectList.every((item) => item.isMerge === 0)) { |
| | | const baseSpecimenTypeCode = this.selectList[0].specimenTypeCode; |
| | | |
| | | // 检查 specimenTypeCode 是否一致 |
| | | const canMergeBySpecimenTypeCode = this.selectList.every( |
| | | (row) => row.specimenTypeCode === baseSpecimenTypeCode |
| | | ); |
| | | |
| | | // 根据 canMergeBySpecimenTypeCode 判断是否合并 |
| | | if (canMergeBySpecimenTypeCode) { |
| | | let data = this.ids; |
| | | |
| | | mergeCaiYang(data).then((response) => { |
| | | this.$message.success("合并成功。"); |
| | | console.log("合并的行:", this.selectedRows); |
| | | // this.getList(); |
| | | this.fetchData(this.selectedRows[0].cusId); |
| | | }); |
| | | } else { |
| | | this.$message.error("标本类型不一致,无法合并!"); |
| | | } |
| | | } else { |
| | | this.$message.error("该项目已合并"); |
| | | } |
| | | }, |
| | | |
| | | /** 点击撤销按钮 **/ |
| | | Cancellation() { |
| | | let data = this.ids; |
| | | console.log("撤销"); |
| | | if (data.length === 0) { |
| | | // 如果没有已合并的项目,给出提示信息 |
| | | this.$message.error("没有已合并的项目可以撤销!"); |
| | | return; |
| | | } |
| | | |
| | | console.log("撤销的已合并项目ID:", data); |
| | | |
| | | // 调用撤销采样的接口 |
| | | chexiaoCaiYang(data) |
| | | .then((res) => { |
| | | if (res && res.code === 200) { |
| | | this.$message.success("撤销成功!"); |
| | | // 刷新数据列表或进行其他操作 |
| | | // this.getList(); |
| | | this.fetchData(this.selectedRows[0].cusId); |
| | | } else { |
| | | this.$message.error(res.msg || "撤销失败,请重试!"); |
| | | } |
| | | }) |
| | | .catch((error) => { |
| | | this.$message.error("请求失败,请重试!"); |
| | | }); |
| | | |
| | | // chexiaoCaiYang(data).then((res) => {}); |
| | | }, |
| | | |
| | | /** 点击补打条码按钮 **/ |
| | | Collection() { |
| | | const jyxh = this.selectList.map((item) => item.jyxh); |
| | | // const selectedData = this.selectList.map((item) => ({ |
| | | // jyxh: item.jyxh, |
| | | // })); |
| | | console.log(this.selectList, 999); |
| | | // console.log(selectedData, 888); |
| | | |
| | | this.$nextTick(() => { |
| | | jyxh.forEach((number, index) => { |
| | | const barcodeContent = number; // 确保 jyxh 是有效的 |
| | | if (barcodeContent && barcodeContent !== "未提供体检号") { |
| | | JsBarcode(`#barcode${index}`, barcodeContent, { |
| | | format: "CODE128", |
| | | width: 2, |
| | | height: 50, |
| | | displayValue: false, |
| | | }); |
| | | } else { |
| | | console.log(`条形码内容无效: ${barcodeContent}`); // 调试输出 |
| | | } |
| | | }); |
| | | }); |
| | | |
| | | this.$nextTick(() => { |
| | | const barcodeElement = document.querySelector("#barcode"); |
| | | // const barcodeElements = selectedData.map((_, index) => |
| | | // document.querySelector(`#barcode${index}`) |
| | | // ); |
| | | |
| | | if (barcodeElement) { |
| | | barcodeElement.forEach((element) => { |
| | | if (element) { |
| | | console.log(element.innerHTML); // 打印条形码的内容,看看是否生成成功 |
| | | } |
| | | }); |
| | | } else { |
| | | console.log("条形码元素未找到"); |
| | | } |
| | | const newWindow = window.open("", "_blank", "width=800,height=600"); |
| | | const printContents = document.getElementById("printSection").innerHTML; |
| | | |
| | | console.log(printContents); |
| | | newWindow.document.write(` |
| | | <html> |
| | | <head> |
| | | <title>Print Barcode</title> |
| | | <style> |
| | | @media print { |
| | | * { |
| | | margin: 0; |
| | | padding: 0; /* 重置所有元素的 margin 和 padding */ |
| | | box-sizing: border-box; /* 使内边距和边框包含在元素的总宽度和高度内 */ |
| | | } |
| | | body { |
| | | margin: 0; |
| | | padding: 0; |
| | | } |
| | | .barcode-container { |
| | | width: 100%; /* 根据需要调整 */ |
| | | text-align: center; /* 确保条形码居中 */ |
| | | } |
| | | .name { |
| | | padding: 0; |
| | | margin: -5px auto 0; |
| | | padding-left: 20px; |
| | | font-size: 18px; |
| | | width: 90%; |
| | | display: -webkit-box; |
| | | -webkit-box-orient: vertical; |
| | | -webkit-line-clamp: 2; |
| | | overflow: hidden; |
| | | white-space: normal; |
| | | } |
| | | p { |
| | | margin: 0; |
| | | padding: 0; |
| | | } |
| | | svg { |
| | | display: block; |
| | | width: 70%; |
| | | margin: 0 auto; |
| | | height: auto; |
| | | margin-bottom: 0; |
| | | } |
| | | .last { |
| | | width: 66%; |
| | | display: flex; |
| | | font-size: 19px; |
| | | margin-left: 20px; |
| | | justify-content: space-between; |
| | | } |
| | | .last div span{ |
| | | margin-left: 10px |
| | | } |
| | | .tj{ |
| | | width: 70%; |
| | | display: flex; |
| | | font-size: 19px; |
| | | margin-left: 10px; |
| | | justify-content: space-between; |
| | | } |
| | | .tj span{ |
| | | margin-left:10px; |
| | | } |
| | | } |
| | | </style> |
| | | </head> |
| | | <body>${printContents}</body> |
| | | </html> |
| | | `); |
| | | newWindow.document.close(); |
| | | newWindow.focus(); |
| | | newWindow.print(); |
| | | newWindow.close(); |
| | | }); |
| | | }, |
| | | |
| | | tableRowClassName({ row, rowIndex }) { |
| | | for (let i = 0; i < this.selectList.length; i++) { |
| | | if (row === this.selectList[i]) { |
| | |
| | | }, |
| | | |
| | | handleChange(selection) { |
| | | console.log(selection); |
| | | selection.forEach((item, index) => { |
| | | if (item.cusSex == 0) { |
| | | item.cusSex = "男"; |
| | | } else if (item.cusSex == 1) { |
| | | item.cusSex = "女"; |
| | | } |
| | | }); |
| | | this.selectList = selection; |
| | | |
| | | this.ids = selection.map((item) => item.id); |
| | | }, |
| | | |
| | |
| | | // 确认采样 |
| | | Confirmreceipt() { |
| | | let data = this.ids; |
| | | if (data.length === 0) { |
| | | // 如果没有已合并的项目,给出提示信息 |
| | | this.$message.error("没有已合并的项目可以撤销!"); |
| | | return; |
| | | } |
| | | confirmSampling(data).then((res) => { |
| | | this.$modal.msgSuccess("采样成功"); |
| | | this.getList(); |
| | |
| | | } |
| | | |
| | | .el-table .warning-row { |
| | | background: #e5f3ff !important; |
| | | background-color: #e5f3ff !important; |
| | | } |
| | | /* .last { |
| | | display: flex; |
| | | justify-content: space-around; |
| | | justify-content: space-evenly; |
| | | background-color:aqua |
| | | } */ |
| | | /* .last p:nth-child(2) { |
| | | margin: 20px; |
| | | font-size: 16px; |
| | | } */ |
| | | </style> |