method.js 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  1. /*
  2. * vue全局方法
  3. */
  4. import Vue from 'vue';
  5. import store from '@/store/index.js';
  6. // 打印全局方法
  7. Vue.prototype.printPage = function (sid, stitle) {
  8. let oP = {};
  9. if (stitle) {
  10. oP.extraHead = '<div style="text-align: center; padding: 10px 0 20px 0; font-size: 20px;">' + stitle + '</div>';
  11. }
  12. $('#' + sid).printArea(oP);
  13. };
  14. // 全局过滤方法
  15. Vue.prototype.filterColumn = function (value, row, column) {
  16. let propt = null;
  17. // && (row[column.property] || parseInt(row[column.property]) === 0)
  18. console.log('数据', column.property)
  19. if (column && column.property) {
  20. propt = (row[column.property] || row[column.property] === 0) ? (row[column.property] + '') : '';
  21. } else {
  22. // console.log('执行了2', row[column.property])
  23. return false;
  24. }
  25. // if (value || parseInt(value) === 0) {
  26. // 修改全局過濾方法,过滤空白筛选
  27. return propt === value + '';
  28. // }
  29. // return false;
  30. };
  31. /**
  32. * @summary 表格列过滤
  33. * @param {Array} tableColumns 列数组对象(详情请console)
  34. * @param {Array} data 需要过滤的数据
  35. * @param {Array} columns 需要过滤的列名
  36. * @param {Object} desData 列名转义对象 e.g. {'1': '不横切', '2': '一切二', '3': '一切三'}
  37. * */
  38. Vue.prototype.setFilterDatas = function (tableColumns = [], data = [], columns = [], desData = {}) {
  39. let objs = {};
  40. // 过滤数据,得到对象 {order_no: {'001': '001'}, ...}
  41. for (let fitem of data) {
  42. for (let fsitem of columns) {
  43. if (!objs[fsitem]) {
  44. objs[fsitem] = {};
  45. }
  46. if (fitem[fsitem] || fitem[fsitem] === 0) {
  47. // console.log('筛选', fitem[fsitem], objs[fsitem][fitem[fsitem]])
  48. objs[fsitem][fitem[fsitem]] = fitem[fsitem];
  49. } else {
  50. objs[fsitem][''] = '';
  51. }
  52. }
  53. }
  54. for (let [k_, v_] of Object.entries(objs)) {
  55. // k_ 为字段名;v_ 为{"0PAA10":"0PAA10","0PAA12":"0PAA12"}
  56. // objs[k_] = [];
  57. let aItem = [];
  58. for (let v2_ of Object.values(v_)) {
  59. let _test = v2_;
  60. // code -> name
  61. if (desData && desData[k_]) { _test = desData[k_][v2_]; }
  62. aItem.push({
  63. value: v2_,
  64. text: _test
  65. });
  66. }
  67. // 为列加入filters 并自定义 filterReset
  68. for (let tcitem of tableColumns) {
  69. if (tcitem.property === k_) {
  70. tcitem.filters = aItem;
  71. tcitem.filterReset = true;
  72. break;
  73. }
  74. }
  75. }
  76. };
  77. /**
  78. * 列表数据筛选联动监听
  79. * data 筛选后的数据
  80. * tableColumn需要变化的筛选条件
  81. */
  82. Vue.prototype.filterColumnWatch = function (data = [], tableColumn = {}) {
  83. let filters = [];
  84. let property = tableColumn.property;
  85. for (let i in data) {
  86. let flag = true;
  87. for (let j in filters) {
  88. if ((filters[j].value + '') === (data[i][property] + '')) {
  89. flag = false;
  90. break;
  91. }
  92. }
  93. if (flag) {
  94. filters.push({
  95. value: data[i][property],
  96. text: data[i][property]
  97. })
  98. }
  99. }
  100. tableColumn.filters = filters;
  101. }
  102. /**
  103. * 表格合并列
  104. * @param {当前表格显示数据} tableData
  105. * @param {span-method自带参数*} param1
  106. * @param {需要合并的列,如果不传默认全部*} propertyList
  107. */
  108. Vue.prototype.mergeColumn = function (tableData, { row, column, rowIndex, columnIndex }, propertyList) {
  109. let rowsPan = 1;
  110. let thisColomnData = row[column['property']];
  111. let thisMergeFlag = false;
  112. if (typeof (propertyList) === 'undefined') {
  113. thisMergeFlag = true;
  114. } else if (propertyList.includes(column['property'])) {
  115. thisMergeFlag = true;
  116. }
  117. if (thisMergeFlag && thisColomnData) {
  118. if (rowIndex > 0 && thisColomnData === tableData[rowIndex - 1][column['property']]) {
  119. return {
  120. rowspan: 0,
  121. colspan: 0
  122. };
  123. }
  124. while (tableData[rowIndex + rowsPan] && thisColomnData === tableData[rowIndex + rowsPan][column['property']]) {
  125. rowsPan += 1
  126. }
  127. return {
  128. rowspan: rowsPan,
  129. colspan: 1
  130. };
  131. }
  132. }
  133. /**
  134. * 行拖动排序
  135. * @param {当前表格显示数据} tableData
  136. * @param {起始位置} startIndex
  137. * @param {结束位置} endIndex
  138. */
  139. Vue.prototype.changeRowOrder = function (allRow, startIndex, endIndex) {
  140. let temp = [];
  141. for (let i = 0; i < allRow.length; i++) {
  142. if (i === startIndex) {
  143. continue;
  144. } else if (i === endIndex) {
  145. temp.push(allRow[endIndex]);
  146. temp.push(allRow[startIndex]);
  147. } else {
  148. temp.push(allRow[i]);
  149. }
  150. }
  151. return temp;
  152. }
  153. let privilegeData = [];
  154. function getPrivilegeFlag (privilegeMark, privilegeData) {
  155. let privilegeFlag = false;
  156. privilegeData = window.top.localStorage.getItem('ownPrivilege') && window.top.localStorage.getItem('ownPrivilege') !== 'undefined' ? JSON.parse(window.top.localStorage.getItem('ownPrivilege')) : [];
  157. for (let i = 0; i < privilegeData.length; i++) {
  158. let menuPrivilege = privilegeData[i].pId + privilegeData[i].privilege
  159. if (privilegeData[i].menuType === '2' && privilegeMark === menuPrivilege) {
  160. privilegeFlag = true;
  161. break;
  162. } else if (privilegeData[i].children !== null && privilegeData[i].children.length > 0) {
  163. privilegeFlag = getPrivilegeFlag(privilegeMark, privilegeData[i].children);
  164. if (privilegeFlag) break;
  165. else continue;
  166. }
  167. }
  168. return privilegeFlag;
  169. }
  170. Vue.prototype.checkPrivilege = function (privilega) {
  171. privilegeData = window.top.localStorage.getItem('ownPrivilege') && window.top.localStorage.getItem('ownPrivilege') !== 'undefined' ? JSON.parse(window.top.localStorage.getItem('ownPrivilege')) : [];
  172. if (privilegeData.length === 0) {
  173. store.dispatch('generateRoutes').then(function (res) {
  174. privilegeData = window.top.localStorage.getItem('ownPrivilege') && window.top.localStorage.getItem('ownPrivilege') !== 'undefined' ? JSON.parse(window.top.localStorage.getItem('ownPrivilege')) : [];
  175. if (privilegeData.length > 0) {
  176. let privilegeFlag = getPrivilegeFlag(privilega, privilegeData);
  177. return privilegeFlag
  178. }
  179. }).catch(function () {
  180. });
  181. } else {
  182. privilegeData = window.top.localStorage.getItem('ownPrivilege') && window.top.localStorage.getItem('ownPrivilege') !== 'undefined' ? JSON.parse(window.top.localStorage.getItem('ownPrivilege')) : [];
  183. if (privilegeData.length > 0) {
  184. let privilegeFlag = getPrivilegeFlag(privilega, privilegeData);
  185. return privilegeFlag
  186. }
  187. }
  188. }
  189. // 新的权限指令封装
  190. Vue.directive('privilege', {
  191. inserted: function (_el, _binding) {
  192. let menuId = window.activeMenu || window.top.localStorage.getItem('activeMenu');
  193. let checkFoo = (privilegeData, {el, binding} = {el: _el, binding: _binding}) => {
  194. let privilegeFlag = false;
  195. let privilegeMark = binding.value;
  196. // console.log({el, binding})
  197. for (let i = 0; i < privilegeData.length; i++) {
  198. if (privilegeData[i].privilege === privilegeMark || (menuId + privilegeData[i].privilege) === privilegeMark) {
  199. privilegeFlag = true;
  200. break;
  201. }
  202. }
  203. if (!privilegeFlag) {
  204. $(el).hide();
  205. }
  206. };
  207. if (window.privilegeData && window.privilegeData.length > 0) {
  208. checkFoo(window.privilegeData);
  209. } else {
  210. // 将待判断的项目添加至数组,等待数据获取完毕后再进行判断
  211. window.privilegeAwaitItem ? window.privilegeAwaitItem.push({el: _el, binding: _binding}) : window.privilegeAwaitItem = [{el: _el, binding: _binding}];
  212. if (!window.privilegeLoading) {
  213. window.privilegeLoading = true;
  214. getPrivilegeData(({arr, obj}) => {
  215. // console.log(window.privilegeAwaitItem)
  216. window.privilegeData = arr;
  217. for (let item of window.privilegeAwaitItem) {
  218. checkFoo(window.privilegeData, item);
  219. }
  220. window.privilegeAwaitItem = null;
  221. window.privilegeLoading = false;
  222. // console.log(window.privilegeAwaitItem)
  223. });
  224. }
  225. }
  226. },
  227. update: function (el, binding) {
  228. // TODO
  229. },
  230. componentUpdated: function (el, binding) {
  231. // todo
  232. }
  233. })
  234. Vue.prototype.getPrivilegeData = getPrivilegeData;
  235. /**
  236. * 获取当前用户在当前页面内所拥有的所有权限
  237. * @param {Function} foo 回调函数,用于接收数据
  238. */
  239. function getPrivilegeData (foo) {
  240. console.log(window.activeMenu)
  241. let menuId = window.activeMenu || window.top.localStorage.getItem('activeMenu');
  242. Vue.prototype.axios.get('pass/v1/sysmenus/findFunctionMenusByUserId?menuType=2&companyId=' + window.top.localStorage.getItem('companyId') + '&pId=' + menuId)
  243. .then(res => {
  244. if (res.code === '0') {
  245. let arr = [],
  246. obj = {};
  247. for (let item of res.data) {
  248. if (item.pId === menuId) {
  249. arr.push(item);
  250. obj[item.privilege] = true;
  251. }
  252. }
  253. foo({arr, obj});
  254. } else {
  255. foo({arr: [], obj: {}});
  256. this.$message.error(res.message)
  257. }
  258. }).catch(() => {
  259. foo({arr: [], obj: {}});
  260. });
  261. }
  262. Vue.prototype.toFixed = function (number, n) {
  263. if (n > 20 || n < 0) {
  264. throw new RangeError('toFixed() digits argument must be between 0 and 20');
  265. }
  266. // const number = this;
  267. if (isNaN(number) || number >= Math.pow(10, 21)) {
  268. return number.toString();
  269. }
  270. if (typeof (n) === 'undefined' || n === 0) {
  271. return (Math.round(number)).toString();
  272. }
  273. let result = number.toString();
  274. const arr = result.split('.');
  275. // 整数的情况
  276. if (arr.length < 2) {
  277. result += '.';
  278. for (let i = 0; i < n; i += 1) {
  279. result += '0';
  280. }
  281. return result;
  282. }
  283. const integer = arr[0];
  284. const decimal = arr[1];
  285. if (decimal.length === n) {
  286. return result;
  287. }
  288. if (decimal.length < n) {
  289. for (let i = 0; i < n - decimal.length; i += 1) {
  290. result += '0';
  291. }
  292. return result;
  293. }
  294. result = integer + '.' + decimal.substr(0, n);
  295. const last = decimal.substr(n, 1);
  296. // 四舍五入,转换为整数再处理,避免浮点数精度的损失
  297. if (parseInt(last, 10) >= 5) {
  298. const x = Math.pow(10, n);
  299. result = (Math.round((parseFloat(result) * x)) + 1) / x;
  300. result = result.toFixed(n);
  301. }
  302. return result;
  303. };