You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

611 lines
20 KiB

1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
3 days ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
3 days ago
1 year ago
1 year ago
1 year ago
3 days ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
3 days ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
3 days ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
4 days ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
3 days ago
1 year ago
1 year ago
1 year ago
3 days ago
1 year ago
1 year ago
3 days ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
  1. <template>
  2. <div>
  3. <!--组件主体-->
  4. <div :style="`height: ${tableHeight}px;font-size:14px;z-index:10;background-color: #f4f8ff;`">
  5. <div style="display: flex">
  6. <div>
  7. <div>
  8. <span>分诊房间:</span>
  9. <el-select v-model="LocalConfig.doctorCheck.queueRoom" placeholder="分诊房间" clearable filterable
  10. style="width: 100px" size="small">
  11. <el-option v-for="item in dict.room" :key="item.id" :label="item.displayName" :value="item.id" />
  12. </el-select>
  13. </div>
  14. <div>
  15. <el-cascader :options="dict.itemTypeTree" v-model="LocalConfig.doctorCheck.queueItemTypeIds"
  16. popper-class="example" style="width: 160px" :props="{
  17. checkStrictly: true,
  18. expandTrigger: 'hover',
  19. label: 'displayName',
  20. value: 'id',
  21. id: 'id',
  22. children: 'treeChildren',
  23. multiple: true,
  24. }" clearable filterable size="small" collapse-tags>
  25. </el-cascader>
  26. </div>
  27. </div>
  28. <div style="display: flex;flex-direction: column;justify-content: space-evenly;">
  29. <div>
  30. <el-button type="primary" class="commonbutton" :style="[
  31. { width: '40px' },
  32. { minWidth: '40px' },
  33. { height: '26px' },
  34. {
  35. backgroundColor: isSignIn == 'N' ? 'red' : '',
  36. }
  37. ]" :disabled="isSignIn == 'Y'" @click="btnIsSignIn('0')">签到</el-button>
  38. </div>
  39. <div>
  40. <el-button type="primary" class="commonbutton" style="width: 40px; min-width: 40px; height: 26px"
  41. :disabled="isSignIn == 'N'" @click="btnIsSignIn('1')">签退</el-button>
  42. </div>
  43. </div>
  44. </div>
  45. <!--
  46. <div>
  47. <span>候诊人员</span>
  48. <el-input placeholder="候诊人员" v-model="patientName" size="small" style="width: 125px;" clearable />
  49. </div>
  50. -->
  51. <div style="display: flex">
  52. <el-table :data="waitDetail" style="width: 100%" border highlight-current-row @row-click="rowClickWait"
  53. :row-style="{ height: '28px' }" :height="Math.floor((tableHeight - 72) / 3)">
  54. <el-table-column prop="queueRegisterNumber" label="号" min-width="30" align="center" />
  55. <el-table-column prop="patientName" label="姓名" min-width="80" align="center" />
  56. <el-table-column prop="isVip" label="Vip" min-width="40" align="center">
  57. <template slot-scope="scope">
  58. <div style="font-family: 'Microsoft YaHei'">
  59. {{ scope.row.isVip == "Y" ? "√" : "" }}
  60. </div>
  61. </template>
  62. </el-table-column>
  63. </el-table>
  64. <div style="margin-top: 20px">
  65. <div>
  66. <el-button type="primary" class="commonbutton" @click="btnCall(waitRow.queueRegisterId, '1')"
  67. style="width: 40px; min-width: 40px; height: 26px">呼叫</el-button>
  68. </div>
  69. <div style="margin: 10px 0">
  70. <el-button type="primary" class="commonbutton" @click="
  71. getQueueRegisterList(
  72. LocalConfig.doctorCheck.queueRoom,
  73. LocalConfig.doctorCheck.queueItemTypeIds
  74. )
  75. " style="width: 40px; min-width: 40px; height: 26px">刷新</el-button>
  76. </div>
  77. <!-- 分诊排队
  78. <div>
  79. <el-button type="primary" class="commonbutton" @click="fnQueue"
  80. style="width: 40px; min-width: 40px; height: 26px">排队</el-button>
  81. </div>
  82. -->
  83. </div>
  84. </div>
  85. <div style="margin-top: 6px">已呼人员</div>
  86. <div style="display: flex">
  87. <el-table :data="alreadyCalledDetail" style="width: 100%" border highlight-current-row
  88. @row-click="rowClickAlready" :row-style="{ height: '28px' }" :height="Math.floor((tableHeight - 72) / 3)">
  89. <el-table-column prop="queueRegisterNumber" label="号" min-width="30" align="center" />
  90. <el-table-column prop="patientName" label="姓名" min-width="80" align="center" />
  91. <el-table-column prop="isVip" label="Vip" min-width="40" align="center">
  92. <template slot-scope="scope">
  93. <div style="font-family: 'Microsoft YaHei'">
  94. {{ scope.row.isVip == "Y" ? "√" : "" }}
  95. </div>
  96. </template>
  97. </el-table-column>
  98. </el-table>
  99. <div style="margin-top: 20px">
  100. <div>
  101. <el-button type="primary" class="commonbutton" @click="btnCall(alreadyRow, '2')"
  102. style="width: 40px; min-width: 40px; height: 26px">过号</el-button>
  103. </div>
  104. </div>
  105. </div>
  106. <div style="margin-top: 6px">过号人员</div>
  107. <div style="display: flex">
  108. <el-table :data="overNumberDetail" style="width: 100%" border highlight-current-row @row-click="rowClickOver"
  109. :row-style="{ height: '28px' }" :height="Math.floor((tableHeight - 72) / 3)">
  110. <el-table-column prop="queueRegisterNumber" label="号" min-width="30" align="center" />
  111. <el-table-column prop="patientName" label="姓名" min-width="80" align="center" />
  112. <el-table-column prop="isVip" label="Vip" min-width="40" align="center">
  113. <template slot-scope="scope">
  114. <div style="font-family: 'Microsoft YaHei'">
  115. {{ scope.row.isVip == "Y" ? "√" : "" }}
  116. </div>
  117. </template>
  118. </el-table-column>
  119. </el-table>
  120. <div style="margin-top: 20px">
  121. <div>
  122. <el-button type="primary" class="commonbutton" @click="btnCall(overRow, '9')"
  123. style="width: 40px; min-width: 40px; height: 26px">重呼</el-button>
  124. </div>
  125. <div style="margin: 10px 0">
  126. <el-button type="primary" class="commonbutton" @click="btnCall(overRow, '0')"
  127. style="width: 40px; min-width: 40px; height: 26px">退回</el-button>
  128. </div>
  129. </div>
  130. </div>
  131. </div>
  132. <!--组件弹窗-->
  133. <div>
  134. <!-- 修改信息 -->
  135. <el-dialog title="分诊排队" :visible.sync="dialogWin.queue" width="800px" :append-to-body="true"
  136. :close-on-click-modal="false">
  137. <Queue :refParams="queueParams" />
  138. </el-dialog>
  139. </div>
  140. </div>
  141. </template>
  142. <script>
  143. import { mapState } from "vuex";
  144. import { getapi, postapi, putapi, deletapi } from "@/api/api";
  145. import {
  146. listOrderBy,
  147. setCheckStatusColor,
  148. deepCopy,
  149. } from "../../utlis/proFunc";
  150. import Queue from "../../components/queue/Queue.vue";
  151. export default {
  152. components: {
  153. Queue,
  154. },
  155. data() {
  156. return {
  157. queueParams: {},
  158. patientName: "",
  159. waitDetail: [],
  160. alreadyCalledDetail: [],
  161. overNumberDetail: [],
  162. waitRow: {},
  163. alreadyRow: {},
  164. overRow: {},
  165. LocalConfig: {
  166. doctorCheck: {
  167. // 医生诊台
  168. isQueue: "N", //启用分诊排队
  169. queueRoom: "", //默认分诊房间
  170. queueItemTypeIds: [], // 检查类别
  171. isBroadcast: "N", // 是否广播
  172. },
  173. },
  174. LocalConfigInit: {},
  175. interval: null, // 定时器句柄
  176. queue_after_call: 'N', // 呼叫后是否自动排队
  177. queue_refresh_interval: 15, // 叫号刷新时间间隔(秒)
  178. queue_play_voice_repeate_times: 2, // 语音重复播放次数
  179. queue_play_voice_repeate_interval: 1, // 语音重复播放时间间隔(秒)
  180. isSignIn: "N", //是否签到
  181. // 避免单击事件与双击事件冲突
  182. clickTime1: 0,
  183. clickTime2: 0,
  184. };
  185. },
  186. created() { },
  187. //挂载完成
  188. mounted() {
  189. this.fnMounted();
  190. },
  191. destroyed() {
  192. console.log("this.interval", JSON.stringify(this.interval));
  193. if (this.interval) clearInterval(this.interval);
  194. console.log("this.interval clearInterval", JSON.stringify(this.interval));
  195. },
  196. computed: {
  197. ...mapState([
  198. "window",
  199. "dialogWin",
  200. "dataTransOpts",
  201. "dict",
  202. "doctorCheck",
  203. ]),
  204. tableHeight() {
  205. return this.window.pageHeight < 600 ? 390 : this.window.pageHeight - 210;
  206. },
  207. },
  208. methods: {
  209. setCheckStatusColor,
  210. tableRowClassName({ row, rowIndex }) {
  211. //console.log('tableRowClassName',rowIndex,row)
  212. if (row.completeFlag === "0") {
  213. return "danger"; //未检
  214. } else if (row.completeFlag === "2") {
  215. return "info"; //弃检
  216. }
  217. return "";
  218. },
  219. async fnMounted() {
  220. this.LocalConfigInit = deepCopy(this.LocalConfig);
  221. let LocalConfig = window.localStorage.getItem("LocalConfig") || null;
  222. try {
  223. this.LocalConfig = Object.assign(
  224. {},
  225. deepCopy(this.LocalConfigInit),
  226. JSON.parse(LocalConfig) || {}
  227. );
  228. } catch (error) {
  229. console.log('window.localStorage.getItem("LocalConfig")', error);
  230. }
  231. if (this.LocalConfig.doctorCheck.isQueue == "Y") {
  232. this.dictInit().then((res) => {
  233. if (!this.LocalConfig.doctorCheck.queueRoom) {
  234. if (res.data.length > 0)
  235. this.LocalConfig.doctorCheck.queueRoom = res.data[0].id;
  236. }
  237. if (this.LocalConfig.doctorCheck.queueRoom)
  238. this.getQueueRegisterListByRoomId(
  239. this.LocalConfig.doctorCheck.queueRoom
  240. );
  241. });
  242. this.setQueueParams();
  243. try {
  244. let sysParam = await postapi(
  245. "/api/app/SysParmValue/GetSysParmValueBySysParmId",
  246. { sysParmId: "queue_refresh_interval" }
  247. );
  248. this.queue_refresh_interval = Number(sysParam.data || 15);
  249. } catch (error) {
  250. console.log(error);
  251. }
  252. // 叫号后是否自动排队
  253. try {
  254. let sysParam = await postapi(
  255. "/api/app/SysParmValue/GetSysParmValueBySysParmId",
  256. { sysParmId: "queue_after_call" }
  257. );
  258. this.queue_after_call = sysParam.data;
  259. } catch (error) {
  260. console.log(error);
  261. }
  262. // 壳端
  263. if (this.$peisAPI) {
  264. postapi("/api/app/SysParmValue/GetSysParmValueBySysParmId", {
  265. sysParmId: "queue_play_voice_repeate_times",
  266. }).then((res) => {
  267. if (res.code > -1)
  268. this.queue_play_voice_repeate_times = Number(res.data || 2);
  269. });
  270. postapi("/api/app/SysParmValue/GetSysParmValueBySysParmId", {
  271. sysParmId: "queue_play_voice_repeate_interval",
  272. }).then((res) => {
  273. if (res.code > -1)
  274. this.queue_play_voice_repeate_interval = Number(res.data || 1);
  275. });
  276. }
  277. // 启动自动刷新
  278. if (!this.interval && this.queue_refresh_interval != 0) {
  279. this.interval = setInterval(() => {
  280. this.getQueueRegisterList(
  281. this.LocalConfig.doctorCheck.queueRoom,
  282. this.LocalConfig.doctorCheck.queueItemTypeIds
  283. );
  284. }, this.queue_refresh_interval * 1000);
  285. }
  286. }
  287. },
  288. btnCall(refRow, completeFlag) {
  289. let prePatientRegisterId = ''
  290. let row = Object.assign({}, refRow);
  291. switch (completeFlag) {
  292. case "0": // 退回
  293. if (!row.queueRegisterId) {
  294. if (this.overNumberDetail.length > 0)
  295. row = this.overNumberDetail[0];
  296. }
  297. if (!row.queueRegisterId)
  298. this.$message.warning({
  299. showClose: true,
  300. message: "未可操作的数据,或未选择过号人员",
  301. });
  302. break;
  303. case "1": // 呼叫
  304. if (!row.queueRegisterId) {
  305. if (this.waitDetail.length > 0) row = this.waitDetail[0];
  306. }
  307. if (!row.queueRegisterId)
  308. this.$message.warning({
  309. showClose: true,
  310. message: "未可操作的数据,或未选择候诊人员",
  311. });
  312. if (this.alreadyCalledDetail.length > 0) prePatientRegisterId = this.alreadyCalledDetail[0].patientRegisterId
  313. break;
  314. case "2": // 过号
  315. if (!row.queueRegisterId) {
  316. if (this.alreadyCalledDetail.length > 0)
  317. row = this.alreadyCalledDetail[0];
  318. }
  319. if (!row.queueRegisterId)
  320. this.$message.warning({
  321. showClose: true,
  322. message: "未可操作的数据,或未选择已呼人员",
  323. });
  324. break;
  325. case "9": // 重呼
  326. if (!row.queueRegisterId) {
  327. if (this.overNumberDetail.length > 0)
  328. queueRegisterId = this.overNumberDetail[0];
  329. }
  330. if (!row.queueRegisterId)
  331. this.$message.warning({
  332. showClose: true,
  333. message: "未可操作的数据,或未选择过号人员",
  334. });
  335. break;
  336. }
  337. // "patientRegisterId": "3a143cf9-0b1b-7765-a90a-b087c4aad1b9",
  338. // "patientRegisterNo": "003485"
  339. // 叫号即调人员信息出来 (石家庄屏蔽,后续考滤用参数控制)
  340. // if (row.patientRegisterNo) {
  341. // this.dataTransOpts.tableS.patient_register.patientRegisterNo =
  342. // row.patientRegisterNo;
  343. // this.dataTransOpts.refresh.patient_register.S++;
  344. // }
  345. if (row.queueRegisterId && completeFlag != "9") {
  346. postapi("/api/app/QueueRegister/UpdateQueueRegisterStatus", {
  347. queueRegisterId: row.queueRegisterId,
  348. completeFlag,
  349. }).then((res) => {
  350. if (res.code > -1) {
  351. this.getQueueRegisterList(
  352. this.LocalConfig.doctorCheck.queueRoom,
  353. this.LocalConfig.doctorCheck.queueItemTypeIds
  354. );
  355. if (this.$peisAPI && completeFlag == "1") this.outShellCall(row);
  356. if (this.queue_after_call == 'Y' && prePatientRegisterId) return postapi('/api/app/QueueRegister/AutomaticQueuingRoom', {
  357. patientRegisterId: prePatientRegisterId
  358. })
  359. }
  360. });
  361. } else if (completeFlag == "9") {
  362. if (this.$peisAPI) this.outShellCall(row);
  363. }
  364. },
  365. // 调用壳呼叫 api
  366. outShellCall(row) {
  367. let roomName = "";
  368. postapi("/api/app/Room/Get", {
  369. roomId: this.LocalConfig.doctorCheck.queueRoom,
  370. })
  371. .then((res) => {
  372. if (res.code > -1) {
  373. roomName = res.data.displayName;
  374. return this.$peisAPI.getIsSpeechEnable();
  375. }
  376. })
  377. .then((res) => {
  378. if (res == "Y") return this.$peisAPI.speechConnect();
  379. })
  380. .then((res) => {
  381. // queue_play_voice_repeate_times: 2, // 语音重复播放次数
  382. // queue_play_voice_repeate_interval: 1, // 语音重复播放时间间隔(秒)
  383. let toOutShell = {
  384. SendText: `${row.patientName}${roomName}检查`,
  385. RepatPlayNum: this.queue_play_voice_repeate_times,
  386. Delay: this.queue_play_voice_repeate_interval,
  387. };
  388. return this.$peisAPI.speechSendText(JSON.stringify(toOutShell));
  389. })
  390. .catch((err) => {
  391. // console.log('呼叫失败', err)
  392. this.$message.error({ showClose: true, message: err });
  393. });
  394. },
  395. dictInit() {
  396. return new Promise((resolve, reject) => {
  397. postapi("/api/app/Room/GetList")
  398. .then((res) => {
  399. if (res.code > -1) {
  400. this.dict.room = res.data;
  401. // this.tableData = res.data.filter(e => {
  402. // return medicalCenterId ? (e.medicalCenterId == medicalCenterId) : e
  403. // });
  404. resolve(res);
  405. } else {
  406. reject(res.message);
  407. }
  408. })
  409. .catch((err) => {
  410. reject(err);
  411. });
  412. });
  413. },
  414. btnIsSignIn(signInFlag) {
  415. postapi("/api/app/RegisterCheck/CreateDoctorSignIn", {
  416. roomId: this.LocalConfig.doctorCheck.queueRoom,
  417. signInFlag: signInFlag
  418. }).then((res) => {
  419. if (res.code != -1) {
  420. if (signInFlag == '0') {
  421. this.isSignIn = 'Y'
  422. } else {
  423. this.isSignIn = 'N'
  424. }
  425. }
  426. })
  427. },
  428. getQueueRegisterList(roomId, itemType) {
  429. return new Promise((resolve, reject) => {
  430. this.waitDetail = [];
  431. this.alreadyCalledDetail = [];
  432. this.overNumberDetail = [];
  433. this.waitRow = {};
  434. this.alreadyRow = {};
  435. this.overRow = {};
  436. let itemTypeIds = [];
  437. itemType.forEach((e) => {
  438. e.forEach((item) => {
  439. itemTypeIds.push(item);
  440. });
  441. });
  442. if (roomId) {
  443. postapi("/api/app/QueueRegister/GetQueueRegisterListByRoomId", {
  444. roomId,
  445. itemTypeIds,
  446. })
  447. .then((res) => {
  448. if (res.code > -1) {
  449. this.waitDetail = res.data.waitDetail;
  450. this.alreadyCalledDetail = res.data.alreadyCalledDetail;
  451. this.overNumberDetail = res.data.overNumberDetail;
  452. resolve(res);
  453. } else {
  454. reject(res.message);
  455. }
  456. })
  457. .catch((err) => {
  458. reject(err);
  459. });
  460. } else {
  461. reject("请选择房间");
  462. }
  463. });
  464. },
  465. // 获取房间排队信息 ByRoomId
  466. getQueueRegisterListByRoomId(roomId) {
  467. if (!roomId) {
  468. this.$message.warning({ showClose: true, message: "请选择房间" });
  469. return;
  470. }
  471. postapi("/api/app/RegisterCheck/GetDoctorIsSignIn", {
  472. roomId: roomId
  473. }).then((res) => {
  474. this.isSignIn = res.data.isSignIn
  475. })
  476. this.getQueueRegisterList(
  477. roomId,
  478. this.LocalConfig.doctorCheck.queueItemTypeIds
  479. );
  480. },
  481. // 获取房间排队信息 ByRoomId
  482. getQueueRegisterListByItemTypeIds(itemTypeIds) {
  483. if (this.LocalConfig.doctorCheck.queueRoom) {
  484. this.getQueueRegisterList(
  485. this.LocalConfig.doctorCheck.queueRoom,
  486. itemTypeIds
  487. );
  488. }
  489. },
  490. setQueueParams() {
  491. this.queueParams.patientRegisterId =
  492. this.dataTransOpts.tableS.patient_register.id;
  493. },
  494. // 分诊排队
  495. fnQueue() {
  496. if (!this.queueParams.patientRegisterId) {
  497. this.$message.warning({ showClose: true, message: "未获取到人员信息" });
  498. return;
  499. }
  500. this.dataTransOpts.plus.queue++;
  501. this.dialogWin.queue = true;
  502. },
  503. // 选择候诊人员
  504. rowClickWait(row) {
  505. this.clickTime1 = new Date().getTime()
  506. setTimeout(() => {
  507. if (this.clickTime1 > this.clickTime2) {
  508. this.waitRow = row;
  509. this.queueParams = {
  510. patientRegisterId: row.patientRegisterId,
  511. };
  512. }
  513. }, 400);
  514. },
  515. // 选择过号人员
  516. rowClickAlready(row) {
  517. this.clickTime1 = new Date().getTime()
  518. setTimeout(() => {
  519. if (this.clickTime1 > this.clickTime2) {
  520. this.alreadyRow = row;
  521. this.queueParams = {
  522. patientRegisterId: row.patientRegisterId,
  523. };
  524. }
  525. }, 400);
  526. },
  527. // 选择过号人员
  528. rowClickOver(row) {
  529. this.clickTime1 = new Date().getTime()
  530. setTimeout(() => {
  531. if (this.clickTime1 > this.clickTime2) {
  532. this.overRow = row;
  533. }
  534. }, 400);
  535. },
  536. },
  537. //监听事件
  538. watch: {
  539. //体检人员未切换时 也可以强制刷新数据
  540. "dataTransOpts.refresh.register_check.M": {
  541. // immediate:true,
  542. handler(newVal, oldVal) {
  543. console.log(
  544. `watch 组合项目列表 newVal: ${newVal} oldVal: ${oldVal} patient_register.id: ${this.dataTransOpts.tableS.patient_register.id}`
  545. );
  546. if (newVal != oldVal) {
  547. this.fnMounted();
  548. }
  549. },
  550. },
  551. },
  552. };
  553. </script>
  554. <style scoped>
  555. ::v-deep .el-collapse-item__header {
  556. height: 32px;
  557. line-height: 32px;
  558. background-color: #f4f8ff;
  559. color: #303133;
  560. cursor: pointer;
  561. font-size: 14px;
  562. font-weight: 700;
  563. text-align: center;
  564. padding: 0 0 0 50px;
  565. }
  566. </style>