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.
 
 
 
 
 
 

684 lines
25 KiB

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