LeftClick.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351
  1. /*
  2. 存在问题
  3. 1、非能打开文件处理
  4. */
  5. Namespace.register("U.MD.DK.LE"); //Disk左键事件命名空间
  6. //#region 左键事件处理
  7. //#region 当前网盘打开
  8. //文件点击,文件夹点击,及url导航到达区域。
  9. /*
  10. 文件管理区域点击事件,暂时分为:音乐、图片、视频、文件。
  11. 参数一:fileinfo为单击的文件对象
  12. 参数四:userid为用户id。
  13. */
  14. U.MD.DK.LE.openFileDirectory = function (fileinfo, userid) {
  15. var i,
  16. _content,
  17. _div,
  18. _apptype, //打开应用的名字
  19. _applicationame, //应用的名字
  20. _types = US.disk.applicationTypes, //所有的文件类型
  21. _navarray, //导航数组
  22. _extension, //文件扩展名
  23. _diskinfo = U.MD.DK.M.diskOperatingSwitch(userid); //根据用户id找到其所有硬盘数据。
  24. U.UF.EV.stopBubble(); //阻止冒泡
  25. //fileinfo.filetype == 1是文件 == 0 是文件夹
  26. //如果是文件的情况下的处理
  27. if (fileinfo.filetype) {
  28. _extension = fileinfo["UserDirectoryExtendType"].toLocaleLowerCase(); //得到文件扩展名
  29. //根据文件类型进入不同的应用。
  30. _types = US.disk.applicationTypes;
  31. _applicationame;
  32. //判断后缀名归属于哪一个应用程序。得到应用程序的名称。
  33. for (i in _types) {
  34. if (_types[i].types.indexOf(_extension) > -1) { //判断文件类型是否归属该应用
  35. _applicationame = i;
  36. break;
  37. }
  38. }
  39. //根据应用名称打开不同的应用。
  40. switch (_applicationame) {
  41. case "music": //播放制定的音乐,需要流程图
  42. U.MD.DK.LE.music(fileinfo); //音乐控件
  43. break;
  44. case "image": //图片查看,需要流程图
  45. U.MD.DK.LE.img(fileinfo); //图片控件
  46. break;
  47. case "video": //视频处理 需要流程图
  48. U.MD.DK.LE.video(fileinfo); //视频控件
  49. break;
  50. case "text": //文本文件需要流程图
  51. U.MD.D.Txt.textCreate(fileinfo);
  52. break;
  53. case "usoffice": //如果是云端系统自有格式文件。 需要流程图
  54. //excel处理
  55. case "ue": //word处理
  56. U.MD.D.I.openApplication("excel", fileinfo); //弹出应用处理
  57. break;
  58. case "uw": case "un": //word处理
  59. U.MD.D.I.openApplication("word", fileinfo); //弹出应用处理
  60. break;
  61. case "word":
  62. U.A.Request(US.DISK, ["GetFileContent", fileinfo.UserDirectoryID], function (r) {
  63. //获取word内容
  64. if (r.value && r.value.UsOffice !== undefined && r.value.UsOffice != null) {
  65. fileinfo.UsOffice = r.value.UsOffice.unEscapeQuotes();
  66. U.MD.D.I.openApplication("word", fileinfo); //弹出应用处理
  67. }
  68. //如果内容不存在则去office系统中获取
  69. else {
  70. U.A.Request("http://office.1473.cn/Officetohtml.ashx", ["Open", fileinfo.UserDirectoryExtendType, fileinfo.UserFilesServerName], function (r) {
  71. if (r.value.value != undefined) {
  72. r = r.value;
  73. fileinfo.UsOffice = r.value.getBodyHtml().replace(/src=[\'\"]?([^\'\"]*)[\'\"]?/ig, function (str1, str2) {
  74. return "src=\"http://office.1473.cn/usoffice/" + str2 + "\"";
  75. });
  76. U.MD.D.I.openApplication("word", fileinfo); //弹出应用处理
  77. } else {
  78. U.Alert('文档已丢失。。。');
  79. }
  80. });
  81. }
  82. });
  83. break;
  84. case "txt": //txt处理
  85. U.MD.D.I.openApplication("txt", fileinfo); //弹出应用处理
  86. break;
  87. //windows上传的不可识别的文件打开,直接跳转到下载页面。
  88. default:
  89. U.MD.DK.RE.downloadFile(fileinfo.UserDirectoryID, false);
  90. break;
  91. }
  92. }
  93. //打印目录信息
  94. else {
  95. //添加前进后退事件
  96. U.UF.N.addEvent(function () {
  97. U.MD.DK.LE.openDirectory(fileinfo, userid); //打开目录
  98. }, "disk" + userid);
  99. }
  100. //设置文件及文件夹的修改时间,打开文件或者文件夹时,把打开文件的时间记录到数据库。以实现最近访问文件,最近访问文件夹的功能。fileinfo.filetype == 0 表示文件夹 fileinfo.filetype == 1表示文件
  101. if (fileinfo.UserDirectoryDeep > 1) {
  102. //filetype = 0的情况是文件夹的处理
  103. if (fileinfo.filetype == 0) {
  104. U.A.Request(US.DISK, ["UpdateDirectoryInfo", fileinfo.UserDirectoryID, ""], function () { });
  105. }
  106. //文件的处理
  107. else {
  108. U.A.Request(US.DISK, ["UpdateFileInfo", fileinfo.UserDirectoryID, ""], function () { });
  109. }
  110. //设置文件更新时间
  111. fileinfo["UserDirectoryModifyTime"] = U.UF.D.toTimeStamp(); //修改前台的时间
  112. }
  113. }
  114. /**
  115. * 打开目录
  116. * @param {array} 需要输出的文件或者文件夹信息
  117. * @param {element} 输出到那个区域
  118. **/
  119. U.MD.DK.LE.openDirectory = function (fileinfo, userid) {
  120. var _groupinfo,
  121. _groupdirectory,
  122. _leftel, //左边元素
  123. _diskinfo = U.MD.DK.M.diskOperatingSwitch(userid), //获取网盘信息
  124. _content = $("#U_MD_DK_RZ", _diskinfo.formel)[0]; //获取打印内容的元素
  125. _diskinfo.selectElement = []; //切换文件夹修改选择文件
  126. _content.innerText = ""; //清空内容
  127. _diskinfo.directoryid = fileinfo["UserDirectoryID"]; //设置当前打开目录的id.看全集变量US.disk.Disks
  128. //设置url重写
  129. U.MD.N.urlWrite("disk/" + _diskinfo.userInfo.UserId + "/" + _diskinfo.directoryid, _diskinfo.userInfo.UserNickName + "的网盘");
  130. //判断这个目录下面有没有孩子节点,如果有就可以直接打印,如果没有那么需要去数据库取数据
  131. if (fileinfo.Child) { //已加载文件
  132. U.MD.DK.LE.loadDirectory(fileinfo, _diskinfo, userid);
  133. }
  134. //去数据库取文件夹及文件信息,异步加载
  135. else {
  136. //如果是最新文档的数据处理
  137. if (_diskinfo.directoryOrFiles[0].UserDirectoryID == fileinfo.UserDirectoryID) {
  138. U.MD.DK.LE.getNewDocument(userid, fileinfo, _content);
  139. }
  140. //如果是点击他人邀请或者是我的协同的处理
  141. else if (_diskinfo.directoryOrFiles[1].UserDirectoryID == fileinfo.UserDirectoryID || _diskinfo.directoryOrFiles[2].UserDirectoryID == fileinfo.UserDirectoryID) {
  142. if (US.friend.group) {
  143. _groupinfo = US.friend.group.concat();
  144. _diskinfo.groups = _groupdirectory = U.MD.DK.getGroupDirectory(_groupinfo, _diskinfo.directoryOrFiles, userid); //初始化
  145. _diskinfo.directoryOrFiles = _diskinfo.directoryOrFiles.concat(_groupdirectory); //合并数组
  146. }
  147. U.MD.DK.LE.loadDirectory(fileinfo, _diskinfo, userid); //打印目录信息
  148. }
  149. //获取文件夹下面的文件或者文件夹
  150. else {
  151. U.MD.DK.LE.getChildsByDirectoryId(userid, fileinfo, _content);
  152. }
  153. }
  154. }
  155. /**
  156. * 初始化目录
  157. * @param {object} 文档信息
  158. * @param {object} 网盘信息
  159. * @param {string} 用户id
  160. **/
  161. U.MD.DK.LE.loadDirectory = function (fileinfo, diskinfo, userid) {
  162. //展开下级文件夹
  163. var _childs = fileinfo.Child || [],
  164. _leftel = $("#L" + fileinfo["UserDirectoryID"], diskinfo.formel)[0],
  165. _content = $("#U_MD_DK_RZ", diskinfo.formel)[0];
  166. //左边树目录处理
  167. if (_leftel) {
  168. U.MD.DK.LL.printLeftTreeDirectory(U.Json.select(_childs, { "filetype": 0 }), _leftel, userid); //如果左边数目显示了
  169. }
  170. $("#U_MD_DK_RKR", diskinfo.formel)[0].innerHTML = "当前文件的数量:" + _childs.length;
  171. diskinfo.currentDirectoryFile = _childs; //把当前显示打印的资料显示到网盘中。
  172. //头部导航打印
  173. var _navarray = U.MD.DK.C.getAncestors(fileinfo, diskinfo); //获取需要输出的导航信息,这里直接获取这个目录一条线上的祖先元素
  174. U.MD.DK.LL.printNavigation(_navarray, $("#U_MD_DK_RYB", diskinfo.formel)[0], userid); //打印出导航数据
  175. //打印数据
  176. U.MD.DK.VW.printContent(_childs, _content);
  177. //给当前目录设置权限
  178. U.MD.DK.C.getDirectoryPermissions(fileinfo.UserDirectoryID, diskinfo);
  179. }
  180. //加载当前网盘内容
  181. //
  182. //* @param {string} 用户id
  183. //* @param {object} 目录信息
  184. //* @param {element} loading的元素。
  185. //* @param {callback} 回调函数
  186. //* @returns {} 无
  187. //
  188. U.MD.DK.LE.getChildsByDirectoryId = function (userid, fileinfo, loading, cb) {
  189. //如果没有孩子节点,则去数据库取数据。
  190. U.A.Request(US.DISK, ["GetChildsByDirectoryId", userid, fileinfo.UserDirectoryID, fileinfo.GroupID], U.MD.DK.LE.asynGetChildsByDirectoryId, [loading, userid, fileinfo, cb]);
  191. }
  192. //加载当前网盘内容
  193. //
  194. //* @param {string} 用户id
  195. //* @param {object} 目录信息
  196. //* @param {element} loading的元素。
  197. //* @param {callback} 回调函数
  198. //* @returns {} 无
  199. //
  200. U.MD.DK.LE.getNewDocument = function (userid, fileinfo, loading, cb) {
  201. //用户必须登录才能查看自己网盘的内容
  202. if (US.userInfo.userid) {
  203. //如果没有孩子节点,则去数据库取数据。
  204. U.A.Request(US.CD, [US.DB, "UseStudio_Office", "GetCollaborativeDocument", US.userInfo.userid, "00000000-0000-0000-0000-000000000000", "", 0, 0, 100], function (r) {
  205. var i;
  206. for (i = 0; i < r.value.length; i++) {
  207. r.value[i] = new U.MD.DK.M.entity(r.value[i].UserFilesID, r.value[i].UserFilesSize, r.value[i].UserDirectoryID, r.value[i].UserFilesName, r.value[i].UserFilesName, r.value[i].UserFilesExtendName, r.value[i].UserFilesServerName, r.value[i].UserFilesAddTime, "", "9999", r.value[i].UserFilesModifyTime, r.value[i].UserDirectoryEncrypt, 1, r.value[i].UserFilesDescript, r.value[i].UserDirectoryEncrypt, "", r.value[i].UserID, US.userInfo.UserNickName, US.userInfo.username, US.userInfo.UserThumbnailImageHead);
  208. }
  209. U.MD.DK.LE.asynGetChildsByDirectoryId(r);
  210. }, [loading, userid, fileinfo, cb]);
  211. }
  212. //直接打印空数据
  213. else {
  214. U.MD.DK.LE.asynGetChildsByDirectoryId({ "context": [loading, userid, fileinfo, cb], "value": [] });
  215. }
  216. }
  217. /**
  218. * 获取网盘数据异步,这里处理了后台数据返回后吧数据写到了全局变量US.disk.Disks[userid][0]和US.disk.Disks[userid][4]中
  219. *
  220. * @param {object} ajax异步数据
  221. */
  222. U.MD.DK.LE.asynGetChildsByDirectoryId = function (r) {
  223. var _context = r.context, //获取异步的传参
  224. _userid = _context[1], //用户的id
  225. _fileinfo = _context[2], //文件的信息
  226. _cb = _context[3], //回调函数
  227. _dirid = _fileinfo.UserDirectoryID, //当前获取数据的目录id
  228. _diskinfo = U.MD.DK.M.diskOperatingSwitch(_userid); //获取用户的disk信息
  229. r = r.value;
  230. //把获取的数据设置到网盘全局变量中,为啥有两种数据结构?
  231. U.Json.del(_diskinfo.directoryOrFiles, { "UserDirectoryParentID": _dirid }); //移除原本有的目录文件
  232. _fileinfo.Child = r; //设置目录的子目录或者文件
  233. U.Json.add(r, { "Parent": _fileinfo });
  234. //添加文件
  235. U.MD.DK.M.entity.add(r, _diskinfo); //把文件写入到全局变量中 在_diskinfo[0]和_diskinfo[4]写入获取文件的信息
  236. //执行回调处理
  237. if (U.UF.C.isFunction(_cb)) {
  238. _cb();
  239. }
  240. //否则执行获取数据后打开文件的处理
  241. else if (_fileinfo.UserDirectoryID == _diskinfo.directoryid) {
  242. //如果用户还在等待当前目录信息出现,那么就展示,如果用户在loading的时候已经切换到其他地方去查看,那么则不展示数据更新
  243. U.MD.DK.LE.openDirectory(_fileinfo, _userid); //打开目录操作
  244. }
  245. }
  246. /**
  247. * 根据应用名称打开音乐播放器
  248. *
  249. *参数一:fileinfo为单击的文件对象
  250. */
  251. U.MD.DK.LE.music = function (fileinfo) {
  252. var _userid = US.disk.UserDisk.userInfo.UserId; //当前打开网盘ID
  253. var _diskinfo = U.MD.DK.M.diskOperatingSwitch(_userid); //磁盘信息
  254. // U.UF.DL.asynLoadCss({ "href": "/css/Controls/Basic/Music.css", type: "text/css", rel: "stylesheet" }); //动态添加css文件
  255. // U.UF.DL.asynLoadJs({ type: "text/javascript", src: "/js/Controls/Basic/Music.js" }, function () {//动态添加js文件
  256. var _music = U.Json.select(_diskinfo.currentDirectoryFile, { "UserDirectoryExtendType": "mp3" }); //获取当前打开的文件夹的所有音乐文件信息
  257. var _arr = []; //空数组
  258. var _num1 = ""; //索引位置
  259. for (var _num = 0; _num < _music.length; _num++) {//当前打开的文件夹的所有音乐文件信息
  260. _arr[_num] = {
  261. title: _music[_num].UserallDirectoryName, //音乐名
  262. author: "", //歌手名
  263. src: "http://fs.1473.cn/" + _music[_num].UserFilesServerName, //音乐播放路径
  264. cover: _music[_num].UserThumbnailImageHead, //音乐封面路径
  265. lrc: ""//歌词
  266. }
  267. if (_music[_num].UserDirectoryID == fileinfo.UserDirectoryID) {//判断在哪个音乐文件打开的
  268. _num1 = _num; //索引位置
  269. }
  270. }
  271. U.MD.UI.music(_arr, _num1, true); //音乐控件
  272. if (!$('#U_MD_D_T_taskbar_music')[0]) {
  273. U.MD.UI.music.player.id = "music";
  274. U.MD.D.T.taskbar({ "id": "music", "backgroundPostion": "-144px -296px", "name": "音乐播放器", "forms": U.MD.UI.music.player, "click": function () { U.UF.F.topWindow(U.MD.UI.music.player.form); } });
  275. }
  276. // });
  277. }
  278. /**
  279. * 根据应用名称打开图片
  280. *
  281. *参数一:fileinfo为单击的文件对象
  282. */
  283. U.MD.DK.LE.img = function (fileinfo) {
  284. if (US.disk.UserDisk) {
  285. var _userid = US.disk.UserDisk.userInfo.UserId; //当前打开网盘ID
  286. var _diskinfo = U.MD.DK.M.diskOperatingSwitch(_userid); //磁盘信息
  287. }
  288. U.UF.DL.asynLoadCss({ "href": "/css/Controls/Basic/Picture.css", type: "text/css", rel: "stylesheet" }); //动态添加css文件
  289. U.UF.DL.asynLoadJs({ type: "text/javascript", src: "/js/Controls/Basic/Picture.js" }, function () {
  290. var _arr = []; //空数组
  291. var _num = 0; //所有图片的数量
  292. var _num2 = _num; //索引位置
  293. if (_diskinfo) {
  294. for (var _num1 = 0; _num1 < _diskinfo.currentDirectoryFile.length; _num1++) {//当前打开文件夹的文件
  295. if ((_diskinfo.currentDirectoryFile[_num1].UserDirectoryExtendType == "png") || (_diskinfo.currentDirectoryFile[_num1].UserDirectoryExtendType == "jpg") || (_diskinfo.currentDirectoryFile[_num1].UserDirectoryExtendType == "gif")) {
  296. _arr[_num] = "http://fs.1473.cn/" + _diskinfo.currentDirectoryFile[_num1].UserFilesServerName //图片地址
  297. if (_diskinfo.currentDirectoryFile[_num1].UserDirectoryID == fileinfo.UserDirectoryID) {//判断在哪个音乐文件打开的
  298. _num2 = _num; //索引位置
  299. }
  300. _num++; //存储图片数组的数据
  301. }
  302. }
  303. }
  304. else {
  305. _arr.push(fileinfo);
  306. }
  307. U.MD.UI.picture(_arr, _num2)//图片控件
  308. U.UF.F.topWindow($('#U_MD_UI_PictureForm')[0], true); //窗体置顶
  309. });
  310. }
  311. /**
  312. * 根据应用名称打开视频
  313. *
  314. *参数一:fileinfo为单击的文件对象
  315. */
  316. U.MD.DK.LE.video = function (fileinfo) {
  317. new U.UF.UI.form(fileinfo.UserallDirectoryName, "", { "id": "aaa", "style": { "width": "780px", "height": "325px", "margin": "0" } }, { istop: true, isstretching: false, isenlarge: false, isnarrow: false }); //窗体
  318. U.UF.DL.asynLoadCss({ rel: "stylesheet", type: "text/css", href: "/css/Controls/Basic/Video.css" }); //动态添加css文件
  319. U.UF.DL.asynLoadJs({ src: "/js/Controls/Basic/Video.js", "charset": "utf-8", "type": "text/javascript" }, function () {//动态添加js文件
  320. U.MD.UI.video(("http://fs.1473.cn/" + fileinfo.UserFilesServerName), 780, 300, false, $("#aaa")[0]); //视频控件
  321. $(".U_MD_UI_video_VideoDiv")[$(".U_MD_UI_video_VideoDiv").length - 1].style.position = "absolute"; //视频的位置
  322. $(".U_MD_UI_video_VideoDiv")[$(".U_MD_UI_video_VideoDiv").length - 1].style.top = "25px"; //视频的定位高低
  323. $(".U_MD_UI_video_VideoDiv")[$(".U_MD_UI_video_VideoDiv").length - 1].style.left = "0px"; //视频的定位左右
  324. });
  325. }
  326. //#endregion