| | |
| | | contacttime: "", |
| | | reporttime: "" |
| | | }, |
| | | organOrder: [ |
| | | "肝脏", |
| | | "左肾", |
| | | "右肾", |
| | | "心脏", |
| | | "左肺", |
| | | "右肺", |
| | | "胰腺", |
| | | "小肠", |
| | | "左眼角膜", |
| | | "右眼角膜" |
| | | ], // 指定的器官顺序 |
| | | isSorting: false, // 标志位,表示是否正在排序 |
| | | tableKey: 0, |
| | | istb: false, |
| | |
| | | // 监听 procureddata 的变化,数据更新后重新排序 |
| | | procureddata: { |
| | | handler(newVal) { |
| | | if (this.procureddata[0].organgettime) { |
| | | // 判空:取消最后一个器官时数组会变成空,直接取 [0] 会抛 TypeError |
| | | if (this.procureddata[0] && this.procureddata[0].organgettime) { |
| | | this.organgettimetrue = true; |
| | | } |
| | | if (this.isSorting) { |
| | |
| | | listDonateorgan(searchParam).then(res => { |
| | | if (res.code == 200) { |
| | | if (res.rows[0]) { |
| | | this.allocateddata = res.rows; |
| | | // 2026-10-23:按器官排队序号排序后再渲染 |
| | | this.allocateddata = this.sortOrganRows(res.rows); |
| | | console.log("this.allocateddata", this.allocateddata); |
| | | this.allocateddataform.allocateddata = this.allocateddata; |
| | | } |
| | |
| | | }); |
| | | // this.procureddata.infoid = this.infoid; |
| | | } |
| | | // 2026-10-23:按器官排队序号排序后再渲染 |
| | | this.procureddata = this.sortOrganRows(this.procureddata); |
| | | this.organList.organprocured = []; |
| | | for (let i = 0; i < this.procureddata.length; i++) { |
| | | this.organList.organprocured.push(this.procureddata[i].organno); |
| | |
| | | |
| | | this.transplantdata.infoid = this.infoid; |
| | | } |
| | | // 2026-10-23:按器官排队序号排序后再渲染 |
| | | this.transplantdata = this.sortOrganRows(this.transplantdata); |
| | | for (let i = 0; i < this.transplantdata.length; i++) { |
| | | this.organList.organtransplant.push( |
| | | this.transplantdata[i].organno |
| | |
| | | item.transplanthospitalname = objs.organizationname; |
| | | } |
| | | }); |
| | | // 2026-10-23:提交前按器官排队序号排序,保证入库顺序与展示一致 |
| | | this.sortOrganRows(this.allocateddata); |
| | | saveDonateorgan(this.allocateddata).then(res => { |
| | | // 回填主键:后端已按"同一案例同一器官"做 upsert,回填后前端不会再误判为新增 |
| | | if (res && res.data && res.data.length === this.allocateddata.length) { |
| | |
| | | } |
| | | }); |
| | | //保存器官获取表数据 |
| | | // 2026-10-23:提交前按器官排队序号排序 |
| | | this.sortOrganRows(this.procureddata); |
| | | saveDonationwitnessorgan(this.procureddata).then(res => { |
| | | if (res && res.data && res.data.length === this.procureddata.length) { |
| | | res.data.forEach((row, i) => { |
| | |
| | | this.Processvalidation(); |
| | | }); |
| | | //保存器官获取表数据 |
| | | // 2026-10-23:提交前按器官排队序号排序 |
| | | this.sortOrganRows(this.procureddata); |
| | | saveDonationwitnessorgan(this.procureddata).then(res => { |
| | | if (res && res.data && res.data.length === this.procureddata.length) { |
| | | res.data.forEach((row, i) => { |
| | |
| | | if (this.accomplishform.id) { |
| | | updateDonatecompletioninfo(this.accomplishform).then(response => { |
| | | this.$modal.msgSuccess("完成登记信息修改成功"); |
| | | // 2026-10-23:提交前按器官排队序号排序 |
| | | this.sortOrganRows(this.transplantdata); |
| | | saveDonatecomporgan(this.transplantdata).then(res => { |
| | | if (res && res.data && res.data.length === this.transplantdata.length) { |
| | | res.data.forEach((row, i) => { |
| | |
| | | this.accomplishform.id = response.data.id; |
| | | } |
| | | this.$modal.msgSuccess("完成登记成功"); |
| | | // 2026-10-23:提交前按器官排队序号排序 |
| | | this.sortOrganRows(this.transplantdata); |
| | | saveDonatecomporgan(this.transplantdata).then(res => { |
| | | if (res && res.data && res.data.length === this.transplantdata.length) { |
| | | res.data.forEach((row, i) => { |
| | |
| | | } |
| | | }, |
| | | |
| | | customOrganSort() { |
| | | console.log("调用"); |
| | | /** |
| | | * 取器官的排队序号:字典 sys_Organ 的 dict_sort 原值 |
| | | * 字典里没有该器官时返回 null(排序时排最后) |
| | | */ |
| | | getOrganSort(organno) { |
| | | const list = |
| | | (this.dict && this.dict.type && this.dict.type.sys_Organ) || []; |
| | | const item = list.find(d => d.value === organno); |
| | | if (item && item.raw) { |
| | | const s = item.raw.dictSort; |
| | | if (s !== null && s !== undefined && s !== "") { |
| | | return Number(s); |
| | | } |
| | | } |
| | | return null; |
| | | }, |
| | | |
| | | /** |
| | | * 按器官排队序号升序排序(原地) |
| | | * sort 为空/0 视为未知,排最后;相同序号按 id 兜底,保证顺序稳定 |
| | | */ |
| | | sortOrganRows(rows) { |
| | | if (!rows || !rows.length) { |
| | | return rows; |
| | | } |
| | | const weight = r => { |
| | | const s = Number(r.sort); |
| | | if (r.sort === null || r.sort === undefined || isNaN(s) || s === 0) { |
| | | return 999999; |
| | | } |
| | | return s; |
| | | }; |
| | | rows.sort((a, b) => weight(a) - weight(b) || (a.id || 0) - (b.id || 0)); |
| | | return rows; |
| | | }, |
| | | |
| | | customOrganSort() { |
| | | // 1. 加锁,阻止监听器执行 |
| | | this.isSorting = true; |
| | | this.loading = true; |
| | | // 自定义排序函数 |
| | | this.procureddata.sort((a, b) => { |
| | | const indexA = this.organOrder.indexOf(a.organname); |
| | | const indexB = this.organOrder.indexOf(b.organname); |
| | | |
| | | // 如果两个都在列表中,按列表中的顺序排序 |
| | | if (indexA !== -1 && indexB !== -1) { |
| | | return indexA - indexB; |
| | | } |
| | | // 如果 a 在列表中,b 不在,a 排前面 |
| | | if (indexA !== -1) { |
| | | return -1; |
| | | } |
| | | // 如果 b 在列表中,a 不在,b 排前面 |
| | | if (indexB !== -1) { |
| | | return 1; |
| | | } |
| | | // 两个都不在列表中,保持原顺序(或按其他规则,比如按字母排序,这里按原始顺序) |
| | | return 0; |
| | | }); |
| | | console.log(this.procureddata, "顺序"); |
| | | this.sortOrganRows(this.procureddata); |
| | | this.tableKey += 1; // 改变 key 迫使表格重新渲染 |
| | | // 你可以使用 this.$forceUpdate() 或者重新赋值数组来触发更新 |
| | | this.procureddata = [...this.procureddata]; |
| | | this.$nextTick(() => { |
| | | this.isSorting = false; |
| | |
| | | }); |
| | | }, |
| | | allocateddataSort() { |
| | | console.log("调用"); |
| | | |
| | | // 1. 加锁,阻止监听器执行 |
| | | this.isSorting = true; |
| | | // 自定义排序函数 |
| | | this.allocateddata.sort((a, b) => { |
| | | const indexA = this.organOrder.indexOf(a.organname); |
| | | const indexB = this.organOrder.indexOf(b.organname); |
| | | |
| | | // 如果两个都在列表中,按列表中的顺序排序 |
| | | if (indexA !== -1 && indexB !== -1) { |
| | | return indexA - indexB; |
| | | } |
| | | // 如果 a 在列表中,b 不在,a 排前面 |
| | | if (indexA !== -1) { |
| | | return -1; |
| | | } |
| | | // 如果 b 在列表中,a 不在,b 排前面 |
| | | if (indexB !== -1) { |
| | | return 1; |
| | | } |
| | | // 两个都不在列表中,保持原顺序(或按其他规则,比如按字母排序,这里按原始顺序) |
| | | return 0; |
| | | }); |
| | | console.log(this.allocateddata, "顺序"); |
| | | this.sortOrganRows(this.allocateddata); |
| | | this.tableKey += 1; // 改变 key 迫使表格重新渲染 |
| | | // 你可以使用 this.$forceUpdate() 或者重新赋值数组来触发更新 |
| | | this.allocateddata = [...this.allocateddata]; |
| | | this.$nextTick(() => { |
| | | this.isSorting = false; |
| | |
| | | this.allocateddata.push({ |
| | | organname: temporganname, |
| | | organno: value, |
| | | // 2026-10-23:写入器官排队序号(字典 dict_sort) |
| | | sort: this.getOrganSort(value), |
| | | id: null, |
| | | infoid: this.infoid, |
| | | donorno: this.form.donorno, |
| | |
| | | this.procureddata.push({ |
| | | organname: temporganname, |
| | | organno: value, |
| | | // 2026-10-23:写入器官排队序号(字典 dict_sort) |
| | | sort: this.getOrganSort(value), |
| | | id: null, |
| | | infoid: this.infoid, |
| | | donorno: this.form.donorno, |
| | |
| | | this.transplantdata.push({ |
| | | organname: temporganname, |
| | | organno: value, |
| | | // 2026-10-23:写入器官排队序号(字典 dict_sort) |
| | | sort: this.getOrganSort(value), |
| | | id: null, |
| | | infoid: this.infoid, |
| | | donorno: this.form.donorno, |
| | | organstate: 1, |
| | | transplantstate: 1 |
| | | }); |
| | | // 2026-10-23:完成登记原先没有 watch,新增器官会停在表格最后; |
| | | // 这里立即按排队序号归位(原地排序后必须重新赋值,否则表格不重渲染) |
| | | this.transplantdata = this.sortOrganRows([...this.transplantdata]); |
| | | } |
| | | } else { |
| | | this.$modal.msgWarning("该器官已经选择,请勿重复选择!"); |