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.
 
 
 
 
 
 

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