model.ts 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773
  1. /*
  2. * @Author: your name
  3. * @Date: 2021-09-14 10:46:45
  4. * @LastEditTime: 2022-03-15 15:16:59
  5. * @LastEditors: Please set LastEditors
  6. * @Description: In User Settings Edit
  7. * @FilePath: /MedicalWisdomCheckSys/src/pages/GradeHospitalAccreditation/articleManagement/model.ts
  8. */
  9. import { useState, useEffect } from 'react';
  10. import {
  11. getTreeFileTableData,
  12. getDepartmentList,
  13. settingArticle,
  14. batchSettingArticle,
  15. getSelfEvaluation,
  16. uploadFilePost,
  17. selfEvolutionCommit,
  18. getUploadLedgerSelectableType,
  19. getCurrentHospSelfScore,
  20. getRuleChildrens,
  21. getTaizhangImplementation,
  22. commitTaizhangImplementation,
  23. commitTaizhangDataDirectoryTableList,
  24. } from './server';
  25. import { getTreeList, getMaterialListGrades } from '@/pages/GradeHospitalAccreditation/accreditationDetail/service';
  26. import {
  27. getScoreLevelData,
  28. getAccreditationTypeData,
  29. getLedgerType
  30. } from '@/pages/PlatformMana/generalSetting/serve';
  31. import { notification } from 'antd';
  32. import { DataItemType } from './components/articleDetailModule/drawer/multi';
  33. export interface ImplementationDataItem {
  34. level: string;
  35. note: string;
  36. }
  37. export type ImplementationDataItemCache = Record<string, ImplementationDataItem[]>;
  38. // articleManagement
  39. const articleManagement = () => {
  40. const [treeData, setTreeData] = useState<any[]>([]);
  41. const [currentActivedTree, setCurrentActivedTree] = useState<MccsFileTree.childTree>();
  42. const [isLeaf, setIsLeaf] = useState(false);
  43. const [scoreList, setScoreList] = useState<{ label: string; value: string }[]>([]);
  44. const [leafData, setLeafData] = useState<API.LeafDataType>(); // 叶子结点数据
  45. const [targetScores, setTargetScores] = useState<MccsClickableTabs.TabType[]>([]);
  46. const [ruleTypes, setRuleTypes] = useState<MccsClickableTabs.TabType[]>([]);
  47. const [selfEvaluationRecords, setSelfEvaluationRecords] = useState<MccsRecordList.MccsRecordListType>([]); // 自评记录
  48. const [selectedRowKeys, setSelectedRowKeys] = useState<number[] | string[]>([]);
  49. const [drawerVisible, setDrawerVisible] = useState(false);
  50. /**
  51. * ARTICLE_SET 条文设置
  52. * BATCHSETTING 批量设置
  53. */
  54. const [drawerFormType, setDrawerFormType] = useState<'ARTICLE_SET' | 'BATCHSETTING'|undefined>(undefined);
  55. const [reloadRightContent, setReloadRightContent] = useState(false);
  56. const [moduleMode, setModuleMode] = useState(false); // true台账上传 false条文管理
  57. const [modalVisible, setModalVisible] = useState(false);
  58. const [uploadFormInitValue, setUploadFormInitValue] = useState<any>();
  59. const [selectedSelfEvolution, setSelectedSelfEvolution] =
  60. useState<{ label: string; value: any }>(); // MccsClickableTabs value值
  61. const [currentSelectedSelefEvolution, setCurrentSelectedSelefEvolution] =
  62. useState<{ label: string; value: any }>(); // 当前选中自评 点击对象
  63. const [uploadLedgerTypeList, setUploadLedgerTypeList] = useState<MccsClickableTabs.TabType[]>([]); // 上传台账可选类型
  64. const [currentHospSelfScoreAndOthers, setCurrentHospSelfScoreAndOthers] = useState<string>(); // 当前医院评分及自评结果
  65. const [editMode, setEditMode] = useState(false); // 编辑模式,台帐上传页面用到
  66. const [implementationData, setImplementationData] = useState<ImplementationDataItemCache>({}); // 执行情况说明数据
  67. const [taizhangDataDirectoryCommitList, setTaizhangDataDirectoryCommitList] = useState<
  68. API.TaizhangDataDirectoryCommitListItem[]
  69. >([]);
  70. const [isShowMineOnly, setIsShowMineOnly] = useState(false); // 左侧树形结构是否只展示当前用户所属的
  71. const [hasEditAuthority, setHasEditAuthority] = useState(false); // 是否有编辑权限
  72. const [gradeOptions, setGradeOptions] = useState<{ label: string, value: string | number }[]>([]);
  73. const [accountTypeOptions, setAccountTypeOptions] = useState<{ label: string, value: string | number }[]>([]);
  74. const [articleSettingFormInit, setArticleSettingFormInit] = useState<{
  75. responsibilityDepartment:{label:string;value:any};
  76. responsibilityUser:{label:string;value:any};
  77. Co_DepartmentAndManager:{responsibilityDepartment:{label:string;value:any};responsibilityUser:{label:string;value:any};}[];
  78. targetScores:{label:string;value:any};
  79. articleType:{label:string;value:any};
  80. }|undefined>(undefined); //条文设置表单回显默认值
  81. const [currentSelectedActObj, setCurrentSelectedActObj] = useState<any>(undefined); //当前正在操作的对象,例如当前选中的树中层级数据,点击详情的的行数据
  82. const [detailDrawerVisible, setdetailDrawerVisible] = useState(false); //条文详情抽屉
  83. const [ifHasEdit,setifHasEdit] = useState(false); //是否操作了条文设置或者编辑操作
  84. const getArticleTreeData = async (keyword?: string | number) => {
  85. // 获取树数据
  86. const { list = [] } = await getTreeList(isShowMineOnly, keyword);
  87. setTreeData(list);
  88. };
  89. const getTableData = async (params?: any, sorter?: any, filter?: any) => {
  90. // 根据选中树结构的id获取对应的详情
  91. let specifyId: number | null = null;
  92. if (params && params.id) {
  93. // 当存在指定id
  94. specifyId = params.id;
  95. }
  96. if (currentActivedTree || specifyId) {
  97. const resp = await getTreeFileTableData(
  98. specifyId
  99. ? {
  100. // 传入树结构id指定获取某一节点对应数据
  101. pageSize: 10,
  102. ...params,
  103. id: specifyId,
  104. }
  105. : {
  106. // 直接拿树结构id
  107. pageSize: 10,
  108. ...params,
  109. id: currentActivedTree ? currentActivedTree.id : 0,
  110. },
  111. moduleMode,
  112. );
  113. if (resp) {
  114. const { page, leafData, isLeaf } = resp;
  115. setIsLeaf(isLeaf);
  116. if (!isLeaf && page) {
  117. // 非叶子结点返回table数据
  118. const { list = [], totalCount } = page;
  119. return {
  120. data: list,
  121. success: true,
  122. total: totalCount,
  123. };
  124. }
  125. setLeafData(undefined);
  126. if (isLeaf && leafData) {
  127. setLeafData(leafData);
  128. } else {
  129. setLeafData({
  130. reviewArticle: {
  131. id: -1,
  132. ruleId: -1,
  133. numStr: '',
  134. version: '',
  135. selfEvaluation: '',
  136. targetEvaluation: '',
  137. systemEvaluation: '',
  138. siteEvaluation: '',
  139. responsibilityDepartmentId: -1,
  140. responsibilityDepartmentName: '-',
  141. responsibilityUserId: -1,
  142. responsibilityUserName: '-',
  143. accountType: '-',
  144. hospId: -1,
  145. userId: -1,
  146. pfmReviewArticleDepartList:[]
  147. },
  148. pfmViewRuleDetailDataVoList: [],
  149. pfmImplementations: [],
  150. });
  151. }
  152. }
  153. return [];
  154. }
  155. };
  156. const getDepartmentRequest = async () => {
  157. // 获取单位列表
  158. const resp = await getDepartmentList();
  159. if (resp) {
  160. const { list = [] } = resp;
  161. return list.map((item: any) => ({
  162. label: item.name,
  163. value: item.id,
  164. }));
  165. }
  166. return [];
  167. };
  168. type FormValueType = {
  169. articleType: { label: string; value: any };
  170. Co_DepartmentAndManager:DataItemType[];
  171. main_DepartmentAndManager:DataItemType[];
  172. targetScores: { label: string; value: any };
  173. };
  174. const batchSetting = async (values: FormValueType) => {
  175. // 批量设置
  176. const {main_DepartmentAndManager,Co_DepartmentAndManager} = values;
  177. if(main_DepartmentAndManager[0]){
  178. const resp = await batchSettingArticle({
  179. ruleIds: selectedRowKeys,
  180. responsibilityDepartmentId: main_DepartmentAndManager[0].responsibilityDepartment.value,
  181. responsibilityDepartmentName: main_DepartmentAndManager[0].responsibilityDepartment.label,
  182. responsibilityUserId: main_DepartmentAndManager[0].responsibilityUser.value,
  183. responsibilityUserName:main_DepartmentAndManager[0].responsibilityUser.label,
  184. targetEvaluation: values.targetScores.value,
  185. articleType: values.articleType.value,
  186. responsibilityList:Co_DepartmentAndManager.map(t=>({
  187. responsibilityDepartmentId: t.responsibilityDepartment.value,
  188. responsibilityDepartmentName: t.responsibilityDepartment.label,
  189. responsibilityUserId: t.responsibilityUser.value,
  190. responsibilityUserName:t.responsibilityUser.label,
  191. }))
  192. });
  193. if (resp) {
  194. setReloadRightContent(true);
  195. return true;
  196. }
  197. }
  198. };
  199. const setArticle = async (values: FormValueType) => {
  200. // 条文设置
  201. setifHasEdit(true);
  202. if (currentActivedTree && leafData) {
  203. let ruleId = 0;
  204. if (detailDrawerVisible) {
  205. //在条文抽屉详情里条文设置
  206. ruleId = currentSelectedActObj.id;
  207. } else {
  208. //正常在详情页设置条文
  209. ruleId = Number(currentActivedTree.id)
  210. }
  211. const { id } = leafData.reviewArticle;
  212. const {main_DepartmentAndManager,Co_DepartmentAndManager} = values;
  213. const paramsData = {
  214. id,
  215. ruleId: ruleId,
  216. responsibilityDepartmentId: main_DepartmentAndManager[0].responsibilityDepartment.value,
  217. responsibilityDepartmentName: main_DepartmentAndManager[0].responsibilityDepartment.label,
  218. responsibilityUserId: main_DepartmentAndManager[0].responsibilityUser.value,
  219. responsibilityUserName:main_DepartmentAndManager[0].responsibilityUser.label,
  220. targetEvaluation: values.targetScores.value,
  221. articleType: values.articleType.value,
  222. responsibilityList:Co_DepartmentAndManager.map(t=>({
  223. responsibilityDepartmentId: t.responsibilityDepartment.value,
  224. responsibilityDepartmentName: t.responsibilityDepartment.label,
  225. responsibilityUserId: t.responsibilityUser.value,
  226. responsibilityUserName:t.responsibilityUser.label,
  227. }))
  228. };
  229. const resp = await settingArticle(paramsData);
  230. if (resp) {
  231. // 更新界面信息
  232. if (detailDrawerVisible) {
  233. //当条文详情抽屉存在时,暂不刷新table,交给抽屉关闭时判断刷新,只刷新详情数据
  234. getTableData({id:currentSelectedActObj.id});
  235. }else{
  236. getTableData();
  237. }
  238. setDrawerVisible(false);
  239. }
  240. }
  241. };
  242. const getSelfEvaluationRecordList = async (id: number) => {
  243. const resp = await getSelfEvaluation(id);
  244. if (resp) {
  245. const { list }: { list: API.GetSelfEvaluationRequestType } = resp;
  246. const tempArr = list.map((t) => ({
  247. evaluation: t.selfEvaluation,
  248. details: [
  249. {
  250. name: t.userName,
  251. fileName: t.selfEvaluation,
  252. fileUrl: '',
  253. historyRecords: [],
  254. // recordTypeName:t.selfEvaluation,
  255. createTime: t.createDate,
  256. },
  257. ],
  258. }));
  259. setSelfEvaluationRecords(tempArr);
  260. }
  261. };
  262. const uploadFile = async (values: any) => {
  263. console.log({ 表单: values });
  264. if (leafData) {
  265. // console.log({'上传表单':values});
  266. try {
  267. const {
  268. files: { fileList = [] },
  269. tab,
  270. publicCateId,
  271. } = values;
  272. const { id, accountType } = leafData.reviewArticle;
  273. const formData = new FormData();
  274. fileList.map((t: MccsUpload.UploadFile) => {
  275. formData.append('file', t.originFileObj);
  276. });
  277. formData.append('id', id.toString());
  278. formData.append('categoryType', accountType);
  279. // 应产品要求‘制度’是不可变,根据制度获取对应关系
  280. tab.value.label == '制度' && formData.append('publicCateId', publicCateId);
  281. if (uploadFormInitValue && JSON.stringify(uploadFormInitValue) != '{}') {
  282. // 重新上传不允许修改类型
  283. const { tab } = uploadFormInitValue;
  284. formData.append('accountType', tab.label);
  285. formData.append('accountName', tab.value.label);
  286. } else {
  287. formData.append('accountType', tab.label);
  288. formData.append('accountName', tab.value.label);
  289. }
  290. const resp = await uploadFilePost(formData);
  291. if (resp) {
  292. // 上传成功,获取最新台账记录
  293. getTableData();
  294. }
  295. setModalVisible(false);
  296. // 每次提交完清空表单默认值
  297. setUploadFormInitValue(undefined);
  298. } catch (err) {
  299. console.log({ err });
  300. }
  301. }
  302. };
  303. const compalier = (data: ImplementationDataItem[], base: any[]) => {
  304. const result: ImplementationDataItem[] = [];
  305. const hasDataKeys = data.map((item) => item.level); // 找出已经请求到数据的集合
  306. const difference = hasDataKeys
  307. .concat(base)
  308. .filter((v) => !hasDataKeys.includes(v) || !base.includes(v)); // 找出缺失的项
  309. // console.log({difference});
  310. const needAddImplementationData = difference.map((item) => ({ level: item, note: '' }));
  311. const lastimplementationData = [...data, ...needAddImplementationData]; // 将需要新增的项添加
  312. lastimplementationData.forEach((item) => {
  313. // 数据排序,A>B>C
  314. switch (item.level) {
  315. case 'A':
  316. result[2] = item;
  317. break;
  318. case 'B':
  319. result[1] = item;
  320. break;
  321. case 'C':
  322. result[0] = item;
  323. break;
  324. }
  325. });
  326. return result;
  327. };
  328. const implementationDataFilter = (data: ImplementationDataItem[]) => {
  329. if (editMode && moduleMode) {
  330. if (selectedSelfEvolution?.label == 'A') {
  331. /**
  332. * 根据业务逻辑,当选中的值为A时,需要提供A,B,C三个的数据,若没有则需要添加
  333. */
  334. if (data.length == 3) return data; // 存在三个值时,直接返回
  335. return compalier(data, ['A', 'B', 'C']);
  336. }
  337. if (selectedSelfEvolution?.label == 'B') {
  338. /**
  339. * 根据业务逻辑,当选中的值为B时,需要提供B,C两个的数据,若没有则需要添加
  340. */
  341. if (data.length == 2) return data; // 存在2个值时,直接返回
  342. return compalier(data, ['B', 'C']);
  343. }
  344. if (selectedSelfEvolution?.label == 'C') {
  345. /**
  346. * 根据业务逻辑,当选中的值为C时,需要提供C一个个的数据,若没有则需要添加
  347. */
  348. if (data.length == 1) return data; // 存在1个值时,直接返回
  349. return compalier(data, ['C']);
  350. }
  351. }
  352. return data;
  353. };
  354. const getImplementationForEdit = async ({
  355. numStr,
  356. version,
  357. level,
  358. }: {
  359. numStr: string;
  360. version: string;
  361. level: string;
  362. }) => {
  363. // 或区指定等级的执行情况说明数据,同时根据返回的数据自行添加需要补充的项
  364. if (implementationData[level]) return; // implementationData集合里已经有了该等级对应的数据时,不请求,为了保证编辑的数据缓存
  365. const data = await getTaizhangImplementation({ numStr, version, level });
  366. const implementData: ImplementationDataItem[] = data.map((item) => ({
  367. level: item.level,
  368. note: item.note,
  369. }));
  370. const resultData = implementationDataFilter(implementData); // 得到改造过的数据
  371. /**
  372. *
  373. * 应业务要求,自评等级切换时保留之前填写数据
  374. * 所以额外建立一个键值对象进行缓存
  375. */
  376. setImplementationData({ ...implementationData, [level]: resultData });
  377. };
  378. const onSelfEvolutionTabChange = (value: { label: string; value: any }) => {
  379. // 自评tab切换回调
  380. value && setCurrentSelectedSelefEvolution(value);
  381. value && setSelectedSelfEvolution(value);
  382. };
  383. const commitSelfEvolution = async () => {
  384. // 提交自评
  385. if (leafData && currentSelectedSelefEvolution) {
  386. // 存在详情信息,且已选择评分
  387. const { id } = leafData.reviewArticle;
  388. const _userData = localStorage.getItem('userData');
  389. if (_userData) {
  390. const userData: { name: string; userId: number } = JSON.parse(_userData);
  391. const params = {
  392. id: Number(id),
  393. selfEvaluation: `${currentSelectedSelefEvolution ? currentSelectedSelefEvolution.value : 'null'
  394. }`,
  395. userId: userData?.userId,
  396. userName: userData?.name,
  397. };
  398. const resp = await selfEvolutionCommit(params);
  399. if (resp && currentActivedTree) {
  400. // 刷新自评记录
  401. getSelfEvaluationRecordList(Number(currentActivedTree.id));
  402. setSelectedSelfEvolution({ label: 'null', value: 'null' }); // 清空选中项
  403. setCurrentSelectedSelefEvolution(undefined);
  404. }
  405. }
  406. } else {
  407. notification.info({
  408. message: '请选择评分!',
  409. });
  410. }
  411. };
  412. const getScoreList = async () => {
  413. // 条文评级
  414. const data = await getScoreLevelData();
  415. const tempArr = data.map((t: any) => ({
  416. label: t.levelNumber,
  417. value: t.levelNumber,
  418. configStatus: t.configStatus,
  419. }));
  420. return Promise.resolve(tempArr);
  421. };
  422. const accreditationGroupType = async () => {
  423. // 获取条文组别
  424. const data = await getAccreditationTypeData();
  425. const tempArr = data.map((t: any) => ({ label: t.categoryType, value: t.categoryType }));
  426. return Promise.resolve(tempArr);
  427. };
  428. const getUploadLedgerType = async () => {
  429. // 台账类型
  430. const data = await getUploadLedgerSelectableType();
  431. if (data) {
  432. const tempArr = data.map((t: API.RuleChildsItemType) => {
  433. const tempList = t.generalNameList.map((a) => {
  434. return {
  435. label: a.generalName,
  436. value: a.id,
  437. };
  438. });
  439. return { label: t.levelNumber, list: tempList };
  440. });
  441. return Promise.resolve(tempArr);
  442. }
  443. };
  444. const getCurrentHospScore = async () => {
  445. // 获取医院评分及自评信息
  446. const resp = await getCurrentHospSelfScore();
  447. setCurrentHospSelfScoreAndOthers(resp);
  448. };
  449. const getSelectableSelfScoreList = async () => {
  450. // 获取自评可选列表
  451. const resp = await getScoreLevelData();
  452. const listFilted = resp.filter((t: any) => t.configStatus != 0);
  453. const list = listFilted.map((t: any) => ({ label: t.levelNumber, value: t.levelNumber }));
  454. setTargetScores(list.reverse());
  455. };
  456. const getSelectableRuleChilds = async (id: number) => {
  457. // 获取台账上传时可选下拉类型
  458. const resp = await getRuleChildrens(id);
  459. return resp.map((t: { id: number; name: string }) => ({ label: t.name, value: t.id }));
  460. };
  461. const commitTaizhangImplementationHandle = async () => {
  462. // console.log({taizhangDataDirectoryCommitList});
  463. if (leafData) {
  464. const selfEvo = selectedSelfEvolution ? selectedSelfEvolution.label : '';
  465. const list = implementationData[selfEvo].map((item) => ({
  466. selfEvaluation: item.level,
  467. node: item.note,
  468. }));
  469. // 提交台账执行情况说明
  470. const respImplementation = await commitTaizhangImplementation({
  471. hospId: `${leafData.reviewArticle.hospId}`,
  472. id: leafData.reviewArticle.id,
  473. numStr: leafData.reviewArticle.numStr,
  474. selfEvaluation: selfEvo,
  475. version: leafData.reviewArticle.version,
  476. implementationDtoList: list,
  477. });
  478. const respDataDirectoryTable = await commitTaizhangDataDirectoryTableList(
  479. taizhangDataDirectoryCommitList,
  480. );
  481. setEditMode(false);
  482. // console.log({respDataDirectoryTable,respImplementation})
  483. if (respDataDirectoryTable && respImplementation) {
  484. // 每次服务保存数据成功后,清空台账上传的缓存数据
  485. setImplementationData({}); // 清空执行情况说明
  486. setTaizhangDataDirectoryCommitList([]); // 清空台账上传资料目录
  487. getTableData(); // 两个保存都成功时刷新数据
  488. }
  489. }
  490. };
  491. const getGradeOptions = async () => {
  492. if (leafData) {
  493. const { numStr, version } = leafData.reviewArticle;
  494. const resp = await getMaterialListGrades({ numStr, version });
  495. if (resp) {
  496. const options = resp.map(item => ({ label: item.grade, value: item.grade }));
  497. setGradeOptions(options);
  498. }
  499. }
  500. }
  501. const getAccoutTypeOptions = async () => {
  502. const resp = await getLedgerType();
  503. if (resp) {
  504. const options = resp.map(item => ({ label: item.generalName, value: item.generalName }));
  505. setAccountTypeOptions(options);
  506. }
  507. }
  508. useEffect(()=>{
  509. if(!detailDrawerVisible&&ifHasEdit){
  510. //详情抽屉关闭时刷新table
  511. setReloadRightContent(true);
  512. //更新完数据,重置状态
  513. setifHasEdit(false);
  514. }
  515. },[detailDrawerVisible])
  516. useEffect(() => {
  517. if (!drawerVisible) {
  518. setDrawerFormType(undefined);
  519. }
  520. }, [drawerVisible]);
  521. useEffect(() => {
  522. // 叶子结点数据变化后相关回调
  523. if (leafData) {
  524. const { systemEvaluation, targetEvaluation, selfEvaluation, userId } =
  525. leafData.reviewArticle;
  526. const tempScoreList = [
  527. {
  528. label: '目标',
  529. value: targetEvaluation || '-',
  530. },
  531. {
  532. label: '自评',
  533. value: selfEvaluation || '-',
  534. },
  535. {
  536. label: '系统评分',
  537. value: systemEvaluation || '-',
  538. },
  539. ];
  540. /**
  541. * 默认加载页面时执行获取执行情况说明数据
  542. */
  543. const t = localStorage.getItem('userData') ? localStorage.getItem('userData') : '';
  544. const userData = JSON.parse(t as string);
  545. setHasEditAuthority(userId == userData.userId);
  546. setImplementationData({ [selfEvaluation]: leafData.pfmImplementations });
  547. const selfEvolution = leafData.reviewArticle.selfEvaluation;
  548. setSelectedSelfEvolution({ label: selfEvolution, value: selfEvolution });
  549. setScoreList(tempScoreList);
  550. getSelectableSelfScoreList();
  551. }
  552. }, [leafData]);
  553. useEffect(() => {
  554. // 当抽屉类型改变时
  555. if (drawerFormType == 'BATCHSETTING' || drawerFormType == 'ARTICLE_SET') {
  556. getScoreList().then((data) => {
  557. const dataFilted = data.filter((t: any) => t.configStatus != 0); // 去掉不启动
  558. setTargetScores(dataFilted);
  559. });
  560. accreditationGroupType().then((data) => {
  561. setRuleTypes(data);
  562. });
  563. }
  564. }, [drawerFormType]);
  565. useEffect(() => {
  566. // 左侧树结构只看我的开关切换时,重新获取树结构数据
  567. getArticleTreeData();
  568. }, [isShowMineOnly]);
  569. useEffect(() => {
  570. // console.log({ leafData, selectedSelfEvolution });
  571. if (leafData && selectedSelfEvolution) {
  572. // 更新台账页面编辑下的执行情况说明
  573. getImplementationForEdit({
  574. level: selectedSelfEvolution.label,
  575. /**
  576. * 不能拿currentActivedTree里的version,numStr,
  577. * 因为台账上传页面详情抽屉读不到准确的四码和版本
  578. */
  579. version: leafData?.reviewArticle.version,
  580. numStr: leafData?.reviewArticle.numStr,
  581. });
  582. }
  583. }, [selectedSelfEvolution]);
  584. useEffect(() => {
  585. if (!editMode && leafData) {
  586. // 取消编辑时,将原自评等级设为默认
  587. const selfEvolution = leafData.reviewArticle.selfEvaluation;
  588. setSelectedSelfEvolution({ label: selfEvolution, value: selfEvolution });
  589. }
  590. }, [editMode]);
  591. useEffect(() => {
  592. // 切换页面类型时做相关处理,如清除之前页面的默认数据
  593. if (!moduleMode) {
  594. setEditMode(false); // 条文管理界面无需编辑
  595. setIsShowMineOnly(false); // 条文管理界面关闭
  596. }
  597. }, [moduleMode]);
  598. return {
  599. isLeaf,
  600. treeData,
  601. setTreeData,
  602. getArticleTreeData,
  603. getTableData,
  604. currentActivedTree,
  605. setCurrentActivedTree,
  606. scoreList, // 评分
  607. getDepartmentRequest,
  608. targetScores,
  609. ruleTypes,
  610. leafData,
  611. setArticle,
  612. batchSetting,
  613. drawerFormType,
  614. setDrawerFormType,
  615. drawerVisible,
  616. setDrawerVisible,
  617. setSelectedRowKeys,
  618. reloadRightContent,
  619. setReloadRightContent,
  620. setModuleMode,
  621. moduleMode,
  622. selfEvaluationRecords,
  623. modalVisible,
  624. setModalVisible,
  625. uploadFile,
  626. uploadFormInitValue,
  627. setUploadFormInitValue,
  628. onSelfEvolutionTabChange,
  629. commitSelfEvolution,
  630. selectedSelfEvolution,
  631. getSelfEvaluationRecordList,
  632. getUploadLedgerType,
  633. uploadLedgerTypeList,
  634. setUploadLedgerTypeList,
  635. currentHospSelfScoreAndOthers,
  636. getCurrentHospScore,
  637. getSelectableRuleChilds,
  638. editMode,
  639. setEditMode,
  640. implementationData,
  641. setImplementationData,
  642. commitTaizhangImplementationHandle,
  643. taizhangDataDirectoryCommitList,
  644. setTaizhangDataDirectoryCommitList,
  645. setIsShowMineOnly,
  646. isShowMineOnly,
  647. setSelectedSelfEvolution,
  648. hasEditAuthority,
  649. gradeOptions,
  650. accountTypeOptions,
  651. getGradeOptions,
  652. getAccoutTypeOptions,
  653. articleSettingFormInit, setArticleSettingFormInit,
  654. setCurrentSelectedActObj,
  655. currentSelectedActObj,
  656. detailDrawerVisible,
  657. setdetailDrawerVisible,
  658. };
  659. };
  660. export default articleManagement;