Disk.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405
  1. Namespace.register("U.MD.DK"); //Disk的主命名空间
  2. //#region 初始化网盘
  3. //初始化网盘
  4. //
  5. //* @param {string} 用户id,可以是自己的用户id或者其他人的用户id。当为其他人的用户id时,为查看其他人的网盘信息
  6. //* @param {string} 目录id
  7. //* @returns {} 无
  8. //
  9. U.MD.DK.initDisk = function (userid, dirid) {
  10. //判断用户id是否存在,如果不存在说明是桌面的点击,那么就必须要求用户登录
  11. if (userid) {
  12. //获取网盘弹窗
  13. var _formdiv = $("#U_D_" + userid)[0];
  14. //如果网盘已经弹出,直接定位
  15. if (_formdiv) {
  16. U.UF.F.windowTopCenter(_formdiv);
  17. U.MD.DK.openDirByDirID(userid, dirid); //导航到制定目录
  18. }
  19. //如果网盘没有弹出的处理
  20. else {
  21. var _diskel = $("#U_MD_DK").clone(true)[0],
  22. _loginuserid = US.userInfo.userid || US.EMPTYGUID; //网盘内容元素
  23. _diskel.id = "U_MD_DK__" + userid; //网盘内容的元素id设置为U_MD_DK__加上用户id
  24. _diskel.style.display = "block"; //显示
  25. //云盘拖拽
  26. //$('.U_MD_DK_RZA', _diskel).bind('mousedown', function () { console.log(0); })
  27. //窗体的事件处理,api中没有,需要补充。
  28. _formdiv = new U.UF.UI.form("<div class='U_MD_F_S_TI'>网盘</div>",
  29. _diskel, {
  30. "onmousedown": function () {
  31. U.MD.DK.M.diskOperatingSwitch(userid);
  32. }, //鼠标单击事件。打开多个网盘时,切换网盘数据,此处需要修正,并删除.
  33. "onresize": function () {
  34. U.MD.DK.size(_diskel);
  35. }, //窗体放大缩小时的处理。
  36. "id": "U_D_" + userid,
  37. "style": {
  38. "width": "80%",
  39. "height": "85%"
  40. }
  41. }).form;
  42. //数据库获取指定用户指定目录下的网盘数据
  43. U.A.Request(US.DISK, ["InitDisk", _loginuserid, userid, dirid], U.MD.DK.asynInitDisk, [_diskel, userid, dirid, US.userInfo.userid || US.EMPTYGUID, _formdiv]); //服务器加载
  44. }
  45. return _formdiv;
  46. }
  47. //没有用户id说明用户没有登录点击桌面的网盘。
  48. else {
  49. U.MD.U.L.login();
  50. }
  51. }
  52. /**
  53. * 得到后台获取的用户数据
  54. *
  55. * @param {object} request返回值
  56. * context 上下文之间的传参
  57. * value服务器返回值 0 用户初始化定位到指定文件夹下面的所有文件和文件夹 1 用户的信息 2 用户的网盘信息
  58. **/
  59. U.MD.DK.asynInitDisk = function (r) {
  60. var _dirinfo,
  61. _context = r.context, //获取上下文传参
  62. _diskel = _context[0], //disk内容元素
  63. _userid = _context[1], //用户的id
  64. _dirid = _context[2], //目录id
  65. _loginuserid = _context[3], //用户登录id
  66. _formdiv = _context[4], //网盘窗体元素
  67. _value = r.value //数据库返回的值
  68. ;
  69. //判断根据用户id是否能获取到用户的资料
  70. if (_value) {
  71. //设置用户全局变量
  72. var _diskinfo = U.MD.DK.setUserGlobalVariable(_userid, _dirid, _value);
  73. //初始化左侧的头部样式
  74. U.MD.DK.VW.followState(_formdiv, _userid, _loginuserid);
  75. //初始化当前用户网盘前进后退
  76. U.UF.N.createNav("disk" + _userid);
  77. //初始化按钮点击事件
  78. U.MD.DK.initDiskButton(_diskinfo);
  79. //网盘大小初始化设置
  80. U.MD.DK.size(_diskinfo.formel);
  81. //初始化用户信息
  82. U.MD.DK.initDiskUserInfo(_diskinfo);
  83. //打印左边树目录信息
  84. U.MD.DK.LL.printLeftTreeDirectory(_diskinfo.directoryOrFiles.slice(0, 8), $("#U_MD_DK_LTXO", _diskinfo.formel)[0], _userid, ["U_MD_DK_LCD", "U_MD_DK_LCS", "U_MD_DK_LCD", "U_MD_DK_LCB", "U_MD_DK_LCF", "U_MD_DK_LCT", "U_MD_DK_LCP", "U_MD_DK_LCY"])
  85. U.MD.DK.openDirByDirID(_userid, _dirid); //导航到制定目录上
  86. }
  87. //获取用户资料失败
  88. else {
  89. U.alert("帐号不存在...");
  90. //移除网盘窗体
  91. $(_diskinfo.formel).remove();
  92. }
  93. }
  94. /**
  95. * 根据目录id打开目录
  96. *
  97. * @param {string} 目录id
  98. **/
  99. U.MD.DK.openDirByDirID = function (userid, dirid) {
  100. var _diskinfo = US.disk.Disks[userid];
  101. if (_diskinfo) {
  102. //导航到达指定的目录
  103. //打开文件,目录及导航到达区域。因为现在是按需加载数据,不可能完全导航到达指定位置,则不做左边树目录展开功能
  104. var _dirinfo = U.Json.select(_diskinfo.directoryOrFiles, { "UserDirectoryID": dirid })[0]; //获取当前需要打开的文件夹信息
  105. //如果目录存在的处理
  106. if (_dirinfo) {
  107. //如果左边的目录可以输出的处理
  108. if ($("#L" + _dirinfo["UserDirectoryID"], _diskinfo.formel)[0]) {
  109. U.MD.DK.LL.leftTreeClick(_dirinfo, $("#L" + _dirinfo["UserDirectoryID"], _diskinfo.formel)[0], userid); //打开该文件夹
  110. }
  111. //否则直接打印数据
  112. else {
  113. U.MD.DK.LE.openFileDirectory(_dirinfo, userid);
  114. }
  115. }
  116. //目录查看不了或者是不允许查看
  117. else {
  118. U.MD.DK.VW.printNullView($("#U_MD_DK_RZ", _diskinfo.formel)[0]);
  119. }
  120. }
  121. }
  122. /**
  123. * 打开应用
  124. *
  125. * @param {string} 用户id
  126. * @param {string} 目录id
  127. * @param {object} directoryOrFiles是dirid目录下所有的文件和文件夹 userInfo是用户的信息+用户的网盘信息
  128. **/
  129. U.MD.DK.setUserGlobalVariable = function (userid, dirid, diskinfo) {
  130. var _dirinfo,
  131. _basicdirectory = U.MD.DK.getBasicDirectory(diskinfo), //获取一级目录
  132. _groupdirectory = U.MD.DK.getGroupDirectory(diskinfo.groups, _basicdirectory, diskinfo.userInfo.UserId) //获取群目录
  133. ;
  134. _basicdirectory = _basicdirectory.concat(_groupdirectory); //群和一级目录合并生成初始化目录
  135. //_basicdirectory[1].Child = _groupdirectory; //把群添加到文档群的的下面,作为文件夹
  136. //diskinfo.directoryOrFile是第一次进入的时候获取的文件夹下面的文件,那么这个时候就要添加到指定的目录的child里面
  137. _dirinfo = U.Json.select(_basicdirectory, { "UserDirectoryID": dirid }, 1)[0];
  138. if (!_dirinfo && diskinfo.currentdirectory[0]) {
  139. _dirinfo = diskinfo.currentdirectory[0]; //获取服务器返回的当前目录
  140. _dirinfo = new U.MD.DK.M.entity(_dirinfo.UserDirectoryID, 0,
  141. _dirinfo.UserDirectoryParentID, _dirinfo.UserDirectoryName, _dirinfo.UserDirectoryName, _dirinfo.UserDirectoryExtendType,
  142. "", _dirinfo.UserDirectoryAddTime, _dirinfo.UserDirectoryUrl, _dirinfo.UserDirectoryDeep, _dirinfo.UserDirectoryModifyTime,
  143. _dirinfo.UserDirectoryEncrypt, 0, "", _dirinfo.GroupID);
  144. _basicdirectory.push(_dirinfo);
  145. }
  146. //判断是在制定的以及目录下的子文件的处理
  147. if (_dirinfo) {
  148. _dirinfo.Child = diskinfo.directoryOrFiles;
  149. U.Json.add(diskinfo.directoryOrFiles, { "Parent": _dirinfo });
  150. }
  151. diskinfo.directoryOrFiles = _basicdirectory.concat(diskinfo.directoryOrFiles); //基础目录加上dirid获取的数据
  152. //设置用户的全局变量
  153. US.disk.Disks[userid] = diskinfo; //diskinfo.directoryOrFiles是dirid目录下所有的文件和文件夹 userInfo是用户的信息+用户的网盘信息
  154. US.disk.Disks[userid].formel = $("#U_D_" + userid)[0]; //对应的网盘窗体元素
  155. US.disk.Disks[userid].directoryid = dirid; //当前打开的目录id
  156. US.disk.Disks[userid].currentDirectoryFile = []; //当前目录下所有的文件
  157. US.disk.Disks[userid].operator = US.userInfo.userid; //操作用户id
  158. return US.disk.Disks[userid]; //返回用户网盘的信息
  159. }
  160. /**
  161. * 获取一个一级目录
  162. *
  163. **/
  164. U.MD.DK.getBasicDirectory = function (diskinfo) {
  165. var i,
  166. _diskdir = US.disk.initTree.concat(); //concat相当于数组的克隆,克隆一个一级目录数组
  167. //补充disk网盘的全局变量数据 补充左边初始化目录数据我的电脑等
  168. for (i = 0; i < _diskdir.length; i++) { //初始化查看
  169. //创建一个一级目录对象
  170. _diskdir[i] = new U.MD.DK.M.entity(_diskdir[i][0], _diskdir[i][1], _diskdir[i][2], _diskdir[i][3], _diskdir[i][4],
  171. _diskdir[i][5], _diskdir[i][6], _diskdir[i][7], _diskdir[i][8], _diskdir[i][9],
  172. _diskdir[i][10], _diskdir[i][11], _diskdir[i][12], _diskdir[i][13], _diskdir[i][14],
  173. _diskdir[i][15], diskinfo.userInfo.UserId, diskinfo.userInfo.UserNickName, diskinfo.userInfo.UserName, diskinfo.userInfo.UserThumbnailImageHead);
  174. };
  175. //返回一级目录
  176. return _diskdir;
  177. }
  178. /**
  179. * 生成群目录
  180. * @param {array} 群数组
  181. * @param {array} 目录id
  182. * @param {string} 用户id
  183. *
  184. **/
  185. U.MD.DK.getGroupDirectory = function (groups, basicdirectory, userid) {
  186. if (groups != null) {
  187. var i, _diskgroupinfo; //concat相当于数组的克隆,克隆一个一级目录数组
  188. //还没有初始化群的处理
  189. if (!basicdirectory[1].Child) {
  190. basicdirectory[1].Child = [];
  191. }
  192. //还没有初始化群的处理
  193. if (!basicdirectory[2].Child) {
  194. basicdirectory[2].Child = [];
  195. }
  196. //补充disk网盘的全局变量数据 补充左边初始化目录数据我的电脑等
  197. for (i = 0; i < groups.length; i++) { //初始化查看
  198. _diskgroupinfo = groups[i];
  199. //创建一个一级目录对象
  200. groups[i] = new U.MD.DK.M.entity(groups[i].GroupManageID, 0, US.EMPTYGUID, groups[i].GroupManageName,
  201. groups[i].GroupManageName, "folder", null, U.UF.D.toTimeStamp(new Date()), U.MD.DK.C.getIcon("folder")[1],
  202. 1, null, null, 0, "", groups[i].GroupManageID, null, groups[i].GroupManageUserID, groups[i].GroupManageName, groups[i].GroupManageName);
  203. //如果是群主的处理,那么就做为协同文件
  204. if (_diskgroupinfo.GroupManageCreateUserID == userid) {
  205. basicdirectory[1].Child.push(groups[i]);
  206. groups[i].Parent = basicdirectory[1];
  207. }
  208. //非群主的,作为协同他人的处理
  209. else {
  210. basicdirectory[2].Child.push(groups[i]);
  211. groups[i].Parent = basicdirectory[2];
  212. }
  213. };
  214. }
  215. //返回一级目录
  216. return groups || [];
  217. }
  218. /**
  219. * 初始化硬盘点击按钮
  220. *
  221. * @param {string} 用户网盘信息
  222. **/
  223. U.MD.DK.initDiskButton = function (diskinfo) {
  224. var _navchildel = $("#U_MD_DK_RKZ", diskinfo.formel).Child(),
  225. _viewchildel = $("#U_MD_DK_RM", diskinfo.formel).Child(),
  226. _child = $("#U_MD_DK_RY", diskinfo.formel).Child(),
  227. _headchild = $("#U_MD_DK_RT", diskinfo.formel).Child(),
  228. _userid = diskinfo.userInfo.UserId,
  229. _el = $("#U_MD_DK_RZ", diskinfo.formel)[0]
  230. ; //头部新建文件夹等按钮
  231. //上传事件
  232. _headchild[0].onclick = function () {
  233. U.MD.DK.C.upload(diskinfo);
  234. }
  235. //新建目录事件
  236. _headchild[1].onclick = function () {
  237. U.MD.DK.RE.newFolder(diskinfo);
  238. }
  239. //新建文本事件
  240. _headchild[2].onclick = function () {
  241. U.MD.DK.RE.newText(diskinfo);
  242. }
  243. //新建文档事件
  244. _headchild[3].onclick = function () {
  245. //U.MD.DK.RE.newDocConfirm(diskinfo);
  246. U.MD.DK.RE.newDocument(diskinfo);
  247. }
  248. //新建表格事件
  249. _headchild[4].onclick = function () {
  250. U.MD.DK.RE.newExcel(diskinfo);
  251. }
  252. //创建站点
  253. _headchild[5].onclick = function () {
  254. var _data = U.Json.select(diskinfo.directoryOrFiles, { "UserDirectoryID": diskinfo.directoryid })[0];
  255. U.MD.DS.dataCheck(_data.UserDirectoryExtendType, _data)
  256. }
  257. //前进事件
  258. _child[0].onclick = function () {
  259. U.UF.N.backOff("disk" + _userid); //前进事件
  260. }
  261. //后退事件
  262. _child[1].onclick = function () {
  263. U.UF.N.goAhead("disk" + _userid); //后退事件
  264. }
  265. //刷新按钮
  266. _child[2].onclick = function () {
  267. U.MD.DK.RE.refresh(_userid, U.Json.select(diskinfo.directoryOrFiles, { "UserDirectoryID": diskinfo.directoryid })[0], diskinfo); //刷新函数
  268. }
  269. //右键菜单点击处理
  270. _el.oncontextmenu = function () {
  271. U.MD.DK.RM.rightMenu(null, null, diskinfo);
  272. };
  273. //拖选元素处理
  274. _el.onmousedown = function () {
  275. U.MD.DK.C.selectElement(_el, diskinfo);
  276. };
  277. //左键点击空白处理
  278. U.UF.EV.addElementEvent("mousedown", window, function () {
  279. $(".U_MD_DK_M")[1].style.display = "none";
  280. })
  281. //时间排序按钮
  282. _navchildel[0].onclick = function () {
  283. U.MD.DK.VW.SortView(diskinfo, "UserDirectoryAddTime", function (timeone, timetwo) {
  284. return U.UF.D.sizeComparison(timeone, timetwo) == false;
  285. }); //时间排序处理
  286. }
  287. //普通视图
  288. _navchildel[1].onclick = function () {
  289. //视图按钮切换
  290. _navchildel[1].className = "U_MD_DK_RKZOI U_MD_DK_Img U_MD_DK_RKZOS U_MD_DK_RKZOSI";
  291. _navchildel[2].className = "U_MD_DK_RKZOI U_MD_DK_Img U_MD_DK_RKZOP";
  292. //普通视图
  293. U.MD.DK.VW.viewsSwitch("Normal", diskinfo);
  294. }
  295. //详细视图
  296. _navchildel[2].onclick = function () {
  297. //视图按钮切换
  298. _navchildel[1].className = "U_MD_DK_RKZOI U_MD_DK_Img U_MD_DK_RKZOS";
  299. _navchildel[2].className = "U_MD_DK_RKZOI U_MD_DK_Img U_MD_DK_RKZOP U_MD_DK_RKZOPI";
  300. //详细视图
  301. U.MD.DK.VW.viewsSwitch("Detailed", diskinfo);
  302. }
  303. //文件名排序
  304. _viewchildel[2].onclick = function () {
  305. U.MD.DK.VW.SortView(diskinfo, "UserallDirectoryName", function (dirnameone, dirnametwo) { //时间排序处理
  306. return dirnameone.localeCompare(dirnametwo, "zh") == 1;
  307. });
  308. }
  309. //分享次数排序,暂时分享次数没有用处
  310. // _child[2].onclick = function () {
  311. // U.MD.DK.VW.SortView(diskinfo, "", function (timeone, timetwo) {
  312. // return U.UF.D.sizeComparison(timeone, timetwo) == false;
  313. // }); //时间排序处理
  314. // }
  315. //来源名字排序
  316. _viewchildel[6].onclick = function () {
  317. U.MD.DK.VW.SortView(diskinfo, "UserNickName", function (nameone, nametwo) { //根据用户名排序
  318. return nameone.localeCompare(nametwo, "zh") == 1;
  319. });
  320. }
  321. //类型排序
  322. _viewchildel[8].onclick = function () {
  323. U.MD.DK.VW.SortView(diskinfo, "UserDirectoryExtendType", function (typeone, typetwo) { //根据类型排序
  324. return typeone.localeCompare(typetwo, "zh") == 1;
  325. });
  326. }
  327. //大小排序排序
  328. _viewchildel[10].onclick = function () {
  329. U.MD.DK.VW.SortView(diskinfo, "UserDirectorySize", function (sizeone, sizetwo) { //根据文件大小排序
  330. return sizeone > sizetwo;
  331. });
  332. }
  333. //时间排序排序
  334. _viewchildel[12].onclick = function () {
  335. U.MD.DK.VW.SortView(diskinfo, "UserDirectoryAddTime", function (timeone, timetwo) { //根据添加事件排序
  336. return U.UF.D.sizeComparison(timeone, timetwo) == 1;
  337. });
  338. }
  339. }
  340. /**
  341. * 打印网盘用户资料
  342. *
  343. * @param {string} 用户网盘信息
  344. **/
  345. U.MD.DK.initDiskUserInfo = function (diskinfo) {
  346. var _formel = diskinfo.formel,
  347. _userinfo = diskinfo.userInfo,
  348. _child
  349. ;
  350. //用户头像
  351. $$("img", { "onerror": U.MD.C.imgError,
  352. "onerror": U.MD.C.imgError,
  353. "title": "点击查看",
  354. "src": U.MD.C.getHeadImage(_userinfo.UserThumbnailImageHead)
  355. }, $("#U_MD_DK_LIL", _formel)[0]);
  356. //用户名
  357. $("#U_MD_DK_LIRN", _formel)[0].innerText = _userinfo.UserNickName || _userinfo.UserName;
  358. //用户个人简介
  359. $("#U_MD_DK_LIRZ", _formel)[0].innerText = _userinfo.UserIndividualitysignature || "暂无个人简介";
  360. //用户硬盘信息打印
  361. _child = $("#U_MD_DK_LS", _formel).find("div");
  362. _child[4].innerText = U.UF.UP.minUnitToMaxUnit(_userinfo.UserDiskSpace + "M"); //用户有多少网盘空间
  363. _child[7].innerText = U.UF.UP.minUnitToMaxUnit(_userinfo.FileSize + "B"); //用户用了多少网盘空间
  364. }
  365. /**
  366. * 网盘大小调整
  367. *
  368. * @param {element} 网盘窗体元素
  369. **/
  370. U.MD.DK.size = function (formel) {
  371. var _contentel = $("#U_MD_DK_RZ", formel); //获取中间显示内容区域的大小
  372. _contentel.css("height", _contentel.Parent(2).offsetHeight - 79 + "px"); //设置内容区域的大小
  373. }
  374. //#endregion