hospital-management.component.ts 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  1. import { Component, OnInit } from "@angular/core";
  2. import {
  3. FormBuilder,
  4. Validators,
  5. FormGroup,
  6. FormControl,
  7. } from "@angular/forms";
  8. import { ActivatedRoute } from "@angular/router";
  9. import { MainService } from "../../services/main.service";
  10. import { ToolService } from "src/app/services/tool.service";
  11. import { Subject } from 'rxjs';
  12. import { debounceTime } from 'rxjs/operators';
  13. @Component({
  14. selector: "app-hospital-management",
  15. templateUrl: "./hospital-management.component.html",
  16. styleUrls: ["./hospital-management.component.less"],
  17. })
  18. export class HospitalManagementComponent implements OnInit {
  19. constructor(
  20. private fb: FormBuilder,
  21. private mainService: MainService,
  22. private route: ActivatedRoute,
  23. private tool: ToolService
  24. ) {}
  25. ngOnInit() {
  26. this.searchParentHospitalSubject.pipe(debounceTime(500)).subscribe((v: any) => {
  27. this.getAllParentHospital(v).subscribe((result) => {
  28. this.isLoading = false;
  29. if (result.status == 200) {
  30. this.parentHospitals = result.list;
  31. }
  32. });
  33. });
  34. this.coopBtns = this.tool.initCoopBtns(this.route);
  35. this.getList();
  36. this.initForm();
  37. this.initFormCopy();
  38. }
  39. currentUserAccount: any = JSON.parse(localStorage.getItem("user")).user.account; //当前登录人账号
  40. listOfData: any[] = []; //表格数据
  41. pageIndex: number = 1; //表格当前页码
  42. pageSize: number = 10; //表格每页展示条数
  43. listLength: number = 10; //表格总数据量
  44. modal: boolean = false; //新增/编辑模态框
  45. modalCopy: boolean = false; //复制模态框
  46. add: boolean; //true:新增;false:编辑
  47. validateForm: FormGroup; //新增/编辑表单
  48. validateFormCopy: FormGroup; //复制表单
  49. coopId: number; //当前操作列id
  50. promptContent: string; //操作提示框提示信息
  51. ifSuccess: boolean; //操作成功/失败
  52. promptInfo: string; //操作结果提示信息
  53. promptModalShow: boolean; //操作提示框是否展示
  54. btnLoading: boolean = false; //确认按钮loading状态
  55. // 初始化增删改按钮
  56. coopBtns: any = {};
  57. //所有院区
  58. parentHospitals: any = [];
  59. searchParentHospitalSubject = new Subject();
  60. //搜索父级院区
  61. changeInp(e) {
  62. this.isLoading = true;
  63. this.searchParentHospitalSubject.next(e);
  64. }
  65. // 打开父级科室下拉框
  66. isLoading = false;
  67. openHospitalSelect(flag) {
  68. if (flag) {
  69. this.isLoading = true;
  70. this.getAllParentHospital().subscribe((result) => {
  71. this.isLoading = false;
  72. if (result.status == 200) {
  73. this.parentHospitals = result.list;
  74. }
  75. });
  76. }
  77. }
  78. // 选择父级科室下拉框
  79. changeHospitalSelect(e) {
  80. if(!e){
  81. this.validateForm.controls.hospitalType.setValue(null);
  82. }
  83. this.requiredChange(Boolean(e), 'hospitalType');
  84. }
  85. // 打开部门类型下拉框
  86. isHospitalTypeLoading = false;
  87. hospitalTypes: any = [];
  88. openHospitalTypeSelect(flag) {
  89. if (flag) {
  90. this.isHospitalTypeLoading = true;
  91. this.mainService.getDictionary("list", "hospital_type").subscribe((result) => {
  92. this.isHospitalTypeLoading = false;
  93. this.hospitalTypes = result;
  94. });
  95. }
  96. }
  97. //获取所有的父级院区列表
  98. getAllParentHospital(keyWord = "") {
  99. let postData: any = {
  100. idx: 0,
  101. sum: 10,
  102. hospital: {
  103. keyWord: keyWord,
  104. },
  105. };
  106. if (this.coopId) {
  107. // 过滤这个院区及其子院区
  108. postData.hospital.filterByHosId = this.coopId;
  109. }
  110. return this.mainService.getFetchDataList("data", "hospital", postData);
  111. }
  112. // 表格数据
  113. loading1 = false;
  114. getList() {
  115. let data = {
  116. idx: this.pageIndex - 1,
  117. sum: this.pageSize,
  118. };
  119. this.loading1 = true;
  120. this.mainService
  121. .getFetchDataList("data", "hospital", data)
  122. .subscribe((data) => {
  123. this.loading1 = false;
  124. this.listOfData = data.list;
  125. this.listLength = data.totalNum;
  126. });
  127. }
  128. // 修改验证规则-是否必选
  129. requiredChange(required: boolean, field: string): void {
  130. if (!required) {
  131. this.validateForm.get(field)!.clearValidators();
  132. this.validateForm.get(field)!.markAsPristine();
  133. } else {
  134. this.validateForm.get(field)!.setValidators(Validators.required);
  135. this.validateForm.get(field)!.markAsDirty();
  136. }
  137. this.validateForm.get(field)!.updateValueAndValidity();
  138. }
  139. addModal() {
  140. this.add = true;
  141. this.modal = true;
  142. this.validateForm.controls.parentHospital.setValue(null);
  143. this.validateForm.controls.hospitalName.setValue("");
  144. this.validateForm.controls.hospitalNum.setValue("");
  145. }
  146. hideAddModal() {
  147. this.modal = false;
  148. this.initForm();
  149. }
  150. copy(data) {
  151. this.coopId = data.id;
  152. this.addModalCopy();
  153. }
  154. addModalCopy() {
  155. this.modalCopy = true;
  156. }
  157. hideAddModalCopy() {
  158. this.modalCopy = false;
  159. this.initFormCopy();
  160. }
  161. // 初始化复制form表单
  162. initFormCopy() {
  163. this.validateFormCopy = this.fb.group({
  164. copyHosId: [null, [Validators.required]],
  165. });
  166. }
  167. // 复制表单提交
  168. submitFormCopy(): void {
  169. var that = this;
  170. for (const i in that.validateFormCopy.controls) {
  171. that.validateFormCopy.controls[i].markAsDirty();
  172. that.validateFormCopy.controls[i].updateValueAndValidity();
  173. }
  174. if (that.validateFormCopy.invalid) return;
  175. that.btnLoading = true;
  176. let data = {
  177. sourceHosId: this.coopId,
  178. destHosId: that.validateFormCopy.value.copyHosId,
  179. };
  180. that.mainService.copyHosTaskType(data).subscribe((data) => {
  181. that.btnLoading = false;
  182. that.hideAddModalCopy();
  183. if (data["status"] == 200) {
  184. that.showPromptModal("复制", true, "");
  185. that.initFormCopy();
  186. } else {
  187. that.showPromptModal("复制", false, data["msg"]);
  188. }
  189. });
  190. }
  191. // 初始化新增form表单
  192. initForm() {
  193. this.validateForm = this.fb.group({
  194. hospitalType: [null],
  195. parentHospital: [null],
  196. hospitalName: [null, [Validators.required]],
  197. hospitalNum: [null, [Validators.required]],
  198. });
  199. }
  200. // 新增表单提交
  201. submitForm(): void {
  202. var that = this;
  203. for (const i in that.validateForm.controls) {
  204. that.validateForm.controls[i].markAsDirty();
  205. that.validateForm.controls[i].updateValueAndValidity();
  206. }
  207. if (that.validateForm.invalid) return;
  208. that.btnLoading = true;
  209. let data: any = {
  210. hospital: {
  211. hosName: that.validateForm.value.hospitalName,
  212. hosNo: that.validateForm.value.hospitalNum,
  213. },
  214. };
  215. if (this.validateForm.value.parentHospital) {
  216. data.hospital.parent = { id: this.validateForm.value.parentHospital };
  217. }
  218. if (this.validateForm.value.hospitalType) {
  219. data.hospital.type = { id: this.validateForm.value.hospitalType };
  220. }
  221. if (!that.add) {
  222. data.hospital["id"] = that.coopId;
  223. }
  224. that.mainService
  225. .coopData(that.add ? "addData" : "updData", "hospital", data)
  226. .subscribe((data) => {
  227. that.btnLoading = false;
  228. that.hideAddModal();
  229. if (data.status == 200) {
  230. that.showPromptModal(that.add ? "新增" : "编辑", true, "");
  231. that.initForm();
  232. } else {
  233. that.showPromptModal(that.add ? "新增" : "编辑", false, data.msg);
  234. }
  235. });
  236. }
  237. // 编辑
  238. edit(data) {
  239. this.add = false;
  240. this.modal = true;
  241. this.coopId = data.id;
  242. if (data.parent) {
  243. this.getAllParentHospital(data.parent.dept).subscribe((res) => {
  244. if (res.status == 200) {
  245. this.parentHospitals = res.list;
  246. this.validateForm.controls.parentHospital.setValue(data.parent.id);
  247. }
  248. });
  249. }
  250. if(data.type){
  251. this.mainService.getDictionary("list", "hospital_type").subscribe((result) => {
  252. this.hospitalTypes = result;
  253. this.validateForm.controls.hospitalType.setValue(data.type.id);
  254. });
  255. }
  256. this.validateForm.controls.hospitalName.setValue(data.hosName);
  257. this.validateForm.controls.hospitalNum.setValue(data.hosNo);
  258. }
  259. delModal: boolean = false; //删除模态框
  260. showDelModal(id) {
  261. this.delModal = true;
  262. this.coopId = id;
  263. }
  264. hideDelModal() {
  265. this.delModal = false;
  266. }
  267. confirmDel() {
  268. this.delModal = false;
  269. var that = this;
  270. that.btnLoading = true;
  271. that.mainService
  272. .coopData("rmvData", "hospital", [that.coopId])
  273. .subscribe((data) => {
  274. that.btnLoading = false;
  275. if (data.status == 200) {
  276. if (
  277. that.listOfData.length == 1 &&
  278. that.pageIndex == Math.ceil(that.listLength / that.pageSize)
  279. ) {
  280. that.listLength--;
  281. that.pageIndex = Math.ceil(that.listLength / that.pageSize) || 1;
  282. }
  283. this.showPromptModal("删除", true, "");
  284. } else {
  285. this.showPromptModal("删除", false, data.msg);
  286. }
  287. });
  288. }
  289. // 展示信息提示框(con:提示信息,success:操作是否成功,promptInfo:操作结果提示信息)
  290. showPromptModal(con, success, promptInfo?) {
  291. this.promptModalShow = false;
  292. this.promptContent = con;
  293. this.ifSuccess = success;
  294. this.promptInfo = promptInfo;
  295. setTimeout(() => {
  296. this.promptModalShow = true;
  297. }, 100);
  298. this.getList();
  299. }
  300. }