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.

lr-clientdata.js 25 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683
  1. 
  2. (function ($, learun) {
  3. "use strict";
  4. var loadSate = {
  5. no: -1, // 还未加载
  6. yes: 1, // 已经加载成功
  7. ing: 0, // 正在加载中
  8. fail: 2 // 加载失败
  9. };
  10. var clientDataFn = {};
  11. var clientAsyncData = {};
  12. var clientData = {};
  13. function initLoad(callback) {
  14. var res = loadSate.yes;
  15. for (var id in clientDataFn) {
  16. var _fn = clientDataFn[id];
  17. if (_fn.state == loadSate.fail) {
  18. res = loadSate.fail;
  19. break;
  20. }
  21. else if (_fn.state == loadSate.no) {
  22. res = loadSate.ing;
  23. _fn.init();
  24. }
  25. else if (_fn.state == loadSate.ing) {
  26. res = loadSate.ing;
  27. }
  28. }
  29. if (res == loadSate.yes) {
  30. callback(true);
  31. } else if (res == loadSate.fail) {
  32. callback(false);
  33. }
  34. else {
  35. setTimeout(function () {
  36. initLoad(callback);
  37. }, 100);
  38. }
  39. }
  40. function get(key, data) {
  41. var res = "";
  42. var len = data.length;
  43. if (len == undefined) {
  44. res = data[key];
  45. }
  46. else {
  47. for (var i = 0; i < len; i++) {
  48. if (key(data[i])) {
  49. res = data[i];
  50. break;
  51. }
  52. }
  53. }
  54. return res;
  55. }
  56. learun.clientdata = {
  57. init: function (callback) {
  58. initLoad(function (res) {
  59. callback(res);
  60. if (res) {// 开始异步加载数据
  61. clientAsyncData.company.init();
  62. }
  63. });
  64. },
  65. get: function (nameArray) {//[key,function (v) { return v.key == value }]
  66. var res = "";
  67. if (!nameArray) {
  68. return res;
  69. }
  70. var len = nameArray.length;
  71. var data = clientData;
  72. for (var i = 0; i < len; i++) {
  73. res = get(nameArray[i], data);
  74. if (res != "" && res != undefined) {
  75. data = res;
  76. }
  77. else {
  78. break;
  79. }
  80. }
  81. res = res || "";
  82. return res;
  83. },
  84. getAsync: function (name, op) {//
  85. return clientAsyncData[name].get(op);
  86. },
  87. getAllAsync: function (name, op) {//
  88. return clientAsyncData[name].getAll(op);
  89. },
  90. getsAsync: function (name, op) {//
  91. return clientAsyncData[name].gets(op);
  92. },
  93. update: function (name) {
  94. clientAsyncData[name].update && clientAsyncData[name].update();
  95. },
  96. getAsyncReal:function(name, op) {
  97. clientAsyncData[name].states = 1;
  98. return clientAsyncData[name].get(op);
  99. }
  100. };
  101. /*******************登录后数据***********************/
  102. // 注册数据的加载方法
  103. // 功能模块数据
  104. clientDataFn.modules = {
  105. state: loadSate.no,
  106. init: function () {
  107. //初始化加载数据
  108. clientDataFn.modules.state = loadSate.ing;
  109. learun.httpAsyncGet($.rootUrl + '/LR_SystemModule/Module/GetModuleList', function (res) {
  110. if (res.code == learun.httpCode.success) {
  111. clientData.modules = res.data;
  112. clientDataFn.modules.toMap();
  113. clientDataFn.modules.state = loadSate.yes;
  114. }
  115. else {
  116. clientData.modules = [];
  117. clientDataFn.modules.toMap();
  118. clientDataFn.modules.state = loadSate.fail;
  119. }
  120. });
  121. },
  122. toMap: function () {
  123. //转化成树结构 和 转化成字典结构
  124. var modulesTree = {};
  125. var modulesMap = {};
  126. var _len = clientData.modules.length;
  127. for (var i = 0; i < _len; i++) {
  128. var _item = clientData.modules[i];
  129. if (_item.F_EnabledMark == 1) {
  130. modulesTree[_item.F_ParentId] = modulesTree[_item.F_ParentId] || [];
  131. modulesTree[_item.F_ParentId].push(_item);
  132. modulesMap[_item.F_ModuleId] = _item;
  133. }
  134. }
  135. clientData.modulesTree = modulesTree;
  136. clientData.modulesMap = modulesMap;
  137. }
  138. };
  139. // 登录用户信息
  140. clientDataFn.userinfo = {
  141. state: loadSate.no,
  142. init: function () {
  143. //初始化加载数据
  144. clientDataFn.userinfo.state = loadSate.ing;
  145. learun.httpAsyncGet($.rootUrl + '/Login/GetUserInfo', function (res) {
  146. if (res.code == learun.httpCode.success) {
  147. clientData.userinfo = res.data;
  148. clientDataFn.userinfo.state = loadSate.yes;
  149. }
  150. else {
  151. clientDataFn.userinfo.state = loadSate.fail;
  152. }
  153. });
  154. }
  155. };
  156. /*******************使用时异步获取*******************/
  157. var storage = {
  158. get: function (name) {
  159. if (localStorage) {
  160. return JSON.parse(localStorage.getItem(name)) || {};
  161. }
  162. else {
  163. return clientData[name] || {};
  164. }
  165. },
  166. set: function (name, data) {
  167. if (localStorage) {
  168. localStorage.setItem(name, JSON.stringify(data));
  169. }
  170. else {
  171. clientData[name] = data;
  172. }
  173. }
  174. };
  175. // 公司信息
  176. clientAsyncData.company = {
  177. states: loadSate.no,
  178. init: function () {
  179. if (clientAsyncData.company.states == loadSate.no) {
  180. clientAsyncData.company.states = loadSate.ing;
  181. var ver = storage.get("companyData").ver || "";
  182. learun.httpAsync('GET', top.$.rootUrl + '/LR_OrganizationModule/Company/GetMap', { ver: ver }, function (data) {
  183. if (!data) {
  184. clientAsyncData.company.states = loadSate.fail;
  185. } else {
  186. if (data.ver) {
  187. storage.set("companyData", data);
  188. }
  189. clientAsyncData.company.states = loadSate.yes;
  190. clientAsyncData.department.init();
  191. }
  192. });
  193. }
  194. },
  195. get: function (op) {
  196. clientAsyncData.company.init();
  197. if (clientAsyncData.company.states == loadSate.ing) {
  198. setTimeout(function () {
  199. clientAsyncData.company.get(op);
  200. }, 100);// 如果还在加载100ms后再检测
  201. }
  202. else {
  203. var data = storage.get("companyData").data || {};
  204. op.callback(data[op.key] || {}, op);
  205. }
  206. },
  207. getAll: function (op) {
  208. clientAsyncData.company.init();
  209. if (clientAsyncData.company.states == loadSate.ing) {
  210. setTimeout(function () {
  211. clientAsyncData.company.getAll(op);
  212. }, 100);// 如果还在加载100ms后再检测
  213. }
  214. else {
  215. var data = storage.get("companyData").data || {};
  216. op.callback(data, op);
  217. }
  218. }
  219. };
  220. // 部门信息
  221. clientAsyncData.department = {
  222. states: loadSate.no,
  223. init: function () {
  224. if (clientAsyncData.department.states == loadSate.no) {
  225. clientAsyncData.department.states = loadSate.ing;
  226. var ver = storage.get("departmentData").ver || "";
  227. learun.httpAsync('GET', top.$.rootUrl + '/LR_OrganizationModule/Department/GetMap', { ver: ver }, function (data) {
  228. if (!data) {
  229. clientAsyncData.department.states = loadSate.fail;
  230. } else {
  231. if (data.ver) {
  232. storage.set("departmentData", data);
  233. }
  234. clientAsyncData.department.states = loadSate.yes;
  235. clientAsyncData.user.init();
  236. }
  237. });
  238. }
  239. },
  240. get: function (op) {
  241. clientAsyncData.department.init();
  242. if (clientAsyncData.department.states == loadSate.ing) {
  243. setTimeout(function () {
  244. clientAsyncData.department.get(op);
  245. }, 100);// 如果还在加载100ms后再检测
  246. }
  247. else {
  248. var data = storage.get("departmentData").data || {};
  249. op.callback(data[op.key] || {}, op);
  250. }
  251. },
  252. getAll: function (op) {
  253. clientAsyncData.department.init();
  254. if (clientAsyncData.department.states == loadSate.ing) {
  255. setTimeout(function () {
  256. clientAsyncData.department.getAll(op);
  257. }, 100);// 如果还在加载100ms后再检测
  258. }
  259. else {
  260. var data = storage.get("departmentData").data || {};
  261. op.callback(data, op);
  262. }
  263. }
  264. };
  265. // 人员信息
  266. clientAsyncData.user = {
  267. states: loadSate.no,
  268. init: function () {
  269. if (clientAsyncData.user.states == loadSate.no) {
  270. clientAsyncData.user.states = loadSate.ing;
  271. var ver = storage.get("userData").ver || "";
  272. learun.httpAsync('GET', top.$.rootUrl + '/LR_OrganizationModule/User/GetMap', { ver: ver }, function (data) {
  273. if (!data) {
  274. clientAsyncData.user.states = loadSate.fail;
  275. } else {
  276. if (data.ver) {
  277. storage.set("userData", data);
  278. }
  279. clientAsyncData.user.states = loadSate.yes;
  280. clientAsyncData.dataItem.init();
  281. }
  282. });
  283. }
  284. },
  285. get: function (op) {
  286. clientAsyncData.user.init();
  287. if (clientAsyncData.user.states == loadSate.ing) {
  288. setTimeout(function () {
  289. clientAsyncData.user.get(op);
  290. }, 100);// 如果还在加载100ms后再检测
  291. }
  292. else {
  293. var data = storage.get("userData").data || {};
  294. var keys = (op.key || '').split(',');
  295. var array=new Array();
  296. if (keys.length > 1) {
  297. $.each(keys,
  298. function (i, item) {
  299. array.push(data[item]);
  300. })
  301. op.callback(array || {}, op);
  302. } else {
  303. op.callback(data[op.key] || {}, op);
  304. }
  305. }
  306. },
  307. getAll: function (op) {
  308. clientAsyncData.user.init();
  309. if (clientAsyncData.user.states == loadSate.ing) {
  310. setTimeout(function () {
  311. clientAsyncData.user.getAll(op);
  312. }, 100);// 如果还在加载100ms后再检测
  313. }
  314. else {
  315. var data = storage.get("userData").data || {};
  316. op.callback(data, op);
  317. }
  318. }
  319. };
  320. // 数据字典
  321. clientAsyncData.dataItem = {
  322. states: loadSate.no,
  323. init: function () {
  324. if (clientAsyncData.dataItem.states == loadSate.no) {
  325. clientAsyncData.dataItem.states = loadSate.ing;
  326. var ver = storage.get("dataItemData").ver || "";
  327. learun.httpAsync('GET', top.$.rootUrl + '/LR_SystemModule/DataItem/GetMap', { ver: ver }, function (data) {
  328. if (!data) {
  329. clientAsyncData.dataItem.states = loadSate.fail;
  330. } else {
  331. if (data.ver) {
  332. storage.set("dataItemData", data);
  333. }
  334. clientAsyncData.dataItem.states = loadSate.yes;
  335. clientAsyncData.db.init();
  336. }
  337. });
  338. }
  339. },
  340. get: function (op) {
  341. clientAsyncData.dataItem.init();
  342. if (clientAsyncData.dataItem.states == loadSate.ing) {
  343. setTimeout(function () {
  344. clientAsyncData.dataItem.get(op);
  345. }, 100);// 如果还在加载100ms后再检测
  346. }
  347. else {
  348. var data = storage.get("dataItemData").data || {};
  349. // 数据字典翻译
  350. var _item = clientAsyncData.dataItem.find(op.key, data[op.code] || {});
  351. if (_item) {
  352. top.learun.language.get(_item.text, function (text) {
  353. _item.text = text;
  354. op.callback(_item, op);
  355. });
  356. }
  357. else {
  358. op.callback({}, op);
  359. }
  360. }
  361. },
  362. getAll: function (op) {
  363. clientAsyncData.dataItem.init();
  364. if (clientAsyncData.dataItem.states == loadSate.ing) {
  365. setTimeout(function () {
  366. clientAsyncData.dataItem.getAll(op);
  367. }, 100);// 如果还在加载100ms后再检测
  368. }
  369. else {
  370. var data = storage.get("dataItemData").data || {};
  371. var res = {};
  372. $.each(data[op.code] || {}, function (_index, _item) {
  373. _item.text = top.learun.language.getSyn(_item.text);
  374. res[_index] = _item;
  375. });
  376. op.callback(res, op);
  377. }
  378. },
  379. gets: function (op) {
  380. clientAsyncData.dataItem.init();
  381. if (clientAsyncData.dataItem.states == loadSate.ing) {
  382. setTimeout(function () {
  383. clientAsyncData.dataItem.get(op);
  384. }, 100);// 如果还在加载100ms后再检测
  385. }
  386. else {
  387. var data = storage.get("dataItemData").data || {};
  388. var keyList = (op.key || "").split(',');
  389. var _text = []
  390. $.each(keyList, function (_index, _item) {
  391. var _item = clientAsyncData.dataItem.find(_item, data[op.code] || {});
  392. top.learun.language.get(_item.text, function (text) {
  393. _text.push(text);
  394. });
  395. });
  396. op.callback(String(_text), op);
  397. }
  398. },
  399. find: function (key, data) {
  400. var res = {};
  401. for (var id in data) {
  402. if (data[id].value == key) {
  403. res = data[id];
  404. break;
  405. }
  406. }
  407. return res;
  408. },
  409. update: function () {
  410. clientAsyncData.dataItem.states = loadSate.no;
  411. clientAsyncData.dataItem.init();
  412. }
  413. };
  414. // 数据库连接数据
  415. clientAsyncData.db = {
  416. states: loadSate.no,
  417. init: function () {
  418. if (clientAsyncData.db.states == loadSate.no) {
  419. clientAsyncData.db.states = loadSate.ing;
  420. var ver = storage.get("dbData").ver || "";
  421. learun.httpAsync('GET', top.$.rootUrl + '/LR_SystemModule/DatabaseLink/GetMap', { ver: ver }, function (data) {
  422. if (!data) {
  423. clientAsyncData.db.states = loadSate.fail;
  424. } else {
  425. if (data.ver) {
  426. storage.set("dbData", data);
  427. }
  428. clientAsyncData.db.states = loadSate.yes;
  429. }
  430. });
  431. }
  432. },
  433. get: function (op) {
  434. clientAsyncData.db.init();
  435. if (clientAsyncData.db.states == loadSate.ing) {
  436. setTimeout(function () {
  437. clientAsyncData.db.get(op);
  438. }, 100);// 如果还在加载100ms后再检测
  439. }
  440. else {
  441. var data = storage.get("dbData").data || {};
  442. op.callback(data[op.key] || {}, op);
  443. }
  444. },
  445. getAll: function (op) {
  446. clientAsyncData.db.init();
  447. if (clientAsyncData.db.states == loadSate.ing) {
  448. setTimeout(function () {
  449. clientAsyncData.db.getAll(op);
  450. }, 100);// 如果还在加载100ms后再检测
  451. }
  452. else {
  453. var data = storage.get("dbData").data || {};
  454. op.callback(data, op);
  455. }
  456. }
  457. };
  458. // 数据源数据
  459. clientAsyncData.sourceData = {
  460. states: {},
  461. get: function (op) {
  462. if (clientAsyncData.sourceData.states[op.code] == undefined || clientAsyncData.sourceData.states[op.code] == loadSate.no) {
  463. clientAsyncData.sourceData.states[op.code] = loadSate.ing;
  464. clientAsyncData.sourceData.load(op.code);
  465. }
  466. if (clientAsyncData.sourceData.states[op.code] == loadSate.ing) {
  467. setTimeout(function () {
  468. clientAsyncData.sourceData.get(op);
  469. }, 100);// 如果还在加载100ms后再检测
  470. }
  471. else {
  472. var data = storage.get("sourceData_" + op.code).data || [];
  473. if (!!data) {
  474. op.callback(clientAsyncData.sourceData.find(op.key, op.keyId, data) || {}, op);
  475. } else {
  476. op.callback({}, op);
  477. }
  478. }
  479. },
  480. getAll: function (op) {
  481. if (clientAsyncData.sourceData.states[op.code] == undefined || clientAsyncData.sourceData.states[op.code] == loadSate.no) {
  482. clientAsyncData.sourceData.states[op.code] = loadSate.ing;
  483. clientAsyncData.sourceData.load(op.code);
  484. }
  485. if (clientAsyncData.sourceData.states[op.code] == loadSate.ing) {
  486. setTimeout(function () {
  487. clientAsyncData.sourceData.getAll(op);
  488. }, 100);// 如果还在加载100ms后再检测
  489. }
  490. else if (clientAsyncData.sourceData.states[op.code] == loadSate.yes) {
  491. var data = storage.get("sourceData_" + op.code).data || [];
  492. if (!!data) {
  493. op.callback(data, op);
  494. } else {
  495. op.callback({}, op);
  496. }
  497. }
  498. },
  499. load: function (code) {
  500. var ver = storage.get("sourceData_" + code).ver || "";
  501. learun.httpAsync('GET', top.$.rootUrl + '/LR_SystemModule/DataSource/GetMap', { code: code, ver: ver }, function (data) {
  502. if (!data) {
  503. clientAsyncData.sourceData.states[code] = loadSate.fail;
  504. } else {
  505. if (data.ver) {
  506. storage.set("sourceData_" + code, data);
  507. }
  508. clientAsyncData.sourceData.states[code] = loadSate.yes;
  509. }
  510. });
  511. },
  512. find: function (key, keyId, data) {
  513. var res = {};
  514. for (var i = 0, l = data.length; i < l; i++) {
  515. if (data[i][keyId] == key) {
  516. res = data[i];
  517. break;
  518. }
  519. }
  520. return res;
  521. }
  522. };
  523. // 获取自定义数据 url key valueId
  524. clientAsyncData.custmerData = {
  525. states: {},
  526. get: function (op) {
  527. if (clientAsyncData.custmerData.states[op.url] == undefined || clientAsyncData.custmerData.states[op.url] == loadSate.no || op.sync == true) {
  528. clientAsyncData.custmerData.states[op.url] = loadSate.ing;
  529. if (!!op.sync) {
  530. clientAsyncData.custmerData.loadsync(op.url, op);
  531. } else {
  532. clientAsyncData.custmerData.load(op.url);
  533. }
  534. }
  535. if (clientAsyncData.custmerData.states[op.url] == loadSate.ing) {
  536. setTimeout(function () {
  537. clientAsyncData.custmerData.get(op);
  538. }, 100);// 如果还在加载100ms后再检测
  539. }
  540. else {
  541. var data = clientData[op.url] || [];
  542. if (!!data) {
  543. op.callback(clientAsyncData.custmerData.find(op.key, op.keyId, data) || {}, op);
  544. } else {
  545. op.callback({}, op);
  546. }
  547. }
  548. },
  549. gets: function (op) {
  550. if (clientAsyncData.custmerData.states[op.url] == undefined || clientAsyncData.custmerData.states[op.url] == loadSate.no) {
  551. clientAsyncData.custmerData.states[op.url] = loadSate.ing;
  552. clientAsyncData.custmerData.load(op.url);
  553. }
  554. if (clientAsyncData.custmerData.states[op.url] == loadSate.ing) {
  555. setTimeout(function () {
  556. clientAsyncData.custmerData.get(op);
  557. }, 100);// 如果还在加载100ms后再检测
  558. }
  559. else {
  560. var data = clientData[op.url] || [];
  561. if (!!data) {
  562. var keyList = op.key.split(',');
  563. var _text = []
  564. $.each(keyList, function (_index, _item) {
  565. var _item = clientAsyncData.custmerData.find(op.key, op.keyId, data) || {};
  566. if (_item[op.textId]) {
  567. _text.push(_item[op.textId]);
  568. }
  569. });
  570. op.callback(String(_text), op);
  571. } else {
  572. op.callback('', op);
  573. }
  574. }
  575. },
  576. getAll: function (op) {
  577. if (clientAsyncData.custmerData.states[op.url] == undefined || clientAsyncData.custmerData.states[op.url] == loadSate.no) {
  578. clientAsyncData.custmerData.states[op.url] = loadSate.ing;
  579. clientAsyncData.custmerData.load(op.url);
  580. }
  581. if (clientAsyncData.custmerData.states[op.url] == loadSate.ing) {
  582. setTimeout(function () {
  583. clientAsyncData.custmerData.get(op);
  584. }, 100);// 如果还在加载100ms后再检测
  585. }
  586. else {
  587. var data = clientData[op.url] || [];
  588. if (!!data) {
  589. op.callback(data, op);
  590. } else {
  591. op.callback([], op);
  592. }
  593. }
  594. },
  595. load: function (url) {
  596. learun.httpAsync('GET', top.$.rootUrl + url, {}, function (data) {
  597. if (!!data) {
  598. clientData[url] = data;
  599. }
  600. clientAsyncData.custmerData.states[url] = loadSate.yes;
  601. });
  602. },
  603. loadsync: function (url, op) {
  604. learun.httpSync('GET', top.$.rootUrl + url, {}, function (data) {
  605. if (!!data) {
  606. clientAsyncData.custmerData.states[url] = loadSate.yes;
  607. clientData[url] = data;
  608. op.callback(clientAsyncData.custmerData.find(op.key, op.keyId, data) || {}, op);
  609. } else {
  610. op.callback({}, op);
  611. }
  612. });
  613. },
  614. find: function (key, keyId, data) {
  615. var res = {};
  616. for (var i = 0, l = data.length; i < l; i++) {
  617. if (data[i][keyId] == key) {
  618. res = data[i];
  619. break;
  620. }
  621. }
  622. return res;
  623. }
  624. };
  625. //桌面
  626. clientAsyncData.desktop = {
  627. states: loadSate.no,
  628. init: function () {
  629. if (clientAsyncData.desktop.states == loadSate.no) {
  630. clientAsyncData.desktop.states = loadSate.ing;
  631. var j = storage.get("desktopData").ver || "";
  632. learun.httpAsync("GET",
  633. top.$.rootUrl + "/LR_Desktop/DTTarget/GetMap",
  634. {
  635. ver: j
  636. },
  637. function (k) {
  638. if (!k) {
  639. clientAsyncData.desktop.states = loadSate.fail;
  640. } else {
  641. if (k.ver) {
  642. storage.set("desktopData", k);
  643. }
  644. clientAsyncData.desktop.states = loadSate.yes;
  645. clientAsyncData.department.init();
  646. }
  647. });
  648. }
  649. }, get: function (k) {
  650. clientAsyncData.desktop.init();
  651. if (clientAsyncData.desktop.states == loadSate.ing) {
  652. setTimeout(function () {
  653. clientAsyncData.desktop.get(k);
  654. }, 100)
  655. } else {
  656. var j = storage.get("desktopData").data || {};
  657. k.callback(j || {}, k);
  658. }
  659. }
  660. }
  661. })(window.jQuery, top.learun);