configuration-inspect-inspects.component.ts 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347
  1. import { Component, OnInit, Input } from "@angular/core";
  2. import { Subject } from 'rxjs';
  3. import { debounceTime } from 'rxjs/operators';
  4. import { Validators, FormGroup, FormBuilder } from '@angular/forms';
  5. import { ToolService } from 'src/app/services/tool.service';
  6. import { NzMessageService } from 'ng-zorro-antd';
  7. import { MainService } from 'src/app/services/main.service';
  8. @Component({
  9. selector: "app-configuration-inspect-inspects",
  10. templateUrl: "./configuration-inspect-inspects.component.html",
  11. styleUrls: ["./configuration-inspect-inspects.component.less"],
  12. })
  13. export class ConfigurationInspectInspectsComponent implements OnInit {
  14. constructor(
  15. private mainService: MainService,
  16. private fb: FormBuilder,
  17. private tool: ToolService,
  18. private message: NzMessageService,
  19. ) {}
  20. coopData: any = {}; //当前操作列
  21. hosId: any = this.tool.getCurrentHospital().id;
  22. searchTimerSubject = new Subject();
  23. ngOnInit() {
  24. this.searchTimerSubject.pipe(debounceTime(500)).subscribe((v) => {
  25. let fun = v[0];
  26. fun.call(this, v[1]);
  27. });
  28. setTimeout(() => {
  29. this.tableWechatHeight = document.querySelector('#wechatTable').clientHeight - document.querySelector('#wechatTable .list-template__top').clientHeight - 8 - document.querySelector('#wechatTable .thead').clientHeight;
  30. }, 0)
  31. this.getTypes();
  32. this.getList();
  33. }
  34. // 新增弹框
  35. modelName = ""; //模态框名称
  36. modalWechat: boolean = false; //新增/编辑模态框
  37. add: boolean; //true:新增;false:编辑
  38. addWechatModal() {
  39. this.modelName = "新增";
  40. this.add = true; //新增
  41. this.modalWechat = true;
  42. this.initWechatForm();
  43. }
  44. //关闭新增/编辑弹框
  45. hideWechatModal() {
  46. this.modalWechat = false;
  47. }
  48. // 编辑
  49. editWechat(data) {
  50. console.log(data);
  51. this.modelName = "编辑";
  52. this.add = false;
  53. this.modalWechat = true;
  54. this.initWechatForm();
  55. this.coopData = data;
  56. this.validateForm.controls.orders.setValue(data.orders);
  57. this.validateForm.controls.name.setValue(data.name);
  58. this.validateForm.controls.extra6.setValue(data.extra6);
  59. this.validateForm.controls.extra4.setValue(data.extra4DTO ? data.extra4DTO.id : null);
  60. this.validateForm.controls.extra5.setValue(data.extra5DTO ? data.extra5DTO.id : null);
  61. this.validateForm.controls.extra7.setValue(data.deptList ? data.deptList.map(v => v.id) : []);
  62. this.validateForm.controls.extra8.setValue(data.extra8 || '0');
  63. data.extra4DTO && (this.deptList = [data.extra4DTO]);
  64. data.deptList && (this.deptsList = data.deptList);
  65. }
  66. // 新增/编辑表单提交
  67. btnLoading: boolean = false; //提交按钮loading状态
  68. submitWechatForm(): void {
  69. for (const i in this.validateForm.controls) {
  70. this.validateForm.controls[i].markAsDirty();
  71. this.validateForm.controls[i].updateValueAndValidity();
  72. }
  73. if (this.validateForm.invalid) {
  74. return;
  75. }
  76. console.log(this.validateForm.value);
  77. this.btnLoading = true;
  78. let postData:any = {};
  79. let arr = this.dataList.filter(
  80. (item) => item.name == this.validateForm.value.name && item.id != this.coopData.id
  81. );
  82. //有重复名称
  83. if (arr.length > 0) {
  84. this.btnLoading = false;
  85. this.showPromptModal(
  86. this.add ? "新增" : "编辑",
  87. false,
  88. `存在重复的检查项目名称【${this.validateForm.value.name}】请修改后再保存!`
  89. );
  90. return;
  91. }
  92. if (this.add) {
  93. //增加
  94. postData = {
  95. // dictionary: {
  96. key: "inspect_check_type",
  97. value: this.validateForm.value.extra6,
  98. desc: "检查项目",
  99. orders: this.validateForm.value.orders,
  100. name: this.validateForm.value.name,
  101. extra6: this.validateForm.value.extra6,
  102. extra4: this.validateForm.value.extra4,
  103. extra5: this.validateForm.value.extra5,
  104. extra7: this.validateForm.value.extra7.toString(),
  105. extra8: this.validateForm.value.extra8,
  106. // }
  107. };
  108. } else {
  109. //编辑
  110. postData = {
  111. // dictionary: {
  112. ...this.coopData,
  113. orders: this.validateForm.value.orders,
  114. name: this.validateForm.value.name,
  115. extra6: this.validateForm.value.extra6,
  116. value: this.validateForm.value.extra6,
  117. extra4: this.validateForm.value.extra4,
  118. extra5: this.validateForm.value.extra5,
  119. extra7: this.validateForm.value.extra7.toString(),
  120. extra8: this.validateForm.value.extra8,
  121. // }
  122. };
  123. }
  124. this.mainService
  125. .simplePost("addData", "dictionary", postData)
  126. .subscribe((result) => {
  127. this.btnLoading = false;
  128. this.hideWechatModal();
  129. let msg = "";
  130. if (this.add) {
  131. msg = "新增";
  132. } else {
  133. msg = "修改";
  134. }
  135. if (result.status == 200) {
  136. this.showPromptModal(msg, true, '');
  137. } else {
  138. this.showPromptModal(msg, false, result.msg);
  139. }
  140. });
  141. }
  142. // 初始化新增form表单
  143. validateForm: FormGroup; //新增/编辑表单
  144. initWechatForm() {
  145. this.validateForm = this.fb.group({
  146. orders: [null, [Validators.required]],
  147. name: [null, [Validators.required]],
  148. extra6: [null, [Validators.required]],
  149. extra4: [null],
  150. extra5: [null, [Validators.required]],
  151. extra7: [[]],
  152. extra8: [null, [Validators.required]],
  153. });
  154. }
  155. // 重置
  156. queryData: any = {}
  157. reset(){
  158. this.queryData = {};
  159. this.getList();
  160. }
  161. // 获取列表
  162. loading1:boolean = false;
  163. dataList: any[] = []; //表格数据
  164. tableWechatHeight:number = 0;
  165. getList() {
  166. let data = {
  167. idx: 0,
  168. sum: 9999,
  169. dictionary: {
  170. key: "inspect_check_type",
  171. name: this.queryData.name || undefined,
  172. extra4: this.queryData.extra4 || undefined,
  173. extra5: this.queryData.extra5 || undefined,
  174. extra8: this.queryData.extra8 || undefined,
  175. },
  176. };
  177. this.loading1 = true;
  178. this.mainService
  179. .getFetchDataList("simple/data", "dictionary", data)
  180. .subscribe((data) => {
  181. this.loading1 = false;
  182. if (data.status == 200) {
  183. this.dataList = data.list || [];
  184. }else{
  185. this.message.error(data.msg || "请求数据失败");
  186. }
  187. });
  188. }
  189. // 防抖
  190. isLoading = false;
  191. isSelecting:boolean = false; // 是否在选中状态
  192. searchTimer(fun, e) {
  193. if (this.isSelecting) {
  194. this.isSelecting = false; // 重置标志
  195. return; // 跳过处理
  196. }
  197. this.isLoading = true;
  198. this.searchTimerSubject.next([fun, e]);
  199. }
  200. // 设置标志
  201. setIsSelecting(flag){
  202. this.isSelecting = flag; // 设置标志
  203. }
  204. openChangeDept(flag){
  205. flag && this.setIsSelecting(false);
  206. flag && this.getDeptList();
  207. }
  208. // 科室搜索
  209. changeDeptInp(e) {
  210. this.searchTimer(this.getDeptList, e);
  211. }
  212. // 获取默认检查科室
  213. deptList: any = [];
  214. getDeptList(e = undefined) {
  215. let postData = {
  216. idx: 0,
  217. sum: 20,
  218. department: {
  219. searchType: 1,// 简单查询
  220. cascadeHosId: this.hosId,
  221. dept: e,
  222. }
  223. };
  224. this.isLoading = true;
  225. this.mainService
  226. .getFetchDataList("simple/data", "department", postData)
  227. .subscribe((data) => {
  228. this.isLoading = false;
  229. this.deptList = data.list || [];
  230. });
  231. }
  232. openChangeDepts(flag){
  233. flag && this.setIsSelecting(false);
  234. flag && this.getDeptsList();
  235. }
  236. // 科室搜索
  237. changeDeptsInp(e) {
  238. this.searchTimer(this.getDeptsList, e);
  239. }
  240. // 获取检查科室
  241. deptsList: any = [];
  242. getDeptsList(e = undefined) {
  243. let postData = {
  244. idx: 0,
  245. sum: 20,
  246. department: {
  247. searchType: 1,// 简单查询
  248. cascadeHosId: this.hosId,
  249. dept: e,
  250. }
  251. };
  252. this.isLoading = true;
  253. this.mainService
  254. .getFetchDataList("simple/data", "department", postData)
  255. .subscribe((data) => {
  256. this.isLoading = false;
  257. this.deptsList = data.list || [];
  258. });
  259. }
  260. // 获取检查类型
  261. typeList: any = [];
  262. getTypes() {
  263. this.mainService.getDictionary('list', 'inspect_check_item').subscribe((data) => {
  264. this.isLoading = false;
  265. this.typeList = data || [];
  266. });
  267. }
  268. delModal: boolean = false; //删除模态框
  269. tipsMsg1: string; //提示框信息
  270. tipsMsg2: string; //操作后信息
  271. confirmDelType: string; //确认的类型(启用/停用,删除)
  272. showDelModal(
  273. data,
  274. tipsMsg1: string,
  275. tipsMsg2: string,
  276. type: string,
  277. ) {
  278. this.confirmDelType = type;
  279. this.delModal = true;
  280. this.coopData = data;
  281. this.tipsMsg1 = tipsMsg1;
  282. this.tipsMsg2 = tipsMsg2;
  283. }
  284. // 隐藏删除框
  285. hideDelModal() {
  286. this.delModal = false;
  287. }
  288. // 确认删除
  289. confirmDel() {
  290. this.btnLoading = true;
  291. if (this.confirmDelType === "del") {
  292. //删除
  293. this.mainService
  294. .simplePost("rmvData", "dictionary", [this.coopData.id])
  295. .subscribe((data) => {
  296. this.btnLoading = false;
  297. this.delModal = false;
  298. if (data.status == 200) {
  299. this.showPromptModal(this.tipsMsg2, true, "");
  300. } else {
  301. this.showPromptModal(this.tipsMsg2, false, data.msg);
  302. }
  303. });
  304. }
  305. }
  306. // 展示信息提示框(con:提示信息,success:操作是否成功,promptInfo:操作结果提示信息)
  307. promptContent: string; //操作提示框提示信息
  308. ifSuccess: boolean; //操作成功/失败
  309. promptInfo: string; //操作结果提示信息
  310. promptModalShow: boolean; //操作提示框是否展示
  311. showPromptModal(con, success, promptInfo?) {
  312. this.promptModalShow = false;
  313. this.promptContent = con;
  314. this.ifSuccess = success;
  315. this.promptInfo = promptInfo;
  316. setTimeout(() => {
  317. this.promptModalShow = true;
  318. }, 100);
  319. this.getList();
  320. }
  321. }